@d-id/client-sdk 1.1.48 → 1.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +479 -482
- package/dist/index.umd.cjs +5 -5
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(function(W,ke){typeof exports=="object"&&typeof module<"u"?ke(exports):typeof define=="function"&&define.amd?define(["exports"],ke):(W=typeof globalThis<"u"?globalThis:W||self,ke(W.index={}))})(this,function(W){"use strict";var Of=Object.defineProperty;var Af=(W,ke,wt)=>ke in W?Of(W,ke,{enumerable:!0,configurable:!0,writable:!0,value:wt}):W[ke]=wt;var Rn=(W,ke,wt)=>Af(W,typeof ke!="symbol"?ke+"":ke,wt);class ke extends Error{constructor({kind:t,description:i,error:r}){super(JSON.stringify({kind:t,description:i}));Rn(this,"kind");Rn(this,"description");Rn(this,"error");this.kind=t,this.description=i,this.error=r}}class wt extends ke{constructor(e,t){super({kind:"ChatCreationFailed",description:`Failed to create ${t?"persistent":""} chat, mode: ${e}`})}}class Br extends ke{constructor(e){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${e}`})}}class Rt extends ke{constructor(t,i){super({kind:"ValidationError",description:t});Rn(this,"key");this.key=i}}class Vr extends ke{constructor(e){super({kind:"WSError",description:e})}}var qr=(n=>(n.TRIAL="trial",n.BASIC="basic",n.ENTERPRISE="enterprise",n.LITE="lite",n.ADVANCED="advanced",n))(qr||{}),Kr=(n=>(n.TRIAL="deid-trial",n.PRO="deid-pro",n.ENTERPRISE="deid-enterprise",n.LITE="deid-lite",n.ADVANCED="deid-advanced",n.BUILD="deid-api-build",n.LAUNCH="deid-api-launch",n.SCALE="deid-api-scale",n))(Kr||{}),zr=(n=>(n.Created="created",n.Started="started",n.Done="done",n.Error="error",n.Rejected="rejected",n.Ready="ready",n))(zr||{}),Wr=(n=>(n.Unrated="Unrated",n.Positive="Positive",n.Negative="Negative",n))(Wr||{}),pe=(n=>(n.Functional="Functional",n.TextOnly="TextOnly",n.Maintenance="Maintenance",n.Playground="Playground",n.DirectPlayback="DirectPlayback",n.Off="Off",n))(pe||{}),_e=(n=>(n.Embed="embed",n.Query="query",n.Partial="partial",n.Answer="answer",n.Transcribe="transcribe",n.Complete="done",n))(_e||{}),Gr=(n=>(n.KnowledgeProcessing="knowledge/processing",n.KnowledgeIndexing="knowledge/indexing",n.KnowledgeFailed="knowledge/error",n.KnowledgeDone="knowledge/done",n))(Gr||{}),Hr=(n=>(n.Knowledge="knowledge",n.Document="document",n.Record="record",n))(Hr||{}),Jr=(n=>(n.Pdf="pdf",n.Text="text",n.Html="html",n.Word="word",n.Json="json",n.Markdown="markdown",n.Csv="csv",n.Excel="excel",n.Powerpoint="powerpoint",n.Archive="archive",n.Image="image",n.Audio="audio",n.Video="video",n))(Jr||{}),li=(n=>(n.Clip="clip",n.Talk="talk",n.Expressive="expressive",n))(li||{});const Rc=n=>{switch(n){case"clip":return"clip";case"talk":return"talk";case"expressive":return"expressive";default:throw new Error(`Unknown video type: ${n}`)}};var G=(n=>(n.Start="START",n.Stop="STOP",n))(G||{}),ze=(n=>(n.Strong="STRONG",n.Weak="WEAK",n.Unknown="UNKNOWN",n))(ze||{}),Pe=(n=>(n.Idle="IDLE",n.Loading="LOADING",n.Talking="TALKING",n))(Pe||{}),re=(n=>(n.ChatAnswer="chat/answer",n.ChatPartial="chat/partial",n.ChatAudioTranscribed="chat/audio-transcribed",n.StreamDone="stream/done",n.StreamStarted="stream/started",n.StreamFailed="stream/error",n.StreamReady="stream/ready",n.StreamCreated="stream/created",n.StreamInterrupt="stream/interrupt",n.StreamVideoCreated="stream-video/started",n.StreamVideoDone="stream-video/done",n.StreamVideoError="stream-video/error",n.StreamVideoRejected="stream-video/rejected",n))(re||{}),te=(n=>(n.New="new",n.Fail="fail",n.Connected="connected",n.Connecting="connecting",n.Closed="closed",n.Completed="completed",n.Disconnecting="disconnecting",n.Disconnected="disconnected",n))(te||{}),We=(n=>(n.Legacy="legacy",n.Fluent="fluent",n))(We||{}),rn=(n=>(n.Livekit="livekit",n))(rn||{}),$r=(n=>(n.Amazon="amazon",n.AzureOpenAi="azure-openai",n.Microsoft="microsoft",n.Afflorithmics="afflorithmics",n.Elevenlabs="elevenlabs",n))($r||{}),Qr=(n=>(n.Public="public",n.Premium="premium",n.Private="private",n))(Qr||{});const _c=45*1e3,Ic="X-Playground-Chat",sn="https://api.d-id.com",Dc="wss://notifications.d-id.com",Mc="79f81a83a67430be2bc0fd61042b8faa",Oc=(...n)=>{},Yr=n=>new Promise(e=>setTimeout(e,n)),Ut=(n=16)=>{const e=new Uint8Array(n);return window.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("").slice(0,13)},Xr=n=>n.type==="clip"&&n.presenter_id.startsWith("v2_")?"clip_v2":n.type,hi=n=>n===li.Expressive,Ac=n=>[pe.TextOnly,pe.Playground,pe.Maintenance].includes(n),Zr=n=>n&&[pe.DirectPlayback,pe.Off].includes(n);function xc(n,e){let t;return{promise:new Promise((r,s)=>{t=setTimeout(()=>s(new Error(e)),n)}),clear:()=>clearTimeout(t)}}async function fi(n,e){const t={limit:(e==null?void 0:e.limit)??3,delayMs:(e==null?void 0:e.delayMs)??0,timeout:(e==null?void 0:e.timeout)??3e4,timeoutErrorMessage:(e==null?void 0:e.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(e==null?void 0:e.shouldRetryFn)??(()=>!0),onRetry:(e==null?void 0:e.onRetry)??(()=>{})};let i;for(let r=1;r<=t.limit;r++)try{if(!t.timeout)return await n();const{promise:s,clear:a}=xc(t.timeout,t.timeoutErrorMessage),o=n().finally(a);return await Promise.race([o,s])}catch(s){if(i=s,!t.shouldRetryFn(s)||r>=t.limit)throw s;await Yr(t.delayMs),t.onRetry(s)}throw i}function mi(n){if(n!==void 0)return window.localStorage.setItem("did_external_key_id",n),n;let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=Ut();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Lc=Ut();function es(n,e){if(n.type==="bearer")return`Bearer ${n.token}`;if(n.type==="basic")return`Basic ${btoa(`${n.username}:${n.password}`)}`;if(n.type==="key")return`Client-Key ${n.clientKey}.${mi(e)}_${Lc}`;throw new Error(`Unknown auth type: ${n}`)}const Nc=n=>fi(n,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:e=>e.status===429});function pi(n,e=sn,t,i){const r=async(s,a)=>{const{skipErrorHandler:o,...c}=a||{},d=await Nc(()=>fetch(e+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:es(n,i),"Content-Type":"application/json"}}));if(!d.ok){let u=await d.text().catch(()=>`Failed to fetch with status ${d.status}`);const l=new Error(u);throw t&&!o&&t(l,{url:s,options:c,headers:d.headers}),l}return d.json()};return{get(s,a){return r(s,{...a,method:"GET"})},post(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"POST"})},delete(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"DELETE"})},patch(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"PATCH"})}}}function Uc(n,e=sn,t,i){const r=pi(n,`${e}/agents`,t,i);return{create(s,a){return r.post("/",s,a)},getAgents(s,a){return r.get(`/${s?`?tag=${s}`:""}`,a).then(o=>o??[])},getById(s,a){return r.get(`/${s}`,a)},delete(s,a){return r.delete(`/${s}`,void 0,a)},update(s,a,o){return r.patch(`/${s}`,a,o)},newChat(s,a,o){return r.post(`/${s}/chat`,a,o)},chat(s,a,o,c){return r.post(`/${s}/chat/${a}`,o,c)},createRating(s,a,o,c){return r.post(`/${s}/chat/${a}/ratings`,o,c)},updateRating(s,a,o,c,d){return r.patch(`/${s}/chat/${a}/ratings/${o}`,c,d)},deleteRating(s,a,o,c){return r.delete(`/${s}/chat/${a}/ratings/${o}`,c)},getSTTToken(s,a){return r.get(`/${s}/stt-token`,a)}}}function Fc(n){var r,s,a,o;const e=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",t=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},i=n.presenter;return{$os:`${t()}`,isMobile:`${e()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Xr(i),agentVoice:{voiceId:(s=(r=n.presenter)==null?void 0:r.voice)==null?void 0:s.voice_id,provider:(o=(a=n.presenter)==null?void 0:a.voice)==null?void 0:o.type}}}function jc(n){var t,i,r,s,a,o;const e=(t=n.llm)==null?void 0:t.prompt_customization;return{agentType:Xr(n.presenter),owner_id:n.owner_id??"",promptVersion:(i=n.llm)==null?void 0:i.prompt_version,behavior:{role:e==null?void 0:e.role,personality:e==null?void 0:e.personality,instructions:(r=n.llm)==null?void 0:r.instructions},temperature:(s=n.llm)==null?void 0:s.temperature,knowledgeSource:e==null?void 0:e.knowledge_source,starterQuestionsCount:(o=(a=n.knowledge)==null?void 0:a.starter_message)==null?void 0:o.length,topicsToAvoid:e==null?void 0:e.topics_to_avoid,maxResponseLength:e==null?void 0:e.max_response_length,agentId:n.id,access:n.access,name:n.preview_name,...n.access==="public"?{from:"agent-template"}:{}}}const Bc=n=>n.reduce((e,t)=>e+t,0),ts=n=>Bc(n)/n.length;function Vc(n,e,t){var c,d,u;const{event:i,...r}=n,{template:s}=(e==null?void 0:e.llm)||{},{language:a}=((c=e==null?void 0:e.presenter)==null?void 0:c.voice)||{};return{...r,llm:{...r.llm,template:s},script:{...r.script,provider:{...(d=r==null?void 0:r.script)==null?void 0:d.provider,language:a}},stitch:(e==null?void 0:e.presenter.type)==="talk"?(u=e==null?void 0:e.presenter)==null?void 0:u.stitch:void 0,...t}}function ns(n){"requestIdleCallback"in window?requestIdleCallback(n,{timeout:2e3}):setTimeout(n,0)}let gi={};const qc="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Kc(n){const e=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:n.token||"testKey",distinct_id:mi(n.externalId),agentId:n.agentId,additionalProperties:{id:mi(n.externalId),...n.mixpanelAdditionalProperties||{}},isEnabled:n.isEnabled??!0,getRandom:Ut,enrich(t){this.additionalProperties={...this.additionalProperties,...t}},async track(t,i,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:s,...a}=i||{},o=r||Date.now(),c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...this.additionalProperties,...a,agentId:this.agentId,source:e,token:this.token,time:o,$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch(qc,{...c,keepalive:!0}).catch(d=>console.error("Analytics tracking error:",d)),Promise.resolve()},linkTrack(t,i,r,s){gi[t]||(gi[t]={events:{},resolvedDependencies:[]}),s.includes(r)||s.push(r);const a=gi[t];if(a.events[r]={props:i},a.resolvedDependencies.push(r),s.every(c=>a.resolvedDependencies.includes(c))){const c=s.reduce((d,u)=>a.events[u]?{...d,...a.events[u].props}:d,{});this.track(t,c),a.resolvedDependencies=a.resolvedDependencies.filter(d=>!s.includes(d)),s.forEach(d=>{delete a.events[d]})}}}}function vi(){let n=0;return{reset:()=>n=0,update:()=>n=Date.now(),get:(e=!1)=>e?Date.now()-n:n}}const Ge=vi(),yi=vi(),is=vi();function rs(n){return n===pe.Playground?{headers:{[Ic]:"true"}}:{}}async function ss(n,e,t,i,r=!1,s){try{return!s&&!Zr(i)&&(s=await e.newChat(n.id,{persist:r},rs(i)),t.track("agent-chat",{event:"created",chatId:s.id,mode:i})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??i}}catch(a){throw zc(a)==="InsufficientCreditsError"?new Error("InsufficientCreditsError"):new Error("Cannot create new chat")}}const zc=n=>{try{const e=JSON.parse(n.message);return e==null?void 0:e.kind}catch{return"UnknownError"}};function Wc(n){return n&&n.length>0?n:[]}function Gc(n,e,t,i){const r=pi(n,`${e}/v2/agents/${t}`,i);return{async createStream(s){return r.post("/sessions",s)}}}const as=(n,e)=>(t,i)=>n&&console.log(`[${e}] ${t}`,i??"");function Hc(n,e,t){const i=(e.timestamp-n.timestamp)/1e3;return{duration:i,bytesReceived:e.bytesReceived-n.bytesReceived,bitrate:Math.round((e.bytesReceived-n.bytesReceived)*8/i),packetsReceived:e.packetsReceived-n.packetsReceived,packetsLost:e.packetsLost-n.packetsLost,framesDropped:e.framesDropped-n.framesDropped,framesDecoded:e.framesDecoded-n.framesDecoded,jitter:e.jitter,avgJitterDelayInInterval:(e.jitterBufferDelay-n.jitterBufferDelay)/(e.jitterBufferEmittedCount-n.jitterBufferEmittedCount),jitterBufferEmittedCount:e.jitterBufferEmittedCount-n.jitterBufferEmittedCount,jitterBufferDelay:(e.jitterBufferDelay-n.jitterBufferDelay)/i,framesPerSecond:e.framesPerSecond,freezeCount:e.freezeCount-n.freezeCount,freezeDuration:e.freezeDuration-n.freezeDuration,lowFpsCount:t}}function Jc(n){return n.filter(e=>e.freezeCount>0||e.framesPerSecond<21||e.framesDropped>0||e.packetsLost>0).map(e=>{const{timestamp:t,...i}=e,r=[];return e.freezeCount>0&&r.push("freeze"),e.framesPerSecond<21&&r.push("low fps"),e.framesDropped>0&&r.push("frames dropped"),e.packetsLost>0&&r.push("packet loss"),{...i,causes:r}})}function $c(n){let e="",t=0;for(const i of n.values()){if(i&&i.type==="codec"&&i.mimeType.startsWith("video")&&(e=i.mimeType.split("/")[1]),i&&i.type==="candidate-pair"){const r=i.currentRoundTripTime,a=i.nominated===!0;r>0&&(a||t===0)&&(t=r)}if(i&&i.type==="inbound-rtp"&&i.kind==="video")return{codec:e,rtt:t,timestamp:i.timestamp,bytesReceived:i.bytesReceived,packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,frameWidth:i.frameWidth,frameHeight:i.frameHeight,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.totalFreezesDuration}}return{}}function os(n,e,t){const i=n.map((c,d)=>d===0?t?{timestamp:c.timestamp,duration:0,rtt:c.rtt,bytesReceived:c.bytesReceived-t.bytesReceived,bitrate:(c.bytesReceived-t.bytesReceived)*8/(e/1e3),packetsReceived:c.packetsReceived-t.packetsReceived,packetsLost:c.packetsLost-t.packetsLost,framesDropped:c.framesDropped-t.framesDropped,framesDecoded:c.framesDecoded-t.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-t.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-t.jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-t.jitterBufferDelay)/(c.jitterBufferEmittedCount-t.jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-t.freezeCount,freezeDuration:c.freezeDuration-t.freezeDuration}:{timestamp:c.timestamp,rtt:c.rtt,duration:0,bytesReceived:c.bytesReceived,bitrate:c.bytesReceived*8/(e/1e3),packetsReceived:c.packetsReceived,packetsLost:c.packetsLost,framesDropped:c.framesDropped,framesDecoded:c.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount,avgJitterDelayInInterval:c.jitterBufferDelay/c.jitterBufferEmittedCount,framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount,freezeDuration:c.freezeDuration}:{timestamp:c.timestamp,duration:e*d/1e3,rtt:c.rtt,bytesReceived:c.bytesReceived-n[d-1].bytesReceived,bitrate:(c.bytesReceived-n[d-1].bytesReceived)*8/(e/1e3),packetsReceived:c.packetsReceived-n[d-1].packetsReceived,packetsLost:c.packetsLost-n[d-1].packetsLost,framesDropped:c.framesDropped-n[d-1].framesDropped,framesDecoded:c.framesDecoded-n[d-1].framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-n[d-1].jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-n[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-n[d-1].jitterBufferDelay)/(c.jitterBufferEmittedCount-n[d-1].jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-n[d-1].freezeCount,freezeDuration:c.freezeDuration-n[d-1].freezeDuration}),r=Jc(i),s=r.reduce((c,d)=>c+(d.causes.includes("low fps")?1:0),0),a=i.filter(c=>!!c.avgJitterDelayInInterval).map(c=>c.avgJitterDelayInInterval),o=i.filter(c=>!!c.rtt).map(c=>c.rtt);return{webRTCStats:{anomalies:r,minRtt:Math.min(...o),avgRtt:ts(o),maxRtt:Math.max(...o),aggregateReport:Hc(n[0],n[n.length-1],s),minJitterDelayInInterval:Math.min(...a),maxJitterDelayInInterval:Math.max(...a),avgJitterDelayInInterval:ts(a)},codec:n[0].codec,resolution:`${n[0].frameWidth}x${n[0].frameHeight}`}}const _n=100,Qc=Math.max(Math.ceil(400/_n),1),Yc=.25,Xc=.28;function Zc(){let n=0,e,t,i=0;return r=>{for(const s of r.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const a=s.jitterBufferDelay,o=s.jitterBufferEmittedCount;if(t&&o>t){const u=a-e,l=o-t;i=u/l}e=a,t=o;const c=s.framesDecoded,d=c-n>0;return n=c,{isReceiving:d,avgJitterDelayInInterval:i,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:i}}}function cs(n,e,t,i,r){let s=null,a=[],o,c=0,d=!1,u=ze.Unknown,l=ze.Unknown,h=0,m=0;const v=Zc();async function p(){const S=await n();if(!S)return;const{isReceiving:k,avgJitterDelayInInterval:R,freezeCount:w}=v(S),g=$c(S);if(k)c=0,h=w-m,l=R<Yc?ze.Strong:R>Xc&&h>1?ze.Weak:u,l!==u&&(r==null||r(l),u=l,m+=h,h=0),d||(i==null||i(G.Start),o=a[a.length-1],a=[],d=!0),a.push(g);else if(d&&(c++,c>=Qc)){const b=os(a,_n,o);i==null||i(G.Stop,b),e()||t(),m=w,d=!1}}return{start:()=>{s||(s=setInterval(p,_n))},stop:()=>{s&&(clearInterval(s),s=null)},getReport:()=>os(a,_n,o)}}async function ed(){try{return await Promise.resolve().then(()=>wf)}catch{throw new Error("LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client")}}const td={excellent:ze.Strong,good:ze.Strong,poor:ze.Weak,lost:ze.Unknown,unknown:ze.Unknown},an=JSON.stringify({kind:"InternalServerError",description:"Stream Error"});var bi=(n=>(n.Chat="lk.chat",n.Speak="did.speak",n.Interrupt="did.interrupt",n))(bi||{});function ki(n,e,t){var i,r;throw e("Failed to connect to LiveKit room:",n),(i=t.onConnectionStateChange)==null||i.call(t,te.Fail,"internal:init-error"),(r=t.onError)==null||r.call(t,n,{sessionId:""}),n}async function nd(n,e,t){var Cc;const i=as(t.debug||!1,"LiveKitStreamingManager"),{Room:r,RoomEvent:s,ConnectionState:a,Track:o}=await ed(),{callbacks:c,auth:d,baseURL:u,analytics:l,microphoneStream:h}=t;let m=null,v=!1;const p=We.Fluent;let S=null,k=null,R=null,w=null,g=!1;m=new r({adaptiveStream:!1,dynacast:!0});let b=null;const P=2e4;let L=Pe.Idle;const U=Gc(d,u||sn,n,c.onError);let A,T,D;try{const x=await U.createStream({transport_provider:rn.Livekit,chat_persist:e.chat_persist??!0}),{id:j,session_token:z,session_url:ne}=x;(Cc=c.onStreamCreated)==null||Cc.call(c,{session_id:j,stream_id:j,agent_id:n}),A=j,T=z,D=ne,await m.prepareConnection(D,T)}catch(x){ki(x,i,c)}if(!D||!T||!A)return Promise.reject(new Error("Failed to initialize LiveKit stream"));m.on(s.ConnectionStateChanged,J).on(s.ConnectionQualityChanged,Q).on(s.ParticipantConnected,Y).on(s.ParticipantDisconnected,me).on(s.TrackSubscribed,ae).on(s.TrackUnsubscribed,ce).on(s.DataReceived,Se).on(s.MediaDevicesError,Ke).on(s.TranscriptionReceived,N).on(s.EncryptionError,B).on(s.TrackSubscriptionFailed,F);function N(x,j){var z;j!=null&&j.isLocal&&(Ge.update(),L===Pe.Talking&&((z=c.onInterruptDetected)==null||z.call(c,{type:"audio"}),L=Pe.Idle))}try{await m.connect(D,T),i("LiveKit room joined successfully"),b=setTimeout(()=>{var x;i("Track subscription timeout - no track subscribed within 30 seconds after connect"),b=null,l.track("connectivity-error",{error:"Track subscription timeout",sessionId:A}),(x=c.onError)==null||x.call(c,new Error("Track subscription timeout"),{sessionId:A}),jr("internal:track-subscription-timeout")},P)}catch(x){ki(x,i,c)}l.enrich({"stream-type":p});function J(x){var j,z,ne,Re;switch(i("Connection state changed:",x),x){case a.Connecting:i("CALLBACK: onConnectionStateChange(Connecting)"),(j=c.onConnectionStateChange)==null||j.call(c,te.Connecting,"livekit:connecting");break;case a.Connected:i("LiveKit room connected successfully"),v=!0;break;case a.Disconnected:i("LiveKit room disconnected"),v=!1,g=!1,(z=c.onConnectionStateChange)==null||z.call(c,te.Disconnected,"livekit:disconnected");break;case a.Reconnecting:i("LiveKit room reconnecting..."),(ne=c.onConnectionStateChange)==null||ne.call(c,te.Connecting,"livekit:reconnecting");break;case a.SignalReconnecting:i("LiveKit room signal reconnecting..."),(Re=c.onConnectionStateChange)==null||Re.call(c,te.Connecting,"livekit:signal-reconnecting");break}}function Q(x,j){var z;i("Connection quality:",x),j!=null&&j.isLocal&&((z=c.onConnectivityStateChange)==null||z.call(c,td[x]))}function Y(x){i("Participant connected:",x.identity)}function me(x){i("Participant disconnected:",x.identity),jr("livekit:participant-disconnected")}function Te(){var x;w!==G.Start&&(i("CALLBACK: onVideoStateChange(Start)"),w=G.Start,(x=c.onVideoStateChange)==null||x.call(c,G.Start))}function be(x){var j;w!==G.Stop&&(i("CALLBACK: onVideoStateChange(Stop)"),w=G.Stop,(j=c.onVideoStateChange)==null||j.call(c,G.Stop,x))}function ae(x,j,z){var Re,Ee,Et;i(`Track subscribed: ${x.kind} from ${z.identity}`),b&&(clearTimeout(b),b=null,i("Track subscription timeout cleared"));const ne=x.mediaStreamTrack;if(!ne){i(`No mediaStreamTrack available for ${x.kind}`);return}S?(S.addTrack(ne),i(`Added ${x.kind} track to shared MediaStream`)):(S=new MediaStream([ne]),i(`Created shared MediaStream with ${x.kind} track`)),x.kind==="video"&&((Re=c.onStreamReady)==null||Re.call(c),i("CALLBACK: onSrcObjectReady"),(Ee=c.onSrcObjectReady)==null||Ee.call(c,S),g||(g=!0,i("CALLBACK: onConnectionStateChange(Connected)"),(Et=c.onConnectionStateChange)==null||Et.call(c,te.Connected,"livekit:track-subscribed")),R=cs(()=>x.getRTCStatsReport(),()=>v,Oc,(nn,di)=>{i(`Video state change: ${nn}`),nn===G.Start?Te():nn===G.Stop&&be(di)}),R.start())}function ce(x,j,z){i(`Track unsubscribed: ${x.kind} from ${z.identity}`),x.kind==="video"&&(be(R==null?void 0:R.getReport()),R==null||R.stop(),R=null)}function Se(x,j,z,ne){var Ee,Et,nn,di,Ec,Pc;const Re=new TextDecoder().decode(x);try{const Ne=JSON.parse(Re),Pt=ne||Ne.subject;if(i("Data received:",{subject:Pt,data:Ne}),Pt===re.ChatAnswer){const ot=_e.Answer;(Ee=c.onMessage)==null||Ee.call(c,ot,{event:ot,...Ne})}else if(Pt===re.ChatPartial){const ot=_e.Partial;(Et=c.onMessage)==null||Et.call(c,ot,{event:ot,...Ne})}else if([re.StreamVideoCreated,re.StreamVideoDone,re.StreamVideoError,re.StreamVideoRejected].includes(Pt)){L=Pt===re.StreamVideoCreated?Pe.Talking:Pe.Idle,(nn=c.onAgentActivityStateChange)==null||nn.call(c,L);const{role:ot,status:ui,...If}=Ne,Df=ot??(j==null?void 0:j.identity)??"datachannel",Mf=ui??Pt.split("/").pop()??"unknown",wc={[Df]:{...If,status:Mf}};t.debug&&((di=Ne==null?void 0:Ne.metadata)!=null&&di.sentiment)&&(wc.sentiment={id:Ne.metadata.sentiment.id,name:Ne.metadata.sentiment.sentiment}),(Ec=c.onMessage)==null||Ec.call(c,Pt,wc)}else if(Pt===re.ChatAudioTranscribed){const ot=_e.Transcribe;(Pc=c.onMessage)==null||Pc.call(c,ot,{event:ot,...Ne}),queueMicrotask(()=>{var ui;(ui=c.onAgentActivityStateChange)==null||ui.call(c,Pe.Loading)})}}catch(Ne){i("Failed to parse data channel message:",Ne)}}function Ke(x){var j;i("Media devices error:",x),(j=c.onError)==null||j.call(c,new Error(an),{sessionId:A})}function B(x){var j;i("Encryption error:",x),(j=c.onError)==null||j.call(c,new Error(an),{sessionId:A})}function F(x,j,z){i("Track subscription failed:",{trackSid:x,participant:j,reason:z})}function X(x){if(!m)return null;const j=m.localParticipant.audioTrackPublications;if(j){for(const[z,ne]of j)if(ne.source===o.Source.Microphone&&ne.track){const Ee=ne.track.mediaStreamTrack;if(Ee===x||Ee&&Ee.id===x.id)return ne}}return null}function Ce(x){if(!k||!k.track)return!1;const j=k.track.mediaStreamTrack;return j!==x&&(j==null?void 0:j.id)!==x.id}async function Zt(x){var Re,Ee;if(!v||!m)throw i("Room is not connected, cannot publish microphone stream"),new Error("Room is not connected");const j=x.getAudioTracks();if(j.length===0){i("No audio track found in the provided MediaStream");return}const z=j[0],ne=X(z);if(ne){i("Microphone track is already published, skipping",{trackId:z.id,publishedTrackId:(Ee=(Re=ne.track)==null?void 0:Re.mediaStreamTrack)==null?void 0:Ee.id}),k=ne;return}Ce(z)&&(i("Unpublishing existing microphone track before publishing new one"),await en()),i("Publishing microphone track from provided MediaStream",{trackId:z.id});try{k=await m.localParticipant.publishTrack(z,{source:o.Source.Microphone}),i("Microphone track published successfully",{trackSid:k.trackSid})}catch(Et){throw i("Failed to publish microphone track:",Et),Et}}async function en(){if(!(!k||!k.track))try{m&&(await m.localParticipant.unpublishTrack(k.track),i("Microphone track unpublished"))}catch(x){i("Error unpublishing microphone track:",x)}finally{k=null}}function ci(){S&&(S.getTracks().forEach(x=>x.stop()),S=null)}async function tn(x,j){var z,ne;if(!v||!m){i("Room is not connected for sending messages"),(z=c.onError)==null||z.call(c,new Error(an),{sessionId:A});return}try{await m.localParticipant.sendText(x,{topic:j}),i("Message sent successfully:",x)}catch(Re){i("Failed to send message:",Re),(ne=c.onError)==null||ne.call(c,new Error(an),{sessionId:A})}}async function Rf(x){var j;try{const ne=JSON.parse(x).topic;return tn("",ne)}catch(z){i("Failed to send data channel message:",z),(j=c.onError)==null||j.call(c,new Error(an),{sessionId:A})}}function _f(x){return tn(x,"lk.chat")}async function jr(x){var j,z;b&&(clearTimeout(b),b=null),m&&(await en(),(j=c.onConnectionStateChange)==null||j.call(c,te.Disconnecting,x),await m.disconnect()),ci(),v=!1,g=!1,(z=c.onAgentActivityStateChange)==null||z.call(c,Pe.Idle),L=Pe.Idle}return{speak(x){const j=typeof x=="string"?x:JSON.stringify(x);return tn(j,"did.speak")},disconnect:()=>jr("user:disconnect"),async reconnect(){var x,j;if((m==null?void 0:m.state)===a.Connected){i("Room is already connected");return}if(!m||!D||!T)throw i("Cannot reconnect: missing room, URL or token"),new Error("Cannot reconnect: session not available");i("Reconnecting to LiveKit room, state:",m.state),g=!1,(x=c.onConnectionStateChange)==null||x.call(c,te.Connecting,"user:reconnect");try{if(await m.connect(D,T),i("Room reconnected"),v=!0,m.remoteParticipants.size===0){if(i("Waiting for agent to join..."),!await new Promise(ne=>{const Re=setTimeout(()=>{m==null||m.off(s.ParticipantConnected,Ee),ne(!1)},5e3),Ee=()=>{clearTimeout(Re),m==null||m.off(s.ParticipantConnected,Ee),ne(!0)};m==null||m.on(s.ParticipantConnected,Ee)}))throw i("Agent did not join within timeout"),await m.disconnect(),new Error("Agent did not rejoin the room");i("Agent joined, reconnection successful")}}catch(z){throw i("Failed to reconnect:",z),(j=c.onConnectionStateChange)==null||j.call(c,te.Fail,"user:reconnect-failed"),z}},sendDataChannelMessage:Rf,sendTextMessage:_f,publishMicrophoneStream:Zt,unpublishMicrophoneStream:en,sessionId:A,streamId:A,streamType:p,interruptAvailable:!0,triggersAvailable:!1}}const id=Object.freeze(Object.defineProperty({__proto__:null,DataChannelTopic:bi,createLiveKitStreamingManager:nd,handleInitError:ki},Symbol.toStringTag,{value:"Module"}));function rd(n,e,t){if(!n)throw new Error("Please connect to the agent first");if(!n.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(e!==We.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!t)throw new Error("No active video to interrupt")}async function sd(n,e){const t={type:re.StreamInterrupt,videoId:e,timestamp:Date.now()};n.sendDataChannelMessage(JSON.stringify(t))}async function ad(n){const e={topic:bi.Interrupt};n.sendDataChannelMessage(JSON.stringify(e))}function od(n){return new Promise((e,t)=>{const{callbacks:i,host:r,auth:s,externalId:a}=n,{onMessage:o=null,onOpen:c=null,onClose:d=null,onError:u=null}=i||{},l=new WebSocket(`${r}?authorization=${encodeURIComponent(es(s,a))}`);l.onmessage=o,l.onclose=d,l.onerror=h=>{console.error(h),u==null||u("Websocket failed to connect",h),t(h)},l.onopen=h=>{c==null||c(h),e(l)}})}async function cd(n){const{retries:e=1}=n;let t=null;for(let i=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;i++)try{t=await od(n)}catch(r){if(i===e)throw r;await Yr(i*500)}return t}async function dd(n,e,t,i){const r=t!=null&&t.onMessage?[t.onMessage]:[],s=await cd({auth:n,host:e,externalId:i,callbacks:{onError:a=>{var o;return(o=t.onError)==null?void 0:o.call(t,new Vr(a))},onMessage(a){const o=JSON.parse(a.data);r.forEach(c=>c(o.event,o))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:a=>r.push(a)}}function ud(n){if(n.answer!==void 0)return n.answer;let e=0,t="";for(;e in n;)t+=n[e++];return t}function ld(n,e,t){if(!n.content)return;const i=e.messages[e.messages.length-1];(i==null?void 0:i.role)==="assistant"&&!i.interrupted&&(i.interrupted=!0);const r={id:n.id||`user-${Date.now()}`,role:n.role,content:n.content,created_at:n.created_at||new Date().toISOString(),transcribed:!0};e.messages.push(r),t==null||t([...e.messages],"user")}function hd(n,e,t,i,r){if(n===_e.Transcribe&&e.content){ld(e,i,r);return}if(!(n===_e.Partial||n===_e.Answer))return;const s=i.messages[i.messages.length-1];let a;if(s!=null&&s.transcribed&&s.role==="user")n===_e.Answer&&e.content,a={id:e.id||`assistant-${Date.now()}`,role:e.role||"assistant",content:e.content||"",created_at:e.created_at||new Date().toISOString()},i.messages.push(a);else if((s==null?void 0:s.role)==="assistant")a=s;else return;const{content:o,sequence:c}=e;n===_e.Partial?t[c]=o:t.answer=o;const d=ud(t);(a.content!==d||n===_e.Answer)&&(a.content=d,r==null||r([...i.messages],n))}function fd(n,e,t,i,r){let s={};const a=()=>s={};let o="answer";const c=(d,u)=>{var l,h;u==="user"&&a(),o=u,(h=(l=t.callbacks).onNewMessage)==null||h.call(l,d,u)};return{clearQueue:a,onMessage:(d,u)=>{var l,h;if("content"in u){const m=d===re.ChatAnswer?_e.Answer:d===re.ChatAudioTranscribed?_e.Transcribe:d;hd(m,u,s,e,c),m===_e.Answer&&n.track("agent-message-received",{messages:e.messages.length,mode:e.chatMode})}else{const m=re,v=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],p=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],S=Vc(u,i,{mode:e.chatMode});if(d=d,d===m.StreamVideoCreated&&(n.linkTrack("agent-video",S,m.StreamVideoCreated,["start"]),u.sentiment)){const k=e.messages[e.messages.length-1];if((k==null?void 0:k.role)==="assistant"){const R={...k,sentiment:u.sentiment};e.messages[e.messages.length-1]=R,c==null||c([...e.messages],o)}}if(v.includes(d)){const k=d.split("/")[1];p.includes(d)?n.track("agent-video",{...S,event:k}):n.linkTrack("agent-video",{...S,event:k},d,["done"])}p.includes(d)&&((h=(l=t.callbacks).onError)==null||h.call(l,new Error(`Stream failed with event ${d}`),{data:u})),u.event===m.StreamDone&&r()}}}}function md(n,e,t,i){const r=pi(n,`${e}/agents/${t}`,i);return{createStream(s,a){return r.post("/streams",s,{signal:a})},startConnection(s,a,o,c){return r.post(`/streams/${s}/sdp`,{session_id:o,answer:a},{signal:c})},addIceCandidate(s,a,o,c){return r.post(`/streams/${s}/ice`,{session_id:o,...a},{signal:c})},sendStreamRequest(s,a,o){return r.post(`/streams/${s}`,{session_id:a,...o})},close(s,a){return r.delete(`/streams/${s}`,{session_id:a})}}}const pd=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ds(n){switch(n){case"connected":return te.Connected;case"checking":return te.Connecting;case"failed":return te.Fail;case"new":return te.New;case"closed":return te.Closed;case"disconnected":return te.Disconnected;case"completed":return te.Completed;default:return te.New}}const gd=n=>e=>{const[t,i=""]=e.split(/:(.+)/);try{const r=JSON.parse(i);return n("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return n("Failed to parse data channel message, returning data as string",{subject:t,rawData:i,error:r}),{subject:t,data:i}}};function vd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:i,log:r}){n===G.Start&&e===G.Start?(r("CALLBACK: onVideoStateChange(Start)"),t==null||t(G.Start)):n===G.Stop&&e===G.Stop&&(r("CALLBACK: onVideoStateChange(Stop)"),t==null||t(G.Stop,i))}function yd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:r,log:s}){n===G.Start?(s("CALLBACK: onVideoStateChange(Start)"),t==null||t(G.Start)):n===G.Stop&&(s("CALLBACK: onVideoStateChange(Stop)"),t==null||t(G.Stop,r)),e===G.Start?i==null||i(Pe.Talking):e===G.Stop&&(i==null||i(Pe.Idle))}function us({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,streamType:r,report:s,log:a}){r===We.Legacy?vd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:s,log:a}):r===We.Fluent&&yd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:s,log:a})}async function bd(n,e,{debug:t=!1,callbacks:i,auth:r,baseURL:s=sn,analytics:a},o){var Ke;const c=as(t,"WebRTCStreamingManager"),d=gd(c);let u=!1,l=!1,h=G.Stop,m=G.Stop;const{startConnection:v,sendStreamRequest:p,close:S,createStream:k,addIceCandidate:R}=md(r,s,n,i.onError),{id:w,offer:g,ice_servers:b,session_id:P,fluent:L,interrupt_enabled:U,triggers_enabled:A}=await k(e,o);(Ke=i.onStreamCreated)==null||Ke.call(i,{stream_id:w,session_id:P,agent_id:n});const T=new pd({iceServers:b}),D=T.createDataChannel("JanusDataChannel");if(!P)throw new Error("Could not create session_id");const N=L?We.Fluent:We.Legacy;a.enrich({"stream-type":N});const J=e.stream_warmup&&!L,Q=()=>u,Y=()=>{var B;u=!0,l&&(c("CALLBACK: onConnectionStateChange(Connected)"),(B=i.onConnectionStateChange)==null||B.call(i,te.Connected))},me=cs(()=>T.getStats(),Q,Y,(B,F)=>us({statsSignal:m=B,dataChannelSignal:N===We.Legacy?h:void 0,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,report:F,streamType:N,log:c}),B=>{var F;return(F=i.onConnectivityStateChange)==null?void 0:F.call(i,B)});me.start(),T.onicecandidate=B=>{var F;c("peerConnection.onicecandidate",B);try{B.candidate&&B.candidate.sdpMid&&B.candidate.sdpMLineIndex!==null?R(w,{candidate:B.candidate.candidate,sdpMid:B.candidate.sdpMid,sdpMLineIndex:B.candidate.sdpMLineIndex},P,o):R(w,{candidate:null},P,o)}catch(X){(F=i.onError)==null||F.call(i,X,{streamId:w})}},D.onopen=()=>{l=!0,(!J||u)&&Y()};const Te=B=>{var F;(F=i.onVideoIdChange)==null||F.call(i,B)};function be(B,F){if(B===re.StreamStarted&&typeof F=="object"&&"metadata"in F){const X=F.metadata;Te(X.videoId)}B===re.StreamDone&&Te(null),h=B===re.StreamStarted?G.Start:G.Stop,us({statsSignal:N===We.Legacy?m:void 0,dataChannelSignal:h,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,streamType:N,log:c})}function ae(B,F){var Ce;const X=typeof F=="string"?F:F==null?void 0:F.metadata;X&&a.enrich({streamMetadata:X}),(Ce=i.onStreamReady)==null||Ce.call(i)}const ce={[re.StreamStarted]:be,[re.StreamDone]:be,[re.StreamReady]:ae};D.onmessage=B=>{var Ce;const{subject:F,data:X}=d(B.data);(Ce=ce[F])==null||Ce.call(ce,F,X)},T.oniceconnectionstatechange=()=>{var F;c("peerConnection.oniceconnectionstatechange => "+T.iceConnectionState);const B=ds(T.iceConnectionState);B!==te.Connected&&((F=i.onConnectionStateChange)==null||F.call(i,B))},T.ontrack=B=>{var F;c("peerConnection.ontrack",B),c("CALLBACK: onSrcObjectReady"),(F=i.onSrcObjectReady)==null||F.call(i,B.streams[0])},await T.setRemoteDescription(g),c("set remote description OK");const Se=await T.createAnswer();return c("create answer OK"),await T.setLocalDescription(Se),c("set local description OK"),await v(w,Se,P,o),c("start connection OK"),{speak(B){return p(w,P,B)},async disconnect(){var B;if(w){const F=ds(T.iceConnectionState);if(T){if(F===te.New){me.stop();return}T.close(),T.oniceconnectionstatechange=null,T.onnegotiationneeded=null,T.onicecandidate=null,T.ontrack=null}try{F===te.Connected&&await S(w,P).catch(X=>{})}catch(X){c("Error on close stream connection",X)}(B=i.onAgentActivityStateChange)==null||B.call(i,Pe.Idle),me.stop()}},sendDataChannelMessage(B){var F,X;if(!u||D.readyState!=="open"){c("Data channel is not ready for sending messages"),(F=i.onError)==null||F.call(i,new Error("Data channel is not ready for sending messages"),{streamId:w});return}try{D.send(B)}catch(Ce){c("Error sending data channel message",Ce),(X=i.onError)==null||X.call(i,Ce,{streamId:w})}},sessionId:P,streamId:w,streamType:N,interruptAvailable:U??!1,triggersAvailable:A??!1}}var Ti=(n=>(n.V1="v1",n.V2="v2",n))(Ti||{});async function kd(n,e,t,i){const r=n.id;switch(e.version){case"v1":{const{version:s,...a}=e;return bd(r,a,t,i)}case"v2":{const{version:s,...a}=e;switch(a.transport_provider){case rn.Livekit:const{createLiveKitStreamingManager:o}=await Promise.resolve().then(()=>id);return o(r,a,t);default:throw new Error(`Unsupported transport provider: ${a.transport_provider}`)}}default:throw new Error(`Invalid stream version: ${e.version}`)}}const Td="cht";function Sd(){return{transport_provider:rn.Livekit}}function Cd(n){var r,s;const{streamOptions:e}=n??{},t=((r=n==null?void 0:n.mixpanelAdditionalProperties)==null?void 0:r.plan)!==void 0?{plan:(s=n.mixpanelAdditionalProperties)==null?void 0:s.plan}:void 0;return{...{output_resolution:e==null?void 0:e.outputResolution,session_timeout:e==null?void 0:e.sessionTimeout,stream_warmup:e==null?void 0:e.streamWarmup,compatibility_mode:e==null?void 0:e.compatibilityMode,fluent:e==null?void 0:e.fluent},...t&&{end_user_data:t}}}function Ed(n,e){return hi(n.presenter.type)?{version:Ti.V2,...Sd()}:{version:Ti.V1,...Cd(e)}}function Pd(n,e,t){t.track("agent-connection-state-change",{state:n,...e&&{reason:e}})}function wd(n,e,t,i,r){r===We.Fluent?Rd(n,e,t,i,r):Id(n,e,t,i,r)}function Rd(n,e,t,i,r){n===G.Start?i.track("stream-session",{event:"start","stream-type":r}):n===G.Stop&&i.track("stream-session",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":r,...t})}function _d(n,e,t,i){Ge.get()<=0||(n===G.Start?t.linkTrack("agent-video",{event:"start",latency:Ge.get(!0),"stream-type":i},"start",[re.StreamVideoCreated]):n===G.Stop&&t.linkTrack("agent-video",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":i},"done",[re.StreamVideoDone]))}function Id(n,e,t,i,r){Ge.get()<=0||(n===G.Start?i.linkTrack("agent-video",{event:"start",latency:Ge.get(!0),"stream-type":r},"start",[re.StreamVideoCreated]):n===G.Stop&&i.linkTrack("agent-video",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":r,...t},"done",[re.StreamVideoDone]))}function ls(n,e,t,i){return Ge.reset(),is.update(),new Promise(async(r,s)=>{try{let a,o=!1;const c=Ed(n,e);t.enrich({"stream-version":c.version.toString()}),a=await kd(n,c,{...e,analytics:t,callbacks:{...e.callbacks,onConnectionStateChange:(d,u)=>{var l,h;(h=(l=e.callbacks).onConnectionStateChange)==null||h.call(l,d),Pd(d,u,t),d===te.Connected&&(a?r(a):o=!0)},onVideoStateChange:(d,u)=>{var l,h;(h=(l=e.callbacks).onVideoStateChange)==null||h.call(l,d),wd(d,n,u,t,a.streamType)},onAgentActivityStateChange:d=>{var u,l;(l=(u=e.callbacks).onAgentActivityStateChange)==null||l.call(u,d),d===Pe.Talking?yi.update():yi.reset(),_d(d===Pe.Talking?G.Start:G.Stop,n,t,a.streamType)},onStreamReady:()=>{const d=is.get(!0);t.track("agent-chat",{event:"ready",latency:d})}}},i),o&&r(a)}catch(a){s(a)}})}async function Dd(n,e,t,i,r){var u,l,h,m;const s=async()=>{if(hi(n.presenter.type)){const v=await ls(n,e,i),p=`${Td}_${v.sessionId}`,S=new Date().toISOString();return{chatResult:{chatMode:pe.Functional,chat:{id:p,agent_id:n.id,owner_id:n.owner_id??"",created:S,modified:S,agent_id__created_at:S,agent_id__modified_at:S,chat_mode:pe.Functional,messages:[]}},streamingManager:v}}else{const v=new AbortController,p=v.signal;let S;try{const k=ss(n,t,i,e.mode,e.persistentChat,r),R=ls(n,e,i,p).then(b=>(S=b,b)),[w,g]=await Promise.all([k,R]);return{chatResult:w,streamingManager:g}}catch(k){throw v.abort(),S&&await S.disconnect().catch(()=>{}),k}}},{chatResult:a,streamingManager:o}=await s(),{chat:c,chatMode:d}=a;return d&&e.mode!==void 0&&d!==e.mode&&(e.mode=d,(l=(u=e.callbacks).onModeChange)==null||l.call(u,d),d!==pe.Functional)?((m=(h=e.callbacks).onError)==null||m.call(h,new Br(d)),o==null||o.disconnect(),{chat:c}):{chat:c,streamingManager:o}}async function Md(n,e){var P,L,U,A;let t=!0,i=null;const r=e.mixpanelKey||Mc,s=e.wsURL||Dc,a=e.baseURL||sn,o=e.mode||pe.Functional,c={messages:[],chatMode:o},d=Kc({token:r,agentId:n,isEnabled:e.enableAnalitics,externalId:e.externalId,mixpanelAdditionalProperties:e.mixpanelAdditionalProperties}),u=Date.now();ns(()=>{d.track("agent-sdk",{event:"init"},u)});const l=Uc(e.auth,a,e.callbacks.onError,e.externalId),h=await l.getById(n);e.debug=e.debug||((P=h==null?void 0:h.advanced_settings)==null?void 0:P.ui_debug_mode);const m=hi(h.presenter.type);d.enrich(jc(h));const{onMessage:v,clearQueue:p}=fd(d,c,e,h,()=>{var T;return(T=c.socketManager)==null?void 0:T.disconnect()});c.messages=Wc(e.initialMessages),(U=(L=e.callbacks).onNewMessage)==null||U.call(L,[...c.messages],"answer");const S=T=>{i=T},k=({type:T})=>{var N,J,Q;const D=c.messages[c.messages.length-1];d.track("agent-video-interrupt",{type:T||"click",video_duration_to_interrupt:yi.get(!0),message_duration_to_interrupt:Ge.get(!0)}),D.interrupted=!0,(J=(N=e.callbacks).onNewMessage)==null||J.call(N,[...c.messages],"answer"),m?ad(c.streamingManager):(rd(c.streamingManager,(Q=c.streamingManager)==null?void 0:Q.streamType,i),sd(c.streamingManager,i))},R=Date.now();ns(()=>{d.track("agent-sdk",{event:"loaded",...Fc(h)},R)});async function w(T){var me,Te,be,ae,ce,Se,Ke;(Te=(me=e.callbacks).onConnectionStateChange)==null||Te.call(me,te.Connecting),Ge.reset(),T&&!t&&(delete c.chat,(ae=(be=e.callbacks).onNewMessage)==null||ae.call(be,[...c.messages],"answer"));const D=o===pe.DirectPlayback||m?Promise.resolve(void 0):dd(e.auth,s,{onMessage:v,onError:e.callbacks.onError},e.externalId),N=fi(()=>Dd(h,{...e,mode:o,callbacks:{...e.callbacks,onVideoIdChange:S,onMessage:v,onInterruptDetected:k}},l,d,c.chat),{limit:3,timeout:_c,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:B=>(B==null?void 0:B.message)!=="Could not connect"&&B.status!==429&&(B==null?void 0:B.message)!=="InsufficientCreditsError",delayMs:1e3}).catch(B=>{var F,X;throw b(pe.Maintenance),(X=(F=e.callbacks).onConnectionStateChange)==null||X.call(F,te.Fail),B}),[J,{streamingManager:Q,chat:Y}]=await Promise.all([D,N]);Y&&Y.id!==((ce=c.chat)==null?void 0:ce.id)&&((Ke=(Se=e.callbacks).onNewChat)==null||Ke.call(Se,Y.id)),c.streamingManager=Q,c.socketManager=J,c.chat=Y,t=!1,d.enrich({chatId:Y==null?void 0:Y.id,streamId:Q==null?void 0:Q.streamId,mode:c.chatMode}),b((Y==null?void 0:Y.chat_mode)??o)}async function g(){var T,D,N,J;(T=c.socketManager)==null||T.disconnect(),await((D=c.streamingManager)==null?void 0:D.disconnect()),delete c.streamingManager,delete c.socketManager,(J=(N=e.callbacks).onConnectionStateChange)==null||J.call(N,te.Disconnected)}async function b(T){var D,N;T!==c.chatMode&&(d.track("agent-mode-change",{mode:T}),c.chatMode=T,c.chatMode!==pe.Functional&&await g(),(N=(D=e.callbacks).onModeChange)==null||N.call(D,T))}return{agent:h,getStreamType:()=>{var T;return(T=c.streamingManager)==null?void 0:T.streamType},getIsInterruptAvailable:()=>{var T;return((T=c.streamingManager)==null?void 0:T.interruptAvailable)??!1},getIsTriggersAvailable:()=>{var T;return((T=c.streamingManager)==null?void 0:T.triggersAvailable)??!1},starterMessages:((A=h.knowledge)==null?void 0:A.starter_message)||[],getSTTToken:()=>l.getSTTToken(h.id),changeMode:b,enrichAnalytics:d.enrich,async connect(){await w(!0),d.track("agent-chat",{event:"connect",mode:c.chatMode})},async reconnect(){const T=c.streamingManager;if(m&&(T!=null&&T.reconnect)){try{await T.reconnect(),d.track("agent-chat",{event:"reconnect",mode:c.chatMode})}catch{await g(),await w(!1)}return}await g(),await w(!1),d.track("agent-chat",{event:"reconnect",mode:c.chatMode})},async disconnect(){await g(),d.track("agent-chat",{event:"disconnect",mode:c.chatMode})},async publishMicrophoneStream(T){var D;if(!((D=c.streamingManager)!=null&&D.publishMicrophoneStream))throw new Error("publishMicrophoneStream is not available for this streaming manager");return c.streamingManager.publishMicrophoneStream(T)},async unpublishMicrophoneStream(){var T;if(!((T=c.streamingManager)!=null&&T.unpublishMicrophoneStream))throw new Error("unpublishMicrophoneStream is not available for this streaming manager");return c.streamingManager.unpublishMicrophoneStream()},async chat(T){var Q,Y,me,Te,be;const D=()=>{if(Zr(o))throw new Rt(`${o} is enabled, chat is disabled`);if(T.length>=800)throw new Rt("Message cannot be more than 800 characters");if(T.length===0)throw new Rt("Message cannot be empty");if(c.chatMode===pe.Maintenance)throw new Rt("Chat is in maintenance mode");if(![pe.TextOnly,pe.Playground].includes(c.chatMode)){if(!c.streamingManager)throw new Rt("Streaming manager is not initialized");if(!c.chat)throw new Rt("Chat is not initialized")}},N=async()=>{var ae,ce;if(!c.chat){const Se=await ss(h,l,d,c.chatMode,e.persistentChat);if(!Se.chat)throw new wt(c.chatMode,!!e.persistentChat);c.chat=Se.chat,(ce=(ae=e.callbacks).onNewChat)==null||ce.call(ae,c.chat.id)}return c.chat.id},J=async(ae,ce)=>{const Se=c.chatMode===pe.Playground;return fi(m&&!Se?async()=>{var F,X;return await((X=(F=c.streamingManager)==null?void 0:F.sendTextMessage)==null?void 0:X.call(F,T)),Promise.resolve({})}:async()=>{var F,X;return l.chat(h.id,ce,{chatMode:c.chatMode,streamId:(F=c.streamingManager)==null?void 0:F.streamId,sessionId:(X=c.streamingManager)==null?void 0:X.sessionId,messages:ae.map(({matches:Ce,...Zt})=>Zt)},{...rs(c.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:F=>{var Zt,en,ci,tn;const X=(Zt=F==null?void 0:F.message)==null?void 0:Zt.includes("missing or invalid session_id");return!((en=F==null?void 0:F.message)==null?void 0:en.includes("Stream Error"))&&!X?((tn=(ci=e.callbacks).onError)==null||tn.call(ci,F),!1):!0},onRetry:async()=>{await g(),await w(!1)}})};try{p(),D(),c.messages.push({id:Ut(),role:"user",content:T,created_at:new Date(Ge.update()).toISOString()}),(Y=(Q=e.callbacks).onNewMessage)==null||Y.call(Q,[...c.messages],"user");const ae=await N(),ce=await J([...c.messages],ae);return c.messages.push({id:Ut(),role:"assistant",content:ce.result||"",created_at:new Date().toISOString(),context:ce.context,matches:ce.matches}),d.track("agent-message-send",{event:"success",messages:c.messages.length+1}),ce.result&&((Te=(me=e.callbacks).onNewMessage)==null||Te.call(me,[...c.messages],"answer"),d.track("agent-message-received",{latency:Ge.get(!0),messages:c.messages.length})),ce}catch(ae){throw((be=c.messages[c.messages.length-1])==null?void 0:be.role)==="assistant"&&c.messages.pop(),d.track("agent-message-send",{event:"error",messages:c.messages.length}),ae}},rate(T,D,N){var Y,me,Te,be;const J=c.messages.find(ae=>ae.id===T);if(c.chat){if(!J)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const Q=((Y=J.matches)==null?void 0:Y.map(ae=>[ae.document_id,ae.id]))??[];return d.track("agent-rate",{event:N?"update":"create",thumb:D===1?"up":"down",knowledge_id:((me=h.knowledge)==null?void 0:me.id)??"",matches:Q,score:D}),N?l.updateRating(h.id,c.chat.id,N,{knowledge_id:((Te=h.knowledge)==null?void 0:Te.id)??"",message_id:T,matches:Q,score:D}):l.createRating(h.id,c.chat.id,{knowledge_id:((be=h.knowledge)==null?void 0:be.id)??"",message_id:T,matches:Q,score:D})},deleteRate(T){if(!c.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text"}),l.deleteRating(h.id,c.chat.id,T)},async speak(T){var Q,Y,me;function D(){if(typeof T=="string"){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:T,ssml:!1}}if(T.type==="text"&&!T.provider){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:T.input,ssml:T.ssml}}return T}const N=D();if(d.track("agent-speak",N),Ge.update(),c.messages&&N.type==="text"&&(c.messages.push({id:Ut(),role:"assistant",content:N.input,created_at:new Date().toISOString()}),(Y=(Q=e.callbacks).onNewMessage)==null||Y.call(Q,[...c.messages],"answer")),Ac(c.chatMode))return{duration:0,video_id:"",status:"success"};if(!c.streamingManager)throw new Error("Please connect to the agent first");return c.streamingManager.speak({script:N,metadata:{chat_id:(me=c.chat)==null?void 0:me.id,agent_id:h.id}})},interrupt:k}}function Od(n,e){return e.forEach(function(t){t&&typeof t!="string"&&!Array.isArray(t)&&Object.keys(t).forEach(function(i){if(i!=="default"&&!(i in n)){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(n,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})}),Object.freeze(n)}var Ad=Object.defineProperty,xd=(n,e,t)=>e in n?Ad(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,hs=(n,e,t)=>xd(n,typeof e!="symbol"?e+"":e,t);class we{constructor(){hs(this,"_locking"),hs(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const t=new Promise(r=>e=()=>{this._locks-=1,r()}),i=this._locking.then(()=>e);return this._locking=this._locking.then(()=>t),i}}function de(n,e){if(!n)throw new Error(e)}const Ld=34028234663852886e22,Nd=-34028234663852886e22,Ud=4294967295,Fd=2147483647,jd=-2147483648;function In(n){if(typeof n!="number")throw new Error("invalid int 32: "+typeof n);if(!Number.isInteger(n)||n>Fd||n<jd)throw new Error("invalid int 32: "+n)}function Si(n){if(typeof n!="number")throw new Error("invalid uint 32: "+typeof n);if(!Number.isInteger(n)||n>Ud||n<0)throw new Error("invalid uint 32: "+n)}function fs(n){if(typeof n!="number")throw new Error("invalid float 32: "+typeof n);if(Number.isFinite(n)&&(n>Ld||n<Nd))throw new Error("invalid float 32: "+n)}const ms=Symbol("@bufbuild/protobuf/enum-type");function Bd(n){const e=n[ms];return de(e,"missing enum type on enum object"),e}function ps(n,e,t,i){n[ms]=gs(e,t.map(r=>({no:r.no,name:r.name,localName:n[r.no]})))}function gs(n,e,t){const i=Object.create(null),r=Object.create(null),s=[];for(const a of e){const o=vs(a);s.push(o),i[a.name]=o,r[a.no]=o}return{typeName:n,values:s,findName(a){return i[a]},findNumber(a){return r[a]}}}function Vd(n,e,t){const i={};for(const r of e){const s=vs(r);i[s.localName]=s.no,i[s.no]=s.localName}return ps(i,n,e),i}function vs(n){return"localName"in n?n:Object.assign(Object.assign({},n),{localName:n.name})}class Ci{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,t){const i=this.getType(),r=i.runtime.bin,s=r.makeReadOptions(t);return r.readMessage(this,s.readerFactory(e),e.byteLength,s),this}fromJson(e,t){const i=this.getType(),r=i.runtime.json,s=r.makeReadOptions(t);return r.readMessage(i,e,s,this),this}fromJsonString(e,t){let i;try{i=JSON.parse(e)}catch(r){throw new Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(r instanceof Error?r.message:String(r)))}return this.fromJson(i,t)}toBinary(e){const t=this.getType(),i=t.runtime.bin,r=i.makeWriteOptions(e),s=r.writerFactory();return i.writeMessage(this,s,r),s.finish()}toJson(e){const t=this.getType(),i=t.runtime.json,r=i.makeWriteOptions(e);return i.writeMessage(this,r)}toJsonString(e){var t;const i=this.toJson(e);return JSON.stringify(i,null,(t=e==null?void 0:e.prettySpaces)!==null&&t!==void 0?t:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function qd(n,e,t,i){var r;const s=(r=i==null?void 0:i.localName)!==null&&r!==void 0?r:e.substring(e.lastIndexOf(".")+1),a={[s]:function(o){n.util.initFields(this),n.util.initPartial(o,this)}}[s];return Object.setPrototypeOf(a.prototype,new Ci),Object.assign(a,{runtime:n,typeName:e,fields:n.util.newFieldList(t),fromBinary(o,c){return new a().fromBinary(o,c)},fromJson(o,c){return new a().fromJson(o,c)},fromJsonString(o,c){return new a().fromJsonString(o,c)},equals(o,c){return n.util.equals(a,o,c)}}),a}function Kd(){let n=0,e=0;for(let i=0;i<28;i+=7){let r=this.buf[this.pos++];if(n|=(r&127)<<i,!(r&128))return this.assertBounds(),[n,e]}let t=this.buf[this.pos++];if(n|=(t&15)<<28,e=(t&112)>>4,!(t&128))return this.assertBounds(),[n,e];for(let i=3;i<=31;i+=7){let r=this.buf[this.pos++];if(e|=(r&127)<<i,!(r&128))return this.assertBounds(),[n,e]}throw new Error("invalid varint")}function Ei(n,e,t){for(let s=0;s<28;s=s+7){const a=n>>>s,o=!(!(a>>>7)&&e==0),c=(o?a|128:a)&255;if(t.push(c),!o)return}const i=n>>>28&15|(e&7)<<4,r=!!(e>>3);if(t.push((r?i|128:i)&255),!!r){for(let s=3;s<31;s=s+7){const a=e>>>s,o=!!(a>>>7),c=(o?a|128:a)&255;if(t.push(c),!o)return}t.push(e>>>31&1)}}const Dn=4294967296;function ys(n){const e=n[0]==="-";e&&(n=n.slice(1));const t=1e6;let i=0,r=0;function s(a,o){const c=Number(n.slice(a,o));r*=t,i=i*t+c,i>=Dn&&(r=r+(i/Dn|0),i=i%Dn)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?ks(i,r):Pi(i,r)}function zd(n,e){let t=Pi(n,e);const i=t.hi&2147483648;i&&(t=ks(t.lo,t.hi));const r=bs(t.lo,t.hi);return i?"-"+r:r}function bs(n,e){if({lo:n,hi:e}=Wd(n,e),e<=2097151)return String(Dn*e+n);const t=n&16777215,i=(n>>>24|e<<8)&16777215,r=e>>16&65535;let s=t+i*6777216+r*6710656,a=i+r*8147497,o=r*2;const c=1e7;return s>=c&&(a+=Math.floor(s/c),s%=c),a>=c&&(o+=Math.floor(a/c),a%=c),o.toString()+Ts(a)+Ts(s)}function Wd(n,e){return{lo:n>>>0,hi:e>>>0}}function Pi(n,e){return{lo:n|0,hi:e|0}}function ks(n,e){return e=~e,n?n=~n+1:e+=1,Pi(n,e)}const Ts=n=>{const e=String(n);return"0000000".slice(e.length)+e};function Ss(n,e){if(n>=0){for(;n>127;)e.push(n&127|128),n=n>>>7;e.push(n)}else{for(let t=0;t<9;t++)e.push(n&127|128),n=n>>7;e.push(1)}}function Gd(){let n=this.buf[this.pos++],e=n&127;if(!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<7,!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<14,!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<21,!(n&128))return this.assertBounds(),e;n=this.buf[this.pos++],e|=(n&15)<<28;for(let t=5;n&128&&t<10;t++)n=this.buf[this.pos++];if(n&128)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Hd(){const n=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof n.getBigInt64=="function"&&typeof n.getBigUint64=="function"&&typeof n.setBigInt64=="function"&&typeof n.setBigUint64=="function"&&(typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){const r=BigInt("-9223372036854775808"),s=BigInt("9223372036854775807"),a=BigInt("0"),o=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(c){const d=typeof c=="bigint"?c:BigInt(c);if(d>s||d<r)throw new Error("int64 invalid: ".concat(c));return d},uParse(c){const d=typeof c=="bigint"?c:BigInt(c);if(d>o||d<a)throw new Error("uint64 invalid: ".concat(c));return d},enc(c){return n.setBigInt64(0,this.parse(c),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},uEnc(c){return n.setBigInt64(0,this.uParse(c),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},dec(c,d){return n.setInt32(0,c,!0),n.setInt32(4,d,!0),n.getBigInt64(0,!0)},uDec(c,d){return n.setInt32(0,c,!0),n.setInt32(4,d,!0),n.getBigUint64(0,!0)}}}const t=r=>de(/^-?[0-9]+$/.test(r),"int64 invalid: ".concat(r)),i=r=>de(/^[0-9]+$/.test(r),"uint64 invalid: ".concat(r));return{zero:"0",supported:!1,parse(r){return typeof r!="string"&&(r=r.toString()),t(r),r},uParse(r){return typeof r!="string"&&(r=r.toString()),i(r),r},enc(r){return typeof r!="string"&&(r=r.toString()),t(r),ys(r)},uEnc(r){return typeof r!="string"&&(r=r.toString()),i(r),ys(r)},dec(r,s){return zd(r,s)},uDec(r,s){return bs(r,s)}}}const se=Hd();var E;(function(n){n[n.DOUBLE=1]="DOUBLE",n[n.FLOAT=2]="FLOAT",n[n.INT64=3]="INT64",n[n.UINT64=4]="UINT64",n[n.INT32=5]="INT32",n[n.FIXED64=6]="FIXED64",n[n.FIXED32=7]="FIXED32",n[n.BOOL=8]="BOOL",n[n.STRING=9]="STRING",n[n.BYTES=12]="BYTES",n[n.UINT32=13]="UINT32",n[n.SFIXED32=15]="SFIXED32",n[n.SFIXED64=16]="SFIXED64",n[n.SINT32=17]="SINT32",n[n.SINT64=18]="SINT64"})(E||(E={}));var yt;(function(n){n[n.BIGINT=0]="BIGINT",n[n.STRING=1]="STRING"})(yt||(yt={}));function bt(n,e,t){if(e===t)return!0;if(n==E.BYTES){if(!(e instanceof Uint8Array)||!(t instanceof Uint8Array)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}switch(n){case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return e==t}return!1}function Ft(n,e){switch(n){case E.BOOL:return!1;case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return e==0?se.zero:"0";case E.DOUBLE:case E.FLOAT:return 0;case E.BYTES:return new Uint8Array(0);case E.STRING:return"";default:return 0}}function Cs(n,e){switch(n){case E.BOOL:return e===!1;case E.STRING:return e==="";case E.BYTES:return e instanceof Uint8Array&&!e.byteLength;default:return e==0}}var le;(function(n){n[n.Varint=0]="Varint",n[n.Bit64=1]="Bit64",n[n.LengthDelimited=2]="LengthDelimited",n[n.StartGroup=3]="StartGroup",n[n.EndGroup=4]="EndGroup",n[n.Bit32=5]="Bit32"})(le||(le={}));class Jd{constructor(e){this.stack=[],this.textEncoder=e??new TextEncoder,this.chunks=[],this.buf=[]}finish(){this.chunks.push(new Uint8Array(this.buf));let e=0;for(let r=0;r<this.chunks.length;r++)e+=this.chunks[r].length;let t=new Uint8Array(e),i=0;for(let r=0;r<this.chunks.length;r++)t.set(this.chunks[r],i),i+=this.chunks[r].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let e=this.finish(),t=this.stack.pop();if(!t)throw new Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(e.byteLength),this.raw(e)}tag(e,t){return this.uint32((e<<3|t)>>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(Si(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return In(e),Ss(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.textEncoder.encode(e);return this.uint32(t.byteLength),this.raw(t)}float(e){fs(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){Si(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){In(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return In(e),e=(e<<1^e>>31)>>>0,Ss(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=se.enc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=se.uEnc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=se.enc(e);return Ei(t.lo,t.hi,this.buf),this}sint64(e){let t=se.enc(e),i=t.hi>>31,r=t.lo<<1^i,s=(t.hi<<1|t.lo>>>31)^i;return Ei(r,s,this.buf),this}uint64(e){let t=se.uEnc(e);return Ei(t.lo,t.hi,this.buf),this}}class $d{constructor(e,t){this.varint64=Kd,this.uint32=Gd,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=t??new TextDecoder}tag(){let e=this.uint32(),t=e>>>3,i=e&7;if(t<=0||i<0||i>5)throw new Error("illegal tag: field no "+t+" wire type "+i);return[t,i]}skip(e,t){let i=this.pos;switch(e){case le.Varint:for(;this.buf[this.pos++]&128;);break;case le.Bit64:this.pos+=4;case le.Bit32:this.pos+=4;break;case le.LengthDelimited:let r=this.uint32();this.pos+=r;break;case le.StartGroup:for(;;){const[s,a]=this.tag();if(a===le.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(a,s)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(i,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return se.dec(...this.varint64())}uint64(){return se.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),i=-(e&1);return e=(e>>>1|(t&1)<<31)^i,t=t>>>1^i,se.dec(e,t)}bool(){let[e,t]=this.varint64();return e!==0||t!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return se.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return se.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.textDecoder.decode(this.bytes())}}function Qd(n,e,t,i){let r;return{typeName:e,extendee:t,get field(){if(!r){const s=typeof i=="function"?i():i;s.name=e.split(".").pop(),s.jsonName="[".concat(e,"]"),r=n.util.newFieldList([s]).list()[0]}return r},runtime:n}}function Es(n){const e=n.field.localName,t=Object.create(null);return t[e]=Yd(n),[t,()=>t[e]]}function Yd(n){const e=n.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return Ft(e.T,e.L);case"message":const t=e.T,i=new t;return t.fieldWrapper?t.fieldWrapper.unwrapField(i):i;case"map":throw"map fields are not allowed to be extensions"}}function Xd(n,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let t=n.length-1;t>=0;--t)if(n[t].no==e.no)return[n[t]];return[]}return n.filter(t=>t.no===e.no)}let ct="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Mn=[];for(let n=0;n<ct.length;n++)Mn[ct[n].charCodeAt(0)]=n;Mn[45]=ct.indexOf("+"),Mn[95]=ct.indexOf("/");const Ps={dec(n){let e=n.length*3/4;n[n.length-2]=="="?e-=2:n[n.length-1]=="="&&(e-=1);let t=new Uint8Array(e),i=0,r=0,s,a=0;for(let o=0;o<n.length;o++){if(s=Mn[n.charCodeAt(o)],s===void 0)switch(n[o]){case"=":r=0;case`
|
|
2
|
-
`:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string.")}switch(r){case 0:a=s,r=1;break;case 1:t[i++]=a<<2|(s&48)>>4,a=s,r=2;break;case 2:t[i++]=(a&15)<<4|(s&60)>>2,a=s,r=3;break;case 3:t[i++]=(a&3)<<6|s,r=0;break}}if(r==1)throw Error("invalid base64 string.");return t.subarray(0,i)},enc(n){let e="",t=0,i,r=0;for(let s=0;s<n.length;s++)switch(i=n[s],t){case 0:e+=ct[i>>2],r=(i&3)<<4,t=1;break;case 1:e+=ct[r|i>>4],r=(i&15)<<2,t=2;break;case 2:e+=ct[r|i>>6],e+=ct[i&63],t=0;break}return t&&(e+=ct[r],e+="=",t==1&&(e+="=")),e}};function Zd(n,e,t){Rs(e,n);const i=e.runtime.bin.makeReadOptions(t),r=Xd(n.getType().runtime.bin.listUnknownFields(n),e.field),[s,a]=Es(e);for(const o of r)e.runtime.bin.readField(s,i.readerFactory(o.data),e.field,o.wireType,i);return a()}function eu(n,e,t,i){Rs(e,n);const r=e.runtime.bin.makeReadOptions(i),s=e.runtime.bin.makeWriteOptions(i);if(ws(n,e)){const d=n.getType().runtime.bin.listUnknownFields(n).filter(u=>u.no!=e.field.no);n.getType().runtime.bin.discardUnknownFields(n);for(const u of d)n.getType().runtime.bin.onUnknownField(n,u.no,u.wireType,u.data)}const a=s.writerFactory();let o=e.field;!o.opt&&!o.repeated&&(o.kind=="enum"||o.kind=="scalar")&&(o=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(o,t,a,s);const c=r.readerFactory(a.finish());for(;c.pos<c.len;){const[d,u]=c.tag(),l=c.skip(u,d);n.getType().runtime.bin.onUnknownField(n,d,u,l)}}function ws(n,e){const t=n.getType();return e.extendee.typeName===t.typeName&&!!t.runtime.bin.listUnknownFields(n).find(i=>i.no==e.field.no)}function Rs(n,e){de(n.extendee.typeName==e.getType().typeName,"extension ".concat(n.typeName," can only be applied to message ").concat(n.extendee.typeName))}function _s(n,e){const t=n.localName;if(n.repeated)return e[t].length>0;if(n.oneof)return e[n.oneof.localName].case===t;switch(n.kind){case"enum":case"scalar":return n.opt||n.req?e[t]!==void 0:n.kind=="enum"?e[t]!==n.T.values[0].no:!Cs(n.T,e[t]);case"message":return e[t]!==void 0;case"map":return Object.keys(e[t]).length>0}}function Is(n,e){const t=n.localName,i=!n.opt&&!n.req;if(n.repeated)e[t]=[];else if(n.oneof)e[n.oneof.localName]={case:void 0};else switch(n.kind){case"map":e[t]={};break;case"enum":e[t]=i?n.T.values[0].no:void 0;break;case"scalar":e[t]=i?Ft(n.T,n.L):void 0;break;case"message":e[t]=void 0;break}}function dt(n,e){if(n===null||typeof n!="object"||!Object.getOwnPropertyNames(Ci.prototype).every(i=>i in n&&typeof n[i]=="function"))return!1;const t=n.getType();return t===null||typeof t!="function"||!("typeName"in t)||typeof t.typeName!="string"?!1:e===void 0?!0:t.typeName==e.typeName}function Ds(n,e){return dt(e)||!n.fieldWrapper?e:n.fieldWrapper.wrapField(e)}E.DOUBLE,E.FLOAT,E.INT64,E.UINT64,E.INT32,E.UINT32,E.BOOL,E.STRING,E.BYTES;const Ms={ignoreUnknownFields:!1},Os={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function tu(n){return n?Object.assign(Object.assign({},Ms),n):Ms}function nu(n){return n?Object.assign(Object.assign({},Os),n):Os}const On=Symbol(),An=Symbol();function iu(){return{makeReadOptions:tu,makeWriteOptions:nu,readMessage(n,e,t,i){if(e==null||Array.isArray(e)||typeof e!="object")throw new Error("cannot decode message ".concat(n.typeName," from JSON: ").concat(Ze(e)));i=i??new n;const r=new Map,s=t.typeRegistry;for(const[a,o]of Object.entries(e)){const c=n.fields.findJsonName(a);if(c){if(c.oneof){if(o===null&&c.kind=="scalar")continue;const d=r.get(c.oneof);if(d!==void 0)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: multiple keys for oneof "').concat(c.oneof.name,'" present: "').concat(d,'", "').concat(a,'"'));r.set(c.oneof,a)}As(i,o,c,t,n)}else{let d=!1;if(s!=null&&s.findExtension&&a.startsWith("[")&&a.endsWith("]")){const u=s.findExtension(a.substring(1,a.length-1));if(u&&u.extendee.typeName==n.typeName){d=!0;const[l,h]=Es(u);As(l,o,u.field,t,u),eu(i,u,h(),t)}}if(!d&&!t.ignoreUnknownFields)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: key "').concat(a,'" is unknown'))}}return i},writeMessage(n,e){const t=n.getType(),i={};let r;try{for(r of t.fields.byNumber()){if(!_s(r,n)){if(r.req)throw"required field not set";if(!e.emitDefaultValues||!su(r))continue}const a=r.oneof?n[r.oneof.localName].value:n[r.localName],o=xs(r,a,e);o!==void 0&&(i[e.useProtoFieldName?r.name:r.jsonName]=o)}const s=e.typeRegistry;if(s!=null&&s.findExtensionFor)for(const a of t.runtime.bin.listUnknownFields(n)){const o=s.findExtensionFor(t.typeName,a.no);if(o&&ws(n,o)){const c=Zd(n,o,e),d=xs(o.field,c,e);d!==void 0&&(i[o.field.jsonName]=d)}}}catch(s){const a=r?"cannot encode field ".concat(t.typeName,".").concat(r.name," to JSON"):"cannot encode message ".concat(t.typeName," to JSON"),o=s instanceof Error?s.message:String(s);throw new Error(a+(o.length>0?": ".concat(o):""))}return i},readScalar(n,e,t){return on(n,e,t??yt.BIGINT,!0)},writeScalar(n,e,t){if(e!==void 0&&(t||Cs(n,e)))return xn(n,e)},debug:Ze}}function Ze(n){if(n===null)return"null";switch(typeof n){case"object":return Array.isArray(n)?"array":"object";case"string":return n.length>100?"string":'"'.concat(n.split('"').join('\\"'),'"');default:return String(n)}}function As(n,e,t,i,r){let s=t.localName;if(t.repeated){if(de(t.kind!="map"),e===null)return;if(!Array.isArray(e))throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(e)));const a=n[s];for(const o of e){if(o===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(o)));switch(t.kind){case"message":a.push(t.T.fromJson(o,i));break;case"enum":const c=wi(t.T,o,i.ignoreUnknownFields,!0);c!==An&&a.push(c);break;case"scalar":try{a.push(on(t.T,o,t.L,!0))}catch(d){let u="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(o));throw d instanceof Error&&d.message.length>0&&(u+=": ".concat(d.message)),new Error(u)}break}}}else if(t.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(e)));const a=n[s];for(const[o,c]of Object.entries(e)){if(c===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: map value null"));let d;try{d=ru(t.K,o)}catch(u){let l="cannot decode map key for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(e));throw u instanceof Error&&u.message.length>0&&(l+=": ".concat(u.message)),new Error(l)}switch(t.V.kind){case"message":a[d]=t.V.T.fromJson(c,i);break;case"enum":const u=wi(t.V.T,c,i.ignoreUnknownFields,!0);u!==An&&(a[d]=u);break;case"scalar":try{a[d]=on(t.V.T,c,yt.BIGINT,!0)}catch(l){let h="cannot decode map value for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(e));throw l instanceof Error&&l.message.length>0&&(h+=": ".concat(l.message)),new Error(h)}break}}}else switch(t.oneof&&(n=n[t.oneof.localName]={case:s},s="value"),t.kind){case"message":const a=t.T;if(e===null&&a.typeName!="google.protobuf.Value")return;let o=n[s];dt(o)?o.fromJson(e,i):(n[s]=o=a.fromJson(e,i),a.fieldWrapper&&!t.oneof&&(n[s]=a.fieldWrapper.unwrapField(o)));break;case"enum":const c=wi(t.T,e,i.ignoreUnknownFields,!1);switch(c){case On:Is(t,n);break;case An:break;default:n[s]=c;break}break;case"scalar":try{const d=on(t.T,e,t.L,!1);switch(d){case On:Is(t,n);break;default:n[s]=d;break}}catch(d){let u="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(Ze(e));throw d instanceof Error&&d.message.length>0&&(u+=": ".concat(d.message)),new Error(u)}break}}function ru(n,e){if(n===E.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return on(n,e,yt.BIGINT,!0).toString()}function on(n,e,t,i){if(e===null)return i?Ft(n,t):On;switch(n){case E.DOUBLE:case E.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e===""||typeof e=="string"&&e.trim().length!==e.length||typeof e!="string"&&typeof e!="number")break;const r=Number(e);if(Number.isNaN(r)||!Number.isFinite(r))break;return n==E.FLOAT&&fs(r),r;case E.INT32:case E.FIXED32:case E.SFIXED32:case E.SINT32:case E.UINT32:let s;if(typeof e=="number"?s=e:typeof e=="string"&&e.length>0&&e.trim().length===e.length&&(s=Number(e)),s===void 0)break;return n==E.UINT32||n==E.FIXED32?Si(s):In(s),s;case E.INT64:case E.SFIXED64:case E.SINT64:if(typeof e!="number"&&typeof e!="string")break;const a=se.parse(e);return t?a.toString():a;case E.FIXED64:case E.UINT64:if(typeof e!="number"&&typeof e!="string")break;const o=se.uParse(e);return t?o.toString():o;case E.BOOL:if(typeof e!="boolean")break;return e;case E.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case E.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return Ps.dec(e)}throw new Error}function wi(n,e,t,i){if(e===null)return n.typeName=="google.protobuf.NullValue"?0:i?n.values[0].no:On;switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":const r=n.findName(e);if(r!==void 0)return r.no;if(t)return An;break}throw new Error("cannot decode enum ".concat(n.typeName," from JSON: ").concat(Ze(e)))}function su(n){return n.repeated||n.kind=="map"?!0:!(n.oneof||n.kind=="message"||n.opt||n.req)}function xs(n,e,t){if(n.kind=="map"){de(typeof e=="object"&&e!=null);const i={},r=Object.entries(e);switch(n.V.kind){case"scalar":for(const[a,o]of r)i[a.toString()]=xn(n.V.T,o);break;case"message":for(const[a,o]of r)i[a.toString()]=o.toJson(t);break;case"enum":const s=n.V.T;for(const[a,o]of r)i[a.toString()]=Ri(s,o,t.enumAsInteger);break}return t.emitDefaultValues||r.length>0?i:void 0}if(n.repeated){de(Array.isArray(e));const i=[];switch(n.kind){case"scalar":for(let r=0;r<e.length;r++)i.push(xn(n.T,e[r]));break;case"enum":for(let r=0;r<e.length;r++)i.push(Ri(n.T,e[r],t.enumAsInteger));break;case"message":for(let r=0;r<e.length;r++)i.push(e[r].toJson(t));break}return t.emitDefaultValues||i.length>0?i:void 0}switch(n.kind){case"scalar":return xn(n.T,e);case"enum":return Ri(n.T,e,t.enumAsInteger);case"message":return Ds(n.T,e).toJson(t)}}function Ri(n,e,t){var i;if(de(typeof e=="number"),n.typeName=="google.protobuf.NullValue")return null;if(t)return e;const r=n.findNumber(e);return(i=r==null?void 0:r.name)!==null&&i!==void 0?i:e}function xn(n,e){switch(n){case E.INT32:case E.SFIXED32:case E.SINT32:case E.FIXED32:case E.UINT32:return de(typeof e=="number"),e;case E.FLOAT:case E.DOUBLE:return de(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case E.STRING:return de(typeof e=="string"),e;case E.BOOL:return de(typeof e=="boolean"),e;case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return de(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case E.BYTES:return de(e instanceof Uint8Array),Ps.enc(e)}}const jt=Symbol("@bufbuild/protobuf/unknown-fields"),Ls={readUnknownFields:!0,readerFactory:n=>new $d(n)},Ns={writeUnknownFields:!0,writerFactory:()=>new Jd};function au(n){return n?Object.assign(Object.assign({},Ls),n):Ls}function ou(n){return n?Object.assign(Object.assign({},Ns),n):Ns}function cu(){return{makeReadOptions:au,makeWriteOptions:ou,listUnknownFields(n){var e;return(e=n[jt])!==null&&e!==void 0?e:[]},discardUnknownFields(n){delete n[jt]},writeUnknownFields(n,e){const i=n[jt];if(i)for(const r of i)e.tag(r.no,r.wireType).raw(r.data)},onUnknownField(n,e,t,i){const r=n;Array.isArray(r[jt])||(r[jt]=[]),r[jt].push({no:e,wireType:t,data:i})},readMessage(n,e,t,i,r){const s=n.getType(),a=r?e.len:e.pos+t;let o,c;for(;e.pos<a&&([o,c]=e.tag(),!(r===!0&&c==le.EndGroup));){const d=s.fields.find(o);if(!d){const u=e.skip(c,o);i.readUnknownFields&&this.onUnknownField(n,o,c,u);continue}Us(n,e,d,c,i)}if(r&&(c!=le.EndGroup||o!==t))throw new Error("invalid end group tag")},readField:Us,writeMessage(n,e,t){const i=n.getType();for(const r of i.fields.byNumber()){if(!_s(r,n)){if(r.req)throw new Error("cannot encode field ".concat(i.typeName,".").concat(r.name," to binary: required field not set"));continue}const s=r.oneof?n[r.oneof.localName].value:n[r.localName];Fs(r,s,e,t)}return t.writeUnknownFields&&this.writeUnknownFields(n,e),e},writeField(n,e,t,i){e!==void 0&&Fs(n,e,t,i)}}}function Us(n,e,t,i,r){let{repeated:s,localName:a}=t;switch(t.oneof&&(n=n[t.oneof.localName],n.case!=a&&delete n.value,n.case=a,a="value"),t.kind){case"scalar":case"enum":const o=t.kind=="enum"?E.INT32:t.T;let c=Nn;if(t.kind=="scalar"&&t.L>0&&(c=uu),s){let h=n[a];if(i==le.LengthDelimited&&o!=E.STRING&&o!=E.BYTES){let v=e.uint32()+e.pos;for(;e.pos<v;)h.push(c(e,o))}else h.push(c(e,o))}else n[a]=c(e,o);break;case"message":const d=t.T;s?n[a].push(Ln(e,new d,r,t)):dt(n[a])?Ln(e,n[a],r,t):(n[a]=Ln(e,new d,r,t),d.fieldWrapper&&!t.oneof&&!t.repeated&&(n[a]=d.fieldWrapper.unwrapField(n[a])));break;case"map":let[u,l]=du(t,e,r);n[a][u]=l;break}}function Ln(n,e,t,i){const r=e.getType().runtime.bin,s=i==null?void 0:i.delimited;return r.readMessage(e,n,s?i.no:n.uint32(),t,s),e}function du(n,e,t){const i=e.uint32(),r=e.pos+i;let s,a;for(;e.pos<r;){const[o]=e.tag();switch(o){case 1:s=Nn(e,n.K);break;case 2:switch(n.V.kind){case"scalar":a=Nn(e,n.V.T);break;case"enum":a=e.int32();break;case"message":a=Ln(e,new n.V.T,t,void 0);break}break}}if(s===void 0&&(s=Ft(n.K,yt.BIGINT)),typeof s!="string"&&typeof s!="number"&&(s=s.toString()),a===void 0)switch(n.V.kind){case"scalar":a=Ft(n.V.T,yt.BIGINT);break;case"enum":a=n.V.T.values[0].no;break;case"message":a=new n.V.T;break}return[s,a]}function uu(n,e){const t=Nn(n,e);return typeof t=="bigint"?t.toString():t}function Nn(n,e){switch(e){case E.STRING:return n.string();case E.BOOL:return n.bool();case E.DOUBLE:return n.double();case E.FLOAT:return n.float();case E.INT32:return n.int32();case E.INT64:return n.int64();case E.UINT64:return n.uint64();case E.FIXED64:return n.fixed64();case E.BYTES:return n.bytes();case E.FIXED32:return n.fixed32();case E.SFIXED32:return n.sfixed32();case E.SFIXED64:return n.sfixed64();case E.SINT64:return n.sint64();case E.UINT32:return n.uint32();case E.SINT32:return n.sint32()}}function Fs(n,e,t,i){de(e!==void 0);const r=n.repeated;switch(n.kind){case"scalar":case"enum":let s=n.kind=="enum"?E.INT32:n.T;if(r)if(de(Array.isArray(e)),n.packed)hu(t,s,n.no,e);else for(const a of e)cn(t,s,n.no,a);else cn(t,s,n.no,e);break;case"message":if(r){de(Array.isArray(e));for(const a of e)js(t,i,n,a)}else js(t,i,n,e);break;case"map":de(typeof e=="object"&&e!=null);for(const[a,o]of Object.entries(e))lu(t,i,n,a,o);break}}function lu(n,e,t,i,r){n.tag(t.no,le.LengthDelimited),n.fork();let s=i;switch(t.K){case E.INT32:case E.FIXED32:case E.UINT32:case E.SFIXED32:case E.SINT32:s=Number.parseInt(i);break;case E.BOOL:de(i=="true"||i=="false"),s=i=="true";break}switch(cn(n,t.K,1,s),t.V.kind){case"scalar":cn(n,t.V.T,2,r);break;case"enum":cn(n,E.INT32,2,r);break;case"message":de(r!==void 0),n.tag(2,le.LengthDelimited).bytes(r.toBinary(e));break}n.join()}function js(n,e,t,i){const r=Ds(t.T,i);t.delimited?n.tag(t.no,le.StartGroup).raw(r.toBinary(e)).tag(t.no,le.EndGroup):n.tag(t.no,le.LengthDelimited).bytes(r.toBinary(e))}function cn(n,e,t,i){de(i!==void 0);let[r,s]=Bs(e);n.tag(t,r)[s](i)}function hu(n,e,t,i){if(!i.length)return;n.tag(t,le.LengthDelimited).fork();let[,r]=Bs(e);for(let s=0;s<i.length;s++)n[r](i[s]);n.join()}function Bs(n){let e=le.Varint;switch(n){case E.BYTES:case E.STRING:e=le.LengthDelimited;break;case E.DOUBLE:case E.FIXED64:case E.SFIXED64:e=le.Bit64;break;case E.FIXED32:case E.SFIXED32:case E.FLOAT:e=le.Bit32;break}const t=E[n].toLowerCase();return[e,t]}function fu(){return{setEnumType:ps,initPartial(n,e){if(n===void 0)return;const t=e.getType();for(const i of t.fields.byMember()){const r=i.localName,s=e,a=n;if(a[r]!=null)switch(i.kind){case"oneof":const o=a[r].case;if(o===void 0)continue;const c=i.findField(o);let d=a[r].value;c&&c.kind=="message"&&!dt(d,c.T)?d=new c.T(d):c&&c.kind==="scalar"&&c.T===E.BYTES&&(d=dn(d)),s[r]={case:o,value:d};break;case"scalar":case"enum":let u=a[r];i.T===E.BYTES&&(u=i.repeated?u.map(dn):dn(u)),s[r]=u;break;case"map":switch(i.V.kind){case"scalar":case"enum":if(i.V.T===E.BYTES)for(const[m,v]of Object.entries(a[r]))s[r][m]=dn(v);else Object.assign(s[r],a[r]);break;case"message":const h=i.V.T;for(const m of Object.keys(a[r])){let v=a[r][m];h.fieldWrapper||(v=new h(v)),s[r][m]=v}break}break;case"message":const l=i.T;if(i.repeated)s[r]=a[r].map(h=>dt(h,l)?h:new l(h));else{const h=a[r];l.fieldWrapper?l.typeName==="google.protobuf.BytesValue"?s[r]=dn(h):s[r]=h:s[r]=dt(h,l)?h:new l(h)}break}}},equals(n,e,t){return e===t?!0:!e||!t?!1:n.fields.byMember().every(i=>{const r=e[i.localName],s=t[i.localName];if(i.repeated){if(r.length!==s.length)return!1;switch(i.kind){case"message":return r.every((a,o)=>i.T.equals(a,s[o]));case"scalar":return r.every((a,o)=>bt(i.T,a,s[o]));case"enum":return r.every((a,o)=>bt(E.INT32,a,s[o]))}throw new Error("repeated cannot contain ".concat(i.kind))}switch(i.kind){case"message":let a=r,o=s;return i.T.fieldWrapper&&(a!==void 0&&!dt(a)&&(a=i.T.fieldWrapper.wrapField(a)),o!==void 0&&!dt(o)&&(o=i.T.fieldWrapper.wrapField(o))),i.T.equals(a,o);case"enum":return bt(E.INT32,r,s);case"scalar":return bt(i.T,r,s);case"oneof":if(r.case!==s.case)return!1;const c=i.findField(r.case);if(c===void 0)return!0;switch(c.kind){case"message":return c.T.equals(r.value,s.value);case"enum":return bt(E.INT32,r.value,s.value);case"scalar":return bt(c.T,r.value,s.value)}throw new Error("oneof cannot contain ".concat(c.kind));case"map":const d=Object.keys(r).concat(Object.keys(s));switch(i.V.kind){case"message":const u=i.V.T;return d.every(h=>u.equals(r[h],s[h]));case"enum":return d.every(h=>bt(E.INT32,r[h],s[h]));case"scalar":const l=i.V.T;return d.every(h=>bt(l,r[h],s[h]))}break}})},clone(n){const e=n.getType(),t=new e,i=t;for(const r of e.fields.byMember()){const s=n[r.localName];let a;if(r.repeated)a=s.map(Un);else if(r.kind=="map"){a=i[r.localName];for(const[o,c]of Object.entries(s))a[o]=Un(c)}else r.kind=="oneof"?a=r.findField(s.case)?{case:s.case,value:Un(s.value)}:{case:void 0}:a=Un(s);i[r.localName]=a}for(const r of e.runtime.bin.listUnknownFields(n))e.runtime.bin.onUnknownField(i,r.no,r.wireType,r.data);return t}}}function Un(n){if(n===void 0)return n;if(dt(n))return n.clone();if(n instanceof Uint8Array){const e=new Uint8Array(n.byteLength);return e.set(n),e}return n}function dn(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function mu(n,e,t){return{syntax:n,json:iu(),bin:cu(),util:Object.assign(Object.assign({},fu()),{newFieldList:e,initFields:t}),makeMessageType(i,r,s){return qd(this,i,r,s)},makeEnum:Vd,makeEnumType:gs,getEnumType:Bd,makeExtension(i,r,s){return Qd(this,i,r,s)}}}class pu{constructor(e,t){this._fields=e,this._normalizer=t}findJsonName(e){if(!this.jsonNames){const t={};for(const i of this.list())t[i.jsonName]=t[i.name]=i;this.jsonNames=t}return this.jsonNames[e]}find(e){if(!this.numbers){const t={};for(const i of this.list())t[i.no]=i;this.numbers=t}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,t)=>e.no-t.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let t;for(const i of this.list())i.oneof?i.oneof!==t&&(t=i.oneof,e.push(t)):e.push(i)}return this.members}}function Vs(n,e){const t=qs(n);return e?t:Tu(ku(t))}function gu(n){return Vs(n,!1)}const vu=qs;function qs(n){let e=!1;const t=[];for(let i=0;i<n.length;i++){let r=n.charAt(i);switch(r){case"_":e=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":t.push(r),e=!1;break;default:e&&(e=!1,r=r.toUpperCase()),t.push(r);break}}return t.join("")}const yu=new Set(["constructor","toString","toJSON","valueOf"]),bu=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),Ks=n=>"".concat(n,"$"),ku=n=>bu.has(n)?Ks(n):n,Tu=n=>yu.has(n)?Ks(n):n;class Su{constructor(e){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=e,this.localName=gu(e)}addField(e){de(e.oneof===this,"field ".concat(e.name," not one of ").concat(this.name)),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let t=0;t<this.fields.length;t++)this._lookup[this.fields[t].localName]=this.fields[t]}return this._lookup[e]}}function Cu(n,e){var t,i,r,s,a,o;const c=[];let d;for(const u of typeof n=="function"?n():n){const l=u;if(l.localName=Vs(u.name,u.oneof!==void 0),l.jsonName=(t=u.jsonName)!==null&&t!==void 0?t:vu(u.name),l.repeated=(i=u.repeated)!==null&&i!==void 0?i:!1,u.kind=="scalar"&&(l.L=(r=u.L)!==null&&r!==void 0?r:yt.BIGINT),l.delimited=(s=u.delimited)!==null&&s!==void 0?s:!1,l.req=(a=u.req)!==null&&a!==void 0?a:!1,l.opt=(o=u.opt)!==null&&o!==void 0?o:!1,u.packed===void 0&&(l.packed=u.kind=="enum"||u.kind=="scalar"&&u.T!=E.BYTES&&u.T!=E.STRING),u.oneof!==void 0){const h=typeof u.oneof=="string"?u.oneof:u.oneof.name;(!d||d.name!=h)&&(d=new Su(h)),l.oneof=d,d.addField(l)}c.push(l)}return c}const y=mu("proto3",n=>new pu(n,e=>Cu(e)),n=>{for(const e of n.getType().fields.byMember()){if(e.opt)continue;const t=e.localName,i=n;if(e.repeated){i[t]=[];continue}switch(e.kind){case"oneof":i[t]={case:void 0};break;case"enum":i[t]=0;break;case"map":i[t]={};break;case"scalar":i[t]=Ft(e.T,e.L);break}}});class Ie extends Ci{constructor(e){super(),this.seconds=se.zero,this.nanos=0,y.util.initPartial(e,this)}fromJson(e,t){if(typeof e!="string")throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(y.json.debug(e)));const i=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!i)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const r=Date.parse(i[1]+"-"+i[2]+"-"+i[3]+"T"+i[4]+":"+i[5]+":"+i[6]+(i[8]?i[8]:"Z"));if(Number.isNaN(r))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(r<Date.parse("0001-01-01T00:00:00Z")||r>Date.parse("9999-12-31T23:59:59Z"))throw new Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=se.parse(r/1e3),this.nanos=0,i[7]&&(this.nanos=parseInt("1"+i[7]+"0".repeat(9-i[7].length))-1e9),this}toJson(e){const t=Number(this.seconds)*1e3;if(t<Date.parse("0001-01-01T00:00:00Z")||t>Date.parse("9999-12-31T23:59:59Z"))throw new Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw new Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let i="Z";if(this.nanos>0){const r=(this.nanos+1e9).toString().substring(1);r.substring(3)==="000000"?i="."+r.substring(0,3)+"Z":r.substring(6)==="000"?i="."+r.substring(0,6)+"Z":i="."+r+"Z"}return new Date(t).toISOString().replace(".000Z",i)}toDate(){return new Date(Number(this.seconds)*1e3+Math.ceil(this.nanos/1e6))}static now(){return Ie.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new Ie({seconds:se.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return new Ie().fromBinary(e,t)}static fromJson(e,t){return new Ie().fromJson(e,t)}static fromJsonString(e,t){return new Ie().fromJsonString(e,t)}static equals(e,t){return y.util.equals(Ie,e,t)}}Ie.runtime=y,Ie.typeName="google.protobuf.Timestamp",Ie.fields=y.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const Eu=y.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ie},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:Pu,repeated:!0},{no:5,name:"events",kind:"message",T:Ru,repeated:!0}]),Pu=y.makeMessageType("livekit.TimeSeriesMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"samples",kind:"message",T:wu,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),wu=y.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ie},{no:3,name:"value",kind:"scalar",T:2}]),Ru=y.makeMessageType("livekit.EventMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"start_timestamp_ms",kind:"scalar",T:3},{no:5,name:"end_timestamp_ms",kind:"scalar",T:3,opt:!0},{no:6,name:"normalized_start_timestamp",kind:"message",T:Ie},{no:7,name:"normalized_end_timestamp",kind:"message",T:Ie,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),zs=y.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),Ue=y.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),he=y.makeEnum("livekit.TrackSource",[{no:0,name:"UNKNOWN"},{no:1,name:"CAMERA"},{no:2,name:"MICROPHONE"},{no:3,name:"SCREEN_SHARE"},{no:4,name:"SCREEN_SHARE_AUDIO"}]),_i=y.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),un=y.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),ln=y.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Fe=y.makeEnum("livekit.DisconnectReason",[{no:0,name:"UNKNOWN_REASON"},{no:1,name:"CLIENT_INITIATED"},{no:2,name:"DUPLICATE_IDENTITY"},{no:3,name:"SERVER_SHUTDOWN"},{no:4,name:"PARTICIPANT_REMOVED"},{no:5,name:"ROOM_DELETED"},{no:6,name:"STATE_MISMATCH"},{no:7,name:"JOIN_FAILURE"},{no:8,name:"MIGRATION"},{no:9,name:"SIGNAL_CLOSE"},{no:10,name:"ROOM_CLOSED"},{no:11,name:"USER_UNAVAILABLE"},{no:12,name:"USER_REJECTED"},{no:13,name:"SIP_TRUNK_FAILURE"},{no:14,name:"CONNECTION_TIMEOUT"},{no:15,name:"MEDIA_FAILURE"}]),Bt=y.makeEnum("livekit.ReconnectReason",[{no:0,name:"RR_UNKNOWN"},{no:1,name:"RR_SIGNAL_DISCONNECTED"},{no:2,name:"RR_PUBLISHER_FAILED"},{no:3,name:"RR_SUBSCRIBER_FAILED"},{no:4,name:"RR_SWITCH_CANDIDATE"}]),Ws=y.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),ge=y.makeEnum("livekit.AudioTrackFeature",[{no:0,name:"TF_STEREO"},{no:1,name:"TF_NO_DTX"},{no:2,name:"TF_AUTO_GAIN_CONTROL"},{no:3,name:"TF_ECHO_CANCELLATION"},{no:4,name:"TF_NOISE_SUPPRESSION"},{no:5,name:"TF_ENHANCED_NOISE_CANCELLATION"},{no:6,name:"TF_PRECONNECT_BUFFER"}]),Fn=y.makeMessageType("livekit.Room",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"empty_timeout",kind:"scalar",T:13},{no:14,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:5,name:"creation_time",kind:"scalar",T:3},{no:15,name:"creation_time_ms",kind:"scalar",T:3},{no:6,name:"turn_password",kind:"scalar",T:9},{no:7,name:"enabled_codecs",kind:"message",T:jn,repeated:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"num_participants",kind:"scalar",T:13},{no:11,name:"num_publishers",kind:"scalar",T:13},{no:10,name:"active_recording",kind:"scalar",T:8},{no:13,name:"version",kind:"message",T:sa}]),jn=y.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),_u=y.makeMessageType("livekit.ParticipantPermission",()=>[{no:1,name:"can_subscribe",kind:"scalar",T:8},{no:2,name:"can_publish",kind:"scalar",T:8},{no:3,name:"can_publish_data",kind:"scalar",T:8},{no:9,name:"can_publish_sources",kind:"enum",T:y.getEnumType(he),repeated:!0},{no:7,name:"hidden",kind:"scalar",T:8},{no:8,name:"recorder",kind:"scalar",T:8},{no:10,name:"can_update_metadata",kind:"scalar",T:8},{no:11,name:"agent",kind:"scalar",T:8},{no:12,name:"can_subscribe_metrics",kind:"scalar",T:8}]),_t=y.makeMessageType("livekit.ParticipantInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"identity",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:y.getEnumType(Vt)},{no:4,name:"tracks",kind:"message",T:Kt,repeated:!0},{no:5,name:"metadata",kind:"scalar",T:9},{no:6,name:"joined_at",kind:"scalar",T:3},{no:17,name:"joined_at_ms",kind:"scalar",T:3},{no:9,name:"name",kind:"scalar",T:9},{no:10,name:"version",kind:"scalar",T:13},{no:11,name:"permission",kind:"message",T:_u},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:y.getEnumType(qt)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:y.getEnumType(Fe)},{no:18,name:"kind_details",kind:"enum",T:y.getEnumType(Iu),repeated:!0}]),Vt=y.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),qt=y.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"}]),Iu=y.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"}]),Le=y.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),Du=y.makeMessageType("livekit.SimulcastCodecInfo",()=>[{no:1,name:"mime_type",kind:"scalar",T:9},{no:2,name:"mid",kind:"scalar",T:9},{no:3,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:It,repeated:!0}]),Kt=y.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:y.getEnumType(Ue)},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"muted",kind:"scalar",T:8},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"simulcast",kind:"scalar",T:8},{no:8,name:"disable_dtx",kind:"scalar",T:8},{no:9,name:"source",kind:"enum",T:y.getEnumType(he)},{no:10,name:"layers",kind:"message",T:It,repeated:!0},{no:11,name:"mime_type",kind:"scalar",T:9},{no:12,name:"mid",kind:"scalar",T:9},{no:13,name:"codecs",kind:"message",T:Du,repeated:!0},{no:14,name:"stereo",kind:"scalar",T:8},{no:15,name:"disable_red",kind:"scalar",T:8},{no:16,name:"encryption",kind:"enum",T:y.getEnumType(Le)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:sa},{no:19,name:"audio_features",kind:"enum",T:y.getEnumType(ge),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:y.getEnumType(zs)}]),It=y.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:y.getEnumType(_i)},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13},{no:4,name:"bitrate",kind:"scalar",T:13},{no:5,name:"ssrc",kind:"scalar",T:13},{no:6,name:"spatial_layer",kind:"scalar",T:5},{no:7,name:"rid",kind:"scalar",T:9}]),De=y.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:y.getEnumType(V)},{no:4,name:"participant_identity",kind:"scalar",T:9},{no:5,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:2,name:"user",kind:"message",T:Hs,oneof:"value"},{no:3,name:"speaker",kind:"message",T:Mu,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:Js,oneof:"value"},{no:7,name:"transcription",kind:"message",T:Ou,oneof:"value"},{no:8,name:"metrics",kind:"message",T:Eu,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:Ii,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:$s,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:Qs,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:Ys,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:Mi,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:Oi,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:Ai,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),V=y.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),Mu=y.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:Gs,repeated:!0}]),Gs=y.makeMessageType("livekit.SpeakerInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"level",kind:"scalar",T:2},{no:3,name:"active",kind:"scalar",T:8}]),Hs=y.makeMessageType("livekit.UserPacket",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:5,name:"participant_identity",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:12},{no:3,name:"destination_sids",kind:"scalar",T:9,repeated:!0},{no:6,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:4,name:"topic",kind:"scalar",T:9,opt:!0},{no:8,name:"id",kind:"scalar",T:9,opt:!0},{no:9,name:"start_time",kind:"scalar",T:4,opt:!0},{no:10,name:"end_time",kind:"scalar",T:4,opt:!0},{no:11,name:"nonce",kind:"scalar",T:12}]),Js=y.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),Ou=y.makeMessageType("livekit.Transcription",()=>[{no:2,name:"transcribed_participant_identity",kind:"scalar",T:9},{no:3,name:"track_id",kind:"scalar",T:9},{no:4,name:"segments",kind:"message",T:Au,repeated:!0}]),Au=y.makeMessageType("livekit.TranscriptionSegment",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"text",kind:"scalar",T:9},{no:3,name:"start_time",kind:"scalar",T:4},{no:4,name:"end_time",kind:"scalar",T:4},{no:5,name:"final",kind:"scalar",T:8},{no:6,name:"language",kind:"scalar",T:9}]),Ii=y.makeMessageType("livekit.ChatMessage",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"edit_timestamp",kind:"scalar",T:3,opt:!0},{no:4,name:"message",kind:"scalar",T:9},{no:5,name:"deleted",kind:"scalar",T:8},{no:6,name:"generated",kind:"scalar",T:8}]),$s=y.makeMessageType("livekit.RpcRequest",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"method",kind:"scalar",T:9},{no:3,name:"payload",kind:"scalar",T:9},{no:4,name:"response_timeout_ms",kind:"scalar",T:13},{no:5,name:"version",kind:"scalar",T:13}]),Qs=y.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),Ys=y.makeMessageType("livekit.RpcResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:9,oneof:"value"},{no:3,name:"error",kind:"message",T:Xs,oneof:"value"}]),Xs=y.makeMessageType("livekit.RpcError",()=>[{no:1,name:"code",kind:"scalar",T:13},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"data",kind:"scalar",T:9}]),Zs=y.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),ea=y.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:y.getEnumType(ta)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"region",kind:"scalar",T:9},{no:5,name:"node_id",kind:"scalar",T:9},{no:6,name:"debug_info",kind:"scalar",T:9},{no:7,name:"agent_protocol",kind:"scalar",T:5}]),ta=y.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),xu=y.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:y.getEnumType(na)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"os",kind:"scalar",T:9},{no:5,name:"os_version",kind:"scalar",T:9},{no:6,name:"device_model",kind:"scalar",T:9},{no:7,name:"browser",kind:"scalar",T:9},{no:8,name:"browser_version",kind:"scalar",T:9},{no:9,name:"address",kind:"scalar",T:9},{no:10,name:"network",kind:"scalar",T:9},{no:11,name:"other_sdks",kind:"scalar",T:9}]),na=y.makeEnum("livekit.ClientInfo.SDK",[{no:0,name:"UNKNOWN"},{no:1,name:"JS"},{no:2,name:"SWIFT"},{no:3,name:"ANDROID"},{no:4,name:"FLUTTER"},{no:5,name:"GO"},{no:6,name:"UNITY"},{no:7,name:"REACT_NATIVE"},{no:8,name:"RUST"},{no:9,name:"PYTHON"},{no:10,name:"CPP"},{no:11,name:"UNITY_WEB"},{no:12,name:"NODE"},{no:13,name:"UNREAL"},{no:14,name:"ESP32"}]),ia=y.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:ra},{no:2,name:"screen",kind:"message",T:ra},{no:3,name:"resume_connection",kind:"enum",T:y.getEnumType(ln)},{no:4,name:"disabled_codecs",kind:"message",T:Lu},{no:5,name:"force_relay",kind:"enum",T:y.getEnumType(ln)}]),ra=y.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:y.getEnumType(ln)}]),Lu=y.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:jn,repeated:!0},{no:2,name:"publish",kind:"message",T:jn,repeated:!0}]),sa=y.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Di=y.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),aa=y.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:y.getEnumType(Di)},{no:2,name:"version",kind:"scalar",T:5},{no:3,name:"reply_to_stream_id",kind:"scalar",T:9},{no:4,name:"attached_stream_ids",kind:"scalar",T:9,repeated:!0},{no:5,name:"generated",kind:"scalar",T:8}],{localName:"DataStream_TextHeader"}),oa=y.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),Mi=y.makeMessageType("livekit.DataStream.Header",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"topic",kind:"scalar",T:9},{no:4,name:"mime_type",kind:"scalar",T:9},{no:5,name:"total_length",kind:"scalar",T:4,opt:!0},{no:7,name:"encryption_type",kind:"enum",T:y.getEnumType(Le)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:aa,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:oa,oneof:"content_header"}],{localName:"DataStream_Header"}),Oi=y.makeMessageType("livekit.DataStream.Chunk",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"chunk_index",kind:"scalar",T:4},{no:3,name:"content",kind:"scalar",T:12},{no:4,name:"version",kind:"scalar",T:5},{no:5,name:"iv",kind:"scalar",T:12,opt:!0}],{localName:"DataStream_Chunk"}),Ai=y.makeMessageType("livekit.DataStream.Trailer",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"reason",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}}],{localName:"DataStream_Trailer"}),He=y.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),xi=y.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),Nu=y.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),Uu=y.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:Dt,oneof:"message"},{no:2,name:"answer",kind:"message",T:Dt,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Ui,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Ni,oneof:"message"},{no:5,name:"mute",kind:"message",T:Fi,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Bn,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:da,oneof:"message"},{no:8,name:"leave",kind:"message",T:Vn,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:la,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:pa,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:ga,oneof:"message"},{no:13,name:"simulate",kind:"message",T:et,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:ha,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:ba,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:ua,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:qu,oneof:"message"}]),ca=y.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:Fu,oneof:"message"},{no:2,name:"answer",kind:"message",T:Dt,oneof:"message"},{no:3,name:"offer",kind:"message",T:Dt,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Ui,oneof:"message"},{no:5,name:"update",kind:"message",T:Vu,oneof:"message"},{no:6,name:"track_published",kind:"message",T:ji,oneof:"message"},{no:8,name:"leave",kind:"message",T:Vn,oneof:"message"},{no:9,name:"mute",kind:"message",T:Fi,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:Ku,oneof:"message"},{no:11,name:"room_update",kind:"message",T:zu,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:Gu,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:Ju,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:Qu,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Yu,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:Bu,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:ju,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:Zu,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:nl,oneof:"message"},{no:22,name:"request_response",kind:"message",T:il,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:rl,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:Xu,oneof:"message"}]),Li=y.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9}]),Ni=y.makeMessageType("livekit.AddTrackRequest",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"type",kind:"enum",T:y.getEnumType(Ue)},{no:4,name:"width",kind:"scalar",T:13},{no:5,name:"height",kind:"scalar",T:13},{no:6,name:"muted",kind:"scalar",T:8},{no:7,name:"disable_dtx",kind:"scalar",T:8},{no:8,name:"source",kind:"enum",T:y.getEnumType(he)},{no:9,name:"layers",kind:"message",T:It,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:Li,repeated:!0},{no:11,name:"sid",kind:"scalar",T:9},{no:12,name:"stereo",kind:"scalar",T:8},{no:13,name:"disable_red",kind:"scalar",T:8},{no:14,name:"encryption",kind:"enum",T:y.getEnumType(Le)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:y.getEnumType(zs)},{no:17,name:"audio_features",kind:"enum",T:y.getEnumType(ge),repeated:!0}]),Ui=y.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:y.getEnumType(He)},{no:3,name:"final",kind:"scalar",T:8}]),Fi=y.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),Fu=y.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Fn},{no:2,name:"participant",kind:"message",T:_t},{no:3,name:"other_participants",kind:"message",T:_t,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:fa,repeated:!0},{no:6,name:"subscriber_primary",kind:"scalar",T:8},{no:7,name:"alternative_url",kind:"scalar",T:9},{no:8,name:"client_configuration",kind:"message",T:ia},{no:9,name:"server_region",kind:"scalar",T:9},{no:10,name:"ping_timeout",kind:"scalar",T:5},{no:11,name:"ping_interval",kind:"scalar",T:5},{no:12,name:"server_info",kind:"message",T:ea},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:jn,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),ju=y.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:fa,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:ia},{no:3,name:"server_info",kind:"message",T:ea},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),ji=y.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:Kt}]),Bu=y.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),Dt=y.makeMessageType("livekit.SessionDescription",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9},{no:3,name:"id",kind:"scalar",T:13}]),Vu=y.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:_t,repeated:!0}]),Bn=y.makeMessageType("livekit.UpdateSubscription",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"participant_tracks",kind:"message",T:Zs,repeated:!0}]),da=y.makeMessageType("livekit.UpdateTrackSettings",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:3,name:"disabled",kind:"scalar",T:8},{no:4,name:"quality",kind:"enum",T:y.getEnumType(_i)},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"fps",kind:"scalar",T:13},{no:8,name:"priority",kind:"scalar",T:13}]),ua=y.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:y.getEnumType(ge),repeated:!0}]),qu=y.makeMessageType("livekit.UpdateLocalVideoTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13}]),Vn=y.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:y.getEnumType(Fe)},{no:3,name:"action",kind:"enum",T:y.getEnumType(zt)},{no:4,name:"regions",kind:"message",T:el}]),zt=y.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),la=y.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:It,repeated:!0}]),ha=y.makeMessageType("livekit.UpdateParticipantMetadata",()=>[{no:1,name:"metadata",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:4,name:"request_id",kind:"scalar",T:13}]),fa=y.makeMessageType("livekit.ICEServer",()=>[{no:1,name:"urls",kind:"scalar",T:9,repeated:!0},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"credential",kind:"scalar",T:9}]),Ku=y.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:Gs,repeated:!0}]),zu=y.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Fn}]),Wu=y.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:y.getEnumType(un)},{no:3,name:"score",kind:"scalar",T:2}]),Gu=y.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:Wu,repeated:!0}]),Hu=y.makeMessageType("livekit.StreamStateInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:y.getEnumType(xi)}]),Ju=y.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:Hu,repeated:!0}]),Bi=y.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:y.getEnumType(_i)},{no:2,name:"enabled",kind:"scalar",T:8}]),$u=y.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:Bi,repeated:!0}]),Qu=y.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:Bi,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:$u,repeated:!0}]),ma=y.makeMessageType("livekit.TrackPermission",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"all_tracks",kind:"scalar",T:8},{no:3,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:4,name:"participant_identity",kind:"scalar",T:9}]),pa=y.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:ma,repeated:!0}]),Yu=y.makeMessageType("livekit.SubscriptionPermissionUpdate",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"allowed",kind:"scalar",T:8}]),Xu=y.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Fn},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:_t},{no:4,name:"other_participants",kind:"message",T:_t,repeated:!0}]),ga=y.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:Dt},{no:2,name:"subscription",kind:"message",T:Bn},{no:3,name:"publish_tracks",kind:"message",T:ji,repeated:!0},{no:4,name:"data_channels",kind:"message",T:ya,repeated:!0},{no:5,name:"offer",kind:"message",T:Dt},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:va,repeated:!0}]),va=y.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),ya=y.makeMessageType("livekit.DataChannelInfo",()=>[{no:1,name:"label",kind:"scalar",T:9},{no:2,name:"id",kind:"scalar",T:13},{no:3,name:"target",kind:"enum",T:y.getEnumType(He)}]),et=y.makeMessageType("livekit.SimulateScenario",()=>[{no:1,name:"speaker_update",kind:"scalar",T:5,oneof:"scenario"},{no:2,name:"node_failure",kind:"scalar",T:8,oneof:"scenario"},{no:3,name:"migration",kind:"scalar",T:8,oneof:"scenario"},{no:4,name:"server_leave",kind:"scalar",T:8,oneof:"scenario"},{no:5,name:"switch_candidate_protocol",kind:"enum",T:y.getEnumType(Nu),oneof:"scenario"},{no:6,name:"subscriber_bandwidth",kind:"scalar",T:3,oneof:"scenario"},{no:7,name:"disconnect_signal_on_resume",kind:"scalar",T:8,oneof:"scenario"},{no:8,name:"disconnect_signal_on_resume_no_messages",kind:"scalar",T:8,oneof:"scenario"},{no:9,name:"leave_request_full_reconnect",kind:"scalar",T:8,oneof:"scenario"}]),ba=y.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),Zu=y.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),el=y.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:tl,repeated:!0}]),tl=y.makeMessageType("livekit.RegionInfo",()=>[{no:1,name:"region",kind:"scalar",T:9},{no:2,name:"url",kind:"scalar",T:9},{no:3,name:"distance",kind:"scalar",T:3}]),nl=y.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:y.getEnumType(Ws)}]),il=y.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:y.getEnumType(Vi)},{no:3,name:"message",kind:"scalar",T:9}]),Vi=y.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"}]),rl=y.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]);function sl(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var qn={exports:{}},al=qn.exports,ka;function ol(){return ka||(ka=1,function(n){(function(e,t){n.exports?n.exports=t():e.log=t()})(al,function(){var e=function(){},t="undefined",i=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],s={},a=null;function o(p,S){var k=p[S];if(typeof k.bind=="function")return k.bind(p);try{return Function.prototype.bind.call(k,p)}catch{return function(){return Function.prototype.apply.apply(k,[p,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function d(p){return p==="debug"&&(p="log"),typeof console===t?!1:p==="trace"&&i?c:console[p]!==void 0?o(console,p):console.log!==void 0?o(console,"log"):e}function u(){for(var p=this.getLevel(),S=0;S<r.length;S++){var k=r[S];this[k]=S<p?e:this.methodFactory(k,p,this.name)}if(this.log=this.debug,typeof console===t&&p<this.levels.SILENT)return"No console available for logging"}function l(p){return function(){typeof console!==t&&(u.call(this),this[p].apply(this,arguments))}}function h(p,S,k){return d(p)||l.apply(this,arguments)}function m(p,S){var k=this,R,w,g,b="loglevel";typeof p=="string"?b+=":"+p:typeof p=="symbol"&&(b=void 0);function P(D){var N=(r[D]||"silent").toUpperCase();if(!(typeof window===t||!b)){try{window.localStorage[b]=N;return}catch{}try{window.document.cookie=encodeURIComponent(b)+"="+N+";"}catch{}}}function L(){var D;if(!(typeof window===t||!b)){try{D=window.localStorage[b]}catch{}if(typeof D===t)try{var N=window.document.cookie,J=encodeURIComponent(b),Q=N.indexOf(J+"=");Q!==-1&&(D=/^([^;]+)/.exec(N.slice(Q+J.length+1))[1])}catch{}return k.levels[D]===void 0&&(D=void 0),D}}function U(){if(!(typeof window===t||!b)){try{window.localStorage.removeItem(b)}catch{}try{window.document.cookie=encodeURIComponent(b)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function A(D){var N=D;if(typeof N=="string"&&k.levels[N.toUpperCase()]!==void 0&&(N=k.levels[N.toUpperCase()]),typeof N=="number"&&N>=0&&N<=k.levels.SILENT)return N;throw new TypeError("log.setLevel() called with invalid level: "+D)}k.name=p,k.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},k.methodFactory=S||h,k.getLevel=function(){return g??w??R},k.setLevel=function(D,N){return g=A(D),N!==!1&&P(g),u.call(k)},k.setDefaultLevel=function(D){w=A(D),L()||k.setLevel(D,!1)},k.resetLevel=function(){g=null,U(),u.call(k)},k.enableAll=function(D){k.setLevel(k.levels.TRACE,D)},k.disableAll=function(D){k.setLevel(k.levels.SILENT,D)},k.rebuild=function(){if(a!==k&&(R=A(a.getLevel())),u.call(k),a===k)for(var D in s)s[D].rebuild()},R=A(a?a.getLevel():"WARN");var T=L();T!=null&&(g=A(T)),u.call(k)}a=new m,a.getLogger=function(S){if(typeof S!="symbol"&&typeof S!="string"||S==="")throw new TypeError("You must supply a name when creating a logger.");var k=s[S];return k||(k=s[S]=new m(S,a.methodFactory)),k};var v=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=v),a},a.getLoggers=function(){return s},a.default=a,a})}(qn)),qn.exports}var hn=ol(),Wt;(function(n){n[n.trace=0]="trace",n[n.debug=1]="debug",n[n.info=2]="info",n[n.warn=3]="warn",n[n.error=4]="error",n[n.silent=5]="silent"})(Wt||(Wt={}));var je;(function(n){n.Default="livekit",n.Room="livekit-room",n.Participant="livekit-participant",n.Track="livekit-track",n.Publication="livekit-track-publication",n.Engine="livekit-engine",n.Signal="livekit-signal",n.PCManager="livekit-pc-manager",n.PCTransport="livekit-pc-transport",n.E2EE="lk-e2ee"})(je||(je={}));let q=hn.getLogger("livekit");const Ta=Object.values(je).map(n=>hn.getLogger(n));q.setDefaultLevel(Wt.info);function tt(n){const e=hn.getLogger(n);return e.setDefaultLevel(q.getLevel()),e}function cl(n,e){if(e)hn.getLogger(e).setLevel(n);else for(const t of Ta)t.setLevel(n)}function dl(n,e){(e?[e]:Ta).forEach(i=>{const r=i.methodFactory;i.methodFactory=(s,a,o)=>{const c=r(s,a,o),d=Wt[s],u=d>=a&&d<Wt.silent;return(l,h)=>{h?c(l,h):c(l),u&&n(d,l,h)}},i.setLevel(i.getLevel())})}const ul=hn.getLogger("lk-e2ee"),fn=7e3,ll=[0,300,2*2*300,3*3*300,4*4*300,fn,fn,fn,fn,fn];class Sa{constructor(e){this._retryDelays=e!==void 0?[...e]:ll}nextRetryDelayInMs(e){if(e.retryCount>=this._retryDelays.length)return null;const t=this._retryDelays[e.retryCount];return e.retryCount<=1?t:t+Math.random()*1e3}}function hl(n,e){var t={};for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.indexOf(i)<0&&(t[i]=n[i]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,i=Object.getOwnPropertySymbols(n);r<i.length;r++)e.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(n,i[r])&&(t[i[r]]=n[i[r]]);return t}function f(n,e,t,i){function r(s){return s instanceof t?s:new t(function(a){a(s)})}return new(t||(t=Promise))(function(s,a){function o(u){try{d(i.next(u))}catch(l){a(l)}}function c(u){try{d(i.throw(u))}catch(l){a(l)}}function d(u){u.done?s(u.value):r(u.value).then(o,c)}d((i=i.apply(n,e||[])).next())})}function Ca(n){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&n[e],i=0;if(t)return t.call(n);if(n&&typeof n.length=="number")return{next:function(){return n&&i>=n.length&&(n=void 0),{value:n&&n[i++],done:!n}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function ut(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=n[Symbol.asyncIterator],t;return e?e.call(n):(n=typeof Ca=="function"?Ca(n):n[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(s){t[s]=n[s]&&function(a){return new Promise(function(o,c){a=n[s](a),r(o,c,a.done,a.value)})}}function r(s,a,o,c){Promise.resolve(c).then(function(d){s({value:d,done:o})},a)}}typeof SuppressedError=="function"&&SuppressedError;var Kn={exports:{}},Ea;function fl(){if(Ea)return Kn.exports;Ea=1;var n=typeof Reflect=="object"?Reflect:null,e=n&&typeof n.apply=="function"?n.apply:function(b,P,L){return Function.prototype.apply.call(b,P,L)},t;n&&typeof n.ownKeys=="function"?t=n.ownKeys:Object.getOwnPropertySymbols?t=function(b){return Object.getOwnPropertyNames(b).concat(Object.getOwnPropertySymbols(b))}:t=function(b){return Object.getOwnPropertyNames(b)};function i(g){console&&console.warn&&console.warn(g)}var r=Number.isNaN||function(b){return b!==b};function s(){s.init.call(this)}Kn.exports=s,Kn.exports.once=k,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function o(g){if(typeof g!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof g)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(g){if(typeof g!="number"||g<0||r(g))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+g+".");a=g}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(b){if(typeof b!="number"||b<0||r(b))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+b+".");return this._maxListeners=b,this};function c(g){return g._maxListeners===void 0?s.defaultMaxListeners:g._maxListeners}s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(b){for(var P=[],L=1;L<arguments.length;L++)P.push(arguments[L]);var U=b==="error",A=this._events;if(A!==void 0)U=U&&A.error===void 0;else if(!U)return!1;if(U){var T;if(P.length>0&&(T=P[0]),T instanceof Error)throw T;var D=new Error("Unhandled error."+(T?" ("+T.message+")":""));throw D.context=T,D}var N=A[b];if(N===void 0)return!1;if(typeof N=="function")e(N,this,P);else for(var J=N.length,Q=v(N,J),L=0;L<J;++L)e(Q[L],this,P);return!0};function d(g,b,P,L){var U,A,T;if(o(P),A=g._events,A===void 0?(A=g._events=Object.create(null),g._eventsCount=0):(A.newListener!==void 0&&(g.emit("newListener",b,P.listener?P.listener:P),A=g._events),T=A[b]),T===void 0)T=A[b]=P,++g._eventsCount;else if(typeof T=="function"?T=A[b]=L?[P,T]:[T,P]:L?T.unshift(P):T.push(P),U=c(g),U>0&&T.length>U&&!T.warned){T.warned=!0;var D=new Error("Possible EventEmitter memory leak detected. "+T.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");D.name="MaxListenersExceededWarning",D.emitter=g,D.type=b,D.count=T.length,i(D)}return g}s.prototype.addListener=function(b,P){return d(this,b,P,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(b,P){return d(this,b,P,!0)};function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(g,b,P){var L={fired:!1,wrapFn:void 0,target:g,type:b,listener:P},U=u.bind(L);return U.listener=P,L.wrapFn=U,U}s.prototype.once=function(b,P){return o(P),this.on(b,l(this,b,P)),this},s.prototype.prependOnceListener=function(b,P){return o(P),this.prependListener(b,l(this,b,P)),this},s.prototype.removeListener=function(b,P){var L,U,A,T,D;if(o(P),U=this._events,U===void 0)return this;if(L=U[b],L===void 0)return this;if(L===P||L.listener===P)--this._eventsCount===0?this._events=Object.create(null):(delete U[b],U.removeListener&&this.emit("removeListener",b,L.listener||P));else if(typeof L!="function"){for(A=-1,T=L.length-1;T>=0;T--)if(L[T]===P||L[T].listener===P){D=L[T].listener,A=T;break}if(A<0)return this;A===0?L.shift():p(L,A),L.length===1&&(U[b]=L[0]),U.removeListener!==void 0&&this.emit("removeListener",b,D||P)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(b){var P,L,U;if(L=this._events,L===void 0)return this;if(L.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):L[b]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete L[b]),this;if(arguments.length===0){var A=Object.keys(L),T;for(U=0;U<A.length;++U)T=A[U],T!=="removeListener"&&this.removeAllListeners(T);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(P=L[b],typeof P=="function")this.removeListener(b,P);else if(P!==void 0)for(U=P.length-1;U>=0;U--)this.removeListener(b,P[U]);return this};function h(g,b,P){var L=g._events;if(L===void 0)return[];var U=L[b];return U===void 0?[]:typeof U=="function"?P?[U.listener||U]:[U]:P?S(U):v(U,U.length)}s.prototype.listeners=function(b){return h(this,b,!0)},s.prototype.rawListeners=function(b){return h(this,b,!1)},s.listenerCount=function(g,b){return typeof g.listenerCount=="function"?g.listenerCount(b):m.call(g,b)},s.prototype.listenerCount=m;function m(g){var b=this._events;if(b!==void 0){var P=b[g];if(typeof P=="function")return 1;if(P!==void 0)return P.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function v(g,b){for(var P=new Array(b),L=0;L<b;++L)P[L]=g[L];return P}function p(g,b){for(;b+1<g.length;b++)g[b]=g[b+1];g.pop()}function S(g){for(var b=new Array(g.length),P=0;P<b.length;++P)b[P]=g[P].listener||g[P];return b}function k(g,b){return new Promise(function(P,L){function U(T){g.removeListener(b,A),L(T)}function A(){typeof g.removeListener=="function"&&g.removeListener("error",U),P([].slice.call(arguments))}w(g,b,A,{once:!0}),b!=="error"&&R(g,U,{once:!0})})}function R(g,b,P){typeof g.on=="function"&&w(g,"error",b,P)}function w(g,b,P,L){if(typeof g.on=="function")L.once?g.once(b,P):g.on(b,P);else if(typeof g.addEventListener=="function")g.addEventListener(b,function U(A){L.once&&g.removeEventListener(b,U),P(A)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof g)}return Kn.exports}var nt=fl();let Pa=!0,wa=!0;function mn(n,e,t){const i=n.match(e);return i&&i.length>=t&&parseFloat(i[t],10)}function Mt(n,e,t){if(!n.RTCPeerConnection)return;const i=n.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(a,o){if(a!==e)return r.apply(this,arguments);const c=d=>{const u=t(d);u&&(o.handleEvent?o.handleEvent(u):o(u))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(o,c),r.apply(this,[a,c])};const s=i.removeEventListener;i.removeEventListener=function(a,o){if(a!==e||!this._eventMap||!this._eventMap[e])return s.apply(this,arguments);if(!this._eventMap[e].has(o))return s.apply(this,arguments);const c=this._eventMap[e].get(o);return this._eventMap[e].delete(o),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,s.apply(this,[a,c])},Object.defineProperty(i,"on"+e,{get(){return this["_on"+e]},set(a){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),a&&this.addEventListener(e,this["_on"+e]=a)},enumerable:!0,configurable:!0})}function ml(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(Pa=n,n?"adapter.js logging disabled":"adapter.js logging enabled")}function pl(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(wa=!n,"adapter.js deprecation warnings "+(n?"disabled":"enabled"))}function Ra(){if(typeof window=="object"){if(Pa)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function qi(n,e){wa&&console.warn(n+" is deprecated, please use "+e+" instead.")}function gl(n){const e={browser:null,version:null};if(typeof n>"u"||!n.navigator||!n.navigator.userAgent)return e.browser="Not a browser.",e;const{navigator:t}=n;if(t.userAgentData&&t.userAgentData.brands){const i=t.userAgentData.brands.find(r=>r.brand==="Chromium");if(i)return{browser:"chrome",version:parseInt(i.version,10)}}if(t.mozGetUserMedia)e.browser="firefox",e.version=parseInt(mn(t.userAgent,/Firefox\/(\d+)\./,1));else if(t.webkitGetUserMedia||n.isSecureContext===!1&&n.webkitRTCPeerConnection)e.browser="chrome",e.version=parseInt(mn(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else if(n.RTCPeerConnection&&t.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=parseInt(mn(t.userAgent,/AppleWebKit\/(\d+)\./,1)),e.supportsUnifiedPlan=n.RTCRtpTransceiver&&"currentDirection"in n.RTCRtpTransceiver.prototype,e._safariVersion=mn(t.userAgent,/Version\/(\d+(\.?\d+))/,1);else return e.browser="Not a supported browser.",e;return e}function _a(n){return Object.prototype.toString.call(n)==="[object Object]"}function Ia(n){return _a(n)?Object.keys(n).reduce(function(e,t){const i=_a(n[t]),r=i?Ia(n[t]):n[t],s=i&&!Object.keys(r).length;return r===void 0||s?e:Object.assign(e,{[t]:r})},{}):n}function Ki(n,e,t){!e||t.has(e.id)||(t.set(e.id,e),Object.keys(e).forEach(i=>{i.endsWith("Id")?Ki(n,n.get(e[i]),t):i.endsWith("Ids")&&e[i].forEach(r=>{Ki(n,n.get(r),t)})}))}function Da(n,e,t){const i=t?"outbound-rtp":"inbound-rtp",r=new Map;if(e===null)return r;const s=[];return n.forEach(a=>{a.type==="track"&&a.trackIdentifier===e.id&&s.push(a)}),s.forEach(a=>{n.forEach(o=>{o.type===i&&o.trackId===a.id&&Ki(n,o,r)})}),r}const Ma=Ra;function Oa(n,e){const t=n&&n.navigator;if(!t.mediaDevices)return;const i=function(o){if(typeof o!="object"||o.mandatory||o.optional)return o;const c={};return Object.keys(o).forEach(d=>{if(d==="require"||d==="advanced"||d==="mediaSource")return;const u=typeof o[d]=="object"?o[d]:{ideal:o[d]};u.exact!==void 0&&typeof u.exact=="number"&&(u.min=u.max=u.exact);const l=function(h,m){return h?h+m.charAt(0).toUpperCase()+m.slice(1):m==="deviceId"?"sourceId":m};if(u.ideal!==void 0){c.optional=c.optional||[];let h={};typeof u.ideal=="number"?(h[l("min",d)]=u.ideal,c.optional.push(h),h={},h[l("max",d)]=u.ideal,c.optional.push(h)):(h[l("",d)]=u.ideal,c.optional.push(h))}u.exact!==void 0&&typeof u.exact!="number"?(c.mandatory=c.mandatory||{},c.mandatory[l("",d)]=u.exact):["min","max"].forEach(h=>{u[h]!==void 0&&(c.mandatory=c.mandatory||{},c.mandatory[l(h,d)]=u[h])})}),o.advanced&&(c.optional=(c.optional||[]).concat(o.advanced)),c},r=function(o,c){if(e.version>=61)return c(o);if(o=JSON.parse(JSON.stringify(o)),o&&typeof o.audio=="object"){const d=function(u,l,h){l in u&&!(h in u)&&(u[h]=u[l],delete u[l])};o=JSON.parse(JSON.stringify(o)),d(o.audio,"autoGainControl","googAutoGainControl"),d(o.audio,"noiseSuppression","googNoiseSuppression"),o.audio=i(o.audio)}if(o&&typeof o.video=="object"){let d=o.video.facingMode;d=d&&(typeof d=="object"?d:{ideal:d});const u=e.version<66;if(d&&(d.exact==="user"||d.exact==="environment"||d.ideal==="user"||d.ideal==="environment")&&!(t.mediaDevices.getSupportedConstraints&&t.mediaDevices.getSupportedConstraints().facingMode&&!u)){delete o.video.facingMode;let l;if(d.exact==="environment"||d.ideal==="environment"?l=["back","rear"]:(d.exact==="user"||d.ideal==="user")&&(l=["front"]),l)return t.mediaDevices.enumerateDevices().then(h=>{h=h.filter(v=>v.kind==="videoinput");let m=h.find(v=>l.some(p=>v.label.toLowerCase().includes(p)));return!m&&h.length&&l.includes("back")&&(m=h[h.length-1]),m&&(o.video.deviceId=d.exact?{exact:m.deviceId}:{ideal:m.deviceId}),o.video=i(o.video),Ma("chrome: "+JSON.stringify(o)),c(o)})}o.video=i(o.video)}return Ma("chrome: "+JSON.stringify(o)),c(o)},s=function(o){return e.version>=64?o:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[o.name]||o.name,message:o.message,constraint:o.constraint||o.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},a=function(o,c,d){r(o,u=>{t.webkitGetUserMedia(u,c,l=>{d&&d(s(l))})})};if(t.getUserMedia=a.bind(t),t.mediaDevices.getUserMedia){const o=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(c){return r(c,d=>o(d).then(u=>{if(d.audio&&!u.getAudioTracks().length||d.video&&!u.getVideoTracks().length)throw u.getTracks().forEach(l=>{l.stop()}),new DOMException("","NotFoundError");return u},u=>Promise.reject(s(u))))}}}function Aa(n){n.MediaStream=n.MediaStream||n.webkitMediaStream}function xa(n){if(typeof n=="object"&&n.RTCPeerConnection&&!("ontrack"in n.RTCPeerConnection.prototype)){Object.defineProperty(n.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(t){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=t)},enumerable:!0,configurable:!0});const e=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=i=>{i.stream.addEventListener("addtrack",r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(o=>o.track&&o.track.id===r.track.id):s={track:r.track};const a=new Event("track");a.track=r.track,a.receiver=s,a.transceiver={receiver:s},a.streams=[i.stream],this.dispatchEvent(a)}),i.stream.getTracks().forEach(r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(o=>o.track&&o.track.id===r.id):s={track:r};const a=new Event("track");a.track=r,a.receiver=s,a.transceiver={receiver:s},a.streams=[i.stream],this.dispatchEvent(a)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else Mt(n,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function La(n){if(typeof n=="object"&&n.RTCPeerConnection&&!("getSenders"in n.RTCPeerConnection.prototype)&&"createDTMFSender"in n.RTCPeerConnection.prototype){const e=function(r,s){return{track:s,get dtmf(){return this._dtmf===void 0&&(s.kind==="audio"?this._dtmf=r.createDTMFSender(s):this._dtmf=null),this._dtmf},_pc:r}};if(!n.RTCPeerConnection.prototype.getSenders){n.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const r=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(o,c){let d=r.apply(this,arguments);return d||(d=e(this,o),this._senders.push(d)),d};const s=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(o){s.apply(this,arguments);const c=this._senders.indexOf(o);c!==-1&&this._senders.splice(c,1)}}const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(s){this._senders=this._senders||[],t.apply(this,[s]),s.getTracks().forEach(a=>{this._senders.push(e(this,a))})};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(s){this._senders=this._senders||[],i.apply(this,[s]),s.getTracks().forEach(a=>{const o=this._senders.find(c=>c.track===a);o&&this._senders.splice(this._senders.indexOf(o),1)})}}else if(typeof n=="object"&&n.RTCPeerConnection&&"getSenders"in n.RTCPeerConnection.prototype&&"createDTMFSender"in n.RTCPeerConnection.prototype&&n.RTCRtpSender&&!("dtmf"in n.RTCRtpSender.prototype)){const e=n.RTCPeerConnection.prototype.getSenders;n.RTCPeerConnection.prototype.getSenders=function(){const i=e.apply(this,[]);return i.forEach(r=>r._pc=this),i},Object.defineProperty(n.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function Na(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender&&n.RTCRtpReceiver))return;if(!("getStats"in n.RTCRtpSender.prototype)){const t=n.RTCPeerConnection.prototype.getSenders;t&&(n.RTCPeerConnection.prototype.getSenders=function(){const s=t.apply(this,[]);return s.forEach(a=>a._pc=this),s});const i=n.RTCPeerConnection.prototype.addTrack;i&&(n.RTCPeerConnection.prototype.addTrack=function(){const s=i.apply(this,arguments);return s._pc=this,s}),n.RTCRtpSender.prototype.getStats=function(){const s=this;return this._pc.getStats().then(a=>Da(a,s.track,!0))}}if(!("getStats"in n.RTCRtpReceiver.prototype)){const t=n.RTCPeerConnection.prototype.getReceivers;t&&(n.RTCPeerConnection.prototype.getReceivers=function(){const r=t.apply(this,[]);return r.forEach(s=>s._pc=this),r}),Mt(n,"track",i=>(i.receiver._pc=i.srcElement,i)),n.RTCRtpReceiver.prototype.getStats=function(){const r=this;return this._pc.getStats().then(s=>Da(s,r.track,!1))}}if(!("getStats"in n.RTCRtpSender.prototype&&"getStats"in n.RTCRtpReceiver.prototype))return;const e=n.RTCPeerConnection.prototype.getStats;n.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof n.MediaStreamTrack){const i=arguments[0];let r,s,a;return this.getSenders().forEach(o=>{o.track===i&&(r?a=!0:r=o)}),this.getReceivers().forEach(o=>(o.track===i&&(s?a=!0:s=o),o.track===i)),a||r&&s?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):r?r.getStats():s?s.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function Ua(n){n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(a=>this._shimmedLocalStreams[a][0])};const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(a,o){if(!o)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const c=e.apply(this,arguments);return this._shimmedLocalStreams[o.id]?this._shimmedLocalStreams[o.id].indexOf(c)===-1&&this._shimmedLocalStreams[o.id].push(c):this._shimmedLocalStreams[o.id]=[o,c],c};const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(a){this._shimmedLocalStreams=this._shimmedLocalStreams||{},a.getTracks().forEach(d=>{if(this.getSenders().find(l=>l.track===d))throw new DOMException("Track already exists.","InvalidAccessError")});const o=this.getSenders();t.apply(this,arguments);const c=this.getSenders().filter(d=>o.indexOf(d)===-1);this._shimmedLocalStreams[a.id]=[a].concat(c)};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[a.id],i.apply(this,arguments)};const r=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},a&&Object.keys(this._shimmedLocalStreams).forEach(o=>{const c=this._shimmedLocalStreams[o].indexOf(a);c!==-1&&this._shimmedLocalStreams[o].splice(c,1),this._shimmedLocalStreams[o].length===1&&delete this._shimmedLocalStreams[o]}),r.apply(this,arguments)}}function Fa(n,e){if(!n.RTCPeerConnection)return;if(n.RTCPeerConnection.prototype.addTrack&&e.version>=65)return Ua(n);const t=n.RTCPeerConnection.prototype.getLocalStreams;n.RTCPeerConnection.prototype.getLocalStreams=function(){const u=t.apply(this);return this._reverseStreams=this._reverseStreams||{},u.map(l=>this._reverseStreams[l.id])};const i=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(u){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},u.getTracks().forEach(l=>{if(this.getSenders().find(m=>m.track===l))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[u.id]){const l=new n.MediaStream(u.getTracks());this._streams[u.id]=l,this._reverseStreams[l.id]=u,u=l}i.apply(this,[u])};const r=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(u){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[u.id]||u]),delete this._reverseStreams[this._streams[u.id]?this._streams[u.id].id:u.id],delete this._streams[u.id]},n.RTCPeerConnection.prototype.addTrack=function(u,l){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const h=[].slice.call(arguments,1);if(h.length!==1||!h[0].getTracks().find(p=>p===u))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(p=>p.track===u))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const v=this._streams[l.id];if(v)v.addTrack(u),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const p=new n.MediaStream([u]);this._streams[l.id]=p,this._reverseStreams[p.id]=l,this.addStream(p)}return this.getSenders().find(p=>p.track===u)};function s(d,u){let l=u.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];l=l.replace(new RegExp(v.id,"g"),m.id)}),new RTCSessionDescription({type:u.type,sdp:l})}function a(d,u){let l=u.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];l=l.replace(new RegExp(m.id,"g"),v.id)}),new RTCSessionDescription({type:u.type,sdp:l})}["createOffer","createAnswer"].forEach(function(d){const u=n.RTCPeerConnection.prototype[d],l={[d](){const h=arguments;return arguments.length&&typeof arguments[0]=="function"?u.apply(this,[v=>{const p=s(this,v);h[0].apply(null,[p])},v=>{h[1]&&h[1].apply(null,v)},arguments[2]]):u.apply(this,arguments).then(v=>s(this,v))}};n.RTCPeerConnection.prototype[d]=l[d]});const o=n.RTCPeerConnection.prototype.setLocalDescription;n.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?o.apply(this,arguments):(arguments[0]=a(this,arguments[0]),o.apply(this,arguments))};const c=Object.getOwnPropertyDescriptor(n.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(n.RTCPeerConnection.prototype,"localDescription",{get(){const d=c.get.apply(this);return d.type===""?d:s(this,d)}}),n.RTCPeerConnection.prototype.removeTrack=function(u){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!u._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(u._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let h;Object.keys(this._streams).forEach(m=>{this._streams[m].getTracks().find(p=>u.track===p)&&(h=this._streams[m])}),h&&(h.getTracks().length===1?this.removeStream(this._reverseStreams[h.id]):h.removeTrack(u.track),this.dispatchEvent(new Event("negotiationneeded")))}}function zi(n,e){!n.RTCPeerConnection&&n.webkitRTCPeerConnection&&(n.RTCPeerConnection=n.webkitRTCPeerConnection),n.RTCPeerConnection&&e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const i=n.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new(t==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),i.apply(this,arguments)}};n.RTCPeerConnection.prototype[t]=r[t]})}function ja(n,e){Mt(n,"negotiationneeded",t=>{const i=t.target;if(!((e.version<72||i.getConfiguration&&i.getConfiguration().sdpSemantics==="plan-b")&&i.signalingState!=="stable"))return t})}var Ba=Object.freeze({__proto__:null,fixNegotiationNeeded:ja,shimAddTrackRemoveTrack:Fa,shimAddTrackRemoveTrackWithNative:Ua,shimGetSendersWithDtmf:La,shimGetUserMedia:Oa,shimMediaStream:Aa,shimOnTrack:xa,shimPeerConnection:zi,shimSenderReceiverGetStats:Na});function Va(n,e){const t=n&&n.navigator,i=n&&n.MediaStreamTrack;if(t.getUserMedia=function(r,s,a){qi("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),t.mediaDevices.getUserMedia(r).then(s,a)},!(e.version>55&&"autoGainControl"in t.mediaDevices.getSupportedConstraints())){const r=function(a,o,c){o in a&&!(c in a)&&(a[c]=a[o],delete a[o])},s=t.mediaDevices.getUserMedia.bind(t.mediaDevices);if(t.mediaDevices.getUserMedia=function(a){return typeof a=="object"&&typeof a.audio=="object"&&(a=JSON.parse(JSON.stringify(a)),r(a.audio,"autoGainControl","mozAutoGainControl"),r(a.audio,"noiseSuppression","mozNoiseSuppression")),s(a)},i&&i.prototype.getSettings){const a=i.prototype.getSettings;i.prototype.getSettings=function(){const o=a.apply(this,arguments);return r(o,"mozAutoGainControl","autoGainControl"),r(o,"mozNoiseSuppression","noiseSuppression"),o}}if(i&&i.prototype.applyConstraints){const a=i.prototype.applyConstraints;i.prototype.applyConstraints=function(o){return this.kind==="audio"&&typeof o=="object"&&(o=JSON.parse(JSON.stringify(o)),r(o,"autoGainControl","mozAutoGainControl"),r(o,"noiseSuppression","mozNoiseSuppression")),a.apply(this,[o])}}}}function vl(n,e){n.navigator.mediaDevices&&"getDisplayMedia"in n.navigator.mediaDevices||n.navigator.mediaDevices&&(n.navigator.mediaDevices.getDisplayMedia=function(i){if(!(i&&i.video)){const r=new DOMException("getDisplayMedia without video constraints is undefined");return r.name="NotFoundError",r.code=8,Promise.reject(r)}return i.video===!0?i.video={mediaSource:e}:i.video.mediaSource=e,n.navigator.mediaDevices.getUserMedia(i)})}function qa(n){typeof n=="object"&&n.RTCTrackEvent&&"receiver"in n.RTCTrackEvent.prototype&&!("transceiver"in n.RTCTrackEvent.prototype)&&Object.defineProperty(n.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Wi(n,e){if(typeof n!="object"||!(n.RTCPeerConnection||n.mozRTCPeerConnection))return;!n.RTCPeerConnection&&n.mozRTCPeerConnection&&(n.RTCPeerConnection=n.mozRTCPeerConnection),e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(r){const s=n.RTCPeerConnection.prototype[r],a={[r](){return arguments[0]=new(r==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),s.apply(this,arguments)}};n.RTCPeerConnection.prototype[r]=a[r]});const t={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=n.RTCPeerConnection.prototype.getStats;n.RTCPeerConnection.prototype.getStats=function(){const[s,a,o]=arguments;return i.apply(this,[s||null]).then(c=>{if(e.version<53&&!a)try{c.forEach(d=>{d.type=t[d.type]||d.type})}catch(d){if(d.name!=="TypeError")throw d;c.forEach((u,l)=>{c.set(l,Object.assign({},u,{type:t[u.type]||u.type}))})}return c}).then(a,o)}}function Ka(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender)||n.RTCRtpSender&&"getStats"in n.RTCRtpSender.prototype)return;const e=n.RTCPeerConnection.prototype.getSenders;e&&(n.RTCPeerConnection.prototype.getSenders=function(){const r=e.apply(this,[]);return r.forEach(s=>s._pc=this),r});const t=n.RTCPeerConnection.prototype.addTrack;t&&(n.RTCPeerConnection.prototype.addTrack=function(){const r=t.apply(this,arguments);return r._pc=this,r}),n.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function za(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender)||n.RTCRtpSender&&"getStats"in n.RTCRtpReceiver.prototype)return;const e=n.RTCPeerConnection.prototype.getReceivers;e&&(n.RTCPeerConnection.prototype.getReceivers=function(){const i=e.apply(this,[]);return i.forEach(r=>r._pc=this),i}),Mt(n,"track",t=>(t.receiver._pc=t.srcElement,t)),n.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Wa(n){!n.RTCPeerConnection||"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){qi("removeStream","removeTrack"),this.getSenders().forEach(i=>{i.track&&t.getTracks().includes(i.track)&&this.removeTrack(i)})})}function Ga(n){n.DataChannel&&!n.RTCDataChannel&&(n.RTCDataChannel=n.DataChannel)}function Ha(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.addTransceiver;e&&(n.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let i=arguments[1]&&arguments[1].sendEncodings;i===void 0&&(i=[]),i=[...i];const r=i.length>0;r&&i.forEach(a=>{if("rid"in a&&!/^[a-z0-9]{0,16}$/i.test(a.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in a&&!(parseFloat(a.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in a&&!(parseFloat(a.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const s=e.apply(this,arguments);if(r){const{sender:a}=s,o=a.getParameters();(!("encodings"in o)||o.encodings.length===1&&Object.keys(o.encodings[0]).length===0)&&(o.encodings=i,a.sendEncodings=i,this.setParametersPromises.push(a.setParameters(o).then(()=>{delete a.sendEncodings}).catch(()=>{delete a.sendEncodings})))}return s})}function Ja(n){if(!(typeof n=="object"&&n.RTCRtpSender))return;const e=n.RTCRtpSender.prototype.getParameters;e&&(n.RTCRtpSender.prototype.getParameters=function(){const i=e.apply(this,arguments);return"encodings"in i||(i.encodings=[].concat(this.sendEncodings||[{}])),i})}function $a(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.createOffer;n.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}function Qa(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.createAnswer;n.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}var Ya=Object.freeze({__proto__:null,shimAddTransceiver:Ha,shimCreateAnswer:Qa,shimCreateOffer:$a,shimGetDisplayMedia:vl,shimGetParameters:Ja,shimGetUserMedia:Va,shimOnTrack:qa,shimPeerConnection:Wi,shimRTCDataChannel:Ga,shimReceiverGetStats:za,shimRemoveStream:Wa,shimSenderGetStats:Ka});function Xa(n){if(!(typeof n!="object"||!n.RTCPeerConnection)){if("getLocalStreams"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in n.RTCPeerConnection.prototype)){const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addStream=function(i){this._localStreams||(this._localStreams=[]),this._localStreams.includes(i)||this._localStreams.push(i),i.getAudioTracks().forEach(r=>e.call(this,r,i)),i.getVideoTracks().forEach(r=>e.call(this,r,i))},n.RTCPeerConnection.prototype.addTrack=function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),a=1;a<r;a++)s[a-1]=arguments[a];return s&&s.forEach(o=>{this._localStreams?this._localStreams.includes(o)||this._localStreams.push(o):this._localStreams=[o]}),e.apply(this,arguments)}}"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){this._localStreams||(this._localStreams=[]);const i=this._localStreams.indexOf(t);if(i===-1)return;this._localStreams.splice(i,1);const r=t.getTracks();this.getSenders().forEach(s=>{r.includes(s.track)&&this.removeTrack(s)})})}}function Za(n){if(!(typeof n!="object"||!n.RTCPeerConnection)&&("getRemoteStreams"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in n.RTCPeerConnection.prototype))){Object.defineProperty(n.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(t){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=t),this.addEventListener("track",this._onaddstreampoly=i=>{i.streams.forEach(r=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(r))return;this._remoteStreams.push(r);const s=new Event("addstream");s.stream=r,this.dispatchEvent(s)})})}});const e=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(){const i=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(r){r.streams.forEach(s=>{if(i._remoteStreams||(i._remoteStreams=[]),i._remoteStreams.indexOf(s)>=0)return;i._remoteStreams.push(s);const a=new Event("addstream");a.stream=s,i.dispatchEvent(a)})}),e.apply(i,arguments)}}}function eo(n){if(typeof n!="object"||!n.RTCPeerConnection)return;const e=n.RTCPeerConnection.prototype,t=e.createOffer,i=e.createAnswer,r=e.setLocalDescription,s=e.setRemoteDescription,a=e.addIceCandidate;e.createOffer=function(d,u){const l=arguments.length>=2?arguments[2]:arguments[0],h=t.apply(this,[l]);return u?(h.then(d,u),Promise.resolve()):h},e.createAnswer=function(d,u){const l=arguments.length>=2?arguments[2]:arguments[0],h=i.apply(this,[l]);return u?(h.then(d,u),Promise.resolve()):h};let o=function(c,d,u){const l=r.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l};e.setLocalDescription=o,o=function(c,d,u){const l=s.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l},e.setRemoteDescription=o,o=function(c,d,u){const l=a.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l},e.addIceCandidate=o}function to(n){const e=n&&n.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){const t=e.mediaDevices,i=t.getUserMedia.bind(t);e.mediaDevices.getUserMedia=r=>i(no(r))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=(function(i,r,s){e.mediaDevices.getUserMedia(i).then(r,s)}).bind(e))}function no(n){return n&&n.video!==void 0?Object.assign({},n,{video:Ia(n.video)}):n}function io(n){if(!n.RTCPeerConnection)return;const e=n.RTCPeerConnection;n.RTCPeerConnection=function(i,r){if(i&&i.iceServers){const s=[];for(let a=0;a<i.iceServers.length;a++){let o=i.iceServers[a];o.urls===void 0&&o.url?(qi("RTCIceServer.url","RTCIceServer.urls"),o=JSON.parse(JSON.stringify(o)),o.urls=o.url,delete o.url,s.push(o)):s.push(i.iceServers[a])}i.iceServers=s}return new e(i,r)},n.RTCPeerConnection.prototype=e.prototype,"generateCertificate"in e&&Object.defineProperty(n.RTCPeerConnection,"generateCertificate",{get(){return e.generateCertificate}})}function ro(n){typeof n=="object"&&n.RTCTrackEvent&&"receiver"in n.RTCTrackEvent.prototype&&!("transceiver"in n.RTCTrackEvent.prototype)&&Object.defineProperty(n.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function so(n){const e=n.RTCPeerConnection.prototype.createOffer;n.RTCPeerConnection.prototype.createOffer=function(i){if(i){typeof i.offerToReceiveAudio<"u"&&(i.offerToReceiveAudio=!!i.offerToReceiveAudio);const r=this.getTransceivers().find(a=>a.receiver.track.kind==="audio");i.offerToReceiveAudio===!1&&r?r.direction==="sendrecv"?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":r.direction==="recvonly"&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):i.offerToReceiveAudio===!0&&!r&&this.addTransceiver("audio",{direction:"recvonly"}),typeof i.offerToReceiveVideo<"u"&&(i.offerToReceiveVideo=!!i.offerToReceiveVideo);const s=this.getTransceivers().find(a=>a.receiver.track.kind==="video");i.offerToReceiveVideo===!1&&s?s.direction==="sendrecv"?s.setDirection?s.setDirection("sendonly"):s.direction="sendonly":s.direction==="recvonly"&&(s.setDirection?s.setDirection("inactive"):s.direction="inactive"):i.offerToReceiveVideo===!0&&!s&&this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function ao(n){typeof n!="object"||n.AudioContext||(n.AudioContext=n.webkitAudioContext)}var oo=Object.freeze({__proto__:null,shimAudioContext:ao,shimCallbacksAPI:eo,shimConstraints:no,shimCreateOfferLegacy:so,shimGetUserMedia:to,shimLocalStreamsAPI:Xa,shimRTCIceServerUrls:io,shimRemoteStreamsAPI:Za,shimTrackEventTransceiver:ro}),Gi={exports:{}},co;function yl(){return co||(co=1,function(n){const e={};e.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},e.localCName=e.generateIdentifier(),e.splitLines=function(t){return t.trim().split(`
|
|
1
|
+
(function(W,ke){typeof exports=="object"&&typeof module<"u"?ke(exports):typeof define=="function"&&define.amd?define(["exports"],ke):(W=typeof globalThis<"u"?globalThis:W||self,ke(W.index={}))})(this,function(W){"use strict";var Df=Object.defineProperty;var Mf=(W,ke,Pt)=>ke in W?Df(W,ke,{enumerable:!0,configurable:!0,writable:!0,value:Pt}):W[ke]=Pt;var Rn=(W,ke,Pt)=>Mf(W,typeof ke!="symbol"?ke+"":ke,Pt);class ke extends Error{constructor({kind:t,description:i,error:r}){super(JSON.stringify({kind:t,description:i}));Rn(this,"kind");Rn(this,"description");Rn(this,"error");this.kind=t,this.description=i,this.error=r}}class Pt extends ke{constructor(e,t){super({kind:"ChatCreationFailed",description:`Failed to create ${t?"persistent":""} chat, mode: ${e}`})}}class jr extends ke{constructor(e){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${e}`})}}class wt extends ke{constructor(t,i){super({kind:"ValidationError",description:t});Rn(this,"key");this.key=i}}class Br extends ke{constructor(e){super({kind:"WSError",description:e})}}var Vr=(n=>(n.TRIAL="trial",n.BASIC="basic",n.ENTERPRISE="enterprise",n.LITE="lite",n.ADVANCED="advanced",n))(Vr||{}),qr=(n=>(n.TRIAL="deid-trial",n.PRO="deid-pro",n.ENTERPRISE="deid-enterprise",n.LITE="deid-lite",n.ADVANCED="deid-advanced",n.BUILD="deid-api-build",n.LAUNCH="deid-api-launch",n.SCALE="deid-api-scale",n))(qr||{}),Kr=(n=>(n.Created="created",n.Started="started",n.Done="done",n.Error="error",n.Rejected="rejected",n.Ready="ready",n))(Kr||{}),zr=(n=>(n.Unrated="Unrated",n.Positive="Positive",n.Negative="Negative",n))(zr||{}),pe=(n=>(n.Functional="Functional",n.TextOnly="TextOnly",n.Maintenance="Maintenance",n.Playground="Playground",n.DirectPlayback="DirectPlayback",n.Off="Off",n))(pe||{}),_e=(n=>(n.Embed="embed",n.Query="query",n.Partial="partial",n.Answer="answer",n.Transcribe="transcribe",n.Complete="done",n))(_e||{}),Wr=(n=>(n.KnowledgeProcessing="knowledge/processing",n.KnowledgeIndexing="knowledge/indexing",n.KnowledgeFailed="knowledge/error",n.KnowledgeDone="knowledge/done",n))(Wr||{}),Gr=(n=>(n.Knowledge="knowledge",n.Document="document",n.Record="record",n))(Gr||{}),Hr=(n=>(n.Pdf="pdf",n.Text="text",n.Html="html",n.Word="word",n.Json="json",n.Markdown="markdown",n.Csv="csv",n.Excel="excel",n.Powerpoint="powerpoint",n.Archive="archive",n.Image="image",n.Audio="audio",n.Video="video",n))(Hr||{}),li=(n=>(n.Clip="clip",n.Talk="talk",n.Expressive="expressive",n))(li||{});const _c=n=>{switch(n){case"clip":return"clip";case"talk":return"talk";case"expressive":return"expressive";default:throw new Error(`Unknown video type: ${n}`)}};var G=(n=>(n.Start="START",n.Stop="STOP",n))(G||{}),ze=(n=>(n.Strong="STRONG",n.Weak="WEAK",n.Unknown="UNKNOWN",n))(ze||{}),Pe=(n=>(n.Idle="IDLE",n.Loading="LOADING",n.Talking="TALKING",n))(Pe||{}),re=(n=>(n.ChatAnswer="chat/answer",n.ChatPartial="chat/partial",n.ChatAudioTranscribed="chat/audio-transcribed",n.StreamDone="stream/done",n.StreamStarted="stream/started",n.StreamFailed="stream/error",n.StreamReady="stream/ready",n.StreamCreated="stream/created",n.StreamInterrupt="stream/interrupt",n.StreamVideoCreated="stream-video/started",n.StreamVideoDone="stream-video/done",n.StreamVideoError="stream-video/error",n.StreamVideoRejected="stream-video/rejected",n))(re||{}),te=(n=>(n.New="new",n.Fail="fail",n.Connected="connected",n.Connecting="connecting",n.Closed="closed",n.Completed="completed",n.Disconnecting="disconnecting",n.Disconnected="disconnected",n))(te||{}),We=(n=>(n.Legacy="legacy",n.Fluent="fluent",n))(We||{}),rn=(n=>(n.Livekit="livekit",n))(rn||{}),Jr=(n=>(n.Amazon="amazon",n.AzureOpenAi="azure-openai",n.Microsoft="microsoft",n.Afflorithmics="afflorithmics",n.Elevenlabs="elevenlabs",n))(Jr||{}),$r=(n=>(n.Public="public",n.Premium="premium",n.Private="private",n))($r||{});const Ic=45*1e3,Dc="X-Playground-Chat",sn="https://api.d-id.com",Mc="wss://notifications.d-id.com",Oc="79f81a83a67430be2bc0fd61042b8faa",Ac=(...n)=>{},Qr=n=>new Promise(e=>setTimeout(e,n)),Ut=(n=16)=>{const e=new Uint8Array(n);return window.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("").slice(0,13)},Yr=n=>n.type==="clip"&&n.presenter_id.startsWith("v2_")?"clip_v2":n.type,hi=n=>n===li.Expressive,xc=n=>[pe.TextOnly,pe.Playground,pe.Maintenance].includes(n),Xr=n=>n&&[pe.DirectPlayback,pe.Off].includes(n);function Lc(n,e){let t;return{promise:new Promise((r,s)=>{t=setTimeout(()=>s(new Error(e)),n)}),clear:()=>clearTimeout(t)}}async function fi(n,e){const t={limit:(e==null?void 0:e.limit)??3,delayMs:(e==null?void 0:e.delayMs)??0,timeout:(e==null?void 0:e.timeout)??3e4,timeoutErrorMessage:(e==null?void 0:e.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(e==null?void 0:e.shouldRetryFn)??(()=>!0),onRetry:(e==null?void 0:e.onRetry)??(()=>{})};let i;for(let r=1;r<=t.limit;r++)try{if(!t.timeout)return await n();const{promise:s,clear:a}=Lc(t.timeout,t.timeoutErrorMessage),o=n().finally(a);return await Promise.race([o,s])}catch(s){if(i=s,!t.shouldRetryFn(s)||r>=t.limit)throw s;await Qr(t.delayMs),t.onRetry(s)}throw i}function mi(n){if(n!==void 0)return window.localStorage.setItem("did_external_key_id",n),n;let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=Ut();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Nc=Ut();function Zr(n,e){if(n.type==="bearer")return`Bearer ${n.token}`;if(n.type==="basic")return`Basic ${btoa(`${n.username}:${n.password}`)}`;if(n.type==="key")return`Client-Key ${n.clientKey}.${mi(e)}_${Nc}`;throw new Error(`Unknown auth type: ${n}`)}const Uc=n=>fi(n,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:e=>e.status===429});function pi(n,e=sn,t,i){const r=async(s,a)=>{const{skipErrorHandler:o,...c}=a||{},d=await Uc(()=>fetch(e+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:Zr(n,i),"Content-Type":"application/json"}}));if(!d.ok){let u=await d.text().catch(()=>`Failed to fetch with status ${d.status}`);const l=new Error(u);throw t&&!o&&t(l,{url:s,options:c,headers:d.headers}),l}return d.json()};return{get(s,a){return r(s,{...a,method:"GET"})},post(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"POST"})},delete(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"DELETE"})},patch(s,a,o){return r(s,{...o,body:JSON.stringify(a),method:"PATCH"})}}}function Fc(n,e=sn,t,i){const r=pi(n,`${e}/agents`,t,i);return{create(s,a){return r.post("/",s,a)},getAgents(s,a){return r.get(`/${s?`?tag=${s}`:""}`,a).then(o=>o??[])},getById(s,a){return r.get(`/${s}`,a)},delete(s,a){return r.delete(`/${s}`,void 0,a)},update(s,a,o){return r.patch(`/${s}`,a,o)},newChat(s,a,o){return r.post(`/${s}/chat`,a,o)},chat(s,a,o,c){return r.post(`/${s}/chat/${a}`,o,c)},createRating(s,a,o,c){return r.post(`/${s}/chat/${a}/ratings`,o,c)},updateRating(s,a,o,c,d){return r.patch(`/${s}/chat/${a}/ratings/${o}`,c,d)},deleteRating(s,a,o,c){return r.delete(`/${s}/chat/${a}/ratings/${o}`,c)},getSTTToken(s,a){return r.get(`/${s}/stt-token`,a)}}}function jc(n){var r,s,a,o;const e=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",t=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},i=n.presenter;return{$os:`${t()}`,isMobile:`${e()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Yr(i),agentVoice:{voiceId:(s=(r=n.presenter)==null?void 0:r.voice)==null?void 0:s.voice_id,provider:(o=(a=n.presenter)==null?void 0:a.voice)==null?void 0:o.type}}}function Bc(n){var t,i,r,s,a,o;const e=(t=n.llm)==null?void 0:t.prompt_customization;return{agentType:Yr(n.presenter),owner_id:n.owner_id??"",promptVersion:(i=n.llm)==null?void 0:i.prompt_version,behavior:{role:e==null?void 0:e.role,personality:e==null?void 0:e.personality,instructions:(r=n.llm)==null?void 0:r.instructions},temperature:(s=n.llm)==null?void 0:s.temperature,knowledgeSource:e==null?void 0:e.knowledge_source,starterQuestionsCount:(o=(a=n.knowledge)==null?void 0:a.starter_message)==null?void 0:o.length,topicsToAvoid:e==null?void 0:e.topics_to_avoid,maxResponseLength:e==null?void 0:e.max_response_length,agentId:n.id,access:n.access,name:n.preview_name,...n.access==="public"?{from:"agent-template"}:{}}}const Vc=n=>n.reduce((e,t)=>e+t,0),es=n=>Vc(n)/n.length;function qc(n,e,t){var c,d,u;const{event:i,...r}=n,{template:s}=(e==null?void 0:e.llm)||{},{language:a}=((c=e==null?void 0:e.presenter)==null?void 0:c.voice)||{};return{...r,llm:{...r.llm,template:s},script:{...r.script,provider:{...(d=r==null?void 0:r.script)==null?void 0:d.provider,language:a}},stitch:(e==null?void 0:e.presenter.type)==="talk"?(u=e==null?void 0:e.presenter)==null?void 0:u.stitch:void 0,...t}}function ts(n){"requestIdleCallback"in window?requestIdleCallback(n,{timeout:2e3}):setTimeout(n,0)}const Kc="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function zc(n){const e=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",t={};return{token:n.token||"testKey",distinct_id:mi(n.externalId),agentId:n.agentId,additionalProperties:{id:mi(n.externalId),...n.mixpanelAdditionalProperties||{}},isEnabled:n.isEnabled??!0,getRandom:Ut,enrich(i){this.additionalProperties={...this.additionalProperties,...i}},async track(i,r,s){if(!this.isEnabled)return Promise.resolve();const{audioPath:a,...o}=r||{},c=s||Date.now(),d={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:i,properties:{...this.additionalProperties,...o,agentId:this.agentId,source:e,token:this.token,time:c,$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch(Kc,d).catch(u=>console.error("Analytics tracking error:",u)),Promise.resolve()},linkTrack(i,r,s,a){t[i]||(t[i]={events:{},resolvedDependencies:[]}),a.includes(s)||a.push(s);const o=t[i];if(o.events[s]={props:r},o.resolvedDependencies.push(s),a.every(d=>o.resolvedDependencies.includes(d))){const d=a.reduce((u,l)=>o.events[l]?{...u,...o.events[l].props}:u,{});this.track(i,d),o.resolvedDependencies=o.resolvedDependencies.filter(u=>!a.includes(u)),a.forEach(u=>{delete o.events[u]})}}}}function gi(){let n=0;return{reset:()=>n=0,update:()=>n=Date.now(),get:(e=!1)=>e?Date.now()-n:n}}const Ge=gi(),vi=gi(),ns=gi();function is(n){return n===pe.Playground?{headers:{[Dc]:"true"}}:{}}async function rs(n,e,t,i,r=!1,s){try{return!s&&!Xr(i)&&(s=await e.newChat(n.id,{persist:r},is(i)),t.track("agent-chat",{event:"created",chatId:s.id,mode:i})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??i}}catch(a){throw Wc(a)==="InsufficientCreditsError"?new Error("InsufficientCreditsError"):new Error("Cannot create new chat")}}const Wc=n=>{try{const e=JSON.parse(n.message);return e==null?void 0:e.kind}catch{return"UnknownError"}};function Gc(n){return n&&n.length>0?n:[]}function Hc(n,e,t,i){const r=pi(n,`${e}/v2/agents/${t}`,i);return{async createStream(s){return r.post("/sessions",s)}}}const ss=(n,e)=>(t,i)=>n&&console.log(`[${e}] ${t}`,i??"");function Jc(n,e,t){const i=(e.timestamp-n.timestamp)/1e3;return{duration:i,bytesReceived:e.bytesReceived-n.bytesReceived,bitrate:Math.round((e.bytesReceived-n.bytesReceived)*8/i),packetsReceived:e.packetsReceived-n.packetsReceived,packetsLost:e.packetsLost-n.packetsLost,framesDropped:e.framesDropped-n.framesDropped,framesDecoded:e.framesDecoded-n.framesDecoded,jitter:e.jitter,avgJitterDelayInInterval:(e.jitterBufferDelay-n.jitterBufferDelay)/(e.jitterBufferEmittedCount-n.jitterBufferEmittedCount),jitterBufferEmittedCount:e.jitterBufferEmittedCount-n.jitterBufferEmittedCount,jitterBufferDelay:(e.jitterBufferDelay-n.jitterBufferDelay)/i,framesPerSecond:e.framesPerSecond,freezeCount:e.freezeCount-n.freezeCount,freezeDuration:e.freezeDuration-n.freezeDuration,lowFpsCount:t}}function $c(n){return n.filter(e=>e.freezeCount>0||e.framesPerSecond<21||e.framesDropped>0||e.packetsLost>0).map(e=>{const{timestamp:t,...i}=e,r=[];return e.freezeCount>0&&r.push("freeze"),e.framesPerSecond<21&&r.push("low fps"),e.framesDropped>0&&r.push("frames dropped"),e.packetsLost>0&&r.push("packet loss"),{...i,causes:r}})}function Qc(n){let e="",t=0;for(const i of n.values()){if(i&&i.type==="codec"&&i.mimeType.startsWith("video")&&(e=i.mimeType.split("/")[1]),i&&i.type==="candidate-pair"){const r=i.currentRoundTripTime,a=i.nominated===!0;r>0&&(a||t===0)&&(t=r)}if(i&&i.type==="inbound-rtp"&&i.kind==="video")return{codec:e,rtt:t,timestamp:i.timestamp,bytesReceived:i.bytesReceived,packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,frameWidth:i.frameWidth,frameHeight:i.frameHeight,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.totalFreezesDuration}}return{}}function as(n,e,t){const i=n.map((c,d)=>d===0?t?{timestamp:c.timestamp,duration:0,rtt:c.rtt,bytesReceived:c.bytesReceived-t.bytesReceived,bitrate:(c.bytesReceived-t.bytesReceived)*8/(e/1e3),packetsReceived:c.packetsReceived-t.packetsReceived,packetsLost:c.packetsLost-t.packetsLost,framesDropped:c.framesDropped-t.framesDropped,framesDecoded:c.framesDecoded-t.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-t.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-t.jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-t.jitterBufferDelay)/(c.jitterBufferEmittedCount-t.jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-t.freezeCount,freezeDuration:c.freezeDuration-t.freezeDuration}:{timestamp:c.timestamp,rtt:c.rtt,duration:0,bytesReceived:c.bytesReceived,bitrate:c.bytesReceived*8/(e/1e3),packetsReceived:c.packetsReceived,packetsLost:c.packetsLost,framesDropped:c.framesDropped,framesDecoded:c.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount,avgJitterDelayInInterval:c.jitterBufferDelay/c.jitterBufferEmittedCount,framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount,freezeDuration:c.freezeDuration}:{timestamp:c.timestamp,duration:e*d/1e3,rtt:c.rtt,bytesReceived:c.bytesReceived-n[d-1].bytesReceived,bitrate:(c.bytesReceived-n[d-1].bytesReceived)*8/(e/1e3),packetsReceived:c.packetsReceived-n[d-1].packetsReceived,packetsLost:c.packetsLost-n[d-1].packetsLost,framesDropped:c.framesDropped-n[d-1].framesDropped,framesDecoded:c.framesDecoded-n[d-1].framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-n[d-1].jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-n[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-n[d-1].jitterBufferDelay)/(c.jitterBufferEmittedCount-n[d-1].jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-n[d-1].freezeCount,freezeDuration:c.freezeDuration-n[d-1].freezeDuration}),r=$c(i),s=r.reduce((c,d)=>c+(d.causes.includes("low fps")?1:0),0),a=i.filter(c=>!!c.avgJitterDelayInInterval).map(c=>c.avgJitterDelayInInterval),o=i.filter(c=>!!c.rtt).map(c=>c.rtt);return{webRTCStats:{anomalies:r,minRtt:Math.min(...o),avgRtt:es(o),maxRtt:Math.max(...o),aggregateReport:Jc(n[0],n[n.length-1],s),minJitterDelayInInterval:Math.min(...a),maxJitterDelayInInterval:Math.max(...a),avgJitterDelayInInterval:es(a)},codec:n[0].codec,resolution:`${n[0].frameWidth}x${n[0].frameHeight}`}}const _n=100,Yc=Math.max(Math.ceil(400/_n),1),Xc=.25,Zc=.28;function ed(){let n=0,e,t,i=0;return r=>{for(const s of r.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const a=s.jitterBufferDelay,o=s.jitterBufferEmittedCount;if(t&&o>t){const u=a-e,l=o-t;i=u/l}e=a,t=o;const c=s.framesDecoded,d=c-n>0;return n=c,{isReceiving:d,avgJitterDelayInInterval:i,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:i}}}function os(n,e,t,i,r){let s=null,a=[],o,c=0,d=!1,u=ze.Unknown,l=ze.Unknown,h=0,m=0;const v=ed();async function p(){const S=await n();if(!S)return;const{isReceiving:k,avgJitterDelayInInterval:R,freezeCount:w}=v(S),g=Qc(S);if(k)c=0,h=w-m,l=R<Xc?ze.Strong:R>Zc&&h>1?ze.Weak:u,l!==u&&(r==null||r(l),u=l,m+=h,h=0),d||(i==null||i(G.Start),o=a[a.length-1],a=[],d=!0),a.push(g);else if(d&&(c++,c>=Yc)){const b=as(a,_n,o);i==null||i(G.Stop,b),e()||t(),m=w,d=!1}}return{start:()=>{s||(s=setInterval(p,_n))},stop:()=>{s&&(clearInterval(s),s=null)},getReport:()=>as(a,_n,o)}}async function td(){try{return await Promise.resolve().then(()=>Rf)}catch{throw new Error("LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client")}}const nd={excellent:ze.Strong,good:ze.Strong,poor:ze.Weak,lost:ze.Unknown,unknown:ze.Unknown},an=JSON.stringify({kind:"InternalServerError",description:"Stream Error"});var yi=(n=>(n.Chat="lk.chat",n.Speak="did.speak",n.Interrupt="did.interrupt",n))(yi||{});function bi(n,e,t){var i,r;throw e("Failed to connect to LiveKit room:",n),(i=t.onConnectionStateChange)==null||i.call(t,te.Fail,"internal:init-error"),(r=t.onError)==null||r.call(t,n,{sessionId:""}),n}async function id(n,e,t){var Sc;const i=ss(t.debug||!1,"LiveKitStreamingManager"),{Room:r,RoomEvent:s,ConnectionState:a,Track:o}=await td(),{callbacks:c,auth:d,baseURL:u,analytics:l,microphoneStream:h}=t;let m=null,v=!1;const p=We.Fluent;let S=null,k=null,R=null,w=null,g=!1;m=new r({adaptiveStream:!1,dynacast:!0});let b=null;const P=2e4;let L=Pe.Idle;const U=Hc(d,u||sn,n,c.onError);let A,T,D;try{const x=await U.createStream({transport_provider:rn.Livekit,chat_persist:e.chat_persist??!0}),{id:B,session_token:z,session_url:ne}=x;(Sc=c.onStreamCreated)==null||Sc.call(c,{session_id:B,stream_id:B,agent_id:n}),A=B,T=z,D=ne,await m.prepareConnection(D,T)}catch(x){bi(x,i,c)}if(!D||!T||!A)return Promise.reject(new Error("Failed to initialize LiveKit stream"));m.on(s.ConnectionStateChanged,J).on(s.ConnectionQualityChanged,Q).on(s.ParticipantConnected,Y).on(s.ParticipantDisconnected,me).on(s.TrackSubscribed,ae).on(s.TrackUnsubscribed,ce).on(s.DataReceived,Se).on(s.MediaDevicesError,Ke).on(s.TranscriptionReceived,N).on(s.EncryptionError,j).on(s.TrackSubscriptionFailed,F);function N(x,B){var z;B!=null&&B.isLocal&&(Ge.update(),L===Pe.Talking&&((z=c.onInterruptDetected)==null||z.call(c,{type:"audio"}),L=Pe.Idle))}try{await m.connect(D,T),i("LiveKit room joined successfully"),b=setTimeout(()=>{var x;i("Track subscription timeout - no track subscribed within 30 seconds after connect"),b=null,l.track("connectivity-error",{error:"Track subscription timeout",sessionId:A}),(x=c.onError)==null||x.call(c,new Error("Track subscription timeout"),{sessionId:A}),Fr("internal:track-subscription-timeout")},P)}catch(x){bi(x,i,c)}l.enrich({"stream-type":p});function J(x){var B,z,ne,Re;switch(i("Connection state changed:",x),x){case a.Connecting:i("CALLBACK: onConnectionStateChange(Connecting)"),(B=c.onConnectionStateChange)==null||B.call(c,te.Connecting,"livekit:connecting");break;case a.Connected:i("LiveKit room connected successfully"),v=!0;break;case a.Disconnected:i("LiveKit room disconnected"),v=!1,g=!1,(z=c.onConnectionStateChange)==null||z.call(c,te.Disconnected,"livekit:disconnected");break;case a.Reconnecting:i("LiveKit room reconnecting..."),(ne=c.onConnectionStateChange)==null||ne.call(c,te.Connecting,"livekit:reconnecting");break;case a.SignalReconnecting:i("LiveKit room signal reconnecting..."),(Re=c.onConnectionStateChange)==null||Re.call(c,te.Connecting,"livekit:signal-reconnecting");break}}function Q(x,B){var z;i("Connection quality:",x),B!=null&&B.isLocal&&((z=c.onConnectivityStateChange)==null||z.call(c,nd[x]))}function Y(x){i("Participant connected:",x.identity)}function me(x){i("Participant disconnected:",x.identity),Fr("livekit:participant-disconnected")}function Te(){var x;w!==G.Start&&(i("CALLBACK: onVideoStateChange(Start)"),w=G.Start,(x=c.onVideoStateChange)==null||x.call(c,G.Start))}function be(x){var B;w!==G.Stop&&(i("CALLBACK: onVideoStateChange(Stop)"),w=G.Stop,(B=c.onVideoStateChange)==null||B.call(c,G.Stop,x))}function ae(x,B,z){var Re,Ee,Et;i(`Track subscribed: ${x.kind} from ${z.identity}`),b&&(clearTimeout(b),b=null,i("Track subscription timeout cleared"));const ne=x.mediaStreamTrack;if(!ne){i(`No mediaStreamTrack available for ${x.kind}`);return}S?(S.addTrack(ne),i(`Added ${x.kind} track to shared MediaStream`)):(S=new MediaStream([ne]),i(`Created shared MediaStream with ${x.kind} track`)),x.kind==="video"&&((Re=c.onStreamReady)==null||Re.call(c),i("CALLBACK: onSrcObjectReady"),(Ee=c.onSrcObjectReady)==null||Ee.call(c,S),g||(g=!0,i("CALLBACK: onConnectionStateChange(Connected)"),(Et=c.onConnectionStateChange)==null||Et.call(c,te.Connected,"livekit:track-subscribed")),R=os(()=>x.getRTCStatsReport(),()=>v,Ac,(nn,di)=>{i(`Video state change: ${nn}`),nn===G.Start?Te():nn===G.Stop&&be(di)}),R.start())}function ce(x,B,z){i(`Track unsubscribed: ${x.kind} from ${z.identity}`),x.kind==="video"&&(be(R==null?void 0:R.getReport()),R==null||R.stop(),R=null)}function Se(x,B,z,ne){var Ee,Et,nn,di,Cc,Ec,Pc,wc;const Re=new TextDecoder().decode(x);try{const Ne=JSON.parse(Re),Nt=ne||Ne.subject;if(i("Data received:",{subject:Nt,data:Ne}),Nt===re.ChatAnswer){const Ze=_e.Answer;(Ee=c.onMessage)==null||Ee.call(c,Ze,{event:Ze,...Ne})}else if(Nt===re.ChatPartial){const Ze=_e.Partial;(Et=c.onMessage)==null||Et.call(c,Ze,{event:Ze,...Ne})}else if([re.StreamVideoCreated,re.StreamVideoDone,re.StreamVideoError,re.StreamVideoRejected].includes(Nt)){L=Nt===re.StreamVideoCreated?Pe.Talking:Pe.Idle,(nn=c.onAgentActivityStateChange)==null||nn.call(c,L);const Ze=((Cc=(di=R==null?void 0:R.getReport())==null?void 0:di.webRTCStats)==null?void 0:Cc.avgRtt)??0,ui=Ze>0?Math.round(Ze/2*1e3):0,Rc={...Ne,downstreamNetworkLatency:ui};t.debug&&((Ec=Ne==null?void 0:Ne.metadata)!=null&&Ec.sentiment)&&(Rc.sentiment={id:Ne.metadata.sentiment.id,name:Ne.metadata.sentiment.sentiment}),(Pc=c.onMessage)==null||Pc.call(c,Nt,Rc)}else if(Nt===re.ChatAudioTranscribed){const Ze=_e.Transcribe;(wc=c.onMessage)==null||wc.call(c,Ze,{event:Ze,...Ne}),queueMicrotask(()=>{var ui;(ui=c.onAgentActivityStateChange)==null||ui.call(c,Pe.Loading)})}}catch(Ne){i("Failed to parse data channel message:",Ne)}}function Ke(x){var B;i("Media devices error:",x),(B=c.onError)==null||B.call(c,new Error(an),{sessionId:A})}function j(x){var B;i("Encryption error:",x),(B=c.onError)==null||B.call(c,new Error(an),{sessionId:A})}function F(x,B,z){i("Track subscription failed:",{trackSid:x,participant:B,reason:z})}function X(x){if(!m)return null;const B=m.localParticipant.audioTrackPublications;if(B){for(const[z,ne]of B)if(ne.source===o.Source.Microphone&&ne.track){const Ee=ne.track.mediaStreamTrack;if(Ee===x||Ee&&Ee.id===x.id)return ne}}return null}function Ce(x){if(!k||!k.track)return!1;const B=k.track.mediaStreamTrack;return B!==x&&(B==null?void 0:B.id)!==x.id}async function Zt(x){var Re,Ee;if(!v||!m)throw i("Room is not connected, cannot publish microphone stream"),new Error("Room is not connected");const B=x.getAudioTracks();if(B.length===0){i("No audio track found in the provided MediaStream");return}const z=B[0],ne=X(z);if(ne){i("Microphone track is already published, skipping",{trackId:z.id,publishedTrackId:(Ee=(Re=ne.track)==null?void 0:Re.mediaStreamTrack)==null?void 0:Ee.id}),k=ne;return}Ce(z)&&(i("Unpublishing existing microphone track before publishing new one"),await en()),i("Publishing microphone track from provided MediaStream",{trackId:z.id});try{k=await m.localParticipant.publishTrack(z,{source:o.Source.Microphone}),i("Microphone track published successfully",{trackSid:k.trackSid})}catch(Et){throw i("Failed to publish microphone track:",Et),Et}}async function en(){if(!(!k||!k.track))try{m&&(await m.localParticipant.unpublishTrack(k.track),i("Microphone track unpublished"))}catch(x){i("Error unpublishing microphone track:",x)}finally{k=null}}function ci(){S&&(S.getTracks().forEach(x=>x.stop()),S=null)}async function tn(x,B){var z,ne;if(!v||!m){i("Room is not connected for sending messages"),(z=c.onError)==null||z.call(c,new Error(an),{sessionId:A});return}try{await m.localParticipant.sendText(x,{topic:B}),i("Message sent successfully:",x)}catch(Re){i("Failed to send message:",Re),(ne=c.onError)==null||ne.call(c,new Error(an),{sessionId:A})}}async function _f(x){var B;try{const ne=JSON.parse(x).topic;return tn("",ne)}catch(z){i("Failed to send data channel message:",z),(B=c.onError)==null||B.call(c,new Error(an),{sessionId:A})}}function If(x){return tn(x,"lk.chat")}async function Fr(x){var B,z;b&&(clearTimeout(b),b=null),m&&(await en(),(B=c.onConnectionStateChange)==null||B.call(c,te.Disconnecting,x),await m.disconnect()),ci(),v=!1,g=!1,(z=c.onAgentActivityStateChange)==null||z.call(c,Pe.Idle),L=Pe.Idle}return{speak(x){const B=typeof x=="string"?x:JSON.stringify(x);return tn(B,"did.speak")},disconnect:()=>Fr("user:disconnect"),async reconnect(){var x,B;if((m==null?void 0:m.state)===a.Connected){i("Room is already connected");return}if(!m||!D||!T)throw i("Cannot reconnect: missing room, URL or token"),new Error("Cannot reconnect: session not available");i("Reconnecting to LiveKit room, state:",m.state),g=!1,(x=c.onConnectionStateChange)==null||x.call(c,te.Connecting,"user:reconnect");try{if(await m.connect(D,T),i("Room reconnected"),v=!0,m.remoteParticipants.size===0){if(i("Waiting for agent to join..."),!await new Promise(ne=>{const Re=setTimeout(()=>{m==null||m.off(s.ParticipantConnected,Ee),ne(!1)},5e3),Ee=()=>{clearTimeout(Re),m==null||m.off(s.ParticipantConnected,Ee),ne(!0)};m==null||m.on(s.ParticipantConnected,Ee)}))throw i("Agent did not join within timeout"),await m.disconnect(),new Error("Agent did not rejoin the room");i("Agent joined, reconnection successful")}}catch(z){throw i("Failed to reconnect:",z),(B=c.onConnectionStateChange)==null||B.call(c,te.Fail,"user:reconnect-failed"),z}},sendDataChannelMessage:_f,sendTextMessage:If,publishMicrophoneStream:Zt,unpublishMicrophoneStream:en,sessionId:A,streamId:A,streamType:p,interruptAvailable:!0,triggersAvailable:!1}}const rd=Object.freeze(Object.defineProperty({__proto__:null,DataChannelTopic:yi,createLiveKitStreamingManager:id,handleInitError:bi},Symbol.toStringTag,{value:"Module"}));function sd(n,e,t){if(!n)throw new Error("Please connect to the agent first");if(!n.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(e!==We.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!t)throw new Error("No active video to interrupt")}async function ad(n,e){const t={type:re.StreamInterrupt,videoId:e,timestamp:Date.now()};n.sendDataChannelMessage(JSON.stringify(t))}async function od(n){const e={topic:yi.Interrupt};n.sendDataChannelMessage(JSON.stringify(e))}function cd(n){return new Promise((e,t)=>{const{callbacks:i,host:r,auth:s,externalId:a}=n,{onMessage:o=null,onOpen:c=null,onClose:d=null,onError:u=null}=i||{},l=new WebSocket(`${r}?authorization=${encodeURIComponent(Zr(s,a))}`);l.onmessage=o,l.onclose=d,l.onerror=h=>{console.error(h),u==null||u("Websocket failed to connect",h),t(h)},l.onopen=h=>{c==null||c(h),e(l)}})}async function dd(n){const{retries:e=1}=n;let t=null;for(let i=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;i++)try{t=await cd(n)}catch(r){if(i===e)throw r;await Qr(i*500)}return t}async function ud(n,e,t,i){const r=t!=null&&t.onMessage?[t.onMessage]:[],s=await dd({auth:n,host:e,externalId:i,callbacks:{onError:a=>{var o;return(o=t.onError)==null?void 0:o.call(t,new Br(a))},onMessage(a){const o=JSON.parse(a.data);r.forEach(c=>c(o.event,o))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:a=>r.push(a)}}function ld(n){if(n.answer!==void 0)return n.answer;let e=0,t="";for(;e in n;)t+=n[e++];return t}function hd(n,e,t){if(!n.content)return;const i=e.messages[e.messages.length-1];(i==null?void 0:i.role)==="assistant"&&!i.interrupted&&(i.interrupted=!0);const r={id:n.id||`user-${Date.now()}`,role:n.role,content:n.content,created_at:n.created_at||new Date().toISOString(),transcribed:!0};e.messages.push(r),t==null||t([...e.messages],"user")}function fd(n,e,t,i,r){if(n===_e.Transcribe&&e.content){hd(e,i,r);return}if(!(n===_e.Partial||n===_e.Answer))return;const s=i.messages[i.messages.length-1];let a;if(s!=null&&s.transcribed&&s.role==="user")n===_e.Answer&&e.content,a={id:e.id||`assistant-${Date.now()}`,role:e.role||"assistant",content:e.content||"",created_at:e.created_at||new Date().toISOString()},i.messages.push(a);else if((s==null?void 0:s.role)==="assistant")a=s;else return;const{content:o,sequence:c}=e;n===_e.Partial?t[c]=o:t.answer=o;const d=ld(t);(a.content!==d||n===_e.Answer)&&(a.content=d,r==null||r([...i.messages],n))}function md(n,e,t,i,r){let s={};const a=()=>s={};let o="answer";const c=(d,u)=>{var l,h;u==="user"&&a(),o=u,(h=(l=t.callbacks).onNewMessage)==null||h.call(l,d,u)};return{clearQueue:a,onMessage:(d,u)=>{var l,h;if("content"in u){const m=d===re.ChatAnswer?_e.Answer:d===re.ChatAudioTranscribed?_e.Transcribe:d;fd(m,u,s,e,c),m===_e.Answer&&n.track("agent-message-received",{content:u.content,messages:e.messages.length,mode:e.chatMode})}else{const m=re,v=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],p=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],S=qc(u,i,{mode:e.chatMode});if(d=d,d===m.StreamVideoCreated&&(n.linkTrack("agent-video",S,m.StreamVideoCreated,["start"]),u.sentiment)){const k=e.messages[e.messages.length-1];if((k==null?void 0:k.role)==="assistant"){const R={...k,sentiment:u.sentiment};e.messages[e.messages.length-1]=R,c==null||c([...e.messages],o)}}if(v.includes(d)){const k=d.split("/")[1];p.includes(d)?n.track("agent-video",{...S,event:k}):n.linkTrack("agent-video",{...S,event:k},d,["done"])}p.includes(d)&&((h=(l=t.callbacks).onError)==null||h.call(l,new Error(`Stream failed with event ${d}`),{data:u})),u.event===m.StreamDone&&r()}}}}function pd(n,e,t,i){const r=pi(n,`${e}/agents/${t}`,i);return{createStream(s,a){return r.post("/streams",s,{signal:a})},startConnection(s,a,o,c){return r.post(`/streams/${s}/sdp`,{session_id:o,answer:a},{signal:c})},addIceCandidate(s,a,o,c){return r.post(`/streams/${s}/ice`,{session_id:o,...a},{signal:c})},sendStreamRequest(s,a,o){return r.post(`/streams/${s}`,{session_id:a,...o})},close(s,a){return r.delete(`/streams/${s}`,{session_id:a})}}}const gd=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function cs(n){switch(n){case"connected":return te.Connected;case"checking":return te.Connecting;case"failed":return te.Fail;case"new":return te.New;case"closed":return te.Closed;case"disconnected":return te.Disconnected;case"completed":return te.Completed;default:return te.New}}const vd=n=>e=>{const[t,i=""]=e.split(/:(.+)/);try{const r=JSON.parse(i);return n("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return n("Failed to parse data channel message, returning data as string",{subject:t,rawData:i,error:r}),{subject:t,data:i}}};function yd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:i,log:r}){n===G.Start&&e===G.Start?(r("CALLBACK: onVideoStateChange(Start)"),t==null||t(G.Start)):n===G.Stop&&e===G.Stop&&(r("CALLBACK: onVideoStateChange(Stop)"),t==null||t(G.Stop,i))}function bd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:r,log:s}){n===G.Start?(s("CALLBACK: onVideoStateChange(Start)"),t==null||t(G.Start)):n===G.Stop&&(s("CALLBACK: onVideoStateChange(Stop)"),t==null||t(G.Stop,r)),e===G.Start?i==null||i(Pe.Talking):e===G.Stop&&(i==null||i(Pe.Idle))}function ds({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,streamType:r,report:s,log:a}){r===We.Legacy?yd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:s,log:a}):r===We.Fluent&&bd({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:s,log:a})}async function kd(n,e,{debug:t=!1,callbacks:i,auth:r,baseURL:s=sn,analytics:a},o){var Ke;const c=ss(t,"WebRTCStreamingManager"),d=vd(c);let u=!1,l=!1,h=G.Stop,m=G.Stop;const{startConnection:v,sendStreamRequest:p,close:S,createStream:k,addIceCandidate:R}=pd(r,s,n,i.onError),{id:w,offer:g,ice_servers:b,session_id:P,fluent:L,interrupt_enabled:U,triggers_enabled:A}=await k(e,o);(Ke=i.onStreamCreated)==null||Ke.call(i,{stream_id:w,session_id:P,agent_id:n});const T=new gd({iceServers:b}),D=T.createDataChannel("JanusDataChannel");if(!P)throw new Error("Could not create session_id");const N=L?We.Fluent:We.Legacy;a.enrich({"stream-type":N});const J=e.stream_warmup&&!L,Q=()=>u,Y=()=>{var j;u=!0,l&&(c("CALLBACK: onConnectionStateChange(Connected)"),(j=i.onConnectionStateChange)==null||j.call(i,te.Connected))},me=os(()=>T.getStats(),Q,Y,(j,F)=>ds({statsSignal:m=j,dataChannelSignal:N===We.Legacy?h:void 0,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,report:F,streamType:N,log:c}),j=>{var F;return(F=i.onConnectivityStateChange)==null?void 0:F.call(i,j)});me.start(),T.onicecandidate=j=>{var F;c("peerConnection.onicecandidate",j);try{j.candidate&&j.candidate.sdpMid&&j.candidate.sdpMLineIndex!==null?R(w,{candidate:j.candidate.candidate,sdpMid:j.candidate.sdpMid,sdpMLineIndex:j.candidate.sdpMLineIndex},P,o):R(w,{candidate:null},P,o)}catch(X){(F=i.onError)==null||F.call(i,X,{streamId:w})}},D.onopen=()=>{l=!0,(!J||u)&&Y()};const Te=j=>{var F;(F=i.onVideoIdChange)==null||F.call(i,j)};function be(j,F){if(j===re.StreamStarted&&typeof F=="object"&&"metadata"in F){const X=F.metadata;Te(X.videoId)}j===re.StreamDone&&Te(null),h=j===re.StreamStarted?G.Start:G.Stop,ds({statsSignal:N===We.Legacy?m:void 0,dataChannelSignal:h,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,streamType:N,log:c})}function ae(j,F){var Ce;const X=typeof F=="string"?F:F==null?void 0:F.metadata;X&&a.enrich({streamMetadata:X}),(Ce=i.onStreamReady)==null||Ce.call(i)}const ce={[re.StreamStarted]:be,[re.StreamDone]:be,[re.StreamReady]:ae};D.onmessage=j=>{var Ce;const{subject:F,data:X}=d(j.data);(Ce=ce[F])==null||Ce.call(ce,F,X)},T.oniceconnectionstatechange=()=>{var F;c("peerConnection.oniceconnectionstatechange => "+T.iceConnectionState);const j=cs(T.iceConnectionState);j!==te.Connected&&((F=i.onConnectionStateChange)==null||F.call(i,j))},T.ontrack=j=>{var F;c("peerConnection.ontrack",j),c("CALLBACK: onSrcObjectReady"),(F=i.onSrcObjectReady)==null||F.call(i,j.streams[0])},await T.setRemoteDescription(g),c("set remote description OK");const Se=await T.createAnswer();return c("create answer OK"),await T.setLocalDescription(Se),c("set local description OK"),await v(w,Se,P,o),c("start connection OK"),{speak(j){return p(w,P,j)},async disconnect(){var j;if(w){const F=cs(T.iceConnectionState);if(T){if(F===te.New){me.stop();return}T.close(),T.oniceconnectionstatechange=null,T.onnegotiationneeded=null,T.onicecandidate=null,T.ontrack=null}try{F===te.Connected&&await S(w,P).catch(X=>{})}catch(X){c("Error on close stream connection",X)}(j=i.onAgentActivityStateChange)==null||j.call(i,Pe.Idle),me.stop()}},sendDataChannelMessage(j){var F,X;if(!u||D.readyState!=="open"){c("Data channel is not ready for sending messages"),(F=i.onError)==null||F.call(i,new Error("Data channel is not ready for sending messages"),{streamId:w});return}try{D.send(j)}catch(Ce){c("Error sending data channel message",Ce),(X=i.onError)==null||X.call(i,Ce,{streamId:w})}},sessionId:P,streamId:w,streamType:N,interruptAvailable:U??!1,triggersAvailable:A??!1}}var ki=(n=>(n.V1="v1",n.V2="v2",n))(ki||{});async function Td(n,e,t,i){const r=n.id;switch(e.version){case"v1":{const{version:s,...a}=e;return kd(r,a,t,i)}case"v2":{const{version:s,...a}=e;switch(a.transport_provider){case rn.Livekit:const{createLiveKitStreamingManager:o}=await Promise.resolve().then(()=>rd);return o(r,a,t);default:throw new Error(`Unsupported transport provider: ${a.transport_provider}`)}}default:throw new Error(`Invalid stream version: ${e.version}`)}}const Sd="cht";function Cd(){return{transport_provider:rn.Livekit}}function Ed(n){var r,s;const{streamOptions:e}=n??{},t=((r=n==null?void 0:n.mixpanelAdditionalProperties)==null?void 0:r.plan)!==void 0?{plan:(s=n.mixpanelAdditionalProperties)==null?void 0:s.plan}:void 0;return{...{output_resolution:e==null?void 0:e.outputResolution,session_timeout:e==null?void 0:e.sessionTimeout,stream_warmup:e==null?void 0:e.streamWarmup,compatibility_mode:e==null?void 0:e.compatibilityMode,fluent:e==null?void 0:e.fluent},...t&&{end_user_data:t}}}function Pd(n,e){return hi(n.presenter.type)?{version:ki.V2,...Cd()}:{version:ki.V1,...Ed(e)}}function wd(n,e,t){t.track("agent-connection-state-change",{state:n,...e&&{reason:e}})}function Rd(n,e,t,i,r){r===We.Fluent?_d(n,e,t,i,r):Dd(n,e,t,i,r)}function _d(n,e,t,i,r){n===G.Start?i.track("stream-session",{event:"start","stream-type":r}):n===G.Stop&&i.track("stream-session",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":r,...t})}function Id(n,e,t,i){Ge.get()<=0||(n===G.Start?t.linkTrack("agent-video",{event:"start",latency:Ge.get(!0),"stream-type":i},"start",[re.StreamVideoCreated]):n===G.Stop&&t.linkTrack("agent-video",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":i},"done",[re.StreamVideoDone]))}function Dd(n,e,t,i,r){Ge.get()<=0||(n===G.Start?i.linkTrack("agent-video",{event:"start",latency:Ge.get(!0),"stream-type":r},"start",[re.StreamVideoCreated]):n===G.Stop&&i.linkTrack("agent-video",{event:"stop",is_greenscreen:e.presenter.type==="clip"&&e.presenter.is_greenscreen,background:e.presenter.type==="clip"&&e.presenter.background,"stream-type":r,...t},"done",[re.StreamVideoDone]))}function us(n,e,t,i){return Ge.reset(),ns.update(),new Promise(async(r,s)=>{try{let a,o=!1;const c=Pd(n,e);t.enrich({"stream-version":c.version.toString()}),a=await Td(n,c,{...e,analytics:t,callbacks:{...e.callbacks,onConnectionStateChange:(d,u)=>{var l,h;(h=(l=e.callbacks).onConnectionStateChange)==null||h.call(l,d),wd(d,u,t),d===te.Connected&&(a?r(a):o=!0)},onVideoStateChange:(d,u)=>{var l,h;(h=(l=e.callbacks).onVideoStateChange)==null||h.call(l,d),Rd(d,n,u,t,a.streamType)},onAgentActivityStateChange:d=>{var u,l;(l=(u=e.callbacks).onAgentActivityStateChange)==null||l.call(u,d),d===Pe.Talking?vi.update():vi.reset(),Id(d===Pe.Talking?G.Start:G.Stop,n,t,a.streamType)},onStreamReady:()=>{const d=ns.get(!0);t.track("agent-chat",{event:"ready",latency:d})}}},i),o&&r(a)}catch(a){s(a)}})}async function Md(n,e,t,i,r){var u,l,h,m;const s=async()=>{if(hi(n.presenter.type)){const v=await us(n,e,i),p=`${Sd}_${v.sessionId}`,S=new Date().toISOString();return{chatResult:{chatMode:pe.Functional,chat:{id:p,agent_id:n.id,owner_id:n.owner_id??"",created:S,modified:S,agent_id__created_at:S,agent_id__modified_at:S,chat_mode:pe.Functional,messages:[]}},streamingManager:v}}else{const v=new AbortController,p=v.signal;let S;try{const k=rs(n,t,i,e.mode,e.persistentChat,r),R=us(n,e,i,p).then(b=>(S=b,b)),[w,g]=await Promise.all([k,R]);return{chatResult:w,streamingManager:g}}catch(k){throw v.abort(),S&&await S.disconnect().catch(()=>{}),k}}},{chatResult:a,streamingManager:o}=await s(),{chat:c,chatMode:d}=a;return d&&e.mode!==void 0&&d!==e.mode&&(e.mode=d,(l=(u=e.callbacks).onModeChange)==null||l.call(u,d),d!==pe.Functional)?((m=(h=e.callbacks).onError)==null||m.call(h,new jr(d)),o==null||o.disconnect(),{chat:c}):{chat:c,streamingManager:o}}async function Od(n,e){var P,L,U,A;let t=!0,i=null;const r=e.mixpanelKey||Oc,s=e.wsURL||Mc,a=e.baseURL||sn,o=e.mode||pe.Functional,c={messages:[],chatMode:o},d=zc({token:r,agentId:n,isEnabled:e.enableAnalitics,externalId:e.externalId,mixpanelAdditionalProperties:e.mixpanelAdditionalProperties}),u=Date.now();ts(()=>{d.track("agent-sdk",{event:"init"},u)});const l=Fc(e.auth,a,e.callbacks.onError,e.externalId),h=await l.getById(n);e.debug=e.debug||((P=h==null?void 0:h.advanced_settings)==null?void 0:P.ui_debug_mode);const m=hi(h.presenter.type);d.enrich(Bc(h));const{onMessage:v,clearQueue:p}=md(d,c,e,h,()=>{var T;return(T=c.socketManager)==null?void 0:T.disconnect()});c.messages=Gc(e.initialMessages),(U=(L=e.callbacks).onNewMessage)==null||U.call(L,[...c.messages],"answer");const S=T=>{i=T},k=({type:T})=>{var N,J,Q;const D=c.messages[c.messages.length-1];d.track("agent-video-interrupt",{type:T||"click",video_duration_to_interrupt:vi.get(!0),message_duration_to_interrupt:Ge.get(!0)}),D.interrupted=!0,(J=(N=e.callbacks).onNewMessage)==null||J.call(N,[...c.messages],"answer"),m?od(c.streamingManager):(sd(c.streamingManager,(Q=c.streamingManager)==null?void 0:Q.streamType,i),ad(c.streamingManager,i))},R=Date.now();ts(()=>{d.track("agent-sdk",{event:"loaded",...jc(h)},R)});async function w(T){var me,Te,be,ae,ce,Se,Ke;(Te=(me=e.callbacks).onConnectionStateChange)==null||Te.call(me,te.Connecting),Ge.reset(),T&&!t&&(delete c.chat,(ae=(be=e.callbacks).onNewMessage)==null||ae.call(be,[...c.messages],"answer"));const D=o===pe.DirectPlayback||m?Promise.resolve(void 0):ud(e.auth,s,{onMessage:v,onError:e.callbacks.onError},e.externalId),N=fi(()=>Md(h,{...e,mode:o,callbacks:{...e.callbacks,onVideoIdChange:S,onMessage:v,onInterruptDetected:k}},l,d,c.chat),{limit:3,timeout:Ic,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:j=>(j==null?void 0:j.message)!=="Could not connect"&&j.status!==429&&(j==null?void 0:j.message)!=="InsufficientCreditsError",delayMs:1e3}).catch(j=>{var F,X;throw b(pe.Maintenance),(X=(F=e.callbacks).onConnectionStateChange)==null||X.call(F,te.Fail),j}),[J,{streamingManager:Q,chat:Y}]=await Promise.all([D,N]);Y&&Y.id!==((ce=c.chat)==null?void 0:ce.id)&&((Ke=(Se=e.callbacks).onNewChat)==null||Ke.call(Se,Y.id)),c.streamingManager=Q,c.socketManager=J,c.chat=Y,t=!1,d.enrich({chatId:Y==null?void 0:Y.id,streamId:Q==null?void 0:Q.streamId,mode:c.chatMode}),b((Y==null?void 0:Y.chat_mode)??o)}async function g(){var T,D,N,J;(T=c.socketManager)==null||T.disconnect(),await((D=c.streamingManager)==null?void 0:D.disconnect()),delete c.streamingManager,delete c.socketManager,(J=(N=e.callbacks).onConnectionStateChange)==null||J.call(N,te.Disconnected)}async function b(T){var D,N;T!==c.chatMode&&(d.track("agent-mode-change",{mode:T}),c.chatMode=T,c.chatMode!==pe.Functional&&await g(),(N=(D=e.callbacks).onModeChange)==null||N.call(D,T))}return{agent:h,getStreamType:()=>{var T;return(T=c.streamingManager)==null?void 0:T.streamType},getIsInterruptAvailable:()=>{var T;return((T=c.streamingManager)==null?void 0:T.interruptAvailable)??!1},getIsTriggersAvailable:()=>{var T;return((T=c.streamingManager)==null?void 0:T.triggersAvailable)??!1},starterMessages:((A=h.knowledge)==null?void 0:A.starter_message)||[],getSTTToken:()=>l.getSTTToken(h.id),changeMode:b,enrichAnalytics:d.enrich,async connect(){await w(!0),d.track("agent-chat",{event:"connect",mode:c.chatMode})},async reconnect(){const T=c.streamingManager;if(m&&(T!=null&&T.reconnect)){try{await T.reconnect(),d.track("agent-chat",{event:"reconnect",mode:c.chatMode})}catch{await g(),await w(!1)}return}await g(),await w(!1),d.track("agent-chat",{event:"reconnect",mode:c.chatMode})},async disconnect(){await g(),d.track("agent-chat",{event:"disconnect",mode:c.chatMode})},async publishMicrophoneStream(T){var D;if(!((D=c.streamingManager)!=null&&D.publishMicrophoneStream))throw new Error("publishMicrophoneStream is not available for this streaming manager");return c.streamingManager.publishMicrophoneStream(T)},async unpublishMicrophoneStream(){var T;if(!((T=c.streamingManager)!=null&&T.unpublishMicrophoneStream))throw new Error("unpublishMicrophoneStream is not available for this streaming manager");return c.streamingManager.unpublishMicrophoneStream()},async chat(T){var Q,Y,me,Te,be;const D=()=>{if(Xr(o))throw new wt(`${o} is enabled, chat is disabled`);if(T.length>=800)throw new wt("Message cannot be more than 800 characters");if(T.length===0)throw new wt("Message cannot be empty");if(c.chatMode===pe.Maintenance)throw new wt("Chat is in maintenance mode");if(![pe.TextOnly,pe.Playground].includes(c.chatMode)){if(!c.streamingManager)throw new wt("Streaming manager is not initialized");if(!c.chat)throw new wt("Chat is not initialized")}},N=async()=>{var ae,ce;if(!c.chat){const Se=await rs(h,l,d,c.chatMode,e.persistentChat);if(!Se.chat)throw new Pt(c.chatMode,!!e.persistentChat);c.chat=Se.chat,(ce=(ae=e.callbacks).onNewChat)==null||ce.call(ae,c.chat.id)}return c.chat.id},J=async(ae,ce)=>{const Se=c.chatMode===pe.Playground;return fi(m&&!Se?async()=>{var F,X;return await((X=(F=c.streamingManager)==null?void 0:F.sendTextMessage)==null?void 0:X.call(F,T)),Promise.resolve({})}:async()=>{var F,X;return l.chat(h.id,ce,{chatMode:c.chatMode,streamId:(F=c.streamingManager)==null?void 0:F.streamId,sessionId:(X=c.streamingManager)==null?void 0:X.sessionId,messages:ae.map(({matches:Ce,...Zt})=>Zt)},{...is(c.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:F=>{var Zt,en,ci,tn;const X=(Zt=F==null?void 0:F.message)==null?void 0:Zt.includes("missing or invalid session_id");return!((en=F==null?void 0:F.message)==null?void 0:en.includes("Stream Error"))&&!X?((tn=(ci=e.callbacks).onError)==null||tn.call(ci,F),!1):!0},onRetry:async()=>{await g(),await w(!1)}})};try{p(),D(),c.messages.push({id:Ut(),role:"user",content:T,created_at:new Date(Ge.update()).toISOString()}),(Y=(Q=e.callbacks).onNewMessage)==null||Y.call(Q,[...c.messages],"user");const ae=await N(),ce=await J([...c.messages],ae);return c.messages.push({id:Ut(),role:"assistant",content:ce.result||"",created_at:new Date().toISOString(),context:ce.context,matches:ce.matches}),d.track("agent-message-send",{event:"success",messages:c.messages.length+1}),ce.result&&((Te=(me=e.callbacks).onNewMessage)==null||Te.call(me,[...c.messages],"answer"),d.track("agent-message-received",{latency:Ge.get(!0),messages:c.messages.length})),ce}catch(ae){throw((be=c.messages[c.messages.length-1])==null?void 0:be.role)==="assistant"&&c.messages.pop(),d.track("agent-message-send",{event:"error",messages:c.messages.length}),ae}},rate(T,D,N){var Y,me,Te,be;const J=c.messages.find(ae=>ae.id===T);if(c.chat){if(!J)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const Q=((Y=J.matches)==null?void 0:Y.map(ae=>[ae.document_id,ae.id]))??[];return d.track("agent-rate",{event:N?"update":"create",thumb:D===1?"up":"down",knowledge_id:((me=h.knowledge)==null?void 0:me.id)??"",matches:Q,score:D}),N?l.updateRating(h.id,c.chat.id,N,{knowledge_id:((Te=h.knowledge)==null?void 0:Te.id)??"",message_id:T,matches:Q,score:D}):l.createRating(h.id,c.chat.id,{knowledge_id:((be=h.knowledge)==null?void 0:be.id)??"",message_id:T,matches:Q,score:D})},deleteRate(T){if(!c.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text"}),l.deleteRating(h.id,c.chat.id,T)},async speak(T){var Q,Y,me;function D(){if(typeof T=="string"){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:T,ssml:!1}}if(T.type==="text"&&!T.provider){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:T.input,ssml:T.ssml}}return T}const N=D();if(d.track("agent-speak",N),Ge.update(),c.messages&&N.type==="text"&&(c.messages.push({id:Ut(),role:"assistant",content:N.input,created_at:new Date().toISOString()}),(Y=(Q=e.callbacks).onNewMessage)==null||Y.call(Q,[...c.messages],"answer")),xc(c.chatMode))return{duration:0,video_id:"",status:"success"};if(!c.streamingManager)throw new Error("Please connect to the agent first");return c.streamingManager.speak({script:N,metadata:{chat_id:(me=c.chat)==null?void 0:me.id,agent_id:h.id}})},interrupt:k}}function Ad(n,e){return e.forEach(function(t){t&&typeof t!="string"&&!Array.isArray(t)&&Object.keys(t).forEach(function(i){if(i!=="default"&&!(i in n)){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(n,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})}),Object.freeze(n)}var xd=Object.defineProperty,Ld=(n,e,t)=>e in n?xd(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,ls=(n,e,t)=>Ld(n,typeof e!="symbol"?e+"":e,t);class we{constructor(){ls(this,"_locking"),ls(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const t=new Promise(r=>e=()=>{this._locks-=1,r()}),i=this._locking.then(()=>e);return this._locking=this._locking.then(()=>t),i}}function de(n,e){if(!n)throw new Error(e)}const Nd=34028234663852886e22,Ud=-34028234663852886e22,Fd=4294967295,jd=2147483647,Bd=-2147483648;function In(n){if(typeof n!="number")throw new Error("invalid int 32: "+typeof n);if(!Number.isInteger(n)||n>jd||n<Bd)throw new Error("invalid int 32: "+n)}function Ti(n){if(typeof n!="number")throw new Error("invalid uint 32: "+typeof n);if(!Number.isInteger(n)||n>Fd||n<0)throw new Error("invalid uint 32: "+n)}function hs(n){if(typeof n!="number")throw new Error("invalid float 32: "+typeof n);if(Number.isFinite(n)&&(n>Nd||n<Ud))throw new Error("invalid float 32: "+n)}const fs=Symbol("@bufbuild/protobuf/enum-type");function Vd(n){const e=n[fs];return de(e,"missing enum type on enum object"),e}function ms(n,e,t,i){n[fs]=ps(e,t.map(r=>({no:r.no,name:r.name,localName:n[r.no]})))}function ps(n,e,t){const i=Object.create(null),r=Object.create(null),s=[];for(const a of e){const o=gs(a);s.push(o),i[a.name]=o,r[a.no]=o}return{typeName:n,values:s,findName(a){return i[a]},findNumber(a){return r[a]}}}function qd(n,e,t){const i={};for(const r of e){const s=gs(r);i[s.localName]=s.no,i[s.no]=s.localName}return ms(i,n,e),i}function gs(n){return"localName"in n?n:Object.assign(Object.assign({},n),{localName:n.name})}class Si{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,t){const i=this.getType(),r=i.runtime.bin,s=r.makeReadOptions(t);return r.readMessage(this,s.readerFactory(e),e.byteLength,s),this}fromJson(e,t){const i=this.getType(),r=i.runtime.json,s=r.makeReadOptions(t);return r.readMessage(i,e,s,this),this}fromJsonString(e,t){let i;try{i=JSON.parse(e)}catch(r){throw new Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(r instanceof Error?r.message:String(r)))}return this.fromJson(i,t)}toBinary(e){const t=this.getType(),i=t.runtime.bin,r=i.makeWriteOptions(e),s=r.writerFactory();return i.writeMessage(this,s,r),s.finish()}toJson(e){const t=this.getType(),i=t.runtime.json,r=i.makeWriteOptions(e);return i.writeMessage(this,r)}toJsonString(e){var t;const i=this.toJson(e);return JSON.stringify(i,null,(t=e==null?void 0:e.prettySpaces)!==null&&t!==void 0?t:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function Kd(n,e,t,i){var r;const s=(r=i==null?void 0:i.localName)!==null&&r!==void 0?r:e.substring(e.lastIndexOf(".")+1),a={[s]:function(o){n.util.initFields(this),n.util.initPartial(o,this)}}[s];return Object.setPrototypeOf(a.prototype,new Si),Object.assign(a,{runtime:n,typeName:e,fields:n.util.newFieldList(t),fromBinary(o,c){return new a().fromBinary(o,c)},fromJson(o,c){return new a().fromJson(o,c)},fromJsonString(o,c){return new a().fromJsonString(o,c)},equals(o,c){return n.util.equals(a,o,c)}}),a}function zd(){let n=0,e=0;for(let i=0;i<28;i+=7){let r=this.buf[this.pos++];if(n|=(r&127)<<i,!(r&128))return this.assertBounds(),[n,e]}let t=this.buf[this.pos++];if(n|=(t&15)<<28,e=(t&112)>>4,!(t&128))return this.assertBounds(),[n,e];for(let i=3;i<=31;i+=7){let r=this.buf[this.pos++];if(e|=(r&127)<<i,!(r&128))return this.assertBounds(),[n,e]}throw new Error("invalid varint")}function Ci(n,e,t){for(let s=0;s<28;s=s+7){const a=n>>>s,o=!(!(a>>>7)&&e==0),c=(o?a|128:a)&255;if(t.push(c),!o)return}const i=n>>>28&15|(e&7)<<4,r=!!(e>>3);if(t.push((r?i|128:i)&255),!!r){for(let s=3;s<31;s=s+7){const a=e>>>s,o=!!(a>>>7),c=(o?a|128:a)&255;if(t.push(c),!o)return}t.push(e>>>31&1)}}const Dn=4294967296;function vs(n){const e=n[0]==="-";e&&(n=n.slice(1));const t=1e6;let i=0,r=0;function s(a,o){const c=Number(n.slice(a,o));r*=t,i=i*t+c,i>=Dn&&(r=r+(i/Dn|0),i=i%Dn)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?bs(i,r):Ei(i,r)}function Wd(n,e){let t=Ei(n,e);const i=t.hi&2147483648;i&&(t=bs(t.lo,t.hi));const r=ys(t.lo,t.hi);return i?"-"+r:r}function ys(n,e){if({lo:n,hi:e}=Gd(n,e),e<=2097151)return String(Dn*e+n);const t=n&16777215,i=(n>>>24|e<<8)&16777215,r=e>>16&65535;let s=t+i*6777216+r*6710656,a=i+r*8147497,o=r*2;const c=1e7;return s>=c&&(a+=Math.floor(s/c),s%=c),a>=c&&(o+=Math.floor(a/c),a%=c),o.toString()+ks(a)+ks(s)}function Gd(n,e){return{lo:n>>>0,hi:e>>>0}}function Ei(n,e){return{lo:n|0,hi:e|0}}function bs(n,e){return e=~e,n?n=~n+1:e+=1,Ei(n,e)}const ks=n=>{const e=String(n);return"0000000".slice(e.length)+e};function Ts(n,e){if(n>=0){for(;n>127;)e.push(n&127|128),n=n>>>7;e.push(n)}else{for(let t=0;t<9;t++)e.push(n&127|128),n=n>>7;e.push(1)}}function Hd(){let n=this.buf[this.pos++],e=n&127;if(!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<7,!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<14,!(n&128))return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<21,!(n&128))return this.assertBounds(),e;n=this.buf[this.pos++],e|=(n&15)<<28;for(let t=5;n&128&&t<10;t++)n=this.buf[this.pos++];if(n&128)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Jd(){const n=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof n.getBigInt64=="function"&&typeof n.getBigUint64=="function"&&typeof n.setBigInt64=="function"&&typeof n.setBigUint64=="function"&&(typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){const r=BigInt("-9223372036854775808"),s=BigInt("9223372036854775807"),a=BigInt("0"),o=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(c){const d=typeof c=="bigint"?c:BigInt(c);if(d>s||d<r)throw new Error("int64 invalid: ".concat(c));return d},uParse(c){const d=typeof c=="bigint"?c:BigInt(c);if(d>o||d<a)throw new Error("uint64 invalid: ".concat(c));return d},enc(c){return n.setBigInt64(0,this.parse(c),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},uEnc(c){return n.setBigInt64(0,this.uParse(c),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},dec(c,d){return n.setInt32(0,c,!0),n.setInt32(4,d,!0),n.getBigInt64(0,!0)},uDec(c,d){return n.setInt32(0,c,!0),n.setInt32(4,d,!0),n.getBigUint64(0,!0)}}}const t=r=>de(/^-?[0-9]+$/.test(r),"int64 invalid: ".concat(r)),i=r=>de(/^[0-9]+$/.test(r),"uint64 invalid: ".concat(r));return{zero:"0",supported:!1,parse(r){return typeof r!="string"&&(r=r.toString()),t(r),r},uParse(r){return typeof r!="string"&&(r=r.toString()),i(r),r},enc(r){return typeof r!="string"&&(r=r.toString()),t(r),vs(r)},uEnc(r){return typeof r!="string"&&(r=r.toString()),i(r),vs(r)},dec(r,s){return Wd(r,s)},uDec(r,s){return ys(r,s)}}}const se=Jd();var E;(function(n){n[n.DOUBLE=1]="DOUBLE",n[n.FLOAT=2]="FLOAT",n[n.INT64=3]="INT64",n[n.UINT64=4]="UINT64",n[n.INT32=5]="INT32",n[n.FIXED64=6]="FIXED64",n[n.FIXED32=7]="FIXED32",n[n.BOOL=8]="BOOL",n[n.STRING=9]="STRING",n[n.BYTES=12]="BYTES",n[n.UINT32=13]="UINT32",n[n.SFIXED32=15]="SFIXED32",n[n.SFIXED64=16]="SFIXED64",n[n.SINT32=17]="SINT32",n[n.SINT64=18]="SINT64"})(E||(E={}));var yt;(function(n){n[n.BIGINT=0]="BIGINT",n[n.STRING=1]="STRING"})(yt||(yt={}));function bt(n,e,t){if(e===t)return!0;if(n==E.BYTES){if(!(e instanceof Uint8Array)||!(t instanceof Uint8Array)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}switch(n){case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return e==t}return!1}function Ft(n,e){switch(n){case E.BOOL:return!1;case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return e==0?se.zero:"0";case E.DOUBLE:case E.FLOAT:return 0;case E.BYTES:return new Uint8Array(0);case E.STRING:return"";default:return 0}}function Ss(n,e){switch(n){case E.BOOL:return e===!1;case E.STRING:return e==="";case E.BYTES:return e instanceof Uint8Array&&!e.byteLength;default:return e==0}}var le;(function(n){n[n.Varint=0]="Varint",n[n.Bit64=1]="Bit64",n[n.LengthDelimited=2]="LengthDelimited",n[n.StartGroup=3]="StartGroup",n[n.EndGroup=4]="EndGroup",n[n.Bit32=5]="Bit32"})(le||(le={}));class $d{constructor(e){this.stack=[],this.textEncoder=e??new TextEncoder,this.chunks=[],this.buf=[]}finish(){this.chunks.push(new Uint8Array(this.buf));let e=0;for(let r=0;r<this.chunks.length;r++)e+=this.chunks[r].length;let t=new Uint8Array(e),i=0;for(let r=0;r<this.chunks.length;r++)t.set(this.chunks[r],i),i+=this.chunks[r].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let e=this.finish(),t=this.stack.pop();if(!t)throw new Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(e.byteLength),this.raw(e)}tag(e,t){return this.uint32((e<<3|t)>>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(Ti(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return In(e),Ts(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.textEncoder.encode(e);return this.uint32(t.byteLength),this.raw(t)}float(e){hs(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){Ti(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){In(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return In(e),e=(e<<1^e>>31)>>>0,Ts(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=se.enc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=se.uEnc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=se.enc(e);return Ci(t.lo,t.hi,this.buf),this}sint64(e){let t=se.enc(e),i=t.hi>>31,r=t.lo<<1^i,s=(t.hi<<1|t.lo>>>31)^i;return Ci(r,s,this.buf),this}uint64(e){let t=se.uEnc(e);return Ci(t.lo,t.hi,this.buf),this}}class Qd{constructor(e,t){this.varint64=zd,this.uint32=Hd,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=t??new TextDecoder}tag(){let e=this.uint32(),t=e>>>3,i=e&7;if(t<=0||i<0||i>5)throw new Error("illegal tag: field no "+t+" wire type "+i);return[t,i]}skip(e,t){let i=this.pos;switch(e){case le.Varint:for(;this.buf[this.pos++]&128;);break;case le.Bit64:this.pos+=4;case le.Bit32:this.pos+=4;break;case le.LengthDelimited:let r=this.uint32();this.pos+=r;break;case le.StartGroup:for(;;){const[s,a]=this.tag();if(a===le.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(a,s)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(i,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return se.dec(...this.varint64())}uint64(){return se.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),i=-(e&1);return e=(e>>>1|(t&1)<<31)^i,t=t>>>1^i,se.dec(e,t)}bool(){let[e,t]=this.varint64();return e!==0||t!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return se.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return se.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.textDecoder.decode(this.bytes())}}function Yd(n,e,t,i){let r;return{typeName:e,extendee:t,get field(){if(!r){const s=typeof i=="function"?i():i;s.name=e.split(".").pop(),s.jsonName="[".concat(e,"]"),r=n.util.newFieldList([s]).list()[0]}return r},runtime:n}}function Cs(n){const e=n.field.localName,t=Object.create(null);return t[e]=Xd(n),[t,()=>t[e]]}function Xd(n){const e=n.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return Ft(e.T,e.L);case"message":const t=e.T,i=new t;return t.fieldWrapper?t.fieldWrapper.unwrapField(i):i;case"map":throw"map fields are not allowed to be extensions"}}function Zd(n,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let t=n.length-1;t>=0;--t)if(n[t].no==e.no)return[n[t]];return[]}return n.filter(t=>t.no===e.no)}let ct="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Mn=[];for(let n=0;n<ct.length;n++)Mn[ct[n].charCodeAt(0)]=n;Mn[45]=ct.indexOf("+"),Mn[95]=ct.indexOf("/");const Es={dec(n){let e=n.length*3/4;n[n.length-2]=="="?e-=2:n[n.length-1]=="="&&(e-=1);let t=new Uint8Array(e),i=0,r=0,s,a=0;for(let o=0;o<n.length;o++){if(s=Mn[n.charCodeAt(o)],s===void 0)switch(n[o]){case"=":r=0;case`
|
|
2
|
+
`:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string.")}switch(r){case 0:a=s,r=1;break;case 1:t[i++]=a<<2|(s&48)>>4,a=s,r=2;break;case 2:t[i++]=(a&15)<<4|(s&60)>>2,a=s,r=3;break;case 3:t[i++]=(a&3)<<6|s,r=0;break}}if(r==1)throw Error("invalid base64 string.");return t.subarray(0,i)},enc(n){let e="",t=0,i,r=0;for(let s=0;s<n.length;s++)switch(i=n[s],t){case 0:e+=ct[i>>2],r=(i&3)<<4,t=1;break;case 1:e+=ct[r|i>>4],r=(i&15)<<2,t=2;break;case 2:e+=ct[r|i>>6],e+=ct[i&63],t=0;break}return t&&(e+=ct[r],e+="=",t==1&&(e+="=")),e}};function eu(n,e,t){ws(e,n);const i=e.runtime.bin.makeReadOptions(t),r=Zd(n.getType().runtime.bin.listUnknownFields(n),e.field),[s,a]=Cs(e);for(const o of r)e.runtime.bin.readField(s,i.readerFactory(o.data),e.field,o.wireType,i);return a()}function tu(n,e,t,i){ws(e,n);const r=e.runtime.bin.makeReadOptions(i),s=e.runtime.bin.makeWriteOptions(i);if(Ps(n,e)){const d=n.getType().runtime.bin.listUnknownFields(n).filter(u=>u.no!=e.field.no);n.getType().runtime.bin.discardUnknownFields(n);for(const u of d)n.getType().runtime.bin.onUnknownField(n,u.no,u.wireType,u.data)}const a=s.writerFactory();let o=e.field;!o.opt&&!o.repeated&&(o.kind=="enum"||o.kind=="scalar")&&(o=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(o,t,a,s);const c=r.readerFactory(a.finish());for(;c.pos<c.len;){const[d,u]=c.tag(),l=c.skip(u,d);n.getType().runtime.bin.onUnknownField(n,d,u,l)}}function Ps(n,e){const t=n.getType();return e.extendee.typeName===t.typeName&&!!t.runtime.bin.listUnknownFields(n).find(i=>i.no==e.field.no)}function ws(n,e){de(n.extendee.typeName==e.getType().typeName,"extension ".concat(n.typeName," can only be applied to message ").concat(n.extendee.typeName))}function Rs(n,e){const t=n.localName;if(n.repeated)return e[t].length>0;if(n.oneof)return e[n.oneof.localName].case===t;switch(n.kind){case"enum":case"scalar":return n.opt||n.req?e[t]!==void 0:n.kind=="enum"?e[t]!==n.T.values[0].no:!Ss(n.T,e[t]);case"message":return e[t]!==void 0;case"map":return Object.keys(e[t]).length>0}}function _s(n,e){const t=n.localName,i=!n.opt&&!n.req;if(n.repeated)e[t]=[];else if(n.oneof)e[n.oneof.localName]={case:void 0};else switch(n.kind){case"map":e[t]={};break;case"enum":e[t]=i?n.T.values[0].no:void 0;break;case"scalar":e[t]=i?Ft(n.T,n.L):void 0;break;case"message":e[t]=void 0;break}}function dt(n,e){if(n===null||typeof n!="object"||!Object.getOwnPropertyNames(Si.prototype).every(i=>i in n&&typeof n[i]=="function"))return!1;const t=n.getType();return t===null||typeof t!="function"||!("typeName"in t)||typeof t.typeName!="string"?!1:e===void 0?!0:t.typeName==e.typeName}function Is(n,e){return dt(e)||!n.fieldWrapper?e:n.fieldWrapper.wrapField(e)}E.DOUBLE,E.FLOAT,E.INT64,E.UINT64,E.INT32,E.UINT32,E.BOOL,E.STRING,E.BYTES;const Ds={ignoreUnknownFields:!1},Ms={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function nu(n){return n?Object.assign(Object.assign({},Ds),n):Ds}function iu(n){return n?Object.assign(Object.assign({},Ms),n):Ms}const On=Symbol(),An=Symbol();function ru(){return{makeReadOptions:nu,makeWriteOptions:iu,readMessage(n,e,t,i){if(e==null||Array.isArray(e)||typeof e!="object")throw new Error("cannot decode message ".concat(n.typeName," from JSON: ").concat(et(e)));i=i??new n;const r=new Map,s=t.typeRegistry;for(const[a,o]of Object.entries(e)){const c=n.fields.findJsonName(a);if(c){if(c.oneof){if(o===null&&c.kind=="scalar")continue;const d=r.get(c.oneof);if(d!==void 0)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: multiple keys for oneof "').concat(c.oneof.name,'" present: "').concat(d,'", "').concat(a,'"'));r.set(c.oneof,a)}Os(i,o,c,t,n)}else{let d=!1;if(s!=null&&s.findExtension&&a.startsWith("[")&&a.endsWith("]")){const u=s.findExtension(a.substring(1,a.length-1));if(u&&u.extendee.typeName==n.typeName){d=!0;const[l,h]=Cs(u);Os(l,o,u.field,t,u),tu(i,u,h(),t)}}if(!d&&!t.ignoreUnknownFields)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: key "').concat(a,'" is unknown'))}}return i},writeMessage(n,e){const t=n.getType(),i={};let r;try{for(r of t.fields.byNumber()){if(!Rs(r,n)){if(r.req)throw"required field not set";if(!e.emitDefaultValues||!au(r))continue}const a=r.oneof?n[r.oneof.localName].value:n[r.localName],o=As(r,a,e);o!==void 0&&(i[e.useProtoFieldName?r.name:r.jsonName]=o)}const s=e.typeRegistry;if(s!=null&&s.findExtensionFor)for(const a of t.runtime.bin.listUnknownFields(n)){const o=s.findExtensionFor(t.typeName,a.no);if(o&&Ps(n,o)){const c=eu(n,o,e),d=As(o.field,c,e);d!==void 0&&(i[o.field.jsonName]=d)}}}catch(s){const a=r?"cannot encode field ".concat(t.typeName,".").concat(r.name," to JSON"):"cannot encode message ".concat(t.typeName," to JSON"),o=s instanceof Error?s.message:String(s);throw new Error(a+(o.length>0?": ".concat(o):""))}return i},readScalar(n,e,t){return on(n,e,t??yt.BIGINT,!0)},writeScalar(n,e,t){if(e!==void 0&&(t||Ss(n,e)))return xn(n,e)},debug:et}}function et(n){if(n===null)return"null";switch(typeof n){case"object":return Array.isArray(n)?"array":"object";case"string":return n.length>100?"string":'"'.concat(n.split('"').join('\\"'),'"');default:return String(n)}}function Os(n,e,t,i,r){let s=t.localName;if(t.repeated){if(de(t.kind!="map"),e===null)return;if(!Array.isArray(e))throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(e)));const a=n[s];for(const o of e){if(o===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(o)));switch(t.kind){case"message":a.push(t.T.fromJson(o,i));break;case"enum":const c=Pi(t.T,o,i.ignoreUnknownFields,!0);c!==An&&a.push(c);break;case"scalar":try{a.push(on(t.T,o,t.L,!0))}catch(d){let u="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(o));throw d instanceof Error&&d.message.length>0&&(u+=": ".concat(d.message)),new Error(u)}break}}}else if(t.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(e)));const a=n[s];for(const[o,c]of Object.entries(e)){if(c===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: map value null"));let d;try{d=su(t.K,o)}catch(u){let l="cannot decode map key for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(e));throw u instanceof Error&&u.message.length>0&&(l+=": ".concat(u.message)),new Error(l)}switch(t.V.kind){case"message":a[d]=t.V.T.fromJson(c,i);break;case"enum":const u=Pi(t.V.T,c,i.ignoreUnknownFields,!0);u!==An&&(a[d]=u);break;case"scalar":try{a[d]=on(t.V.T,c,yt.BIGINT,!0)}catch(l){let h="cannot decode map value for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(e));throw l instanceof Error&&l.message.length>0&&(h+=": ".concat(l.message)),new Error(h)}break}}}else switch(t.oneof&&(n=n[t.oneof.localName]={case:s},s="value"),t.kind){case"message":const a=t.T;if(e===null&&a.typeName!="google.protobuf.Value")return;let o=n[s];dt(o)?o.fromJson(e,i):(n[s]=o=a.fromJson(e,i),a.fieldWrapper&&!t.oneof&&(n[s]=a.fieldWrapper.unwrapField(o)));break;case"enum":const c=Pi(t.T,e,i.ignoreUnknownFields,!1);switch(c){case On:_s(t,n);break;case An:break;default:n[s]=c;break}break;case"scalar":try{const d=on(t.T,e,t.L,!1);switch(d){case On:_s(t,n);break;default:n[s]=d;break}}catch(d){let u="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(et(e));throw d instanceof Error&&d.message.length>0&&(u+=": ".concat(d.message)),new Error(u)}break}}function su(n,e){if(n===E.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return on(n,e,yt.BIGINT,!0).toString()}function on(n,e,t,i){if(e===null)return i?Ft(n,t):On;switch(n){case E.DOUBLE:case E.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e===""||typeof e=="string"&&e.trim().length!==e.length||typeof e!="string"&&typeof e!="number")break;const r=Number(e);if(Number.isNaN(r)||!Number.isFinite(r))break;return n==E.FLOAT&&hs(r),r;case E.INT32:case E.FIXED32:case E.SFIXED32:case E.SINT32:case E.UINT32:let s;if(typeof e=="number"?s=e:typeof e=="string"&&e.length>0&&e.trim().length===e.length&&(s=Number(e)),s===void 0)break;return n==E.UINT32||n==E.FIXED32?Ti(s):In(s),s;case E.INT64:case E.SFIXED64:case E.SINT64:if(typeof e!="number"&&typeof e!="string")break;const a=se.parse(e);return t?a.toString():a;case E.FIXED64:case E.UINT64:if(typeof e!="number"&&typeof e!="string")break;const o=se.uParse(e);return t?o.toString():o;case E.BOOL:if(typeof e!="boolean")break;return e;case E.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case E.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return Es.dec(e)}throw new Error}function Pi(n,e,t,i){if(e===null)return n.typeName=="google.protobuf.NullValue"?0:i?n.values[0].no:On;switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":const r=n.findName(e);if(r!==void 0)return r.no;if(t)return An;break}throw new Error("cannot decode enum ".concat(n.typeName," from JSON: ").concat(et(e)))}function au(n){return n.repeated||n.kind=="map"?!0:!(n.oneof||n.kind=="message"||n.opt||n.req)}function As(n,e,t){if(n.kind=="map"){de(typeof e=="object"&&e!=null);const i={},r=Object.entries(e);switch(n.V.kind){case"scalar":for(const[a,o]of r)i[a.toString()]=xn(n.V.T,o);break;case"message":for(const[a,o]of r)i[a.toString()]=o.toJson(t);break;case"enum":const s=n.V.T;for(const[a,o]of r)i[a.toString()]=wi(s,o,t.enumAsInteger);break}return t.emitDefaultValues||r.length>0?i:void 0}if(n.repeated){de(Array.isArray(e));const i=[];switch(n.kind){case"scalar":for(let r=0;r<e.length;r++)i.push(xn(n.T,e[r]));break;case"enum":for(let r=0;r<e.length;r++)i.push(wi(n.T,e[r],t.enumAsInteger));break;case"message":for(let r=0;r<e.length;r++)i.push(e[r].toJson(t));break}return t.emitDefaultValues||i.length>0?i:void 0}switch(n.kind){case"scalar":return xn(n.T,e);case"enum":return wi(n.T,e,t.enumAsInteger);case"message":return Is(n.T,e).toJson(t)}}function wi(n,e,t){var i;if(de(typeof e=="number"),n.typeName=="google.protobuf.NullValue")return null;if(t)return e;const r=n.findNumber(e);return(i=r==null?void 0:r.name)!==null&&i!==void 0?i:e}function xn(n,e){switch(n){case E.INT32:case E.SFIXED32:case E.SINT32:case E.FIXED32:case E.UINT32:return de(typeof e=="number"),e;case E.FLOAT:case E.DOUBLE:return de(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case E.STRING:return de(typeof e=="string"),e;case E.BOOL:return de(typeof e=="boolean"),e;case E.UINT64:case E.FIXED64:case E.INT64:case E.SFIXED64:case E.SINT64:return de(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case E.BYTES:return de(e instanceof Uint8Array),Es.enc(e)}}const jt=Symbol("@bufbuild/protobuf/unknown-fields"),xs={readUnknownFields:!0,readerFactory:n=>new Qd(n)},Ls={writeUnknownFields:!0,writerFactory:()=>new $d};function ou(n){return n?Object.assign(Object.assign({},xs),n):xs}function cu(n){return n?Object.assign(Object.assign({},Ls),n):Ls}function du(){return{makeReadOptions:ou,makeWriteOptions:cu,listUnknownFields(n){var e;return(e=n[jt])!==null&&e!==void 0?e:[]},discardUnknownFields(n){delete n[jt]},writeUnknownFields(n,e){const i=n[jt];if(i)for(const r of i)e.tag(r.no,r.wireType).raw(r.data)},onUnknownField(n,e,t,i){const r=n;Array.isArray(r[jt])||(r[jt]=[]),r[jt].push({no:e,wireType:t,data:i})},readMessage(n,e,t,i,r){const s=n.getType(),a=r?e.len:e.pos+t;let o,c;for(;e.pos<a&&([o,c]=e.tag(),!(r===!0&&c==le.EndGroup));){const d=s.fields.find(o);if(!d){const u=e.skip(c,o);i.readUnknownFields&&this.onUnknownField(n,o,c,u);continue}Ns(n,e,d,c,i)}if(r&&(c!=le.EndGroup||o!==t))throw new Error("invalid end group tag")},readField:Ns,writeMessage(n,e,t){const i=n.getType();for(const r of i.fields.byNumber()){if(!Rs(r,n)){if(r.req)throw new Error("cannot encode field ".concat(i.typeName,".").concat(r.name," to binary: required field not set"));continue}const s=r.oneof?n[r.oneof.localName].value:n[r.localName];Us(r,s,e,t)}return t.writeUnknownFields&&this.writeUnknownFields(n,e),e},writeField(n,e,t,i){e!==void 0&&Us(n,e,t,i)}}}function Ns(n,e,t,i,r){let{repeated:s,localName:a}=t;switch(t.oneof&&(n=n[t.oneof.localName],n.case!=a&&delete n.value,n.case=a,a="value"),t.kind){case"scalar":case"enum":const o=t.kind=="enum"?E.INT32:t.T;let c=Nn;if(t.kind=="scalar"&&t.L>0&&(c=lu),s){let h=n[a];if(i==le.LengthDelimited&&o!=E.STRING&&o!=E.BYTES){let v=e.uint32()+e.pos;for(;e.pos<v;)h.push(c(e,o))}else h.push(c(e,o))}else n[a]=c(e,o);break;case"message":const d=t.T;s?n[a].push(Ln(e,new d,r,t)):dt(n[a])?Ln(e,n[a],r,t):(n[a]=Ln(e,new d,r,t),d.fieldWrapper&&!t.oneof&&!t.repeated&&(n[a]=d.fieldWrapper.unwrapField(n[a])));break;case"map":let[u,l]=uu(t,e,r);n[a][u]=l;break}}function Ln(n,e,t,i){const r=e.getType().runtime.bin,s=i==null?void 0:i.delimited;return r.readMessage(e,n,s?i.no:n.uint32(),t,s),e}function uu(n,e,t){const i=e.uint32(),r=e.pos+i;let s,a;for(;e.pos<r;){const[o]=e.tag();switch(o){case 1:s=Nn(e,n.K);break;case 2:switch(n.V.kind){case"scalar":a=Nn(e,n.V.T);break;case"enum":a=e.int32();break;case"message":a=Ln(e,new n.V.T,t,void 0);break}break}}if(s===void 0&&(s=Ft(n.K,yt.BIGINT)),typeof s!="string"&&typeof s!="number"&&(s=s.toString()),a===void 0)switch(n.V.kind){case"scalar":a=Ft(n.V.T,yt.BIGINT);break;case"enum":a=n.V.T.values[0].no;break;case"message":a=new n.V.T;break}return[s,a]}function lu(n,e){const t=Nn(n,e);return typeof t=="bigint"?t.toString():t}function Nn(n,e){switch(e){case E.STRING:return n.string();case E.BOOL:return n.bool();case E.DOUBLE:return n.double();case E.FLOAT:return n.float();case E.INT32:return n.int32();case E.INT64:return n.int64();case E.UINT64:return n.uint64();case E.FIXED64:return n.fixed64();case E.BYTES:return n.bytes();case E.FIXED32:return n.fixed32();case E.SFIXED32:return n.sfixed32();case E.SFIXED64:return n.sfixed64();case E.SINT64:return n.sint64();case E.UINT32:return n.uint32();case E.SINT32:return n.sint32()}}function Us(n,e,t,i){de(e!==void 0);const r=n.repeated;switch(n.kind){case"scalar":case"enum":let s=n.kind=="enum"?E.INT32:n.T;if(r)if(de(Array.isArray(e)),n.packed)fu(t,s,n.no,e);else for(const a of e)cn(t,s,n.no,a);else cn(t,s,n.no,e);break;case"message":if(r){de(Array.isArray(e));for(const a of e)Fs(t,i,n,a)}else Fs(t,i,n,e);break;case"map":de(typeof e=="object"&&e!=null);for(const[a,o]of Object.entries(e))hu(t,i,n,a,o);break}}function hu(n,e,t,i,r){n.tag(t.no,le.LengthDelimited),n.fork();let s=i;switch(t.K){case E.INT32:case E.FIXED32:case E.UINT32:case E.SFIXED32:case E.SINT32:s=Number.parseInt(i);break;case E.BOOL:de(i=="true"||i=="false"),s=i=="true";break}switch(cn(n,t.K,1,s),t.V.kind){case"scalar":cn(n,t.V.T,2,r);break;case"enum":cn(n,E.INT32,2,r);break;case"message":de(r!==void 0),n.tag(2,le.LengthDelimited).bytes(r.toBinary(e));break}n.join()}function Fs(n,e,t,i){const r=Is(t.T,i);t.delimited?n.tag(t.no,le.StartGroup).raw(r.toBinary(e)).tag(t.no,le.EndGroup):n.tag(t.no,le.LengthDelimited).bytes(r.toBinary(e))}function cn(n,e,t,i){de(i!==void 0);let[r,s]=js(e);n.tag(t,r)[s](i)}function fu(n,e,t,i){if(!i.length)return;n.tag(t,le.LengthDelimited).fork();let[,r]=js(e);for(let s=0;s<i.length;s++)n[r](i[s]);n.join()}function js(n){let e=le.Varint;switch(n){case E.BYTES:case E.STRING:e=le.LengthDelimited;break;case E.DOUBLE:case E.FIXED64:case E.SFIXED64:e=le.Bit64;break;case E.FIXED32:case E.SFIXED32:case E.FLOAT:e=le.Bit32;break}const t=E[n].toLowerCase();return[e,t]}function mu(){return{setEnumType:ms,initPartial(n,e){if(n===void 0)return;const t=e.getType();for(const i of t.fields.byMember()){const r=i.localName,s=e,a=n;if(a[r]!=null)switch(i.kind){case"oneof":const o=a[r].case;if(o===void 0)continue;const c=i.findField(o);let d=a[r].value;c&&c.kind=="message"&&!dt(d,c.T)?d=new c.T(d):c&&c.kind==="scalar"&&c.T===E.BYTES&&(d=dn(d)),s[r]={case:o,value:d};break;case"scalar":case"enum":let u=a[r];i.T===E.BYTES&&(u=i.repeated?u.map(dn):dn(u)),s[r]=u;break;case"map":switch(i.V.kind){case"scalar":case"enum":if(i.V.T===E.BYTES)for(const[m,v]of Object.entries(a[r]))s[r][m]=dn(v);else Object.assign(s[r],a[r]);break;case"message":const h=i.V.T;for(const m of Object.keys(a[r])){let v=a[r][m];h.fieldWrapper||(v=new h(v)),s[r][m]=v}break}break;case"message":const l=i.T;if(i.repeated)s[r]=a[r].map(h=>dt(h,l)?h:new l(h));else{const h=a[r];l.fieldWrapper?l.typeName==="google.protobuf.BytesValue"?s[r]=dn(h):s[r]=h:s[r]=dt(h,l)?h:new l(h)}break}}},equals(n,e,t){return e===t?!0:!e||!t?!1:n.fields.byMember().every(i=>{const r=e[i.localName],s=t[i.localName];if(i.repeated){if(r.length!==s.length)return!1;switch(i.kind){case"message":return r.every((a,o)=>i.T.equals(a,s[o]));case"scalar":return r.every((a,o)=>bt(i.T,a,s[o]));case"enum":return r.every((a,o)=>bt(E.INT32,a,s[o]))}throw new Error("repeated cannot contain ".concat(i.kind))}switch(i.kind){case"message":let a=r,o=s;return i.T.fieldWrapper&&(a!==void 0&&!dt(a)&&(a=i.T.fieldWrapper.wrapField(a)),o!==void 0&&!dt(o)&&(o=i.T.fieldWrapper.wrapField(o))),i.T.equals(a,o);case"enum":return bt(E.INT32,r,s);case"scalar":return bt(i.T,r,s);case"oneof":if(r.case!==s.case)return!1;const c=i.findField(r.case);if(c===void 0)return!0;switch(c.kind){case"message":return c.T.equals(r.value,s.value);case"enum":return bt(E.INT32,r.value,s.value);case"scalar":return bt(c.T,r.value,s.value)}throw new Error("oneof cannot contain ".concat(c.kind));case"map":const d=Object.keys(r).concat(Object.keys(s));switch(i.V.kind){case"message":const u=i.V.T;return d.every(h=>u.equals(r[h],s[h]));case"enum":return d.every(h=>bt(E.INT32,r[h],s[h]));case"scalar":const l=i.V.T;return d.every(h=>bt(l,r[h],s[h]))}break}})},clone(n){const e=n.getType(),t=new e,i=t;for(const r of e.fields.byMember()){const s=n[r.localName];let a;if(r.repeated)a=s.map(Un);else if(r.kind=="map"){a=i[r.localName];for(const[o,c]of Object.entries(s))a[o]=Un(c)}else r.kind=="oneof"?a=r.findField(s.case)?{case:s.case,value:Un(s.value)}:{case:void 0}:a=Un(s);i[r.localName]=a}for(const r of e.runtime.bin.listUnknownFields(n))e.runtime.bin.onUnknownField(i,r.no,r.wireType,r.data);return t}}}function Un(n){if(n===void 0)return n;if(dt(n))return n.clone();if(n instanceof Uint8Array){const e=new Uint8Array(n.byteLength);return e.set(n),e}return n}function dn(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function pu(n,e,t){return{syntax:n,json:ru(),bin:du(),util:Object.assign(Object.assign({},mu()),{newFieldList:e,initFields:t}),makeMessageType(i,r,s){return Kd(this,i,r,s)},makeEnum:qd,makeEnumType:ps,getEnumType:Vd,makeExtension(i,r,s){return Yd(this,i,r,s)}}}class gu{constructor(e,t){this._fields=e,this._normalizer=t}findJsonName(e){if(!this.jsonNames){const t={};for(const i of this.list())t[i.jsonName]=t[i.name]=i;this.jsonNames=t}return this.jsonNames[e]}find(e){if(!this.numbers){const t={};for(const i of this.list())t[i.no]=i;this.numbers=t}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,t)=>e.no-t.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let t;for(const i of this.list())i.oneof?i.oneof!==t&&(t=i.oneof,e.push(t)):e.push(i)}return this.members}}function Bs(n,e){const t=Vs(n);return e?t:Su(Tu(t))}function vu(n){return Bs(n,!1)}const yu=Vs;function Vs(n){let e=!1;const t=[];for(let i=0;i<n.length;i++){let r=n.charAt(i);switch(r){case"_":e=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":t.push(r),e=!1;break;default:e&&(e=!1,r=r.toUpperCase()),t.push(r);break}}return t.join("")}const bu=new Set(["constructor","toString","toJSON","valueOf"]),ku=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),qs=n=>"".concat(n,"$"),Tu=n=>ku.has(n)?qs(n):n,Su=n=>bu.has(n)?qs(n):n;class Cu{constructor(e){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=e,this.localName=vu(e)}addField(e){de(e.oneof===this,"field ".concat(e.name," not one of ").concat(this.name)),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let t=0;t<this.fields.length;t++)this._lookup[this.fields[t].localName]=this.fields[t]}return this._lookup[e]}}function Eu(n,e){var t,i,r,s,a,o;const c=[];let d;for(const u of typeof n=="function"?n():n){const l=u;if(l.localName=Bs(u.name,u.oneof!==void 0),l.jsonName=(t=u.jsonName)!==null&&t!==void 0?t:yu(u.name),l.repeated=(i=u.repeated)!==null&&i!==void 0?i:!1,u.kind=="scalar"&&(l.L=(r=u.L)!==null&&r!==void 0?r:yt.BIGINT),l.delimited=(s=u.delimited)!==null&&s!==void 0?s:!1,l.req=(a=u.req)!==null&&a!==void 0?a:!1,l.opt=(o=u.opt)!==null&&o!==void 0?o:!1,u.packed===void 0&&(l.packed=u.kind=="enum"||u.kind=="scalar"&&u.T!=E.BYTES&&u.T!=E.STRING),u.oneof!==void 0){const h=typeof u.oneof=="string"?u.oneof:u.oneof.name;(!d||d.name!=h)&&(d=new Cu(h)),l.oneof=d,d.addField(l)}c.push(l)}return c}const y=pu("proto3",n=>new gu(n,e=>Eu(e)),n=>{for(const e of n.getType().fields.byMember()){if(e.opt)continue;const t=e.localName,i=n;if(e.repeated){i[t]=[];continue}switch(e.kind){case"oneof":i[t]={case:void 0};break;case"enum":i[t]=0;break;case"map":i[t]={};break;case"scalar":i[t]=Ft(e.T,e.L);break}}});class Ie extends Si{constructor(e){super(),this.seconds=se.zero,this.nanos=0,y.util.initPartial(e,this)}fromJson(e,t){if(typeof e!="string")throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(y.json.debug(e)));const i=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!i)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const r=Date.parse(i[1]+"-"+i[2]+"-"+i[3]+"T"+i[4]+":"+i[5]+":"+i[6]+(i[8]?i[8]:"Z"));if(Number.isNaN(r))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(r<Date.parse("0001-01-01T00:00:00Z")||r>Date.parse("9999-12-31T23:59:59Z"))throw new Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=se.parse(r/1e3),this.nanos=0,i[7]&&(this.nanos=parseInt("1"+i[7]+"0".repeat(9-i[7].length))-1e9),this}toJson(e){const t=Number(this.seconds)*1e3;if(t<Date.parse("0001-01-01T00:00:00Z")||t>Date.parse("9999-12-31T23:59:59Z"))throw new Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw new Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let i="Z";if(this.nanos>0){const r=(this.nanos+1e9).toString().substring(1);r.substring(3)==="000000"?i="."+r.substring(0,3)+"Z":r.substring(6)==="000"?i="."+r.substring(0,6)+"Z":i="."+r+"Z"}return new Date(t).toISOString().replace(".000Z",i)}toDate(){return new Date(Number(this.seconds)*1e3+Math.ceil(this.nanos/1e6))}static now(){return Ie.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new Ie({seconds:se.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return new Ie().fromBinary(e,t)}static fromJson(e,t){return new Ie().fromJson(e,t)}static fromJsonString(e,t){return new Ie().fromJsonString(e,t)}static equals(e,t){return y.util.equals(Ie,e,t)}}Ie.runtime=y,Ie.typeName="google.protobuf.Timestamp",Ie.fields=y.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const Pu=y.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ie},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:wu,repeated:!0},{no:5,name:"events",kind:"message",T:_u,repeated:!0}]),wu=y.makeMessageType("livekit.TimeSeriesMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"samples",kind:"message",T:Ru,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),Ru=y.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ie},{no:3,name:"value",kind:"scalar",T:2}]),_u=y.makeMessageType("livekit.EventMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"start_timestamp_ms",kind:"scalar",T:3},{no:5,name:"end_timestamp_ms",kind:"scalar",T:3,opt:!0},{no:6,name:"normalized_start_timestamp",kind:"message",T:Ie},{no:7,name:"normalized_end_timestamp",kind:"message",T:Ie,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),Ks=y.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),Ue=y.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),he=y.makeEnum("livekit.TrackSource",[{no:0,name:"UNKNOWN"},{no:1,name:"CAMERA"},{no:2,name:"MICROPHONE"},{no:3,name:"SCREEN_SHARE"},{no:4,name:"SCREEN_SHARE_AUDIO"}]),Ri=y.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),un=y.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),ln=y.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Fe=y.makeEnum("livekit.DisconnectReason",[{no:0,name:"UNKNOWN_REASON"},{no:1,name:"CLIENT_INITIATED"},{no:2,name:"DUPLICATE_IDENTITY"},{no:3,name:"SERVER_SHUTDOWN"},{no:4,name:"PARTICIPANT_REMOVED"},{no:5,name:"ROOM_DELETED"},{no:6,name:"STATE_MISMATCH"},{no:7,name:"JOIN_FAILURE"},{no:8,name:"MIGRATION"},{no:9,name:"SIGNAL_CLOSE"},{no:10,name:"ROOM_CLOSED"},{no:11,name:"USER_UNAVAILABLE"},{no:12,name:"USER_REJECTED"},{no:13,name:"SIP_TRUNK_FAILURE"},{no:14,name:"CONNECTION_TIMEOUT"},{no:15,name:"MEDIA_FAILURE"}]),Bt=y.makeEnum("livekit.ReconnectReason",[{no:0,name:"RR_UNKNOWN"},{no:1,name:"RR_SIGNAL_DISCONNECTED"},{no:2,name:"RR_PUBLISHER_FAILED"},{no:3,name:"RR_SUBSCRIBER_FAILED"},{no:4,name:"RR_SWITCH_CANDIDATE"}]),zs=y.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),ge=y.makeEnum("livekit.AudioTrackFeature",[{no:0,name:"TF_STEREO"},{no:1,name:"TF_NO_DTX"},{no:2,name:"TF_AUTO_GAIN_CONTROL"},{no:3,name:"TF_ECHO_CANCELLATION"},{no:4,name:"TF_NOISE_SUPPRESSION"},{no:5,name:"TF_ENHANCED_NOISE_CANCELLATION"},{no:6,name:"TF_PRECONNECT_BUFFER"}]),Fn=y.makeMessageType("livekit.Room",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"empty_timeout",kind:"scalar",T:13},{no:14,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:5,name:"creation_time",kind:"scalar",T:3},{no:15,name:"creation_time_ms",kind:"scalar",T:3},{no:6,name:"turn_password",kind:"scalar",T:9},{no:7,name:"enabled_codecs",kind:"message",T:jn,repeated:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"num_participants",kind:"scalar",T:13},{no:11,name:"num_publishers",kind:"scalar",T:13},{no:10,name:"active_recording",kind:"scalar",T:8},{no:13,name:"version",kind:"message",T:ra}]),jn=y.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),Iu=y.makeMessageType("livekit.ParticipantPermission",()=>[{no:1,name:"can_subscribe",kind:"scalar",T:8},{no:2,name:"can_publish",kind:"scalar",T:8},{no:3,name:"can_publish_data",kind:"scalar",T:8},{no:9,name:"can_publish_sources",kind:"enum",T:y.getEnumType(he),repeated:!0},{no:7,name:"hidden",kind:"scalar",T:8},{no:8,name:"recorder",kind:"scalar",T:8},{no:10,name:"can_update_metadata",kind:"scalar",T:8},{no:11,name:"agent",kind:"scalar",T:8},{no:12,name:"can_subscribe_metrics",kind:"scalar",T:8}]),Rt=y.makeMessageType("livekit.ParticipantInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"identity",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:y.getEnumType(Vt)},{no:4,name:"tracks",kind:"message",T:Kt,repeated:!0},{no:5,name:"metadata",kind:"scalar",T:9},{no:6,name:"joined_at",kind:"scalar",T:3},{no:17,name:"joined_at_ms",kind:"scalar",T:3},{no:9,name:"name",kind:"scalar",T:9},{no:10,name:"version",kind:"scalar",T:13},{no:11,name:"permission",kind:"message",T:Iu},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:y.getEnumType(qt)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:y.getEnumType(Fe)},{no:18,name:"kind_details",kind:"enum",T:y.getEnumType(Du),repeated:!0}]),Vt=y.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),qt=y.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"}]),Du=y.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"}]),Le=y.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),Mu=y.makeMessageType("livekit.SimulcastCodecInfo",()=>[{no:1,name:"mime_type",kind:"scalar",T:9},{no:2,name:"mid",kind:"scalar",T:9},{no:3,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:_t,repeated:!0}]),Kt=y.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:y.getEnumType(Ue)},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"muted",kind:"scalar",T:8},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"simulcast",kind:"scalar",T:8},{no:8,name:"disable_dtx",kind:"scalar",T:8},{no:9,name:"source",kind:"enum",T:y.getEnumType(he)},{no:10,name:"layers",kind:"message",T:_t,repeated:!0},{no:11,name:"mime_type",kind:"scalar",T:9},{no:12,name:"mid",kind:"scalar",T:9},{no:13,name:"codecs",kind:"message",T:Mu,repeated:!0},{no:14,name:"stereo",kind:"scalar",T:8},{no:15,name:"disable_red",kind:"scalar",T:8},{no:16,name:"encryption",kind:"enum",T:y.getEnumType(Le)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:ra},{no:19,name:"audio_features",kind:"enum",T:y.getEnumType(ge),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:y.getEnumType(Ks)}]),_t=y.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:y.getEnumType(Ri)},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13},{no:4,name:"bitrate",kind:"scalar",T:13},{no:5,name:"ssrc",kind:"scalar",T:13},{no:6,name:"spatial_layer",kind:"scalar",T:5},{no:7,name:"rid",kind:"scalar",T:9}]),De=y.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:y.getEnumType(V)},{no:4,name:"participant_identity",kind:"scalar",T:9},{no:5,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:2,name:"user",kind:"message",T:Gs,oneof:"value"},{no:3,name:"speaker",kind:"message",T:Ou,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:Hs,oneof:"value"},{no:7,name:"transcription",kind:"message",T:Au,oneof:"value"},{no:8,name:"metrics",kind:"message",T:Pu,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:_i,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:Js,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:$s,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:Qs,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:Di,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:Mi,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:Oi,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),V=y.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),Ou=y.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:Ws,repeated:!0}]),Ws=y.makeMessageType("livekit.SpeakerInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"level",kind:"scalar",T:2},{no:3,name:"active",kind:"scalar",T:8}]),Gs=y.makeMessageType("livekit.UserPacket",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:5,name:"participant_identity",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:12},{no:3,name:"destination_sids",kind:"scalar",T:9,repeated:!0},{no:6,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:4,name:"topic",kind:"scalar",T:9,opt:!0},{no:8,name:"id",kind:"scalar",T:9,opt:!0},{no:9,name:"start_time",kind:"scalar",T:4,opt:!0},{no:10,name:"end_time",kind:"scalar",T:4,opt:!0},{no:11,name:"nonce",kind:"scalar",T:12}]),Hs=y.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),Au=y.makeMessageType("livekit.Transcription",()=>[{no:2,name:"transcribed_participant_identity",kind:"scalar",T:9},{no:3,name:"track_id",kind:"scalar",T:9},{no:4,name:"segments",kind:"message",T:xu,repeated:!0}]),xu=y.makeMessageType("livekit.TranscriptionSegment",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"text",kind:"scalar",T:9},{no:3,name:"start_time",kind:"scalar",T:4},{no:4,name:"end_time",kind:"scalar",T:4},{no:5,name:"final",kind:"scalar",T:8},{no:6,name:"language",kind:"scalar",T:9}]),_i=y.makeMessageType("livekit.ChatMessage",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"edit_timestamp",kind:"scalar",T:3,opt:!0},{no:4,name:"message",kind:"scalar",T:9},{no:5,name:"deleted",kind:"scalar",T:8},{no:6,name:"generated",kind:"scalar",T:8}]),Js=y.makeMessageType("livekit.RpcRequest",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"method",kind:"scalar",T:9},{no:3,name:"payload",kind:"scalar",T:9},{no:4,name:"response_timeout_ms",kind:"scalar",T:13},{no:5,name:"version",kind:"scalar",T:13}]),$s=y.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),Qs=y.makeMessageType("livekit.RpcResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:9,oneof:"value"},{no:3,name:"error",kind:"message",T:Ys,oneof:"value"}]),Ys=y.makeMessageType("livekit.RpcError",()=>[{no:1,name:"code",kind:"scalar",T:13},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"data",kind:"scalar",T:9}]),Xs=y.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),Zs=y.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:y.getEnumType(ea)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"region",kind:"scalar",T:9},{no:5,name:"node_id",kind:"scalar",T:9},{no:6,name:"debug_info",kind:"scalar",T:9},{no:7,name:"agent_protocol",kind:"scalar",T:5}]),ea=y.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),Lu=y.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:y.getEnumType(ta)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"os",kind:"scalar",T:9},{no:5,name:"os_version",kind:"scalar",T:9},{no:6,name:"device_model",kind:"scalar",T:9},{no:7,name:"browser",kind:"scalar",T:9},{no:8,name:"browser_version",kind:"scalar",T:9},{no:9,name:"address",kind:"scalar",T:9},{no:10,name:"network",kind:"scalar",T:9},{no:11,name:"other_sdks",kind:"scalar",T:9}]),ta=y.makeEnum("livekit.ClientInfo.SDK",[{no:0,name:"UNKNOWN"},{no:1,name:"JS"},{no:2,name:"SWIFT"},{no:3,name:"ANDROID"},{no:4,name:"FLUTTER"},{no:5,name:"GO"},{no:6,name:"UNITY"},{no:7,name:"REACT_NATIVE"},{no:8,name:"RUST"},{no:9,name:"PYTHON"},{no:10,name:"CPP"},{no:11,name:"UNITY_WEB"},{no:12,name:"NODE"},{no:13,name:"UNREAL"},{no:14,name:"ESP32"}]),na=y.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:ia},{no:2,name:"screen",kind:"message",T:ia},{no:3,name:"resume_connection",kind:"enum",T:y.getEnumType(ln)},{no:4,name:"disabled_codecs",kind:"message",T:Nu},{no:5,name:"force_relay",kind:"enum",T:y.getEnumType(ln)}]),ia=y.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:y.getEnumType(ln)}]),Nu=y.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:jn,repeated:!0},{no:2,name:"publish",kind:"message",T:jn,repeated:!0}]),ra=y.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Ii=y.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),sa=y.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:y.getEnumType(Ii)},{no:2,name:"version",kind:"scalar",T:5},{no:3,name:"reply_to_stream_id",kind:"scalar",T:9},{no:4,name:"attached_stream_ids",kind:"scalar",T:9,repeated:!0},{no:5,name:"generated",kind:"scalar",T:8}],{localName:"DataStream_TextHeader"}),aa=y.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),Di=y.makeMessageType("livekit.DataStream.Header",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"topic",kind:"scalar",T:9},{no:4,name:"mime_type",kind:"scalar",T:9},{no:5,name:"total_length",kind:"scalar",T:4,opt:!0},{no:7,name:"encryption_type",kind:"enum",T:y.getEnumType(Le)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:sa,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:aa,oneof:"content_header"}],{localName:"DataStream_Header"}),Mi=y.makeMessageType("livekit.DataStream.Chunk",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"chunk_index",kind:"scalar",T:4},{no:3,name:"content",kind:"scalar",T:12},{no:4,name:"version",kind:"scalar",T:5},{no:5,name:"iv",kind:"scalar",T:12,opt:!0}],{localName:"DataStream_Chunk"}),Oi=y.makeMessageType("livekit.DataStream.Trailer",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"reason",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}}],{localName:"DataStream_Trailer"}),He=y.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),Ai=y.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),Uu=y.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),Fu=y.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:It,oneof:"message"},{no:2,name:"answer",kind:"message",T:It,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Ni,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Li,oneof:"message"},{no:5,name:"mute",kind:"message",T:Ui,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Bn,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:ca,oneof:"message"},{no:8,name:"leave",kind:"message",T:Vn,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:ua,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:ma,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:pa,oneof:"message"},{no:13,name:"simulate",kind:"message",T:tt,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:la,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:ya,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:da,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:Ku,oneof:"message"}]),oa=y.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:ju,oneof:"message"},{no:2,name:"answer",kind:"message",T:It,oneof:"message"},{no:3,name:"offer",kind:"message",T:It,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Ni,oneof:"message"},{no:5,name:"update",kind:"message",T:qu,oneof:"message"},{no:6,name:"track_published",kind:"message",T:Fi,oneof:"message"},{no:8,name:"leave",kind:"message",T:Vn,oneof:"message"},{no:9,name:"mute",kind:"message",T:Ui,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:zu,oneof:"message"},{no:11,name:"room_update",kind:"message",T:Wu,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:Hu,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:$u,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:Yu,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Xu,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:Vu,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:Bu,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:el,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:il,oneof:"message"},{no:22,name:"request_response",kind:"message",T:rl,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:sl,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:Zu,oneof:"message"}]),xi=y.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9}]),Li=y.makeMessageType("livekit.AddTrackRequest",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"type",kind:"enum",T:y.getEnumType(Ue)},{no:4,name:"width",kind:"scalar",T:13},{no:5,name:"height",kind:"scalar",T:13},{no:6,name:"muted",kind:"scalar",T:8},{no:7,name:"disable_dtx",kind:"scalar",T:8},{no:8,name:"source",kind:"enum",T:y.getEnumType(he)},{no:9,name:"layers",kind:"message",T:_t,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:xi,repeated:!0},{no:11,name:"sid",kind:"scalar",T:9},{no:12,name:"stereo",kind:"scalar",T:8},{no:13,name:"disable_red",kind:"scalar",T:8},{no:14,name:"encryption",kind:"enum",T:y.getEnumType(Le)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:y.getEnumType(Ks)},{no:17,name:"audio_features",kind:"enum",T:y.getEnumType(ge),repeated:!0}]),Ni=y.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:y.getEnumType(He)},{no:3,name:"final",kind:"scalar",T:8}]),Ui=y.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),ju=y.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Fn},{no:2,name:"participant",kind:"message",T:Rt},{no:3,name:"other_participants",kind:"message",T:Rt,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:ha,repeated:!0},{no:6,name:"subscriber_primary",kind:"scalar",T:8},{no:7,name:"alternative_url",kind:"scalar",T:9},{no:8,name:"client_configuration",kind:"message",T:na},{no:9,name:"server_region",kind:"scalar",T:9},{no:10,name:"ping_timeout",kind:"scalar",T:5},{no:11,name:"ping_interval",kind:"scalar",T:5},{no:12,name:"server_info",kind:"message",T:Zs},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:jn,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),Bu=y.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:ha,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:na},{no:3,name:"server_info",kind:"message",T:Zs},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),Fi=y.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:Kt}]),Vu=y.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),It=y.makeMessageType("livekit.SessionDescription",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9},{no:3,name:"id",kind:"scalar",T:13}]),qu=y.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:Rt,repeated:!0}]),Bn=y.makeMessageType("livekit.UpdateSubscription",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"participant_tracks",kind:"message",T:Xs,repeated:!0}]),ca=y.makeMessageType("livekit.UpdateTrackSettings",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:3,name:"disabled",kind:"scalar",T:8},{no:4,name:"quality",kind:"enum",T:y.getEnumType(Ri)},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"fps",kind:"scalar",T:13},{no:8,name:"priority",kind:"scalar",T:13}]),da=y.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:y.getEnumType(ge),repeated:!0}]),Ku=y.makeMessageType("livekit.UpdateLocalVideoTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13}]),Vn=y.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:y.getEnumType(Fe)},{no:3,name:"action",kind:"enum",T:y.getEnumType(zt)},{no:4,name:"regions",kind:"message",T:tl}]),zt=y.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),ua=y.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:_t,repeated:!0}]),la=y.makeMessageType("livekit.UpdateParticipantMetadata",()=>[{no:1,name:"metadata",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:4,name:"request_id",kind:"scalar",T:13}]),ha=y.makeMessageType("livekit.ICEServer",()=>[{no:1,name:"urls",kind:"scalar",T:9,repeated:!0},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"credential",kind:"scalar",T:9}]),zu=y.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:Ws,repeated:!0}]),Wu=y.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Fn}]),Gu=y.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:y.getEnumType(un)},{no:3,name:"score",kind:"scalar",T:2}]),Hu=y.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:Gu,repeated:!0}]),Ju=y.makeMessageType("livekit.StreamStateInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:y.getEnumType(Ai)}]),$u=y.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:Ju,repeated:!0}]),ji=y.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:y.getEnumType(Ri)},{no:2,name:"enabled",kind:"scalar",T:8}]),Qu=y.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:ji,repeated:!0}]),Yu=y.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:ji,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:Qu,repeated:!0}]),fa=y.makeMessageType("livekit.TrackPermission",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"all_tracks",kind:"scalar",T:8},{no:3,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:4,name:"participant_identity",kind:"scalar",T:9}]),ma=y.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:fa,repeated:!0}]),Xu=y.makeMessageType("livekit.SubscriptionPermissionUpdate",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"allowed",kind:"scalar",T:8}]),Zu=y.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Fn},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:Rt},{no:4,name:"other_participants",kind:"message",T:Rt,repeated:!0}]),pa=y.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:It},{no:2,name:"subscription",kind:"message",T:Bn},{no:3,name:"publish_tracks",kind:"message",T:Fi,repeated:!0},{no:4,name:"data_channels",kind:"message",T:va,repeated:!0},{no:5,name:"offer",kind:"message",T:It},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:ga,repeated:!0}]),ga=y.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),va=y.makeMessageType("livekit.DataChannelInfo",()=>[{no:1,name:"label",kind:"scalar",T:9},{no:2,name:"id",kind:"scalar",T:13},{no:3,name:"target",kind:"enum",T:y.getEnumType(He)}]),tt=y.makeMessageType("livekit.SimulateScenario",()=>[{no:1,name:"speaker_update",kind:"scalar",T:5,oneof:"scenario"},{no:2,name:"node_failure",kind:"scalar",T:8,oneof:"scenario"},{no:3,name:"migration",kind:"scalar",T:8,oneof:"scenario"},{no:4,name:"server_leave",kind:"scalar",T:8,oneof:"scenario"},{no:5,name:"switch_candidate_protocol",kind:"enum",T:y.getEnumType(Uu),oneof:"scenario"},{no:6,name:"subscriber_bandwidth",kind:"scalar",T:3,oneof:"scenario"},{no:7,name:"disconnect_signal_on_resume",kind:"scalar",T:8,oneof:"scenario"},{no:8,name:"disconnect_signal_on_resume_no_messages",kind:"scalar",T:8,oneof:"scenario"},{no:9,name:"leave_request_full_reconnect",kind:"scalar",T:8,oneof:"scenario"}]),ya=y.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),el=y.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),tl=y.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:nl,repeated:!0}]),nl=y.makeMessageType("livekit.RegionInfo",()=>[{no:1,name:"region",kind:"scalar",T:9},{no:2,name:"url",kind:"scalar",T:9},{no:3,name:"distance",kind:"scalar",T:3}]),il=y.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:y.getEnumType(zs)}]),rl=y.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:y.getEnumType(Bi)},{no:3,name:"message",kind:"scalar",T:9}]),Bi=y.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"}]),sl=y.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]);function al(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var qn={exports:{}},ol=qn.exports,ba;function cl(){return ba||(ba=1,function(n){(function(e,t){n.exports?n.exports=t():e.log=t()})(ol,function(){var e=function(){},t="undefined",i=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],s={},a=null;function o(p,S){var k=p[S];if(typeof k.bind=="function")return k.bind(p);try{return Function.prototype.bind.call(k,p)}catch{return function(){return Function.prototype.apply.apply(k,[p,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function d(p){return p==="debug"&&(p="log"),typeof console===t?!1:p==="trace"&&i?c:console[p]!==void 0?o(console,p):console.log!==void 0?o(console,"log"):e}function u(){for(var p=this.getLevel(),S=0;S<r.length;S++){var k=r[S];this[k]=S<p?e:this.methodFactory(k,p,this.name)}if(this.log=this.debug,typeof console===t&&p<this.levels.SILENT)return"No console available for logging"}function l(p){return function(){typeof console!==t&&(u.call(this),this[p].apply(this,arguments))}}function h(p,S,k){return d(p)||l.apply(this,arguments)}function m(p,S){var k=this,R,w,g,b="loglevel";typeof p=="string"?b+=":"+p:typeof p=="symbol"&&(b=void 0);function P(D){var N=(r[D]||"silent").toUpperCase();if(!(typeof window===t||!b)){try{window.localStorage[b]=N;return}catch{}try{window.document.cookie=encodeURIComponent(b)+"="+N+";"}catch{}}}function L(){var D;if(!(typeof window===t||!b)){try{D=window.localStorage[b]}catch{}if(typeof D===t)try{var N=window.document.cookie,J=encodeURIComponent(b),Q=N.indexOf(J+"=");Q!==-1&&(D=/^([^;]+)/.exec(N.slice(Q+J.length+1))[1])}catch{}return k.levels[D]===void 0&&(D=void 0),D}}function U(){if(!(typeof window===t||!b)){try{window.localStorage.removeItem(b)}catch{}try{window.document.cookie=encodeURIComponent(b)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch{}}}function A(D){var N=D;if(typeof N=="string"&&k.levels[N.toUpperCase()]!==void 0&&(N=k.levels[N.toUpperCase()]),typeof N=="number"&&N>=0&&N<=k.levels.SILENT)return N;throw new TypeError("log.setLevel() called with invalid level: "+D)}k.name=p,k.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},k.methodFactory=S||h,k.getLevel=function(){return g??w??R},k.setLevel=function(D,N){return g=A(D),N!==!1&&P(g),u.call(k)},k.setDefaultLevel=function(D){w=A(D),L()||k.setLevel(D,!1)},k.resetLevel=function(){g=null,U(),u.call(k)},k.enableAll=function(D){k.setLevel(k.levels.TRACE,D)},k.disableAll=function(D){k.setLevel(k.levels.SILENT,D)},k.rebuild=function(){if(a!==k&&(R=A(a.getLevel())),u.call(k),a===k)for(var D in s)s[D].rebuild()},R=A(a?a.getLevel():"WARN");var T=L();T!=null&&(g=A(T)),u.call(k)}a=new m,a.getLogger=function(S){if(typeof S!="symbol"&&typeof S!="string"||S==="")throw new TypeError("You must supply a name when creating a logger.");var k=s[S];return k||(k=s[S]=new m(S,a.methodFactory)),k};var v=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=v),a},a.getLoggers=function(){return s},a.default=a,a})}(qn)),qn.exports}var hn=cl(),Wt;(function(n){n[n.trace=0]="trace",n[n.debug=1]="debug",n[n.info=2]="info",n[n.warn=3]="warn",n[n.error=4]="error",n[n.silent=5]="silent"})(Wt||(Wt={}));var je;(function(n){n.Default="livekit",n.Room="livekit-room",n.Participant="livekit-participant",n.Track="livekit-track",n.Publication="livekit-track-publication",n.Engine="livekit-engine",n.Signal="livekit-signal",n.PCManager="livekit-pc-manager",n.PCTransport="livekit-pc-transport",n.E2EE="lk-e2ee"})(je||(je={}));let q=hn.getLogger("livekit");const ka=Object.values(je).map(n=>hn.getLogger(n));q.setDefaultLevel(Wt.info);function nt(n){const e=hn.getLogger(n);return e.setDefaultLevel(q.getLevel()),e}function dl(n,e){if(e)hn.getLogger(e).setLevel(n);else for(const t of ka)t.setLevel(n)}function ul(n,e){(e?[e]:ka).forEach(i=>{const r=i.methodFactory;i.methodFactory=(s,a,o)=>{const c=r(s,a,o),d=Wt[s],u=d>=a&&d<Wt.silent;return(l,h)=>{h?c(l,h):c(l),u&&n(d,l,h)}},i.setLevel(i.getLevel())})}const ll=hn.getLogger("lk-e2ee"),fn=7e3,hl=[0,300,2*2*300,3*3*300,4*4*300,fn,fn,fn,fn,fn];class Ta{constructor(e){this._retryDelays=e!==void 0?[...e]:hl}nextRetryDelayInMs(e){if(e.retryCount>=this._retryDelays.length)return null;const t=this._retryDelays[e.retryCount];return e.retryCount<=1?t:t+Math.random()*1e3}}function fl(n,e){var t={};for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.indexOf(i)<0&&(t[i]=n[i]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,i=Object.getOwnPropertySymbols(n);r<i.length;r++)e.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(n,i[r])&&(t[i[r]]=n[i[r]]);return t}function f(n,e,t,i){function r(s){return s instanceof t?s:new t(function(a){a(s)})}return new(t||(t=Promise))(function(s,a){function o(u){try{d(i.next(u))}catch(l){a(l)}}function c(u){try{d(i.throw(u))}catch(l){a(l)}}function d(u){u.done?s(u.value):r(u.value).then(o,c)}d((i=i.apply(n,e||[])).next())})}function Sa(n){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&n[e],i=0;if(t)return t.call(n);if(n&&typeof n.length=="number")return{next:function(){return n&&i>=n.length&&(n=void 0),{value:n&&n[i++],done:!n}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function ut(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=n[Symbol.asyncIterator],t;return e?e.call(n):(n=typeof Sa=="function"?Sa(n):n[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(s){t[s]=n[s]&&function(a){return new Promise(function(o,c){a=n[s](a),r(o,c,a.done,a.value)})}}function r(s,a,o,c){Promise.resolve(c).then(function(d){s({value:d,done:o})},a)}}typeof SuppressedError=="function"&&SuppressedError;var Kn={exports:{}},Ca;function ml(){if(Ca)return Kn.exports;Ca=1;var n=typeof Reflect=="object"?Reflect:null,e=n&&typeof n.apply=="function"?n.apply:function(b,P,L){return Function.prototype.apply.call(b,P,L)},t;n&&typeof n.ownKeys=="function"?t=n.ownKeys:Object.getOwnPropertySymbols?t=function(b){return Object.getOwnPropertyNames(b).concat(Object.getOwnPropertySymbols(b))}:t=function(b){return Object.getOwnPropertyNames(b)};function i(g){console&&console.warn&&console.warn(g)}var r=Number.isNaN||function(b){return b!==b};function s(){s.init.call(this)}Kn.exports=s,Kn.exports.once=k,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function o(g){if(typeof g!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof g)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(g){if(typeof g!="number"||g<0||r(g))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+g+".");a=g}}),s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(b){if(typeof b!="number"||b<0||r(b))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+b+".");return this._maxListeners=b,this};function c(g){return g._maxListeners===void 0?s.defaultMaxListeners:g._maxListeners}s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(b){for(var P=[],L=1;L<arguments.length;L++)P.push(arguments[L]);var U=b==="error",A=this._events;if(A!==void 0)U=U&&A.error===void 0;else if(!U)return!1;if(U){var T;if(P.length>0&&(T=P[0]),T instanceof Error)throw T;var D=new Error("Unhandled error."+(T?" ("+T.message+")":""));throw D.context=T,D}var N=A[b];if(N===void 0)return!1;if(typeof N=="function")e(N,this,P);else for(var J=N.length,Q=v(N,J),L=0;L<J;++L)e(Q[L],this,P);return!0};function d(g,b,P,L){var U,A,T;if(o(P),A=g._events,A===void 0?(A=g._events=Object.create(null),g._eventsCount=0):(A.newListener!==void 0&&(g.emit("newListener",b,P.listener?P.listener:P),A=g._events),T=A[b]),T===void 0)T=A[b]=P,++g._eventsCount;else if(typeof T=="function"?T=A[b]=L?[P,T]:[T,P]:L?T.unshift(P):T.push(P),U=c(g),U>0&&T.length>U&&!T.warned){T.warned=!0;var D=new Error("Possible EventEmitter memory leak detected. "+T.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");D.name="MaxListenersExceededWarning",D.emitter=g,D.type=b,D.count=T.length,i(D)}return g}s.prototype.addListener=function(b,P){return d(this,b,P,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(b,P){return d(this,b,P,!0)};function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(g,b,P){var L={fired:!1,wrapFn:void 0,target:g,type:b,listener:P},U=u.bind(L);return U.listener=P,L.wrapFn=U,U}s.prototype.once=function(b,P){return o(P),this.on(b,l(this,b,P)),this},s.prototype.prependOnceListener=function(b,P){return o(P),this.prependListener(b,l(this,b,P)),this},s.prototype.removeListener=function(b,P){var L,U,A,T,D;if(o(P),U=this._events,U===void 0)return this;if(L=U[b],L===void 0)return this;if(L===P||L.listener===P)--this._eventsCount===0?this._events=Object.create(null):(delete U[b],U.removeListener&&this.emit("removeListener",b,L.listener||P));else if(typeof L!="function"){for(A=-1,T=L.length-1;T>=0;T--)if(L[T]===P||L[T].listener===P){D=L[T].listener,A=T;break}if(A<0)return this;A===0?L.shift():p(L,A),L.length===1&&(U[b]=L[0]),U.removeListener!==void 0&&this.emit("removeListener",b,D||P)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(b){var P,L,U;if(L=this._events,L===void 0)return this;if(L.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):L[b]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete L[b]),this;if(arguments.length===0){var A=Object.keys(L),T;for(U=0;U<A.length;++U)T=A[U],T!=="removeListener"&&this.removeAllListeners(T);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(P=L[b],typeof P=="function")this.removeListener(b,P);else if(P!==void 0)for(U=P.length-1;U>=0;U--)this.removeListener(b,P[U]);return this};function h(g,b,P){var L=g._events;if(L===void 0)return[];var U=L[b];return U===void 0?[]:typeof U=="function"?P?[U.listener||U]:[U]:P?S(U):v(U,U.length)}s.prototype.listeners=function(b){return h(this,b,!0)},s.prototype.rawListeners=function(b){return h(this,b,!1)},s.listenerCount=function(g,b){return typeof g.listenerCount=="function"?g.listenerCount(b):m.call(g,b)},s.prototype.listenerCount=m;function m(g){var b=this._events;if(b!==void 0){var P=b[g];if(typeof P=="function")return 1;if(P!==void 0)return P.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function v(g,b){for(var P=new Array(b),L=0;L<b;++L)P[L]=g[L];return P}function p(g,b){for(;b+1<g.length;b++)g[b]=g[b+1];g.pop()}function S(g){for(var b=new Array(g.length),P=0;P<b.length;++P)b[P]=g[P].listener||g[P];return b}function k(g,b){return new Promise(function(P,L){function U(T){g.removeListener(b,A),L(T)}function A(){typeof g.removeListener=="function"&&g.removeListener("error",U),P([].slice.call(arguments))}w(g,b,A,{once:!0}),b!=="error"&&R(g,U,{once:!0})})}function R(g,b,P){typeof g.on=="function"&&w(g,"error",b,P)}function w(g,b,P,L){if(typeof g.on=="function")L.once?g.once(b,P):g.on(b,P);else if(typeof g.addEventListener=="function")g.addEventListener(b,function U(A){L.once&&g.removeEventListener(b,U),P(A)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof g)}return Kn.exports}var it=ml();let Ea=!0,Pa=!0;function mn(n,e,t){const i=n.match(e);return i&&i.length>=t&&parseFloat(i[t],10)}function Dt(n,e,t){if(!n.RTCPeerConnection)return;const i=n.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(a,o){if(a!==e)return r.apply(this,arguments);const c=d=>{const u=t(d);u&&(o.handleEvent?o.handleEvent(u):o(u))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(o,c),r.apply(this,[a,c])};const s=i.removeEventListener;i.removeEventListener=function(a,o){if(a!==e||!this._eventMap||!this._eventMap[e])return s.apply(this,arguments);if(!this._eventMap[e].has(o))return s.apply(this,arguments);const c=this._eventMap[e].get(o);return this._eventMap[e].delete(o),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,s.apply(this,[a,c])},Object.defineProperty(i,"on"+e,{get(){return this["_on"+e]},set(a){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),a&&this.addEventListener(e,this["_on"+e]=a)},enumerable:!0,configurable:!0})}function pl(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(Ea=n,n?"adapter.js logging disabled":"adapter.js logging enabled")}function gl(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(Pa=!n,"adapter.js deprecation warnings "+(n?"disabled":"enabled"))}function wa(){if(typeof window=="object"){if(Ea)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function Vi(n,e){Pa&&console.warn(n+" is deprecated, please use "+e+" instead.")}function vl(n){const e={browser:null,version:null};if(typeof n>"u"||!n.navigator||!n.navigator.userAgent)return e.browser="Not a browser.",e;const{navigator:t}=n;if(t.userAgentData&&t.userAgentData.brands){const i=t.userAgentData.brands.find(r=>r.brand==="Chromium");if(i)return{browser:"chrome",version:parseInt(i.version,10)}}if(t.mozGetUserMedia)e.browser="firefox",e.version=parseInt(mn(t.userAgent,/Firefox\/(\d+)\./,1));else if(t.webkitGetUserMedia||n.isSecureContext===!1&&n.webkitRTCPeerConnection)e.browser="chrome",e.version=parseInt(mn(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else if(n.RTCPeerConnection&&t.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=parseInt(mn(t.userAgent,/AppleWebKit\/(\d+)\./,1)),e.supportsUnifiedPlan=n.RTCRtpTransceiver&&"currentDirection"in n.RTCRtpTransceiver.prototype,e._safariVersion=mn(t.userAgent,/Version\/(\d+(\.?\d+))/,1);else return e.browser="Not a supported browser.",e;return e}function Ra(n){return Object.prototype.toString.call(n)==="[object Object]"}function _a(n){return Ra(n)?Object.keys(n).reduce(function(e,t){const i=Ra(n[t]),r=i?_a(n[t]):n[t],s=i&&!Object.keys(r).length;return r===void 0||s?e:Object.assign(e,{[t]:r})},{}):n}function qi(n,e,t){!e||t.has(e.id)||(t.set(e.id,e),Object.keys(e).forEach(i=>{i.endsWith("Id")?qi(n,n.get(e[i]),t):i.endsWith("Ids")&&e[i].forEach(r=>{qi(n,n.get(r),t)})}))}function Ia(n,e,t){const i=t?"outbound-rtp":"inbound-rtp",r=new Map;if(e===null)return r;const s=[];return n.forEach(a=>{a.type==="track"&&a.trackIdentifier===e.id&&s.push(a)}),s.forEach(a=>{n.forEach(o=>{o.type===i&&o.trackId===a.id&&qi(n,o,r)})}),r}const Da=wa;function Ma(n,e){const t=n&&n.navigator;if(!t.mediaDevices)return;const i=function(o){if(typeof o!="object"||o.mandatory||o.optional)return o;const c={};return Object.keys(o).forEach(d=>{if(d==="require"||d==="advanced"||d==="mediaSource")return;const u=typeof o[d]=="object"?o[d]:{ideal:o[d]};u.exact!==void 0&&typeof u.exact=="number"&&(u.min=u.max=u.exact);const l=function(h,m){return h?h+m.charAt(0).toUpperCase()+m.slice(1):m==="deviceId"?"sourceId":m};if(u.ideal!==void 0){c.optional=c.optional||[];let h={};typeof u.ideal=="number"?(h[l("min",d)]=u.ideal,c.optional.push(h),h={},h[l("max",d)]=u.ideal,c.optional.push(h)):(h[l("",d)]=u.ideal,c.optional.push(h))}u.exact!==void 0&&typeof u.exact!="number"?(c.mandatory=c.mandatory||{},c.mandatory[l("",d)]=u.exact):["min","max"].forEach(h=>{u[h]!==void 0&&(c.mandatory=c.mandatory||{},c.mandatory[l(h,d)]=u[h])})}),o.advanced&&(c.optional=(c.optional||[]).concat(o.advanced)),c},r=function(o,c){if(e.version>=61)return c(o);if(o=JSON.parse(JSON.stringify(o)),o&&typeof o.audio=="object"){const d=function(u,l,h){l in u&&!(h in u)&&(u[h]=u[l],delete u[l])};o=JSON.parse(JSON.stringify(o)),d(o.audio,"autoGainControl","googAutoGainControl"),d(o.audio,"noiseSuppression","googNoiseSuppression"),o.audio=i(o.audio)}if(o&&typeof o.video=="object"){let d=o.video.facingMode;d=d&&(typeof d=="object"?d:{ideal:d});const u=e.version<66;if(d&&(d.exact==="user"||d.exact==="environment"||d.ideal==="user"||d.ideal==="environment")&&!(t.mediaDevices.getSupportedConstraints&&t.mediaDevices.getSupportedConstraints().facingMode&&!u)){delete o.video.facingMode;let l;if(d.exact==="environment"||d.ideal==="environment"?l=["back","rear"]:(d.exact==="user"||d.ideal==="user")&&(l=["front"]),l)return t.mediaDevices.enumerateDevices().then(h=>{h=h.filter(v=>v.kind==="videoinput");let m=h.find(v=>l.some(p=>v.label.toLowerCase().includes(p)));return!m&&h.length&&l.includes("back")&&(m=h[h.length-1]),m&&(o.video.deviceId=d.exact?{exact:m.deviceId}:{ideal:m.deviceId}),o.video=i(o.video),Da("chrome: "+JSON.stringify(o)),c(o)})}o.video=i(o.video)}return Da("chrome: "+JSON.stringify(o)),c(o)},s=function(o){return e.version>=64?o:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[o.name]||o.name,message:o.message,constraint:o.constraint||o.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},a=function(o,c,d){r(o,u=>{t.webkitGetUserMedia(u,c,l=>{d&&d(s(l))})})};if(t.getUserMedia=a.bind(t),t.mediaDevices.getUserMedia){const o=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(c){return r(c,d=>o(d).then(u=>{if(d.audio&&!u.getAudioTracks().length||d.video&&!u.getVideoTracks().length)throw u.getTracks().forEach(l=>{l.stop()}),new DOMException("","NotFoundError");return u},u=>Promise.reject(s(u))))}}}function Oa(n){n.MediaStream=n.MediaStream||n.webkitMediaStream}function Aa(n){if(typeof n=="object"&&n.RTCPeerConnection&&!("ontrack"in n.RTCPeerConnection.prototype)){Object.defineProperty(n.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(t){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=t)},enumerable:!0,configurable:!0});const e=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=i=>{i.stream.addEventListener("addtrack",r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(o=>o.track&&o.track.id===r.track.id):s={track:r.track};const a=new Event("track");a.track=r.track,a.receiver=s,a.transceiver={receiver:s},a.streams=[i.stream],this.dispatchEvent(a)}),i.stream.getTracks().forEach(r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(o=>o.track&&o.track.id===r.id):s={track:r};const a=new Event("track");a.track=r,a.receiver=s,a.transceiver={receiver:s},a.streams=[i.stream],this.dispatchEvent(a)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else Dt(n,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function xa(n){if(typeof n=="object"&&n.RTCPeerConnection&&!("getSenders"in n.RTCPeerConnection.prototype)&&"createDTMFSender"in n.RTCPeerConnection.prototype){const e=function(r,s){return{track:s,get dtmf(){return this._dtmf===void 0&&(s.kind==="audio"?this._dtmf=r.createDTMFSender(s):this._dtmf=null),this._dtmf},_pc:r}};if(!n.RTCPeerConnection.prototype.getSenders){n.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const r=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(o,c){let d=r.apply(this,arguments);return d||(d=e(this,o),this._senders.push(d)),d};const s=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(o){s.apply(this,arguments);const c=this._senders.indexOf(o);c!==-1&&this._senders.splice(c,1)}}const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(s){this._senders=this._senders||[],t.apply(this,[s]),s.getTracks().forEach(a=>{this._senders.push(e(this,a))})};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(s){this._senders=this._senders||[],i.apply(this,[s]),s.getTracks().forEach(a=>{const o=this._senders.find(c=>c.track===a);o&&this._senders.splice(this._senders.indexOf(o),1)})}}else if(typeof n=="object"&&n.RTCPeerConnection&&"getSenders"in n.RTCPeerConnection.prototype&&"createDTMFSender"in n.RTCPeerConnection.prototype&&n.RTCRtpSender&&!("dtmf"in n.RTCRtpSender.prototype)){const e=n.RTCPeerConnection.prototype.getSenders;n.RTCPeerConnection.prototype.getSenders=function(){const i=e.apply(this,[]);return i.forEach(r=>r._pc=this),i},Object.defineProperty(n.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function La(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender&&n.RTCRtpReceiver))return;if(!("getStats"in n.RTCRtpSender.prototype)){const t=n.RTCPeerConnection.prototype.getSenders;t&&(n.RTCPeerConnection.prototype.getSenders=function(){const s=t.apply(this,[]);return s.forEach(a=>a._pc=this),s});const i=n.RTCPeerConnection.prototype.addTrack;i&&(n.RTCPeerConnection.prototype.addTrack=function(){const s=i.apply(this,arguments);return s._pc=this,s}),n.RTCRtpSender.prototype.getStats=function(){const s=this;return this._pc.getStats().then(a=>Ia(a,s.track,!0))}}if(!("getStats"in n.RTCRtpReceiver.prototype)){const t=n.RTCPeerConnection.prototype.getReceivers;t&&(n.RTCPeerConnection.prototype.getReceivers=function(){const r=t.apply(this,[]);return r.forEach(s=>s._pc=this),r}),Dt(n,"track",i=>(i.receiver._pc=i.srcElement,i)),n.RTCRtpReceiver.prototype.getStats=function(){const r=this;return this._pc.getStats().then(s=>Ia(s,r.track,!1))}}if(!("getStats"in n.RTCRtpSender.prototype&&"getStats"in n.RTCRtpReceiver.prototype))return;const e=n.RTCPeerConnection.prototype.getStats;n.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof n.MediaStreamTrack){const i=arguments[0];let r,s,a;return this.getSenders().forEach(o=>{o.track===i&&(r?a=!0:r=o)}),this.getReceivers().forEach(o=>(o.track===i&&(s?a=!0:s=o),o.track===i)),a||r&&s?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):r?r.getStats():s?s.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function Na(n){n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(a=>this._shimmedLocalStreams[a][0])};const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(a,o){if(!o)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const c=e.apply(this,arguments);return this._shimmedLocalStreams[o.id]?this._shimmedLocalStreams[o.id].indexOf(c)===-1&&this._shimmedLocalStreams[o.id].push(c):this._shimmedLocalStreams[o.id]=[o,c],c};const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(a){this._shimmedLocalStreams=this._shimmedLocalStreams||{},a.getTracks().forEach(d=>{if(this.getSenders().find(l=>l.track===d))throw new DOMException("Track already exists.","InvalidAccessError")});const o=this.getSenders();t.apply(this,arguments);const c=this.getSenders().filter(d=>o.indexOf(d)===-1);this._shimmedLocalStreams[a.id]=[a].concat(c)};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[a.id],i.apply(this,arguments)};const r=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},a&&Object.keys(this._shimmedLocalStreams).forEach(o=>{const c=this._shimmedLocalStreams[o].indexOf(a);c!==-1&&this._shimmedLocalStreams[o].splice(c,1),this._shimmedLocalStreams[o].length===1&&delete this._shimmedLocalStreams[o]}),r.apply(this,arguments)}}function Ua(n,e){if(!n.RTCPeerConnection)return;if(n.RTCPeerConnection.prototype.addTrack&&e.version>=65)return Na(n);const t=n.RTCPeerConnection.prototype.getLocalStreams;n.RTCPeerConnection.prototype.getLocalStreams=function(){const u=t.apply(this);return this._reverseStreams=this._reverseStreams||{},u.map(l=>this._reverseStreams[l.id])};const i=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(u){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},u.getTracks().forEach(l=>{if(this.getSenders().find(m=>m.track===l))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[u.id]){const l=new n.MediaStream(u.getTracks());this._streams[u.id]=l,this._reverseStreams[l.id]=u,u=l}i.apply(this,[u])};const r=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(u){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[u.id]||u]),delete this._reverseStreams[this._streams[u.id]?this._streams[u.id].id:u.id],delete this._streams[u.id]},n.RTCPeerConnection.prototype.addTrack=function(u,l){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const h=[].slice.call(arguments,1);if(h.length!==1||!h[0].getTracks().find(p=>p===u))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(p=>p.track===u))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const v=this._streams[l.id];if(v)v.addTrack(u),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const p=new n.MediaStream([u]);this._streams[l.id]=p,this._reverseStreams[p.id]=l,this.addStream(p)}return this.getSenders().find(p=>p.track===u)};function s(d,u){let l=u.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];l=l.replace(new RegExp(v.id,"g"),m.id)}),new RTCSessionDescription({type:u.type,sdp:l})}function a(d,u){let l=u.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];l=l.replace(new RegExp(m.id,"g"),v.id)}),new RTCSessionDescription({type:u.type,sdp:l})}["createOffer","createAnswer"].forEach(function(d){const u=n.RTCPeerConnection.prototype[d],l={[d](){const h=arguments;return arguments.length&&typeof arguments[0]=="function"?u.apply(this,[v=>{const p=s(this,v);h[0].apply(null,[p])},v=>{h[1]&&h[1].apply(null,v)},arguments[2]]):u.apply(this,arguments).then(v=>s(this,v))}};n.RTCPeerConnection.prototype[d]=l[d]});const o=n.RTCPeerConnection.prototype.setLocalDescription;n.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?o.apply(this,arguments):(arguments[0]=a(this,arguments[0]),o.apply(this,arguments))};const c=Object.getOwnPropertyDescriptor(n.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(n.RTCPeerConnection.prototype,"localDescription",{get(){const d=c.get.apply(this);return d.type===""?d:s(this,d)}}),n.RTCPeerConnection.prototype.removeTrack=function(u){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!u._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(u._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let h;Object.keys(this._streams).forEach(m=>{this._streams[m].getTracks().find(p=>u.track===p)&&(h=this._streams[m])}),h&&(h.getTracks().length===1?this.removeStream(this._reverseStreams[h.id]):h.removeTrack(u.track),this.dispatchEvent(new Event("negotiationneeded")))}}function Ki(n,e){!n.RTCPeerConnection&&n.webkitRTCPeerConnection&&(n.RTCPeerConnection=n.webkitRTCPeerConnection),n.RTCPeerConnection&&e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const i=n.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new(t==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),i.apply(this,arguments)}};n.RTCPeerConnection.prototype[t]=r[t]})}function Fa(n,e){Dt(n,"negotiationneeded",t=>{const i=t.target;if(!((e.version<72||i.getConfiguration&&i.getConfiguration().sdpSemantics==="plan-b")&&i.signalingState!=="stable"))return t})}var ja=Object.freeze({__proto__:null,fixNegotiationNeeded:Fa,shimAddTrackRemoveTrack:Ua,shimAddTrackRemoveTrackWithNative:Na,shimGetSendersWithDtmf:xa,shimGetUserMedia:Ma,shimMediaStream:Oa,shimOnTrack:Aa,shimPeerConnection:Ki,shimSenderReceiverGetStats:La});function Ba(n,e){const t=n&&n.navigator,i=n&&n.MediaStreamTrack;if(t.getUserMedia=function(r,s,a){Vi("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),t.mediaDevices.getUserMedia(r).then(s,a)},!(e.version>55&&"autoGainControl"in t.mediaDevices.getSupportedConstraints())){const r=function(a,o,c){o in a&&!(c in a)&&(a[c]=a[o],delete a[o])},s=t.mediaDevices.getUserMedia.bind(t.mediaDevices);if(t.mediaDevices.getUserMedia=function(a){return typeof a=="object"&&typeof a.audio=="object"&&(a=JSON.parse(JSON.stringify(a)),r(a.audio,"autoGainControl","mozAutoGainControl"),r(a.audio,"noiseSuppression","mozNoiseSuppression")),s(a)},i&&i.prototype.getSettings){const a=i.prototype.getSettings;i.prototype.getSettings=function(){const o=a.apply(this,arguments);return r(o,"mozAutoGainControl","autoGainControl"),r(o,"mozNoiseSuppression","noiseSuppression"),o}}if(i&&i.prototype.applyConstraints){const a=i.prototype.applyConstraints;i.prototype.applyConstraints=function(o){return this.kind==="audio"&&typeof o=="object"&&(o=JSON.parse(JSON.stringify(o)),r(o,"autoGainControl","mozAutoGainControl"),r(o,"noiseSuppression","mozNoiseSuppression")),a.apply(this,[o])}}}}function yl(n,e){n.navigator.mediaDevices&&"getDisplayMedia"in n.navigator.mediaDevices||n.navigator.mediaDevices&&(n.navigator.mediaDevices.getDisplayMedia=function(i){if(!(i&&i.video)){const r=new DOMException("getDisplayMedia without video constraints is undefined");return r.name="NotFoundError",r.code=8,Promise.reject(r)}return i.video===!0?i.video={mediaSource:e}:i.video.mediaSource=e,n.navigator.mediaDevices.getUserMedia(i)})}function Va(n){typeof n=="object"&&n.RTCTrackEvent&&"receiver"in n.RTCTrackEvent.prototype&&!("transceiver"in n.RTCTrackEvent.prototype)&&Object.defineProperty(n.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function zi(n,e){if(typeof n!="object"||!(n.RTCPeerConnection||n.mozRTCPeerConnection))return;!n.RTCPeerConnection&&n.mozRTCPeerConnection&&(n.RTCPeerConnection=n.mozRTCPeerConnection),e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(r){const s=n.RTCPeerConnection.prototype[r],a={[r](){return arguments[0]=new(r==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),s.apply(this,arguments)}};n.RTCPeerConnection.prototype[r]=a[r]});const t={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=n.RTCPeerConnection.prototype.getStats;n.RTCPeerConnection.prototype.getStats=function(){const[s,a,o]=arguments;return i.apply(this,[s||null]).then(c=>{if(e.version<53&&!a)try{c.forEach(d=>{d.type=t[d.type]||d.type})}catch(d){if(d.name!=="TypeError")throw d;c.forEach((u,l)=>{c.set(l,Object.assign({},u,{type:t[u.type]||u.type}))})}return c}).then(a,o)}}function qa(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender)||n.RTCRtpSender&&"getStats"in n.RTCRtpSender.prototype)return;const e=n.RTCPeerConnection.prototype.getSenders;e&&(n.RTCPeerConnection.prototype.getSenders=function(){const r=e.apply(this,[]);return r.forEach(s=>s._pc=this),r});const t=n.RTCPeerConnection.prototype.addTrack;t&&(n.RTCPeerConnection.prototype.addTrack=function(){const r=t.apply(this,arguments);return r._pc=this,r}),n.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Ka(n){if(!(typeof n=="object"&&n.RTCPeerConnection&&n.RTCRtpSender)||n.RTCRtpSender&&"getStats"in n.RTCRtpReceiver.prototype)return;const e=n.RTCPeerConnection.prototype.getReceivers;e&&(n.RTCPeerConnection.prototype.getReceivers=function(){const i=e.apply(this,[]);return i.forEach(r=>r._pc=this),i}),Dt(n,"track",t=>(t.receiver._pc=t.srcElement,t)),n.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function za(n){!n.RTCPeerConnection||"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){Vi("removeStream","removeTrack"),this.getSenders().forEach(i=>{i.track&&t.getTracks().includes(i.track)&&this.removeTrack(i)})})}function Wa(n){n.DataChannel&&!n.RTCDataChannel&&(n.RTCDataChannel=n.DataChannel)}function Ga(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.addTransceiver;e&&(n.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let i=arguments[1]&&arguments[1].sendEncodings;i===void 0&&(i=[]),i=[...i];const r=i.length>0;r&&i.forEach(a=>{if("rid"in a&&!/^[a-z0-9]{0,16}$/i.test(a.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in a&&!(parseFloat(a.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in a&&!(parseFloat(a.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const s=e.apply(this,arguments);if(r){const{sender:a}=s,o=a.getParameters();(!("encodings"in o)||o.encodings.length===1&&Object.keys(o.encodings[0]).length===0)&&(o.encodings=i,a.sendEncodings=i,this.setParametersPromises.push(a.setParameters(o).then(()=>{delete a.sendEncodings}).catch(()=>{delete a.sendEncodings})))}return s})}function Ha(n){if(!(typeof n=="object"&&n.RTCRtpSender))return;const e=n.RTCRtpSender.prototype.getParameters;e&&(n.RTCRtpSender.prototype.getParameters=function(){const i=e.apply(this,arguments);return"encodings"in i||(i.encodings=[].concat(this.sendEncodings||[{}])),i})}function Ja(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.createOffer;n.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}function $a(n){if(!(typeof n=="object"&&n.RTCPeerConnection))return;const e=n.RTCPeerConnection.prototype.createAnswer;n.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}var Qa=Object.freeze({__proto__:null,shimAddTransceiver:Ga,shimCreateAnswer:$a,shimCreateOffer:Ja,shimGetDisplayMedia:yl,shimGetParameters:Ha,shimGetUserMedia:Ba,shimOnTrack:Va,shimPeerConnection:zi,shimRTCDataChannel:Wa,shimReceiverGetStats:Ka,shimRemoveStream:za,shimSenderGetStats:qa});function Ya(n){if(!(typeof n!="object"||!n.RTCPeerConnection)){if("getLocalStreams"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in n.RTCPeerConnection.prototype)){const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addStream=function(i){this._localStreams||(this._localStreams=[]),this._localStreams.includes(i)||this._localStreams.push(i),i.getAudioTracks().forEach(r=>e.call(this,r,i)),i.getVideoTracks().forEach(r=>e.call(this,r,i))},n.RTCPeerConnection.prototype.addTrack=function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),a=1;a<r;a++)s[a-1]=arguments[a];return s&&s.forEach(o=>{this._localStreams?this._localStreams.includes(o)||this._localStreams.push(o):this._localStreams=[o]}),e.apply(this,arguments)}}"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){this._localStreams||(this._localStreams=[]);const i=this._localStreams.indexOf(t);if(i===-1)return;this._localStreams.splice(i,1);const r=t.getTracks();this.getSenders().forEach(s=>{r.includes(s.track)&&this.removeTrack(s)})})}}function Xa(n){if(!(typeof n!="object"||!n.RTCPeerConnection)&&("getRemoteStreams"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in n.RTCPeerConnection.prototype))){Object.defineProperty(n.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(t){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=t),this.addEventListener("track",this._onaddstreampoly=i=>{i.streams.forEach(r=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(r))return;this._remoteStreams.push(r);const s=new Event("addstream");s.stream=r,this.dispatchEvent(s)})})}});const e=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(){const i=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(r){r.streams.forEach(s=>{if(i._remoteStreams||(i._remoteStreams=[]),i._remoteStreams.indexOf(s)>=0)return;i._remoteStreams.push(s);const a=new Event("addstream");a.stream=s,i.dispatchEvent(a)})}),e.apply(i,arguments)}}}function Za(n){if(typeof n!="object"||!n.RTCPeerConnection)return;const e=n.RTCPeerConnection.prototype,t=e.createOffer,i=e.createAnswer,r=e.setLocalDescription,s=e.setRemoteDescription,a=e.addIceCandidate;e.createOffer=function(d,u){const l=arguments.length>=2?arguments[2]:arguments[0],h=t.apply(this,[l]);return u?(h.then(d,u),Promise.resolve()):h},e.createAnswer=function(d,u){const l=arguments.length>=2?arguments[2]:arguments[0],h=i.apply(this,[l]);return u?(h.then(d,u),Promise.resolve()):h};let o=function(c,d,u){const l=r.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l};e.setLocalDescription=o,o=function(c,d,u){const l=s.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l},e.setRemoteDescription=o,o=function(c,d,u){const l=a.apply(this,[c]);return u?(l.then(d,u),Promise.resolve()):l},e.addIceCandidate=o}function eo(n){const e=n&&n.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){const t=e.mediaDevices,i=t.getUserMedia.bind(t);e.mediaDevices.getUserMedia=r=>i(to(r))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=(function(i,r,s){e.mediaDevices.getUserMedia(i).then(r,s)}).bind(e))}function to(n){return n&&n.video!==void 0?Object.assign({},n,{video:_a(n.video)}):n}function no(n){if(!n.RTCPeerConnection)return;const e=n.RTCPeerConnection;n.RTCPeerConnection=function(i,r){if(i&&i.iceServers){const s=[];for(let a=0;a<i.iceServers.length;a++){let o=i.iceServers[a];o.urls===void 0&&o.url?(Vi("RTCIceServer.url","RTCIceServer.urls"),o=JSON.parse(JSON.stringify(o)),o.urls=o.url,delete o.url,s.push(o)):s.push(i.iceServers[a])}i.iceServers=s}return new e(i,r)},n.RTCPeerConnection.prototype=e.prototype,"generateCertificate"in e&&Object.defineProperty(n.RTCPeerConnection,"generateCertificate",{get(){return e.generateCertificate}})}function io(n){typeof n=="object"&&n.RTCTrackEvent&&"receiver"in n.RTCTrackEvent.prototype&&!("transceiver"in n.RTCTrackEvent.prototype)&&Object.defineProperty(n.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ro(n){const e=n.RTCPeerConnection.prototype.createOffer;n.RTCPeerConnection.prototype.createOffer=function(i){if(i){typeof i.offerToReceiveAudio<"u"&&(i.offerToReceiveAudio=!!i.offerToReceiveAudio);const r=this.getTransceivers().find(a=>a.receiver.track.kind==="audio");i.offerToReceiveAudio===!1&&r?r.direction==="sendrecv"?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":r.direction==="recvonly"&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):i.offerToReceiveAudio===!0&&!r&&this.addTransceiver("audio",{direction:"recvonly"}),typeof i.offerToReceiveVideo<"u"&&(i.offerToReceiveVideo=!!i.offerToReceiveVideo);const s=this.getTransceivers().find(a=>a.receiver.track.kind==="video");i.offerToReceiveVideo===!1&&s?s.direction==="sendrecv"?s.setDirection?s.setDirection("sendonly"):s.direction="sendonly":s.direction==="recvonly"&&(s.setDirection?s.setDirection("inactive"):s.direction="inactive"):i.offerToReceiveVideo===!0&&!s&&this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function so(n){typeof n!="object"||n.AudioContext||(n.AudioContext=n.webkitAudioContext)}var ao=Object.freeze({__proto__:null,shimAudioContext:so,shimCallbacksAPI:Za,shimConstraints:to,shimCreateOfferLegacy:ro,shimGetUserMedia:eo,shimLocalStreamsAPI:Ya,shimRTCIceServerUrls:no,shimRemoteStreamsAPI:Xa,shimTrackEventTransceiver:io}),Wi={exports:{}},oo;function bl(){return oo||(oo=1,function(n){const e={};e.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},e.localCName=e.generateIdentifier(),e.splitLines=function(t){return t.trim().split(`
|
|
3
3
|
`).map(i=>i.trim())},e.splitSections=function(t){return t.split(`
|
|
4
4
|
m=`).map((r,s)=>(s>0?"m="+r:r).trim()+`\r
|
|
5
5
|
`)},e.getDescription=function(t){const i=e.splitSections(t);return i&&i[0]},e.getMediaSections=function(t){const i=e.splitSections(t);return i.shift(),i},e.matchPrefix=function(t,i){return e.splitLines(t).filter(r=>r.indexOf(i)===0)},e.parseCandidate=function(t){let i;t.indexOf("a=candidate:")===0?i=t.substring(12).split(" "):i=t.substring(10).split(" ");const r={foundation:i[0],component:{1:"rtp",2:"rtcp"}[i[1]]||i[1],protocol:i[2].toLowerCase(),priority:parseInt(i[3],10),ip:i[4],address:i[4],port:parseInt(i[5],10),type:i[7]};for(let s=8;s<i.length;s+=2)switch(i[s]){case"raddr":r.relatedAddress=i[s+1];break;case"rport":r.relatedPort=parseInt(i[s+1],10);break;case"tcptype":r.tcpType=i[s+1];break;case"ufrag":r.ufrag=i[s+1],r.usernameFragment=i[s+1];break;default:r[i[s]]===void 0&&(r[i[s]]=i[s+1]);break}return r},e.writeCandidate=function(t){const i=[];i.push(t.foundation);const r=t.component;r==="rtp"?i.push(1):r==="rtcp"?i.push(2):i.push(r),i.push(t.protocol.toUpperCase()),i.push(t.priority),i.push(t.address||t.ip),i.push(t.port);const s=t.type;return i.push("typ"),i.push(s),s!=="host"&&t.relatedAddress&&t.relatedPort&&(i.push("raddr"),i.push(t.relatedAddress),i.push("rport"),i.push(t.relatedPort)),t.tcpType&&t.protocol.toLowerCase()==="tcp"&&(i.push("tcptype"),i.push(t.tcpType)),(t.usernameFragment||t.ufrag)&&(i.push("ufrag"),i.push(t.usernameFragment||t.ufrag)),"candidate:"+i.join(" ")},e.parseIceOptions=function(t){return t.substring(14).split(" ")},e.parseRtpMap=function(t){let i=t.substring(9).split(" ");const r={payloadType:parseInt(i.shift(),10)};return i=i[0].split("/"),r.name=i[0],r.clockRate=parseInt(i[1],10),r.channels=i.length===3?parseInt(i[2],10):1,r.numChannels=r.channels,r},e.writeRtpMap=function(t){let i=t.payloadType;t.preferredPayloadType!==void 0&&(i=t.preferredPayloadType);const r=t.channels||t.numChannels||1;return"a=rtpmap:"+i+" "+t.name+"/"+t.clockRate+(r!==1?"/"+r:"")+`\r
|
|
@@ -30,9 +30,9 @@ a=ice-pwd:`+t.password+`\r
|
|
|
30
30
|
o=`+(r||"thisisadapterortc")+" "+s+" "+a+` IN IP4 127.0.0.1\r
|
|
31
31
|
s=-\r
|
|
32
32
|
t=0 0\r
|
|
33
|
-
`},e.getDirection=function(t,i){const r=e.splitLines(t);for(let s=0;s<r.length;s++)switch(r[s]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[s].substring(2)}return i?e.getDirection(i):"sendrecv"},e.getKind=function(t){return e.splitLines(t)[0].split(" ")[0].substring(2)},e.isRejected=function(t){return t.split(" ",2)[1]==="0"},e.parseMLine=function(t){const r=e.splitLines(t)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},e.parseOLine=function(t){const r=e.matchPrefix(t,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},e.isValidSDP=function(t){if(typeof t!="string"||t.length===0)return!1;const i=e.splitLines(t);for(let r=0;r<i.length;r++)if(i[r].length<2||i[r].charAt(1)!=="=")return!1;return!0},n.exports=e}(
|
|
33
|
+
`},e.getDirection=function(t,i){const r=e.splitLines(t);for(let s=0;s<r.length;s++)switch(r[s]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[s].substring(2)}return i?e.getDirection(i):"sendrecv"},e.getKind=function(t){return e.splitLines(t)[0].split(" ")[0].substring(2)},e.isRejected=function(t){return t.split(" ",2)[1]==="0"},e.parseMLine=function(t){const r=e.splitLines(t)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},e.parseOLine=function(t){const r=e.matchPrefix(t,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},e.isValidSDP=function(t){if(typeof t!="string"||t.length===0)return!1;const i=e.splitLines(t);for(let r=0;r<i.length;r++)if(i[r].length<2||i[r].charAt(1)!=="=")return!1;return!0},n.exports=e}(Wi)),Wi.exports}var co=bl(),Gt=al(co),kl=Ad({__proto__:null,default:Gt},[co]);function zn(n){if(!n.RTCIceCandidate||n.RTCIceCandidate&&"foundation"in n.RTCIceCandidate.prototype)return;const e=n.RTCIceCandidate;n.RTCIceCandidate=function(i){if(typeof i=="object"&&i.candidate&&i.candidate.indexOf("a=")===0&&(i=JSON.parse(JSON.stringify(i)),i.candidate=i.candidate.substring(2)),i.candidate&&i.candidate.length){const r=new e(i),s=Gt.parseCandidate(i.candidate);for(const a in s)a in r||Object.defineProperty(r,a,{value:s[a]});return r.toJSON=function(){return{candidate:r.candidate,sdpMid:r.sdpMid,sdpMLineIndex:r.sdpMLineIndex,usernameFragment:r.usernameFragment}},r}return new e(i)},n.RTCIceCandidate.prototype=e.prototype,Dt(n,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new n.RTCIceCandidate(t.candidate),writable:"false"}),t))}function Gi(n){!n.RTCIceCandidate||n.RTCIceCandidate&&"relayProtocol"in n.RTCIceCandidate.prototype||Dt(n,"icecandidate",e=>{if(e.candidate){const t=Gt.parseCandidate(e.candidate.candidate);t.type==="relay"&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[t.priority>>24])}return e})}function Wn(n,e){if(!n.RTCPeerConnection)return;"sctp"in n.RTCPeerConnection.prototype||Object.defineProperty(n.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});const t=function(o){if(!o||!o.sdp)return!1;const c=Gt.splitSections(o.sdp);return c.shift(),c.some(d=>{const u=Gt.parseMLine(d);return u&&u.kind==="application"&&u.protocol.indexOf("SCTP")!==-1})},i=function(o){const c=o.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(c===null||c.length<2)return-1;const d=parseInt(c[1],10);return d!==d?-1:d},r=function(o){let c=65536;return e.browser==="firefox"&&(e.version<57?o===-1?c=16384:c=2147483637:e.version<60?c=e.version===57?65535:65536:c=2147483637),c},s=function(o,c){let d=65536;e.browser==="firefox"&&e.version===57&&(d=65535);const u=Gt.matchPrefix(o.sdp,"a=max-message-size:");return u.length>0?d=parseInt(u[0].substring(19),10):e.browser==="firefox"&&c!==-1&&(d=2147483637),d},a=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,e.browser==="chrome"&&e.version>=76){const{sdpSemantics:c}=this.getConfiguration();c==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(t(arguments[0])){const c=i(arguments[0]),d=r(c),u=s(arguments[0],c);let l;d===0&&u===0?l=Number.POSITIVE_INFINITY:d===0||u===0?l=Math.max(d,u):l=Math.min(d,u);const h={};Object.defineProperty(h,"maxMessageSize",{get(){return l}}),this._sctp=h}return a.apply(this,arguments)}}function Gn(n){if(!(n.RTCPeerConnection&&"createDataChannel"in n.RTCPeerConnection.prototype))return;function e(i,r){const s=i.send;i.send=function(){const o=arguments[0],c=o.length||o.size||o.byteLength;if(i.readyState==="open"&&r.sctp&&c>r.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+r.sctp.maxMessageSize+" bytes)");return s.apply(i,arguments)}}const t=n.RTCPeerConnection.prototype.createDataChannel;n.RTCPeerConnection.prototype.createDataChannel=function(){const r=t.apply(this,arguments);return e(r,this),r},Dt(n,"datachannel",i=>(e(i.channel,i.target),i))}function Hi(n){if(!n.RTCPeerConnection||"connectionState"in n.RTCPeerConnection.prototype)return;const e=n.RTCPeerConnection.prototype;Object.defineProperty(e,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(e,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(t){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),t&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=t)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(t=>{const i=e[t];e[t]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=r=>{const s=r.target;if(s._lastConnectionState!==s.connectionState){s._lastConnectionState=s.connectionState;const a=new Event("connectionstatechange",r);s.dispatchEvent(a)}return r},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),i.apply(this,arguments)}})}function Ji(n,e){if(!n.RTCPeerConnection||e.browser==="chrome"&&e.version>=71||e.browser==="safari"&&e._safariVersion>=13.1)return;const t=n.RTCPeerConnection.prototype.setRemoteDescription;n.RTCPeerConnection.prototype.setRemoteDescription=function(r){if(r&&r.sdp&&r.sdp.indexOf(`
|
|
34
34
|
a=extmap-allow-mixed`)!==-1){const s=r.sdp.split(`
|
|
35
35
|
`).filter(a=>a.trim()!=="a=extmap-allow-mixed").join(`
|
|
36
|
-
`);n.RTCSessionDescription&&r instanceof n.RTCSessionDescription?arguments[0]=new n.RTCSessionDescription({type:r.type,sdp:s}):r.sdp=s}return t.apply(this,arguments)}}function Hn(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 Jn(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 r=arguments[0]||{};if(typeof r!="object"||r.type&&r.sdp)return t.apply(this,arguments);if(r={type:r.type,sdp:r.sdp},!r.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":r.type="offer";break;default:r.type="answer";break}return r.sdp||r.type!=="offer"&&r.type!=="answer"?t.apply(this,[r]):(r.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(a=>t.apply(this,[a]))})}var kl=Object.freeze({__proto__:null,removeExtmapAllowMixed:$i,shimAddIceCandidateNullOrEmpty:Hn,shimConnectionState:Ji,shimMaxMessageSize:Wn,shimParameterlessSetLocalDescription:Jn,shimRTCIceCandidate:zn,shimRTCIceCandidateRelayProtocol:Hi,shimSendThrowTypeError:Gn});function Tl(){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=Ra,i=gl(n),r={browserDetails:i,commonShim:kl,extractVersion:mn,disableLog:ml,disableWarnings:pl,sdp:bl};switch(i.browser){case"chrome":if(!Ba||!zi||!e.shimChrome)return t("Chrome shim is not included in this adapter release."),r;if(i.version===null)return t("Chrome shim can not determine version, not shimming."),r;t("adapter.js shimming chrome."),r.browserShim=Ba,Hn(n,i),Jn(n),Oa(n,i),Aa(n),zi(n,i),xa(n),Fa(n,i),La(n),Na(n),ja(n,i),zn(n),Hi(n),Ji(n),Wn(n,i),Gn(n),$i(n,i);break;case"firefox":if(!Ya||!Wi||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),r;t("adapter.js shimming firefox."),r.browserShim=Ya,Hn(n,i),Jn(n),Va(n,i),Wi(n,i),qa(n),Wa(n),Ka(n),za(n),Ga(n),Ha(n),Ja(n),$a(n),Qa(n),zn(n),Ji(n),Wn(n,i),Gn(n);break;case"safari":if(!oo||!e.shimSafari)return t("Safari shim is not included in this adapter release."),r;t("adapter.js shimming safari."),r.browserShim=oo,Hn(n,i),Jn(n),io(n),so(n),eo(n),Xa(n),Za(n),ro(n),to(n),ao(n),zn(n),Hi(n),Wn(n,i),Gn(n),$i(n,i);break;default:t("Unsupported browser!");break}return r}Tl({window:typeof window>"u"?void 0:window});const lo="AES-GCM",Sl=10,pn="lk_e2ee",Cl={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:Sl,keyringSize:16};var lt;(function(n){n.SetKey="setKey",n.RatchetRequest="ratchetRequest",n.KeyRatcheted="keyRatcheted"})(lt||(lt={}));var Qi;(function(n){n.KeyRatcheted="keyRatcheted"})(Qi||(Qi={}));var ht;(function(n){n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError"})(ht||(ht={}));var Yi;(function(n){n.Error="cryptorError"})(Yi||(Yi={}));function ho(){return fo()||$n()}function $n(){return typeof window.RTCRtpScriptTransform<"u"}function fo(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}function El(n){return"type"in n}function Pl(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{name:lo},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"encrypt";return function*(){return crypto.subtle.importKey("raw",e,t,!1,i==="derive"?["deriveBits","deriveKey"]:["encrypt","decrypt"])}()})}function mo(n){return f(this,void 0,void 0,function*(){let e=new TextEncoder;return yield crypto.subtle.importKey("raw",e.encode(n),{name:"PBKDF2"},!1,["deriveBits","deriveKey"])})}function po(n){return f(this,void 0,void 0,function*(){return yield crypto.subtle.importKey("raw",n,"HKDF",!1,["deriveBits","deriveKey"])})}function go(n,e){const i=new TextEncoder().encode(e);switch(n){case"HKDF":return{name:"HKDF",salt:i,hash:"SHA-256",info:new ArrayBuffer(128)};case"PBKDF2":return{name:"PBKDF2",salt:i,hash:"SHA-256",iterations:1e5};default:throw new Error("algorithm ".concat(n," is currently unsupported"))}}function wl(n,e){return f(this,void 0,void 0,function*(){const t=go(n.algorithm.name,e),i=yield crypto.subtle.deriveKey(t,n,{name:lo,length:128},!1,["encrypt","decrypt"]);return{material:n,encryptionKey:i}})}function Rl(){return window.crypto.getRandomValues(new Uint8Array(32))}function _l(n,e){return f(this,void 0,void 0,function*(){const t=go(n.algorithm.name,e);return crypto.subtle.deriveBits(t,n,256)})}function Il(n){for(var e=0;e<n.length-3;e++)if(n[e]==0&&n[e+1]==0&&n[e+2]==3)return!0;return!1}function Dl(n){const e=[];for(var t=n.length,i=0;i<n.length;)t-i>=3&&!n[i]&&!n[i+1]&&n[i+2]==3?(e.push(n[i++]),e.push(n[i++]),i++):e.push(n[i++]);return new Uint8Array(e)}const Ml=2,vo=3;function Ol(n){const e=[];for(var t=0,i=0;i<n.length;++i){var r=n[i];r<=vo&&t>=Ml&&(e.push(vo),t=0),e.push(r),r==0?++t:t=0}return new Uint8Array(e)}class yo extends nt.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(t,i,r)=>{q.debug("key ratcheted event received",{ratchetResult:t,participantId:i,keyIndex:r})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},Cl),e),this.on(lt.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(e,t,i){const r={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),r),this.emit(lt.SetKey,r)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,t){this.emit(lt.RatchetRequest,e,t)}}class Al extends yo{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const t=Object.assign(Object.assign({},e),{sharedKey:!0,ratchetWindowSize:0,failureTolerance:-1});super(t)}setKey(e){return f(this,void 0,void 0,function*(){const t=typeof e=="string"?yield mo(e):yield po(e);this.onSetEncryptionKey(t)})}}class Be extends Error{constructor(e,t){super(t||"an error has occured"),this.name="LiveKitError",this.code=e}}var H;(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"})(H||(H={}));class ee extends Be{constructor(e,t,i,r){super(1,e),this.name="ConnectionError",this.status=i,this.reason=t,this.context=r,this.reasonName=H[t]}}class gn extends Be{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class Je extends Be{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class bo extends Be{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class fe extends Be{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Qn extends Be{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class xl extends Be{constructor(e){super(14,e??"unable to publish data"),this.name="PublishDataError"}}class Xi extends Be{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class Zi extends Be{constructor(e,t){super(15,e),this.reason=t,this.reasonName=typeof t=="string"?t:Vi[t]}}var Ve;(function(n){n[n.AlreadyOpened=0]="AlreadyOpened",n[n.AbnormalEnd=1]="AbnormalEnd",n[n.DecodeFailed=2]="DecodeFailed",n[n.LengthExceeded=3]="LengthExceeded",n[n.Incomplete=4]="Incomplete",n[n.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered"})(Ve||(Ve={}));class ft extends Be{constructor(e,t){super(16,e),this.name="DataStreamError",this.reason=t,this.reasonName=Ve[t]}}var vn;(function(n){n.PermissionDenied="PermissionDenied",n.NotFound="NotFound",n.DeviceInUse="DeviceInUse",n.Other="Other"})(vn||(vn={})),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}(vn||(vn={}));var Yn;(function(n){n[n.InvalidKey=0]="InvalidKey",n[n.MissingKey=1]="MissingKey",n[n.InternalError=2]="InternalError"})(Yn||(Yn={}));class Ll extends Be{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Yn.InternalError,i=arguments.length>2?arguments[2]:void 0;super(40,e),this.reason=t,this.participantIdentity=i}}var _;(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"})(_||(_={}));var M;(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.LocalTrackCpuConstrained="localTrackCpuConstrained",n.LocalSenderCreated="localSenderCreated",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.TrackCpuConstrained="trackCpuConstrained",n.MediaDevicesError="mediaDevicesError",n.AudioStreamAcquired="audioStreamAcquired",n.ParticipantPermissionsChanged="participantPermissionsChanged",n.PCTrackAdded="pcTrackAdded",n.AttributesChanged="attributesChanged",n.LocalTrackSubscribed="localTrackSubscribed",n.ChatMessage="chatMessage",n.Active="active"})(M||(M={}));var O;(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"})(O||(O={}));var I;(function(n){n.Message="message",n.Muted="muted",n.Unmuted="unmuted",n.Restarted="restarted",n.Ended="ended",n.Subscribed="subscribed",n.Unsubscribed="unsubscribed",n.CpuConstrained="cpuConstrained",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"})(I||(I={}));function Nl(n){return typeof n>"u"?n:typeof structuredClone=="function"?typeof n=="object"&&n!==null?structuredClone(Object.assign({},n)):structuredClone(n):JSON.parse(JSON.stringify(n))}const Ul=/version\/(\d+(\.?_?\d+)+)/i;let er;function Me(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof n>"u"&&typeof navigator>"u")return;const t=(n??navigator.userAgent).toLowerCase();if(er===void 0||e){const i=Fl.find(r=>{let{test:s}=r;return s.test(t)});er=i==null?void 0:i.describe(t)}return er}const Fl=[{test:/firefox|iceweasel|fxios/i,describe(n){return{name:"Firefox",version:Xn(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:tr(n)}}},{test:/chrom|crios|crmo/i,describe(n){return{name:"Chrome",version:Xn(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("crios")?"iOS":void 0,osVersion:tr(n)}}},{test:/safari|applewebkit/i,describe(n){return{name:"Safari",version:Xn(Ul,n),os:n.includes("mobile/")?"iOS":"macOS",osVersion:tr(n)}}}];function Xn(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 tr(n){return n.includes("mac os")?Xn(/\(.+?(\d+_\d+(:?_\d+)?)/,n,1).replace(/_/g,"."):void 0}var jl="2.15.6";const ko=jl,To=16;class ve{}ve.setTimeout=function(){return setTimeout(...arguments)},ve.setInterval=function(){return setInterval(...arguments)},ve.clearTimeout=function(){return clearTimeout(...arguments)},ve.clearInterval=function(){return clearInterval(...arguments)};const Bl=5e3,yn=[];var Oe;(function(n){n[n.LOW=0]="LOW",n[n.MEDIUM=1]="MEDIUM",n[n.HIGH=2]="HIGH"})(Oe||(Oe={}));class C extends nt.EventEmitter{get streamState(){return this._streamState}setStreamState(e){this._streamState=e}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var r;super(),this.attachedElements=[],this.isMuted=!1,this._streamState=C.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=q,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),Bl):this.handleAppVisibilityChanged()},this.log=tt((r=i.loggerName)!==null&&r!==void 0?r:je.Track),this.loggerContextCb=i.loggerContextCb,this.setMaxListeners(100),this.kind=t,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=C.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),K(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let t="audio";this.kind===C.Kind.Video&&(t="video"),this.attachedElements.length===0&&this.kind===C.Kind.Video&&this.addAppVisibilityListener(),e||(t==="audio"&&(yn.forEach(s=>{s.parentElement===null&&!e&&(e=s)}),e&&yn.splice(yn.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),Ot(this.mediaStreamTrack,e);const i=e.srcObject.getTracks(),r=i.some(s=>s.kind==="audio");return e.play().then(()=>{this.emit(r?I.AudioPlaybackStarted:I.VideoPlaybackStarted)}).catch(s=>{s.name==="NotAllowedError"?this.emit(r?I.AudioPlaybackFailed:I.VideoPlaybackFailed,s):s.name==="AbortError"?q.debug("".concat(r?"audio":"video"," playback aborted, likely due to new play request")):q.warn("could not playback ".concat(r?"audio":"video"),s),r&&e&&i.some(a=>a.kind==="video")&&s.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(I.ElementAttached,e),e}detach(e){try{if(e){At(this.mediaStreamTrack,e);const i=this.attachedElements.indexOf(e);return i>=0&&(this.attachedElements.splice(i,1),this.recycleElement(e),this.emit(I.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(i=>{At(this.mediaStreamTrack,i),t.push(i),this.recycleElement(i),this.emit(I.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=tt(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),yn.forEach(i=>{i.parentElement||(t=!1)}),t&&yn.push(e)}}handleAppVisibilityChanged(){return f(this,void 0,void 0,function*(){this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===C.Kind.Video&&setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){xe()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){xe()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Ot(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(r=>{t.removeTrack(r)}),t.addTrack(n)),(!Lt()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=t.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==t&&(e.srcObject=t,(Lt()||xt())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=t,e.play().catch(()=>{})},0))}function At(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(d){d.Audio="audio",d.Video="video",d.Unknown="unknown"})(e=n.Kind||(n.Kind={}));let t;(function(d){d.Camera="camera",d.Microphone="microphone",d.ScreenShare="screen_share",d.ScreenShareAudio="screen_share_audio",d.Unknown="unknown"})(t=n.Source||(n.Source={}));let i;(function(d){d.Active="active",d.Paused="paused",d.Unknown="unknown"})(i=n.StreamState||(n.StreamState={}));function r(d){switch(d){case e.Audio:return Ue.AUDIO;case e.Video:return Ue.VIDEO;default:return Ue.DATA}}n.kindToProto=r;function s(d){switch(d){case Ue.AUDIO:return e.Audio;case Ue.VIDEO:return e.Video;default:return e.Unknown}}n.kindFromProto=s;function a(d){switch(d){case t.Camera:return he.CAMERA;case t.Microphone:return he.MICROPHONE;case t.ScreenShare:return he.SCREEN_SHARE;case t.ScreenShareAudio:return he.SCREEN_SHARE_AUDIO;default:return he.UNKNOWN}}n.sourceToProto=a;function o(d){switch(d){case he.CAMERA:return t.Camera;case he.MICROPHONE:return t.Microphone;case he.SCREEN_SHARE:return t.ScreenShare;case he.SCREEN_SHARE_AUDIO:return t.ScreenShareAudio;default:return t.Unknown}}n.sourceFromProto=o;function c(d){switch(d){case xi.ACTIVE:return i.Active;case xi.PAUSED:return i.Paused;default:return i.Unknown}}n.streamStateFromProto=c})(C||(C={}));class Z{constructor(e,t,i,r,s){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:r,priority:s};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 Vl=["vp8","h264"],So=["vp8","h264","vp9","av1","h265"];function Co(n){return!!Vl.find(e=>e===n)}var nr;(function(n){n[n.PREFER_REGRESSION=0]="PREFER_REGRESSION",n[n.SIMULCAST=1]="SIMULCAST",n[n.REGRESSION=2]="REGRESSION"})(nr||(nr={}));var Zn;(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}})(Zn||(Zn={}));const Ht={h90:new Z(160,90,9e4,20),h180:new Z(320,180,16e4,20),h216:new Z(384,216,18e4,20),h360:new Z(640,360,45e4,20),h540:new Z(960,540,8e5,25),h720:new Z(1280,720,17e5,30),h1080:new Z(1920,1080,3e6,30),h1440:new Z(2560,1440,5e6,30),h2160:new Z(3840,2160,8e6,30)},ei={h120:new Z(160,120,7e4,20),h180:new Z(240,180,125e3,20),h240:new Z(320,240,14e4,20),h360:new Z(480,360,33e4,20),h480:new Z(640,480,5e5,20),h540:new Z(720,540,6e5,25),h720:new Z(960,720,13e5,30),h1080:new Z(1440,1080,23e5,30),h1440:new Z(1920,1440,38e5,30)},bn={h360fps3:new Z(640,360,2e5,3,"medium"),h360fps15:new Z(640,360,4e5,15,"medium"),h720fps5:new Z(1280,720,8e5,5,"medium"),h720fps15:new Z(1280,720,15e5,15,"medium"),h720fps30:new Z(1280,720,2e6,30,"medium"),h1080fps15:new Z(1920,1080,25e5,15,"medium"),h1080fps30:new Z(1920,1080,5e6,30,"medium"),original:new Z(0,0,7e6,30,"medium")},ql="|",Eo="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function Kl(n){const e=n.split(ql);return e.length>1?[e[0],n.substr(e[0].length+1)]:[n,""]}function Ae(n){return f(this,void 0,void 0,function*(){return new Promise(e=>ve.setTimeout(e,n))})}function ti(){return"addTransceiver"in RTCPeerConnection.prototype}function ir(){return"addTrack"in RTCPeerConnection.prototype}function zl(){return typeof ResizeObserver!==void 0&&typeof IntersectionObserver!==void 0}function Wl(){return ti()}function Po(){if(!("getCapabilities"in RTCRtpSender)||Lt()||xt())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 wo(){if(!("getCapabilities"in RTCRtpSender)||xt())return!1;if(Lt()){const t=Me();if(t!=null&&t.version&&$e(t.version,"16")<0||(t==null?void 0:t.os)==="iOS"&&(t!=null&&t.osVersion)&&$e(t.osVersion,"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 it(n){return n==="av1"||n==="vp9"}function rr(n){return!document||kn()?!1:(n||(n=document.createElement("audio")),"setSinkId"in n)}function Ro(){return typeof RTCPeerConnection>"u"?!1:ti()||ir()}function xt(){var n;return((n=Me())===null||n===void 0?void 0:n.name)==="Firefox"}function Lt(){var n;return((n=Me())===null||n===void 0?void 0:n.name)==="Safari"}function kn(){const n=Me();return(n==null?void 0:n.name)==="Safari"||(n==null?void 0:n.os)==="iOS"}function _o(){const n=Me();return(n==null?void 0:n.name)==="Safari"&&n.version.startsWith("17.")||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&$e(n.osVersion,"17")>=0}function Gl(n){return n||(n=Me()),(n==null?void 0:n.name)==="Safari"&&$e(n.version,"18.3")>0||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&$e(n.osVersion,"18.3")>0}function Io(){var n,e;return xe()?(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 Hl(){const n=Me(),e="17.2";if(n)return n.name!=="Safari"&&n.os!=="iOS"||n.os==="iOS"&&n.osVersion&&$e(n.osVersion,e)>=0?!0:n.name==="Safari"&&$e(n.version,e)>=0}function xe(){return typeof document<"u"}function rt(){return navigator.product=="ReactNative"}function sr(n){return n.hostname.endsWith(".livekit.cloud")||n.hostname.endsWith(".livekit.run")}function Do(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function Mo(){if(!rt())return;let n=Do();if(n)return n.platform}function Oo(){if(xe())return window.devicePixelRatio;if(rt()){let n=Do();if(n)return n.devicePixelRatio}return 1}function $e(n,e){const t=n.split("."),i=e.split("."),r=Math.min(t.length,i.length);for(let s=0;s<r;++s){const a=parseInt(t[s],10),o=parseInt(i[s],10);if(a>o)return 1;if(a<o)return-1;if(s===r-1&&a===o)return 0}return n===""&&e!==""?-1:e===""?1:t.length==i.length?0:t.length<i.length?-1:1}function Jl(n){for(const e of n)e.target.handleResize(e)}function $l(n){for(const e of n)e.target.handleVisibilityChanged(e)}let ar=null;const Ao=()=>(ar||(ar=new ResizeObserver(Jl)),ar);let or=null;const xo=()=>(or||(or=new IntersectionObserver($l,{root:null,rootMargin:"0px"})),or);function Ql(){var n;const e=new xu({sdk:na.JS,protocol:To,version:ko});return rt()&&(e.os=(n=Mo())!==null&&n!==void 0?n:""),e}let cr;function Yl(){return cr||(cr=dr()),cr.clone()}function dr(){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 r=document.createElement("canvas");r.width=n,r.height=e;const s=r.getContext("2d");s==null||s.fillRect(0,0,r.width,r.height),i&&s&&(s.beginPath(),s.arc(n/2,e/2,50,0,Math.PI*2,!0),s.closePath(),s.fillStyle="grey",s.fill());const a=r.captureStream(),[o]=a.getTracks();if(!o)throw Error("Could not get empty media stream video track");return o.enabled=t,o}let Tn;function ni(){if(!Tn){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(),[Tn]=i.stream.getAudioTracks(),!Tn)throw Error("Could not get empty media stream audio track");Tn.enabled=!1}return Tn.clone()}class st{get isResolved(){return this._isResolved}constructor(e,t){this._isResolved=!1,this.onFinally=t,this.promise=new Promise((i,r)=>f(this,void 0,void 0,function*(){this.resolve=i,this.reject=r,e&&(yield e(i,r))})).finally(()=>{var i;this._isResolved=!0,(i=this.onFinally)===null||i===void 0||i.call(this)})}}function Xl(n,e){const t=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:.8,minDecibels:-100,maxDecibels:-80},e),i=mr();if(!i)throw new Error("Audio Context not supported on this browser");const r=t.cloneTrack?n.mediaStreamTrack.clone():n.mediaStreamTrack,s=i.createMediaStreamSource(new MediaStream([r])),a=i.createAnalyser();a.minDecibels=t.minDecibels,a.maxDecibels=t.maxDecibels,a.fftSize=t.fftSize,a.smoothingTimeConstant=t.smoothingTimeConstant,s.connect(a);const o=new Uint8Array(a.frequencyBinCount);return{calculateVolume:()=>{a.getByteFrequencyData(o);let u=0;for(const h of o)u+=Math.pow(h/255,2);return Math.sqrt(u/o.length)},analyser:a,cleanup:()=>f(this,void 0,void 0,function*(){yield i.close(),t.cloneTrack&&r.stop()})}}function Zl(n){return So.includes(n)}function kt(n){if(typeof n=="string"||typeof n=="number")return n;if(Array.isArray(n))return n[0];if(n.exact!==void 0)return Array.isArray(n.exact)?n.exact[0]:n.exact;if(n.ideal!==void 0)return Array.isArray(n.ideal)?n.ideal[0]:n.ideal;throw Error("could not unwrap constraint")}function eh(n){return n.startsWith("http")?n.replace(/^(http)/,"ws"):n}function ur(n){return n.startsWith("ws")?n.replace(/^(ws)/,"http"):n}function th(n,e){return n.segments.map(t=>{let{id:i,text:r,language:s,startTime:a,endTime:o,final:c}=t;var d;const u=(d=e.get(i))!==null&&d!==void 0?d:Date.now(),l=Date.now();return c?e.delete(i):e.set(i,u),{id:i,text:r,startTime:Number.parseInt(a.toString()),endTime:Number.parseInt(o.toString()),final:c,language:s,firstReceivedTime:u,lastReceivedTime:l}})}function nh(n){const{id:e,timestamp:t,message:i,editTimestamp:r}=n;return{id:e,timestamp:Number.parseInt(t.toString()),editTimestamp:r?Number.parseInt(r.toString()):void 0,message:i}}function Lo(n){switch(n.reason){case H.LeaveRequest:return n.context;case H.Cancelled:return Fe.CLIENT_INITIATED;case H.NotAllowed:return Fe.USER_REJECTED;case H.ServerUnreachable:return Fe.JOIN_FAILURE;default:return Fe.UNKNOWN_REASON}}function ii(n){return n!==void 0?Number(n):void 0}function Nt(n){return n!==void 0?BigInt(n):void 0}function Tt(n){return!!n&&!(n instanceof MediaStreamTrack)&&n.isLocal}function Qe(n){return!!n&&n.kind==C.Kind.Audio}function mt(n){return!!n&&n.kind==C.Kind.Video}function St(n){return Tt(n)&&mt(n)}function pt(n){return Tt(n)&&Qe(n)}function ri(n){return!!n&&!n.isLocal}function ih(n){return!!n&&!n.isLocal}function lr(n){return ri(n)&&mt(n)}function No(n){return n.isLocal}function rh(n){return!n.isLocal}function sh(n,e){const t=[];let i=new TextEncoder().encode(n);for(;i.length>e;){let r=e;for(;r>0;){const s=i[r];if(s!==void 0&&(s&192)!==128)break;r--}t.push(i.slice(0,r)),i=i.slice(r)}return i.length>0&&t.push(i),t}function Uo(n,e,t){var i,r,s,a;const{optionsWithoutProcessor:o,audioProcessor:c,videoProcessor:d}=Bo(n??{}),u=e==null?void 0:e.processor,l=t==null?void 0:t.processor,h=o??{};return h.audio===!0&&(h.audio={}),h.video===!0&&(h.video={}),h.audio&&(hr(h.audio,e),(i=(s=h.audio).deviceId)!==null&&i!==void 0||(s.deviceId={ideal:"default"}),(c||u)&&(h.audio.processor=c??u)),h.video&&(hr(h.video,t),(r=(a=h.video).deviceId)!==null&&r!==void 0||(a.deviceId={ideal:"default"}),(d||l)&&(h.video.processor=d??l)),h}function hr(n,e){return Object.keys(e).forEach(t=>{n[t]===void 0&&(n[t]=e[t])}),n}function fr(n){var e,t,i,r;const s={};if(n.video)if(typeof n.video=="object"){const a={},o=a,c=n.video;Object.keys(c).forEach(d=>{switch(d){case"resolution":hr(o,c.resolution);break;default:o[d]=c[d]}}),s.video=a,(e=(i=s.video).deviceId)!==null&&e!==void 0||(i.deviceId={ideal:"default"})}else s.video=n.video?{deviceId:{ideal:"default"}}:!1;else s.video=!1;return n.audio?typeof n.audio=="object"?(s.audio=n.audio,(t=(r=s.audio).deviceId)!==null&&t!==void 0||(r.deviceId={ideal:"default"})):s.audio={deviceId:{ideal:"default"}}:s.audio=!1,s}function Fo(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:200;return function*(){const i=mr();if(i){const r=i.createAnalyser();r.fftSize=2048;const s=r.frequencyBinCount,a=new Uint8Array(s);i.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(r),yield Ae(t),r.getByteTimeDomainData(a);const c=a.some(d=>d!==128&&d!==0);return i.close(),!c}return!1}()})}function mr(){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=()=>f(this,void 0,void 0,function*(){var r;try{t.state==="suspended"&&(yield t.resume())}catch(s){console.warn("Error trying to auto-resume audio context",s)}(r=window.document.body)===null||r===void 0||r.removeEventListener("click",i)});window.document.body.addEventListener("click",i)}return t}}function ah(n){return n==="audioinput"?C.Source.Microphone:n==="videoinput"?C.Source.Camera:C.Source.Unknown}function pr(n){return n===C.Source.Microphone?"audioinput":n===C.Source.Camera?"videoinput":void 0}function jo(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,Lt()?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 Sn(n){return n.split("/")[1].toLowerCase()}function oh(n){const e=[];return n.forEach(t=>{t.track!==void 0&&e.push(new ji({cid:t.track.mediaStreamID,track:t.trackInfo}))}),e}function K(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?K(n.track):{})}}function ch(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function dh(n,e){var t;n===void 0&&(n={}),e===void 0&&(e={});const i=[...Object.keys(e),...Object.keys(n)],r={};for(const s of i)n[s]!==e[s]&&(r[s]=(t=e[s])!==null&&t!==void 0?t:"");return r}function Bo(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:Nl(e)}}function uh(n){switch(n){case he.CAMERA:return C.Source.Camera;case he.MICROPHONE:return C.Source.Microphone;case he.SCREEN_SHARE:return C.Source.ScreenShare;case he.SCREEN_SHARE_AUDIO:return C.Source.ScreenShareAudio;default:return C.Source.Unknown}}function Vo(n,e){return n.width*n.height<e.width*e.height}function lh(n,e){var t;return(t=n.layers)===null||t===void 0?void 0:t.find(i=>i.quality===e)}class hh extends nt.EventEmitter{constructor(e){super(),this.onWorkerMessage=t=>{var i,r;const{kind:s,data:a}=t.data;switch(s){case"error":q.error(a.error.message),this.emit(ht.EncryptionError,a.error);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)});break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)}),this.encryptionEnabled!==a.enabled&&a.participantIdentity===((i=this.room)===null||i===void 0?void 0:i.localParticipant.identity))this.emit(ht.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const o=(r=this.room)===null||r===void 0?void 0:r.getParticipantByIdentity(a.participantIdentity);if(!o)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(ht.ParticipantEncryptionStatusChanged,a.enabled,o)}break;case"ratchetKey":this.keyProvider.emit(lt.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break}},this.onWorkerError=t=>{q.error("e2ee worker encountered an error:",{error:t.error}),this.emit(ht.EncryptionError,t.error)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1}setup(e){if(!ho())throw new gn("tried to setup end-to-end encryption on an unsupported browser");if(q.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:ul.getLevel()}};this.worker&&(q.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){q.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){!e||e.length===0?q.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(O.RTPVideoMapUpdate,t=>{this.postRTPMap(t)})}setupEventListeners(e,t){e.on(_.TrackPublished,(i,r)=>this.setParticipantCryptorEnabled(i.trackInfo.encryption!==Le.NONE,r.identity)),e.on(_.ConnectionStateChanged,i=>{i===$.Connected&&e.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{this.setParticipantCryptorEnabled(s.trackInfo.encryption!==Le.NONE,r.identity)})})}).on(_.TrackUnsubscribed,(i,r,s)=>{var a;const o={kind:"removeTransform",data:{participantIdentity:s.identity,trackId:i.mediaStreamID}};(a=this.worker)===null||a===void 0||a.postMessage(o)}).on(_.TrackSubscribed,(i,r,s)=>{this.setupE2EEReceiver(i,s.identity,r.trackInfo)}).on(_.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(M.LocalSenderCreated,(i,r)=>f(this,void 0,void 0,function*(){this.setupE2EESender(r,i)})),e.localParticipant.on(M.LocalTrackPublished,i=>{if(!mt(i.track)||!kn())return;const r={kind:"updateCodec",data:{trackId:i.track.mediaStreamID,codec:Sn(i.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(r)}),t.on(lt.SetKey,i=>this.postKey(i)).on(lt.RatchetRequest,(i,r)=>this.postRatchetRequest(i,r))}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:r}=e;var s;if(!this.worker)throw Error("could not set key, worker is missing");const a={kind:"setKey",data:{participantIdentity:i,isPublisher:i===((s=this.room)===null||s===void 0?void 0:s.localParticipant.identity),key:t,keyIndex:r}};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"?Sn(i.mimeType):void 0)}}setupE2EESender(e,t){if(!Tt(e)||!t){t||q.warn("early return because sender is not ready");return}this.handleSender(t,e.mediaStreamID,void 0)}handleReceiver(e,t,i,r){return f(this,void 0,void 0,function*(){if(this.worker){if($n()){const s={kind:"decode",participantIdentity:i,trackId:t,codec:r};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{if(pn in e&&r){const c={kind:"updateCodec",data:{trackId:t,codec:r,participantIdentity:i}};this.worker.postMessage(c);return}let s=e.writableStream,a=e.readableStream;if(!s||!a){const c=e.createEncodedStreams();e.writableStream=c.writable,s=c.writable,e.readableStream=c.readable,a=c.readable}const o={kind:"decode",data:{readableStream:a,writableStream:s,trackId:t,codec:r,participantIdentity:i,isReuse:pn in e}};this.worker.postMessage(o,[a,s])}e[pn]=!0}})}handleSender(e,t,i){var r;if(!(pn in e||!this.worker)){if(!(!((r=this.room)===null||r===void 0)&&r.localParticipant.identity)||this.room.localParticipant.identity==="")throw TypeError("local identity needs to be known in order to set up encrypted sender");if($n()){q.info("initialize script transform");const s={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:t,codec:i};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{q.info("initialize encoded streams");const s=e.createEncodedStreams(),a={kind:"encode",data:{readableStream:s.readable,writableStream:s.writable,codec:i,trackId:t,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(a,[s.readable,s.writable])}e[pn]=!0}}}const gr="default";class ye{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new ye),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s;if(((s=ye.userMediaPromiseMap)===null||s===void 0?void 0:s.size)>0){q.debug("awaiting getUserMedia promise");try{t?yield ye.userMediaPromiseMap.get(t):yield Promise.all(ye.userMediaPromiseMap.values())}catch{q.warn("error waiting for media permissons")}}let a=yield navigator.mediaDevices.enumerateDevices();if(r&&!(Lt()&&i.hasDeviceInUse(t))&&(a.filter(c=>c.kind===t).length===0||a.some(c=>{const d=c.label==="",u=t?c.kind===t:!0;return d&&u}))){const c={video:t!=="audioinput"&&t!=="audiooutput",audio:t!=="videoinput"&&{deviceId:{ideal:"default"}}},d=yield navigator.mediaDevices.getUserMedia(c);a=yield navigator.mediaDevices.enumerateDevices(),d.getTracks().forEach(u=>{u.stop()})}return i._previousDevices=a,t&&(a=a.filter(o=>o.kind===t)),a}()})}normalizeDeviceId(e,t,i){return f(this,void 0,void 0,function*(){if(t!==gr)return t;const r=yield this.getDevices(e),s=r.find(o=>o.deviceId===gr);if(!s){q.warn("could not reliably determine default device");return}const a=r.find(o=>o.deviceId!==gr&&o.groupId===(i??s.groupId));if(!a){q.warn("could not reliably determine default device");return}return a==null?void 0:a.deviceId})}hasDeviceInUse(e){return e?ye.userMediaPromiseMap.has(e):ye.userMediaPromiseMap.size>0}}ye.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],ye.userMediaPromiseMap=new Map;var Cn;(function(n){n[n.WAITING=0]="WAITING",n[n.RUNNING=1]="RUNNING",n[n.COMPLETED=2]="COMPLETED"})(Cn||(Cn={}));class fh{constructor(){this.pendingTasks=new Map,this.taskMutex=new we,this.nextTaskIndex=0}run(e){return f(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:Cn.WAITING};this.pendingTasks.set(t.id,t);const i=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=Cn.RUNNING,yield e()}finally{t.status=Cn.COMPLETED,this.pendingTasks.delete(t.id),i()}})}flush(){return f(this,void 0,void 0,function*(){return this.run(()=>f(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}function mh(n,e){const t=new URL(eh(n));return e.forEach((i,r)=>{t.searchParams.set(r,i)}),qo(t,"rtc")}function ph(n){const e=new URL(ur(n));return qo(e,"validate")}function gh(n){return n.endsWith("/")?n:"".concat(n,"/")}function qo(n,e){return n.pathname="".concat(gh(n.pathname)).concat(e),n.toString()}const vh=["syncState","trickle","offer","answer","simulate","leave"];function yh(n){const e=vh.indexOf(n.case)>=0;return q.trace("request allowed to bypass queue:",{canPass:e,req:n}),e}var ie;(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"})(ie||(ie={}));class vr{get currentState(){return this.state}get isDisconnected(){return this.state===ie.DISCONNECTING||this.state===ie.DISCONNECTED}get isEstablishingConnection(){return this.state===ie.CONNECTING||this.state===ie.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=ie.DISCONNECTED,this.log=q,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=tt((i=t.loggerName)!==null&&i!==void 0?i:je.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new fh,this.queuedRequests=[],this.closingLock=new we,this.connectionLock=new we,this.state=ie.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,r){return f(this,void 0,void 0,function*(){return this.state=ie.CONNECTING,this.options=i,yield this.connect(e,t,i,r)})}reconnect(e,t,i,r){return f(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=ie.RECONNECTING,this.clearPingInterval(),yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:i,reconnectReason:r}))})}connect(e,t,i,r){this.connectOptions=i;const s=Ql(),a=bh(t,s,i),o=mh(e,a),c=ph(o);return new Promise((d,u)=>f(this,void 0,void 0,function*(){const l=yield this.connectionLock.lock();try{const h=()=>f(this,void 0,void 0,function*(){this.close(),clearTimeout(m),u(new ee("room connection has been cancelled (signal)",H.Cancelled))}),m=setTimeout(()=>{this.close(),u(new ee("room connection has timed out (signal)",H.ServerUnreachable))},i.websocketTimeout);r!=null&&r.aborted&&h(),r==null||r.addEventListener("abort",h);const v=new URL(o);v.searchParams.has("access_token")&&v.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(v),Object.assign({reconnect:i.reconnect,reconnectReason:i.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new WebSocket(o),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{clearTimeout(m)},this.ws.onerror=p=>f(this,void 0,void 0,function*(){if(this.state!==ie.CONNECTED){this.state=ie.DISCONNECTED,clearTimeout(m);try{const S=yield fetch(c);if(S.status.toFixed(0).startsWith("4")){const k=yield S.text();u(new ee(k,H.NotAllowed,S.status))}else u(new ee("Encountered unknown websocket error during connection: ".concat(p.toString()),H.InternalError,S.status))}catch(S){u(new ee(S instanceof Error?S.message:"server was not reachable",H.ServerUnreachable))}return}this.handleWSError(p)}),this.ws.onmessage=p=>f(this,void 0,void 0,function*(){var S,k,R;let w;if(typeof p.data=="string"){const g=JSON.parse(p.data);w=ca.fromJson(g,{ignoreUnknownFields:!0})}else if(p.data instanceof ArrayBuffer)w=ca.fromBinary(new Uint8Array(p.data));else{this.log.error("could not decode websocket message: ".concat(typeof p.data),this.logContext);return}if(this.state!==ie.CONNECTED){let g=!1;if(((S=w.message)===null||S===void 0?void 0:S.case)==="join"?(this.state=ie.CONNECTED,r==null||r.removeEventListener("abort",h),this.pingTimeoutDuration=w.message.value.pingTimeout,this.pingIntervalDuration=w.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()),d(w.message.value)):this.state===ie.RECONNECTING&&w.message.case!=="leave"?(this.state=ie.CONNECTED,r==null||r.removeEventListener("abort",h),this.startPingInterval(),((k=w.message)===null||k===void 0?void 0:k.case)==="reconnect"?d(w.message.value):(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),d(void 0),g=!0)):this.isEstablishingConnection&&w.message.case==="leave"?u(new ee("Received leave request while trying to (re)connect",H.LeaveRequest,void 0,w.message.value.reason)):i.reconnect||u(new ee("did not receive join response, got ".concat((R=w.message)===null||R===void 0?void 0:R.case," instead"),H.InternalError)),!g)return}this.signalLatency&&(yield Ae(this.signalLatency)),this.handleSignalResponse(w)}),this.ws.onclose=p=>{this.isEstablishingConnection&&u(new ee("Websocket got closed during a (re)connection attempt",H.InternalError)),this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:p.reason,code:p.code,wasClean:p.wasClean,state:this.state})),this.handleOnClose(p.reason)}}finally{l()}}))}close(){return f(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=ie.DISCONNECTING),e.ws){e.ws.onmessage=null,e.ws.onopen=null,e.ws.onclose=null;const r=new Promise(s=>{e.ws?e.ws.onclose=()=>{s()}:s()});e.ws.readyState<e.ws.CLOSING&&(e.ws.close(),yield Promise.race([r,Ae(250)])),e.ws=void 0}}finally{t&&(e.state=ie.DISCONNECTED),i()}}()})}sendOffer(e,t){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:si(e,t)})}sendAnswer(e,t){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:e.sdp})),this.sendRequest({case:"answer",value:si(e,t)})}sendIceCandidate(e,t){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:e})),this.sendRequest({case:"trickle",value:new Ui({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new Fi({sid:e,muted:t})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return function*(){const o=s.getNextRequestId();return yield s.sendRequest({case:"updateMetadata",value:new ha({requestId:o,metadata:i,name:r,attributes:a})}),o}()})}sendUpdateTrackSettings(e){this.sendRequest({case:"trackSetting",value:e})}sendUpdateSubscription(e){return this.sendRequest({case:"subscription",value:e})}sendSyncState(e){return this.sendRequest({case:"syncState",value:e})}sendUpdateVideoLayers(e,t){return this.sendRequest({case:"updateLayers",value:new la({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new pa({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:se.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new ba({timestamp:se.parse(Date.now()),rtt:se.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new ua({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new Vn({reason:Fe.CLIENT_INITIATED,action:zt.DISCONNECT})})}sendRequest(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return function*(){if(!r&&!yh(t)&&i.state===ie.RECONNECTING){i.queuedRequests.push(()=>f(i,void 0,void 0,function*(){yield this.sendRequest(t,!0)}));return}if(r||(yield i.requestQueue.flush()),i.signalLatency&&(yield Ae(i.signalLatency)),i.isDisconnected){i.log.debug("skipping signal request (type: ".concat(t.case,") - SignalClient disconnected"));return}if(!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 Uu({message:t});try{i.useJSON?i.ws.send(a.toJsonString()):i.ws.send(a.toBinary())}catch(o){i.log.error("error sending signal message",Object.assign(Object.assign({},i.logContext),{error:o}))}}()})}handleSignalResponse(e){var t,i;const r=e.message;if(r==null){this.log.debug("received unsupported message",this.logContext);return}let s=!1;if(r.case==="answer"){const a=Ko(r.value);this.onAnswer&&this.onAnswer(a,r.value.id)}else if(r.case==="offer"){const a=Ko(r.value);this.onOffer&&this.onOffer(a,r.value.id)}else if(r.case==="trickle"){const a=JSON.parse(r.value.candidateInit);this.onTrickle&&this.onTrickle(a,r.value.target)}else r.case==="update"?this.onParticipantUpdate&&this.onParticipantUpdate((t=r.value.participants)!==null&&t!==void 0?t:[]):r.case==="trackPublished"?this.onLocalTrackPublished&&this.onLocalTrackPublished(r.value):r.case==="speakersChanged"?this.onSpeakersChanged&&this.onSpeakersChanged((i=r.value.speakers)!==null&&i!==void 0?i:[]):r.case==="leave"?this.onLeave&&this.onLeave(r.value):r.case==="mute"?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(r.value.sid,r.value.muted):r.case==="roomUpdate"?this.onRoomUpdate&&r.value.room&&this.onRoomUpdate(r.value.room):r.case==="connectionQuality"?this.onConnectionQuality&&this.onConnectionQuality(r.value):r.case==="streamStateUpdate"?this.onStreamStateUpdate&&this.onStreamStateUpdate(r.value):r.case==="subscribedQualityUpdate"?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(r.value):r.case==="subscriptionPermissionUpdate"?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(r.value):r.case==="refreshToken"?this.onTokenRefresh&&this.onTokenRefresh(r.value):r.case==="trackUnpublished"?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(r.value):r.case==="subscriptionResponse"?this.onSubscriptionError&&this.onSubscriptionError(r.value):r.case==="pong"||(r.case==="pongResp"?(this.rtt=Date.now()-Number.parseInt(r.value.lastPingTimestamp.toString()),this.resetPingTimeout(),s=!0):r.case==="requestResponse"?this.onRequestResponse&&this.onRequestResponse(r.value):r.case==="trackSubscribed"?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(r.value.trackSid):r.case==="roomMoved"?(this.onTokenRefresh&&this.onTokenRefresh(r.value.token),this.onRoomMoved&&this.onRoomMoved(r.value)):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:r.case})));s||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return f(this,void 0,void 0,function*(){if(this.state===ie.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=ve.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&&ve.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=ve.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&ve.clearInterval(this.pingInterval)}}function Ko(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 si(n,e){return new Dt({sdp:n.sdp,type:n.type,id:e})}function bh(n,e,t){var i;const r=new URLSearchParams;return r.set("access_token",n),t.reconnect&&(r.set("reconnect","1"),t.sid&&r.set("sid",t.sid)),r.set("auto_subscribe",t.autoSubscribe?"1":"0"),r.set("sdk",rt()?"reactnative":"js"),r.set("version",e.version),r.set("protocol",e.protocol.toString()),e.deviceModel&&r.set("device_model",e.deviceModel),e.os&&r.set("os",e.os),e.osVersion&&r.set("os_version",e.osVersion),e.browser&&r.set("browser",e.browser),e.browserVersion&&r.set("browser_version",e.browserVersion),t.adaptiveStream&&r.set("adaptive_stream","1"),t.reconnectReason&&r.set("reconnect_reason",t.reconnectReason.toString()),!((i=navigator.connection)===null||i===void 0)&&i.type&&r.set("network",navigator.connection.type),r}class zo{constructor(){this.buffer=[],this._totalSize=0}push(e){this.buffer.push(e),this._totalSize+=e.data.byteLength}pop(){const e=this.buffer.shift();return e&&(this._totalSize-=e.data.byteLength),e}getAll(){return this.buffer.slice()}popToSequence(e){for(;this.buffer.length>0&&this.buffer[0].sequence<=e;)this.pop()}alignBufferedAmount(e){for(;this.buffer.length>0;){const t=this.buffer[0];if(this._totalSize-t.data.byteLength<=e)break;this.pop()}}get length(){return this.buffer.length}}class kh{constructor(e){this._map=new Map,this._lastCleanup=0,this.ttl=e}set(e,t){const i=Date.now();i-this._lastCleanup>this.ttl/2&&this.cleanup();const r=i+this.ttl;return this._map.set(e,{value:t,expiresAt:r}),this}get(e){const t=this._map.get(e);if(t){if(t.expiresAt<Date.now()){this._map.delete(e);return}return t.value}}has(e){const t=this._map.get(e);return t?t.expiresAt<Date.now()?(this._map.delete(e),!1):!0:!1}delete(e){return this._map.delete(e)}clear(){this._map.clear()}cleanup(){const e=Date.now();for(const[t,i]of this._map.entries())i.expiresAt<e&&this._map.delete(t);this._lastCleanup=e}get size(){return this.cleanup(),this._map.size}forEach(e){this.cleanup();for(const[t,i]of this._map.entries())i.expiresAt>=Date.now()&&e(i.value,t,this.asValueMap())}map(e){this.cleanup();const t=[],i=this.asValueMap();for(const[r,s]of i.entries())t.push(e(s,r,i));return t}asValueMap(){const e=new Map;for(const[t,i]of this._map.entries())i.expiresAt>=Date.now()&&e.set(t,i.value);return e}}var Ye={},yr={},br={exports:{}},Wo;function kr(){if(Wo)return br.exports;Wo=1;var n=br.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")})}),br.exports}var Go;function Th(){return Go||(Go=1,function(n){var e=function(o){return String(Number(o))===o?Number(o):o},t=function(o,c,d,u){if(u&&!d)c[u]=e(o[1]);else for(var l=0;l<d.length;l+=1)o[l+1]!=null&&(c[d[l]]=e(o[l+1]))},i=function(o,c,d){var u=o.name&&o.names;o.push&&!c[o.push]?c[o.push]=[]:u&&!c[o.name]&&(c[o.name]={});var l=o.push?{}:u?c[o.name]:c;t(d.match(o.reg),l,o.names,o.name),o.push&&c[o.push].push(l)},r=kr(),s=RegExp.prototype.test.bind(/^([a-z])=(.*)/);n.parse=function(o){var c={},d=[],u=c;return o.split(/(\r\n|\r|\n)/).filter(s).forEach(function(l){var h=l[0],m=l.slice(2);h==="m"&&(d.push({rtp:[],fmtp:[]}),u=d[d.length-1]);for(var v=0;v<(r[h]||[]).length;v+=1){var p=r[h][v];if(p.reg.test(m))return i(p,u,m)}}),c.media=d,c};var a=function(o,c){var d=c.split(/=(.+)/,2);return d.length===2?o[d[0]]=e(d[1]):d.length===1&&c.length>1&&(o[d[0]]=void 0),o};n.parseParams=function(o){return o.split(/;\s?/).reduce(a,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(o){return o.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(o){for(var c=[],d=o.split(" ").map(e),u=0;u<d.length;u+=3)c.push({component:d[u],ip:d[u+1],port:d[u+2]});return c},n.parseImageAttributes=function(o){return o.split(" ").map(function(c){return c.substring(1,c.length-1).split(",").reduce(a,{})})},n.parseSimulcastStreamList=function(o){return o.split(";").map(function(c){return c.split(",").map(function(d){var u,l=!1;return d[0]!=="~"?u=e(d):(u=e(d.substring(1,d.length)),l=!0),{scid:u,paused:l}})})}}(yr)),yr}var Tr,Ho;function Sh(){if(Ho)return Tr;Ho=1;var n=kr(),e=/%[sdv%]/g,t=function(a){var o=1,c=arguments,d=c.length;return a.replace(e,function(u){if(o>=d)return u;var l=c[o];switch(o+=1,u){case"%%":return"%";case"%s":return String(l);case"%d":return Number(l);case"%v":return""}})},i=function(a,o,c){var d=o.format instanceof Function?o.format(o.push?c:c[o.name]):o.format,u=[a+"="+d];if(o.names)for(var l=0;l<o.names.length;l+=1){var h=o.names[l];o.name?u.push(c[o.name][h]):u.push(c[o.names[l]])}else u.push(c[o.name]);return t.apply(null,u)},r=["v","o","s","i","u","e","p","c","b","t","r","z","a"],s=["i","c","b","a"];return Tr=function(a,o){o=o||{},a.version==null&&(a.version=0),a.name==null&&(a.name=" "),a.media.forEach(function(l){l.payloads==null&&(l.payloads="")});var c=o.outerOrder||r,d=o.innerOrder||s,u=[];return c.forEach(function(l){n[l].forEach(function(h){h.name in a&&a[h.name]!=null?u.push(i(l,h,a)):h.push in a&&a[h.push]!=null&&a[h.push].forEach(function(m){u.push(i(l,h,m))})})}),a.media.forEach(function(l){u.push(i("m",n.m[0],l)),d.forEach(function(h){n[h].forEach(function(m){m.name in l&&l[m.name]!=null?u.push(i(h,m,l)):m.push in l&&l[m.push]!=null&&l[m.push].forEach(function(v){u.push(i(h,m,v))})})})}),u.join(`\r
|
|
36
|
+
`);n.RTCSessionDescription&&r instanceof n.RTCSessionDescription?arguments[0]=new n.RTCSessionDescription({type:r.type,sdp:s}):r.sdp=s}return t.apply(this,arguments)}}function Hn(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 Jn(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 r=arguments[0]||{};if(typeof r!="object"||r.type&&r.sdp)return t.apply(this,arguments);if(r={type:r.type,sdp:r.sdp},!r.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":r.type="offer";break;default:r.type="answer";break}return r.sdp||r.type!=="offer"&&r.type!=="answer"?t.apply(this,[r]):(r.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(a=>t.apply(this,[a]))})}var Tl=Object.freeze({__proto__:null,removeExtmapAllowMixed:Ji,shimAddIceCandidateNullOrEmpty:Hn,shimConnectionState:Hi,shimMaxMessageSize:Wn,shimParameterlessSetLocalDescription:Jn,shimRTCIceCandidate:zn,shimRTCIceCandidateRelayProtocol:Gi,shimSendThrowTypeError:Gn});function Sl(){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=wa,i=vl(n),r={browserDetails:i,commonShim:Tl,extractVersion:mn,disableLog:pl,disableWarnings:gl,sdp:kl};switch(i.browser){case"chrome":if(!ja||!Ki||!e.shimChrome)return t("Chrome shim is not included in this adapter release."),r;if(i.version===null)return t("Chrome shim can not determine version, not shimming."),r;t("adapter.js shimming chrome."),r.browserShim=ja,Hn(n,i),Jn(n),Ma(n,i),Oa(n),Ki(n,i),Aa(n),Ua(n,i),xa(n),La(n),Fa(n,i),zn(n),Gi(n),Hi(n),Wn(n,i),Gn(n),Ji(n,i);break;case"firefox":if(!Qa||!zi||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),r;t("adapter.js shimming firefox."),r.browserShim=Qa,Hn(n,i),Jn(n),Ba(n,i),zi(n,i),Va(n),za(n),qa(n),Ka(n),Wa(n),Ga(n),Ha(n),Ja(n),$a(n),zn(n),Hi(n),Wn(n,i),Gn(n);break;case"safari":if(!ao||!e.shimSafari)return t("Safari shim is not included in this adapter release."),r;t("adapter.js shimming safari."),r.browserShim=ao,Hn(n,i),Jn(n),no(n),ro(n),Za(n),Ya(n),Xa(n),io(n),eo(n),so(n),zn(n),Gi(n),Wn(n,i),Gn(n),Ji(n,i);break;default:t("Unsupported browser!");break}return r}Sl({window:typeof window>"u"?void 0:window});const uo="AES-GCM",Cl=10,pn="lk_e2ee",El={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:Cl,keyringSize:16};var lt;(function(n){n.SetKey="setKey",n.RatchetRequest="ratchetRequest",n.KeyRatcheted="keyRatcheted"})(lt||(lt={}));var $i;(function(n){n.KeyRatcheted="keyRatcheted"})($i||($i={}));var ht;(function(n){n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError"})(ht||(ht={}));var Qi;(function(n){n.Error="cryptorError"})(Qi||(Qi={}));function lo(){return ho()||$n()}function $n(){return typeof window.RTCRtpScriptTransform<"u"}function ho(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}function Pl(n){return"type"in n}function wl(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{name:uo},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"encrypt";return function*(){return crypto.subtle.importKey("raw",e,t,!1,i==="derive"?["deriveBits","deriveKey"]:["encrypt","decrypt"])}()})}function fo(n){return f(this,void 0,void 0,function*(){let e=new TextEncoder;return yield crypto.subtle.importKey("raw",e.encode(n),{name:"PBKDF2"},!1,["deriveBits","deriveKey"])})}function mo(n){return f(this,void 0,void 0,function*(){return yield crypto.subtle.importKey("raw",n,"HKDF",!1,["deriveBits","deriveKey"])})}function po(n,e){const i=new TextEncoder().encode(e);switch(n){case"HKDF":return{name:"HKDF",salt:i,hash:"SHA-256",info:new ArrayBuffer(128)};case"PBKDF2":return{name:"PBKDF2",salt:i,hash:"SHA-256",iterations:1e5};default:throw new Error("algorithm ".concat(n," is currently unsupported"))}}function Rl(n,e){return f(this,void 0,void 0,function*(){const t=po(n.algorithm.name,e),i=yield crypto.subtle.deriveKey(t,n,{name:uo,length:128},!1,["encrypt","decrypt"]);return{material:n,encryptionKey:i}})}function _l(){return window.crypto.getRandomValues(new Uint8Array(32))}function Il(n,e){return f(this,void 0,void 0,function*(){const t=po(n.algorithm.name,e);return crypto.subtle.deriveBits(t,n,256)})}function Dl(n){for(var e=0;e<n.length-3;e++)if(n[e]==0&&n[e+1]==0&&n[e+2]==3)return!0;return!1}function Ml(n){const e=[];for(var t=n.length,i=0;i<n.length;)t-i>=3&&!n[i]&&!n[i+1]&&n[i+2]==3?(e.push(n[i++]),e.push(n[i++]),i++):e.push(n[i++]);return new Uint8Array(e)}const Ol=2,go=3;function Al(n){const e=[];for(var t=0,i=0;i<n.length;++i){var r=n[i];r<=go&&t>=Ol&&(e.push(go),t=0),e.push(r),r==0?++t:t=0}return new Uint8Array(e)}class vo extends it.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(t,i,r)=>{q.debug("key ratcheted event received",{ratchetResult:t,participantId:i,keyIndex:r})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},El),e),this.on(lt.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(e,t,i){const r={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),r),this.emit(lt.SetKey,r)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,t){this.emit(lt.RatchetRequest,e,t)}}class xl extends vo{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const t=Object.assign(Object.assign({},e),{sharedKey:!0,ratchetWindowSize:0,failureTolerance:-1});super(t)}setKey(e){return f(this,void 0,void 0,function*(){const t=typeof e=="string"?yield fo(e):yield mo(e);this.onSetEncryptionKey(t)})}}class Be extends Error{constructor(e,t){super(t||"an error has occured"),this.name="LiveKitError",this.code=e}}var H;(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"})(H||(H={}));class ee extends Be{constructor(e,t,i,r){super(1,e),this.name="ConnectionError",this.status=i,this.reason=t,this.context=r,this.reasonName=H[t]}}class gn extends Be{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class Je extends Be{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class yo extends Be{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class fe extends Be{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Qn extends Be{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class Ll extends Be{constructor(e){super(14,e??"unable to publish data"),this.name="PublishDataError"}}class Yi extends Be{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class Xi extends Be{constructor(e,t){super(15,e),this.reason=t,this.reasonName=typeof t=="string"?t:Bi[t]}}var Ve;(function(n){n[n.AlreadyOpened=0]="AlreadyOpened",n[n.AbnormalEnd=1]="AbnormalEnd",n[n.DecodeFailed=2]="DecodeFailed",n[n.LengthExceeded=3]="LengthExceeded",n[n.Incomplete=4]="Incomplete",n[n.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered"})(Ve||(Ve={}));class ft extends Be{constructor(e,t){super(16,e),this.name="DataStreamError",this.reason=t,this.reasonName=Ve[t]}}var vn;(function(n){n.PermissionDenied="PermissionDenied",n.NotFound="NotFound",n.DeviceInUse="DeviceInUse",n.Other="Other"})(vn||(vn={})),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}(vn||(vn={}));var Yn;(function(n){n[n.InvalidKey=0]="InvalidKey",n[n.MissingKey=1]="MissingKey",n[n.InternalError=2]="InternalError"})(Yn||(Yn={}));class Nl extends Be{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Yn.InternalError,i=arguments.length>2?arguments[2]:void 0;super(40,e),this.reason=t,this.participantIdentity=i}}var _;(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"})(_||(_={}));var M;(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.LocalTrackCpuConstrained="localTrackCpuConstrained",n.LocalSenderCreated="localSenderCreated",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.TrackCpuConstrained="trackCpuConstrained",n.MediaDevicesError="mediaDevicesError",n.AudioStreamAcquired="audioStreamAcquired",n.ParticipantPermissionsChanged="participantPermissionsChanged",n.PCTrackAdded="pcTrackAdded",n.AttributesChanged="attributesChanged",n.LocalTrackSubscribed="localTrackSubscribed",n.ChatMessage="chatMessage",n.Active="active"})(M||(M={}));var O;(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"})(O||(O={}));var I;(function(n){n.Message="message",n.Muted="muted",n.Unmuted="unmuted",n.Restarted="restarted",n.Ended="ended",n.Subscribed="subscribed",n.Unsubscribed="unsubscribed",n.CpuConstrained="cpuConstrained",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"})(I||(I={}));function Ul(n){return typeof n>"u"?n:typeof structuredClone=="function"?typeof n=="object"&&n!==null?structuredClone(Object.assign({},n)):structuredClone(n):JSON.parse(JSON.stringify(n))}const Fl=/version\/(\d+(\.?_?\d+)+)/i;let Zi;function Me(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof n>"u"&&typeof navigator>"u")return;const t=(n??navigator.userAgent).toLowerCase();if(Zi===void 0||e){const i=jl.find(r=>{let{test:s}=r;return s.test(t)});Zi=i==null?void 0:i.describe(t)}return Zi}const jl=[{test:/firefox|iceweasel|fxios/i,describe(n){return{name:"Firefox",version:Xn(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:er(n)}}},{test:/chrom|crios|crmo/i,describe(n){return{name:"Chrome",version:Xn(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("crios")?"iOS":void 0,osVersion:er(n)}}},{test:/safari|applewebkit/i,describe(n){return{name:"Safari",version:Xn(Fl,n),os:n.includes("mobile/")?"iOS":"macOS",osVersion:er(n)}}}];function Xn(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 er(n){return n.includes("mac os")?Xn(/\(.+?(\d+_\d+(:?_\d+)?)/,n,1).replace(/_/g,"."):void 0}var Bl="2.15.6";const bo=Bl,ko=16;class ve{}ve.setTimeout=function(){return setTimeout(...arguments)},ve.setInterval=function(){return setInterval(...arguments)},ve.clearTimeout=function(){return clearTimeout(...arguments)},ve.clearInterval=function(){return clearInterval(...arguments)};const Vl=5e3,yn=[];var Oe;(function(n){n[n.LOW=0]="LOW",n[n.MEDIUM=1]="MEDIUM",n[n.HIGH=2]="HIGH"})(Oe||(Oe={}));class C extends it.EventEmitter{get streamState(){return this._streamState}setStreamState(e){this._streamState=e}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var r;super(),this.attachedElements=[],this.isMuted=!1,this._streamState=C.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=q,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),Vl):this.handleAppVisibilityChanged()},this.log=nt((r=i.loggerName)!==null&&r!==void 0?r:je.Track),this.loggerContextCb=i.loggerContextCb,this.setMaxListeners(100),this.kind=t,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=C.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),K(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let t="audio";this.kind===C.Kind.Video&&(t="video"),this.attachedElements.length===0&&this.kind===C.Kind.Video&&this.addAppVisibilityListener(),e||(t==="audio"&&(yn.forEach(s=>{s.parentElement===null&&!e&&(e=s)}),e&&yn.splice(yn.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),Mt(this.mediaStreamTrack,e);const i=e.srcObject.getTracks(),r=i.some(s=>s.kind==="audio");return e.play().then(()=>{this.emit(r?I.AudioPlaybackStarted:I.VideoPlaybackStarted)}).catch(s=>{s.name==="NotAllowedError"?this.emit(r?I.AudioPlaybackFailed:I.VideoPlaybackFailed,s):s.name==="AbortError"?q.debug("".concat(r?"audio":"video"," playback aborted, likely due to new play request")):q.warn("could not playback ".concat(r?"audio":"video"),s),r&&e&&i.some(a=>a.kind==="video")&&s.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(I.ElementAttached,e),e}detach(e){try{if(e){Ot(this.mediaStreamTrack,e);const i=this.attachedElements.indexOf(e);return i>=0&&(this.attachedElements.splice(i,1),this.recycleElement(e),this.emit(I.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(i=>{Ot(this.mediaStreamTrack,i),t.push(i),this.recycleElement(i),this.emit(I.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=nt(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),yn.forEach(i=>{i.parentElement||(t=!1)}),t&&yn.push(e)}}handleAppVisibilityChanged(){return f(this,void 0,void 0,function*(){this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===C.Kind.Video&&setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){xe()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){xe()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Mt(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(r=>{t.removeTrack(r)}),t.addTrack(n)),(!xt()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=t.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==t&&(e.srcObject=t,(xt()||At())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=t,e.play().catch(()=>{})},0))}function Ot(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(d){d.Audio="audio",d.Video="video",d.Unknown="unknown"})(e=n.Kind||(n.Kind={}));let t;(function(d){d.Camera="camera",d.Microphone="microphone",d.ScreenShare="screen_share",d.ScreenShareAudio="screen_share_audio",d.Unknown="unknown"})(t=n.Source||(n.Source={}));let i;(function(d){d.Active="active",d.Paused="paused",d.Unknown="unknown"})(i=n.StreamState||(n.StreamState={}));function r(d){switch(d){case e.Audio:return Ue.AUDIO;case e.Video:return Ue.VIDEO;default:return Ue.DATA}}n.kindToProto=r;function s(d){switch(d){case Ue.AUDIO:return e.Audio;case Ue.VIDEO:return e.Video;default:return e.Unknown}}n.kindFromProto=s;function a(d){switch(d){case t.Camera:return he.CAMERA;case t.Microphone:return he.MICROPHONE;case t.ScreenShare:return he.SCREEN_SHARE;case t.ScreenShareAudio:return he.SCREEN_SHARE_AUDIO;default:return he.UNKNOWN}}n.sourceToProto=a;function o(d){switch(d){case he.CAMERA:return t.Camera;case he.MICROPHONE:return t.Microphone;case he.SCREEN_SHARE:return t.ScreenShare;case he.SCREEN_SHARE_AUDIO:return t.ScreenShareAudio;default:return t.Unknown}}n.sourceFromProto=o;function c(d){switch(d){case Ai.ACTIVE:return i.Active;case Ai.PAUSED:return i.Paused;default:return i.Unknown}}n.streamStateFromProto=c})(C||(C={}));class Z{constructor(e,t,i,r,s){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:r,priority:s};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 ql=["vp8","h264"],To=["vp8","h264","vp9","av1","h265"];function So(n){return!!ql.find(e=>e===n)}var tr;(function(n){n[n.PREFER_REGRESSION=0]="PREFER_REGRESSION",n[n.SIMULCAST=1]="SIMULCAST",n[n.REGRESSION=2]="REGRESSION"})(tr||(tr={}));var Zn;(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}})(Zn||(Zn={}));const Ht={h90:new Z(160,90,9e4,20),h180:new Z(320,180,16e4,20),h216:new Z(384,216,18e4,20),h360:new Z(640,360,45e4,20),h540:new Z(960,540,8e5,25),h720:new Z(1280,720,17e5,30),h1080:new Z(1920,1080,3e6,30),h1440:new Z(2560,1440,5e6,30),h2160:new Z(3840,2160,8e6,30)},ei={h120:new Z(160,120,7e4,20),h180:new Z(240,180,125e3,20),h240:new Z(320,240,14e4,20),h360:new Z(480,360,33e4,20),h480:new Z(640,480,5e5,20),h540:new Z(720,540,6e5,25),h720:new Z(960,720,13e5,30),h1080:new Z(1440,1080,23e5,30),h1440:new Z(1920,1440,38e5,30)},bn={h360fps3:new Z(640,360,2e5,3,"medium"),h360fps15:new Z(640,360,4e5,15,"medium"),h720fps5:new Z(1280,720,8e5,5,"medium"),h720fps15:new Z(1280,720,15e5,15,"medium"),h720fps30:new Z(1280,720,2e6,30,"medium"),h1080fps15:new Z(1920,1080,25e5,15,"medium"),h1080fps30:new Z(1920,1080,5e6,30,"medium"),original:new Z(0,0,7e6,30,"medium")},Kl="|",Co="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function zl(n){const e=n.split(Kl);return e.length>1?[e[0],n.substr(e[0].length+1)]:[n,""]}function Ae(n){return f(this,void 0,void 0,function*(){return new Promise(e=>ve.setTimeout(e,n))})}function ti(){return"addTransceiver"in RTCPeerConnection.prototype}function nr(){return"addTrack"in RTCPeerConnection.prototype}function Wl(){return typeof ResizeObserver!==void 0&&typeof IntersectionObserver!==void 0}function Gl(){return ti()}function Eo(){if(!("getCapabilities"in RTCRtpSender)||xt()||At())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 Po(){if(!("getCapabilities"in RTCRtpSender)||At())return!1;if(xt()){const t=Me();if(t!=null&&t.version&&$e(t.version,"16")<0||(t==null?void 0:t.os)==="iOS"&&(t!=null&&t.osVersion)&&$e(t.osVersion,"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 rt(n){return n==="av1"||n==="vp9"}function ir(n){return!document||kn()?!1:(n||(n=document.createElement("audio")),"setSinkId"in n)}function wo(){return typeof RTCPeerConnection>"u"?!1:ti()||nr()}function At(){var n;return((n=Me())===null||n===void 0?void 0:n.name)==="Firefox"}function xt(){var n;return((n=Me())===null||n===void 0?void 0:n.name)==="Safari"}function kn(){const n=Me();return(n==null?void 0:n.name)==="Safari"||(n==null?void 0:n.os)==="iOS"}function Ro(){const n=Me();return(n==null?void 0:n.name)==="Safari"&&n.version.startsWith("17.")||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&$e(n.osVersion,"17")>=0}function Hl(n){return n||(n=Me()),(n==null?void 0:n.name)==="Safari"&&$e(n.version,"18.3")>0||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&$e(n.osVersion,"18.3")>0}function _o(){var n,e;return xe()?(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 Jl(){const n=Me(),e="17.2";if(n)return n.name!=="Safari"&&n.os!=="iOS"||n.os==="iOS"&&n.osVersion&&$e(n.osVersion,e)>=0?!0:n.name==="Safari"&&$e(n.version,e)>=0}function xe(){return typeof document<"u"}function st(){return navigator.product=="ReactNative"}function rr(n){return n.hostname.endsWith(".livekit.cloud")||n.hostname.endsWith(".livekit.run")}function Io(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function Do(){if(!st())return;let n=Io();if(n)return n.platform}function Mo(){if(xe())return window.devicePixelRatio;if(st()){let n=Io();if(n)return n.devicePixelRatio}return 1}function $e(n,e){const t=n.split("."),i=e.split("."),r=Math.min(t.length,i.length);for(let s=0;s<r;++s){const a=parseInt(t[s],10),o=parseInt(i[s],10);if(a>o)return 1;if(a<o)return-1;if(s===r-1&&a===o)return 0}return n===""&&e!==""?-1:e===""?1:t.length==i.length?0:t.length<i.length?-1:1}function $l(n){for(const e of n)e.target.handleResize(e)}function Ql(n){for(const e of n)e.target.handleVisibilityChanged(e)}let sr=null;const Oo=()=>(sr||(sr=new ResizeObserver($l)),sr);let ar=null;const Ao=()=>(ar||(ar=new IntersectionObserver(Ql,{root:null,rootMargin:"0px"})),ar);function Yl(){var n;const e=new Lu({sdk:ta.JS,protocol:ko,version:bo});return st()&&(e.os=(n=Do())!==null&&n!==void 0?n:""),e}let or;function Xl(){return or||(or=cr()),or.clone()}function cr(){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 r=document.createElement("canvas");r.width=n,r.height=e;const s=r.getContext("2d");s==null||s.fillRect(0,0,r.width,r.height),i&&s&&(s.beginPath(),s.arc(n/2,e/2,50,0,Math.PI*2,!0),s.closePath(),s.fillStyle="grey",s.fill());const a=r.captureStream(),[o]=a.getTracks();if(!o)throw Error("Could not get empty media stream video track");return o.enabled=t,o}let Tn;function ni(){if(!Tn){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(),[Tn]=i.stream.getAudioTracks(),!Tn)throw Error("Could not get empty media stream audio track");Tn.enabled=!1}return Tn.clone()}class at{get isResolved(){return this._isResolved}constructor(e,t){this._isResolved=!1,this.onFinally=t,this.promise=new Promise((i,r)=>f(this,void 0,void 0,function*(){this.resolve=i,this.reject=r,e&&(yield e(i,r))})).finally(()=>{var i;this._isResolved=!0,(i=this.onFinally)===null||i===void 0||i.call(this)})}}function Zl(n,e){const t=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:.8,minDecibels:-100,maxDecibels:-80},e),i=fr();if(!i)throw new Error("Audio Context not supported on this browser");const r=t.cloneTrack?n.mediaStreamTrack.clone():n.mediaStreamTrack,s=i.createMediaStreamSource(new MediaStream([r])),a=i.createAnalyser();a.minDecibels=t.minDecibels,a.maxDecibels=t.maxDecibels,a.fftSize=t.fftSize,a.smoothingTimeConstant=t.smoothingTimeConstant,s.connect(a);const o=new Uint8Array(a.frequencyBinCount);return{calculateVolume:()=>{a.getByteFrequencyData(o);let u=0;for(const h of o)u+=Math.pow(h/255,2);return Math.sqrt(u/o.length)},analyser:a,cleanup:()=>f(this,void 0,void 0,function*(){yield i.close(),t.cloneTrack&&r.stop()})}}function eh(n){return To.includes(n)}function kt(n){if(typeof n=="string"||typeof n=="number")return n;if(Array.isArray(n))return n[0];if(n.exact!==void 0)return Array.isArray(n.exact)?n.exact[0]:n.exact;if(n.ideal!==void 0)return Array.isArray(n.ideal)?n.ideal[0]:n.ideal;throw Error("could not unwrap constraint")}function th(n){return n.startsWith("http")?n.replace(/^(http)/,"ws"):n}function dr(n){return n.startsWith("ws")?n.replace(/^(ws)/,"http"):n}function nh(n,e){return n.segments.map(t=>{let{id:i,text:r,language:s,startTime:a,endTime:o,final:c}=t;var d;const u=(d=e.get(i))!==null&&d!==void 0?d:Date.now(),l=Date.now();return c?e.delete(i):e.set(i,u),{id:i,text:r,startTime:Number.parseInt(a.toString()),endTime:Number.parseInt(o.toString()),final:c,language:s,firstReceivedTime:u,lastReceivedTime:l}})}function ih(n){const{id:e,timestamp:t,message:i,editTimestamp:r}=n;return{id:e,timestamp:Number.parseInt(t.toString()),editTimestamp:r?Number.parseInt(r.toString()):void 0,message:i}}function xo(n){switch(n.reason){case H.LeaveRequest:return n.context;case H.Cancelled:return Fe.CLIENT_INITIATED;case H.NotAllowed:return Fe.USER_REJECTED;case H.ServerUnreachable:return Fe.JOIN_FAILURE;default:return Fe.UNKNOWN_REASON}}function ii(n){return n!==void 0?Number(n):void 0}function Lt(n){return n!==void 0?BigInt(n):void 0}function Tt(n){return!!n&&!(n instanceof MediaStreamTrack)&&n.isLocal}function Qe(n){return!!n&&n.kind==C.Kind.Audio}function mt(n){return!!n&&n.kind==C.Kind.Video}function St(n){return Tt(n)&&mt(n)}function pt(n){return Tt(n)&&Qe(n)}function ri(n){return!!n&&!n.isLocal}function rh(n){return!!n&&!n.isLocal}function ur(n){return ri(n)&&mt(n)}function Lo(n){return n.isLocal}function sh(n){return!n.isLocal}function ah(n,e){const t=[];let i=new TextEncoder().encode(n);for(;i.length>e;){let r=e;for(;r>0;){const s=i[r];if(s!==void 0&&(s&192)!==128)break;r--}t.push(i.slice(0,r)),i=i.slice(r)}return i.length>0&&t.push(i),t}function No(n,e,t){var i,r,s,a;const{optionsWithoutProcessor:o,audioProcessor:c,videoProcessor:d}=jo(n??{}),u=e==null?void 0:e.processor,l=t==null?void 0:t.processor,h=o??{};return h.audio===!0&&(h.audio={}),h.video===!0&&(h.video={}),h.audio&&(lr(h.audio,e),(i=(s=h.audio).deviceId)!==null&&i!==void 0||(s.deviceId={ideal:"default"}),(c||u)&&(h.audio.processor=c??u)),h.video&&(lr(h.video,t),(r=(a=h.video).deviceId)!==null&&r!==void 0||(a.deviceId={ideal:"default"}),(d||l)&&(h.video.processor=d??l)),h}function lr(n,e){return Object.keys(e).forEach(t=>{n[t]===void 0&&(n[t]=e[t])}),n}function hr(n){var e,t,i,r;const s={};if(n.video)if(typeof n.video=="object"){const a={},o=a,c=n.video;Object.keys(c).forEach(d=>{switch(d){case"resolution":lr(o,c.resolution);break;default:o[d]=c[d]}}),s.video=a,(e=(i=s.video).deviceId)!==null&&e!==void 0||(i.deviceId={ideal:"default"})}else s.video=n.video?{deviceId:{ideal:"default"}}:!1;else s.video=!1;return n.audio?typeof n.audio=="object"?(s.audio=n.audio,(t=(r=s.audio).deviceId)!==null&&t!==void 0||(r.deviceId={ideal:"default"})):s.audio={deviceId:{ideal:"default"}}:s.audio=!1,s}function Uo(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:200;return function*(){const i=fr();if(i){const r=i.createAnalyser();r.fftSize=2048;const s=r.frequencyBinCount,a=new Uint8Array(s);i.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(r),yield Ae(t),r.getByteTimeDomainData(a);const c=a.some(d=>d!==128&&d!==0);return i.close(),!c}return!1}()})}function fr(){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=()=>f(this,void 0,void 0,function*(){var r;try{t.state==="suspended"&&(yield t.resume())}catch(s){console.warn("Error trying to auto-resume audio context",s)}(r=window.document.body)===null||r===void 0||r.removeEventListener("click",i)});window.document.body.addEventListener("click",i)}return t}}function oh(n){return n==="audioinput"?C.Source.Microphone:n==="videoinput"?C.Source.Camera:C.Source.Unknown}function mr(n){return n===C.Source.Microphone?"audioinput":n===C.Source.Camera?"videoinput":void 0}function Fo(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,xt()?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 Sn(n){return n.split("/")[1].toLowerCase()}function ch(n){const e=[];return n.forEach(t=>{t.track!==void 0&&e.push(new Fi({cid:t.track.mediaStreamID,track:t.trackInfo}))}),e}function K(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?K(n.track):{})}}function dh(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function uh(n,e){var t;n===void 0&&(n={}),e===void 0&&(e={});const i=[...Object.keys(e),...Object.keys(n)],r={};for(const s of i)n[s]!==e[s]&&(r[s]=(t=e[s])!==null&&t!==void 0?t:"");return r}function jo(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:Ul(e)}}function lh(n){switch(n){case he.CAMERA:return C.Source.Camera;case he.MICROPHONE:return C.Source.Microphone;case he.SCREEN_SHARE:return C.Source.ScreenShare;case he.SCREEN_SHARE_AUDIO:return C.Source.ScreenShareAudio;default:return C.Source.Unknown}}function Bo(n,e){return n.width*n.height<e.width*e.height}function hh(n,e){var t;return(t=n.layers)===null||t===void 0?void 0:t.find(i=>i.quality===e)}class fh extends it.EventEmitter{constructor(e){super(),this.onWorkerMessage=t=>{var i,r;const{kind:s,data:a}=t.data;switch(s){case"error":q.error(a.error.message),this.emit(ht.EncryptionError,a.error);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)});break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)}),this.encryptionEnabled!==a.enabled&&a.participantIdentity===((i=this.room)===null||i===void 0?void 0:i.localParticipant.identity))this.emit(ht.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const o=(r=this.room)===null||r===void 0?void 0:r.getParticipantByIdentity(a.participantIdentity);if(!o)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(ht.ParticipantEncryptionStatusChanged,a.enabled,o)}break;case"ratchetKey":this.keyProvider.emit(lt.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break}},this.onWorkerError=t=>{q.error("e2ee worker encountered an error:",{error:t.error}),this.emit(ht.EncryptionError,t.error)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1}setup(e){if(!lo())throw new gn("tried to setup end-to-end encryption on an unsupported browser");if(q.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:ll.getLevel()}};this.worker&&(q.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){q.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){!e||e.length===0?q.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(O.RTPVideoMapUpdate,t=>{this.postRTPMap(t)})}setupEventListeners(e,t){e.on(_.TrackPublished,(i,r)=>this.setParticipantCryptorEnabled(i.trackInfo.encryption!==Le.NONE,r.identity)),e.on(_.ConnectionStateChanged,i=>{i===$.Connected&&e.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{this.setParticipantCryptorEnabled(s.trackInfo.encryption!==Le.NONE,r.identity)})})}).on(_.TrackUnsubscribed,(i,r,s)=>{var a;const o={kind:"removeTransform",data:{participantIdentity:s.identity,trackId:i.mediaStreamID}};(a=this.worker)===null||a===void 0||a.postMessage(o)}).on(_.TrackSubscribed,(i,r,s)=>{this.setupE2EEReceiver(i,s.identity,r.trackInfo)}).on(_.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(M.LocalSenderCreated,(i,r)=>f(this,void 0,void 0,function*(){this.setupE2EESender(r,i)})),e.localParticipant.on(M.LocalTrackPublished,i=>{if(!mt(i.track)||!kn())return;const r={kind:"updateCodec",data:{trackId:i.track.mediaStreamID,codec:Sn(i.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(r)}),t.on(lt.SetKey,i=>this.postKey(i)).on(lt.RatchetRequest,(i,r)=>this.postRatchetRequest(i,r))}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:r}=e;var s;if(!this.worker)throw Error("could not set key, worker is missing");const a={kind:"setKey",data:{participantIdentity:i,isPublisher:i===((s=this.room)===null||s===void 0?void 0:s.localParticipant.identity),key:t,keyIndex:r}};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"?Sn(i.mimeType):void 0)}}setupE2EESender(e,t){if(!Tt(e)||!t){t||q.warn("early return because sender is not ready");return}this.handleSender(t,e.mediaStreamID,void 0)}handleReceiver(e,t,i,r){return f(this,void 0,void 0,function*(){if(this.worker){if($n()){const s={kind:"decode",participantIdentity:i,trackId:t,codec:r};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{if(pn in e&&r){const c={kind:"updateCodec",data:{trackId:t,codec:r,participantIdentity:i}};this.worker.postMessage(c);return}let s=e.writableStream,a=e.readableStream;if(!s||!a){const c=e.createEncodedStreams();e.writableStream=c.writable,s=c.writable,e.readableStream=c.readable,a=c.readable}const o={kind:"decode",data:{readableStream:a,writableStream:s,trackId:t,codec:r,participantIdentity:i,isReuse:pn in e}};this.worker.postMessage(o,[a,s])}e[pn]=!0}})}handleSender(e,t,i){var r;if(!(pn in e||!this.worker)){if(!(!((r=this.room)===null||r===void 0)&&r.localParticipant.identity)||this.room.localParticipant.identity==="")throw TypeError("local identity needs to be known in order to set up encrypted sender");if($n()){q.info("initialize script transform");const s={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:t,codec:i};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{q.info("initialize encoded streams");const s=e.createEncodedStreams(),a={kind:"encode",data:{readableStream:s.readable,writableStream:s.writable,codec:i,trackId:t,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(a,[s.readable,s.writable])}e[pn]=!0}}}const pr="default";class ye{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new ye),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s;if(((s=ye.userMediaPromiseMap)===null||s===void 0?void 0:s.size)>0){q.debug("awaiting getUserMedia promise");try{t?yield ye.userMediaPromiseMap.get(t):yield Promise.all(ye.userMediaPromiseMap.values())}catch{q.warn("error waiting for media permissons")}}let a=yield navigator.mediaDevices.enumerateDevices();if(r&&!(xt()&&i.hasDeviceInUse(t))&&(a.filter(c=>c.kind===t).length===0||a.some(c=>{const d=c.label==="",u=t?c.kind===t:!0;return d&&u}))){const c={video:t!=="audioinput"&&t!=="audiooutput",audio:t!=="videoinput"&&{deviceId:{ideal:"default"}}},d=yield navigator.mediaDevices.getUserMedia(c);a=yield navigator.mediaDevices.enumerateDevices(),d.getTracks().forEach(u=>{u.stop()})}return i._previousDevices=a,t&&(a=a.filter(o=>o.kind===t)),a}()})}normalizeDeviceId(e,t,i){return f(this,void 0,void 0,function*(){if(t!==pr)return t;const r=yield this.getDevices(e),s=r.find(o=>o.deviceId===pr);if(!s){q.warn("could not reliably determine default device");return}const a=r.find(o=>o.deviceId!==pr&&o.groupId===(i??s.groupId));if(!a){q.warn("could not reliably determine default device");return}return a==null?void 0:a.deviceId})}hasDeviceInUse(e){return e?ye.userMediaPromiseMap.has(e):ye.userMediaPromiseMap.size>0}}ye.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],ye.userMediaPromiseMap=new Map;var Cn;(function(n){n[n.WAITING=0]="WAITING",n[n.RUNNING=1]="RUNNING",n[n.COMPLETED=2]="COMPLETED"})(Cn||(Cn={}));class mh{constructor(){this.pendingTasks=new Map,this.taskMutex=new we,this.nextTaskIndex=0}run(e){return f(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:Cn.WAITING};this.pendingTasks.set(t.id,t);const i=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=Cn.RUNNING,yield e()}finally{t.status=Cn.COMPLETED,this.pendingTasks.delete(t.id),i()}})}flush(){return f(this,void 0,void 0,function*(){return this.run(()=>f(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}function ph(n,e){const t=new URL(th(n));return e.forEach((i,r)=>{t.searchParams.set(r,i)}),Vo(t,"rtc")}function gh(n){const e=new URL(dr(n));return Vo(e,"validate")}function vh(n){return n.endsWith("/")?n:"".concat(n,"/")}function Vo(n,e){return n.pathname="".concat(vh(n.pathname)).concat(e),n.toString()}const yh=["syncState","trickle","offer","answer","simulate","leave"];function bh(n){const e=yh.indexOf(n.case)>=0;return q.trace("request allowed to bypass queue:",{canPass:e,req:n}),e}var ie;(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"})(ie||(ie={}));class gr{get currentState(){return this.state}get isDisconnected(){return this.state===ie.DISCONNECTING||this.state===ie.DISCONNECTED}get isEstablishingConnection(){return this.state===ie.CONNECTING||this.state===ie.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=ie.DISCONNECTED,this.log=q,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=nt((i=t.loggerName)!==null&&i!==void 0?i:je.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new mh,this.queuedRequests=[],this.closingLock=new we,this.connectionLock=new we,this.state=ie.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,r){return f(this,void 0,void 0,function*(){return this.state=ie.CONNECTING,this.options=i,yield this.connect(e,t,i,r)})}reconnect(e,t,i,r){return f(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=ie.RECONNECTING,this.clearPingInterval(),yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:i,reconnectReason:r}))})}connect(e,t,i,r){this.connectOptions=i;const s=Yl(),a=kh(t,s,i),o=ph(e,a),c=gh(o);return new Promise((d,u)=>f(this,void 0,void 0,function*(){const l=yield this.connectionLock.lock();try{const h=()=>f(this,void 0,void 0,function*(){this.close(),clearTimeout(m),u(new ee("room connection has been cancelled (signal)",H.Cancelled))}),m=setTimeout(()=>{this.close(),u(new ee("room connection has timed out (signal)",H.ServerUnreachable))},i.websocketTimeout);r!=null&&r.aborted&&h(),r==null||r.addEventListener("abort",h);const v=new URL(o);v.searchParams.has("access_token")&&v.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(v),Object.assign({reconnect:i.reconnect,reconnectReason:i.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new WebSocket(o),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{clearTimeout(m)},this.ws.onerror=p=>f(this,void 0,void 0,function*(){if(this.state!==ie.CONNECTED){this.state=ie.DISCONNECTED,clearTimeout(m);try{const S=yield fetch(c);if(S.status.toFixed(0).startsWith("4")){const k=yield S.text();u(new ee(k,H.NotAllowed,S.status))}else u(new ee("Encountered unknown websocket error during connection: ".concat(p.toString()),H.InternalError,S.status))}catch(S){u(new ee(S instanceof Error?S.message:"server was not reachable",H.ServerUnreachable))}return}this.handleWSError(p)}),this.ws.onmessage=p=>f(this,void 0,void 0,function*(){var S,k,R;let w;if(typeof p.data=="string"){const g=JSON.parse(p.data);w=oa.fromJson(g,{ignoreUnknownFields:!0})}else if(p.data instanceof ArrayBuffer)w=oa.fromBinary(new Uint8Array(p.data));else{this.log.error("could not decode websocket message: ".concat(typeof p.data),this.logContext);return}if(this.state!==ie.CONNECTED){let g=!1;if(((S=w.message)===null||S===void 0?void 0:S.case)==="join"?(this.state=ie.CONNECTED,r==null||r.removeEventListener("abort",h),this.pingTimeoutDuration=w.message.value.pingTimeout,this.pingIntervalDuration=w.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()),d(w.message.value)):this.state===ie.RECONNECTING&&w.message.case!=="leave"?(this.state=ie.CONNECTED,r==null||r.removeEventListener("abort",h),this.startPingInterval(),((k=w.message)===null||k===void 0?void 0:k.case)==="reconnect"?d(w.message.value):(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),d(void 0),g=!0)):this.isEstablishingConnection&&w.message.case==="leave"?u(new ee("Received leave request while trying to (re)connect",H.LeaveRequest,void 0,w.message.value.reason)):i.reconnect||u(new ee("did not receive join response, got ".concat((R=w.message)===null||R===void 0?void 0:R.case," instead"),H.InternalError)),!g)return}this.signalLatency&&(yield Ae(this.signalLatency)),this.handleSignalResponse(w)}),this.ws.onclose=p=>{this.isEstablishingConnection&&u(new ee("Websocket got closed during a (re)connection attempt",H.InternalError)),this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:p.reason,code:p.code,wasClean:p.wasClean,state:this.state})),this.handleOnClose(p.reason)}}finally{l()}}))}close(){return f(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=ie.DISCONNECTING),e.ws){e.ws.onmessage=null,e.ws.onopen=null,e.ws.onclose=null;const r=new Promise(s=>{e.ws?e.ws.onclose=()=>{s()}:s()});e.ws.readyState<e.ws.CLOSING&&(e.ws.close(),yield Promise.race([r,Ae(250)])),e.ws=void 0}}finally{t&&(e.state=ie.DISCONNECTED),i()}}()})}sendOffer(e,t){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:si(e,t)})}sendAnswer(e,t){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:e.sdp})),this.sendRequest({case:"answer",value:si(e,t)})}sendIceCandidate(e,t){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:e})),this.sendRequest({case:"trickle",value:new Ni({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new Ui({sid:e,muted:t})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return function*(){const o=s.getNextRequestId();return yield s.sendRequest({case:"updateMetadata",value:new la({requestId:o,metadata:i,name:r,attributes:a})}),o}()})}sendUpdateTrackSettings(e){this.sendRequest({case:"trackSetting",value:e})}sendUpdateSubscription(e){return this.sendRequest({case:"subscription",value:e})}sendSyncState(e){return this.sendRequest({case:"syncState",value:e})}sendUpdateVideoLayers(e,t){return this.sendRequest({case:"updateLayers",value:new ua({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new ma({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:se.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new ya({timestamp:se.parse(Date.now()),rtt:se.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new da({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new Vn({reason:Fe.CLIENT_INITIATED,action:zt.DISCONNECT})})}sendRequest(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return function*(){if(!r&&!bh(t)&&i.state===ie.RECONNECTING){i.queuedRequests.push(()=>f(i,void 0,void 0,function*(){yield this.sendRequest(t,!0)}));return}if(r||(yield i.requestQueue.flush()),i.signalLatency&&(yield Ae(i.signalLatency)),i.isDisconnected){i.log.debug("skipping signal request (type: ".concat(t.case,") - SignalClient disconnected"));return}if(!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 Fu({message:t});try{i.useJSON?i.ws.send(a.toJsonString()):i.ws.send(a.toBinary())}catch(o){i.log.error("error sending signal message",Object.assign(Object.assign({},i.logContext),{error:o}))}}()})}handleSignalResponse(e){var t,i;const r=e.message;if(r==null){this.log.debug("received unsupported message",this.logContext);return}let s=!1;if(r.case==="answer"){const a=qo(r.value);this.onAnswer&&this.onAnswer(a,r.value.id)}else if(r.case==="offer"){const a=qo(r.value);this.onOffer&&this.onOffer(a,r.value.id)}else if(r.case==="trickle"){const a=JSON.parse(r.value.candidateInit);this.onTrickle&&this.onTrickle(a,r.value.target)}else r.case==="update"?this.onParticipantUpdate&&this.onParticipantUpdate((t=r.value.participants)!==null&&t!==void 0?t:[]):r.case==="trackPublished"?this.onLocalTrackPublished&&this.onLocalTrackPublished(r.value):r.case==="speakersChanged"?this.onSpeakersChanged&&this.onSpeakersChanged((i=r.value.speakers)!==null&&i!==void 0?i:[]):r.case==="leave"?this.onLeave&&this.onLeave(r.value):r.case==="mute"?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(r.value.sid,r.value.muted):r.case==="roomUpdate"?this.onRoomUpdate&&r.value.room&&this.onRoomUpdate(r.value.room):r.case==="connectionQuality"?this.onConnectionQuality&&this.onConnectionQuality(r.value):r.case==="streamStateUpdate"?this.onStreamStateUpdate&&this.onStreamStateUpdate(r.value):r.case==="subscribedQualityUpdate"?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(r.value):r.case==="subscriptionPermissionUpdate"?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(r.value):r.case==="refreshToken"?this.onTokenRefresh&&this.onTokenRefresh(r.value):r.case==="trackUnpublished"?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(r.value):r.case==="subscriptionResponse"?this.onSubscriptionError&&this.onSubscriptionError(r.value):r.case==="pong"||(r.case==="pongResp"?(this.rtt=Date.now()-Number.parseInt(r.value.lastPingTimestamp.toString()),this.resetPingTimeout(),s=!0):r.case==="requestResponse"?this.onRequestResponse&&this.onRequestResponse(r.value):r.case==="trackSubscribed"?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(r.value.trackSid):r.case==="roomMoved"?(this.onTokenRefresh&&this.onTokenRefresh(r.value.token),this.onRoomMoved&&this.onRoomMoved(r.value)):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:r.case})));s||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return f(this,void 0,void 0,function*(){if(this.state===ie.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=ve.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&&ve.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=ve.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&ve.clearInterval(this.pingInterval)}}function qo(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 si(n,e){return new It({sdp:n.sdp,type:n.type,id:e})}function kh(n,e,t){var i;const r=new URLSearchParams;return r.set("access_token",n),t.reconnect&&(r.set("reconnect","1"),t.sid&&r.set("sid",t.sid)),r.set("auto_subscribe",t.autoSubscribe?"1":"0"),r.set("sdk",st()?"reactnative":"js"),r.set("version",e.version),r.set("protocol",e.protocol.toString()),e.deviceModel&&r.set("device_model",e.deviceModel),e.os&&r.set("os",e.os),e.osVersion&&r.set("os_version",e.osVersion),e.browser&&r.set("browser",e.browser),e.browserVersion&&r.set("browser_version",e.browserVersion),t.adaptiveStream&&r.set("adaptive_stream","1"),t.reconnectReason&&r.set("reconnect_reason",t.reconnectReason.toString()),!((i=navigator.connection)===null||i===void 0)&&i.type&&r.set("network",navigator.connection.type),r}class Ko{constructor(){this.buffer=[],this._totalSize=0}push(e){this.buffer.push(e),this._totalSize+=e.data.byteLength}pop(){const e=this.buffer.shift();return e&&(this._totalSize-=e.data.byteLength),e}getAll(){return this.buffer.slice()}popToSequence(e){for(;this.buffer.length>0&&this.buffer[0].sequence<=e;)this.pop()}alignBufferedAmount(e){for(;this.buffer.length>0;){const t=this.buffer[0];if(this._totalSize-t.data.byteLength<=e)break;this.pop()}}get length(){return this.buffer.length}}class Th{constructor(e){this._map=new Map,this._lastCleanup=0,this.ttl=e}set(e,t){const i=Date.now();i-this._lastCleanup>this.ttl/2&&this.cleanup();const r=i+this.ttl;return this._map.set(e,{value:t,expiresAt:r}),this}get(e){const t=this._map.get(e);if(t){if(t.expiresAt<Date.now()){this._map.delete(e);return}return t.value}}has(e){const t=this._map.get(e);return t?t.expiresAt<Date.now()?(this._map.delete(e),!1):!0:!1}delete(e){return this._map.delete(e)}clear(){this._map.clear()}cleanup(){const e=Date.now();for(const[t,i]of this._map.entries())i.expiresAt<e&&this._map.delete(t);this._lastCleanup=e}get size(){return this.cleanup(),this._map.size}forEach(e){this.cleanup();for(const[t,i]of this._map.entries())i.expiresAt>=Date.now()&&e(i.value,t,this.asValueMap())}map(e){this.cleanup();const t=[],i=this.asValueMap();for(const[r,s]of i.entries())t.push(e(s,r,i));return t}asValueMap(){const e=new Map;for(const[t,i]of this._map.entries())i.expiresAt>=Date.now()&&e.set(t,i.value);return e}}var Ye={},vr={},yr={exports:{}},zo;function br(){if(zo)return yr.exports;zo=1;var n=yr.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")})}),yr.exports}var Wo;function Sh(){return Wo||(Wo=1,function(n){var e=function(o){return String(Number(o))===o?Number(o):o},t=function(o,c,d,u){if(u&&!d)c[u]=e(o[1]);else for(var l=0;l<d.length;l+=1)o[l+1]!=null&&(c[d[l]]=e(o[l+1]))},i=function(o,c,d){var u=o.name&&o.names;o.push&&!c[o.push]?c[o.push]=[]:u&&!c[o.name]&&(c[o.name]={});var l=o.push?{}:u?c[o.name]:c;t(d.match(o.reg),l,o.names,o.name),o.push&&c[o.push].push(l)},r=br(),s=RegExp.prototype.test.bind(/^([a-z])=(.*)/);n.parse=function(o){var c={},d=[],u=c;return o.split(/(\r\n|\r|\n)/).filter(s).forEach(function(l){var h=l[0],m=l.slice(2);h==="m"&&(d.push({rtp:[],fmtp:[]}),u=d[d.length-1]);for(var v=0;v<(r[h]||[]).length;v+=1){var p=r[h][v];if(p.reg.test(m))return i(p,u,m)}}),c.media=d,c};var a=function(o,c){var d=c.split(/=(.+)/,2);return d.length===2?o[d[0]]=e(d[1]):d.length===1&&c.length>1&&(o[d[0]]=void 0),o};n.parseParams=function(o){return o.split(/;\s?/).reduce(a,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(o){return o.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(o){for(var c=[],d=o.split(" ").map(e),u=0;u<d.length;u+=3)c.push({component:d[u],ip:d[u+1],port:d[u+2]});return c},n.parseImageAttributes=function(o){return o.split(" ").map(function(c){return c.substring(1,c.length-1).split(",").reduce(a,{})})},n.parseSimulcastStreamList=function(o){return o.split(";").map(function(c){return c.split(",").map(function(d){var u,l=!1;return d[0]!=="~"?u=e(d):(u=e(d.substring(1,d.length)),l=!0),{scid:u,paused:l}})})}}(vr)),vr}var kr,Go;function Ch(){if(Go)return kr;Go=1;var n=br(),e=/%[sdv%]/g,t=function(a){var o=1,c=arguments,d=c.length;return a.replace(e,function(u){if(o>=d)return u;var l=c[o];switch(o+=1,u){case"%%":return"%";case"%s":return String(l);case"%d":return Number(l);case"%v":return""}})},i=function(a,o,c){var d=o.format instanceof Function?o.format(o.push?c:c[o.name]):o.format,u=[a+"="+d];if(o.names)for(var l=0;l<o.names.length;l+=1){var h=o.names[l];o.name?u.push(c[o.name][h]):u.push(c[o.names[l]])}else u.push(c[o.name]);return t.apply(null,u)},r=["v","o","s","i","u","e","p","c","b","t","r","z","a"],s=["i","c","b","a"];return kr=function(a,o){o=o||{},a.version==null&&(a.version=0),a.name==null&&(a.name=" "),a.media.forEach(function(l){l.payloads==null&&(l.payloads="")});var c=o.outerOrder||r,d=o.innerOrder||s,u=[];return c.forEach(function(l){n[l].forEach(function(h){h.name in a&&a[h.name]!=null?u.push(i(l,h,a)):h.push in a&&a[h.push]!=null&&a[h.push].forEach(function(m){u.push(i(l,h,m))})})}),a.media.forEach(function(l){u.push(i("m",n.m[0],l)),d.forEach(function(h){n[h].forEach(function(m){m.name in l&&l[m.name]!=null?u.push(i(h,m,l)):m.push in l&&l[m.push]!=null&&l[m.push].forEach(function(v){u.push(i(h,m,v))})})})}),u.join(`\r
|
|
37
37
|
`)+`\r
|
|
38
|
-
`},Tr}var Jo;function Ch(){if(Jo)return Ye;Jo=1;var n=Th(),e=Sh(),t=kr();return Ye.grammar=t,Ye.write=e,Ye.parse=n.parse,Ye.parseParams=n.parseParams,Ye.parseFmtpConfig=n.parseFmtpConfig,Ye.parsePayloads=n.parsePayloads,Ye.parseRemoteCandidates=n.parseRemoteCandidates,Ye.parseImageAttributes=n.parseImageAttributes,Ye.parseSimulcastStreamList=n.parseSimulcastStreamList,Ye}var Ct=Ch();function Sr(n,e,t){var i,r,s;e===void 0&&(e=50),t===void 0&&(t={});var a=(i=t.isImmediate)!=null&&i,o=(r=t.callback)!=null&&r,c=t.maxWait,d=Date.now(),u=[];function l(){if(c!==void 0){var m=Date.now()-d;if(m+e>=c)return c-m}return e}var h=function(){var m=[].slice.call(arguments),v=this;return new Promise(function(p,S){var k=a&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,d=Date.now(),!a){var w=n.apply(v,m);o&&o(w),u.forEach(function(g){return(0,g.resolve)(w)}),u=[]}},l()),k){var R=n.apply(v,m);return o&&o(R),p(R)}u.push({resolve:p,reject:S})})};return h.cancel=function(m){s!==void 0&&clearTimeout(s),u.forEach(function(v){return(0,v.reject)(m)}),u=[]},h}const Eh=.7,Ph=20,Jt={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class $o extends nt.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=q,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Sr(r=>f(this,void 0,void 0,function*(){this.emit(Jt.NegotiationStarted);try{yield this.createAndSendOffer()}catch(s){if(r)r(s);else throw s}}),Ph),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=tt((i=t.loggerName)!==null&&i!==void 0?i:je.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC(),this.offerLock=new we}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 f(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e,t){return f(this,void 0,void 0,function*(){var i;if(e.type==="answer"&&this.latestOfferId>0&&t>0&&t!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",Object.assign(Object.assign({},this.logContext),{offerId:t,latestOfferId:this.latestOfferId})),!1;let r;if(e.type==="offer"){let{stereoMids:s,nackMids:a}=wh(e);this.remoteStereoMids=s,this.remoteNackMids=a}else if(e.type==="answer"){const s=Ct.parse((i=e.sdp)!==null&&i!==void 0?i:"");s.media.forEach(a=>{a.type==="audio"&&this.trackBitrates.some(o=>{if(!o.transceiver||a.mid!=o.transceiver.mid)return!1;let c=0;if(a.rtp.some(u=>u.codec.toUpperCase()===o.codec.toUpperCase()?(c=u.payload,!0):!1),c===0)return!0;let d=!1;for(const u of a.fmtp)if(u.payload===c){u.config=u.config.split(";").filter(l=>!l.includes("maxaveragebitrate")).join(";"),o.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(o.maxbr*1e3)),d=!0;break}return d||o.maxbr>0&&a.fmtp.push({payload:c,config:"maxaveragebitrate=".concat(o.maxbr*1e3)}),!0})}),r=Ct.write(s)}return yield this.setMungedSDP(e,r,!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(Jt.NegotiationComplete),e.sdp&&Ct.parse(e.sdp).media.forEach(a=>{a.type==="video"&&this.emit(Jt.RTPVideoPayloadTypes,a.rtp)})),!0})}createAndSendOffer(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.offerLock.lock();try{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 o=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&o)yield this._pc.setRemoteDescription(o);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 r=this.latestOfferId+1;this.latestOfferId=r;const s=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:s.sdp},this.logContext));const a=Ct.parse((t=s.sdp)!==null&&t!==void 0?t:"");if(a.media.forEach(o=>{Yo(o),o.type==="audio"?Qo(o,[],[]):o.type==="video"&&this.trackBitrates.some(c=>{if(!o.msid||!c.cid||!o.msid.includes(c.cid))return!1;let d=0;if(o.rtp.some(l=>l.codec.toUpperCase()===c.codec.toUpperCase()?(d=l.payload,!0):!1),d===0||(it(c.codec)&&!Lt()&&this.ensureVideoDDExtensionForSVC(o,a),c.codec!=="av1"))return!0;const u=Math.round(c.maxbr*Eh);for(const l of o.fmtp)if(l.payload===d){l.config.includes("x-google-start-bitrate")||(l.config+=";x-google-start-bitrate=".concat(u));break}return!0})}),this.latestOfferId>r){this.log.warn("latestOfferId mismatch",Object.assign(Object.assign({},this.logContext),{latestOfferId:this.latestOfferId,offerId:r}));return}yield this.setMungedSDP(s,Ct.write(a)),this.onOffer(s,this.latestOfferId)}finally{i()}})}createAndSetAnswer(){return f(this,void 0,void 0,function*(){var e;const t=yield this.pc.createAnswer(),i=Ct.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(r=>{Yo(r),r.type==="audio"&&Qo(r,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,Ct.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 fe("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 fe("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 f(this,void 0,void 0,function*(){var e;if(!this._pc)return;let t="";const i=new Map,r=new Map;if((yield this._pc.getStats()).forEach(o=>{switch(o.type){case"transport":t=o.selectedCandidatePairId;break;case"candidate-pair":t===""&&o.selected&&(t=o.id),i.set(o.id,o);break;case"remote-candidate":r.set(o.id,"".concat(o.address,":").concat(o.port));break}}),t==="")return;const a=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(a!==void 0)return r.get(a)})}setMungedSDP(e,t,i){return f(this,void 0,void 0,function*(){if(t){const r=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(s){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:s,sdp:t})),e.sdp=r}}try{i?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(r){let s="unknown error";r instanceof Error?s=r.message:typeof r=="string"&&(s=r);const a={error:s,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 Qn(s)}})}ensureVideoDDExtensionForSVC(e,t){var i,r;if(!((i=e.ext)===null||i===void 0?void 0:i.some(a=>a.uri===Eo))){if(this.ddExtID===0){let a=0;t.media.forEach(o=>{var c;o.type==="video"&&((c=o.ext)===null||c===void 0||c.forEach(d=>{d.value>a&&(a=d.value)}))}),this.ddExtID=a+1}(r=e.ext)===null||r===void 0||r.push({value:this.ddExtID,uri:Eo})}}}function Qo(n,e,t){let i=0;n.rtp.some(r=>r.codec==="opus"?(i=r.payload,!0):!1),i>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(n.mid)&&!n.rtcpFb.some(r=>r.payload===i&&r.type==="nack")&&n.rtcpFb.push({payload:i,type:"nack"}),e.includes(n.mid)&&n.fmtp.some(r=>r.payload===i?(r.config.includes("stereo=1")||(r.config+=";stereo=1"),!0):!1))}function wh(n){var e;const t=[],i=[],r=Ct.parse((e=n.sdp)!==null&&e!==void 0?e:"");let s=0;return r.media.forEach(a=>{var o;a.type==="audio"&&(a.rtp.some(c=>c.codec==="opus"?(s=c.payload,!0):!1),!((o=a.rtcpFb)===null||o===void 0)&&o.some(c=>c.payload===s&&c.type==="nack")&&i.push(a.mid),a.fmtp.some(c=>c.payload===s?(c.config.includes("sprop-stereo=1")&&t.push(a.mid),!0):!1))}),{stereoMids:t,nackMids:i}}function Yo(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 Cr="vp8",Rh={audioPreset:Zn.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:bn.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Cr,backupCodec:!0,preConnectBuffer:!1},Xo={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Zo={deviceId:{ideal:"default"},resolution:Ht.h720.resolution},_h={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new Sa,disconnectOnPageLeave:!0,webAudioMix:!1},Er={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ue;(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"})(ue||(ue={}));class Ih{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,t,i){var r;this.peerConnectionTimeout=Er.peerConnectionTimeout,this.log=q,this.updateState=()=>{var s;const a=this.state,o=this.requiredTransports.map(c=>c.getConnectionState());o.every(c=>c==="connected")?this.state=ue.CONNECTED:o.some(c=>c==="failed")?this.state=ue.FAILED:o.some(c=>c==="connecting")?this.state=ue.CONNECTING:o.every(c=>c==="closed")?this.state=ue.CLOSED:o.some(c=>c==="closed")?this.state=ue.CLOSING:o.every(c=>c==="new")&&(this.state=ue.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ue[a]," to ").concat(ue[this.state]),this.logContext),(s=this.onStateChange)===null||s===void 0||s.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=tt((r=i.loggerName)!==null&&r!==void 0?r:je.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=!t,this.isSubscriberConnectionRequired=t,this.publisher=new $o(e,i),this.subscriber=new $o(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=s=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,s,He.PUBLISHER)},this.subscriber.onIceCandidate=s=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,s,He.SUBSCRIBER)},this.subscriber.onDataChannel=s=>{var a;(a=this.onDataChannel)===null||a===void 0||a.call(this,s)},this.subscriber.onTrack=s=>{var a;(a=this.onTrack)===null||a===void 0||a.call(this,s)},this.publisher.onOffer=(s,a)=>{var o;(o=this.onPublisherOffer)===null||o===void 0||o.call(this,s,a)},this.state=ue.NEW,this.connectionLock=new we,this.remoteOfferLock=new we}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,t){return this.publisher.setRemoteDescription(e,t)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return f(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 f(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return f(this,void 0,void 0,function*(){t===He.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e,t){return f(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 i=yield this.remoteOfferLock.lock();try{return(yield this.subscriber.setRemoteDescription(e,t))?yield this.subscriber.createAndSetAnswer():void 0}finally{i()}})}updateConfiguration(e,t){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return f(this,void 0,void 0,function*(){var i;const r=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(s=>this.ensureTransportConnected(s,e,t)))}finally{r()}})}negotiate(e){return f(this,void 0,void 0,function*(){return new Promise((t,i)=>f(this,void 0,void 0,function*(){const r=setTimeout(()=>{i("negotiation timed out")},this.peerConnectionTimeout),s=()=>{clearTimeout(r),i("negotiation aborted")};e.signal.addEventListener("abort",s),this.publisher.once(Jt.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(Jt.NegotiationComplete,()=>{clearTimeout(r),t()})}),yield this.publisher.negotiate(a=>{clearTimeout(r),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===He.PUBLISHER?this.publisher.getConnectedAddress():e===He.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 f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(i.getConnectionState()!=="connected")return new Promise((c,d)=>f(s,void 0,void 0,function*(){const u=()=>{this.log.warn("abort transport connection",this.logContext),ve.clearTimeout(l),d(new ee("room connection has been cancelled",H.Cancelled))};r!=null&&r.signal.aborted&&u(),r==null||r.signal.addEventListener("abort",u);const l=ve.setTimeout(()=>{r==null||r.signal.removeEventListener("abort",u),d(new ee("could not establish pc connection",H.InternalError))},a);for(;this.state!==ue.CONNECTED;)if(yield Ae(50),r!=null&&r.signal.aborted){d(new ee("room connection has been cancelled",H.Cancelled));return}ve.clearTimeout(l),r==null||r.signal.removeEventListener("abort",u),c()}))}()})}}class oe extends Error{constructor(e,t,i){super(t),this.code=e,this.message=tc(t,oe.MAX_MESSAGE_BYTES),this.data=i?tc(i,oe.MAX_DATA_BYTES):void 0}static fromProto(e){return new oe(e.code,e.message,e.data)}toProto(){return new Xs({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new oe(oe.ErrorCode[e],oe.ErrorMessage[e],t)}}oe.MAX_MESSAGE_BYTES=256,oe.MAX_DATA_BYTES=15360,oe.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},oe.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 ec=15360;function Pr(n){return new TextEncoder().encode(n).length}function tc(n,e){if(Pr(n)<=e)return n;let t=0,i=n.length;const r=new TextEncoder;for(;t<i;){const s=Math.floor((t+i+1)/2);r.encode(n.slice(0,s)).length<=e?t=s:i=s-1}return n.slice(0,t)}const wr=2e3;function ai(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 Rr=typeof MediaRecorder<"u";class Dh{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const Mh=Rr?MediaRecorder:Dh;class nc extends Mh{constructor(e,t){if(!Rr)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,r;const s=()=>r===void 0,a=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",o),r==null||r.close(),r=void 0},o=c=>{r==null||r.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",o),r=void 0};this.byteStream=new ReadableStream({start:c=>{r=c,i=d=>f(this,void 0,void 0,function*(){let u;if(d.data.arrayBuffer){const l=yield d.data.arrayBuffer();u=new Uint8Array(l)}else if(d.data.byteArray)u=d.data.byteArray;else throw new Error("no data available!");s()||c.enqueue(u)}),this.addEventListener("dataavailable",i)},cancel:()=>{a()}}),this.addEventListener("stop",a),this.addEventListener("error",o)}}function Oh(){return Rr}const Ah=1e3,xh=1e4;class _r extends C{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 r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,s=arguments.length>4?arguments[4]:void 0;super(e,t,s),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=Sr(()=>f(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>f(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(I.Ended,this)},this.reacquireTrack=!1,this.providedByUser=r,this.muteLock=new we,this.pauseUpstreamLock=new we,this.trackChangeLock=new we,this.trackChangeLock.lock().then(a=>f(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(e,!0)}finally{a()}})),this._constraints=e.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==C.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 f(this,void 0,void 0,function*(){var i;if(e===this._mediaStreamTrack&&!t)return;this._mediaStreamTrack&&(this.attachedElements.forEach(s=>{At(this._mediaStreamTrack,s)}),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 r;if(this.processor&&e){if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Ot(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),r=this.processor.processedTrack}this.sender&&((i=this.sender.transport)===null||i===void 0?void 0:i.state)!=="closed"&&(yield this.sender.replaceTrack(r??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(s=>{Ot(r??e,s)}))})}waitForDimensions(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ah;return function*(){var i;if(e.kind===C.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=Me())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Ae(10));const r=Date.now();for(;Date.now()-r<t;){const s=e.dimensions;if(s)return s;yield Ae(50)}throw new Je("unable to get track dimensions after timeout")}()})}setDeviceId(e){return f(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===kt(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),kt(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return f(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===C.Source.ScreenShare)return;const{deviceId:i,groupId:r}=e._mediaStreamTrack.getSettings(),s=e.kind===C.Kind.Audio?"audioinput":"videoinput";return t?ye.getInstance().normalizeDeviceId(s,i,r):i}()})}mute(){return f(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return f(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,t){return f(this,void 0,void 0,function*(){const i=yield this.trackChangeLock.lock();try{if(!this.sender)throw new Je("unable to replace an unpublished track");let r,s;return typeof t=="boolean"?r=t:t!==void 0&&(r=t.userProvidedTrack,s=t.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),s&&this.processor&&(yield this.internalStopProcessor()),this}finally{i()}})}restart(e){return f(this,void 0,void 0,function*(){this.manuallyStopped=!1;const t=yield this.trackChangeLock.lock();try{e||(e=this._constraints);const{deviceId:i,facingMode:r}=e,s=hl(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===C.Kind.Video?a.video=i||r?{deviceId:i,facingMode:r}:!0:a.audio=i?Object.assign({deviceId:i},s):!0,this.attachedElements.forEach(d=>{At(this.mediaStreamTrack,d)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(a)).getTracks()[0];return this.kind===C.Kind.Video&&(yield c.applyConstraints(s)),c.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(c),this._constraints=e,this.emit(I.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?I.Muted:I.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 f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Io()&&(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 f(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(I.UpstreamPaused,this);const i=Me();if((i==null?void 0:i.name)==="Safari"&&$e(i.version,"12.0")<0)throw new gn("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 f(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(I.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 f(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 f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s;const a=yield i.trackChangeLock.lock();try{i.log.debug("setting up processor",i.logContext);const o=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:o,audioContext:i.audioContext};if(yield t.init(c),i.log.debug("processor initialized",i.logContext),i.processor&&(yield i.internalStopProcessor()),i.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Ot(i._mediaStreamTrack,o),o.muted=!0,o.play().catch(d=>{d instanceof DOMException&&d.name==="AbortError"?(i.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},i.logContext),{error:d})),setTimeout(()=>{o.play().catch(u=>{i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{err:u}))})},100)):i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:d}))}),i.processor=t,i.processorElement=o,i.processor.processedTrack){for(const d of i.attachedElements)d!==i.processorElement&&r&&(At(i._mediaStreamTrack,d),Ot(i.processor.processedTrack,d));yield(s=i.sender)===null||s===void 0?void 0:s.replaceTrack(i.processor.processedTrack)}i.emit(I.TrackProcessorUpdate,i.processor)}finally{a()}}()})}getProcessor(){return this.processor}stopProcessor(){return f(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.trackChangeLock.lock();try{yield e.internalStopProcessor(t)}finally{i()}}()})}internalStopProcessor(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var i,r;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||((r=e.processorElement)===null||r===void 0||r.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(I.TrackProcessorUpdate))}()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!Oh()){this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);return}if(this.localTrackRecorder){this.log.warn("preconnect buffer already started");return}else{let t="audio/webm;codecs=opus";MediaRecorder.isTypeSupported(t)||(t="video/mp4"),this.localTrackRecorder=new nc(this,{mimeType:t})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},xh)}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}getPreConnectBufferMimeType(){var e;return(e=this.localTrackRecorder)===null||e===void 0?void 0:e.mimeType}}class $t extends _r{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3?arguments[3]:void 0,s=arguments.length>4?arguments[4]:void 0;super(e,C.Kind.Audio,t,i,s),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>f(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let a;try{a=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}a&&this.prevStats&&(this._currentBitrate=ai(a,this.prevStats)),this.prevStats=a}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(I.AudioTrackFeatureUpdate,this,ge.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(I.AudioTrackFeatureUpdate,this,ge.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=r,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return f(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===C.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 f(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!==kt(this._constraints.deviceId);return this.source===C.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 f(this,void 0,void 0,function*(){let t;if(e){const i=fr({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 f(this,void 0,void 0,function*(){const i=yield t.restart.call(this,e);return this.checkForSilence(),i})}startMonitor(){xe()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},wr)))}setProcessor(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.trackChangeLock.lock();try{if(!rt()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.internalStopProcessor());const r={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(r),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(I.TrackProcessorUpdate,this.processor)}finally{i()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return f(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(r=>{r.type==="outbound-rtp"&&(i={type:"audio",streamId:r.id,packetsSent:r.packetsSent,packetsLost:r.packetsLost,bytesSent:r.bytesSent,timestamp:r.timestamp,roundTripTime:r.roundTripTime,jitter:r.jitter})}),i})}checkForSilence(){return f(this,void 0,void 0,function*(){const e=yield Fo(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(I.AudioSilenceDetected)),e})}}function Lh(n,e,t){switch(n.kind){case"audio":return new $t(n,e,!1,void 0,t);case"video":return new Qt(n,e,!1,t);default:throw new Je("unsupported track type: ".concat(n.kind))}}const Nh=Object.values(Ht),Uh=Object.values(ei),Fh=Object.values(bn),jh=[Ht.h180,Ht.h360],Bh=[ei.h180,ei.h360],Vh=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,r;return new Z(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)/((r=t.fps)!==null&&r!==void 0?r:30))))),t.fps,n.encoding.priority)}),Ir=["q","h","f"];function Dr(n,e,t,i){var r,s;let a=i==null?void 0:i.videoEncoding;n&&(a=i==null?void 0:i.screenShareEncoding);const o=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,d=i==null?void 0:i.videoCodec;if(!a&&!o&&!c||!e||!t)return[{}];a||(a=Kh(n,e,t,d),q.debug("using video encoding",a));const u=a.maxFramerate,l=new Z(e,t,a.maxBitrate,a.maxFramerate,a.priority);if(c&&it(d)){const v=new sc(c),p=[];if(v.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const S=Me();if(kn()||rt()||(S==null?void 0:S.name)==="Chrome"&&$e(S==null?void 0:S.version,"113")<0){const k=v.suffix=="h"?2:3,R=Gl(S);for(let w=0;w<v.spatial;w+=1)p.push({rid:Ir[2-w],maxBitrate:a.maxBitrate/Math.pow(k,w),maxFramerate:l.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,w):void 0});p[0].scalabilityMode=c}else p.push({maxBitrate:a.maxBitrate,maxFramerate:l.encoding.maxFramerate,scalabilityMode:c});return l.encoding.priority&&(p[0].priority=l.encoding.priority,p[0].networkPriority=l.encoding.priority),q.debug("using svc encoding",{encodings:p}),p}if(!o)return[a];let h=[];n?h=(r=rc(i==null?void 0:i.screenShareSimulcastLayers))!==null&&r!==void 0?r:ic(n,l):h=(s=rc(i==null?void 0:i.videoSimulcastLayers))!==null&&s!==void 0?s:ic(n,l);let m;if(h.length>0){const v=h[0];h.length>1&&([,m]=h);const p=Math.max(e,t);if(p>=960&&m)return Mr(e,t,[v,m,l],u);if(p>=480)return Mr(e,t,[v,l],u)}return Mr(e,t,[l])}function qh(n,e,t){var i,r,s,a;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&q.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const o=n.mediaStreamTrack.getSettings(),c=(i=o.width)!==null&&i!==void 0?i:(r=n.dimensions)===null||r===void 0?void 0:r.width,d=(s=o.height)!==null&&s!==void 0?s:(a=n.dimensions)===null||a===void 0?void 0:a.height;return n.source===C.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),Dr(n.source===C.Source.ScreenShare,c,d,t)}function Kh(n,e,t,i){const r=zh(n,e,t);let{encoding:s}=r[0];const a=Math.max(e,t);for(let o=0;o<r.length;o+=1){const c=r[o];if(s=c.encoding,c.width>=a)break}if(i)switch(i){case"av1":case"h265":s=Object.assign({},s),s.maxBitrate=s.maxBitrate*.7;break;case"vp9":s=Object.assign({},s),s.maxBitrate=s.maxBitrate*.85;break}return s}function zh(n,e,t){if(n)return Fh;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?Nh:Uh}function ic(n,e){if(n)return Vh(e);const{width:t,height:i}=e,r=t>i?t/i:i/t;return Math.abs(r-16/9)<Math.abs(r-4/3)?jh:Bh}function Mr(n,e,t,i){const r=[];if(t.forEach((s,a)=>{if(a>=Ir.length)return;const o=Math.min(n,e),d={rid:Ir[a],scaleResolutionDownBy:Math.max(1,o/Math.min(s.width,s.height)),maxBitrate:s.encoding.maxBitrate},u=i&&s.encoding.maxFramerate?Math.min(i,s.encoding.maxFramerate):s.encoding.maxFramerate;u&&(d.maxFramerate=u);const l=xt()||a===0;s.encoding.priority&&l&&(d.priority=s.encoding.priority,d.networkPriority=s.encoding.priority),r.push(d)}),rt()&&Mo()==="ios"){let s;r.forEach(o=>{s?o.maxFramerate&&o.maxFramerate>s&&(s=o.maxFramerate):s=o.maxFramerate});let a=!0;r.forEach(o=>{var c;o.maxFramerate!=s&&(a&&(a=!1,q.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),q.info('Setting framerate of encoding "'.concat((c=o.rid)!==null&&c!==void 0?c:"",'" to ').concat(s)),o.maxFramerate=s)})}return r}function rc(n){if(n)return n.sort((e,t)=>{const{encoding:i}=e,{encoding:r}=t;return i.maxBitrate>r.maxBitrate?1:i.maxBitrate<r.maxBitrate?-1:i.maxBitrate===r.maxBitrate&&i.maxFramerate&&r.maxFramerate?i.maxFramerate>r.maxFramerate?1:-1:0})}class sc{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 Wh(n){return n.source===C.Source.ScreenShare||n.constraints.height&&kt(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const Gh=5e3;class Qt extends _r{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,r=arguments.length>3?arguments[3]:void 0;super(e,C.Kind.Video,t,i,r),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>f(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let s;try{s=yield this.getSenderStats()}catch(c){this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:c}));return}const a=new Map(s.map(c=>[c.rid,c])),o=s.some(c=>c.qualityLimitationReason==="cpu");if(o!==this.isCpuConstrained&&(this.isCpuConstrained=o,this.isCpuConstrained&&this.emit(I.CpuConstrained)),this.prevStats){let c=0;a.forEach((d,u)=>{var l;const h=(l=this.prevStats)===null||l===void 0?void 0:l.get(u);c+=ai(d,h)}),this._currentBitrate=c}this.prevStats=a}),this.senderLock=new we}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!xe())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()},wr))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return f(this,void 0,void 0,function*(){var t,i,r,s,a;yield e.pauseUpstream.call(this);try{for(var o=!0,c=ut(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;o=!0)s=d.value,o=!1,yield(a=s.sender)===null||a===void 0?void 0:a.replaceTrack(null)}catch(u){i={error:u}}finally{try{!o&&!t&&(r=c.return)&&(yield r.call(c))}finally{if(i)throw i.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return f(this,void 0,void 0,function*(){var t,i,r,s,a;yield e.resumeUpstream.call(this);try{for(var o=!0,c=ut(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;o=!0){s=d.value,o=!1;const u=s;yield(a=u.sender)===null||a===void 0?void 0:a.replaceTrack(u.mediaStreamTrack)}}catch(u){i={error:u}}finally{try{!o&&!t&&(r=c.return)&&(yield r.call(c))}finally{if(i)throw i.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return f(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===C.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 f(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source===C.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 f(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(r=>{var s;if(r.type==="outbound-rtp"){const a={type:"video",streamId:r.id,frameHeight:r.frameHeight,frameWidth:r.frameWidth,framesPerSecond:r.framesPerSecond,framesSent:r.framesSent,firCount:r.firCount,pliCount:r.pliCount,nackCount:r.nackCount,packetsSent:r.packetsSent,bytesSent:r.bytesSent,qualityLimitationReason:r.qualityLimitationReason,qualityLimitationDurations:r.qualityLimitationDurations,qualityLimitationResolutionChanges:r.qualityLimitationResolutionChanges,rid:(s=r.rid)!==null&&s!==void 0?s:r.id,retransmittedPacketsSent:r.retransmittedPacketsSent,targetBitrate:r.targetBitrate,timestamp:r.timestamp},o=i.get(r.remoteId);o&&(a.jitter=o.jitter,a.packetsLost=o.packetsLost,a.roundTripTime=o.roundTripTime),t.push(a)}}),t.sort((r,s)=>{var a,o;return((a=s.frameWidth)!==null&&a!==void 0?a:0)-((o=r.frameWidth)!==null&&o!==void 0?o:0)}),t})}setPublishingQuality(e){const t=[];for(let i=Oe.LOW;i<=Oe.HIGH;i+=1)t.push(new Bi({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(it(this.codec),t)}restartTrack(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a;let o;if(e){const l=fr({video:e});typeof l.video!="boolean"&&(o=l.video)}yield this.restart(o),this.isCpuConstrained=!1;try{for(var c=!0,d=ut(this.simulcastCodecs.values()),u;u=yield d.next(),t=u.done,!t;c=!0){s=u.value,c=!1;const l=s;l.sender&&((a=l.sender.transport)===null||a===void 0?void 0:a.state)!=="closed"&&(l.mediaStreamTrack=this.mediaStreamTrack.clone(),yield l.sender.replaceTrack(l.mediaStreamTrack))}}catch(l){i={error:l}}finally{try{!c&&!t&&(r=d.return)&&(yield r.call(d))}finally{if(i)throw i.error}}})}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return f(this,arguments,void 0,function(i){var r=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var a,o,c,d,u,l;if(yield t.setProcessor.call(r,i,s),!((u=r.processor)===null||u===void 0)&&u.processedTrack)try{for(var h=!0,m=ut(r.simulcastCodecs.values()),v;v=yield m.next(),a=v.done,!a;h=!0)d=v.value,h=!1,yield(l=d.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}catch(p){o={error:p}}finally{try{!h&&!a&&(c=m.return)&&(yield c.call(m))}finally{if(o)throw o.error}}}()})}setDegradationPreference(e){return f(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)},Gh))}setPublishingCodecs(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a,o,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(it(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const d=[];try{for(t=!0,i=ut(e);r=yield i.next(),s=r.done,!s;t=!0){c=r.value,t=!1;const u=c;if(!this.codec||this.codec===u.codec)yield this.setPublishingLayers(it(u.codec),u.qualities);else{const l=this.simulcastCodecs.get(u.codec);if(this.log.debug("try setPublishingCodec for ".concat(u.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:l})),!l||!l.sender){for(const h of u.qualities)if(h.enabled){d.push(u.codec);break}}else l.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(u.codec),this.logContext),yield ac(l.sender,l.encodings,u.qualities,this.senderLock,it(u.codec),this.log,this.logContext))}}}catch(u){a={error:u}}finally{try{!t&&!s&&(o=i.return)&&(yield o.call(i))}finally{if(a)throw a.error}}return d})}setPublishingLayers(e,t){return f(this,void 0,void 0,function*(){if(this.optimizeForPerformance){this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:t}));return}this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),!(!this.sender||!this.encodings)&&(yield ac(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext))})}prioritizePerformance(){return f(this,void 0,void 0,function*(){if(!this.sender)throw new Error("sender not found");const e=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;const t=this.sender.getParameters();t.encodings=t.encodings.map((i,r)=>{var s;return Object.assign(Object.assign({},i),{active:r===0,scaleResolutionDownBy:Math.max(1,Math.ceil(((s=this.mediaStreamTrack.getSettings().height)!==null&&s!==void 0?s:360)/360)),scalabilityMode:r===0&&it(this.codec)?"L1T3":void 0,maxFramerate:r===0?15:0,maxBitrate:r===0?i.maxBitrate:0})}),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:t.encodings})),this.encodings=t.encodings,yield this.sender.setParameters(t)}catch(t){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:t})),this.optimizeForPerformance=!1}finally{e()}})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Io()&&this.isInBackground&&this.source===C.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function ac(n,e,t,i,r,s,a){return f(this,void 0,void 0,function*(){const o=yield i.lock();s.debug("setPublishingLayersForSender",Object.assign(Object.assign({},a),{sender:n,qualities:t,senderEncodings:e}));try{const c=n.getParameters(),{encodings:d}=c;if(!d)return;if(d.length!==e.length){s.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},a),{encodings:d,senderEncodings:e}));return}let u=!1;!1&&d[0].scalabilityMode||(r&&t.some(m=>m.enabled)&&t.forEach(m=>m.enabled=!0),d.forEach((h,m)=>{var v;let p=(v=h.rid)!==null&&v!==void 0?v:"";p===""&&(p="q");const S=oc(p),k=t.find(R=>R.quality===S);k&&h.active!==k.enabled&&(u=!0,h.active=k.enabled,s.debug("setting layer ".concat(k.quality," to ").concat(h.active?"enabled":"disabled"),a),xt()&&(k.enabled?(h.scaleResolutionDownBy=e[m].scaleResolutionDownBy,h.maxBitrate=e[m].maxBitrate,h.maxFrameRate=e[m].maxFrameRate):(h.scaleResolutionDownBy=4,h.maxBitrate=10,h.maxFrameRate=2)))})),u&&(c.encodings=d,s.debug("setting encodings",Object.assign(Object.assign({},a),{encodings:c.encodings})),yield n.setParameters(c))}finally{o()}})}function oc(n){switch(n){case"f":return Oe.HIGH;case"h":return Oe.MEDIUM;case"q":return Oe.LOW;default:return Oe.HIGH}}function cc(n,e,t,i){if(!t)return[new It({quality:Oe.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const r=t[0].scalabilityMode,s=new sc(r),a=[],o=s.suffix=="h"?1.5:2,c=s.suffix=="h"?2:3;for(let d=0;d<s.spatial;d+=1)a.push(new It({quality:Math.min(Oe.HIGH,s.spatial-1)-d,width:Math.ceil(n/Math.pow(o,d)),height:Math.ceil(e/Math.pow(o,d)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,d)):0,ssrc:0}));return a}return t.map(r=>{var s,a,o;const c=(s=r.scaleResolutionDownBy)!==null&&s!==void 0?s:1;let d=oc((a=r.rid)!==null&&a!==void 0?a:"");return new It({quality:d,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(o=r.maxBitrate)!==null&&o!==void 0?o:0,ssrc:0})})}const dc="_lossy",uc="_reliable",Hh=2*1e3,Or="leave-reconnect",Jh=3e4;var Xe;(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"})(Xe||(Xe={}));class $h extends nt.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Er.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=Xe.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=q,this.reliableDataSequence=1,this.reliableMessageBuffer=new zo,this.reliableReceivedState=new kh(Jh),this.handleDataChannel=i=>f(this,[i],void 0,function(r){var s=this;let{channel:a}=r;return function*(){if(a){if(a.label===uc)s.reliableDCSub=a;else if(a.label===dc)s.lossyDCSub=a;else return;s.log.debug("on data channel ".concat(a.id,", ").concat(a.label),s.logContext),a.onmessage=s.handleDataMessage}}()}),this.handleDataMessage=i=>f(this,void 0,void 0,function*(){var r,s;const a=yield this.dataProcessLock.lock();try{let o;if(i.data instanceof ArrayBuffer)o=i.data;else if(i.data instanceof Blob)o=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const c=De.fromBinary(new Uint8Array(o));if(c.sequence>0&&c.participantSid!==""){const d=this.reliableReceivedState.get(c.participantSid);if(d&&c.sequence<=d)return;this.reliableReceivedState.set(c.participantSid,c.sequence)}((r=c.value)===null||r===void 0?void 0:r.case)==="speaker"?this.emit(O.ActiveSpeakersUpdate,c.value.value.speakers):(((s=c.value)===null||s===void 0?void 0:s.case)==="user"&&Yh(c,c.value.value),this.emit(O.DataPacketReceived,c))}finally{a()}}),this.handleDataError=i=>{const s=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:a}=i.error;this.log.error("DataChannel error on ".concat(s,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:a}))}else this.log.error("Unknown DataChannel error on ".concat(s),Object.assign(Object.assign({},this.logContext),{event:i}))},this.handleBufferedAmountLow=i=>{const s=i.currentTarget.maxRetransmits===0?V.LOSSY:V.RELIABLE;this.updateAndEmitDCBufferStatus(s)},this.handleDisconnect=(i,r)=>{if(this._isClosed)return;this.log.warn("".concat(i," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const s=c=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(c,"ms. giving up"),this.logContext),this.emit(O.Disconnected),this.close()},a=Date.now()-this.reconnectStart;let o=this.getNextRetryDelay({elapsedMs:a,retryCount:this.reconnectAttempts});if(o===null){s(a);return}i===Or&&(o=0),this.log.debug("reconnecting in ".concat(o,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=ve.setTimeout(()=>this.attemptReconnect(r).finally(()=>this.reconnectTimeout=void 0),o)},this.waitForRestarted=()=>new Promise((i,r)=>{this.pcState===Xe.Connected&&i();const s=()=>{this.off(O.Disconnected,a),i()},a=()=>{this.off(O.Restarted,s),r()};this.once(O.Restarted,s),this.once(O.Disconnected,a)}),this.updateAndEmitDCBufferStatus=i=>{const r=this.isBufferStatusLow(i);typeof r<"u"&&r!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,r),this.emit(O.DCBufferStatusChanged,r,i))},this.isBufferStatusLow=i=>{const r=this.dataChannelForKind(i);if(r)return i===V.RELIABLE&&this.reliableMessageBuffer.alignBufferedAmount(r.bufferedAmount),r.bufferedAmount<=r.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===ie.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(Bt.RR_SIGNAL_DISCONNECTED))},this.log=tt((t=e.loggerName)!==null&&t!==void 0?t:je.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new vr(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new we,this.dataProcessLock=new we,this.dcBufferStatus=new Map([[V.LOSSY,!0],[V.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(O.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(O.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(O.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(O.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(O.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(O.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(O.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(O.SignalRequestResponse,i)}get logContext(){var e,t,i,r,s,a;return{room:(t=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||t===void 0?void 0:t.name,roomID:(r=(i=this.latestJoinResponse)===null||i===void 0?void 0:i.room)===null||r===void 0?void 0:r.sid,participant:(a=(s=this.latestJoinResponse)===null||s===void 0?void 0:s.participant)===null||a===void 0?void 0:a.identity,pID:this.participantSid}}join(e,t,i,r){return f(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 s=yield this.client.join(e,t,i,r);return this._isClosed=!1,this.latestJoinResponse=s,this.subscriberPrimary=s.subscriberPrimary,this.pcManager||(yield this.configure(s)),(!this.subscriberPrimary||s.fastPublish)&&this.negotiate(),this.clientConfiguration=s.clientConfiguration,this.emit(O.SignalConnected,s),s}catch(s){if(s instanceof ee&&s.reason===H.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,r);throw s}})}close(){return f(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(O.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return f(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,this.reliableMessageBuffer=new zo,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupClient(){return f(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new Je("a track with the same ID has already been published");return new Promise((t,i)=>{const r=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(new ee("publication of local track timed out, no response from server",H.Timeout))},1e4);this.pendingTrackResolvers[e.cid]={resolve:s=>{clearTimeout(r),t(s)},reject:()=>{clearTimeout(r),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 f(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 f(this,void 0,void 0,function*(){var t,i;if(this.pcManager&&this.pcManager.currentState!==ue.NEW)return;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid;const r=this.makeRTCConfiguration(e);this.pcManager=new Ih(r,e.subscriberPrimary,this.loggerOptions),this.emit(O.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(s,a)=>{this.client.sendIceCandidate(s,a)},this.pcManager.onPublisherOffer=(s,a)=>{this.client.sendOffer(s,a)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(s,a,o)=>f(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(s),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),s===ue.CONNECTED){const u=this.pcState===Xe.New;this.pcState=Xe.Connected,u&&this.emit(O.Connected,e)}else s===ue.FAILED&&this.pcState===Xe.Connected&&(this.pcState=Xe.Disconnected,this.handleDisconnect("peerconnection failed",o==="failed"?Bt.RR_SUBSCRIBER_FAILED:Bt.RR_PUBLISHER_FAILED));const c=this.client.isDisconnected||this.client.currentState===ie.RECONNECTING,d=[ue.FAILED,ue.CLOSING,ue.CLOSED].includes(s);c&&d&&!this._isClosed&&this.emit(O.Offline)}),this.pcManager.onTrack=s=>{this.emit(O.MediaTrackAdded,s.track,s.streams[0],s.receiver)},Qh((i=e.serverInfo)===null||i===void 0?void 0:i.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(e,t)=>f(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,t))}),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,t)=>f(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;const i=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);i&&this.client.sendAnswer(i,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(O.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(O.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(O.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(O.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(O.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",Bt.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 zt.DISCONNECT:this.emit(O.Disconnected,e==null?void 0:e.reason),this.close();break;case zt.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Or);break;case zt.RESUME:this.handleDisconnect(Or)}}}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 r=[];e.iceServers.forEach(s=>{const a={urls:s.urls};s.username&&(a.username=s.username),s.credential&&(a.credential=s.credential),r.push(a)}),i.iceServers=r}return e.clientConfiguration&&e.clientConfiguration.forceRelay===ln.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(dc,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(uc,{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 f(this,void 0,void 0,function*(){if(ti())return yield this.createTransceiverRTCRtpSender(e,t,i);if(ir())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new fe("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(ti())return this.createSimulcastTransceiverSender(e,t,i,r);if(ir())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new fe("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");const r=[];e.mediaStream&&r.push(e.mediaStream),mt(e)&&(e.codec=t.videoCodec);const s={direction:"sendonly",streams:r};return i&&(s.sendEncodings=i),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,s)).sender})}createSimulcastTransceiverSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");const s={direction:"sendonly"};r&&(s.sendEncodings=r);const a=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,s);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,a.sender),a.sender})}createRTCRtpSender(e){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return f(this,void 0,void 0,function*(){var t,i,r;if(!this._isClosed){if(this.attemptingReconnect){q.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===ln.DISABLED||((r=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&r!==void 0?r:ue.NEW)===ue.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(s){this.reconnectAttempts+=1;let a=!0;s instanceof fe?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:s})),a=!1):s instanceof Yt||(this.fullReconnectOnNext=!0),a?this.handleDisconnect("reconnect",Bt.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(O.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 f(this,void 0,void 0,function*(){var t,i,r;try{if(!this.url||!this.token)throw new fe("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(O.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let s;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new Yt;s=yield this.join(e??this.url,this.token,this.signalOpts)}catch(a){throw a instanceof ee&&a.reason===H.NotAllowed?new fe("could not reconnect, token might be expired"):new Yt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(O.SignalRestarted,s),yield this.waitForPCReconnected(),this.client.currentState!==ie.CONNECTED)throw new Yt("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(O.Restarted)}catch(s){const a=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(a){yield this.restartConnection(a);return}else throw(r=this.regionUrlProvider)===null||r===void 0||r.resetAttempts(),s}})}resumeConnection(e){return f(this,void 0,void 0,function*(){var t;if(!this.url||!this.token)throw new fe("could not reconnect, url or token not saved");if(!this.pcManager)throw new fe("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(O.Resuming);let i;try{this.setupSignalClientCallbacks(),i=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(r){let s="";throw r instanceof Error&&(s=r.message,this.log.error(r.message,Object.assign(Object.assign({},this.logContext),{error:r}))),r instanceof ee&&r.reason===H.NotAllowed?new fe("could not reconnect, token might be expired"):r instanceof ee&&r.reason===H.LeaveRequest?r:new Yt(s)}if(this.emit(O.SignalResumed),i){const r=this.makeRTCConfiguration(i);this.pcManager.updateConfiguration(r),this.latestJoinResponse&&(this.latestJoinResponse.serverInfo=i.serverInfo)}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!==ie.CONNECTED)throw new Yt("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(),i!=null&&i.lastMessageSeq&&this.resendReliableMessagesForResume(i.lastMessageSeq),this.emit(O.Resumed)})}waitForPCInitialConnection(e,t){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return f(this,void 0,void 0,function*(){this.pcState=Xe.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Ae(Hh),!this.pcManager)throw new fe("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=Xe.Connected}catch(e){throw this.pcState=Xe.Disconnected,new ee("could not establish PC connection, ".concat(e.message),H.InternalError)}})}publishRpcResponse(e,t,i,r){return f(this,void 0,void 0,function*(){const s=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcResponse",value:new Ys({requestId:t,value:r?{case:"error",value:r.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(s,V.RELIABLE)})}publishRpcAck(e,t){return f(this,void 0,void 0,function*(){const i=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcAck",value:new Qs({requestId:t})}});yield this.sendDataPacket(i,V.RELIABLE)})}sendDataPacket(e,t){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(t),t===V.RELIABLE&&(e.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);const i=e.toBinary(),r=this.dataChannelForKind(t);if(r){if(t===V.RELIABLE&&this.reliableMessageBuffer.push({data:i,sequence:e.sequence}),this.attemptingReconnect)return;r.send(i)}this.updateAndEmitDCBufferStatus(t)})}resendReliableMessagesForResume(e){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(V.RELIABLE);const t=this.dataChannelForKind(V.RELIABLE);t&&(this.reliableMessageBuffer.popToSequence(e),this.reliableMessageBuffer.getAll().forEach(i=>{t.send(i.data)})),this.updateAndEmitDCBufferStatus(V.RELIABLE)})}waitForBufferStatusLow(e){return new Promise((t,i)=>f(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const r=()=>i("Engine closed");for(this.once(O.Closing,r);!this.dcBufferStatus.get(e);)yield Ae(10);this.off(O.Closing,r),t()}}))}ensureDataTransportConnected(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var s;if(!i.pcManager)throw new fe("PC manager is closed");const a=r?i.pcManager.subscriber:i.pcManager.publisher,o=r?"Subscriber":"Publisher";if(!a)throw new ee("".concat(o," connection not set"),H.InternalError);let c=!1;!r&&!i.dataChannelForKind(t,r)&&(i.createDataChannels(),c=!0),!c&&!r&&!i.pcManager.publisher.isICEConnected&&i.pcManager.publisher.getICEConnectionState()!=="checking"&&(c=!0),c&&i.negotiate();const d=i.dataChannelForKind(t,r);if((d==null?void 0:d.readyState)==="open")return;const u=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<u;){if(a.isICEConnected&&((s=i.dataChannelForKind(t,r))===null||s===void 0?void 0:s.readyState)==="open")return;yield Ae(50)}throw new ee("could not establish ".concat(o," connection, state: ").concat(a.getICEConnectionState()),H.InternalError)}()})}ensurePublisherConnected(e){return f(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ue.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return f(this,void 0,void 0,function*(){return new Promise((e,t)=>f(this,void 0,void 0,function*(){if(!this.pcManager){t(new Qn("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const i=new AbortController,r=()=>{i.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&t("cannot negotiate on closed engine"),this.on(O.Closing,r),this.pcManager.publisher.once(Jt.RTPVideoPayloadTypes,s=>{const a=new Map;s.forEach(o=>{const c=o.codec.toLowerCase();Zl(c)&&a.set(o.payload,c)}),this.emit(O.RTPVideoMapUpdate,a)});try{yield this.pcManager.negotiate(i),e()}catch(s){s instanceof Qn&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",Bt.RR_UNKNOWN),t(s)}finally{this.off(O.Closing,r)}}))})}dataChannelForKind(e,t){if(t){if(e===V.LOSSY)return this.lossyDCSub;if(e===V.RELIABLE)return this.reliableDCSub}else{if(e===V.LOSSY)return this.lossyDC;if(e===V.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,r;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const s=this.pcManager.subscriber.getLocalDescription(),a=this.pcManager.subscriber.getRemoteDescription(),o=(r=(i=this.signalOpts)===null||i===void 0?void 0:i.autoSubscribe)!==null&&r!==void 0?r:!0,c=new Array,d=new Array;e.forEach(u=>{u.isDesired!==o&&c.push(u.trackSid),u.isEnabled||d.push(u.trackSid)}),this.client.sendSyncState(new ga({answer:s?si({sdp:s.sdp,type:s.type}):void 0,offer:a?si({sdp:a.sdp,type:a.type}):void 0,subscription:new Bn({trackSids:c,subscribe:!o,participantTracks:[]}),publishTracks:oh(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:d,datachannelReceiveStates:this.reliableReceivedState.map((u,l)=>new va({publisherSid:l,lastSeq:u}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,r)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new ya({label:i.label,id:i.id,target:r}))};return t(this.dataChannelForKind(V.LOSSY),He.PUBLISHER),t(this.dataChannelForKind(V.RELIABLE),He.PUBLISHER),t(this.dataChannelForKind(V.LOSSY,!0),He.SUBSCRIBER),t(this.dataChannelForKind(V.RELIABLE,!0),He.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&ve.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xe()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xe()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class Yt extends Error{}function Qh(n){return n!==void 0&&n>13}function Yh(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 Ar{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 sr(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return f(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(r=>r.url===i.url));if(t.length>0){const i=t[0];return this.attemptedRegions.push(i),q.debug("next region: ".concat(i.region)),i.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return f(this,void 0,void 0,function*(){const t=yield fetch("".concat(Xh(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 ee("Could not fetch region settings: ".concat(t.statusText),t.status===401?H.NotAllowed:H.InternalError,t.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function Xh(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class lc{get info(){return this._info}validateBytesReceived(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!(typeof this.totalByteSize!="number"||this.totalByteSize===0)){if(e&&this.bytesReceived<this.totalByteSize)throw new ft("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),Ve.Incomplete);if(this.bytesReceived>this.totalByteSize)throw new ft("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),Ve.LengthExceeded)}}constructor(e,t,i,r){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=r}}class Zh extends lc{handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();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();let t=new st,i=null,r=null;if(this.signal){const a=this.signal;r=()=>{var o;(o=t.reject)===null||o===void 0||o.call(t,a.reason)},a.addEventListener("abort",r),i=a}const s=()=>{e.releaseLock(),i&&r&&i.removeEventListener("abort",r),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var a,o;try{const{done:c,value:d}=yield Promise.race([e.read(),t.promise,(o=(a=this.outOfBandFailureRejectingFuture)===null||a===void 0?void 0:a.promise)!==null&&o!==void 0?o:new Promise(()=>{})]);return c?(this.validateBytesReceived(!0),{done:!0,value:void 0}):(this.handleChunkReceived(d),{done:!1,value:d.content})}catch(c){throw s(),c}}),return(){return f(this,void 0,void 0,function*(){return s(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var i,r,s,a;let o=new Set;const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,u=ut(c),l;l=yield u.next(),i=l.done,!i;d=!0){a=l.value,d=!1;const h=a;o.add(h)}}catch(h){r={error:h}}finally{try{!d&&!i&&(s=u.return)&&(yield s.call(u))}finally{if(r)throw r.error}}return Array.from(o)}()})}}class ef extends lc{constructor(e,t,i,r){super(e,t,i,r),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=ii(e.chunkIndex),r=this.receivedChunks.get(i);if(r&&r.version>e.version)return;this.receivedChunks.set(i,e),this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();const s=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,s)}[Symbol.asyncIterator](){const e=this.reader.getReader(),t=new TextDecoder("utf-8",{fatal:!0});let i=new st,r=null,s=null;if(this.signal){const o=this.signal;s=()=>{var c;(c=i.reject)===null||c===void 0||c.call(i,o.reason)},o.addEventListener("abort",s),r=o}const a=()=>{e.releaseLock(),r&&s&&r.removeEventListener("abort",s),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var o,c;try{const{done:d,value:u}=yield Promise.race([e.read(),i.promise,(c=(o=this.outOfBandFailureRejectingFuture)===null||o===void 0?void 0:o.promise)!==null&&c!==void 0?c:new Promise(()=>{})]);if(d)return this.validateBytesReceived(!0),{done:!0,value:void 0};{this.handleChunkReceived(u);let l;try{l=t.decode(u.content)}catch(h){throw new ft("Cannot decode datastream chunk ".concat(u.chunkIndex," as text: ").concat(h),Ve.DecodeFailed)}return{done:!1,value:l}}}catch(d){throw a(),d}}),return(){return f(this,void 0,void 0,function*(){return a(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var i,r,s,a;let o="";const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,u=ut(c),l;l=yield u.next(),i=l.done,!i;d=!0)a=l.value,d=!1,o+=a}catch(h){r={error:h}}finally{try{!d&&!i&&(s=u.return)&&(yield s.call(u))}finally{if(r)throw r.error}}return o}()})}}class tf{constructor(){this.log=q,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map}registerTextStreamHandler(e,t){if(this.textStreamHandlers.has(e))throw new ft('A text stream handler for topic "'.concat(e,'" has already been set.'),Ve.HandlerAlreadyRegistered);this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new ft('A byte stream handler for topic "'.concat(e,'" has already been set.'),Ve.HandlerAlreadyRegistered);this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearHandlersAndControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear(),this.byteStreamHandlers.clear(),this.textStreamHandlers.clear()}validateParticipantHasNoActiveDataStreams(e){var t,i,r,s;const a=Array.from(this.textStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e),o=Array.from(this.byteStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e);if(a.length>0||o.length>0){const c=new ft("Participant ".concat(e," unexpectedly disconnected in the middle of sending data"),Ve.AbnormalEnd);for(const[d,u]of o)(i=(t=u.outOfBandFailureRejectingFuture).reject)===null||i===void 0||i.call(t,c),this.byteStreamControllers.delete(d);for(const[d,u]of a)(s=(r=u.outOfBandFailureRejectingFuture).reject)===null||s===void 0||s.call(r,c),this.textStreamControllers.delete(d)}}handleDataStreamPacket(e){return f(this,void 0,void 0,function*(){switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity);case"streamChunk":return this.handleStreamChunk(e.value.value);case"streamTrailer":return this.handleStreamTrailer(e.value.value);default:throw new Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}})}handleStreamHeader(e,t){return f(this,void 0,void 0,function*(){var i;if(e.contentHeader.case==="byteHeader"){const r=this.byteStreamHandlers.get(e.topic);if(!r){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let s;const a=new st,o={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:ii(e.timestamp),attributes:e.attributes},c=new ReadableStream({start:d=>{if(s=d,this.textStreamControllers.has(e.streamId))throw new ft("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Ve.AlreadyOpened);this.byteStreamControllers.set(e.streamId,{info:o,controller:s,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});r(new Zh(o,c,ii(e.totalLength),a),{identity:t})}else if(e.contentHeader.case==="textHeader"){const r=this.textStreamHandlers.get(e.topic);if(!r){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let s;const a=new st,o={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},c=new ReadableStream({start:d=>{if(s=d,this.textStreamControllers.has(e.streamId))throw new ft("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Ve.AlreadyOpened);this.textStreamControllers.set(e.streamId,{info:o,controller:s,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});r(new ef(o,c,ii(e.totalLength),a),{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))}}class hc{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 f(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 nf extends hc{}class rf extends hc{}const fc=15e3;class sf{constructor(e,t){this.engine=e,this.log=t}setupEngine(e){this.engine=e}sendText(e,t){return f(this,void 0,void 0,function*(){var i;const r=crypto.randomUUID(),a=new TextEncoder().encode(e).byteLength,o=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(o?o.length+1:1).fill(0),d=(l,h)=>{var m;c[h]=l;const v=c.reduce((p,S)=>p+S,0);(m=t==null?void 0:t.onProgress)===null||m===void 0||m.call(t,v)},u=yield this.streamText({streamId:r,totalSize:a,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:o,attributes:t==null?void 0:t.attributes});return yield u.write(e),d(1,0),yield u.close(),t!=null&&t.attachments&&o&&(yield Promise.all(t.attachments.map((l,h)=>f(this,void 0,void 0,function*(){return this._sendFile(o[h],l,{topic:t.topic,mimeType:l.type,onProgress:m=>{d(m,h+1)}})})))),u.info})}streamText(e){return f(this,void 0,void 0,function*(){var t,i;const r=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),s={id:r,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 Mi({streamId:r,mimeType:s.mimeType,topic:s.topic,timestamp:Nt(s.timestamp),totalLength:Nt(e==null?void 0:e.totalSize),attributes:s.attributes,contentHeader:{case:"textHeader",value:new aa({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"?Di.UPDATE:Di.CREATE})}}),o=e==null?void 0:e.destinationIdentities,c=new De({destinationIdentities:o,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(c,V.RELIABLE);let d=0;const u=this.engine,l=new WritableStream({write(v){return f(this,void 0,void 0,function*(){for(const p of sh(v,fc)){yield u.waitForBufferStatusLow(V.RELIABLE);const S=new Oi({content:p,streamId:r,chunkIndex:Nt(d)}),k=new De({destinationIdentities:o,value:{case:"streamChunk",value:S}});yield u.sendDataPacket(k,V.RELIABLE),d+=1}})},close(){return f(this,void 0,void 0,function*(){const v=new Ai({streamId:r}),p=new De({destinationIdentities:o,value:{case:"streamTrailer",value:v}});yield u.sendDataPacket(p,V.RELIABLE)})},abort(v){console.log("Sink error:",v)}});let h=()=>f(this,void 0,void 0,function*(){yield m.close()});u.once(O.Closing,h);const m=new nf(l,s,()=>this.engine.off(O.Closing,h));return m})}sendFile(e,t){return f(this,void 0,void 0,function*(){const i=crypto.randomUUID();return yield this._sendFile(i,e,t),{id:i}})}_sendFile(e,t,i){return f(this,void 0,void 0,function*(){var r;const s=yield this.streamBytes({streamId:e,totalSize:t.size,name:t.name,mimeType:(r=i==null?void 0:i.mimeType)!==null&&r!==void 0?r:t.type,topic:i==null?void 0:i.topic,destinationIdentities:i==null?void 0:i.destinationIdentities}),a=t.stream().getReader();for(;;){const{done:o,value:c}=yield a.read();if(o)break;yield s.write(c)}return yield s.close(),s.info})}streamBytes(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a;const o=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),c=e==null?void 0:e.destinationIdentities,d={id:o,mimeType:(i=e==null?void 0:e.mimeType)!==null&&i!==void 0?i:"application/octet-stream",topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",timestamp:Date.now(),attributes:e==null?void 0:e.attributes,size:e==null?void 0:e.totalSize,name:(s=e==null?void 0:e.name)!==null&&s!==void 0?s:"unknown"},u=new Mi({totalLength:Nt((a=d.size)!==null&&a!==void 0?a:0),mimeType:d.mimeType,streamId:o,topic:d.topic,timestamp:Nt(Date.now()),attributes:d.attributes,contentHeader:{case:"byteHeader",value:new oa({name:d.name})}}),l=new De({destinationIdentities:c,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(l,V.RELIABLE);let h=0;const m=new we,v=this.engine,p=this.log,S=new WritableStream({write(R){return f(this,void 0,void 0,function*(){const w=yield m.lock();let g=0;try{for(;g<R.byteLength;){const b=R.slice(g,g+fc);yield v.waitForBufferStatusLow(V.RELIABLE);const P=new De({destinationIdentities:c,value:{case:"streamChunk",value:new Oi({content:b,streamId:o,chunkIndex:Nt(h)})}});yield v.sendDataPacket(P,V.RELIABLE),h+=1,g+=b.byteLength}}finally{w()}})},close(){return f(this,void 0,void 0,function*(){const R=new Ai({streamId:o}),w=new De({destinationIdentities:c,value:{case:"streamTrailer",value:R}});yield v.sendDataPacket(w,V.RELIABLE)})},abort(R){p.error("Sink error:",R)}});return new rf(S,d)})}}class xr extends C{constructor(e,t,i,r,s){super(e,i,s),this.sid=t,this.receiver=r}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?I.Muted:I.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(I.Ended,this))};e.addEventListener("removetrack",t)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return f(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(),wr)),ch()&&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:r,rtpTimestamp:s}=i;s&&this.rtpTimestamp!==s&&(this.emit(I.TimeSyncUpdate,{timestamp:r,rtpTimestamp:s}),this.rtpTimestamp=s)}};e()}}class mc extends xr{constructor(e,t,i,r,s,a){super(e,t,C.Kind.Audio,i,a),this.monitorReceiver=()=>f(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const o=yield this.getReceiverStats();o&&this.prevStats&&this.receiver&&(this._currentBitrate=ai(o,this.prevStats)),this.prevStats=o}),this.audioContext=r,this.webAudioPluginNodes=[],s&&(this.sinkId=s.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;rt()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(rt())return 1;let e=0;return this.attachedElements.forEach(t=>{t.volume>e&&(e=t.volume)}),e}setSinkId(e){return f(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(t=>{if(rr(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&rr(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(r=>{i.connect(r),i=r}),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(I.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(r=>{this.emit(I.AudioPlaybackFailed,r)})}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 f(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 Lr=100;class pc extends xr{constructor(e,t,i,r,s){super(e,t,C.Kind.Video,i,s),this.elementInfos=[],this.monitorReceiver=()=>f(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=ai(a,this.prevStats)),this.prevStats=a}),this.debouncedHandleResize=Sr(()=>{this.updateDimensions()},Lr),this.adaptiveStreamSettings=r}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}setStreamState(e){super.setStreamState(e),console.log("setStreamState",e),e===C.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?At(this._mediaStreamTrack,t):Ot(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 af(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 f(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,i="",r=new Map;return e.forEach(s=>{s.type==="inbound-rtp"?(i=s.codecId,t={type:"video",streamId:s.id,framesDecoded:s.framesDecoded,framesDropped:s.framesDropped,framesReceived:s.framesReceived,packetsReceived:s.packetsReceived,packetsLost:s.packetsLost,frameWidth:s.frameWidth,frameHeight:s.frameHeight,pliCount:s.pliCount,firCount:s.firCount,nackCount:s.nackCount,jitter:s.jitter,timestamp:s.timestamp,bytesReceived:s.bytesReceived,decoderImplementation:s.decoderImplementation}):s.type==="codec"&&r.set(s.id,s)}),t&&i!==""&&r.get(i)&&(t.mimeType=r.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 f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(e){var t,i;const r=this.elementInfos.reduce((c,d)=>Math.max(c,d.visibilityChangedAt||0),0),s=!((i=(t=this.adaptiveStreamSettings)===null||t===void 0?void 0:t.pauseVideoInBackground)!==null&&i!==void 0)||i?this.isInBackground:!1,a=this.elementInfos.some(c=>c.pictureInPicture),o=this.elementInfos.some(c=>c.visible)&&!s||a;if(!(this.lastVisible===o&&!e)){if(!o&&Date.now()-r<Lr){ve.setTimeout(()=>{this.updateVisibility()},Lr);return}this.lastVisible=o,this.emit(I.VisibilityChanged,o,this)}}updateDimensions(){var e,t;let i=0,r=0;const s=this.getPixelDensity();for(const a of this.elementInfos){const o=a.width()*s,c=a.height()*s;o+c>i+r&&(i=o,r=c)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===i&&((t=this.lastDimensions)===null||t===void 0?void 0:t.height)===r||(this.lastDimensions={width:i,height:r},this.emit(I.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?Oo():t||(Oo()>2?2:1)}}class af{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var r;const{target:s,isIntersecting:a}=i;s===this.element&&(this.isIntersecting=a,this.isPiP=En(this.element),this.visibilityChangedAt=Date.now(),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this))},this.onEnterPiP=()=>{var i,r,s;(r=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP),this.isPiP=En(this.element),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=En(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Nr(e),this.isPiP=xe()&&En(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Nr(this.element),this.isPiP=En(this.element),this.element.handleResize=()=>{var r;(r=this.handleResize)===null||r===void 0||r.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,xo().observe(this.element),Ao().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,r,s;(e=xo())===null||e===void 0||e.unobserve(this.element),(t=Ao())===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),(s=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||s===void 0||s.removeEventListener("pagehide",this.onLeavePiP)}}function En(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Nr(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Nr(n,e){const t=e||window;let i=n.offsetTop,r=n.offsetLeft;const s=n.offsetWidth,a=n.offsetHeight,{hidden:o}=n,{display:c}=getComputedStyle(n);for(;n.offsetParent;)n=n.offsetParent,i+=n.offsetTop,r+=n.offsetLeft;return i<t.pageYOffset+t.innerHeight&&r<t.pageXOffset+t.innerWidth&&i+a>t.pageYOffset&&r+s>t.pageXOffset&&!o&&c!=="none"}class at extends nt.EventEmitter{constructor(e,t,i,r){var s;super(),this.metadataMuted=!1,this.encryption=Le.NONE,this.log=q,this.handleMuted=()=>{this.emit(I.Muted)},this.handleUnmuted=()=>{this.emit(I.Unmuted)},this.log=tt((s=r==null?void 0:r.loggerName)!==null&&s!==void 0?s:je.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=i,this.source=C.Source.Unknown}setTrack(e){this.track&&(this.track.off(I.Muted,this.handleMuted),this.track.off(I.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(I.Muted,this.handleMuted),e.on(I.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),K(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Le.NONE}get audioTrack(){if(Qe(this.track))return this.track}get videoTrack(){if(mt(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=C.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===C.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={}))})(at||(at={}));class oi extends at{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,t,i,r){super(e,t.sid,t.name,r),this.track=void 0,this.handleTrackEnded=()=>{this.emit(I.Ended)},this.handleCpuConstrained=()=>{this.track&&mt(this.track)&&this.emit(I.CpuConstrained,this.track)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&(this.track.off(I.Ended,this.handleTrackEnded),this.track.off(I.CpuConstrained,this.handleCpuConstrained)),super.setTrack(e),e&&(e.on(I.Ended,this.handleTrackEnded),e.on(I.CpuConstrained,this.handleCpuConstrained))}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 f(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return f(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return f(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return f(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(Qe(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(ge.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(ge.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(ge.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(ge.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(ge.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(ge.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function Pn(n,e){return f(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:r,optionsWithoutProcessor:s}=Bo(n);let a=s.audio,o=s.video;if(i&&typeof s.audio=="object"&&(s.audio.processor=i),r&&typeof s.video=="object"&&(s.video.processor=r),n.audio&&typeof s.audio=="object"&&typeof s.audio.deviceId=="string"){const l=s.audio.deviceId;s.audio.deviceId={exact:l},t=!0,a=Object.assign(Object.assign({},s.audio),{deviceId:{ideal:l}})}if(s.video&&typeof s.video=="object"&&typeof s.video.deviceId=="string"){const l=s.video.deviceId;s.video.deviceId={exact:l},t=!0,o=Object.assign(Object.assign({},s.video),{deviceId:{ideal:l}})}(s.audio===!0||typeof s.audio=="object"&&!s.audio.deviceId)&&(s.audio={deviceId:"default"}),s.video===!0?s.video={deviceId:"default"}:typeof s.video=="object"&&!s.video.deviceId&&(s.video.deviceId="default");const c=Uo(s,Xo,Zo),d=fr(c),u=navigator.mediaDevices.getUserMedia(d);s.audio&&(ye.userMediaPromiseMap.set("audioinput",u),u.catch(()=>ye.userMediaPromiseMap.delete("audioinput"))),s.video&&(ye.userMediaPromiseMap.set("videoinput",u),u.catch(()=>ye.userMediaPromiseMap.delete("videoinput")));try{const l=yield u;return yield Promise.all(l.getTracks().map(h=>f(this,void 0,void 0,function*(){const m=h.kind==="audio";let v=m?c.audio:c.video;(typeof v=="boolean"||!v)&&(v={});let p;const S=m?d.audio:d.video;typeof S!="boolean"&&(p=S);const k=h.getSettings().deviceId;p!=null&&p.deviceId&&kt(p.deviceId)!==k?p.deviceId=k:p||(p={deviceId:k});const R=Lh(h,p,e);return R.kind===C.Kind.Video?R.source=C.Source.Camera:R.kind===C.Kind.Audio&&(R.source=C.Source.Microphone),R.mediaStream=l,Qe(R)&&i?yield R.setProcessor(i):mt(R)&&r&&(yield R.setProcessor(r)),R})))}catch(l){if(!t)throw l;return Pn(Object.assign(Object.assign({},n),{audio:a,video:o}),e)}})}function gc(n){return f(this,void 0,void 0,function*(){return(yield Pn({audio:!1,video:n??!0}))[0]})}function vc(n){return f(this,void 0,void 0,function*(){return(yield Pn({audio:n??!0,video:!1}))[0]})}function of(n){return f(this,void 0,void 0,function*(){if(n===void 0&&(n={}),n.resolution===void 0&&!_o()&&(n.resolution=bn.h1080fps30.resolution),navigator.mediaDevices.getDisplayMedia===void 0)throw new gn("getDisplayMedia not supported");const e=jo(n),t=yield navigator.mediaDevices.getDisplayMedia(e),i=t.getVideoTracks();if(i.length===0)throw new Je("no video track found");const r=new Qt(i[0],void 0,!1);r.source=C.Source.ScreenShare;const s=[r];if(t.getAudioTracks().length>0){const a=new $t(t.getAudioTracks()[0],void 0,!1);a.source=C.Source.ScreenShareAudio,s.push(a)}return s})}var gt;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(gt||(gt={}));function cf(n){switch(n){case un.EXCELLENT:return gt.Excellent;case un.GOOD:return gt.Good;case un.POOR:return gt.Poor;case un.LOST:return gt.Lost;default:return gt.Unknown}}class Ur extends nt.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===qt.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===Vt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,r,s,a){let o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qt.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=gt.Unknown,this.log=q,this.log=tt((c=a==null?void 0:a.loggerName)!==null&&c!==void 0?c:je.Participant),this.loggerOptions=a,this.setMaxListeners(100),this.sid=e,this.identity=t,this.name=i,this.metadata=r,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=o,this._attributes=s??{}}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 st,this.once(M.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(C.Source.Camera);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(C.Source.Microphone);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(C.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===Vt.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==Vt.ACTIVE&&this.emit(M.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(M.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(M.ParticipantNameChanged,e)}_setAttributes(e){const t=dh(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(M.AttributesChanged,t)}setPermissions(e){var t,i,r,s,a,o;const c=this.permissions,d=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!==((r=this.permissions)===null||r===void 0?void 0:r.canPublishData)||e.hidden!==((s=this.permissions)===null||s===void 0?void 0:s.hidden)||e.recorder!==((a=this.permissions)===null||a===void 0?void 0:a.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((u,l)=>{var h;return u!==((h=this.permissions)===null||h===void 0?void 0:h.canPublishSources[l])})||e.canSubscribeMetrics!==((o=this.permissions)===null||o===void 0?void 0:o.canSubscribeMetrics);return this.permissions=e,d&&this.emit(M.ParticipantPermissionsChanged,c),d}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(M.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=cf(e),t!==this._connectionQuality&&this.emit(M.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=>Qe(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(I.Muted,()=>{this.emit(M.TrackMuted,e)}),e.on(I.Unmuted,()=>{this.emit(M.TrackUnmuted,e)});const t=e;switch(t.track&&(t.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case C.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case C.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function df(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 ma({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||[]})}class yc extends Ur{constructor(e,t,i,r,s,a){super(e,t,void 0,void 0,void 0,{loggerName:r.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Le.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new st)},this.handleReconnected=()=>{var o,c;(c=(o=this.reconnectFuture)===null||o===void 0?void 0:o.resolve)===null||c===void 0||c.call(o),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var o,c,d,u,l,h;this.reconnectFuture&&(this.reconnectFuture.promise.catch(m=>this.log.warn(m.message,this.logContext)),(c=(o=this.reconnectFuture)===null||o===void 0?void 0:o.reject)===null||c===void 0||c.call(o,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0),this.signalConnectedFuture&&((u=(d=this.signalConnectedFuture).reject)===null||u===void 0||u.call(d,"Got disconnected without signal connected"),this.signalConnectedFuture=void 0),(h=(l=this.activeAgentFuture)===null||l===void 0?void 0:l.reject)===null||h===void 0||h.call(l,"Got disconnected without active agent present"),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=o=>{var c,d;o.participant&&this.updateInfo(o.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new st),(d=(c=this.signalConnectedFuture).resolve)===null||d===void 0||d.call(c)},this.handleSignalRequestResponse=o=>{const{requestId:c,reason:d,message:u}=o,l=this.pendingSignalRequests.get(c);l&&(d!==Vi.OK&&l.reject(new Zi(u,d)),this.pendingSignalRequests.delete(c))},this.handleDataPacket=o=>{switch(o.value.case){case"rpcResponse":let c=o.value.value,d=null,u=null;c.value.case==="payload"?d=c.value.value:c.value.case==="error"&&(u=oe.fromProto(c.value.value)),this.handleIncomingRpcResponse(c.requestId,d,u);break;case"rpcAck":let l=o.value.value;this.handleIncomingRpcAck(l.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(o=>df(o)))},this.onTrackUnmuted=o=>{this.onTrackMuted(o,o.isUpstreamPaused)},this.onTrackMuted=(o,c)=>{if(c===void 0&&(c=!0),!o.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),K(o)));return}this.engine.updateMuteStatus(o.sid,c)},this.onTrackUpstreamPaused=o=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),K(o))),this.onTrackMuted(o,!0)},this.onTrackUpstreamResumed=o=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),K(o))),this.onTrackMuted(o,o.isMuted)},this.onTrackFeatureUpdate=o=>{const c=this.audioTrackPublications.get(o.sid);if(!c){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(o.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(c.trackSid,c.getTrackFeatures())},this.onTrackCpuConstrained=(o,c)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),K(c))),this.emit(M.LocalTrackCpuConstrained,o,c)},this.handleSubscribedQualityUpdate=o=>f(this,void 0,void 0,function*(){var c,d,u,l,h;if(!(!((h=this.roomOptions)===null||h===void 0)&&h.dynacast))return;const m=this.videoTrackPublications.get(o.trackSid);if(!m){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:o.trackSid}));return}if(!m.videoTrack)return;const v=yield m.videoTrack.setPublishingCodecs(o.subscribedCodecs);try{for(var p=!0,S=ut(v),k;k=yield S.next(),c=k.done,!c;p=!0){l=k.value,p=!1;const R=l;Co(R)&&(this.log.debug("publish ".concat(R," for ").concat(m.videoTrack.sid),Object.assign(Object.assign({},this.logContext),K(m))),yield this.publishAdditionalCodecForTrack(m.videoTrack,R,m.options))}}catch(R){d={error:R}}finally{try{!p&&!c&&(u=S.return)&&(yield u.call(S))}finally{if(d)throw d.error}}}),this.handleLocalTrackUnpublished=o=>{const c=this.trackPublications.get(o.trackSid);if(!c){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:o.trackSid}));return}this.unpublishTrack(c.track)},this.handleTrackEnded=o=>f(this,void 0,void 0,function*(){if(o.source===C.Source.ScreenShare||o.source===C.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),K(o))),this.unpublishTrack(o);else if(o.isUserProvided)yield o.mute();else if(pt(o)||St(o))try{if(xe())try{const c=yield navigator==null?void 0:navigator.permissions.query({name:o.source===C.Source.Camera?"camera":"microphone"});if(c&&c.state==="denied")throw this.log.warn("user has revoked access to ".concat(o.source),Object.assign(Object.assign({},this.logContext),K(o))),c.onchange=()=>{c.state!=="denied"&&(o.isMuted||o.restartTrack(),c.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}o.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),K(o))),pt(o)?yield o.restartTrack({deviceId:"default"}):yield o.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),K(o))),yield o.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=i,this.roomOptions=r,this.setupEngine(i),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=s,this.roomOutgoingDataStreamManager=a}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Le.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){var t;this.engine=e,this.engine.on(O.RemoteMute,(i,r)=>{const s=this.trackPublications.get(i);!s||!s.track||(r?s.mute():s.unmute())}),!((t=this.signalConnectedFuture)===null||t===void 0)&&t.isResolved&&(this.signalConnectedFuture=void 0),this.engine.on(O.Connected,this.handleReconnected).on(O.SignalConnected,this.handleSignalConnected).on(O.SignalRestarted,this.handleReconnected).on(O.SignalResumed,this.handleReconnected).on(O.Restarting,this.handleReconnecting).on(O.Resuming,this.handleReconnecting).on(O.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(O.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(O.Closing,this.handleClosing).on(O.SignalRequestResponse,this.handleSignalRequestResponse).on(O.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return f(this,arguments,void 0,function(t){var i=this;let{metadata:r,name:s,attributes:a}=t;return function*(){return new Promise((o,c)=>f(i,void 0,void 0,function*(){var d,u;try{let l=!1;const h=yield this.engine.client.sendUpdateLocalMetadata((d=r??this.metadata)!==null&&d!==void 0?d:"",(u=s??this.name)!==null&&u!==void 0?u:"",a),m=performance.now();for(this.pendingSignalRequests.set(h,{resolve:o,reject:v=>{c(v),l=!0},values:{name:s,metadata:r,attributes:a}});performance.now()-m<5e3&&!l;){if((!s||this.name===s)&&(!r||this.metadata===r)&&(!a||Object.entries(a).every(v=>{let[p,S]=v;return this.attributes[p]===S||S===""&&!this.attributes[p]}))){this.pendingSignalRequests.delete(h),o();return}yield Ae(50)}c(new Zi("Request to update local metadata timed out","TimeoutError"))}catch(l){l instanceof Error&&c(l)}}))}()})}setCameraEnabled(e,t,i){return this.setTrackEnabled(C.Source.Camera,e,t,i)}setMicrophoneEnabled(e,t,i){return this.setTrackEnabled(C.Source.Microphone,e,t,i)}setScreenShareEnabled(e,t,i){return this.setTrackEnabled(C.Source.ScreenShare,e,t,i)}setPermissions(e){const t=this.permissions,i=super.setPermissions(e);return i&&t&&this.emit(M.ParticipantPermissionsChanged,t),i}setE2EEEnabled(e){return f(this,void 0,void 0,function*(){this.encryptionType=e?Le.GCM:Le.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,r){return f(this,void 0,void 0,function*(){var s,a;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let o=this.getTrackPublication(e);if(t)if(o)yield o.unmute();else{let c;if(this.pendingPublishing.has(e)){const d=yield this.waitForPendingPublicationOfSource(e);return d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield d==null?void 0:d.unmute(),d}this.pendingPublishing.add(e);try{switch(e){case C.Source.Camera:c=yield this.createTracks({video:(s=i)!==null&&s!==void 0?s:!0});break;case C.Source.Microphone:c=yield this.createTracks({audio:(a=i)!==null&&a!==void 0?a:!0});break;case C.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new Je(e)}}catch(d){throw c==null||c.forEach(u=>{u.stop()}),d instanceof Error&&this.emit(M.MediaDevicesError,d,pr(e)),this.pendingPublishing.delete(e),d}for(const d of c){const u=Object.assign(Object.assign({},this.roomOptions.publishDefaults),i);e===C.Source.Microphone&&Qe(d)&&u.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),d.startPreConnectBuffer())}try{const d=[];for(const l of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),K(l))),d.push(this.publishTrack(l,r));[o]=yield Promise.all(d)}catch(d){throw c==null||c.forEach(u=>{u.stop()}),d}finally{this.pendingPublishing.delete(e)}}else if(!(o!=null&&o.track)&&this.pendingPublishing.has(e)&&(o=yield this.waitForPendingPublicationOfSource(e),o||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),o&&o.track)if(e===C.Source.ScreenShare){o=yield this.unpublishTrack(o.track);const c=this.getTrackPublication(C.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield o.mute();return o})}enableCameraAndMicrophone(){return f(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(C.Source.Camera)||this.pendingPublishing.has(C.Source.Microphone))){this.pendingPublishing.add(C.Source.Camera),this.pendingPublishing.add(C.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(C.Source.Camera),this.pendingPublishing.delete(C.Source.Microphone)}}})}createTracks(e){return f(this,void 0,void 0,function*(){var t,i;e??(e={});const r=Uo(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 Pn(r,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(o=>(Qe(o)&&(this.microphoneError=void 0,o.setAudioContext(this.audioContext),o.source=C.Source.Microphone,this.emit(M.AudioStreamAcquired)),mt(o)&&(this.cameraError=void 0,o.source=C.Source.Camera),o))}catch(s){throw s instanceof Error&&(e.audio&&(this.microphoneError=s),e.video&&(this.cameraError=s)),s}})}createScreenTracks(e){return f(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new gn("getDisplayMedia not supported");e.resolution===void 0&&!_o()&&(e.resolution=bn.h1080fps30.resolution);const t=jo(e),i=yield navigator.mediaDevices.getDisplayMedia(t),r=i.getVideoTracks();if(r.length===0)throw new Je("no video track found");const s=new Qt(r[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=C.Source.ScreenShare,e.contentHint&&(s.mediaStreamTrack.contentHint=e.contentHint);const a=[s];if(i.getAudioTracks().length>0){this.emit(M.AudioStreamAcquired);const o=new $t(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});o.source=C.Source.ScreenShareAudio,a.push(o)}return a})}publishTrack(e,t){return f(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,t)})}publishOrRepublishTrack(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var o,c,d,u;pt(i)&&i.setAudioContext(s.audioContext),yield(o=s.reconnectFuture)===null||o===void 0?void 0:o.promise,s.republishPromise&&!a&&(yield s.republishPromise),Tt(i)&&s.pendingPublishPromises.has(i)&&(yield s.pendingPublishPromises.get(i));let l;if(i instanceof MediaStreamTrack)l=i.getConstraints();else{l=i.constraints;let k;switch(i.source){case C.Source.Microphone:k="audioinput";break;case C.Source.Camera:k="videoinput"}k&&s.activeDeviceMap.has(k)&&(l=Object.assign(Object.assign({},l),{deviceId:s.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new $t(i,l,!0,s.audioContext,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;case"video":i=new Qt(i,l,!0,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;default:throw new Je("unsupported MediaStreamTrack kind ".concat(i.kind))}else i.updateLoggerOptions({loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});let h;if(s.trackPublications.forEach(k=>{k.track&&k.track===i&&(h=k)}),h)return s.log.warn("track has already been published, skipping",Object.assign(Object.assign({},s.logContext),K(h))),h;const m="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,v=(c=r==null?void 0:r.forceStereo)!==null&&c!==void 0?c:m;v&&(r||(r={}),r.dtx===void 0&&s.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},s.logContext),K(i))),r.red===void 0&&s.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(d=r.dtx)!==null&&d!==void 0||(r.dtx=!1),(u=r.red)!==null&&u!==void 0||(r.red=!1));const p=Object.assign(Object.assign({},s.roomOptions.publishDefaults),r);!Hl()&&s.roomOptions.e2ee&&(s.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({},s.logContext)),p.simulcast=!1),p.source&&(i.source=p.source);const S=new Promise((k,R)=>f(s,void 0,void 0,function*(){try{if(this.engine.client.currentState!==ie.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:K(i)}));const w=setTimeout(()=>{R(new Xi("publishing rejected as engine not connected within timeout",408))},15e3);yield this.waitUntilEngineConnected(),clearTimeout(w);const g=yield this.publish(i,p,v);k(g)}else try{const w=yield this.publish(i,p,v);k(w)}catch(w){R(w)}}catch(w){R(w)}}));s.pendingPublishPromises.set(i,S);try{return yield S}catch(k){throw k}finally{s.pendingPublishPromises.delete(i)}}()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new st),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),K(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(r=>uh(r)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),K(e))),!1)}publish(e,t,i){return f(this,void 0,void 0,function*(){var r,s,a,o,c,d,u,l,h,m;if(!this.hasPermissionsToPublish(e))throw new Xi("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(A=>Tt(e)&&A.source===e.source)&&e.source!==C.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),K(e))),t.stopMicTrackOnMute&&Qe(e)&&(e.stopOnMute=!0),e.source===C.Source.ScreenShare&&xt()&&(t.simulcast=!1),t.videoCodec==="av1"&&!Po()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!wo()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=Cr),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(A=>t.videoCodec===Sn(A.mime))||(t.videoCodec=Sn(this.enabledPublishVideoCodecs[0].mime)));const p=t.videoCodec;e.on(I.Muted,this.onTrackMuted),e.on(I.Unmuted,this.onTrackUnmuted),e.on(I.Ended,this.handleTrackEnded),e.on(I.UpstreamPaused,this.onTrackUpstreamPaused),e.on(I.UpstreamResumed,this.onTrackUpstreamResumed),e.on(I.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const S=[],k=!(!((r=t.dtx)!==null&&r!==void 0)||r),R=e.getSourceTrackSettings();R.autoGainControl&&S.push(ge.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&S.push(ge.TF_ECHO_CANCELLATION),R.noiseSuppression&&S.push(ge.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&S.push(ge.TF_STEREO),k&&S.push(ge.TF_NO_DTX),pt(e)&&e.hasPreConnectBuffer&&S.push(ge.TF_PRECONNECT_BUFFER);const w=new Ni({cid:e.mediaStreamTrack.id,name:t.name,type:C.kindToProto(e.kind),muted:e.isMuted,source:C.sourceToProto(e.source),disableDtx:k,encryption:this.encryptionType,stereo:i,disableRed:this.isE2EEEnabled||!(!((s=t.red)!==null&&s!==void 0)||s),stream:t==null?void 0:t.stream,backupCodecPolicy:t==null?void 0:t.backupCodecPolicy,audioFeatures:S});let g;if(e.kind===C.Kind.Video){let A={width:0,height:0};try{A=yield e.waitForDimensions()}catch{const D=(o=(a=this.roomOptions.videoCaptureDefaults)===null||a===void 0?void 0:a.resolution)!==null&&o!==void 0?o:Ht.h720.resolution;A={width:D.width,height:D.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{dims:A}))}w.width=A.width,w.height=A.height,St(e)&&(it(p)&&(e.source===C.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),K(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),w.simulcastCodecs=[new Li({codec:p,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:Cr}),t.backupCodec&&p!==t.backupCodec.codec&&w.encryption===Le.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new Li({codec:t.backupCodec.codec,cid:""})))),g=Dr(e.source===C.Source.ScreenShare,w.width,w.height,t),w.layers=cc(w.width,w.height,g,it(t.videoCodec))}else e.kind===C.Kind.Audio&&(g=[{maxBitrate:(d=t.audioPreset)===null||d===void 0?void 0:d.maxBitrate,priority:(l=(u=t.audioPreset)===null||u===void 0?void 0:u.priority)!==null&&l!==void 0?l:"high",networkPriority:(m=(h=t.audioPreset)===null||h===void 0?void 0:h.priority)!==null&&m!==void 0?m:"high"}]);if(!this.engine||this.engine.isClosed)throw new fe("cannot publish track when not connected");const b=()=>f(this,void 0,void 0,function*(){var A,T,D;if(!this.engine.pcManager)throw new fe("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,g),this.emit(M.LocalSenderCreated,e.sender,e),St(e)&&((A=t.degradationPreference)!==null&&A!==void 0||(t.degradationPreference=Wh(e)),e.setDegradationPreference(t.degradationPreference)),g)if(xt()&&e.kind===C.Kind.Audio){let N;for(const J of this.engine.pcManager.publisher.getTransceivers())if(J.sender===e.sender){N=J;break}N&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:N,codec:"opus",maxbr:!((T=g[0])===null||T===void 0)&&T.maxBitrate?g[0].maxBitrate/1e3:0})}else e.codec&&it(e.codec)&&(!((D=g[0])===null||D===void 0)&&D.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:g[0].maxBitrate/1e3});yield this.engine.negotiate()});let P;const L=new Promise((A,T)=>f(this,void 0,void 0,function*(){var D;try{P=yield this.engine.addTrack(w),A(P)}catch(N){e.sender&&(!((D=this.engine.pcManager)===null||D===void 0)&&D.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(J=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{error:J}))})),T(N)}}));if(this.enabledPublishVideoCodecs.length>0)P=(yield Promise.all([L,b()]))[0];else{P=yield L;let A;if(P.codecs.forEach(T=>{A===void 0&&(A=T.mimeType)}),A&&e.kind===C.Kind.Video){const T=Sn(A);T!==p&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{codec:T})),t.videoCodec=T,g=Dr(e.source===C.Source.ScreenShare,w.width,w.height,t))}yield b()}const U=new oi(e.kind,P,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(U.on(I.CpuConstrained,A=>this.onTrackCpuConstrained(A,U)),U.options=t,e.sid=P.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:g,trackInfo:P})),St(e)?e.startMonitor(this.engine.client):pt(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(M.LocalTrackPublished,U),pt(e)&&P.audioFeatures.includes(ge.TF_PRECONNECT_BUFFER)){const A=e.getPreConnectBuffer(),T=e.getPreConnectBufferMimeType();this.on(M.LocalTrackSubscribed,D=>{if(D.trackSid===P.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),K(e))),e.stopPreConnectBuffer()}}),A&&new Promise((N,J)=>f(this,void 0,void 0,function*(){var Q,Y,me,Te,be,ae;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),K(e)));const B=setTimeout(()=>{J(new Error("agent not active within 10 seconds"))},1e4),F=yield this.waitUntilActiveAgentPresent();clearTimeout(B),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),K(e)));const X=yield this.streamBytes({name:"preconnect-buffer",mimeType:T,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[F.identity],attributes:{trackId:U.trackSid,sampleRate:String((be=R.sampleRate)!==null&&be!==void 0?be:"48000"),channels:String((ae=R.channelCount)!==null&&ae!==void 0?ae:"1")}});try{for(var ce=!0,Se=ut(A),Ke;Ke=yield Se.next(),Q=Ke.done,!Q;ce=!0){Te=Ke.value,ce=!1;const Ce=Te;yield X.write(Ce)}}catch(Ce){Y={error:Ce}}finally{try{!ce&&!Q&&(me=Se.return)&&(yield me.call(Se))}finally{if(Y)throw Y.error}}yield X.close(),N()}catch(B){J(B)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),K(e)))}).catch(N=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{error:N}))})}return U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return f(this,void 0,void 0,function*(){var r;if(this.encryptionType!==Le.NONE)return;let s;if(this.trackPublications.forEach(m=>{m.track&&m.track===e&&(s=m)}),!s)throw new Je("track is not published");if(!St(e))throw new Je("track is not a video track");const a=Object.assign(Object.assign({},(r=this.roomOptions)===null||r===void 0?void 0:r.publishDefaults),i),o=qh(e,t,a);if(!o){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),K(e)));return}const c=e.addSimulcastTrack(t,o);if(!c)return;const d=new Ni({cid:c.mediaStreamTrack.id,type:C.kindToProto(e.kind),muted:e.isMuted,source:C.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:a.videoCodec,cid:c.mediaStreamTrack.id}]});if(d.layers=cc(d.width,d.height,o),!this.engine||this.engine.isClosed)throw new fe("cannot publish track when not connected");const u=()=>f(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,a,o),yield this.engine.negotiate()}),h=(yield Promise.all([this.engine.addTrack(d),u()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:o,trackInfo:h}))})}unpublishTrack(e,t){return f(this,void 0,void 0,function*(){var i,r;if(Tt(e)){const d=this.pendingPublishPromises.get(e);d&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),K(e))),yield d)}const s=this.getPublicationForTrack(e),a=s?K(s):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),a)),!s||!s.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),a));return}e=s.track,e.off(I.Muted,this.onTrackMuted),e.off(I.Unmuted,this.onTrackUnmuted),e.off(I.Ended,this.handleTrackEnded),e.off(I.UpstreamPaused,this.onTrackUpstreamPaused),e.off(I.UpstreamResumed,this.onTrackUpstreamResumed),e.off(I.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),t===void 0&&(t=(r=(i=this.roomOptions)===null||i===void 0?void 0:i.stopLocalTrackOnUnpublish)!==null&&r!==void 0?r:!0),t?e.stop():e.stopMonitor();let o=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ue.FAILED&&c)try{for(const d of this.engine.pcManager.publisher.getTransceivers())d.sender===c&&(d.direction="inactive",o=!0);if(this.engine.removeTrack(c)&&(o=!0),St(e)){for(const[,d]of e.simulcastCodecs)d.sender&&(this.engine.removeTrack(d.sender)&&(o=!0),d.sender=void 0);e.simulcastCodecs.clear()}}catch(d){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),a),{error:d}))}switch(this.trackPublications.delete(s.trackSid),s.kind){case C.Kind.Audio:this.audioTrackPublications.delete(s.trackSid);break;case C.Kind.Video:this.videoTrackPublications.delete(s.trackSid);break}return this.emit(M.LocalTrackUnpublished,s),s.setTrack(void 0),o&&(yield this.engine.negotiate()),s})}unpublishTracks(e){return f(this,void 0,void 0,function*(){return(yield Promise.all(e.map(i=>this.unpublishTrack(i)))).filter(i=>!!i)})}republishAllTracks(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){i.republishPromise&&(yield i.republishPromise),i.republishPromise=new Promise((s,a)=>f(i,void 0,void 0,function*(){try{const o=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),o.push(c))}),yield Promise.all(o.map(c=>f(this,void 0,void 0,function*(){const d=c.track;yield this.unpublishTrack(d,!1),r&&!d.isMuted&&d.source!==C.Source.ScreenShare&&d.source!==C.Source.ScreenShareAudio&&(pt(d)||St(d))&&!d.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:c.trackSid})),yield d.restartTrack()),yield this.publishOrRepublishTrack(d,c.options,!0)}))),s()}catch(o){a(o)}finally{this.republishPromise=void 0}})),yield i.republishPromise}()})}publishData(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const s=r.reliable?V.RELIABLE:V.LOSSY,a=r.destinationIdentities,o=r.topic,c=new De({kind:s,value:{case:"user",value:new Hs({participantIdentity:i.identity,payload:t,destinationIdentities:a,topic:o})}});yield i.engine.sendDataPacket(c,s)}()})}publishDtmf(e,t){return f(this,void 0,void 0,function*(){const i=new De({kind:V.RELIABLE,value:{case:"sipDtmf",value:new Js({code:e,digit:t})}});yield this.engine.sendDataPacket(i,V.RELIABLE)})}sendChatMessage(e,t){return f(this,void 0,void 0,function*(){const i={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:t==null?void 0:t.attachments},r=new De({value:{case:"chatMessage",value:new Ii(Object.assign(Object.assign({},i),{timestamp:se.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(r,V.RELIABLE),this.emit(M.ChatMessage,i),i})}editChatMessage(e,t){return f(this,void 0,void 0,function*(){const i=Object.assign(Object.assign({},t),{message:e,editTimestamp:Date.now()}),r=new De({value:{case:"chatMessage",value:new Ii(Object.assign(Object.assign({},i),{timestamp:se.parse(i.timestamp),editTimestamp:se.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(r,V.RELIABLE),this.emit(M.ChatMessage,i),i})}sendText(e,t){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendText(e,t)})}streamText(e){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamText(e)})}sendFile(e,t){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendFile(e,t)})}streamBytes(e){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamBytes(e)})}performRpc(e){return f(this,arguments,void 0,function(t){var i=this;let{destinationIdentity:r,method:s,payload:a,responseTimeout:o=1e4}=t;return function*(){return new Promise((d,u)=>f(i,void 0,void 0,function*(){var l,h,m,v;if(Pr(a)>ec){u(oe.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((h=(l=this.engine.latestJoinResponse)===null||l===void 0?void 0:l.serverInfo)===null||h===void 0)&&h.version&&$e((v=(m=this.engine.latestJoinResponse)===null||m===void 0?void 0:m.serverInfo)===null||v===void 0?void 0:v.version,"1.8.0")<0){u(oe.builtIn("UNSUPPORTED_SERVER"));return}const p=crypto.randomUUID();yield this.publishRpcRequest(r,p,s,a,o-2e3);const S=setTimeout(()=>{this.pendingAcks.delete(p),u(oe.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(p),clearTimeout(k)},2e3);this.pendingAcks.set(p,{resolve:()=>{clearTimeout(S)},participantIdentity:r});const k=setTimeout(()=>{this.pendingResponses.delete(p),u(oe.builtIn("RESPONSE_TIMEOUT"))},o);this.pendingResponses.set(p,{resolve:(R,w)=>{clearTimeout(k),this.pendingAcks.has(p)&&(console.warn("RPC response received before ack",p),this.pendingAcks.delete(p),clearTimeout(S)),w?u(w):d(R??"")},participantIdentity:r})}))}()})}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 r=this.pendingResponses.get(e);r?(r.resolve(t,i),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,t,i,r,s){return f(this,void 0,void 0,function*(){const a=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcRequest",value:new $s({id:t,method:i,payload:r,responseTimeoutMs:s,version:1})}});yield this.engine.sendDataPacket(a,V.RELIABLE)})}handleParticipantDisconnected(e){for(const[t,{participantIdentity:i}]of this.pendingAcks)i===e&&this.pendingAcks.delete(t);for(const[t,{participantIdentity:i,resolve:r}]of this.pendingResponses)i===e&&(r(null,oe.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,r;const s=this.trackPublications.get(t.sid);if(s){const a=s.isMuted||((r=(i=s.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&r!==void 0?r:!1);a!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),K(s)),{mutedOnServer:a})),this.engine.client.sendMuteTrack(t.sid,a))}}),!0):!1}setActiveAgent(e){var t,i,r,s;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):(s=(r=this.activeAgentFuture)===null||r===void 0?void 0:r.reject)===null||s===void 0||s.call(r,"Agent disconnected"),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new st),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const r=i.track;r&&(e instanceof MediaStreamTrack?(pt(r)||St(r))&&r.mediaStreamTrack===e&&(t=i):e===r&&(t=i))}),t}waitForPendingPublicationOfSource(e){return f(this,void 0,void 0,function*(){const i=Date.now();for(;Date.now()<i+1e4;){const r=Array.from(this.pendingPublishPromises.entries()).find(s=>{let[a]=s;return a.source===e});if(r)return r[1];yield Ae(20)}})}}class bc extends at{constructor(e,t,i,r){super(e,t.sid,t.name,r),this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=s=>{this.setTrack(void 0),this.emit(I.Ended,s)},this.handleVisibilityChange=s=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(s),this.logContext),this.visible=s,this.emitTrackUpdate()},this.handleVideoDimensionsChange=s=>{this.log.debug("adaptivestream video dimensions ".concat(s.width,"x").concat(s.height),this.logContext),this.videoDimensionsAdaptiveStream=s,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 r=new Bn({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Zs({participantSid:"",trackSids:[this.trackSid]})]});this.emit(I.UpdateSubscription,r),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?at.SubscriptionStatus.Unsubscribed:super.isSubscribed?at.SubscriptionStatus.Subscribed:at.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?at.PermissionStatus.Allowed:at.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return this.requestedDisabled!==void 0?!this.requestedDisabled:this.isAdaptiveStream?this.visible:!0}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.requestedDisabled===!e||(this.requestedDisabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.requestedMaxQuality===e||(this.requestedMaxQuality=e,this.requestedVideoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var t,i;this.isManualOperationAllowed()&&(((t=this.requestedVideoDimensions)===null||t===void 0?void 0:t.width)===e.width&&((i=this.requestedVideoDimensions)===null||i===void 0?void 0:i.height)===e.height||(lr(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&lr(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var e;return(e=this.requestedMaxQuality)!==null&&e!==void 0?e:Oe.HIGH}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,r=this.track;r!==e&&(r&&(r.off(I.VideoDimensionsChanged,this.handleVideoDimensionsChange),r.off(I.VisibilityChanged,this.handleVisibilityChange),r.off(I.Ended,this.handleEnded),r.detach(),r.stopMonitor(),this.emit(I.Unsubscribed,r)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(I.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(I.VisibilityChanged,this.handleVisibilityChange),e.on(I.Ended,this.handleEnded),this.emit(I.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(I.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?I.Muted:I.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(I.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(I.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return lr(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new da({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===C.Kind.Video){let t=this.requestedVideoDimensions;if(this.videoDimensionsAdaptiveStream!==void 0)if(t)Vo(this.videoDimensionsAdaptiveStream,t)&&(this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream);else if(this.requestedMaxQuality!==void 0&&this.trackInfo){const i=lh(this.trackInfo,this.requestedMaxQuality);i&&Vo(this.videoDimensionsAdaptiveStream,i)&&(this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream)}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream;t?(e.width=Math.ceil(t.width),e.height=Math.ceil(t.height)):this.requestedMaxQuality!==void 0?(this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),e.quality=this.requestedMaxQuality):(this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:Oe.HIGH})),e.quality=Oe.HIGH)}this.emit(I.UpdateSettings,e)}}class wn extends Ur{static fromParticipantInfo(e,t,i){return new wn(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,r,s,a,o){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qt.STANDARD;super(t,i||"",r,s,a,o,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(I.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{settings:t})),this.signalClient.sendUpdateTrackSettings(t)}),e.on(I.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(I.SubscriptionPermissionChanged,t=>{this.emit(M.TrackSubscriptionPermissionChanged,e,t)}),e.on(I.SubscriptionStatusChanged,t=>{this.emit(M.TrackSubscriptionStatusChanged,e,t)}),e.on(I.Subscribed,t=>{this.emit(M.TrackSubscribed,t,e)}),e.on(I.Unsubscribed,t=>{this.emit(M.TrackUnsubscribed,t,e)}),e.on(I.SubscriptionFailed,t=>{this.emit(M.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]:C.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]:C.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,i,r,s,a){let o=this.getTrackPublicationBySid(t);if(o||t.startsWith("TR")||this.trackPublications.forEach(u=>{!o&&e.kind===u.kind.toString()&&(o=u)}),!o){if(a===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(M.TrackSubscriptionFailed,t);return}a===void 0&&(a=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,r,s,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),K(o))),this.emit(M.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let d;return c?d=new pc(e,t,r,s):d=new mc(e,t,r,this.audioContext,this.audioOutput),d.source=o.source,d.isMuted=o.isMuted,d.setMediaStream(i),d.start(),o.setTrack(d),this.volumeMap.has(o.source)&&ri(d)&&Qe(d)&&d.setVolume(this.volumeMap.get(o.source)),o}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const t=new Map,i=new Map;return e.tracks.forEach(r=>{var s,a;let o=this.getTrackPublicationBySid(r.sid);if(o)o.updateInfo(r);else{const c=C.kindFromProto(r.type);if(!c)return;o=new bc(c,r,(s=this.signalClient.connectOptions)===null||s===void 0?void 0:s.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(a=this.loggerOptions)===null||a===void 0?void 0:a.loggerName}),o.updateInfo(r),i.set(r.sid,o);const d=Array.from(this.trackPublications.values()).find(u=>u.source===(o==null?void 0:o.source));d&&o.source!==C.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(o.source),Object.assign(Object.assign({},this.logContext),{oldTrack:K(d),newTrack:K(o)})),this.addTrackPublication(o)}t.set(r.sid,o)}),this.trackPublications.forEach(r=>{t.has(r.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),K(r))),this.unpublishTrack(r.trackSid,!0))}),i.forEach(r=>{this.emit(M.TrackPublished,r)}),!0}unpublishTrack(e,t){const i=this.trackPublications.get(e);if(!i)return;const{track:r}=i;switch(r&&(r.stop(),i.setTrack(void 0)),this.trackPublications.delete(e),i.kind){case C.Kind.Audio:this.audioTrackPublications.delete(e);break;case C.Kind.Video:this.videoTrackPublications.delete(e);break}t&&this.emit(M.TrackUnpublished,i)}setAudioOutput(e){return f(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var r;Qe(i.track)&&ri(i.track)&&t.push(i.track.setSinkId((r=e.deviceId)!==null&&r!==void 0?r:"default"))}),yield Promise.all(t)})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:i})),super.emit(e,...i)}}var $;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})($||($={}));const uf=4*1e3;class Xt extends nt.EventEmitter{constructor(e){var t,i,r,s;if(super(),t=this,this.state=$.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=q,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(a,o,c)=>f(this,void 0,void 0,function*(){var d;if(!Ro())throw rt()?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 u=yield this.disconnectLock.lock();if(this.state===$.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),u(),Promise.resolve();if(this.connectFuture)return u(),this.connectFuture.promise;this.setAndEmitConnectionState($.Connecting),((d=this.regionUrlProvider)===null||d===void 0?void 0:d.getServerUrl().toString())!==a&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),sr(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new Ar(a,o):this.regionUrlProvider.updateToken(o),this.regionUrlProvider.fetchRegionSettings().then(m=>{var v;(v=this.regionUrlProvider)===null||v===void 0||v.setServerReportedRegions(m)}).catch(m=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:m}))}));const l=(m,v,p)=>f(this,void 0,void 0,function*(){var S,k;this.abortController&&this.abortController.abort();const R=new AbortController;this.abortController=R,u==null||u();try{yield this.attemptConnection(p??a,o,c,R),this.abortController=void 0,m()}catch(w){if(this.regionUrlProvider&&w instanceof ee&&w.reason!==H.Cancelled&&w.reason!==H.NotAllowed){let g=null;try{g=yield this.regionUrlProvider.getNextBestRegionUrl((S=this.abortController)===null||S===void 0?void 0:S.signal)}catch(b){if(b instanceof ee&&(b.status===401||b.reason===H.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),v(b);return}}g&&!(!((k=this.abortController)===null||k===void 0)&&k.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(w.message,". Retrying with another region: ").concat(g),this.logContext),this.recreateEngine(),yield l(m,v,g)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Lo(w)),v(w))}else{let g=Fe.UNKNOWN_REASON;w instanceof ee&&(g=Lo(w)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,g),v(w)}}}),h=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new st((m,v)=>{l(m,v,h)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,o,c,d,u,l)=>f(this,void 0,void 0,function*(){var h,m,v;const p=yield c.join(a,o,{autoSubscribe:d.autoSubscribe,adaptiveStream:typeof u.adaptiveStream=="object"?!0:u.adaptiveStream,maxRetries:d.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:d.websocketTimeout},l.signal);let S=p.serverInfo;if(S||(S={version:p.serverVersion,region:p.serverRegion}),this.serverInfo=S,this.log.debug("connected to Livekit Server ".concat(Object.entries(S).map(k=>{let[R,w]=k;return"".concat(R,": ").concat(w)}).join(", ")),{room:(h=p.room)===null||h===void 0?void 0:h.name,roomSid:(m=p.room)===null||m===void 0?void 0:m.sid,identity:(v=p.participant)===null||v===void 0?void 0:v.identity}),!S.version)throw new bo("unknown server version");return S.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),u.dynacast=!1),p}),this.applyJoinResponse=a=>{const o=a.participant;if(this.localParticipant.sid=o.sid,this.localParticipant.identity=o.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([o,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,o,c,d)=>f(this,void 0,void 0,function*(){var u,l;this.state===$.Reconnecting||this.isResuming||!((u=this.engine)===null||u===void 0)&&u.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((l=this.regionUrlProvider)===null||l===void 0)&&l.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Er),c),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const h=yield this.connectSignal(a,o,this.engine,this.connOptions,this.options,d);this.applyJoinResponse(h),this.setupLocalParticipantEvents(),this.emit(_.SignalConnected)}catch(h){yield this.engine.close(),this.recreateEngine();const m=new ee("could not establish signal connection",H.ServerUnreachable);throw h instanceof Error&&(m.message="".concat(m.message,": ").concat(h.message)),h instanceof ee&&(m.reason=h.reason,m.status=h.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:h})),m}if(d.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new ee("Connection attempt aborted",H.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,d)}catch(h){throw yield this.engine.close(),this.recreateEngine(),h}xe()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xe()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState($.Connected),this.emit(_.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var a=arguments.length,o=new Array(a),c=0;c<a;c++)o[c]=arguments[c];return f(t,[...o],void 0,function(){var d=this;let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var l,h,m,v;const p=yield d.disconnectLock.lock();try{if(d.state===$.Disconnected){d.log.debug("already disconnected",d.logContext);return}d.log.info("disconnect from room",Object.assign({},d.logContext)),(d.state===$.Connecting||d.state===$.Reconnecting||d.isResuming)&&(d.log.warn("abort connection attempt",d.logContext),(l=d.abortController)===null||l===void 0||l.abort(),(m=(h=d.connectFuture)===null||h===void 0?void 0:h.reject)===null||m===void 0||m.call(h,new ee("Client initiated disconnect",H.Cancelled)),d.connectFuture=void 0),!((v=d.engine)===null||v===void 0)&&v.client.isDisconnected||(yield d.engine.client.sendLeave()),d.engine&&(yield d.engine.close()),d.handleDisconnect(u,Fe.CLIENT_INITIATED),d.engine=void 0}finally{p()}}()})},this.onPageLeave=()=>f(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>f(this,void 0,void 0,function*(){const a=[],o=Me();if(o&&o.os==="iOS"){const c="livekit-dummy-audio-el";let d=document.getElementById(c);if(!d){d=document.createElement("audio"),d.id=c,d.autoplay=!0,d.hidden=!0;const u=ni();u.enabled=!0;const l=new MediaStream([u]);d.srcObject=l,document.addEventListener("visibilitychange",()=>{d&&(d.srcObject=document.hidden?null:l,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(d),this.once(_.Disconnected,()=>{d==null||d.remove(),d=null})}a.push(d)}this.remoteParticipants.forEach(c=>{c.audioTrackPublications.forEach(d=>{d.track&&d.track.attachedElements.forEach(u=>{a.push(u)})})});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=()=>f(this,void 0,void 0,function*(){const a=[];for(const o of this.remoteParticipants.values())o.videoTrackPublications.forEach(c=>{var d;(d=c.track)===null||d===void 0||d.attachedElements.forEach(u=>{a.includes(u)||a.push(u)})});yield Promise.all(a.map(o=>o.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(o=>{o.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const a of this.remoteParticipants.values())this.handleParticipantDisconnected(a.identity,a);this.setAndEmitConnectionState($.Reconnecting)&&this.emit(_.Reconnecting)},this.handleSignalRestarted=a=>f(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(o){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:o}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:a.serverRegion}))}catch{return}this.setAndEmitConnectionState($.Connected),this.emit(_.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(o=>{var c;if(o.identity===this.localParticipant.identity){this.localParticipant.updateInfo(o);return}o.identity===""&&(o.identity=(c=this.sidToIdentity.get(o.sid))!==null&&c!==void 0?c:"");let d=this.remoteParticipants.get(o.identity);o.state===Vt.DISCONNECTED?this.handleParticipantDisconnected(o.identity,d):d=this.getOrCreateParticipant(o.identity,o)})},this.handleActiveSpeakersUpdate=a=>{const o=[],c={};a.forEach(d=>{if(c[d.sid]=!0,d.sid===this.localParticipant.sid)this.localParticipant.audioLevel=d.level,this.localParticipant.setIsSpeaking(!0),o.push(this.localParticipant);else{const u=this.getRemoteParticipantBySid(d.sid);u&&(u.audioLevel=d.level,u.setIsSpeaking(!0),o.push(u))}}),c[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(d=>{c[d.sid]||(d.audioLevel=0,d.setIsSpeaking(!1))}),this.activeSpeakers=o,this.emitWhenConnected(_.ActiveSpeakersChanged,o)},this.handleSpeakersChanged=a=>{const o=new Map;this.activeSpeakers.forEach(d=>{const u=this.remoteParticipants.get(d.identity);u&&u.sid!==d.sid||o.set(d.sid,d)}),a.forEach(d=>{let u=this.getRemoteParticipantBySid(d.sid);d.sid===this.localParticipant.sid&&(u=this.localParticipant),u&&(u.audioLevel=d.level,u.setIsSpeaking(d.active),d.active?o.set(d.sid,u):o.delete(d.sid))});const c=Array.from(o.values());c.sort((d,u)=>u.audioLevel-d.audioLevel),this.activeSpeakers=c,this.emitWhenConnected(_.ActiveSpeakersChanged,c)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(o=>{const c=this.getRemoteParticipantBySid(o.participantSid);if(!c)return;const d=c.getTrackPublicationBySid(o.trackSid);if(!d||!d.track)return;const u=C.streamStateFromProto(o.state);d.track.setStreamState(u),u!==d.track.streamState&&(c.emit(M.TrackStreamStateChanged,d,d.track.streamState),this.emitWhenConnected(_.TrackStreamStateChanged,d,d.track.streamState,c))})},this.handleSubscriptionPermissionUpdate=a=>{const o=this.getRemoteParticipantBySid(a.participantSid);if(!o)return;const c=o.getTrackPublicationBySid(a.trackSid);c&&c.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const o=Array.from(this.remoteParticipants.values()).find(d=>d.trackPublications.has(a.trackSid));if(!o)return;const c=o.getTrackPublicationBySid(a.trackSid);c&&c.setSubscriptionError(a.err)},this.handleDataPacket=a=>{const o=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(o,a.value.value,a.kind);else if(a.value.case==="transcription")this.handleTranscription(o,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(o,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(o,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,o);else if(a.value.case==="streamHeader"||a.value.case==="streamChunk"||a.value.case==="streamTrailer")this.handleDataStream(a);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,o,c)=>{this.emit(_.DataReceived,o.payload,a,c,o.topic),a==null||a.emit(M.DataReceived,o.payload,c)},this.handleSipDtmf=(a,o)=>{this.emit(_.SipDTMFReceived,o,a),a==null||a.emit(M.SipDTMFReceived,o)},this.handleTranscription=(a,o)=>{const c=o.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(o.transcribedParticipantIdentity),d=c==null?void 0:c.trackPublications.get(o.trackId),u=th(o,this.transcriptionReceivedTimes);d==null||d.emit(I.TranscriptionReceived,u),c==null||c.emit(M.TranscriptionReceived,u,d),this.emit(_.TranscriptionReceived,u,c,d)},this.handleChatMessage=(a,o)=>{const c=nh(o);this.emit(_.ChatMessage,c,a)},this.handleMetrics=(a,o)=>{this.emit(_.MetricsReceived,a,o)},this.handleDataStream=a=>{this.incomingDataStreamManager.handleDataStreamPacket(a)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(_.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(_.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(_.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(_.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>f(this,void 0,void 0,function*(){var a;((a=Me())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(_.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const o=this.roomInfo;this.roomInfo=a,o&&o.metadata!==a.metadata&&this.emitWhenConnected(_.RoomMetadataChanged,a.metadata),(o==null?void 0:o.activeRecording)!==a.activeRecording&&this.emitWhenConnected(_.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(o=>{if(o.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(o.quality);return}const c=this.getRemoteParticipantBySid(o.participantSid);c&&c.setConnectionQuality(o.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(_.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(_.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(_.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(_.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(_.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var o;(o=a==null?void 0:a.onPublish)===null||o===void 0||o.call(a,this)},this.onLocalTrackPublished=a=>f(this,void 0,void 0,function*(){var o,c,d,u,l,h;(o=a.track)===null||o===void 0||o.on(I.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.on(I.Restarted,this.onLocalTrackRestarted),(l=(u=(d=a.track)===null||d===void 0?void 0:d.getProcessor())===null||u===void 0?void 0:u.onPublish)===null||l===void 0||l.call(u,this),this.emit(_.LocalTrackPublished,a,this.localParticipant),pt(a.track)&&(yield a.track.checkForSilence())&&this.emit(_.LocalAudioSilenceDetected,a);const m=yield(h=a.track)===null||h===void 0?void 0:h.getDeviceId(!1),v=pr(a.source);v&&m&&m!==this.localParticipant.activeDeviceMap.get(v)&&(this.localParticipant.activeDeviceMap.set(v,m),this.emit(_.ActiveDeviceChanged,v,m))}),this.onLocalTrackUnpublished=a=>{var o,c;(o=a.track)===null||o===void 0||o.off(I.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.off(I.Restarted,this.onLocalTrackRestarted),this.emit(_.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>f(this,void 0,void 0,function*(){const o=yield a.getDeviceId(!1),c=pr(a.source);c&&o&&o!==this.localParticipant.activeDeviceMap.get(c)&&(this.log.debug("local track restarted, setting ".concat(c," ").concat(o," active"),this.logContext),this.localParticipant.activeDeviceMap.set(c,o),this.emit(_.ActiveDeviceChanged,c,o))}),this.onLocalConnectionQualityChanged=a=>{this.emit(_.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,o)=>{this.emit(_.MediaDevicesError,a,o)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(_.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(_.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},_h),e),this.log=tt((i=this.options.loggerName)!==null&&i!==void 0?i:je.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Xo),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Zo),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},Rh),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new tf,this.outgoingDataStreamManager=new sf(this.engine,this.log),this.disconnectLock=new we,this.localParticipant=new yc("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",kt(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",kt(this.options.audioCaptureDefaults.deviceId)),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&this.switchActiveDevice("audiooutput",kt(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xe()){const a=new AbortController;(s=navigator.mediaDevices)===null||s===void 0||s.addEventListener("devicechange",this.handleDeviceChange,{signal:a.signal}),Xt.cleanupRegistry&&Xt.cleanupRegistry.register(this,()=>{a.abort()})}}registerTextStreamHandler(e,t){return this.incomingDataStreamManager.registerTextStreamHandler(e,t)}unregisterTextStreamHandler(e){return this.incomingDataStreamManager.unregisterTextStreamHandler(e)}registerByteStreamHandler(e,t){return this.incomingDataStreamManager.registerByteStreamHandler(e,t)}unregisterByteStreamHandler(e){return this.incomingDataStreamManager.unregisterByteStreamHandler(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)}setE2EEEnabled(e){return f(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 hh(this.options.e2ee),this.e2eeManager.on(ht.ParticipantEncryptionStatusChanged,(t,i)=>{No(i)&&(this.isE2EEEnabled=t),this.emit(_.ParticipantEncryptionStatusChanged,t,i)}),this.e2eeManager.on(ht.EncryptionError,t=>this.emit(_.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 f(this,void 0,void 0,function*(){return this.state===$.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,t)=>{const i=r=>{r.sid!==""&&(this.engine.off(O.RoomUpdate,i),e(r.sid))};this.engine.on(O.RoomUpdate,i),this.once(_.Disconnected,()=>{this.engine.off(O.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 $h(this.options),this.engine.on(O.ParticipantUpdate,this.handleParticipantUpdates).on(O.RoomUpdate,this.handleRoomUpdate).on(O.SpeakersChanged,this.handleSpeakersChanged).on(O.StreamStateChanged,this.handleStreamStateUpdate).on(O.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(O.SubscriptionError,this.handleSubscriptionError).on(O.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(O.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(O.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(O.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(O.DataPacketReceived,this.handleDataPacket).on(O.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState($.SignalReconnecting)&&this.emit(_.SignalReconnecting)}).on(O.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState($.Connected)&&this.emit(_.Reconnected)}).on(O.SignalResumed,()=>{this.bufferedEvents=[],(this.state===$.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(O.Restarting,this.handleRestarting).on(O.SignalRestarted,this.handleSignalRestarted).on(O.Offline,()=>{this.setAndEmitConnectionState($.Reconnecting)&&this.emit(_.Reconnecting)}).on(O.DCBufferStatusChanged,(e,t)=>{this.emit(_.DCBufferStatusChanged,e,t)}).on(O.LocalTrackSubscribed,e=>{const t=this.localParticipant.getTrackPublications().find(i=>{let{trackSid:r}=i;return r===e});if(!t){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(M.LocalTrackSubscribed,t),this.emitWhenConnected(_.LocalTrackSubscribed,t,this.localParticipant)}).on(O.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(_.Moved,e.room.name),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),this.outgoingDataStreamManager&&this.outgoingDataStreamManager.setupEngine(this.engine))}static getLocalDevices(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return ye.getInstance().getDevices(e,t)}prepareConnection(e,t){return f(this,void 0,void 0,function*(){if(this.state===$.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(sr(new URL(e))&&t){this.regionUrlProvider=new Ar(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===$.Disconnected&&(this.regionUrl=i,yield fetch(ur(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch(ur(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 f(this,void 0,void 0,function*(){let i=()=>{},r;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":r=new et({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":r=new et({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":r=new et({scenario:{case:"serverLeave",value:!0}});break;case"migration":r=new et({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=()=>f(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),r=new et({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>f(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),r=new et({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":r=new et({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),i=()=>f(this,void 0,void 0,function*(){const s=this.engine.client.onLeave;s&&s(new Vn({reason:Fe.CLIENT_INITIATED,action:zt.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");r=new et({scenario:{case:"subscriberBandwidth",value:Nt(t)}});break;case"leave-full-reconnect":r=new et({scenario:{case:"leaveRequestFullReconnect",value:!0}})}r&&(yield this.engine.client.sendSimulateScenario(r),yield i())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return function*(){var o,c,d,u,l,h,m;let v=!0,p=!1;const S=a?{exact:r}:r;if(i==="audioinput"){p=s.localParticipant.audioTrackPublications.size===0;const k=(o=s.getActiveDevice(i))!==null&&o!==void 0?o:s.options.audioCaptureDefaults.deviceId;s.options.audioCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.audioTrackPublications.values()).filter(g=>g.source===C.Source.Microphone);try{v=(yield Promise.all(R.map(g=>{var b;return(b=g.audioTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(g=>g===!0)}catch(g){throw s.options.audioCaptureDefaults.deviceId=k,g}const w=R.some(g=>{var b,P;return(P=(b=g.track)===null||b===void 0?void 0:b.isMuted)!==null&&P!==void 0?P:!1});v&&w&&(p=!0)}else if(i==="videoinput"){p=s.localParticipant.videoTrackPublications.size===0;const k=(c=s.getActiveDevice(i))!==null&&c!==void 0?c:s.options.videoCaptureDefaults.deviceId;s.options.videoCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.videoTrackPublications.values()).filter(g=>g.source===C.Source.Camera);try{v=(yield Promise.all(R.map(g=>{var b;return(b=g.videoTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(g=>g===!0)}catch(g){throw s.options.videoCaptureDefaults.deviceId=k,g}const w=R.some(g=>{var b,P;return(P=(b=g.track)===null||b===void 0?void 0:b.isMuted)!==null&&P!==void 0?P:!1});v&&w&&(p=!0)}else if(i==="audiooutput"){if(p=!0,!rr()&&!s.options.webAudioMix||s.options.webAudioMix&&s.audioContext&&!("setSinkId"in s.audioContext))throw new Error("cannot switch audio output, the current browser does not support it");s.options.webAudioMix&&(r=(d=yield ye.getInstance().normalizeDeviceId("audiooutput",r))!==null&&d!==void 0?d:""),(u=(m=s.options).audioOutput)!==null&&u!==void 0||(m.audioOutput={});const k=(l=s.getActiveDevice(i))!==null&&l!==void 0?l:s.options.audioOutput.deviceId;s.options.audioOutput.deviceId=r;try{s.options.webAudioMix&&((h=s.audioContext)===null||h===void 0||h.setSinkId(r)),yield Promise.all(Array.from(s.remoteParticipants.values()).map(R=>R.setAudioOutput({deviceId:r})))}catch(R){throw s.options.audioOutput.deviceId=k,R}}return p&&(s.localParticipant.activeDeviceMap.set(i,r),s.emit(_.ActiveDeviceChanged,i,r)),v}()})}setupLocalParticipantEvents(){this.localParticipant.on(M.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(M.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(M.AttributesChanged,this.onLocalAttributesChanged).on(M.TrackMuted,this.onLocalTrackMuted).on(M.TrackUnmuted,this.onLocalTrackUnmuted).on(M.LocalTrackPublished,this.onLocalTrackPublished).on(M.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(M.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(M.MediaDevicesError,this.onMediaDevicesError).on(M.AudioStreamAcquired,this.startAudio).on(M.ChatMessage,this.onLocalChatMessageSent).on(M.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===$.Connecting||this.state===$.Reconnecting){const l=()=>{this.onTrackAdded(e,t,i),h()},h=()=>{this.off(_.Reconnected,l),this.off(_.Connected,l),this.off(_.Disconnected,h)};this.once(_.Reconnected,l),this.once(_.Connected,l),this.once(_.Disconnected,h);return}if(this.state===$.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 r=Kl(t.id),s=r[0];let a=r[1],o=e.id;if(a&&a.startsWith("TR")&&(o=a),s===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const c=Array.from(this.remoteParticipants.values()).find(l=>l.sid===s);if(!c){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(s),this.logContext);return}let d;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?d=this.options.adaptiveStream:d={});const u=c.addSubscribedMediaTrack(e,o,t,i,d);u!=null&&u.isEncrypted&&!this.e2eeManager&&this.emit(_.EncryptionError,new Error("Encrypted ".concat(u.source," track received from participant ").concat(c.sid,", but room does not have encryption enabled!")))}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.incomingDataStreamManager.clearHandlersAndControllers(),this.state!==$.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{r.unpublishTrack(s.trackSid)})}),this.localParticipant.trackPublications.forEach(r=>{var s,a,o;r.track&&this.localParticipant.unpublishTrack(r.track,e),e?((s=r.track)===null||s===void 0||s.detach(),(a=r.track)===null||a===void 0||a.stop()):(o=r.track)===null||o===void 0||o.stopMonitor()}),this.localParticipant.off(M.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(M.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(M.AttributesChanged,this.onLocalAttributesChanged).off(M.TrackMuted,this.onLocalTrackMuted).off(M.TrackUnmuted,this.onLocalTrackUnmuted).off(M.LocalTrackPublished,this.onLocalTrackPublished).off(M.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(M.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(M.MediaDevicesError,this.onMediaDevicesError).off(M.AudioStreamAcquired,this.startAudio).off(M.ChatMessage,this.onLocalChatMessageSent).off(M.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),xe()&&(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($.Disconnected),this.emit(_.Disconnected,t)}}}handleParticipantDisconnected(e,t){var i;this.remoteParticipants.delete(e),t&&(this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(e),t.trackPublications.forEach(r=>{t.unpublishTrack(r.trackSid,!0)}),this.emit(_.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleIncomingRpcRequest(e,t,i,r,s,a){return f(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),a!==1){yield this.engine.publishRpcResponse(e,t,null,oe.builtIn("UNSUPPORTED_VERSION"));return}const o=this.rpcHandlers.get(i);if(!o){yield this.engine.publishRpcResponse(e,t,null,oe.builtIn("UNSUPPORTED_METHOD"));return}let c=null,d=null;try{const u=yield o({requestId:t,callerIdentity:e,payload:r,responseTimeout:s});Pr(u)>ec?(c=oe.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(i))):d=u}catch(u){u instanceof oe?c=u:(console.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),u),c=oe.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,t,d,c)})}selectDefaultDevices(){return f(this,void 0,void 0,function*(){var e,t,i;const r=ye.getInstance().previousDevices,s=yield ye.getInstance().getDevices(void 0,!1),a=Me();if((a==null?void 0:a.name)==="Chrome"&&a.os!=="iOS")for(let c of s){const d=r.find(u=>u.deviceId===c.deviceId);d&&d.label!==""&&d.kind===c.kind&&d.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(_.ActiveDeviceChanged,c.kind,c.deviceId)}const o=["audiooutput","audioinput","videoinput"];for(let c of o){const d=ah(c),u=this.localParticipant.getTrackPublication(d);if(u&&(!((e=u.track)===null||e===void 0)&&e.isUserProvided))continue;const l=s.filter(m=>m.kind===c),h=this.getActiveDevice(c);if(h===((t=r.filter(m=>m.kind===c)[0])===null||t===void 0?void 0:t.deviceId)&&l.length>0&&((i=l[0])===null||i===void 0?void 0:i.deviceId)!==h){yield this.switchActiveDevice(c,l[0].deviceId);continue}c==="audioinput"&&!kn()||c==="videoinput"||l.length>0&&!l.find(m=>m.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!kn())&&(yield this.switchActiveDevice(c,l[0].deviceId))}})}acquireAudioContext(){return f(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=mr())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(r=>r.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Ae(200)])}catch(r){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:r}))}const i=((t=this.audioContext)===null||t===void 0?void 0:t.state)==="running";i!==this.canPlaybackAudio&&(this.audioEnabled=i,this.emit(_.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let r;return t?r=wn.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):r=new wn(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&r.setAudioContext(this.audioContext),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&r.setAudioOutput(this.options.audioOutput).catch(s=>this.log.warn("Could not set audio output: ".concat(s.message),this.logContext)),r}getOrCreateParticipant(e,t){if(this.remoteParticipants.has(e)){const r=this.remoteParticipants.get(e);return t&&r.updateInfo(t)&&this.sidToIdentity.set(t.sid,t.identity),r}const i=this.createParticipant(e,t);return this.remoteParticipants.set(e,i),this.sidToIdentity.set(t.sid,t.identity),this.emitWhenConnected(_.ParticipantConnected,i),i.on(M.TrackPublished,r=>{this.emitWhenConnected(_.TrackPublished,r,i)}).on(M.TrackSubscribed,(r,s)=>{r.kind===C.Kind.Audio?(r.on(I.AudioPlaybackStarted,this.handleAudioPlaybackStarted),r.on(I.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):r.kind===C.Kind.Video&&(r.on(I.VideoPlaybackFailed,this.handleVideoPlaybackFailed),r.on(I.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(_.TrackSubscribed,r,s,i)}).on(M.TrackUnpublished,r=>{this.emit(_.TrackUnpublished,r,i)}).on(M.TrackUnsubscribed,(r,s)=>{this.emit(_.TrackUnsubscribed,r,s,i)}).on(M.TrackMuted,r=>{this.emitWhenConnected(_.TrackMuted,r,i)}).on(M.TrackUnmuted,r=>{this.emitWhenConnected(_.TrackUnmuted,r,i)}).on(M.ParticipantMetadataChanged,r=>{this.emitWhenConnected(_.ParticipantMetadataChanged,r,i)}).on(M.ParticipantNameChanged,r=>{this.emitWhenConnected(_.ParticipantNameChanged,r,i)}).on(M.AttributesChanged,r=>{this.emitWhenConnected(_.ParticipantAttributesChanged,r,i)}).on(M.ConnectionQualityChanged,r=>{this.emitWhenConnected(_.ConnectionQualityChanged,r,i)}).on(M.ParticipantPermissionsChanged,r=>{this.emitWhenConnected(_.ParticipantPermissionsChanged,r,i)}).on(M.TrackSubscriptionStatusChanged,(r,s)=>{this.emitWhenConnected(_.TrackSubscriptionStatusChanged,r,s,i)}).on(M.TrackSubscriptionFailed,(r,s)=>{this.emit(_.TrackSubscriptionFailed,r,i,s)}).on(M.TrackSubscriptionPermissionChanged,(r,s)=>{this.emitWhenConnected(_.TrackSubscriptionPermissionChanged,r,s,i)}).on(M.Active,()=>{this.emitWhenConnected(_.ParticipantActive,i),i.kind===qt.AGENT&&this.localParticipant.setActiveAgent(i)}),t&&i.updateInfo(t),i}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((i,r)=>(i.push(...r.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&&ih(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=ve.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,Fe.STATE_MISMATCH))):e=0},uf)}clearConnectionReconcile(){this.connectionReconcileInterval&&ve.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(_.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),r=1;r<t;r++)i[r-1]=arguments[r];if(this.state===$.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===$.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return f(this,void 0,void 0,function*(){var t,i;const r=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),s=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new Fn({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:se.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new _t({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(_.SignalConnected),this.emit(_.Connected),this.setAndEmitConnectionState($.Connected),r.video){const a=new oi(C.Kind.Video,new Kt({source:he.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO,name:"video-dummy"}),new Qt(r.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:dr(160*((t=s.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(M.LocalTrackPublished,a)}if(r.audio){const a=new oi(C.Kind.Audio,new Kt({source:he.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO}),new $t(r.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:ni(),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(M.LocalTrackPublished,a)}for(let a=0;a<s.count-1;a+=1){let o=new _t({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(a),state:Vt.ACTIVE,tracks:[],joinedAt:se.parse(Date.now())});const c=this.getOrCreateParticipant(o.identity,o);if(s.video){const d=dr(160*((i=s.aspectRatios[a%s.aspectRatios.length])!==null&&i!==void 0?i:1),160,!1,!0),u=new Kt({source:he.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO});c.addSubscribedMediaTrack(d,u.sid,new MediaStream([d]),new RTCRtpReceiver),o.tracks=[...o.tracks,u]}if(s.audio){const d=ni(),u=new Kt({source:he.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO});c.addSubscribedMediaTrack(d,u.sid,new MediaStream([d]),new RTCRtpReceiver),o.tracks=[...o.tracks,u]}c.updateInfo(o)}})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];if(e!==_.ActiveSpeakersChanged&&e!==_.TranscriptionReceived){const s=kc(i).filter(a=>a!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s}))}return super.emit(e,...i)}}Xt.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function kc(n){return n.map(e=>{if(e)return Array.isArray(e)?kc(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}class lf{static toAgentAttributes(e){return JSON.parse(e)}static agentAttributesToJson(e){return JSON.stringify(e)}static toTranscriptionAttributes(e){return JSON.parse(e)}static transcriptionAttributesToJson(e){return JSON.stringify(e)}}var hf=Object.freeze({__proto__:null,Convert:lf}),qe;(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"})(qe||(qe={}));class vt extends nt.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=qe.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new Xt(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return f(this,void 0,void 0,function*(){if(this.status!==qe.IDLE)throw Error("check is running already");this.setStatus(qe.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!==qe.SKIPPED&&this.setStatus(this.isSuccess()?qe.SUCCESS:qe.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return f(this,void 0,void 0,function*(){return this.room.state===$.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return f(this,void 0,void 0,function*(){this.room&&this.room.state!==$.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(qe.SKIPPED)}switchProtocol(e){return f(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(_.Reconnecting,()=>{t=!0}),this.room.once(_.Reconnected,()=>{i=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(s=>setTimeout(s,1e3)),!t)return;const r=Date.now()+1e4;for(;Date.now()<r;){if(i)return;yield Ae(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 ff extends vt{get description(){return"Cloud regions"}perform(){return f(this,void 0,void 0,function*(){const e=new Ar(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let s=0;s<3;s++){const a=yield e.getNextBestRegionUrl();if(!a)break;if(i.has(a))continue;i.add(a);const o=yield this.checkCloudRegion(a);this.appendMessage("".concat(o.region," RTT: ").concat(o.rtt,"ms, duration: ").concat(o.duration,"ms")),t.push(o)}t.sort((s,a)=>(s.duration-a.duration)*.5+(s.rtt-a.rtt)*.5);const r=t[0];this.bestStats=r,this.appendMessage("best Cloud region: ".concat(r.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return f(this,void 0,void 0,function*(){var t,i;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const r=(t=this.room.serverInfo)===null||t===void 0?void 0:t.region;if(!r)throw new Error("Region not found");const s=yield this.room.localParticipant.streamText({topic:"test"}),a=1e3,c=1e6/a,d="A".repeat(a),u=Date.now();for(let v=0;v<c;v++)yield s.write(d);yield s.close();const l=Date.now(),h=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),m={region:r,rtt:1e4,duration:l-u};return h==null||h.forEach(v=>{v.type==="candidate-pair"&&v.nominated&&(m.rtt=v.currentRoundTripTime*1e3)}),yield this.disconnect(),m})}}const Fr=1e4;class mf extends vt{get description(){return"Connection via UDP vs TCP"}perform(){return f(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/(Fr/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Fr/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return f(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 r=0;const s=()=>{r=(r+1)%360,i.fillStyle="hsl(".concat(r,", 100%, 50%)"),i.fillRect(0,0,t.width,t.height),requestAnimationFrame(s)};s();const o=t.captureStream(30).getVideoTracks()[0],d=(yield this.room.localParticipant.publishTrack(o,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,u={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},l=setInterval(()=>f(this,void 0,void 0,function*(){const h=yield d.getRTCStatsReport();h==null||h.forEach(m=>{m.type==="outbound-rtp"?(u.packetsSent=m.packetsSent,u.qualityLimitationDurations=m.qualityLimitationDurations,u.bitrateTotal+=m.targetBitrate,u.count++):m.type==="remote-inbound-rtp"&&(u.packetsLost=m.packetsLost,u.rttTotal+=m.roundTripTime,u.jitterTotal+=m.jitter)})}),1e3);return yield new Promise(h=>setTimeout(h,Fr)),clearInterval(l),o.stop(),t.remove(),yield this.disconnect(),u})}}class pf extends vt{get description(){return"Can publish audio"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield vc();if(yield Fo(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(o=>setTimeout(o,3e3));const s=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!s)throw new Error("Could not get RTCStats");let a=0;if(s.forEach(o=>{o.type==="outbound-rtp"&&(o.kind==="audio"||!o.kind&&o.mediaType==="audio")&&(a=o.packetsSent)}),a===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(a," audio packets"))})}}class gf extends vt{get description(){return"Can publish video"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield gc();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,5e3));const r=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let s=0;if(r.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="video"||!a.kind&&a.mediaType==="video")&&(s+=a.packetsSent)}),s===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(s," video packets"))})}checkForVideo(e){return f(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(r=>{i.onplay=()=>{setTimeout(()=>{var s,a,o,c;const d=document.createElement("canvas"),u=e.getSettings(),l=(a=(s=u.width)!==null&&s!==void 0?s:i.videoWidth)!==null&&a!==void 0?a:1280,h=(c=(o=u.height)!==null&&o!==void 0?o:i.videoHeight)!==null&&c!==void 0?c:720;d.width=l,d.height=h;const m=d.getContext("2d");m.drawImage(i,0,0);const p=m.getImageData(0,0,d.width,d.height).data;let S=!0;for(let k=0;k<p.length;k+=4)if(p[k]!==0||p[k+1]!==0||p[k+2]!==0){S=!1;break}S?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),r()},1e3)},i.play()}),t.getTracks().forEach(r=>r.stop()),i.remove()})}}class vf extends vt{get description(){return"Resuming connection after interruption"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect();let i=!1,r=!1,s;const a=new Promise(d=>{setTimeout(d,5e3),s=d}),o=()=>{i=!0};t.on(_.SignalReconnecting,o).on(_.Reconnecting,o).on(_.Reconnected,()=>{r=!0,s(!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(!r||t.state!==$.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 yf extends vt{get description(){return"Can connect via TURN"}perform(){return f(this,void 0,void 0,function*(){var e,t;const i=new vr,r=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let s=!1,a=!1,o=!1;for(let c of r.iceServers)for(let d of c.urls)d.startsWith("turn:")?(a=!0,o=!0):d.startsWith("turns:")&&(a=!0,o=!0,s=!0),d.startsWith("stun:")&&(o=!0);o?a&&!s&&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 bf extends vt{get description(){return"Establishing WebRTC connection"}perform(){return f(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(_.SignalConnected,()=>{const i=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(r,s)=>{if(r.candidate){const a=new RTCIceCandidate(r);let o="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(kf(a.address)?o+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,o+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(o)}i&&i(r,s)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=r=>{r instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(r.errorCode," ").concat(r.errorText," ").concat(r.url))})});try{yield this.connect(),q.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 kf(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 Tf extends vt{get description(){return"Connecting to signal connection via WebSocket"}perform(){return f(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 r=new vr;const s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(s.serverVersion,".")),((e=s.serverInfo)===null||e===void 0?void 0:e.edition)===ta.Cloud&&(!((t=s.serverInfo)===null||t===void 0)&&t.region)&&this.appendMessage("LiveKit Cloud: ".concat((i=s.serverInfo)===null||i===void 0?void 0:i.region)),yield r.close()})}}class Sf extends nt.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:qe.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!==qe.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return f(this,void 0,void 0,function*(){const t=this.getNextCheckId(),i=new e(this.url,this.token,this.options),r=a=>{this.updateCheck(t,a)};i.on("update",r);const s=yield i.run();return i.off("update",r),s})}checkWebsocket(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Tf)})}checkWebRTC(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(bf)})}checkTURN(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(yf)})}checkReconnect(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(vf)})}checkPublishAudio(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(pf)})}checkPublishVideo(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(gf)})}checkConnectionProtocol(){return f(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(mf);if(e.data&&"protocol"in e.data){const t=e.data;this.options.protocol=t.protocol}return e})}checkCloudRegion(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(ff)})}}function Cf(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var t;const i=Tt(n)?n.mediaStreamTrack:n,r=i.getSettings();let s={facingMode:(t=e.defaultFacingMode)!==null&&t!==void 0?t:"user",confidence:"low"};if("facingMode"in r){const a=r.facingMode;q.trace("rawFacingMode",{rawFacingMode:a}),a&&typeof a=="string"&&Pf(a)&&(s={facingMode:a,confidence:"high"})}if(["low","medium"].includes(s.confidence)){q.trace("Try to get facing mode from device label: (".concat(i.label,")"));const a=Sc(i.label);a!==void 0&&(s=a)}return s}const Tc=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),Ef=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]]);function Sc(n){var e;const t=n.trim().toLowerCase();if(t!=="")return Tc.has(t)?Tc.get(t):(e=Array.from(Ef.entries()).find(i=>{let[r]=i;return t.includes(r)}))===null||e===void 0?void 0:e[1]}function Pf(n){return n===void 0||["user","environment","left","right"].includes(n)}const wf=Object.freeze(Object.defineProperty({__proto__:null,get AudioPresets(){return Zn},get BackupCodecPolicy(){return nr},BaseKeyProvider:yo,get CheckStatus(){return qe},Checker:vt,ConnectionCheck:Sf,ConnectionError:ee,get ConnectionErrorReason(){return H},get ConnectionQuality(){return gt},get ConnectionState(){return $},CriticalTimers:ve,CryptorError:Ll,get CryptorErrorReason(){return Yn},get CryptorEvent(){return Yi},DataPacket_Kind:V,DataStreamError:ft,get DataStreamErrorReason(){return Ve},DefaultReconnectPolicy:Sa,DeviceUnsupportedError:gn,DisconnectReason:Fe,get EncryptionEvent(){return ht},get EngineEvent(){return O},ExternalE2EEKeyProvider:Al,get KeyHandlerEvent(){return Qi},get KeyProviderEvent(){return lt},LivekitError:Be,LocalAudioTrack:$t,LocalParticipant:yc,LocalTrack:_r,LocalTrackPublication:oi,LocalTrackRecorder:nc,LocalVideoTrack:Qt,get LogLevel(){return Wt},get LoggerNames(){return je},get MediaDeviceFailure(){return vn},Mutex:we,NegotiationError:Qn,Participant:Ur,get ParticipantEvent(){return M},ParticipantKind:qt,PublishDataError:xl,PublishTrackError:Xi,RemoteAudioTrack:mc,RemoteParticipant:wn,RemoteTrack:xr,RemoteTrackPublication:bc,RemoteVideoTrack:pc,Room:Xt,get RoomEvent(){return _},RpcError:oe,ScreenSharePresets:bn,SignalRequestError:Zi,SubscriptionError:Ws,get Track(){return C},get TrackEvent(){return I},TrackInvalidError:Je,get TrackPublication(){return at},TrackType:Ue,UnexpectedConnectionState:fe,UnsupportedServer:bo,VideoPreset:Z,VideoPresets:Ht,VideoPresets43:ei,get VideoQuality(){return Oe},attachToElement:Ot,attributes:hf,compareVersions:$e,createAudioAnalyser:Xl,createE2EEKey:Rl,createKeyMaterialFromBuffer:po,createKeyMaterialFromString:mo,createLocalAudioTrack:vc,createLocalScreenTracks:of,createLocalTracks:Pn,createLocalVideoTrack:gc,deriveKeys:wl,detachTrack:At,facingModeFromDeviceLabel:Sc,facingModeFromLocalTrack:Cf,getBrowser:Me,getEmptyAudioStreamTrack:ni,getEmptyVideoStreamTrack:Yl,getLogger:tt,importKey:Pl,isAudioTrack:Qe,isBackupCodec:Co,isBrowserSupported:Ro,isE2EESupported:ho,isInsertableStreamSupported:fo,isLocalParticipant:No,isLocalTrack:Tt,isRemoteParticipant:rh,isRemoteTrack:ri,isScriptTransformSupported:$n,isVideoFrame:El,isVideoTrack:mt,needsRbspUnescaping:Il,parseRbsp:Dl,protocolVersion:To,ratchet:_l,setLogExtension:dl,setLogLevel:cl,supportsAV1:Po,supportsAdaptiveStream:zl,supportsDynacast:Wl,supportsVP9:wo,version:ko,videoCodecs:So,writeRbsp:Ol},Symbol.toStringTag,{value:"Module"}));W.AgentActivityState=Pe,W.AgentStatus=zr,W.ChatCreationFailed=wt,W.ChatMode=pe,W.ChatModeDowngraded=Br,W.ChatProgress=_e,W.ConnectionState=te,W.ConnectivityState=ze,W.DocumentType=Jr,W.KnowledgeType=Hr,W.PlanGroup=Kr,W.Providers=$r,W.RateState=Wr,W.StreamEvents=re,W.StreamType=We,W.StreamingState=G,W.Subject=Gr,W.TransportProvider=rn,W.UserPlan=qr,W.ValidationError=Rt,W.VideoType=li,W.VoiceAccess=Qr,W.WsError=Vr,W.createAgentManager=Md,W.mapVideoType=Rc,Object.defineProperty(W,Symbol.toStringTag,{value:"Module"})});
|
|
38
|
+
`},kr}var Ho;function Eh(){if(Ho)return Ye;Ho=1;var n=Sh(),e=Ch(),t=br();return Ye.grammar=t,Ye.write=e,Ye.parse=n.parse,Ye.parseParams=n.parseParams,Ye.parseFmtpConfig=n.parseFmtpConfig,Ye.parsePayloads=n.parsePayloads,Ye.parseRemoteCandidates=n.parseRemoteCandidates,Ye.parseImageAttributes=n.parseImageAttributes,Ye.parseSimulcastStreamList=n.parseSimulcastStreamList,Ye}var Ct=Eh();function Tr(n,e,t){var i,r,s;e===void 0&&(e=50),t===void 0&&(t={});var a=(i=t.isImmediate)!=null&&i,o=(r=t.callback)!=null&&r,c=t.maxWait,d=Date.now(),u=[];function l(){if(c!==void 0){var m=Date.now()-d;if(m+e>=c)return c-m}return e}var h=function(){var m=[].slice.call(arguments),v=this;return new Promise(function(p,S){var k=a&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,d=Date.now(),!a){var w=n.apply(v,m);o&&o(w),u.forEach(function(g){return(0,g.resolve)(w)}),u=[]}},l()),k){var R=n.apply(v,m);return o&&o(R),p(R)}u.push({resolve:p,reject:S})})};return h.cancel=function(m){s!==void 0&&clearTimeout(s),u.forEach(function(v){return(0,v.reject)(m)}),u=[]},h}const Ph=.7,wh=20,Jt={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class Jo extends it.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=q,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Tr(r=>f(this,void 0,void 0,function*(){this.emit(Jt.NegotiationStarted);try{yield this.createAndSendOffer()}catch(s){if(r)r(s);else throw s}}),wh),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=nt((i=t.loggerName)!==null&&i!==void 0?i:je.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC(),this.offerLock=new we}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 f(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e,t){return f(this,void 0,void 0,function*(){var i;if(e.type==="answer"&&this.latestOfferId>0&&t>0&&t!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",Object.assign(Object.assign({},this.logContext),{offerId:t,latestOfferId:this.latestOfferId})),!1;let r;if(e.type==="offer"){let{stereoMids:s,nackMids:a}=Rh(e);this.remoteStereoMids=s,this.remoteNackMids=a}else if(e.type==="answer"){const s=Ct.parse((i=e.sdp)!==null&&i!==void 0?i:"");s.media.forEach(a=>{a.type==="audio"&&this.trackBitrates.some(o=>{if(!o.transceiver||a.mid!=o.transceiver.mid)return!1;let c=0;if(a.rtp.some(u=>u.codec.toUpperCase()===o.codec.toUpperCase()?(c=u.payload,!0):!1),c===0)return!0;let d=!1;for(const u of a.fmtp)if(u.payload===c){u.config=u.config.split(";").filter(l=>!l.includes("maxaveragebitrate")).join(";"),o.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(o.maxbr*1e3)),d=!0;break}return d||o.maxbr>0&&a.fmtp.push({payload:c,config:"maxaveragebitrate=".concat(o.maxbr*1e3)}),!0})}),r=Ct.write(s)}return yield this.setMungedSDP(e,r,!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(Jt.NegotiationComplete),e.sdp&&Ct.parse(e.sdp).media.forEach(a=>{a.type==="video"&&this.emit(Jt.RTPVideoPayloadTypes,a.rtp)})),!0})}createAndSendOffer(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.offerLock.lock();try{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 o=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&o)yield this._pc.setRemoteDescription(o);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 r=this.latestOfferId+1;this.latestOfferId=r;const s=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:s.sdp},this.logContext));const a=Ct.parse((t=s.sdp)!==null&&t!==void 0?t:"");if(a.media.forEach(o=>{Qo(o),o.type==="audio"?$o(o,[],[]):o.type==="video"&&this.trackBitrates.some(c=>{if(!o.msid||!c.cid||!o.msid.includes(c.cid))return!1;let d=0;if(o.rtp.some(l=>l.codec.toUpperCase()===c.codec.toUpperCase()?(d=l.payload,!0):!1),d===0||(rt(c.codec)&&!xt()&&this.ensureVideoDDExtensionForSVC(o,a),c.codec!=="av1"))return!0;const u=Math.round(c.maxbr*Ph);for(const l of o.fmtp)if(l.payload===d){l.config.includes("x-google-start-bitrate")||(l.config+=";x-google-start-bitrate=".concat(u));break}return!0})}),this.latestOfferId>r){this.log.warn("latestOfferId mismatch",Object.assign(Object.assign({},this.logContext),{latestOfferId:this.latestOfferId,offerId:r}));return}yield this.setMungedSDP(s,Ct.write(a)),this.onOffer(s,this.latestOfferId)}finally{i()}})}createAndSetAnswer(){return f(this,void 0,void 0,function*(){var e;const t=yield this.pc.createAnswer(),i=Ct.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(r=>{Qo(r),r.type==="audio"&&$o(r,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,Ct.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 fe("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 fe("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 f(this,void 0,void 0,function*(){var e;if(!this._pc)return;let t="";const i=new Map,r=new Map;if((yield this._pc.getStats()).forEach(o=>{switch(o.type){case"transport":t=o.selectedCandidatePairId;break;case"candidate-pair":t===""&&o.selected&&(t=o.id),i.set(o.id,o);break;case"remote-candidate":r.set(o.id,"".concat(o.address,":").concat(o.port));break}}),t==="")return;const a=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(a!==void 0)return r.get(a)})}setMungedSDP(e,t,i){return f(this,void 0,void 0,function*(){if(t){const r=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(s){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:s,sdp:t})),e.sdp=r}}try{i?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(r){let s="unknown error";r instanceof Error?s=r.message:typeof r=="string"&&(s=r);const a={error:s,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 Qn(s)}})}ensureVideoDDExtensionForSVC(e,t){var i,r;if(!((i=e.ext)===null||i===void 0?void 0:i.some(a=>a.uri===Co))){if(this.ddExtID===0){let a=0;t.media.forEach(o=>{var c;o.type==="video"&&((c=o.ext)===null||c===void 0||c.forEach(d=>{d.value>a&&(a=d.value)}))}),this.ddExtID=a+1}(r=e.ext)===null||r===void 0||r.push({value:this.ddExtID,uri:Co})}}}function $o(n,e,t){let i=0;n.rtp.some(r=>r.codec==="opus"?(i=r.payload,!0):!1),i>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(n.mid)&&!n.rtcpFb.some(r=>r.payload===i&&r.type==="nack")&&n.rtcpFb.push({payload:i,type:"nack"}),e.includes(n.mid)&&n.fmtp.some(r=>r.payload===i?(r.config.includes("stereo=1")||(r.config+=";stereo=1"),!0):!1))}function Rh(n){var e;const t=[],i=[],r=Ct.parse((e=n.sdp)!==null&&e!==void 0?e:"");let s=0;return r.media.forEach(a=>{var o;a.type==="audio"&&(a.rtp.some(c=>c.codec==="opus"?(s=c.payload,!0):!1),!((o=a.rtcpFb)===null||o===void 0)&&o.some(c=>c.payload===s&&c.type==="nack")&&i.push(a.mid),a.fmtp.some(c=>c.payload===s?(c.config.includes("sprop-stereo=1")&&t.push(a.mid),!0):!1))}),{stereoMids:t,nackMids:i}}function Qo(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 Sr="vp8",_h={audioPreset:Zn.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:bn.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Sr,backupCodec:!0,preConnectBuffer:!1},Yo={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Xo={deviceId:{ideal:"default"},resolution:Ht.h720.resolution},Ih={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new Ta,disconnectOnPageLeave:!0,webAudioMix:!1},Cr={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ue;(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"})(ue||(ue={}));class Dh{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,t,i){var r;this.peerConnectionTimeout=Cr.peerConnectionTimeout,this.log=q,this.updateState=()=>{var s;const a=this.state,o=this.requiredTransports.map(c=>c.getConnectionState());o.every(c=>c==="connected")?this.state=ue.CONNECTED:o.some(c=>c==="failed")?this.state=ue.FAILED:o.some(c=>c==="connecting")?this.state=ue.CONNECTING:o.every(c=>c==="closed")?this.state=ue.CLOSED:o.some(c=>c==="closed")?this.state=ue.CLOSING:o.every(c=>c==="new")&&(this.state=ue.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ue[a]," to ").concat(ue[this.state]),this.logContext),(s=this.onStateChange)===null||s===void 0||s.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=nt((r=i.loggerName)!==null&&r!==void 0?r:je.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=!t,this.isSubscriberConnectionRequired=t,this.publisher=new Jo(e,i),this.subscriber=new Jo(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=s=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,s,He.PUBLISHER)},this.subscriber.onIceCandidate=s=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,s,He.SUBSCRIBER)},this.subscriber.onDataChannel=s=>{var a;(a=this.onDataChannel)===null||a===void 0||a.call(this,s)},this.subscriber.onTrack=s=>{var a;(a=this.onTrack)===null||a===void 0||a.call(this,s)},this.publisher.onOffer=(s,a)=>{var o;(o=this.onPublisherOffer)===null||o===void 0||o.call(this,s,a)},this.state=ue.NEW,this.connectionLock=new we,this.remoteOfferLock=new we}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,t){return this.publisher.setRemoteDescription(e,t)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return f(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 f(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return f(this,void 0,void 0,function*(){t===He.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e,t){return f(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 i=yield this.remoteOfferLock.lock();try{return(yield this.subscriber.setRemoteDescription(e,t))?yield this.subscriber.createAndSetAnswer():void 0}finally{i()}})}updateConfiguration(e,t){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return f(this,void 0,void 0,function*(){var i;const r=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(s=>this.ensureTransportConnected(s,e,t)))}finally{r()}})}negotiate(e){return f(this,void 0,void 0,function*(){return new Promise((t,i)=>f(this,void 0,void 0,function*(){const r=setTimeout(()=>{i("negotiation timed out")},this.peerConnectionTimeout),s=()=>{clearTimeout(r),i("negotiation aborted")};e.signal.addEventListener("abort",s),this.publisher.once(Jt.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(Jt.NegotiationComplete,()=>{clearTimeout(r),t()})}),yield this.publisher.negotiate(a=>{clearTimeout(r),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===He.PUBLISHER?this.publisher.getConnectedAddress():e===He.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 f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(i.getConnectionState()!=="connected")return new Promise((c,d)=>f(s,void 0,void 0,function*(){const u=()=>{this.log.warn("abort transport connection",this.logContext),ve.clearTimeout(l),d(new ee("room connection has been cancelled",H.Cancelled))};r!=null&&r.signal.aborted&&u(),r==null||r.signal.addEventListener("abort",u);const l=ve.setTimeout(()=>{r==null||r.signal.removeEventListener("abort",u),d(new ee("could not establish pc connection",H.InternalError))},a);for(;this.state!==ue.CONNECTED;)if(yield Ae(50),r!=null&&r.signal.aborted){d(new ee("room connection has been cancelled",H.Cancelled));return}ve.clearTimeout(l),r==null||r.signal.removeEventListener("abort",u),c()}))}()})}}class oe extends Error{constructor(e,t,i){super(t),this.code=e,this.message=ec(t,oe.MAX_MESSAGE_BYTES),this.data=i?ec(i,oe.MAX_DATA_BYTES):void 0}static fromProto(e){return new oe(e.code,e.message,e.data)}toProto(){return new Ys({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new oe(oe.ErrorCode[e],oe.ErrorMessage[e],t)}}oe.MAX_MESSAGE_BYTES=256,oe.MAX_DATA_BYTES=15360,oe.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},oe.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 Zo=15360;function Er(n){return new TextEncoder().encode(n).length}function ec(n,e){if(Er(n)<=e)return n;let t=0,i=n.length;const r=new TextEncoder;for(;t<i;){const s=Math.floor((t+i+1)/2);r.encode(n.slice(0,s)).length<=e?t=s:i=s-1}return n.slice(0,t)}const Pr=2e3;function ai(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 wr=typeof MediaRecorder<"u";class Mh{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const Oh=wr?MediaRecorder:Mh;class tc extends Oh{constructor(e,t){if(!wr)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,r;const s=()=>r===void 0,a=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",o),r==null||r.close(),r=void 0},o=c=>{r==null||r.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",o),r=void 0};this.byteStream=new ReadableStream({start:c=>{r=c,i=d=>f(this,void 0,void 0,function*(){let u;if(d.data.arrayBuffer){const l=yield d.data.arrayBuffer();u=new Uint8Array(l)}else if(d.data.byteArray)u=d.data.byteArray;else throw new Error("no data available!");s()||c.enqueue(u)}),this.addEventListener("dataavailable",i)},cancel:()=>{a()}}),this.addEventListener("stop",a),this.addEventListener("error",o)}}function Ah(){return wr}const xh=1e3,Lh=1e4;class Rr extends C{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 r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,s=arguments.length>4?arguments[4]:void 0;super(e,t,s),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=Tr(()=>f(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>f(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(I.Ended,this)},this.reacquireTrack=!1,this.providedByUser=r,this.muteLock=new we,this.pauseUpstreamLock=new we,this.trackChangeLock=new we,this.trackChangeLock.lock().then(a=>f(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(e,!0)}finally{a()}})),this._constraints=e.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==C.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 f(this,void 0,void 0,function*(){var i;if(e===this._mediaStreamTrack&&!t)return;this._mediaStreamTrack&&(this.attachedElements.forEach(s=>{Ot(this._mediaStreamTrack,s)}),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 r;if(this.processor&&e){if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Mt(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),r=this.processor.processedTrack}this.sender&&((i=this.sender.transport)===null||i===void 0?void 0:i.state)!=="closed"&&(yield this.sender.replaceTrack(r??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(s=>{Mt(r??e,s)}))})}waitForDimensions(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:xh;return function*(){var i;if(e.kind===C.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=Me())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Ae(10));const r=Date.now();for(;Date.now()-r<t;){const s=e.dimensions;if(s)return s;yield Ae(50)}throw new Je("unable to get track dimensions after timeout")}()})}setDeviceId(e){return f(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===kt(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),kt(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return f(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===C.Source.ScreenShare)return;const{deviceId:i,groupId:r}=e._mediaStreamTrack.getSettings(),s=e.kind===C.Kind.Audio?"audioinput":"videoinput";return t?ye.getInstance().normalizeDeviceId(s,i,r):i}()})}mute(){return f(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return f(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,t){return f(this,void 0,void 0,function*(){const i=yield this.trackChangeLock.lock();try{if(!this.sender)throw new Je("unable to replace an unpublished track");let r,s;return typeof t=="boolean"?r=t:t!==void 0&&(r=t.userProvidedTrack,s=t.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),s&&this.processor&&(yield this.internalStopProcessor()),this}finally{i()}})}restart(e){return f(this,void 0,void 0,function*(){this.manuallyStopped=!1;const t=yield this.trackChangeLock.lock();try{e||(e=this._constraints);const{deviceId:i,facingMode:r}=e,s=fl(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===C.Kind.Video?a.video=i||r?{deviceId:i,facingMode:r}:!0:a.audio=i?Object.assign({deviceId:i},s):!0,this.attachedElements.forEach(d=>{Ot(this.mediaStreamTrack,d)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(a)).getTracks()[0];return this.kind===C.Kind.Video&&(yield c.applyConstraints(s)),c.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(c),this._constraints=e,this.emit(I.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?I.Muted:I.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 f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),_o()&&(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 f(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(I.UpstreamPaused,this);const i=Me();if((i==null?void 0:i.name)==="Safari"&&$e(i.version,"12.0")<0)throw new gn("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 f(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(I.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 f(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 f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s;const a=yield i.trackChangeLock.lock();try{i.log.debug("setting up processor",i.logContext);const o=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:o,audioContext:i.audioContext};if(yield t.init(c),i.log.debug("processor initialized",i.logContext),i.processor&&(yield i.internalStopProcessor()),i.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Mt(i._mediaStreamTrack,o),o.muted=!0,o.play().catch(d=>{d instanceof DOMException&&d.name==="AbortError"?(i.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},i.logContext),{error:d})),setTimeout(()=>{o.play().catch(u=>{i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{err:u}))})},100)):i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:d}))}),i.processor=t,i.processorElement=o,i.processor.processedTrack){for(const d of i.attachedElements)d!==i.processorElement&&r&&(Ot(i._mediaStreamTrack,d),Mt(i.processor.processedTrack,d));yield(s=i.sender)===null||s===void 0?void 0:s.replaceTrack(i.processor.processedTrack)}i.emit(I.TrackProcessorUpdate,i.processor)}finally{a()}}()})}getProcessor(){return this.processor}stopProcessor(){return f(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.trackChangeLock.lock();try{yield e.internalStopProcessor(t)}finally{i()}}()})}internalStopProcessor(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var i,r;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||((r=e.processorElement)===null||r===void 0||r.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(I.TrackProcessorUpdate))}()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!Ah()){this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);return}if(this.localTrackRecorder){this.log.warn("preconnect buffer already started");return}else{let t="audio/webm;codecs=opus";MediaRecorder.isTypeSupported(t)||(t="video/mp4"),this.localTrackRecorder=new tc(this,{mimeType:t})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},Lh)}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}getPreConnectBufferMimeType(){var e;return(e=this.localTrackRecorder)===null||e===void 0?void 0:e.mimeType}}class $t extends Rr{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3?arguments[3]:void 0,s=arguments.length>4?arguments[4]:void 0;super(e,C.Kind.Audio,t,i,s),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>f(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let a;try{a=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}a&&this.prevStats&&(this._currentBitrate=ai(a,this.prevStats)),this.prevStats=a}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(I.AudioTrackFeatureUpdate,this,ge.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(I.AudioTrackFeatureUpdate,this,ge.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=r,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return f(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===C.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 f(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!==kt(this._constraints.deviceId);return this.source===C.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 f(this,void 0,void 0,function*(){let t;if(e){const i=hr({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 f(this,void 0,void 0,function*(){const i=yield t.restart.call(this,e);return this.checkForSilence(),i})}startMonitor(){xe()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Pr)))}setProcessor(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.trackChangeLock.lock();try{if(!st()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.internalStopProcessor());const r={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(r),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(I.TrackProcessorUpdate,this.processor)}finally{i()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return f(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(r=>{r.type==="outbound-rtp"&&(i={type:"audio",streamId:r.id,packetsSent:r.packetsSent,packetsLost:r.packetsLost,bytesSent:r.bytesSent,timestamp:r.timestamp,roundTripTime:r.roundTripTime,jitter:r.jitter})}),i})}checkForSilence(){return f(this,void 0,void 0,function*(){const e=yield Uo(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(I.AudioSilenceDetected)),e})}}function Nh(n,e,t){switch(n.kind){case"audio":return new $t(n,e,!1,void 0,t);case"video":return new Qt(n,e,!1,t);default:throw new Je("unsupported track type: ".concat(n.kind))}}const Uh=Object.values(Ht),Fh=Object.values(ei),jh=Object.values(bn),Bh=[Ht.h180,Ht.h360],Vh=[ei.h180,ei.h360],qh=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,r;return new Z(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)/((r=t.fps)!==null&&r!==void 0?r:30))))),t.fps,n.encoding.priority)}),_r=["q","h","f"];function Ir(n,e,t,i){var r,s;let a=i==null?void 0:i.videoEncoding;n&&(a=i==null?void 0:i.screenShareEncoding);const o=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,d=i==null?void 0:i.videoCodec;if(!a&&!o&&!c||!e||!t)return[{}];a||(a=zh(n,e,t,d),q.debug("using video encoding",a));const u=a.maxFramerate,l=new Z(e,t,a.maxBitrate,a.maxFramerate,a.priority);if(c&&rt(d)){const v=new rc(c),p=[];if(v.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const S=Me();if(kn()||st()||(S==null?void 0:S.name)==="Chrome"&&$e(S==null?void 0:S.version,"113")<0){const k=v.suffix=="h"?2:3,R=Hl(S);for(let w=0;w<v.spatial;w+=1)p.push({rid:_r[2-w],maxBitrate:a.maxBitrate/Math.pow(k,w),maxFramerate:l.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,w):void 0});p[0].scalabilityMode=c}else p.push({maxBitrate:a.maxBitrate,maxFramerate:l.encoding.maxFramerate,scalabilityMode:c});return l.encoding.priority&&(p[0].priority=l.encoding.priority,p[0].networkPriority=l.encoding.priority),q.debug("using svc encoding",{encodings:p}),p}if(!o)return[a];let h=[];n?h=(r=ic(i==null?void 0:i.screenShareSimulcastLayers))!==null&&r!==void 0?r:nc(n,l):h=(s=ic(i==null?void 0:i.videoSimulcastLayers))!==null&&s!==void 0?s:nc(n,l);let m;if(h.length>0){const v=h[0];h.length>1&&([,m]=h);const p=Math.max(e,t);if(p>=960&&m)return Dr(e,t,[v,m,l],u);if(p>=480)return Dr(e,t,[v,l],u)}return Dr(e,t,[l])}function Kh(n,e,t){var i,r,s,a;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&q.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const o=n.mediaStreamTrack.getSettings(),c=(i=o.width)!==null&&i!==void 0?i:(r=n.dimensions)===null||r===void 0?void 0:r.width,d=(s=o.height)!==null&&s!==void 0?s:(a=n.dimensions)===null||a===void 0?void 0:a.height;return n.source===C.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),Ir(n.source===C.Source.ScreenShare,c,d,t)}function zh(n,e,t,i){const r=Wh(n,e,t);let{encoding:s}=r[0];const a=Math.max(e,t);for(let o=0;o<r.length;o+=1){const c=r[o];if(s=c.encoding,c.width>=a)break}if(i)switch(i){case"av1":case"h265":s=Object.assign({},s),s.maxBitrate=s.maxBitrate*.7;break;case"vp9":s=Object.assign({},s),s.maxBitrate=s.maxBitrate*.85;break}return s}function Wh(n,e,t){if(n)return jh;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?Uh:Fh}function nc(n,e){if(n)return qh(e);const{width:t,height:i}=e,r=t>i?t/i:i/t;return Math.abs(r-16/9)<Math.abs(r-4/3)?Bh:Vh}function Dr(n,e,t,i){const r=[];if(t.forEach((s,a)=>{if(a>=_r.length)return;const o=Math.min(n,e),d={rid:_r[a],scaleResolutionDownBy:Math.max(1,o/Math.min(s.width,s.height)),maxBitrate:s.encoding.maxBitrate},u=i&&s.encoding.maxFramerate?Math.min(i,s.encoding.maxFramerate):s.encoding.maxFramerate;u&&(d.maxFramerate=u);const l=At()||a===0;s.encoding.priority&&l&&(d.priority=s.encoding.priority,d.networkPriority=s.encoding.priority),r.push(d)}),st()&&Do()==="ios"){let s;r.forEach(o=>{s?o.maxFramerate&&o.maxFramerate>s&&(s=o.maxFramerate):s=o.maxFramerate});let a=!0;r.forEach(o=>{var c;o.maxFramerate!=s&&(a&&(a=!1,q.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),q.info('Setting framerate of encoding "'.concat((c=o.rid)!==null&&c!==void 0?c:"",'" to ').concat(s)),o.maxFramerate=s)})}return r}function ic(n){if(n)return n.sort((e,t)=>{const{encoding:i}=e,{encoding:r}=t;return i.maxBitrate>r.maxBitrate?1:i.maxBitrate<r.maxBitrate?-1:i.maxBitrate===r.maxBitrate&&i.maxFramerate&&r.maxFramerate?i.maxFramerate>r.maxFramerate?1:-1:0})}class rc{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 Gh(n){return n.source===C.Source.ScreenShare||n.constraints.height&&kt(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const Hh=5e3;class Qt extends Rr{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,r=arguments.length>3?arguments[3]:void 0;super(e,C.Kind.Video,t,i,r),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>f(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let s;try{s=yield this.getSenderStats()}catch(c){this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:c}));return}const a=new Map(s.map(c=>[c.rid,c])),o=s.some(c=>c.qualityLimitationReason==="cpu");if(o!==this.isCpuConstrained&&(this.isCpuConstrained=o,this.isCpuConstrained&&this.emit(I.CpuConstrained)),this.prevStats){let c=0;a.forEach((d,u)=>{var l;const h=(l=this.prevStats)===null||l===void 0?void 0:l.get(u);c+=ai(d,h)}),this._currentBitrate=c}this.prevStats=a}),this.senderLock=new we}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!xe())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()},Pr))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return f(this,void 0,void 0,function*(){var t,i,r,s,a;yield e.pauseUpstream.call(this);try{for(var o=!0,c=ut(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;o=!0)s=d.value,o=!1,yield(a=s.sender)===null||a===void 0?void 0:a.replaceTrack(null)}catch(u){i={error:u}}finally{try{!o&&!t&&(r=c.return)&&(yield r.call(c))}finally{if(i)throw i.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return f(this,void 0,void 0,function*(){var t,i,r,s,a;yield e.resumeUpstream.call(this);try{for(var o=!0,c=ut(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;o=!0){s=d.value,o=!1;const u=s;yield(a=u.sender)===null||a===void 0?void 0:a.replaceTrack(u.mediaStreamTrack)}}catch(u){i={error:u}}finally{try{!o&&!t&&(r=c.return)&&(yield r.call(c))}finally{if(i)throw i.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return f(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===C.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 f(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source===C.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 f(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(r=>{var s;if(r.type==="outbound-rtp"){const a={type:"video",streamId:r.id,frameHeight:r.frameHeight,frameWidth:r.frameWidth,framesPerSecond:r.framesPerSecond,framesSent:r.framesSent,firCount:r.firCount,pliCount:r.pliCount,nackCount:r.nackCount,packetsSent:r.packetsSent,bytesSent:r.bytesSent,qualityLimitationReason:r.qualityLimitationReason,qualityLimitationDurations:r.qualityLimitationDurations,qualityLimitationResolutionChanges:r.qualityLimitationResolutionChanges,rid:(s=r.rid)!==null&&s!==void 0?s:r.id,retransmittedPacketsSent:r.retransmittedPacketsSent,targetBitrate:r.targetBitrate,timestamp:r.timestamp},o=i.get(r.remoteId);o&&(a.jitter=o.jitter,a.packetsLost=o.packetsLost,a.roundTripTime=o.roundTripTime),t.push(a)}}),t.sort((r,s)=>{var a,o;return((a=s.frameWidth)!==null&&a!==void 0?a:0)-((o=r.frameWidth)!==null&&o!==void 0?o:0)}),t})}setPublishingQuality(e){const t=[];for(let i=Oe.LOW;i<=Oe.HIGH;i+=1)t.push(new ji({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(rt(this.codec),t)}restartTrack(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a;let o;if(e){const l=hr({video:e});typeof l.video!="boolean"&&(o=l.video)}yield this.restart(o),this.isCpuConstrained=!1;try{for(var c=!0,d=ut(this.simulcastCodecs.values()),u;u=yield d.next(),t=u.done,!t;c=!0){s=u.value,c=!1;const l=s;l.sender&&((a=l.sender.transport)===null||a===void 0?void 0:a.state)!=="closed"&&(l.mediaStreamTrack=this.mediaStreamTrack.clone(),yield l.sender.replaceTrack(l.mediaStreamTrack))}}catch(l){i={error:l}}finally{try{!c&&!t&&(r=d.return)&&(yield r.call(d))}finally{if(i)throw i.error}}})}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return f(this,arguments,void 0,function(i){var r=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var a,o,c,d,u,l;if(yield t.setProcessor.call(r,i,s),!((u=r.processor)===null||u===void 0)&&u.processedTrack)try{for(var h=!0,m=ut(r.simulcastCodecs.values()),v;v=yield m.next(),a=v.done,!a;h=!0)d=v.value,h=!1,yield(l=d.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}catch(p){o={error:p}}finally{try{!h&&!a&&(c=m.return)&&(yield c.call(m))}finally{if(o)throw o.error}}}()})}setDegradationPreference(e){return f(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)},Hh))}setPublishingCodecs(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a,o,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(rt(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const d=[];try{for(t=!0,i=ut(e);r=yield i.next(),s=r.done,!s;t=!0){c=r.value,t=!1;const u=c;if(!this.codec||this.codec===u.codec)yield this.setPublishingLayers(rt(u.codec),u.qualities);else{const l=this.simulcastCodecs.get(u.codec);if(this.log.debug("try setPublishingCodec for ".concat(u.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:l})),!l||!l.sender){for(const h of u.qualities)if(h.enabled){d.push(u.codec);break}}else l.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(u.codec),this.logContext),yield sc(l.sender,l.encodings,u.qualities,this.senderLock,rt(u.codec),this.log,this.logContext))}}}catch(u){a={error:u}}finally{try{!t&&!s&&(o=i.return)&&(yield o.call(i))}finally{if(a)throw a.error}}return d})}setPublishingLayers(e,t){return f(this,void 0,void 0,function*(){if(this.optimizeForPerformance){this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:t}));return}this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),!(!this.sender||!this.encodings)&&(yield sc(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext))})}prioritizePerformance(){return f(this,void 0,void 0,function*(){if(!this.sender)throw new Error("sender not found");const e=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;const t=this.sender.getParameters();t.encodings=t.encodings.map((i,r)=>{var s;return Object.assign(Object.assign({},i),{active:r===0,scaleResolutionDownBy:Math.max(1,Math.ceil(((s=this.mediaStreamTrack.getSettings().height)!==null&&s!==void 0?s:360)/360)),scalabilityMode:r===0&&rt(this.codec)?"L1T3":void 0,maxFramerate:r===0?15:0,maxBitrate:r===0?i.maxBitrate:0})}),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:t.encodings})),this.encodings=t.encodings,yield this.sender.setParameters(t)}catch(t){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:t})),this.optimizeForPerformance=!1}finally{e()}})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),_o()&&this.isInBackground&&this.source===C.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function sc(n,e,t,i,r,s,a){return f(this,void 0,void 0,function*(){const o=yield i.lock();s.debug("setPublishingLayersForSender",Object.assign(Object.assign({},a),{sender:n,qualities:t,senderEncodings:e}));try{const c=n.getParameters(),{encodings:d}=c;if(!d)return;if(d.length!==e.length){s.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},a),{encodings:d,senderEncodings:e}));return}let u=!1;!1&&d[0].scalabilityMode||(r&&t.some(m=>m.enabled)&&t.forEach(m=>m.enabled=!0),d.forEach((h,m)=>{var v;let p=(v=h.rid)!==null&&v!==void 0?v:"";p===""&&(p="q");const S=ac(p),k=t.find(R=>R.quality===S);k&&h.active!==k.enabled&&(u=!0,h.active=k.enabled,s.debug("setting layer ".concat(k.quality," to ").concat(h.active?"enabled":"disabled"),a),At()&&(k.enabled?(h.scaleResolutionDownBy=e[m].scaleResolutionDownBy,h.maxBitrate=e[m].maxBitrate,h.maxFrameRate=e[m].maxFrameRate):(h.scaleResolutionDownBy=4,h.maxBitrate=10,h.maxFrameRate=2)))})),u&&(c.encodings=d,s.debug("setting encodings",Object.assign(Object.assign({},a),{encodings:c.encodings})),yield n.setParameters(c))}finally{o()}})}function ac(n){switch(n){case"f":return Oe.HIGH;case"h":return Oe.MEDIUM;case"q":return Oe.LOW;default:return Oe.HIGH}}function oc(n,e,t,i){if(!t)return[new _t({quality:Oe.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const r=t[0].scalabilityMode,s=new rc(r),a=[],o=s.suffix=="h"?1.5:2,c=s.suffix=="h"?2:3;for(let d=0;d<s.spatial;d+=1)a.push(new _t({quality:Math.min(Oe.HIGH,s.spatial-1)-d,width:Math.ceil(n/Math.pow(o,d)),height:Math.ceil(e/Math.pow(o,d)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,d)):0,ssrc:0}));return a}return t.map(r=>{var s,a,o;const c=(s=r.scaleResolutionDownBy)!==null&&s!==void 0?s:1;let d=ac((a=r.rid)!==null&&a!==void 0?a:"");return new _t({quality:d,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(o=r.maxBitrate)!==null&&o!==void 0?o:0,ssrc:0})})}const cc="_lossy",dc="_reliable",Jh=2*1e3,Mr="leave-reconnect",$h=3e4;var Xe;(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"})(Xe||(Xe={}));class Qh extends it.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Cr.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=Xe.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=q,this.reliableDataSequence=1,this.reliableMessageBuffer=new Ko,this.reliableReceivedState=new Th($h),this.handleDataChannel=i=>f(this,[i],void 0,function(r){var s=this;let{channel:a}=r;return function*(){if(a){if(a.label===dc)s.reliableDCSub=a;else if(a.label===cc)s.lossyDCSub=a;else return;s.log.debug("on data channel ".concat(a.id,", ").concat(a.label),s.logContext),a.onmessage=s.handleDataMessage}}()}),this.handleDataMessage=i=>f(this,void 0,void 0,function*(){var r,s;const a=yield this.dataProcessLock.lock();try{let o;if(i.data instanceof ArrayBuffer)o=i.data;else if(i.data instanceof Blob)o=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const c=De.fromBinary(new Uint8Array(o));if(c.sequence>0&&c.participantSid!==""){const d=this.reliableReceivedState.get(c.participantSid);if(d&&c.sequence<=d)return;this.reliableReceivedState.set(c.participantSid,c.sequence)}((r=c.value)===null||r===void 0?void 0:r.case)==="speaker"?this.emit(O.ActiveSpeakersUpdate,c.value.value.speakers):(((s=c.value)===null||s===void 0?void 0:s.case)==="user"&&Xh(c,c.value.value),this.emit(O.DataPacketReceived,c))}finally{a()}}),this.handleDataError=i=>{const s=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:a}=i.error;this.log.error("DataChannel error on ".concat(s,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:a}))}else this.log.error("Unknown DataChannel error on ".concat(s),Object.assign(Object.assign({},this.logContext),{event:i}))},this.handleBufferedAmountLow=i=>{const s=i.currentTarget.maxRetransmits===0?V.LOSSY:V.RELIABLE;this.updateAndEmitDCBufferStatus(s)},this.handleDisconnect=(i,r)=>{if(this._isClosed)return;this.log.warn("".concat(i," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const s=c=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(c,"ms. giving up"),this.logContext),this.emit(O.Disconnected),this.close()},a=Date.now()-this.reconnectStart;let o=this.getNextRetryDelay({elapsedMs:a,retryCount:this.reconnectAttempts});if(o===null){s(a);return}i===Mr&&(o=0),this.log.debug("reconnecting in ".concat(o,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=ve.setTimeout(()=>this.attemptReconnect(r).finally(()=>this.reconnectTimeout=void 0),o)},this.waitForRestarted=()=>new Promise((i,r)=>{this.pcState===Xe.Connected&&i();const s=()=>{this.off(O.Disconnected,a),i()},a=()=>{this.off(O.Restarted,s),r()};this.once(O.Restarted,s),this.once(O.Disconnected,a)}),this.updateAndEmitDCBufferStatus=i=>{const r=this.isBufferStatusLow(i);typeof r<"u"&&r!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,r),this.emit(O.DCBufferStatusChanged,r,i))},this.isBufferStatusLow=i=>{const r=this.dataChannelForKind(i);if(r)return i===V.RELIABLE&&this.reliableMessageBuffer.alignBufferedAmount(r.bufferedAmount),r.bufferedAmount<=r.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===ie.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(Bt.RR_SIGNAL_DISCONNECTED))},this.log=nt((t=e.loggerName)!==null&&t!==void 0?t:je.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new gr(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new we,this.dataProcessLock=new we,this.dcBufferStatus=new Map([[V.LOSSY,!0],[V.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(O.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(O.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(O.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(O.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(O.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(O.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(O.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(O.SignalRequestResponse,i)}get logContext(){var e,t,i,r,s,a;return{room:(t=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||t===void 0?void 0:t.name,roomID:(r=(i=this.latestJoinResponse)===null||i===void 0?void 0:i.room)===null||r===void 0?void 0:r.sid,participant:(a=(s=this.latestJoinResponse)===null||s===void 0?void 0:s.participant)===null||a===void 0?void 0:a.identity,pID:this.participantSid}}join(e,t,i,r){return f(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 s=yield this.client.join(e,t,i,r);return this._isClosed=!1,this.latestJoinResponse=s,this.subscriberPrimary=s.subscriberPrimary,this.pcManager||(yield this.configure(s)),(!this.subscriberPrimary||s.fastPublish)&&this.negotiate(),this.clientConfiguration=s.clientConfiguration,this.emit(O.SignalConnected,s),s}catch(s){if(s instanceof ee&&s.reason===H.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,r);throw s}})}close(){return f(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(O.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return f(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,this.reliableMessageBuffer=new Ko,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupClient(){return f(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new Je("a track with the same ID has already been published");return new Promise((t,i)=>{const r=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(new ee("publication of local track timed out, no response from server",H.Timeout))},1e4);this.pendingTrackResolvers[e.cid]={resolve:s=>{clearTimeout(r),t(s)},reject:()=>{clearTimeout(r),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 f(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 f(this,void 0,void 0,function*(){var t,i;if(this.pcManager&&this.pcManager.currentState!==ue.NEW)return;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid;const r=this.makeRTCConfiguration(e);this.pcManager=new Dh(r,e.subscriberPrimary,this.loggerOptions),this.emit(O.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(s,a)=>{this.client.sendIceCandidate(s,a)},this.pcManager.onPublisherOffer=(s,a)=>{this.client.sendOffer(s,a)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(s,a,o)=>f(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(s),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),s===ue.CONNECTED){const u=this.pcState===Xe.New;this.pcState=Xe.Connected,u&&this.emit(O.Connected,e)}else s===ue.FAILED&&this.pcState===Xe.Connected&&(this.pcState=Xe.Disconnected,this.handleDisconnect("peerconnection failed",o==="failed"?Bt.RR_SUBSCRIBER_FAILED:Bt.RR_PUBLISHER_FAILED));const c=this.client.isDisconnected||this.client.currentState===ie.RECONNECTING,d=[ue.FAILED,ue.CLOSING,ue.CLOSED].includes(s);c&&d&&!this._isClosed&&this.emit(O.Offline)}),this.pcManager.onTrack=s=>{this.emit(O.MediaTrackAdded,s.track,s.streams[0],s.receiver)},Yh((i=e.serverInfo)===null||i===void 0?void 0:i.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(e,t)=>f(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,t))}),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,t)=>f(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;const i=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);i&&this.client.sendAnswer(i,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(O.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(O.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(O.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(O.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(O.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",Bt.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 zt.DISCONNECT:this.emit(O.Disconnected,e==null?void 0:e.reason),this.close();break;case zt.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Mr);break;case zt.RESUME:this.handleDisconnect(Mr)}}}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 r=[];e.iceServers.forEach(s=>{const a={urls:s.urls};s.username&&(a.username=s.username),s.credential&&(a.credential=s.credential),r.push(a)}),i.iceServers=r}return e.clientConfiguration&&e.clientConfiguration.forceRelay===ln.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(cc,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(dc,{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 f(this,void 0,void 0,function*(){if(ti())return yield this.createTransceiverRTCRtpSender(e,t,i);if(nr())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new fe("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(ti())return this.createSimulcastTransceiverSender(e,t,i,r);if(nr())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new fe("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");const r=[];e.mediaStream&&r.push(e.mediaStream),mt(e)&&(e.codec=t.videoCodec);const s={direction:"sendonly",streams:r};return i&&(s.sendEncodings=i),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,s)).sender})}createSimulcastTransceiverSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");const s={direction:"sendonly"};r&&(s.sendEncodings=r);const a=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,s);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,a.sender),a.sender})}createRTCRtpSender(e){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return f(this,void 0,void 0,function*(){var t,i,r;if(!this._isClosed){if(this.attemptingReconnect){q.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===ln.DISABLED||((r=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&r!==void 0?r:ue.NEW)===ue.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(s){this.reconnectAttempts+=1;let a=!0;s instanceof fe?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:s})),a=!1):s instanceof Yt||(this.fullReconnectOnNext=!0),a?this.handleDisconnect("reconnect",Bt.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(O.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 f(this,void 0,void 0,function*(){var t,i,r;try{if(!this.url||!this.token)throw new fe("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(O.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let s;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new Yt;s=yield this.join(e??this.url,this.token,this.signalOpts)}catch(a){throw a instanceof ee&&a.reason===H.NotAllowed?new fe("could not reconnect, token might be expired"):new Yt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(O.SignalRestarted,s),yield this.waitForPCReconnected(),this.client.currentState!==ie.CONNECTED)throw new Yt("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(O.Restarted)}catch(s){const a=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(a){yield this.restartConnection(a);return}else throw(r=this.regionUrlProvider)===null||r===void 0||r.resetAttempts(),s}})}resumeConnection(e){return f(this,void 0,void 0,function*(){var t;if(!this.url||!this.token)throw new fe("could not reconnect, url or token not saved");if(!this.pcManager)throw new fe("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(O.Resuming);let i;try{this.setupSignalClientCallbacks(),i=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(r){let s="";throw r instanceof Error&&(s=r.message,this.log.error(r.message,Object.assign(Object.assign({},this.logContext),{error:r}))),r instanceof ee&&r.reason===H.NotAllowed?new fe("could not reconnect, token might be expired"):r instanceof ee&&r.reason===H.LeaveRequest?r:new Yt(s)}if(this.emit(O.SignalResumed),i){const r=this.makeRTCConfiguration(i);this.pcManager.updateConfiguration(r),this.latestJoinResponse&&(this.latestJoinResponse.serverInfo=i.serverInfo)}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!==ie.CONNECTED)throw new Yt("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(),i!=null&&i.lastMessageSeq&&this.resendReliableMessagesForResume(i.lastMessageSeq),this.emit(O.Resumed)})}waitForPCInitialConnection(e,t){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new fe("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return f(this,void 0,void 0,function*(){this.pcState=Xe.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Ae(Jh),!this.pcManager)throw new fe("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=Xe.Connected}catch(e){throw this.pcState=Xe.Disconnected,new ee("could not establish PC connection, ".concat(e.message),H.InternalError)}})}publishRpcResponse(e,t,i,r){return f(this,void 0,void 0,function*(){const s=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcResponse",value:new Qs({requestId:t,value:r?{case:"error",value:r.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(s,V.RELIABLE)})}publishRpcAck(e,t){return f(this,void 0,void 0,function*(){const i=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcAck",value:new $s({requestId:t})}});yield this.sendDataPacket(i,V.RELIABLE)})}sendDataPacket(e,t){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(t),t===V.RELIABLE&&(e.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);const i=e.toBinary(),r=this.dataChannelForKind(t);if(r){if(t===V.RELIABLE&&this.reliableMessageBuffer.push({data:i,sequence:e.sequence}),this.attemptingReconnect)return;r.send(i)}this.updateAndEmitDCBufferStatus(t)})}resendReliableMessagesForResume(e){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(V.RELIABLE);const t=this.dataChannelForKind(V.RELIABLE);t&&(this.reliableMessageBuffer.popToSequence(e),this.reliableMessageBuffer.getAll().forEach(i=>{t.send(i.data)})),this.updateAndEmitDCBufferStatus(V.RELIABLE)})}waitForBufferStatusLow(e){return new Promise((t,i)=>f(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const r=()=>i("Engine closed");for(this.once(O.Closing,r);!this.dcBufferStatus.get(e);)yield Ae(10);this.off(O.Closing,r),t()}}))}ensureDataTransportConnected(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var s;if(!i.pcManager)throw new fe("PC manager is closed");const a=r?i.pcManager.subscriber:i.pcManager.publisher,o=r?"Subscriber":"Publisher";if(!a)throw new ee("".concat(o," connection not set"),H.InternalError);let c=!1;!r&&!i.dataChannelForKind(t,r)&&(i.createDataChannels(),c=!0),!c&&!r&&!i.pcManager.publisher.isICEConnected&&i.pcManager.publisher.getICEConnectionState()!=="checking"&&(c=!0),c&&i.negotiate();const d=i.dataChannelForKind(t,r);if((d==null?void 0:d.readyState)==="open")return;const u=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<u;){if(a.isICEConnected&&((s=i.dataChannelForKind(t,r))===null||s===void 0?void 0:s.readyState)==="open")return;yield Ae(50)}throw new ee("could not establish ".concat(o," connection, state: ").concat(a.getICEConnectionState()),H.InternalError)}()})}ensurePublisherConnected(e){return f(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ue.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return f(this,void 0,void 0,function*(){return new Promise((e,t)=>f(this,void 0,void 0,function*(){if(!this.pcManager){t(new Qn("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const i=new AbortController,r=()=>{i.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&t("cannot negotiate on closed engine"),this.on(O.Closing,r),this.pcManager.publisher.once(Jt.RTPVideoPayloadTypes,s=>{const a=new Map;s.forEach(o=>{const c=o.codec.toLowerCase();eh(c)&&a.set(o.payload,c)}),this.emit(O.RTPVideoMapUpdate,a)});try{yield this.pcManager.negotiate(i),e()}catch(s){s instanceof Qn&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",Bt.RR_UNKNOWN),t(s)}finally{this.off(O.Closing,r)}}))})}dataChannelForKind(e,t){if(t){if(e===V.LOSSY)return this.lossyDCSub;if(e===V.RELIABLE)return this.reliableDCSub}else{if(e===V.LOSSY)return this.lossyDC;if(e===V.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,r;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const s=this.pcManager.subscriber.getLocalDescription(),a=this.pcManager.subscriber.getRemoteDescription(),o=(r=(i=this.signalOpts)===null||i===void 0?void 0:i.autoSubscribe)!==null&&r!==void 0?r:!0,c=new Array,d=new Array;e.forEach(u=>{u.isDesired!==o&&c.push(u.trackSid),u.isEnabled||d.push(u.trackSid)}),this.client.sendSyncState(new pa({answer:s?si({sdp:s.sdp,type:s.type}):void 0,offer:a?si({sdp:a.sdp,type:a.type}):void 0,subscription:new Bn({trackSids:c,subscribe:!o,participantTracks:[]}),publishTracks:ch(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:d,datachannelReceiveStates:this.reliableReceivedState.map((u,l)=>new ga({publisherSid:l,lastSeq:u}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,r)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new va({label:i.label,id:i.id,target:r}))};return t(this.dataChannelForKind(V.LOSSY),He.PUBLISHER),t(this.dataChannelForKind(V.RELIABLE),He.PUBLISHER),t(this.dataChannelForKind(V.LOSSY,!0),He.SUBSCRIBER),t(this.dataChannelForKind(V.RELIABLE,!0),He.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&ve.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xe()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xe()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class Yt extends Error{}function Yh(n){return n!==void 0&&n>13}function Xh(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 Or{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 rr(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return f(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(r=>r.url===i.url));if(t.length>0){const i=t[0];return this.attemptedRegions.push(i),q.debug("next region: ".concat(i.region)),i.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return f(this,void 0,void 0,function*(){const t=yield fetch("".concat(Zh(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 ee("Could not fetch region settings: ".concat(t.statusText),t.status===401?H.NotAllowed:H.InternalError,t.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function Zh(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class uc{get info(){return this._info}validateBytesReceived(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!(typeof this.totalByteSize!="number"||this.totalByteSize===0)){if(e&&this.bytesReceived<this.totalByteSize)throw new ft("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),Ve.Incomplete);if(this.bytesReceived>this.totalByteSize)throw new ft("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),Ve.LengthExceeded)}}constructor(e,t,i,r){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=r}}class ef extends uc{handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();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();let t=new at,i=null,r=null;if(this.signal){const a=this.signal;r=()=>{var o;(o=t.reject)===null||o===void 0||o.call(t,a.reason)},a.addEventListener("abort",r),i=a}const s=()=>{e.releaseLock(),i&&r&&i.removeEventListener("abort",r),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var a,o;try{const{done:c,value:d}=yield Promise.race([e.read(),t.promise,(o=(a=this.outOfBandFailureRejectingFuture)===null||a===void 0?void 0:a.promise)!==null&&o!==void 0?o:new Promise(()=>{})]);return c?(this.validateBytesReceived(!0),{done:!0,value:void 0}):(this.handleChunkReceived(d),{done:!1,value:d.content})}catch(c){throw s(),c}}),return(){return f(this,void 0,void 0,function*(){return s(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var i,r,s,a;let o=new Set;const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,u=ut(c),l;l=yield u.next(),i=l.done,!i;d=!0){a=l.value,d=!1;const h=a;o.add(h)}}catch(h){r={error:h}}finally{try{!d&&!i&&(s=u.return)&&(yield s.call(u))}finally{if(r)throw r.error}}return Array.from(o)}()})}}class tf extends uc{constructor(e,t,i,r){super(e,t,i,r),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=ii(e.chunkIndex),r=this.receivedChunks.get(i);if(r&&r.version>e.version)return;this.receivedChunks.set(i,e),this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();const s=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,s)}[Symbol.asyncIterator](){const e=this.reader.getReader(),t=new TextDecoder("utf-8",{fatal:!0});let i=new at,r=null,s=null;if(this.signal){const o=this.signal;s=()=>{var c;(c=i.reject)===null||c===void 0||c.call(i,o.reason)},o.addEventListener("abort",s),r=o}const a=()=>{e.releaseLock(),r&&s&&r.removeEventListener("abort",s),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var o,c;try{const{done:d,value:u}=yield Promise.race([e.read(),i.promise,(c=(o=this.outOfBandFailureRejectingFuture)===null||o===void 0?void 0:o.promise)!==null&&c!==void 0?c:new Promise(()=>{})]);if(d)return this.validateBytesReceived(!0),{done:!0,value:void 0};{this.handleChunkReceived(u);let l;try{l=t.decode(u.content)}catch(h){throw new ft("Cannot decode datastream chunk ".concat(u.chunkIndex," as text: ").concat(h),Ve.DecodeFailed)}return{done:!1,value:l}}}catch(d){throw a(),d}}),return(){return f(this,void 0,void 0,function*(){return a(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var i,r,s,a;let o="";const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,u=ut(c),l;l=yield u.next(),i=l.done,!i;d=!0)a=l.value,d=!1,o+=a}catch(h){r={error:h}}finally{try{!d&&!i&&(s=u.return)&&(yield s.call(u))}finally{if(r)throw r.error}}return o}()})}}class nf{constructor(){this.log=q,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map}registerTextStreamHandler(e,t){if(this.textStreamHandlers.has(e))throw new ft('A text stream handler for topic "'.concat(e,'" has already been set.'),Ve.HandlerAlreadyRegistered);this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new ft('A byte stream handler for topic "'.concat(e,'" has already been set.'),Ve.HandlerAlreadyRegistered);this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearHandlersAndControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear(),this.byteStreamHandlers.clear(),this.textStreamHandlers.clear()}validateParticipantHasNoActiveDataStreams(e){var t,i,r,s;const a=Array.from(this.textStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e),o=Array.from(this.byteStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e);if(a.length>0||o.length>0){const c=new ft("Participant ".concat(e," unexpectedly disconnected in the middle of sending data"),Ve.AbnormalEnd);for(const[d,u]of o)(i=(t=u.outOfBandFailureRejectingFuture).reject)===null||i===void 0||i.call(t,c),this.byteStreamControllers.delete(d);for(const[d,u]of a)(s=(r=u.outOfBandFailureRejectingFuture).reject)===null||s===void 0||s.call(r,c),this.textStreamControllers.delete(d)}}handleDataStreamPacket(e){return f(this,void 0,void 0,function*(){switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity);case"streamChunk":return this.handleStreamChunk(e.value.value);case"streamTrailer":return this.handleStreamTrailer(e.value.value);default:throw new Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}})}handleStreamHeader(e,t){return f(this,void 0,void 0,function*(){var i;if(e.contentHeader.case==="byteHeader"){const r=this.byteStreamHandlers.get(e.topic);if(!r){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let s;const a=new at,o={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:ii(e.timestamp),attributes:e.attributes},c=new ReadableStream({start:d=>{if(s=d,this.textStreamControllers.has(e.streamId))throw new ft("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Ve.AlreadyOpened);this.byteStreamControllers.set(e.streamId,{info:o,controller:s,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});r(new ef(o,c,ii(e.totalLength),a),{identity:t})}else if(e.contentHeader.case==="textHeader"){const r=this.textStreamHandlers.get(e.topic);if(!r){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let s;const a=new at,o={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},c=new ReadableStream({start:d=>{if(s=d,this.textStreamControllers.has(e.streamId))throw new ft("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Ve.AlreadyOpened);this.textStreamControllers.set(e.streamId,{info:o,controller:s,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});r(new tf(o,c,ii(e.totalLength),a),{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))}}class lc{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 f(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 rf extends lc{}class sf extends lc{}const hc=15e3;class af{constructor(e,t){this.engine=e,this.log=t}setupEngine(e){this.engine=e}sendText(e,t){return f(this,void 0,void 0,function*(){var i;const r=crypto.randomUUID(),a=new TextEncoder().encode(e).byteLength,o=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(o?o.length+1:1).fill(0),d=(l,h)=>{var m;c[h]=l;const v=c.reduce((p,S)=>p+S,0);(m=t==null?void 0:t.onProgress)===null||m===void 0||m.call(t,v)},u=yield this.streamText({streamId:r,totalSize:a,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:o,attributes:t==null?void 0:t.attributes});return yield u.write(e),d(1,0),yield u.close(),t!=null&&t.attachments&&o&&(yield Promise.all(t.attachments.map((l,h)=>f(this,void 0,void 0,function*(){return this._sendFile(o[h],l,{topic:t.topic,mimeType:l.type,onProgress:m=>{d(m,h+1)}})})))),u.info})}streamText(e){return f(this,void 0,void 0,function*(){var t,i;const r=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),s={id:r,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 Di({streamId:r,mimeType:s.mimeType,topic:s.topic,timestamp:Lt(s.timestamp),totalLength:Lt(e==null?void 0:e.totalSize),attributes:s.attributes,contentHeader:{case:"textHeader",value:new sa({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"?Ii.UPDATE:Ii.CREATE})}}),o=e==null?void 0:e.destinationIdentities,c=new De({destinationIdentities:o,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(c,V.RELIABLE);let d=0;const u=this.engine,l=new WritableStream({write(v){return f(this,void 0,void 0,function*(){for(const p of ah(v,hc)){yield u.waitForBufferStatusLow(V.RELIABLE);const S=new Mi({content:p,streamId:r,chunkIndex:Lt(d)}),k=new De({destinationIdentities:o,value:{case:"streamChunk",value:S}});yield u.sendDataPacket(k,V.RELIABLE),d+=1}})},close(){return f(this,void 0,void 0,function*(){const v=new Oi({streamId:r}),p=new De({destinationIdentities:o,value:{case:"streamTrailer",value:v}});yield u.sendDataPacket(p,V.RELIABLE)})},abort(v){console.log("Sink error:",v)}});let h=()=>f(this,void 0,void 0,function*(){yield m.close()});u.once(O.Closing,h);const m=new rf(l,s,()=>this.engine.off(O.Closing,h));return m})}sendFile(e,t){return f(this,void 0,void 0,function*(){const i=crypto.randomUUID();return yield this._sendFile(i,e,t),{id:i}})}_sendFile(e,t,i){return f(this,void 0,void 0,function*(){var r;const s=yield this.streamBytes({streamId:e,totalSize:t.size,name:t.name,mimeType:(r=i==null?void 0:i.mimeType)!==null&&r!==void 0?r:t.type,topic:i==null?void 0:i.topic,destinationIdentities:i==null?void 0:i.destinationIdentities}),a=t.stream().getReader();for(;;){const{done:o,value:c}=yield a.read();if(o)break;yield s.write(c)}return yield s.close(),s.info})}streamBytes(e){return f(this,void 0,void 0,function*(){var t,i,r,s,a;const o=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),c=e==null?void 0:e.destinationIdentities,d={id:o,mimeType:(i=e==null?void 0:e.mimeType)!==null&&i!==void 0?i:"application/octet-stream",topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",timestamp:Date.now(),attributes:e==null?void 0:e.attributes,size:e==null?void 0:e.totalSize,name:(s=e==null?void 0:e.name)!==null&&s!==void 0?s:"unknown"},u=new Di({totalLength:Lt((a=d.size)!==null&&a!==void 0?a:0),mimeType:d.mimeType,streamId:o,topic:d.topic,timestamp:Lt(Date.now()),attributes:d.attributes,contentHeader:{case:"byteHeader",value:new aa({name:d.name})}}),l=new De({destinationIdentities:c,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(l,V.RELIABLE);let h=0;const m=new we,v=this.engine,p=this.log,S=new WritableStream({write(R){return f(this,void 0,void 0,function*(){const w=yield m.lock();let g=0;try{for(;g<R.byteLength;){const b=R.slice(g,g+hc);yield v.waitForBufferStatusLow(V.RELIABLE);const P=new De({destinationIdentities:c,value:{case:"streamChunk",value:new Mi({content:b,streamId:o,chunkIndex:Lt(h)})}});yield v.sendDataPacket(P,V.RELIABLE),h+=1,g+=b.byteLength}}finally{w()}})},close(){return f(this,void 0,void 0,function*(){const R=new Oi({streamId:o}),w=new De({destinationIdentities:c,value:{case:"streamTrailer",value:R}});yield v.sendDataPacket(w,V.RELIABLE)})},abort(R){p.error("Sink error:",R)}});return new sf(S,d)})}}class Ar extends C{constructor(e,t,i,r,s){super(e,i,s),this.sid=t,this.receiver=r}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?I.Muted:I.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(I.Ended,this))};e.addEventListener("removetrack",t)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return f(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(),Pr)),dh()&&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:r,rtpTimestamp:s}=i;s&&this.rtpTimestamp!==s&&(this.emit(I.TimeSyncUpdate,{timestamp:r,rtpTimestamp:s}),this.rtpTimestamp=s)}};e()}}class fc extends Ar{constructor(e,t,i,r,s,a){super(e,t,C.Kind.Audio,i,a),this.monitorReceiver=()=>f(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const o=yield this.getReceiverStats();o&&this.prevStats&&this.receiver&&(this._currentBitrate=ai(o,this.prevStats)),this.prevStats=o}),this.audioContext=r,this.webAudioPluginNodes=[],s&&(this.sinkId=s.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;st()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(st())return 1;let e=0;return this.attachedElements.forEach(t=>{t.volume>e&&(e=t.volume)}),e}setSinkId(e){return f(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(t=>{if(ir(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&ir(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(r=>{i.connect(r),i=r}),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(I.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(r=>{this.emit(I.AudioPlaybackFailed,r)})}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 f(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 xr=100;class mc extends Ar{constructor(e,t,i,r,s){super(e,t,C.Kind.Video,i,s),this.elementInfos=[],this.monitorReceiver=()=>f(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=ai(a,this.prevStats)),this.prevStats=a}),this.debouncedHandleResize=Tr(()=>{this.updateDimensions()},xr),this.adaptiveStreamSettings=r}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}setStreamState(e){super.setStreamState(e),console.log("setStreamState",e),e===C.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?Ot(this._mediaStreamTrack,t):Mt(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 of(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 f(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,i="",r=new Map;return e.forEach(s=>{s.type==="inbound-rtp"?(i=s.codecId,t={type:"video",streamId:s.id,framesDecoded:s.framesDecoded,framesDropped:s.framesDropped,framesReceived:s.framesReceived,packetsReceived:s.packetsReceived,packetsLost:s.packetsLost,frameWidth:s.frameWidth,frameHeight:s.frameHeight,pliCount:s.pliCount,firCount:s.firCount,nackCount:s.nackCount,jitter:s.jitter,timestamp:s.timestamp,bytesReceived:s.bytesReceived,decoderImplementation:s.decoderImplementation}):s.type==="codec"&&r.set(s.id,s)}),t&&i!==""&&r.get(i)&&(t.mimeType=r.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 f(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(e){var t,i;const r=this.elementInfos.reduce((c,d)=>Math.max(c,d.visibilityChangedAt||0),0),s=!((i=(t=this.adaptiveStreamSettings)===null||t===void 0?void 0:t.pauseVideoInBackground)!==null&&i!==void 0)||i?this.isInBackground:!1,a=this.elementInfos.some(c=>c.pictureInPicture),o=this.elementInfos.some(c=>c.visible)&&!s||a;if(!(this.lastVisible===o&&!e)){if(!o&&Date.now()-r<xr){ve.setTimeout(()=>{this.updateVisibility()},xr);return}this.lastVisible=o,this.emit(I.VisibilityChanged,o,this)}}updateDimensions(){var e,t;let i=0,r=0;const s=this.getPixelDensity();for(const a of this.elementInfos){const o=a.width()*s,c=a.height()*s;o+c>i+r&&(i=o,r=c)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===i&&((t=this.lastDimensions)===null||t===void 0?void 0:t.height)===r||(this.lastDimensions={width:i,height:r},this.emit(I.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?Mo():t||(Mo()>2?2:1)}}class of{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var r;const{target:s,isIntersecting:a}=i;s===this.element&&(this.isIntersecting=a,this.isPiP=En(this.element),this.visibilityChangedAt=Date.now(),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this))},this.onEnterPiP=()=>{var i,r,s;(r=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP),this.isPiP=En(this.element),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=En(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Lr(e),this.isPiP=xe()&&En(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Lr(this.element),this.isPiP=En(this.element),this.element.handleResize=()=>{var r;(r=this.handleResize)===null||r===void 0||r.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Ao().observe(this.element),Oo().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,r,s;(e=Ao())===null||e===void 0||e.unobserve(this.element),(t=Oo())===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),(s=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||s===void 0||s.removeEventListener("pagehide",this.onLeavePiP)}}function En(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Lr(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Lr(n,e){const t=e||window;let i=n.offsetTop,r=n.offsetLeft;const s=n.offsetWidth,a=n.offsetHeight,{hidden:o}=n,{display:c}=getComputedStyle(n);for(;n.offsetParent;)n=n.offsetParent,i+=n.offsetTop,r+=n.offsetLeft;return i<t.pageYOffset+t.innerHeight&&r<t.pageXOffset+t.innerWidth&&i+a>t.pageYOffset&&r+s>t.pageXOffset&&!o&&c!=="none"}class ot extends it.EventEmitter{constructor(e,t,i,r){var s;super(),this.metadataMuted=!1,this.encryption=Le.NONE,this.log=q,this.handleMuted=()=>{this.emit(I.Muted)},this.handleUnmuted=()=>{this.emit(I.Unmuted)},this.log=nt((s=r==null?void 0:r.loggerName)!==null&&s!==void 0?s:je.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=i,this.source=C.Source.Unknown}setTrack(e){this.track&&(this.track.off(I.Muted,this.handleMuted),this.track.off(I.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(I.Muted,this.handleMuted),e.on(I.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),K(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Le.NONE}get audioTrack(){if(Qe(this.track))return this.track}get videoTrack(){if(mt(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=C.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===C.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={}))})(ot||(ot={}));class oi extends ot{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,t,i,r){super(e,t.sid,t.name,r),this.track=void 0,this.handleTrackEnded=()=>{this.emit(I.Ended)},this.handleCpuConstrained=()=>{this.track&&mt(this.track)&&this.emit(I.CpuConstrained,this.track)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&(this.track.off(I.Ended,this.handleTrackEnded),this.track.off(I.CpuConstrained,this.handleCpuConstrained)),super.setTrack(e),e&&(e.on(I.Ended,this.handleTrackEnded),e.on(I.CpuConstrained,this.handleCpuConstrained))}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 f(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return f(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return f(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return f(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(Qe(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(ge.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(ge.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(ge.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(ge.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(ge.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(ge.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function Pn(n,e){return f(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:r,optionsWithoutProcessor:s}=jo(n);let a=s.audio,o=s.video;if(i&&typeof s.audio=="object"&&(s.audio.processor=i),r&&typeof s.video=="object"&&(s.video.processor=r),n.audio&&typeof s.audio=="object"&&typeof s.audio.deviceId=="string"){const l=s.audio.deviceId;s.audio.deviceId={exact:l},t=!0,a=Object.assign(Object.assign({},s.audio),{deviceId:{ideal:l}})}if(s.video&&typeof s.video=="object"&&typeof s.video.deviceId=="string"){const l=s.video.deviceId;s.video.deviceId={exact:l},t=!0,o=Object.assign(Object.assign({},s.video),{deviceId:{ideal:l}})}(s.audio===!0||typeof s.audio=="object"&&!s.audio.deviceId)&&(s.audio={deviceId:"default"}),s.video===!0?s.video={deviceId:"default"}:typeof s.video=="object"&&!s.video.deviceId&&(s.video.deviceId="default");const c=No(s,Yo,Xo),d=hr(c),u=navigator.mediaDevices.getUserMedia(d);s.audio&&(ye.userMediaPromiseMap.set("audioinput",u),u.catch(()=>ye.userMediaPromiseMap.delete("audioinput"))),s.video&&(ye.userMediaPromiseMap.set("videoinput",u),u.catch(()=>ye.userMediaPromiseMap.delete("videoinput")));try{const l=yield u;return yield Promise.all(l.getTracks().map(h=>f(this,void 0,void 0,function*(){const m=h.kind==="audio";let v=m?c.audio:c.video;(typeof v=="boolean"||!v)&&(v={});let p;const S=m?d.audio:d.video;typeof S!="boolean"&&(p=S);const k=h.getSettings().deviceId;p!=null&&p.deviceId&&kt(p.deviceId)!==k?p.deviceId=k:p||(p={deviceId:k});const R=Nh(h,p,e);return R.kind===C.Kind.Video?R.source=C.Source.Camera:R.kind===C.Kind.Audio&&(R.source=C.Source.Microphone),R.mediaStream=l,Qe(R)&&i?yield R.setProcessor(i):mt(R)&&r&&(yield R.setProcessor(r)),R})))}catch(l){if(!t)throw l;return Pn(Object.assign(Object.assign({},n),{audio:a,video:o}),e)}})}function pc(n){return f(this,void 0,void 0,function*(){return(yield Pn({audio:!1,video:n??!0}))[0]})}function gc(n){return f(this,void 0,void 0,function*(){return(yield Pn({audio:n??!0,video:!1}))[0]})}function cf(n){return f(this,void 0,void 0,function*(){if(n===void 0&&(n={}),n.resolution===void 0&&!Ro()&&(n.resolution=bn.h1080fps30.resolution),navigator.mediaDevices.getDisplayMedia===void 0)throw new gn("getDisplayMedia not supported");const e=Fo(n),t=yield navigator.mediaDevices.getDisplayMedia(e),i=t.getVideoTracks();if(i.length===0)throw new Je("no video track found");const r=new Qt(i[0],void 0,!1);r.source=C.Source.ScreenShare;const s=[r];if(t.getAudioTracks().length>0){const a=new $t(t.getAudioTracks()[0],void 0,!1);a.source=C.Source.ScreenShareAudio,s.push(a)}return s})}var gt;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(gt||(gt={}));function df(n){switch(n){case un.EXCELLENT:return gt.Excellent;case un.GOOD:return gt.Good;case un.POOR:return gt.Poor;case un.LOST:return gt.Lost;default:return gt.Unknown}}class Nr extends it.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===qt.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===Vt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,r,s,a){let o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qt.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=gt.Unknown,this.log=q,this.log=nt((c=a==null?void 0:a.loggerName)!==null&&c!==void 0?c:je.Participant),this.loggerOptions=a,this.setMaxListeners(100),this.sid=e,this.identity=t,this.name=i,this.metadata=r,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=o,this._attributes=s??{}}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 at,this.once(M.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(C.Source.Camera);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(C.Source.Microphone);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(C.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===Vt.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==Vt.ACTIVE&&this.emit(M.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(M.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(M.ParticipantNameChanged,e)}_setAttributes(e){const t=uh(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(M.AttributesChanged,t)}setPermissions(e){var t,i,r,s,a,o;const c=this.permissions,d=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!==((r=this.permissions)===null||r===void 0?void 0:r.canPublishData)||e.hidden!==((s=this.permissions)===null||s===void 0?void 0:s.hidden)||e.recorder!==((a=this.permissions)===null||a===void 0?void 0:a.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((u,l)=>{var h;return u!==((h=this.permissions)===null||h===void 0?void 0:h.canPublishSources[l])})||e.canSubscribeMetrics!==((o=this.permissions)===null||o===void 0?void 0:o.canSubscribeMetrics);return this.permissions=e,d&&this.emit(M.ParticipantPermissionsChanged,c),d}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(M.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=df(e),t!==this._connectionQuality&&this.emit(M.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=>Qe(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(I.Muted,()=>{this.emit(M.TrackMuted,e)}),e.on(I.Unmuted,()=>{this.emit(M.TrackUnmuted,e)});const t=e;switch(t.track&&(t.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case C.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case C.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function uf(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 fa({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||[]})}class vc extends Nr{constructor(e,t,i,r,s,a){super(e,t,void 0,void 0,void 0,{loggerName:r.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Le.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new at)},this.handleReconnected=()=>{var o,c;(c=(o=this.reconnectFuture)===null||o===void 0?void 0:o.resolve)===null||c===void 0||c.call(o),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var o,c,d,u,l,h;this.reconnectFuture&&(this.reconnectFuture.promise.catch(m=>this.log.warn(m.message,this.logContext)),(c=(o=this.reconnectFuture)===null||o===void 0?void 0:o.reject)===null||c===void 0||c.call(o,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0),this.signalConnectedFuture&&((u=(d=this.signalConnectedFuture).reject)===null||u===void 0||u.call(d,"Got disconnected without signal connected"),this.signalConnectedFuture=void 0),(h=(l=this.activeAgentFuture)===null||l===void 0?void 0:l.reject)===null||h===void 0||h.call(l,"Got disconnected without active agent present"),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=o=>{var c,d;o.participant&&this.updateInfo(o.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new at),(d=(c=this.signalConnectedFuture).resolve)===null||d===void 0||d.call(c)},this.handleSignalRequestResponse=o=>{const{requestId:c,reason:d,message:u}=o,l=this.pendingSignalRequests.get(c);l&&(d!==Bi.OK&&l.reject(new Xi(u,d)),this.pendingSignalRequests.delete(c))},this.handleDataPacket=o=>{switch(o.value.case){case"rpcResponse":let c=o.value.value,d=null,u=null;c.value.case==="payload"?d=c.value.value:c.value.case==="error"&&(u=oe.fromProto(c.value.value)),this.handleIncomingRpcResponse(c.requestId,d,u);break;case"rpcAck":let l=o.value.value;this.handleIncomingRpcAck(l.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(o=>uf(o)))},this.onTrackUnmuted=o=>{this.onTrackMuted(o,o.isUpstreamPaused)},this.onTrackMuted=(o,c)=>{if(c===void 0&&(c=!0),!o.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),K(o)));return}this.engine.updateMuteStatus(o.sid,c)},this.onTrackUpstreamPaused=o=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),K(o))),this.onTrackMuted(o,!0)},this.onTrackUpstreamResumed=o=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),K(o))),this.onTrackMuted(o,o.isMuted)},this.onTrackFeatureUpdate=o=>{const c=this.audioTrackPublications.get(o.sid);if(!c){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(o.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(c.trackSid,c.getTrackFeatures())},this.onTrackCpuConstrained=(o,c)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),K(c))),this.emit(M.LocalTrackCpuConstrained,o,c)},this.handleSubscribedQualityUpdate=o=>f(this,void 0,void 0,function*(){var c,d,u,l,h;if(!(!((h=this.roomOptions)===null||h===void 0)&&h.dynacast))return;const m=this.videoTrackPublications.get(o.trackSid);if(!m){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:o.trackSid}));return}if(!m.videoTrack)return;const v=yield m.videoTrack.setPublishingCodecs(o.subscribedCodecs);try{for(var p=!0,S=ut(v),k;k=yield S.next(),c=k.done,!c;p=!0){l=k.value,p=!1;const R=l;So(R)&&(this.log.debug("publish ".concat(R," for ").concat(m.videoTrack.sid),Object.assign(Object.assign({},this.logContext),K(m))),yield this.publishAdditionalCodecForTrack(m.videoTrack,R,m.options))}}catch(R){d={error:R}}finally{try{!p&&!c&&(u=S.return)&&(yield u.call(S))}finally{if(d)throw d.error}}}),this.handleLocalTrackUnpublished=o=>{const c=this.trackPublications.get(o.trackSid);if(!c){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:o.trackSid}));return}this.unpublishTrack(c.track)},this.handleTrackEnded=o=>f(this,void 0,void 0,function*(){if(o.source===C.Source.ScreenShare||o.source===C.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),K(o))),this.unpublishTrack(o);else if(o.isUserProvided)yield o.mute();else if(pt(o)||St(o))try{if(xe())try{const c=yield navigator==null?void 0:navigator.permissions.query({name:o.source===C.Source.Camera?"camera":"microphone"});if(c&&c.state==="denied")throw this.log.warn("user has revoked access to ".concat(o.source),Object.assign(Object.assign({},this.logContext),K(o))),c.onchange=()=>{c.state!=="denied"&&(o.isMuted||o.restartTrack(),c.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}o.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),K(o))),pt(o)?yield o.restartTrack({deviceId:"default"}):yield o.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),K(o))),yield o.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=i,this.roomOptions=r,this.setupEngine(i),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=s,this.roomOutgoingDataStreamManager=a}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Le.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){var t;this.engine=e,this.engine.on(O.RemoteMute,(i,r)=>{const s=this.trackPublications.get(i);!s||!s.track||(r?s.mute():s.unmute())}),!((t=this.signalConnectedFuture)===null||t===void 0)&&t.isResolved&&(this.signalConnectedFuture=void 0),this.engine.on(O.Connected,this.handleReconnected).on(O.SignalConnected,this.handleSignalConnected).on(O.SignalRestarted,this.handleReconnected).on(O.SignalResumed,this.handleReconnected).on(O.Restarting,this.handleReconnecting).on(O.Resuming,this.handleReconnecting).on(O.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(O.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(O.Closing,this.handleClosing).on(O.SignalRequestResponse,this.handleSignalRequestResponse).on(O.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return f(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return f(this,arguments,void 0,function(t){var i=this;let{metadata:r,name:s,attributes:a}=t;return function*(){return new Promise((o,c)=>f(i,void 0,void 0,function*(){var d,u;try{let l=!1;const h=yield this.engine.client.sendUpdateLocalMetadata((d=r??this.metadata)!==null&&d!==void 0?d:"",(u=s??this.name)!==null&&u!==void 0?u:"",a),m=performance.now();for(this.pendingSignalRequests.set(h,{resolve:o,reject:v=>{c(v),l=!0},values:{name:s,metadata:r,attributes:a}});performance.now()-m<5e3&&!l;){if((!s||this.name===s)&&(!r||this.metadata===r)&&(!a||Object.entries(a).every(v=>{let[p,S]=v;return this.attributes[p]===S||S===""&&!this.attributes[p]}))){this.pendingSignalRequests.delete(h),o();return}yield Ae(50)}c(new Xi("Request to update local metadata timed out","TimeoutError"))}catch(l){l instanceof Error&&c(l)}}))}()})}setCameraEnabled(e,t,i){return this.setTrackEnabled(C.Source.Camera,e,t,i)}setMicrophoneEnabled(e,t,i){return this.setTrackEnabled(C.Source.Microphone,e,t,i)}setScreenShareEnabled(e,t,i){return this.setTrackEnabled(C.Source.ScreenShare,e,t,i)}setPermissions(e){const t=this.permissions,i=super.setPermissions(e);return i&&t&&this.emit(M.ParticipantPermissionsChanged,t),i}setE2EEEnabled(e){return f(this,void 0,void 0,function*(){this.encryptionType=e?Le.GCM:Le.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,r){return f(this,void 0,void 0,function*(){var s,a;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let o=this.getTrackPublication(e);if(t)if(o)yield o.unmute();else{let c;if(this.pendingPublishing.has(e)){const d=yield this.waitForPendingPublicationOfSource(e);return d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield d==null?void 0:d.unmute(),d}this.pendingPublishing.add(e);try{switch(e){case C.Source.Camera:c=yield this.createTracks({video:(s=i)!==null&&s!==void 0?s:!0});break;case C.Source.Microphone:c=yield this.createTracks({audio:(a=i)!==null&&a!==void 0?a:!0});break;case C.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new Je(e)}}catch(d){throw c==null||c.forEach(u=>{u.stop()}),d instanceof Error&&this.emit(M.MediaDevicesError,d,mr(e)),this.pendingPublishing.delete(e),d}for(const d of c){const u=Object.assign(Object.assign({},this.roomOptions.publishDefaults),i);e===C.Source.Microphone&&Qe(d)&&u.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),d.startPreConnectBuffer())}try{const d=[];for(const l of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),K(l))),d.push(this.publishTrack(l,r));[o]=yield Promise.all(d)}catch(d){throw c==null||c.forEach(u=>{u.stop()}),d}finally{this.pendingPublishing.delete(e)}}else if(!(o!=null&&o.track)&&this.pendingPublishing.has(e)&&(o=yield this.waitForPendingPublicationOfSource(e),o||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),o&&o.track)if(e===C.Source.ScreenShare){o=yield this.unpublishTrack(o.track);const c=this.getTrackPublication(C.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield o.mute();return o})}enableCameraAndMicrophone(){return f(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(C.Source.Camera)||this.pendingPublishing.has(C.Source.Microphone))){this.pendingPublishing.add(C.Source.Camera),this.pendingPublishing.add(C.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(C.Source.Camera),this.pendingPublishing.delete(C.Source.Microphone)}}})}createTracks(e){return f(this,void 0,void 0,function*(){var t,i;e??(e={});const r=No(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 Pn(r,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(o=>(Qe(o)&&(this.microphoneError=void 0,o.setAudioContext(this.audioContext),o.source=C.Source.Microphone,this.emit(M.AudioStreamAcquired)),mt(o)&&(this.cameraError=void 0,o.source=C.Source.Camera),o))}catch(s){throw s instanceof Error&&(e.audio&&(this.microphoneError=s),e.video&&(this.cameraError=s)),s}})}createScreenTracks(e){return f(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new gn("getDisplayMedia not supported");e.resolution===void 0&&!Ro()&&(e.resolution=bn.h1080fps30.resolution);const t=Fo(e),i=yield navigator.mediaDevices.getDisplayMedia(t),r=i.getVideoTracks();if(r.length===0)throw new Je("no video track found");const s=new Qt(r[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=C.Source.ScreenShare,e.contentHint&&(s.mediaStreamTrack.contentHint=e.contentHint);const a=[s];if(i.getAudioTracks().length>0){this.emit(M.AudioStreamAcquired);const o=new $t(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});o.source=C.Source.ScreenShareAudio,a.push(o)}return a})}publishTrack(e,t){return f(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,t)})}publishOrRepublishTrack(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var o,c,d,u;pt(i)&&i.setAudioContext(s.audioContext),yield(o=s.reconnectFuture)===null||o===void 0?void 0:o.promise,s.republishPromise&&!a&&(yield s.republishPromise),Tt(i)&&s.pendingPublishPromises.has(i)&&(yield s.pendingPublishPromises.get(i));let l;if(i instanceof MediaStreamTrack)l=i.getConstraints();else{l=i.constraints;let k;switch(i.source){case C.Source.Microphone:k="audioinput";break;case C.Source.Camera:k="videoinput"}k&&s.activeDeviceMap.has(k)&&(l=Object.assign(Object.assign({},l),{deviceId:s.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new $t(i,l,!0,s.audioContext,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;case"video":i=new Qt(i,l,!0,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;default:throw new Je("unsupported MediaStreamTrack kind ".concat(i.kind))}else i.updateLoggerOptions({loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});let h;if(s.trackPublications.forEach(k=>{k.track&&k.track===i&&(h=k)}),h)return s.log.warn("track has already been published, skipping",Object.assign(Object.assign({},s.logContext),K(h))),h;const m="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,v=(c=r==null?void 0:r.forceStereo)!==null&&c!==void 0?c:m;v&&(r||(r={}),r.dtx===void 0&&s.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},s.logContext),K(i))),r.red===void 0&&s.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(d=r.dtx)!==null&&d!==void 0||(r.dtx=!1),(u=r.red)!==null&&u!==void 0||(r.red=!1));const p=Object.assign(Object.assign({},s.roomOptions.publishDefaults),r);!Jl()&&s.roomOptions.e2ee&&(s.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({},s.logContext)),p.simulcast=!1),p.source&&(i.source=p.source);const S=new Promise((k,R)=>f(s,void 0,void 0,function*(){try{if(this.engine.client.currentState!==ie.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:K(i)}));const w=setTimeout(()=>{R(new Yi("publishing rejected as engine not connected within timeout",408))},15e3);yield this.waitUntilEngineConnected(),clearTimeout(w);const g=yield this.publish(i,p,v);k(g)}else try{const w=yield this.publish(i,p,v);k(w)}catch(w){R(w)}}catch(w){R(w)}}));s.pendingPublishPromises.set(i,S);try{return yield S}catch(k){throw k}finally{s.pendingPublishPromises.delete(i)}}()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new at),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),K(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(r=>lh(r)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),K(e))),!1)}publish(e,t,i){return f(this,void 0,void 0,function*(){var r,s,a,o,c,d,u,l,h,m;if(!this.hasPermissionsToPublish(e))throw new Yi("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(A=>Tt(e)&&A.source===e.source)&&e.source!==C.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),K(e))),t.stopMicTrackOnMute&&Qe(e)&&(e.stopOnMute=!0),e.source===C.Source.ScreenShare&&At()&&(t.simulcast=!1),t.videoCodec==="av1"&&!Eo()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!Po()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=Sr),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(A=>t.videoCodec===Sn(A.mime))||(t.videoCodec=Sn(this.enabledPublishVideoCodecs[0].mime)));const p=t.videoCodec;e.on(I.Muted,this.onTrackMuted),e.on(I.Unmuted,this.onTrackUnmuted),e.on(I.Ended,this.handleTrackEnded),e.on(I.UpstreamPaused,this.onTrackUpstreamPaused),e.on(I.UpstreamResumed,this.onTrackUpstreamResumed),e.on(I.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const S=[],k=!(!((r=t.dtx)!==null&&r!==void 0)||r),R=e.getSourceTrackSettings();R.autoGainControl&&S.push(ge.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&S.push(ge.TF_ECHO_CANCELLATION),R.noiseSuppression&&S.push(ge.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&S.push(ge.TF_STEREO),k&&S.push(ge.TF_NO_DTX),pt(e)&&e.hasPreConnectBuffer&&S.push(ge.TF_PRECONNECT_BUFFER);const w=new Li({cid:e.mediaStreamTrack.id,name:t.name,type:C.kindToProto(e.kind),muted:e.isMuted,source:C.sourceToProto(e.source),disableDtx:k,encryption:this.encryptionType,stereo:i,disableRed:this.isE2EEEnabled||!(!((s=t.red)!==null&&s!==void 0)||s),stream:t==null?void 0:t.stream,backupCodecPolicy:t==null?void 0:t.backupCodecPolicy,audioFeatures:S});let g;if(e.kind===C.Kind.Video){let A={width:0,height:0};try{A=yield e.waitForDimensions()}catch{const D=(o=(a=this.roomOptions.videoCaptureDefaults)===null||a===void 0?void 0:a.resolution)!==null&&o!==void 0?o:Ht.h720.resolution;A={width:D.width,height:D.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{dims:A}))}w.width=A.width,w.height=A.height,St(e)&&(rt(p)&&(e.source===C.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),K(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),w.simulcastCodecs=[new xi({codec:p,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:Sr}),t.backupCodec&&p!==t.backupCodec.codec&&w.encryption===Le.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new xi({codec:t.backupCodec.codec,cid:""})))),g=Ir(e.source===C.Source.ScreenShare,w.width,w.height,t),w.layers=oc(w.width,w.height,g,rt(t.videoCodec))}else e.kind===C.Kind.Audio&&(g=[{maxBitrate:(d=t.audioPreset)===null||d===void 0?void 0:d.maxBitrate,priority:(l=(u=t.audioPreset)===null||u===void 0?void 0:u.priority)!==null&&l!==void 0?l:"high",networkPriority:(m=(h=t.audioPreset)===null||h===void 0?void 0:h.priority)!==null&&m!==void 0?m:"high"}]);if(!this.engine||this.engine.isClosed)throw new fe("cannot publish track when not connected");const b=()=>f(this,void 0,void 0,function*(){var A,T,D;if(!this.engine.pcManager)throw new fe("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,g),this.emit(M.LocalSenderCreated,e.sender,e),St(e)&&((A=t.degradationPreference)!==null&&A!==void 0||(t.degradationPreference=Gh(e)),e.setDegradationPreference(t.degradationPreference)),g)if(At()&&e.kind===C.Kind.Audio){let N;for(const J of this.engine.pcManager.publisher.getTransceivers())if(J.sender===e.sender){N=J;break}N&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:N,codec:"opus",maxbr:!((T=g[0])===null||T===void 0)&&T.maxBitrate?g[0].maxBitrate/1e3:0})}else e.codec&&rt(e.codec)&&(!((D=g[0])===null||D===void 0)&&D.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:g[0].maxBitrate/1e3});yield this.engine.negotiate()});let P;const L=new Promise((A,T)=>f(this,void 0,void 0,function*(){var D;try{P=yield this.engine.addTrack(w),A(P)}catch(N){e.sender&&(!((D=this.engine.pcManager)===null||D===void 0)&&D.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(J=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{error:J}))})),T(N)}}));if(this.enabledPublishVideoCodecs.length>0)P=(yield Promise.all([L,b()]))[0];else{P=yield L;let A;if(P.codecs.forEach(T=>{A===void 0&&(A=T.mimeType)}),A&&e.kind===C.Kind.Video){const T=Sn(A);T!==p&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{codec:T})),t.videoCodec=T,g=Ir(e.source===C.Source.ScreenShare,w.width,w.height,t))}yield b()}const U=new oi(e.kind,P,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(U.on(I.CpuConstrained,A=>this.onTrackCpuConstrained(A,U)),U.options=t,e.sid=P.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:g,trackInfo:P})),St(e)?e.startMonitor(this.engine.client):pt(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(M.LocalTrackPublished,U),pt(e)&&P.audioFeatures.includes(ge.TF_PRECONNECT_BUFFER)){const A=e.getPreConnectBuffer(),T=e.getPreConnectBufferMimeType();this.on(M.LocalTrackSubscribed,D=>{if(D.trackSid===P.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),K(e))),e.stopPreConnectBuffer()}}),A&&new Promise((N,J)=>f(this,void 0,void 0,function*(){var Q,Y,me,Te,be,ae;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),K(e)));const j=setTimeout(()=>{J(new Error("agent not active within 10 seconds"))},1e4),F=yield this.waitUntilActiveAgentPresent();clearTimeout(j),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),K(e)));const X=yield this.streamBytes({name:"preconnect-buffer",mimeType:T,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[F.identity],attributes:{trackId:U.trackSid,sampleRate:String((be=R.sampleRate)!==null&&be!==void 0?be:"48000"),channels:String((ae=R.channelCount)!==null&&ae!==void 0?ae:"1")}});try{for(var ce=!0,Se=ut(A),Ke;Ke=yield Se.next(),Q=Ke.done,!Q;ce=!0){Te=Ke.value,ce=!1;const Ce=Te;yield X.write(Ce)}}catch(Ce){Y={error:Ce}}finally{try{!ce&&!Q&&(me=Se.return)&&(yield me.call(Se))}finally{if(Y)throw Y.error}}yield X.close(),N()}catch(j){J(j)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),K(e)))}).catch(N=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{error:N}))})}return U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return f(this,void 0,void 0,function*(){var r;if(this.encryptionType!==Le.NONE)return;let s;if(this.trackPublications.forEach(m=>{m.track&&m.track===e&&(s=m)}),!s)throw new Je("track is not published");if(!St(e))throw new Je("track is not a video track");const a=Object.assign(Object.assign({},(r=this.roomOptions)===null||r===void 0?void 0:r.publishDefaults),i),o=Kh(e,t,a);if(!o){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),K(e)));return}const c=e.addSimulcastTrack(t,o);if(!c)return;const d=new Li({cid:c.mediaStreamTrack.id,type:C.kindToProto(e.kind),muted:e.isMuted,source:C.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:a.videoCodec,cid:c.mediaStreamTrack.id}]});if(d.layers=oc(d.width,d.height,o),!this.engine||this.engine.isClosed)throw new fe("cannot publish track when not connected");const u=()=>f(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,a,o),yield this.engine.negotiate()}),h=(yield Promise.all([this.engine.addTrack(d),u()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:o,trackInfo:h}))})}unpublishTrack(e,t){return f(this,void 0,void 0,function*(){var i,r;if(Tt(e)){const d=this.pendingPublishPromises.get(e);d&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),K(e))),yield d)}const s=this.getPublicationForTrack(e),a=s?K(s):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),a)),!s||!s.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),a));return}e=s.track,e.off(I.Muted,this.onTrackMuted),e.off(I.Unmuted,this.onTrackUnmuted),e.off(I.Ended,this.handleTrackEnded),e.off(I.UpstreamPaused,this.onTrackUpstreamPaused),e.off(I.UpstreamResumed,this.onTrackUpstreamResumed),e.off(I.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),t===void 0&&(t=(r=(i=this.roomOptions)===null||i===void 0?void 0:i.stopLocalTrackOnUnpublish)!==null&&r!==void 0?r:!0),t?e.stop():e.stopMonitor();let o=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ue.FAILED&&c)try{for(const d of this.engine.pcManager.publisher.getTransceivers())d.sender===c&&(d.direction="inactive",o=!0);if(this.engine.removeTrack(c)&&(o=!0),St(e)){for(const[,d]of e.simulcastCodecs)d.sender&&(this.engine.removeTrack(d.sender)&&(o=!0),d.sender=void 0);e.simulcastCodecs.clear()}}catch(d){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),a),{error:d}))}switch(this.trackPublications.delete(s.trackSid),s.kind){case C.Kind.Audio:this.audioTrackPublications.delete(s.trackSid);break;case C.Kind.Video:this.videoTrackPublications.delete(s.trackSid);break}return this.emit(M.LocalTrackUnpublished,s),s.setTrack(void 0),o&&(yield this.engine.negotiate()),s})}unpublishTracks(e){return f(this,void 0,void 0,function*(){return(yield Promise.all(e.map(i=>this.unpublishTrack(i)))).filter(i=>!!i)})}republishAllTracks(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){i.republishPromise&&(yield i.republishPromise),i.republishPromise=new Promise((s,a)=>f(i,void 0,void 0,function*(){try{const o=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),o.push(c))}),yield Promise.all(o.map(c=>f(this,void 0,void 0,function*(){const d=c.track;yield this.unpublishTrack(d,!1),r&&!d.isMuted&&d.source!==C.Source.ScreenShare&&d.source!==C.Source.ScreenShareAudio&&(pt(d)||St(d))&&!d.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:c.trackSid})),yield d.restartTrack()),yield this.publishOrRepublishTrack(d,c.options,!0)}))),s()}catch(o){a(o)}finally{this.republishPromise=void 0}})),yield i.republishPromise}()})}publishData(e){return f(this,arguments,void 0,function(t){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const s=r.reliable?V.RELIABLE:V.LOSSY,a=r.destinationIdentities,o=r.topic,c=new De({kind:s,value:{case:"user",value:new Gs({participantIdentity:i.identity,payload:t,destinationIdentities:a,topic:o})}});yield i.engine.sendDataPacket(c,s)}()})}publishDtmf(e,t){return f(this,void 0,void 0,function*(){const i=new De({kind:V.RELIABLE,value:{case:"sipDtmf",value:new Hs({code:e,digit:t})}});yield this.engine.sendDataPacket(i,V.RELIABLE)})}sendChatMessage(e,t){return f(this,void 0,void 0,function*(){const i={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:t==null?void 0:t.attachments},r=new De({value:{case:"chatMessage",value:new _i(Object.assign(Object.assign({},i),{timestamp:se.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(r,V.RELIABLE),this.emit(M.ChatMessage,i),i})}editChatMessage(e,t){return f(this,void 0,void 0,function*(){const i=Object.assign(Object.assign({},t),{message:e,editTimestamp:Date.now()}),r=new De({value:{case:"chatMessage",value:new _i(Object.assign(Object.assign({},i),{timestamp:se.parse(i.timestamp),editTimestamp:se.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(r,V.RELIABLE),this.emit(M.ChatMessage,i),i})}sendText(e,t){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendText(e,t)})}streamText(e){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamText(e)})}sendFile(e,t){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendFile(e,t)})}streamBytes(e){return f(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamBytes(e)})}performRpc(e){return f(this,arguments,void 0,function(t){var i=this;let{destinationIdentity:r,method:s,payload:a,responseTimeout:o=1e4}=t;return function*(){return new Promise((d,u)=>f(i,void 0,void 0,function*(){var l,h,m,v;if(Er(a)>Zo){u(oe.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((h=(l=this.engine.latestJoinResponse)===null||l===void 0?void 0:l.serverInfo)===null||h===void 0)&&h.version&&$e((v=(m=this.engine.latestJoinResponse)===null||m===void 0?void 0:m.serverInfo)===null||v===void 0?void 0:v.version,"1.8.0")<0){u(oe.builtIn("UNSUPPORTED_SERVER"));return}const p=crypto.randomUUID();yield this.publishRpcRequest(r,p,s,a,o-2e3);const S=setTimeout(()=>{this.pendingAcks.delete(p),u(oe.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(p),clearTimeout(k)},2e3);this.pendingAcks.set(p,{resolve:()=>{clearTimeout(S)},participantIdentity:r});const k=setTimeout(()=>{this.pendingResponses.delete(p),u(oe.builtIn("RESPONSE_TIMEOUT"))},o);this.pendingResponses.set(p,{resolve:(R,w)=>{clearTimeout(k),this.pendingAcks.has(p)&&(console.warn("RPC response received before ack",p),this.pendingAcks.delete(p),clearTimeout(S)),w?u(w):d(R??"")},participantIdentity:r})}))}()})}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 r=this.pendingResponses.get(e);r?(r.resolve(t,i),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,t,i,r,s){return f(this,void 0,void 0,function*(){const a=new De({destinationIdentities:[e],kind:V.RELIABLE,value:{case:"rpcRequest",value:new Js({id:t,method:i,payload:r,responseTimeoutMs:s,version:1})}});yield this.engine.sendDataPacket(a,V.RELIABLE)})}handleParticipantDisconnected(e){for(const[t,{participantIdentity:i}]of this.pendingAcks)i===e&&this.pendingAcks.delete(t);for(const[t,{participantIdentity:i,resolve:r}]of this.pendingResponses)i===e&&(r(null,oe.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,r;const s=this.trackPublications.get(t.sid);if(s){const a=s.isMuted||((r=(i=s.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&r!==void 0?r:!1);a!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),K(s)),{mutedOnServer:a})),this.engine.client.sendMuteTrack(t.sid,a))}}),!0):!1}setActiveAgent(e){var t,i,r,s;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):(s=(r=this.activeAgentFuture)===null||r===void 0?void 0:r.reject)===null||s===void 0||s.call(r,"Agent disconnected"),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new at),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const r=i.track;r&&(e instanceof MediaStreamTrack?(pt(r)||St(r))&&r.mediaStreamTrack===e&&(t=i):e===r&&(t=i))}),t}waitForPendingPublicationOfSource(e){return f(this,void 0,void 0,function*(){const i=Date.now();for(;Date.now()<i+1e4;){const r=Array.from(this.pendingPublishPromises.entries()).find(s=>{let[a]=s;return a.source===e});if(r)return r[1];yield Ae(20)}})}}class yc extends ot{constructor(e,t,i,r){super(e,t.sid,t.name,r),this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=s=>{this.setTrack(void 0),this.emit(I.Ended,s)},this.handleVisibilityChange=s=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(s),this.logContext),this.visible=s,this.emitTrackUpdate()},this.handleVideoDimensionsChange=s=>{this.log.debug("adaptivestream video dimensions ".concat(s.width,"x").concat(s.height),this.logContext),this.videoDimensionsAdaptiveStream=s,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 r=new Bn({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Xs({participantSid:"",trackSids:[this.trackSid]})]});this.emit(I.UpdateSubscription,r),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?ot.SubscriptionStatus.Unsubscribed:super.isSubscribed?ot.SubscriptionStatus.Subscribed:ot.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?ot.PermissionStatus.Allowed:ot.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return this.requestedDisabled!==void 0?!this.requestedDisabled:this.isAdaptiveStream?this.visible:!0}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.requestedDisabled===!e||(this.requestedDisabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.requestedMaxQuality===e||(this.requestedMaxQuality=e,this.requestedVideoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var t,i;this.isManualOperationAllowed()&&(((t=this.requestedVideoDimensions)===null||t===void 0?void 0:t.width)===e.width&&((i=this.requestedVideoDimensions)===null||i===void 0?void 0:i.height)===e.height||(ur(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&ur(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var e;return(e=this.requestedMaxQuality)!==null&&e!==void 0?e:Oe.HIGH}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,r=this.track;r!==e&&(r&&(r.off(I.VideoDimensionsChanged,this.handleVideoDimensionsChange),r.off(I.VisibilityChanged,this.handleVisibilityChange),r.off(I.Ended,this.handleEnded),r.detach(),r.stopMonitor(),this.emit(I.Unsubscribed,r)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(I.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(I.VisibilityChanged,this.handleVisibilityChange),e.on(I.Ended,this.handleEnded),this.emit(I.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(I.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?I.Muted:I.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(I.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(I.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return ur(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new ca({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===C.Kind.Video){let t=this.requestedVideoDimensions;if(this.videoDimensionsAdaptiveStream!==void 0)if(t)Bo(this.videoDimensionsAdaptiveStream,t)&&(this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream);else if(this.requestedMaxQuality!==void 0&&this.trackInfo){const i=hh(this.trackInfo,this.requestedMaxQuality);i&&Bo(this.videoDimensionsAdaptiveStream,i)&&(this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream)}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),t=this.videoDimensionsAdaptiveStream;t?(e.width=Math.ceil(t.width),e.height=Math.ceil(t.height)):this.requestedMaxQuality!==void 0?(this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),e.quality=this.requestedMaxQuality):(this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:Oe.HIGH})),e.quality=Oe.HIGH)}this.emit(I.UpdateSettings,e)}}class wn extends Nr{static fromParticipantInfo(e,t,i){return new wn(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,r,s,a,o){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qt.STANDARD;super(t,i||"",r,s,a,o,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(I.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),K(e)),{settings:t})),this.signalClient.sendUpdateTrackSettings(t)}),e.on(I.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(I.SubscriptionPermissionChanged,t=>{this.emit(M.TrackSubscriptionPermissionChanged,e,t)}),e.on(I.SubscriptionStatusChanged,t=>{this.emit(M.TrackSubscriptionStatusChanged,e,t)}),e.on(I.Subscribed,t=>{this.emit(M.TrackSubscribed,t,e)}),e.on(I.Unsubscribed,t=>{this.emit(M.TrackUnsubscribed,t,e)}),e.on(I.SubscriptionFailed,t=>{this.emit(M.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]:C.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]:C.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,i,r,s,a){let o=this.getTrackPublicationBySid(t);if(o||t.startsWith("TR")||this.trackPublications.forEach(u=>{!o&&e.kind===u.kind.toString()&&(o=u)}),!o){if(a===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(M.TrackSubscriptionFailed,t);return}a===void 0&&(a=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,r,s,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),K(o))),this.emit(M.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let d;return c?d=new mc(e,t,r,s):d=new fc(e,t,r,this.audioContext,this.audioOutput),d.source=o.source,d.isMuted=o.isMuted,d.setMediaStream(i),d.start(),o.setTrack(d),this.volumeMap.has(o.source)&&ri(d)&&Qe(d)&&d.setVolume(this.volumeMap.get(o.source)),o}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const t=new Map,i=new Map;return e.tracks.forEach(r=>{var s,a;let o=this.getTrackPublicationBySid(r.sid);if(o)o.updateInfo(r);else{const c=C.kindFromProto(r.type);if(!c)return;o=new yc(c,r,(s=this.signalClient.connectOptions)===null||s===void 0?void 0:s.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(a=this.loggerOptions)===null||a===void 0?void 0:a.loggerName}),o.updateInfo(r),i.set(r.sid,o);const d=Array.from(this.trackPublications.values()).find(u=>u.source===(o==null?void 0:o.source));d&&o.source!==C.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(o.source),Object.assign(Object.assign({},this.logContext),{oldTrack:K(d),newTrack:K(o)})),this.addTrackPublication(o)}t.set(r.sid,o)}),this.trackPublications.forEach(r=>{t.has(r.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),K(r))),this.unpublishTrack(r.trackSid,!0))}),i.forEach(r=>{this.emit(M.TrackPublished,r)}),!0}unpublishTrack(e,t){const i=this.trackPublications.get(e);if(!i)return;const{track:r}=i;switch(r&&(r.stop(),i.setTrack(void 0)),this.trackPublications.delete(e),i.kind){case C.Kind.Audio:this.audioTrackPublications.delete(e);break;case C.Kind.Video:this.videoTrackPublications.delete(e);break}t&&this.emit(M.TrackUnpublished,i)}setAudioOutput(e){return f(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var r;Qe(i.track)&&ri(i.track)&&t.push(i.track.setSinkId((r=e.deviceId)!==null&&r!==void 0?r:"default"))}),yield Promise.all(t)})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:i})),super.emit(e,...i)}}var $;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})($||($={}));const lf=4*1e3;class Xt extends it.EventEmitter{constructor(e){var t,i,r,s;if(super(),t=this,this.state=$.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=q,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(a,o,c)=>f(this,void 0,void 0,function*(){var d;if(!wo())throw st()?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 u=yield this.disconnectLock.lock();if(this.state===$.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),u(),Promise.resolve();if(this.connectFuture)return u(),this.connectFuture.promise;this.setAndEmitConnectionState($.Connecting),((d=this.regionUrlProvider)===null||d===void 0?void 0:d.getServerUrl().toString())!==a&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),rr(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new Or(a,o):this.regionUrlProvider.updateToken(o),this.regionUrlProvider.fetchRegionSettings().then(m=>{var v;(v=this.regionUrlProvider)===null||v===void 0||v.setServerReportedRegions(m)}).catch(m=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:m}))}));const l=(m,v,p)=>f(this,void 0,void 0,function*(){var S,k;this.abortController&&this.abortController.abort();const R=new AbortController;this.abortController=R,u==null||u();try{yield this.attemptConnection(p??a,o,c,R),this.abortController=void 0,m()}catch(w){if(this.regionUrlProvider&&w instanceof ee&&w.reason!==H.Cancelled&&w.reason!==H.NotAllowed){let g=null;try{g=yield this.regionUrlProvider.getNextBestRegionUrl((S=this.abortController)===null||S===void 0?void 0:S.signal)}catch(b){if(b instanceof ee&&(b.status===401||b.reason===H.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),v(b);return}}g&&!(!((k=this.abortController)===null||k===void 0)&&k.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(w.message,". Retrying with another region: ").concat(g),this.logContext),this.recreateEngine(),yield l(m,v,g)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,xo(w)),v(w))}else{let g=Fe.UNKNOWN_REASON;w instanceof ee&&(g=xo(w)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,g),v(w)}}}),h=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new at((m,v)=>{l(m,v,h)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,o,c,d,u,l)=>f(this,void 0,void 0,function*(){var h,m,v;const p=yield c.join(a,o,{autoSubscribe:d.autoSubscribe,adaptiveStream:typeof u.adaptiveStream=="object"?!0:u.adaptiveStream,maxRetries:d.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:d.websocketTimeout},l.signal);let S=p.serverInfo;if(S||(S={version:p.serverVersion,region:p.serverRegion}),this.serverInfo=S,this.log.debug("connected to Livekit Server ".concat(Object.entries(S).map(k=>{let[R,w]=k;return"".concat(R,": ").concat(w)}).join(", ")),{room:(h=p.room)===null||h===void 0?void 0:h.name,roomSid:(m=p.room)===null||m===void 0?void 0:m.sid,identity:(v=p.participant)===null||v===void 0?void 0:v.identity}),!S.version)throw new yo("unknown server version");return S.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),u.dynacast=!1),p}),this.applyJoinResponse=a=>{const o=a.participant;if(this.localParticipant.sid=o.sid,this.localParticipant.identity=o.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([o,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,o,c,d)=>f(this,void 0,void 0,function*(){var u,l;this.state===$.Reconnecting||this.isResuming||!((u=this.engine)===null||u===void 0)&&u.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((l=this.regionUrlProvider)===null||l===void 0)&&l.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Cr),c),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const h=yield this.connectSignal(a,o,this.engine,this.connOptions,this.options,d);this.applyJoinResponse(h),this.setupLocalParticipantEvents(),this.emit(_.SignalConnected)}catch(h){yield this.engine.close(),this.recreateEngine();const m=new ee("could not establish signal connection",H.ServerUnreachable);throw h instanceof Error&&(m.message="".concat(m.message,": ").concat(h.message)),h instanceof ee&&(m.reason=h.reason,m.status=h.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:h})),m}if(d.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new ee("Connection attempt aborted",H.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,d)}catch(h){throw yield this.engine.close(),this.recreateEngine(),h}xe()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xe()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState($.Connected),this.emit(_.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var a=arguments.length,o=new Array(a),c=0;c<a;c++)o[c]=arguments[c];return f(t,[...o],void 0,function(){var d=this;let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var l,h,m,v;const p=yield d.disconnectLock.lock();try{if(d.state===$.Disconnected){d.log.debug("already disconnected",d.logContext);return}d.log.info("disconnect from room",Object.assign({},d.logContext)),(d.state===$.Connecting||d.state===$.Reconnecting||d.isResuming)&&(d.log.warn("abort connection attempt",d.logContext),(l=d.abortController)===null||l===void 0||l.abort(),(m=(h=d.connectFuture)===null||h===void 0?void 0:h.reject)===null||m===void 0||m.call(h,new ee("Client initiated disconnect",H.Cancelled)),d.connectFuture=void 0),!((v=d.engine)===null||v===void 0)&&v.client.isDisconnected||(yield d.engine.client.sendLeave()),d.engine&&(yield d.engine.close()),d.handleDisconnect(u,Fe.CLIENT_INITIATED),d.engine=void 0}finally{p()}}()})},this.onPageLeave=()=>f(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>f(this,void 0,void 0,function*(){const a=[],o=Me();if(o&&o.os==="iOS"){const c="livekit-dummy-audio-el";let d=document.getElementById(c);if(!d){d=document.createElement("audio"),d.id=c,d.autoplay=!0,d.hidden=!0;const u=ni();u.enabled=!0;const l=new MediaStream([u]);d.srcObject=l,document.addEventListener("visibilitychange",()=>{d&&(d.srcObject=document.hidden?null:l,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(d),this.once(_.Disconnected,()=>{d==null||d.remove(),d=null})}a.push(d)}this.remoteParticipants.forEach(c=>{c.audioTrackPublications.forEach(d=>{d.track&&d.track.attachedElements.forEach(u=>{a.push(u)})})});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=()=>f(this,void 0,void 0,function*(){const a=[];for(const o of this.remoteParticipants.values())o.videoTrackPublications.forEach(c=>{var d;(d=c.track)===null||d===void 0||d.attachedElements.forEach(u=>{a.includes(u)||a.push(u)})});yield Promise.all(a.map(o=>o.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(o=>{o.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const a of this.remoteParticipants.values())this.handleParticipantDisconnected(a.identity,a);this.setAndEmitConnectionState($.Reconnecting)&&this.emit(_.Reconnecting)},this.handleSignalRestarted=a=>f(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(o){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:o}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:a.serverRegion}))}catch{return}this.setAndEmitConnectionState($.Connected),this.emit(_.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(o=>{var c;if(o.identity===this.localParticipant.identity){this.localParticipant.updateInfo(o);return}o.identity===""&&(o.identity=(c=this.sidToIdentity.get(o.sid))!==null&&c!==void 0?c:"");let d=this.remoteParticipants.get(o.identity);o.state===Vt.DISCONNECTED?this.handleParticipantDisconnected(o.identity,d):d=this.getOrCreateParticipant(o.identity,o)})},this.handleActiveSpeakersUpdate=a=>{const o=[],c={};a.forEach(d=>{if(c[d.sid]=!0,d.sid===this.localParticipant.sid)this.localParticipant.audioLevel=d.level,this.localParticipant.setIsSpeaking(!0),o.push(this.localParticipant);else{const u=this.getRemoteParticipantBySid(d.sid);u&&(u.audioLevel=d.level,u.setIsSpeaking(!0),o.push(u))}}),c[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(d=>{c[d.sid]||(d.audioLevel=0,d.setIsSpeaking(!1))}),this.activeSpeakers=o,this.emitWhenConnected(_.ActiveSpeakersChanged,o)},this.handleSpeakersChanged=a=>{const o=new Map;this.activeSpeakers.forEach(d=>{const u=this.remoteParticipants.get(d.identity);u&&u.sid!==d.sid||o.set(d.sid,d)}),a.forEach(d=>{let u=this.getRemoteParticipantBySid(d.sid);d.sid===this.localParticipant.sid&&(u=this.localParticipant),u&&(u.audioLevel=d.level,u.setIsSpeaking(d.active),d.active?o.set(d.sid,u):o.delete(d.sid))});const c=Array.from(o.values());c.sort((d,u)=>u.audioLevel-d.audioLevel),this.activeSpeakers=c,this.emitWhenConnected(_.ActiveSpeakersChanged,c)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(o=>{const c=this.getRemoteParticipantBySid(o.participantSid);if(!c)return;const d=c.getTrackPublicationBySid(o.trackSid);if(!d||!d.track)return;const u=C.streamStateFromProto(o.state);d.track.setStreamState(u),u!==d.track.streamState&&(c.emit(M.TrackStreamStateChanged,d,d.track.streamState),this.emitWhenConnected(_.TrackStreamStateChanged,d,d.track.streamState,c))})},this.handleSubscriptionPermissionUpdate=a=>{const o=this.getRemoteParticipantBySid(a.participantSid);if(!o)return;const c=o.getTrackPublicationBySid(a.trackSid);c&&c.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const o=Array.from(this.remoteParticipants.values()).find(d=>d.trackPublications.has(a.trackSid));if(!o)return;const c=o.getTrackPublicationBySid(a.trackSid);c&&c.setSubscriptionError(a.err)},this.handleDataPacket=a=>{const o=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(o,a.value.value,a.kind);else if(a.value.case==="transcription")this.handleTranscription(o,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(o,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(o,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,o);else if(a.value.case==="streamHeader"||a.value.case==="streamChunk"||a.value.case==="streamTrailer")this.handleDataStream(a);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,o,c)=>{this.emit(_.DataReceived,o.payload,a,c,o.topic),a==null||a.emit(M.DataReceived,o.payload,c)},this.handleSipDtmf=(a,o)=>{this.emit(_.SipDTMFReceived,o,a),a==null||a.emit(M.SipDTMFReceived,o)},this.handleTranscription=(a,o)=>{const c=o.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(o.transcribedParticipantIdentity),d=c==null?void 0:c.trackPublications.get(o.trackId),u=nh(o,this.transcriptionReceivedTimes);d==null||d.emit(I.TranscriptionReceived,u),c==null||c.emit(M.TranscriptionReceived,u,d),this.emit(_.TranscriptionReceived,u,c,d)},this.handleChatMessage=(a,o)=>{const c=ih(o);this.emit(_.ChatMessage,c,a)},this.handleMetrics=(a,o)=>{this.emit(_.MetricsReceived,a,o)},this.handleDataStream=a=>{this.incomingDataStreamManager.handleDataStreamPacket(a)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(_.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(_.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(_.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(_.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>f(this,void 0,void 0,function*(){var a;((a=Me())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(_.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const o=this.roomInfo;this.roomInfo=a,o&&o.metadata!==a.metadata&&this.emitWhenConnected(_.RoomMetadataChanged,a.metadata),(o==null?void 0:o.activeRecording)!==a.activeRecording&&this.emitWhenConnected(_.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(o=>{if(o.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(o.quality);return}const c=this.getRemoteParticipantBySid(o.participantSid);c&&c.setConnectionQuality(o.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(_.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(_.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(_.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(_.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(_.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var o;(o=a==null?void 0:a.onPublish)===null||o===void 0||o.call(a,this)},this.onLocalTrackPublished=a=>f(this,void 0,void 0,function*(){var o,c,d,u,l,h;(o=a.track)===null||o===void 0||o.on(I.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.on(I.Restarted,this.onLocalTrackRestarted),(l=(u=(d=a.track)===null||d===void 0?void 0:d.getProcessor())===null||u===void 0?void 0:u.onPublish)===null||l===void 0||l.call(u,this),this.emit(_.LocalTrackPublished,a,this.localParticipant),pt(a.track)&&(yield a.track.checkForSilence())&&this.emit(_.LocalAudioSilenceDetected,a);const m=yield(h=a.track)===null||h===void 0?void 0:h.getDeviceId(!1),v=mr(a.source);v&&m&&m!==this.localParticipant.activeDeviceMap.get(v)&&(this.localParticipant.activeDeviceMap.set(v,m),this.emit(_.ActiveDeviceChanged,v,m))}),this.onLocalTrackUnpublished=a=>{var o,c;(o=a.track)===null||o===void 0||o.off(I.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.off(I.Restarted,this.onLocalTrackRestarted),this.emit(_.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>f(this,void 0,void 0,function*(){const o=yield a.getDeviceId(!1),c=mr(a.source);c&&o&&o!==this.localParticipant.activeDeviceMap.get(c)&&(this.log.debug("local track restarted, setting ".concat(c," ").concat(o," active"),this.logContext),this.localParticipant.activeDeviceMap.set(c,o),this.emit(_.ActiveDeviceChanged,c,o))}),this.onLocalConnectionQualityChanged=a=>{this.emit(_.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,o)=>{this.emit(_.MediaDevicesError,a,o)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(_.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(_.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},Ih),e),this.log=nt((i=this.options.loggerName)!==null&&i!==void 0?i:je.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Yo),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Xo),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},_h),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new nf,this.outgoingDataStreamManager=new af(this.engine,this.log),this.disconnectLock=new we,this.localParticipant=new vc("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",kt(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",kt(this.options.audioCaptureDefaults.deviceId)),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&this.switchActiveDevice("audiooutput",kt(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xe()){const a=new AbortController;(s=navigator.mediaDevices)===null||s===void 0||s.addEventListener("devicechange",this.handleDeviceChange,{signal:a.signal}),Xt.cleanupRegistry&&Xt.cleanupRegistry.register(this,()=>{a.abort()})}}registerTextStreamHandler(e,t){return this.incomingDataStreamManager.registerTextStreamHandler(e,t)}unregisterTextStreamHandler(e){return this.incomingDataStreamManager.unregisterTextStreamHandler(e)}registerByteStreamHandler(e,t){return this.incomingDataStreamManager.registerByteStreamHandler(e,t)}unregisterByteStreamHandler(e){return this.incomingDataStreamManager.unregisterByteStreamHandler(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)}setE2EEEnabled(e){return f(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 fh(this.options.e2ee),this.e2eeManager.on(ht.ParticipantEncryptionStatusChanged,(t,i)=>{Lo(i)&&(this.isE2EEEnabled=t),this.emit(_.ParticipantEncryptionStatusChanged,t,i)}),this.e2eeManager.on(ht.EncryptionError,t=>this.emit(_.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 f(this,void 0,void 0,function*(){return this.state===$.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,t)=>{const i=r=>{r.sid!==""&&(this.engine.off(O.RoomUpdate,i),e(r.sid))};this.engine.on(O.RoomUpdate,i),this.once(_.Disconnected,()=>{this.engine.off(O.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 Qh(this.options),this.engine.on(O.ParticipantUpdate,this.handleParticipantUpdates).on(O.RoomUpdate,this.handleRoomUpdate).on(O.SpeakersChanged,this.handleSpeakersChanged).on(O.StreamStateChanged,this.handleStreamStateUpdate).on(O.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(O.SubscriptionError,this.handleSubscriptionError).on(O.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(O.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(O.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(O.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(O.DataPacketReceived,this.handleDataPacket).on(O.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState($.SignalReconnecting)&&this.emit(_.SignalReconnecting)}).on(O.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState($.Connected)&&this.emit(_.Reconnected)}).on(O.SignalResumed,()=>{this.bufferedEvents=[],(this.state===$.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(O.Restarting,this.handleRestarting).on(O.SignalRestarted,this.handleSignalRestarted).on(O.Offline,()=>{this.setAndEmitConnectionState($.Reconnecting)&&this.emit(_.Reconnecting)}).on(O.DCBufferStatusChanged,(e,t)=>{this.emit(_.DCBufferStatusChanged,e,t)}).on(O.LocalTrackSubscribed,e=>{const t=this.localParticipant.getTrackPublications().find(i=>{let{trackSid:r}=i;return r===e});if(!t){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(M.LocalTrackSubscribed,t),this.emitWhenConnected(_.LocalTrackSubscribed,t,this.localParticipant)}).on(O.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(_.Moved,e.room.name),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),this.outgoingDataStreamManager&&this.outgoingDataStreamManager.setupEngine(this.engine))}static getLocalDevices(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return ye.getInstance().getDevices(e,t)}prepareConnection(e,t){return f(this,void 0,void 0,function*(){if(this.state===$.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(rr(new URL(e))&&t){this.regionUrlProvider=new Or(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===$.Disconnected&&(this.regionUrl=i,yield fetch(dr(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch(dr(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 f(this,void 0,void 0,function*(){let i=()=>{},r;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":r=new tt({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":r=new tt({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":r=new tt({scenario:{case:"serverLeave",value:!0}});break;case"migration":r=new tt({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=()=>f(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),r=new tt({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>f(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),r=new tt({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":r=new tt({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),i=()=>f(this,void 0,void 0,function*(){const s=this.engine.client.onLeave;s&&s(new Vn({reason:Fe.CLIENT_INITIATED,action:zt.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");r=new tt({scenario:{case:"subscriberBandwidth",value:Lt(t)}});break;case"leave-full-reconnect":r=new tt({scenario:{case:"leaveRequestFullReconnect",value:!0}})}r&&(yield this.engine.client.sendSimulateScenario(r),yield i())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return function*(){var o,c,d,u,l,h,m;let v=!0,p=!1;const S=a?{exact:r}:r;if(i==="audioinput"){p=s.localParticipant.audioTrackPublications.size===0;const k=(o=s.getActiveDevice(i))!==null&&o!==void 0?o:s.options.audioCaptureDefaults.deviceId;s.options.audioCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.audioTrackPublications.values()).filter(g=>g.source===C.Source.Microphone);try{v=(yield Promise.all(R.map(g=>{var b;return(b=g.audioTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(g=>g===!0)}catch(g){throw s.options.audioCaptureDefaults.deviceId=k,g}const w=R.some(g=>{var b,P;return(P=(b=g.track)===null||b===void 0?void 0:b.isMuted)!==null&&P!==void 0?P:!1});v&&w&&(p=!0)}else if(i==="videoinput"){p=s.localParticipant.videoTrackPublications.size===0;const k=(c=s.getActiveDevice(i))!==null&&c!==void 0?c:s.options.videoCaptureDefaults.deviceId;s.options.videoCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.videoTrackPublications.values()).filter(g=>g.source===C.Source.Camera);try{v=(yield Promise.all(R.map(g=>{var b;return(b=g.videoTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(g=>g===!0)}catch(g){throw s.options.videoCaptureDefaults.deviceId=k,g}const w=R.some(g=>{var b,P;return(P=(b=g.track)===null||b===void 0?void 0:b.isMuted)!==null&&P!==void 0?P:!1});v&&w&&(p=!0)}else if(i==="audiooutput"){if(p=!0,!ir()&&!s.options.webAudioMix||s.options.webAudioMix&&s.audioContext&&!("setSinkId"in s.audioContext))throw new Error("cannot switch audio output, the current browser does not support it");s.options.webAudioMix&&(r=(d=yield ye.getInstance().normalizeDeviceId("audiooutput",r))!==null&&d!==void 0?d:""),(u=(m=s.options).audioOutput)!==null&&u!==void 0||(m.audioOutput={});const k=(l=s.getActiveDevice(i))!==null&&l!==void 0?l:s.options.audioOutput.deviceId;s.options.audioOutput.deviceId=r;try{s.options.webAudioMix&&((h=s.audioContext)===null||h===void 0||h.setSinkId(r)),yield Promise.all(Array.from(s.remoteParticipants.values()).map(R=>R.setAudioOutput({deviceId:r})))}catch(R){throw s.options.audioOutput.deviceId=k,R}}return p&&(s.localParticipant.activeDeviceMap.set(i,r),s.emit(_.ActiveDeviceChanged,i,r)),v}()})}setupLocalParticipantEvents(){this.localParticipant.on(M.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(M.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(M.AttributesChanged,this.onLocalAttributesChanged).on(M.TrackMuted,this.onLocalTrackMuted).on(M.TrackUnmuted,this.onLocalTrackUnmuted).on(M.LocalTrackPublished,this.onLocalTrackPublished).on(M.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(M.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(M.MediaDevicesError,this.onMediaDevicesError).on(M.AudioStreamAcquired,this.startAudio).on(M.ChatMessage,this.onLocalChatMessageSent).on(M.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===$.Connecting||this.state===$.Reconnecting){const l=()=>{this.onTrackAdded(e,t,i),h()},h=()=>{this.off(_.Reconnected,l),this.off(_.Connected,l),this.off(_.Disconnected,h)};this.once(_.Reconnected,l),this.once(_.Connected,l),this.once(_.Disconnected,h);return}if(this.state===$.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 r=zl(t.id),s=r[0];let a=r[1],o=e.id;if(a&&a.startsWith("TR")&&(o=a),s===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const c=Array.from(this.remoteParticipants.values()).find(l=>l.sid===s);if(!c){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(s),this.logContext);return}let d;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?d=this.options.adaptiveStream:d={});const u=c.addSubscribedMediaTrack(e,o,t,i,d);u!=null&&u.isEncrypted&&!this.e2eeManager&&this.emit(_.EncryptionError,new Error("Encrypted ".concat(u.source," track received from participant ").concat(c.sid,", but room does not have encryption enabled!")))}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.incomingDataStreamManager.clearHandlersAndControllers(),this.state!==$.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{r.unpublishTrack(s.trackSid)})}),this.localParticipant.trackPublications.forEach(r=>{var s,a,o;r.track&&this.localParticipant.unpublishTrack(r.track,e),e?((s=r.track)===null||s===void 0||s.detach(),(a=r.track)===null||a===void 0||a.stop()):(o=r.track)===null||o===void 0||o.stopMonitor()}),this.localParticipant.off(M.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(M.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(M.AttributesChanged,this.onLocalAttributesChanged).off(M.TrackMuted,this.onLocalTrackMuted).off(M.TrackUnmuted,this.onLocalTrackUnmuted).off(M.LocalTrackPublished,this.onLocalTrackPublished).off(M.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(M.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(M.MediaDevicesError,this.onMediaDevicesError).off(M.AudioStreamAcquired,this.startAudio).off(M.ChatMessage,this.onLocalChatMessageSent).off(M.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),xe()&&(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($.Disconnected),this.emit(_.Disconnected,t)}}}handleParticipantDisconnected(e,t){var i;this.remoteParticipants.delete(e),t&&(this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(e),t.trackPublications.forEach(r=>{t.unpublishTrack(r.trackSid,!0)}),this.emit(_.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleIncomingRpcRequest(e,t,i,r,s,a){return f(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),a!==1){yield this.engine.publishRpcResponse(e,t,null,oe.builtIn("UNSUPPORTED_VERSION"));return}const o=this.rpcHandlers.get(i);if(!o){yield this.engine.publishRpcResponse(e,t,null,oe.builtIn("UNSUPPORTED_METHOD"));return}let c=null,d=null;try{const u=yield o({requestId:t,callerIdentity:e,payload:r,responseTimeout:s});Er(u)>Zo?(c=oe.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(i))):d=u}catch(u){u instanceof oe?c=u:(console.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),u),c=oe.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,t,d,c)})}selectDefaultDevices(){return f(this,void 0,void 0,function*(){var e,t,i;const r=ye.getInstance().previousDevices,s=yield ye.getInstance().getDevices(void 0,!1),a=Me();if((a==null?void 0:a.name)==="Chrome"&&a.os!=="iOS")for(let c of s){const d=r.find(u=>u.deviceId===c.deviceId);d&&d.label!==""&&d.kind===c.kind&&d.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(_.ActiveDeviceChanged,c.kind,c.deviceId)}const o=["audiooutput","audioinput","videoinput"];for(let c of o){const d=oh(c),u=this.localParticipant.getTrackPublication(d);if(u&&(!((e=u.track)===null||e===void 0)&&e.isUserProvided))continue;const l=s.filter(m=>m.kind===c),h=this.getActiveDevice(c);if(h===((t=r.filter(m=>m.kind===c)[0])===null||t===void 0?void 0:t.deviceId)&&l.length>0&&((i=l[0])===null||i===void 0?void 0:i.deviceId)!==h){yield this.switchActiveDevice(c,l[0].deviceId);continue}c==="audioinput"&&!kn()||c==="videoinput"||l.length>0&&!l.find(m=>m.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!kn())&&(yield this.switchActiveDevice(c,l[0].deviceId))}})}acquireAudioContext(){return f(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=fr())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(r=>r.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Ae(200)])}catch(r){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:r}))}const i=((t=this.audioContext)===null||t===void 0?void 0:t.state)==="running";i!==this.canPlaybackAudio&&(this.audioEnabled=i,this.emit(_.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let r;return t?r=wn.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):r=new wn(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&r.setAudioContext(this.audioContext),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&r.setAudioOutput(this.options.audioOutput).catch(s=>this.log.warn("Could not set audio output: ".concat(s.message),this.logContext)),r}getOrCreateParticipant(e,t){if(this.remoteParticipants.has(e)){const r=this.remoteParticipants.get(e);return t&&r.updateInfo(t)&&this.sidToIdentity.set(t.sid,t.identity),r}const i=this.createParticipant(e,t);return this.remoteParticipants.set(e,i),this.sidToIdentity.set(t.sid,t.identity),this.emitWhenConnected(_.ParticipantConnected,i),i.on(M.TrackPublished,r=>{this.emitWhenConnected(_.TrackPublished,r,i)}).on(M.TrackSubscribed,(r,s)=>{r.kind===C.Kind.Audio?(r.on(I.AudioPlaybackStarted,this.handleAudioPlaybackStarted),r.on(I.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):r.kind===C.Kind.Video&&(r.on(I.VideoPlaybackFailed,this.handleVideoPlaybackFailed),r.on(I.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(_.TrackSubscribed,r,s,i)}).on(M.TrackUnpublished,r=>{this.emit(_.TrackUnpublished,r,i)}).on(M.TrackUnsubscribed,(r,s)=>{this.emit(_.TrackUnsubscribed,r,s,i)}).on(M.TrackMuted,r=>{this.emitWhenConnected(_.TrackMuted,r,i)}).on(M.TrackUnmuted,r=>{this.emitWhenConnected(_.TrackUnmuted,r,i)}).on(M.ParticipantMetadataChanged,r=>{this.emitWhenConnected(_.ParticipantMetadataChanged,r,i)}).on(M.ParticipantNameChanged,r=>{this.emitWhenConnected(_.ParticipantNameChanged,r,i)}).on(M.AttributesChanged,r=>{this.emitWhenConnected(_.ParticipantAttributesChanged,r,i)}).on(M.ConnectionQualityChanged,r=>{this.emitWhenConnected(_.ConnectionQualityChanged,r,i)}).on(M.ParticipantPermissionsChanged,r=>{this.emitWhenConnected(_.ParticipantPermissionsChanged,r,i)}).on(M.TrackSubscriptionStatusChanged,(r,s)=>{this.emitWhenConnected(_.TrackSubscriptionStatusChanged,r,s,i)}).on(M.TrackSubscriptionFailed,(r,s)=>{this.emit(_.TrackSubscriptionFailed,r,i,s)}).on(M.TrackSubscriptionPermissionChanged,(r,s)=>{this.emitWhenConnected(_.TrackSubscriptionPermissionChanged,r,s,i)}).on(M.Active,()=>{this.emitWhenConnected(_.ParticipantActive,i),i.kind===qt.AGENT&&this.localParticipant.setActiveAgent(i)}),t&&i.updateInfo(t),i}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((i,r)=>(i.push(...r.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&&rh(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=ve.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,Fe.STATE_MISMATCH))):e=0},lf)}clearConnectionReconcile(){this.connectionReconcileInterval&&ve.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(_.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),r=1;r<t;r++)i[r-1]=arguments[r];if(this.state===$.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===$.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return f(this,void 0,void 0,function*(){var t,i;const r=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),s=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new Fn({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:se.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new Rt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(_.SignalConnected),this.emit(_.Connected),this.setAndEmitConnectionState($.Connected),r.video){const a=new oi(C.Kind.Video,new Kt({source:he.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO,name:"video-dummy"}),new Qt(r.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:cr(160*((t=s.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(M.LocalTrackPublished,a)}if(r.audio){const a=new oi(C.Kind.Audio,new Kt({source:he.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO}),new $t(r.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:ni(),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(M.LocalTrackPublished,a)}for(let a=0;a<s.count-1;a+=1){let o=new Rt({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(a),state:Vt.ACTIVE,tracks:[],joinedAt:se.parse(Date.now())});const c=this.getOrCreateParticipant(o.identity,o);if(s.video){const d=cr(160*((i=s.aspectRatios[a%s.aspectRatios.length])!==null&&i!==void 0?i:1),160,!1,!0),u=new Kt({source:he.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO});c.addSubscribedMediaTrack(d,u.sid,new MediaStream([d]),new RTCRtpReceiver),o.tracks=[...o.tracks,u]}if(s.audio){const d=ni(),u=new Kt({source:he.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ue.AUDIO});c.addSubscribedMediaTrack(d,u.sid,new MediaStream([d]),new RTCRtpReceiver),o.tracks=[...o.tracks,u]}c.updateInfo(o)}})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];if(e!==_.ActiveSpeakersChanged&&e!==_.TranscriptionReceived){const s=bc(i).filter(a=>a!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s}))}return super.emit(e,...i)}}Xt.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function bc(n){return n.map(e=>{if(e)return Array.isArray(e)?bc(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}class hf{static toAgentAttributes(e){return JSON.parse(e)}static agentAttributesToJson(e){return JSON.stringify(e)}static toTranscriptionAttributes(e){return JSON.parse(e)}static transcriptionAttributesToJson(e){return JSON.stringify(e)}}var ff=Object.freeze({__proto__:null,Convert:hf}),qe;(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"})(qe||(qe={}));class vt extends it.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=qe.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new Xt(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return f(this,void 0,void 0,function*(){if(this.status!==qe.IDLE)throw Error("check is running already");this.setStatus(qe.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!==qe.SKIPPED&&this.setStatus(this.isSuccess()?qe.SUCCESS:qe.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return f(this,void 0,void 0,function*(){return this.room.state===$.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return f(this,void 0,void 0,function*(){this.room&&this.room.state!==$.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(qe.SKIPPED)}switchProtocol(e){return f(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(_.Reconnecting,()=>{t=!0}),this.room.once(_.Reconnected,()=>{i=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(s=>setTimeout(s,1e3)),!t)return;const r=Date.now()+1e4;for(;Date.now()<r;){if(i)return;yield Ae(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 mf extends vt{get description(){return"Cloud regions"}perform(){return f(this,void 0,void 0,function*(){const e=new Or(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let s=0;s<3;s++){const a=yield e.getNextBestRegionUrl();if(!a)break;if(i.has(a))continue;i.add(a);const o=yield this.checkCloudRegion(a);this.appendMessage("".concat(o.region," RTT: ").concat(o.rtt,"ms, duration: ").concat(o.duration,"ms")),t.push(o)}t.sort((s,a)=>(s.duration-a.duration)*.5+(s.rtt-a.rtt)*.5);const r=t[0];this.bestStats=r,this.appendMessage("best Cloud region: ".concat(r.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return f(this,void 0,void 0,function*(){var t,i;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const r=(t=this.room.serverInfo)===null||t===void 0?void 0:t.region;if(!r)throw new Error("Region not found");const s=yield this.room.localParticipant.streamText({topic:"test"}),a=1e3,c=1e6/a,d="A".repeat(a),u=Date.now();for(let v=0;v<c;v++)yield s.write(d);yield s.close();const l=Date.now(),h=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),m={region:r,rtt:1e4,duration:l-u};return h==null||h.forEach(v=>{v.type==="candidate-pair"&&v.nominated&&(m.rtt=v.currentRoundTripTime*1e3)}),yield this.disconnect(),m})}}const Ur=1e4;class pf extends vt{get description(){return"Connection via UDP vs TCP"}perform(){return f(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/(Ur/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Ur/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return f(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 r=0;const s=()=>{r=(r+1)%360,i.fillStyle="hsl(".concat(r,", 100%, 50%)"),i.fillRect(0,0,t.width,t.height),requestAnimationFrame(s)};s();const o=t.captureStream(30).getVideoTracks()[0],d=(yield this.room.localParticipant.publishTrack(o,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,u={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},l=setInterval(()=>f(this,void 0,void 0,function*(){const h=yield d.getRTCStatsReport();h==null||h.forEach(m=>{m.type==="outbound-rtp"?(u.packetsSent=m.packetsSent,u.qualityLimitationDurations=m.qualityLimitationDurations,u.bitrateTotal+=m.targetBitrate,u.count++):m.type==="remote-inbound-rtp"&&(u.packetsLost=m.packetsLost,u.rttTotal+=m.roundTripTime,u.jitterTotal+=m.jitter)})}),1e3);return yield new Promise(h=>setTimeout(h,Ur)),clearInterval(l),o.stop(),t.remove(),yield this.disconnect(),u})}}class gf extends vt{get description(){return"Can publish audio"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield gc();if(yield Uo(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(o=>setTimeout(o,3e3));const s=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!s)throw new Error("Could not get RTCStats");let a=0;if(s.forEach(o=>{o.type==="outbound-rtp"&&(o.kind==="audio"||!o.kind&&o.mediaType==="audio")&&(a=o.packetsSent)}),a===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(a," audio packets"))})}}class vf extends vt{get description(){return"Can publish video"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield pc();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,5e3));const r=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let s=0;if(r.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="video"||!a.kind&&a.mediaType==="video")&&(s+=a.packetsSent)}),s===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(s," video packets"))})}checkForVideo(e){return f(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(r=>{i.onplay=()=>{setTimeout(()=>{var s,a,o,c;const d=document.createElement("canvas"),u=e.getSettings(),l=(a=(s=u.width)!==null&&s!==void 0?s:i.videoWidth)!==null&&a!==void 0?a:1280,h=(c=(o=u.height)!==null&&o!==void 0?o:i.videoHeight)!==null&&c!==void 0?c:720;d.width=l,d.height=h;const m=d.getContext("2d");m.drawImage(i,0,0);const p=m.getImageData(0,0,d.width,d.height).data;let S=!0;for(let k=0;k<p.length;k+=4)if(p[k]!==0||p[k+1]!==0||p[k+2]!==0){S=!1;break}S?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),r()},1e3)},i.play()}),t.getTracks().forEach(r=>r.stop()),i.remove()})}}class yf extends vt{get description(){return"Resuming connection after interruption"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect();let i=!1,r=!1,s;const a=new Promise(d=>{setTimeout(d,5e3),s=d}),o=()=>{i=!0};t.on(_.SignalReconnecting,o).on(_.Reconnecting,o).on(_.Reconnected,()=>{r=!0,s(!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(!r||t.state!==$.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 bf extends vt{get description(){return"Can connect via TURN"}perform(){return f(this,void 0,void 0,function*(){var e,t;const i=new gr,r=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let s=!1,a=!1,o=!1;for(let c of r.iceServers)for(let d of c.urls)d.startsWith("turn:")?(a=!0,o=!0):d.startsWith("turns:")&&(a=!0,o=!0,s=!0),d.startsWith("stun:")&&(o=!0);o?a&&!s&&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 kf extends vt{get description(){return"Establishing WebRTC connection"}perform(){return f(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(_.SignalConnected,()=>{const i=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(r,s)=>{if(r.candidate){const a=new RTCIceCandidate(r);let o="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(Tf(a.address)?o+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,o+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(o)}i&&i(r,s)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=r=>{r instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(r.errorCode," ").concat(r.errorText," ").concat(r.url))})});try{yield this.connect(),q.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 Tf(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 Sf extends vt{get description(){return"Connecting to signal connection via WebSocket"}perform(){return f(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 r=new gr;const s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(s.serverVersion,".")),((e=s.serverInfo)===null||e===void 0?void 0:e.edition)===ea.Cloud&&(!((t=s.serverInfo)===null||t===void 0)&&t.region)&&this.appendMessage("LiveKit Cloud: ".concat((i=s.serverInfo)===null||i===void 0?void 0:i.region)),yield r.close()})}}class Cf extends it.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:qe.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!==qe.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return f(this,void 0,void 0,function*(){const t=this.getNextCheckId(),i=new e(this.url,this.token,this.options),r=a=>{this.updateCheck(t,a)};i.on("update",r);const s=yield i.run();return i.off("update",r),s})}checkWebsocket(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Sf)})}checkWebRTC(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(kf)})}checkTURN(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(bf)})}checkReconnect(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(yf)})}checkPublishAudio(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(gf)})}checkPublishVideo(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(vf)})}checkConnectionProtocol(){return f(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(pf);if(e.data&&"protocol"in e.data){const t=e.data;this.options.protocol=t.protocol}return e})}checkCloudRegion(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(mf)})}}function Ef(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var t;const i=Tt(n)?n.mediaStreamTrack:n,r=i.getSettings();let s={facingMode:(t=e.defaultFacingMode)!==null&&t!==void 0?t:"user",confidence:"low"};if("facingMode"in r){const a=r.facingMode;q.trace("rawFacingMode",{rawFacingMode:a}),a&&typeof a=="string"&&wf(a)&&(s={facingMode:a,confidence:"high"})}if(["low","medium"].includes(s.confidence)){q.trace("Try to get facing mode from device label: (".concat(i.label,")"));const a=Tc(i.label);a!==void 0&&(s=a)}return s}const kc=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),Pf=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]]);function Tc(n){var e;const t=n.trim().toLowerCase();if(t!=="")return kc.has(t)?kc.get(t):(e=Array.from(Pf.entries()).find(i=>{let[r]=i;return t.includes(r)}))===null||e===void 0?void 0:e[1]}function wf(n){return n===void 0||["user","environment","left","right"].includes(n)}const Rf=Object.freeze(Object.defineProperty({__proto__:null,get AudioPresets(){return Zn},get BackupCodecPolicy(){return tr},BaseKeyProvider:vo,get CheckStatus(){return qe},Checker:vt,ConnectionCheck:Cf,ConnectionError:ee,get ConnectionErrorReason(){return H},get ConnectionQuality(){return gt},get ConnectionState(){return $},CriticalTimers:ve,CryptorError:Nl,get CryptorErrorReason(){return Yn},get CryptorEvent(){return Qi},DataPacket_Kind:V,DataStreamError:ft,get DataStreamErrorReason(){return Ve},DefaultReconnectPolicy:Ta,DeviceUnsupportedError:gn,DisconnectReason:Fe,get EncryptionEvent(){return ht},get EngineEvent(){return O},ExternalE2EEKeyProvider:xl,get KeyHandlerEvent(){return $i},get KeyProviderEvent(){return lt},LivekitError:Be,LocalAudioTrack:$t,LocalParticipant:vc,LocalTrack:Rr,LocalTrackPublication:oi,LocalTrackRecorder:tc,LocalVideoTrack:Qt,get LogLevel(){return Wt},get LoggerNames(){return je},get MediaDeviceFailure(){return vn},Mutex:we,NegotiationError:Qn,Participant:Nr,get ParticipantEvent(){return M},ParticipantKind:qt,PublishDataError:Ll,PublishTrackError:Yi,RemoteAudioTrack:fc,RemoteParticipant:wn,RemoteTrack:Ar,RemoteTrackPublication:yc,RemoteVideoTrack:mc,Room:Xt,get RoomEvent(){return _},RpcError:oe,ScreenSharePresets:bn,SignalRequestError:Xi,SubscriptionError:zs,get Track(){return C},get TrackEvent(){return I},TrackInvalidError:Je,get TrackPublication(){return ot},TrackType:Ue,UnexpectedConnectionState:fe,UnsupportedServer:yo,VideoPreset:Z,VideoPresets:Ht,VideoPresets43:ei,get VideoQuality(){return Oe},attachToElement:Mt,attributes:ff,compareVersions:$e,createAudioAnalyser:Zl,createE2EEKey:_l,createKeyMaterialFromBuffer:mo,createKeyMaterialFromString:fo,createLocalAudioTrack:gc,createLocalScreenTracks:cf,createLocalTracks:Pn,createLocalVideoTrack:pc,deriveKeys:Rl,detachTrack:Ot,facingModeFromDeviceLabel:Tc,facingModeFromLocalTrack:Ef,getBrowser:Me,getEmptyAudioStreamTrack:ni,getEmptyVideoStreamTrack:Xl,getLogger:nt,importKey:wl,isAudioTrack:Qe,isBackupCodec:So,isBrowserSupported:wo,isE2EESupported:lo,isInsertableStreamSupported:ho,isLocalParticipant:Lo,isLocalTrack:Tt,isRemoteParticipant:sh,isRemoteTrack:ri,isScriptTransformSupported:$n,isVideoFrame:Pl,isVideoTrack:mt,needsRbspUnescaping:Dl,parseRbsp:Ml,protocolVersion:ko,ratchet:Il,setLogExtension:ul,setLogLevel:dl,supportsAV1:Eo,supportsAdaptiveStream:Wl,supportsDynacast:Gl,supportsVP9:Po,version:bo,videoCodecs:To,writeRbsp:Al},Symbol.toStringTag,{value:"Module"}));W.AgentActivityState=Pe,W.AgentStatus=Kr,W.ChatCreationFailed=Pt,W.ChatMode=pe,W.ChatModeDowngraded=jr,W.ChatProgress=_e,W.ConnectionState=te,W.ConnectivityState=ze,W.DocumentType=Hr,W.KnowledgeType=Gr,W.PlanGroup=qr,W.Providers=Jr,W.RateState=zr,W.StreamEvents=re,W.StreamType=We,W.StreamingState=G,W.Subject=Wr,W.TransportProvider=rn,W.UserPlan=Vr,W.ValidationError=wt,W.VideoType=li,W.VoiceAccess=$r,W.WsError=Br,W.createAgentManager=Od,W.mapVideoType=_c,Object.defineProperty(W,Symbol.toStringTag,{value:"Module"})});
|