@d-id/client-sdk 1.2.7 → 1.2.8-staging.365
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-BXPWkNzW.js → index-BXfxP3Yk.js} +224 -216
- package/dist/index.js +1 -1
- package/dist/index.umd.cjs +5 -5
- package/dist/livekit-manager-CgGPcchb.js +471 -0
- package/dist/src/api/agents.d.ts +5 -1
- package/dist/src/types/entities/agents/agent.d.ts +11 -0
- package/dist/src/types/entities/agents/chat.d.ts +6 -0
- package/dist/src/types/entities/agents/manager.d.ts +7 -1
- package/dist/src/utils/user-context.d.ts +15 -0
- package/dist/src/utils/user-context.test.d.ts +1 -0
- package/package.json +1 -1
- package/dist/livekit-manager-D2P6tClx.js +0 -440
package/dist/index.umd.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(function(G,Se){typeof exports=="object"&&typeof module<"u"?Se(exports):typeof define=="function"&&define.amd?define(["exports"],Se):(G=typeof globalThis<"u"?globalThis:G||self,Se(G.index={}))})(this,(function(G){"use strict";var bv=Object.defineProperty;var kv=(G,Se,dn)=>Se in G?bv(G,Se,{enumerable:!0,configurable:!0,writable:!0,value:dn}):G[Se]=dn;var Nt=(G,Se,dn)=>kv(G,typeof Se!="symbol"?Se+"":Se,dn);class Se extends Error{constructor(e,t="Error",i){super(e),this.kind=t,this.originalError=i,Object.setPrototypeOf(this,new.target.prototype)}toJson(){const e=this.originalError instanceof Error?this.originalError.message.slice(0,256):void 0;return{kind:this.kind,message:this.message,...e&&e!==this.message?{cause:e}:{}}}}function dn(n){return n instanceof Error&&typeof n.kind=="string"}class Zs extends Se{constructor(e,t){super(`Failed to create ${t?"persistent":""} chat, mode: ${e}`,"ChatCreationFailed")}}class ea extends Se{constructor(e){super(`Chat mode downgraded to ${e}`,"ChatModeDowngraded")}}function Kl(n){try{const e=JSON.parse(n);if(e&&typeof e=="object"&&typeof e.kind=="string")return e}catch{}}class ar extends Se{constructor(t,i,r={}){const s=Kl(i);super(((s==null?void 0:s.description)??i).slice(0,256),(s==null?void 0:s.kind)??"HttpError");Nt(this,"status");Nt(this,"url");Nt(this,"method");this.status=t,this.url=r.url,this.method=r.method}toJson(){return{...super.toJson(),httpStatus:this.status,...this.url?{endpoint:this.url}:{},...this.method?{method:this.method}:{}}}}class ta extends Se{constructor(t,i={}){super("Network request failed","NetworkError",t);Nt(this,"endpoint");Nt(this,"method");Nt(this,"durationMs");Nt(this,"online");Nt(this,"visibility");this.endpoint=i.url,this.method=i.method,this.durationMs=i.durationMs,this.online=i.online,this.visibility=i.visibility}toJson(){return{...super.toJson(),...this.endpoint?{endpoint:this.endpoint}:{},...this.method?{method:this.method}:{},...this.durationMs!==void 0?{durationMs:this.durationMs}:{},...this.online!==void 0?{online:this.online}:{},...this.visibility?{visibility:this.visibility}:{}}}}class oi extends Se{constructor(e,t){super(e,"StreamError",t)}}class $e extends Se{constructor(e,t){super(e,"ValidationError"),this.key=t}}class na extends Se{constructor(e){super(e,"WSError")}}var ia=(n=>(n.TRIAL="trial",n.BASIC="basic",n.ENTERPRISE="enterprise",n.LITE="lite",n.ADVANCED="advanced",n))(ia||{}),ra=(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))(ra||{}),sa=(n=>(n.Created="created",n.Started="started",n.Done="done",n.Error="error",n.Rejected="rejected",n.Ready="ready",n))(sa||{}),aa=(n=>(n.Unrated="Unrated",n.Positive="Positive",n.Negative="Negative",n))(aa||{}),Pe=(n=>(n.Functional="Functional",n.TextOnly="TextOnly",n.Maintenance="Maintenance",n.Playground="Playground",n.DirectPlayback="DirectPlayback",n.Off="Off",n))(Pe||{}),Ae=(n=>(n.Embed="embed",n.Query="query",n.Partial="partial",n.Answer="answer",n.Transcribe="transcribe",n.Complete="done",n))(Ae||{}),oa=(n=>(n.KnowledgeProcessing="knowledge/processing",n.KnowledgeIndexing="knowledge/indexing",n.KnowledgeFailed="knowledge/error",n.KnowledgeDone="knowledge/done",n))(oa||{}),ca=(n=>(n.Knowledge="knowledge",n.Document="document",n.Record="record",n))(ca||{}),da=(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))(da||{}),or=(n=>(n.Clip="clip",n.Talk="talk",n.Expressive="expressive",n))(or||{});const Wl=n=>{switch(n){case"clip":return"clip";case"talk":return"talk";case"expressive":return"expressive";default:throw new Error(`Unknown video type: ${n}`)}};var Z=(n=>(n.Start="START",n.Stop="STOP",n))(Z||{}),st=(n=>(n.Strong="STRONG",n.Weak="WEAK",n.Unknown="UNKNOWN",n))(st||{}),fe=(n=>(n.Idle="IDLE",n.Loading="LOADING",n.Talking="TALKING",n.ToolActive="TOOL_ACTIVE",n))(fe||{}),Q=(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.ToolCallStarted="tool-call/started",n.ToolCallDone="tool-call/done",n.ToolCallError="tool-call/error",n))(Q||{}),le=(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))(le||{}),at=(n=>(n.Legacy="legacy",n.Fluent="fluent",n))(at||{}),ci=(n=>(n.Livekit="livekit",n))(ci||{}),la=(n=>(n.Amazon="amazon",n.AzureOpenAi="azure-openai",n.Microsoft="microsoft",n.Afflorithmics="afflorithmics",n.Elevenlabs="elevenlabs",n))(la||{}),ua=(n=>(n.Public="public",n.Premium="premium",n.Private="private",n))(ua||{});const Hl=(...n)=>{},ha=n=>new Promise(e=>setTimeout(e,n)),Gt=(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)};function cr(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=Gt();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let di=Gt();function Jl(){di=Gt()}function ma(n,e){if(n.type==="bearer")return`Bearer ${n.token}~${di}`;if(n.type==="basic")return`Basic ${"token"in n?n.token:btoa(`${n.username}:${n.password}`)}~${di}`;if(n.type==="key")return`Client-Key ${n.clientKey}.${cr(e)}_${di}`;throw new Error(`Unknown auth type: ${n}`)}const Gl=45*1e3,zl="X-Playground-Chat",fa=2e3,Mn="https://api.d-id.com",$l="wss://notifications.d-id.com",Ql="79f81a83a67430be2bc0fd61042b8faa",pa=n=>n.type==="clip"&&n.presenter_id.startsWith("v2_")?"clip_v2":n.type,Yl=n=>{switch(n.type){case"expressive":return"v4";case"clip":return"v3-pro";case"talk":return"v2"}},Xl=n=>n.type==="talk"?n.source_url:n.presenter_id,dr=n=>n===or.Expressive,Zl=n=>[Pe.TextOnly,Pe.Playground,Pe.Maintenance].includes(n),ga=n=>n&&[Pe.DirectPlayback,Pe.Off].includes(n),va=/\[!\[([^\[\]]*)\]\(([^)\s]+)\)\]\(([^)\s]+)\)/g,ya=/!\[([^\[\]]*)\]\(([^)\s]+)\)/g,eu=[".mp4",".webm",".mkv",".mov",".m4v",".ogv"];function tu(n){const e=n.split("?")[0].split("#")[0].toLowerCase();return eu.some(t=>e.endsWith(t))}const ba=new RegExp("(?<!!)\\[([^\\[\\]]+)\\]\\(([^)\\s]+)\\)","g"),ka=/<a\s+href="([^"]*)"[^>]*?>([^<]*)<\/a>/gi;function Ta(n){if(n.length===0)return[];const e=[];let t;for(va.lastIndex=0;(t=va.exec(n))!==null;)e.push({index:t.index,length:t[0].length,part:{type:"video",src:t[3],alt:t[1],thumbnail:t[2]}});for(ya.lastIndex=0;(t=ya.exec(n))!==null;)if(!e.some(o=>t.index>=o.index&&t.index<o.index+o.length)){const o=t[2],a=t[1];let c;tu(o)?c={type:"video",src:o,alt:a}:(c={type:"image",src:o,alt:a},o.toLowerCase().endsWith(".gif")&&(c.mimeType="image/gif")),e.push({index:t.index,length:t[0].length,part:c})}for(ba.lastIndex=0;(t=ba.exec(n))!==null;)e.some(o=>t.index>=o.index&&t.index<o.index+o.length)||e.push({index:t.index,length:t[0].length,part:{type:"link",href:t[2],label:t[1]}});for(ka.lastIndex=0;(t=ka.exec(n))!==null;)e.some(o=>t.index>=o.index&&t.index<o.index+o.length)||e.push({index:t.index,length:t[0].length,part:{type:"link",href:t[1],label:t[2]}});if(e.length===0)return[{type:"text",text:n}];e.sort((s,o)=>s.index-o.index);const i=[];let r=0;for(const s of e)s.index>r&&i.push({type:"text",text:n.slice(r,s.index)}),i.push(s.part),r=s.index+s.length;return r<n.length&&i.push({type:"text",text:n.slice(r)}),i}let Sa="",lr=[];function On(n){return n===Sa||(Sa=n,lr=Ta(n)),lr}function nu(n,e){let t;return{promise:new Promise((r,s)=>{t=setTimeout(()=>s(new Error(e)),n)}),clear:()=>clearTimeout(t)}}async function ur(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:o}=nu(t.timeout,t.timeoutErrorMessage),a=n().finally(o);return await Promise.race([a,s])}catch(s){if(i=s,!t.shouldRetryFn(s)||r>=t.limit)throw s;await ha(t.delayMs),t.onRetry(s)}throw i}const iu=n=>ur(n,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:e=>e.status===429});function hr(n,e=Mn,t,i){const r=async(s,o)=>{const{skipErrorHandler:a,...c}=o||{},d=c.method??"GET",l=performance.now();let u;try{u=await iu(()=>fetch(e+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:ma(n,i),"Content-Type":"application/json"}}))}catch(h){if((h==null?void 0:h.name)==="AbortError")throw h;const v=new ta(h,{url:s,method:d,durationMs:Math.round(performance.now()-l),online:typeof navigator<"u"?navigator.onLine:void 0,visibility:typeof document<"u"?document.visibilityState:void 0});throw a||t==null||t(v,{url:s,options:c}),v}if(!u.ok){const h=await u.text().catch(()=>`Failed to fetch with status ${u.status}`),m=new ar(u.status,h,{url:s,method:d});throw a||t==null||t(m,{url:s,options:c,headers:u.headers}),m}return u.json()};return{get(s,o){return r(s,{...o,method:"GET"})},post(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"POST"})},delete(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"DELETE"})},patch(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"PATCH"})}}}function ru(n,e=Mn,t,i){const r=hr(n,`${e}/agents`,t,i);return{create(s,o){return r.post("/",s,o)},getAgents(s,o){return r.get(`/${s?`?tag=${s}`:""}`,o).then(a=>a??[])},getById(s,o){return r.get(`/${s}`,o)},delete(s,o){return r.delete(`/${s}`,void 0,o)},update(s,o,a){return r.patch(`/${s}`,o,a)},newChat(s,o,a){return r.post(`/${s}/chat`,o,a)},chat(s,o,a,c){return r.post(`/${s}/chat/${o}`,a,c)},createRating(s,o,a,c){return r.post(`/${s}/chat/${o}/ratings`,a,c)},updateRating(s,o,a,c,d){return r.patch(`/${s}/chat/${o}/ratings/${a}`,c,d)},deleteRating(s,o,a,c){return r.delete(`/${s}/chat/${o}/ratings/${a}`,c)},getSTTToken(s,o){return r.get(`/${s}/stt-token`,o)}}}function su(n){var r,s,o,a;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:pa(i),agentVoice:{voiceId:(s=(r=n.presenter)==null?void 0:r.voice)==null?void 0:s.voice_id,provider:(a=(o=n.presenter)==null?void 0:o.voice)==null?void 0:a.type}}}function au(n){var t,i,r,s,o,a;const e=(t=n.llm)==null?void 0:t.prompt_customization;return{agentType:pa(n.presenter),presenterType:Yl(n.presenter),presenter:Xl(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:(a=(o=n.knowledge)==null?void 0:o.starter_message)==null?void 0:a.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,agentName:n.preview_name,...n.access==="public"?{from:"agent-template"}:{}}}const ou=n=>{try{return String((n==null?void 0:n.message)??n??"").slice(0,256)}catch{return"Unknown error"}},cu=n=>n.reduce((e,t)=>e+t,0),Ca=n=>cu(n)/n.length,Ea=n=>Math.min(...n),wa=n=>Math.max(...n),li=(n,e=0)=>{const t=10**e;return Math.round(n*t)/t},du=(n,e)=>{const t=[...n].sort((i,r)=>i-r);return t[Math.min(t.length-1,Math.floor(e*(t.length-1)))]},lu=n=>du(n,.5),uu=(n,e)=>{try{return n()}catch{return e}};function hu(n,e,t){var c,d,l;const{event:i,...r}=n,{template:s}=(e==null?void 0:e.llm)||{},{language:o}=((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:o}},stitch:(e==null?void 0:e.presenter.type)==="talk"?(l=e==null?void 0:e.presenter)==null?void 0:l.stitch:void 0,...t}}function Ra(n){"requestIdleCallback"in window?requestIdleCallback(n,{timeout:2e3}):setTimeout(n,0)}function ui(n){return n instanceof Se?n.toJson():{kind:"UnknownError",message:ou(n)||"UnknownError"}}const _a="1.2.7",mu="https://api-js.mixpanel.com/track/?verbose=1&ip=1",Pa=50,zt=[];let mr=!1;async function Ia(n){const e=await fetch(mu,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify(n)})});if(!e.ok)throw new Error(`Mixpanel responded with ${e.status}`)}function fu(n){zt.push(n),zt.splice(Pa)}function fr(){if(mr||!zt.length)return;mr=!0;const n=zt.splice(0,zt.length);Ia(n).catch(()=>{zt.unshift(...n),zt.splice(Pa)}).finally(()=>{mr=!1})}typeof window<"u"&&typeof window.addEventListener=="function"&&(window.addEventListener("online",fr),typeof document<"u"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&fr()}));function pu(n){const e=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",t={};return{token:n.token||"testKey",distinct_id:cr(n.externalId),agentId:n.agentId,additionalProperties:{id:cr(n.externalId),...n.mixpanelAdditionalProperties||{}},isEnabled:n.isEnabled??!0,getRandom:Gt,enrich(i){this.additionalProperties={...this.additionalProperties,...i}},async track(i,r,s){if(!this.isEnabled)return Promise.resolve();const{audioPath:o,...a}=r||{},c=s||Date.now(),d={event:i,properties:{...this.additionalProperties,...a,agentId:this.agentId,source:e,emittedBy:"agents-sdk",sdkVersion:_a,token:this.token,time:c,$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerHeight,"Screen Width":window.screen.width||window.innerWidth,"User Agent":navigator.userAgent}};return fr(),Ia([d]).catch(()=>fu(d)),Promise.resolve()},linkTrack(i,r,s,o){t[i]||(t[i]={events:{},resolvedDependencies:[]}),o.includes(s)||o.push(s);const a=t[i];if(a.events[s]={props:r},a.resolvedDependencies.push(s),o.every(d=>a.resolvedDependencies.includes(d))){const d=o.reduce((l,u)=>a.events[u]?{...l,...a.events[u].props}:l,{});this.track(i,d),a.resolvedDependencies=a.resolvedDependencies.filter(l=>!o.includes(l)),o.forEach(l=>{delete a.events[l]})}}}}function pr(){let n=0;return{reset:()=>n=0,update:()=>n=Date.now(),get:(e=!1)=>e?Date.now()-n:n}}const pt=pr(),gr=pr(),Ma=pr();function Oa(n){return n===Pe.Playground?{headers:{[zl]:"true"}}:{}}async function Da(n,e,t,i,r=!1,s){return!s&&!ga(i)&&(s=await e.newChat(n.id,{persist:r},Oa(i)),t.track("agent-chat",{event:"created",chatId:s.id,mode:i})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??i}}function gu(n){return n&&n.length>0?n:[]}function vu(n){return new Promise((e,t)=>{const{callbacks:i,host:r,auth:s,externalId:o}=n,{onMessage:a=null,onOpen:c=null,onClose:d=null,onError:l=null}=i||{},u=new WebSocket(`${r}?authorization=${encodeURIComponent(ma(s,o))}`);u.onmessage=a,u.onclose=d,u.onerror=h=>{console.error(h),l==null||l("Websocket failed to connect",h),t(h)},u.onopen=h=>{c==null||c(h),e(u)}})}async function yu(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 vu(n)}catch(r){if(i===e)throw r;await ha(i*500)}return t}async function bu(n,e,t,i){const r=t!=null&&t.onMessage?[t.onMessage]:[],s=await yu({auth:n,host:e,externalId:i,callbacks:{onError:o=>{var a;return(a=t.onError)==null?void 0:a.call(t,new na(o))},onMessage(o){const a=JSON.parse(o.data);r.forEach(c=>c(a.event,a))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:o=>r.push(o)}}function Aa(n){if(n.answer!==void 0)return n.answer;let e=0,t="";for(;e in n;)t+=n[e++];return t}function ku(n,e,t){if(!n.content)return;const i={id:n.id||`user-${Date.now()}`,role:n.role,content:n.content,parts:On(n.content),created_at:n.created_at||new Date().toISOString(),transcribed:!0};e.messages.push(i),t==null||t([...e.messages],"user")}function Tu(n,e,t,i,r,s,o){if(n===Ae.Transcribe&&e.content){ku(e,i,r);return}if(!(n===Ae.Partial||n===Ae.Answer))return;const a=i.messages[i.messages.length-1];if(n===Ae.Answer&&(a==null?void 0:a.role)==="user"&&o==="partial")return;const d=o==="answer";let l;if((a==null?void 0:a.role)==="assistant"&&!d)l=a;else if(!a||a.role==="user"||d)d&&s(),l={id:e.id||`assistant-${Date.now()}`,role:e.role||"assistant",content:e.content||"",parts:[],created_at:e.created_at||new Date().toISOString()},i.messages.push(l);else return;const{content:u,sequence:h}=e;if(n===Ae.Partial)t[h]=u;else{const v=Aa(t);!!(u&&u.length<v.length)&&(l.interrupted=!0),t.answer=u}const m=Aa(t);(l.content!==m||n===Ae.Answer)&&(l.content=m,l.parts=On(m),r==null||r([...i.messages],n))}function Su(n,e,t,i,r){const s={},o=()=>{for(const d of Object.keys(s))delete s[d]};let a=null;const c=(d,l)=>{var u,h;l==="user"&&o(),(h=(u=t.callbacks).onNewMessage)==null||h.call(u,d,l)};return{clearQueue:o,onMessage:(d,l)=>{var u,h;if("content"in l){const m=d===Q.ChatAnswer?Ae.Answer:d===Q.ChatAudioTranscribed?Ae.Transcribe:d;Tu(m,l,s,e,c,o,a),m===Ae.Partial?a="partial":m===Ae.Answer&&(a="answer",o()),m===Ae.Answer&&n.track("agent-message-received",{content:l.content,messages:e.messages.length,mode:e.chatMode})}else{const m=Q,v=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],g=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],S=hu(l,i,{mode:e.chatMode});if(d=d,d===m.StreamVideoCreated&&(n.linkTrack("agent-video",S,m.StreamVideoCreated,["start"]),l.sentiment)){const k=e.messages[e.messages.length-1];if((k==null?void 0:k.role)==="assistant"){const R={...k,sentiment:l.sentiment};e.messages[e.messages.length-1]=R,c==null||c([...e.messages],a??"answer")}}if(v.includes(d)){const k=d.split("/")[1];g.includes(d)?n.track("agent-video",{...S,event:k}):n.linkTrack("agent-video",{...S,event:k},d,["done"])}g.includes(d)&&((h=(u=t.callbacks).onError)==null||h.call(u,new oi(`Stream failed with event ${d}`),{data:l})),l.event===m.StreamDone&&r()}}}}function Cu(n,e,t,i){const r=hr(n,`${e}/agents/${t}`,i);return{createStream(s,o){return r.post("/streams",s,{signal:o})},startConnection(s,o,a,c){return r.post(`/streams/${s}/sdp`,{session_id:a,answer:o},{signal:c})},addIceCandidate(s,o,a,c){return r.post(`/streams/${s}/ice`,{session_id:a,...o},{signal:c})},sendStreamRequest(s,o,a){return r.post(`/streams/${s}`,{session_id:o,...a})},close(s,o){return r.delete(`/streams/${s}`,{session_id:o})}}}const xa=(n,e)=>(t,i)=>n&&console.log(`[${e}] ${t}`,i??""),Eu=45;function wu(n){const e=n.map(c=>c.av).filter(c=>!!c&&c.audioPlayout>0&&c.videoPlayout>0);if(e.length<2)return null;const t=e[0].localTs,i=e[e.length-1].localTs-t,r=e.map(c=>c.audioPlayout-c.videoPlayout),s=r.filter(c=>c>Eu||c<-100),o=e.filter(c=>c.localTs-t>=Math.min(5e3,i/2)),a=(o.length?o:e).map(c=>c.audioPlayout-c.videoPlayout);return{sampleCount:e.length,durationMs:li(i),desyncDurationMs:li(i*(s.length/r.length)),maxOffsetMs:li(r.reduce((c,d)=>Math.abs(d)>Math.abs(c)?d:c)),residualOffsetMs:li(lu(a))}}function Ru(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 _u(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 Pu(n){var c;let e="",t=0,i=null,r=null;const s=new Map;for(const d of n.values())if(d)if(d.type==="codec"&&((c=d.mimeType)!=null&&c.startsWith("video")))s.set(d.id,d.mimeType.split("/")[1]);else if(d.type==="candidate-pair"){const l=d,u=l.currentRoundTripTime??0;u>0&&(l.nominated===!0||t===0)&&(t=u)}else d.type==="inbound-rtp"&&d.kind==="video"?i=d:d.type==="inbound-rtp"&&d.kind==="audio"&&(r=d);if(!i)return{};const o=i;o.codecId&&s.has(o.codecId)?e=s.get(o.codecId):s.size>0&&(e=s.values().next().value??"");const a={codec:e,rtt:t,timestamp:o.timestamp,bytesReceived:o.bytesReceived,packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,frameWidth:o.frameWidth,frameHeight:o.frameHeight,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.totalFreezesDuration};return r&&(a.av={audioPlayout:r.estimatedPlayoutTimestamp??0,videoPlayout:o.estimatedPlayoutTimestamp??0,localTs:o.timestamp}),a}function La(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=_u(i),s=r.reduce((c,d)=>c+(d.causes.includes("low fps")?1:0),0),o=i.filter(c=>!!c.avgJitterDelayInInterval).map(c=>c.avgJitterDelayInInterval),a=i.filter(c=>!!c.rtt).map(c=>c.rtt);return{webRTCStats:{anomalies:r,avSync:uu(()=>wu(n),null),minRtt:Ea(a),avgRtt:Ca(a),maxRtt:wa(a),aggregateReport:Ru(n[0],n[n.length-1],s),minJitterDelayInInterval:Ea(o),maxJitterDelayInInterval:wa(o),avgJitterDelayInInterval:Ca(o)},codec:n[0].codec,resolution:`${n[0].frameWidth}x${n[0].frameHeight}`}}function Na(n,e){for(const t of n.values())if((t==null?void 0:t.type)==="inbound-rtp"&&t.kind===e)return t;return null}const Dn=10;function Iu(n,e){let t=!1,i=!1,r=null,s=0,o=0,a={};async function c(){if(t){try{const d=await n();if(!d){r=setTimeout(c,Dn);return}const l=Na(d,"audio");if(!l){r=setTimeout(c,Dn);return}const u=l.totalAudioEnergy??0,h=l.totalSamplesReceived??0;if(!i){s=u,o=h,i=!0,r=setTimeout(c,Dn);return}const m=u-s,v=h-o;if(s=u,o=h,v>0&&m>0){t=!1,e(a);return}}catch{}t&&(r=setTimeout(c,Dn))}}return{arm(d={}){a=d,t=!0,i=!1,performance.now(),r!==null&&clearTimeout(r),r=setTimeout(c,Dn)},destroy(){t=!1,r!==null&&(clearTimeout(r),r=null)}}}const hi=100,Mu=Math.max(Math.ceil(400/hi),1),Ou=.25,Du=.28;function Au(){let n=0,e,t,i=0;return r=>{const s=Na(r,"video");if(!s)return{isReceiving:!1,avgJitterDelayInInterval:i};const o=s.jitterBufferDelay,a=s.jitterBufferEmittedCount;if(t&&a>t){const l=o-e,u=a-t;i=l/u}e=o,t=a;const c=s.framesDecoded,d=c-n>0;return n=c,{isReceiving:d,avgJitterDelayInInterval:i,freezeCount:s.freezeCount}}}function Ua(n,e,t,i,r){let s=null,o=[],a,c=0,d=!1,l=st.Unknown,u=st.Unknown,h=0,m=0;const v=Au();async function g(){const S=await n();if(!S)return;const{isReceiving:k,avgJitterDelayInInterval:R,freezeCount:_}=v(S),y=Pu(S);if(k)c=0,h=_-m,u=R<Ou?st.Strong:R>Du&&h>1?st.Weak:l,u!==l&&(r==null||r(u),l=u,m+=h,h=0),d||(i==null||i(Z.Start),a=o[o.length-1],o=[],d=!0),o.push(y);else if(d&&(c++,c>=Mu)){const b=La(o,hi,a);i==null||i(Z.Stop,b),e()||t(),m=_,d=!1}}return{start:()=>{s||(s=setInterval(g,hi))},stop:()=>{s&&(clearInterval(s),s=null)},getReport:()=>La(o,hi,a)}}const xu=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Fa(n){switch(n){case"connected":return le.Connected;case"checking":return le.Connecting;case"failed":return le.Fail;case"new":return le.New;case"closed":return le.Closed;case"disconnected":return le.Disconnected;case"completed":return le.Completed;default:return le.New}}const Lu=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 Nu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:i,log:r}){n===Z.Start&&e===Z.Start?(r("CALLBACK: onVideoStateChange(Start)"),t==null||t(Z.Start)):n===Z.Stop&&e===Z.Stop&&(r("CALLBACK: onVideoStateChange(Stop)"),t==null||t(Z.Stop,i))}function Uu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:r,log:s}){n===Z.Start?(s("CALLBACK: onVideoStateChange(Start)"),t==null||t(Z.Start)):n===Z.Stop&&(s("CALLBACK: onVideoStateChange(Stop)"),t==null||t(Z.Stop,r)),e===Z.Start?i==null||i(fe.Talking):e===Z.Stop&&(i==null||i(fe.Idle))}function Ba({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,streamType:r,report:s,log:o}){r===at.Legacy?Nu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:s,log:o}):r===at.Fluent&&Uu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:s,log:o})}async function Fu(n,e,{debug:t=!1,callbacks:i,auth:r,baseURL:s=Mn,analytics:o},a){var Ue;const c=xa(t,"WebRTCStreamingManager"),d=Lu(c);let l=!1,u=!1,h=Z.Stop,m=Z.Stop;const{startConnection:v,sendStreamRequest:g,close:S,createStream:k,addIceCandidate:R}=Cu(r,s,n,i.onError),{id:_,offer:y,ice_servers:b,session_id:T,fluent:L,interrupt_enabled:F}=await k(e,a);(Ue=i.onStreamCreated)==null||Ue.call(i,{stream_id:_,session_id:T,agent_id:n});const P=new xu({iceServers:b}),U=P.createDataChannel("JanusDataChannel");if(!T)throw new Error("Could not create session_id");const N=L?at.Fluent:at.Legacy;o.enrich({"stream-type":N});const W=e.stream_warmup&&!L,ee=()=>l,Te=()=>{var j;l=!0,u&&(c("CALLBACK: onConnectionStateChange(Connected)"),(j=i.onConnectionStateChange)==null||j.call(i,le.Connected))},I=Ua(()=>P.getStats(),ee,Te,(j,V)=>Ba({statsSignal:m=j,dataChannelSignal:N===at.Legacy?h:void 0,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,report:V,streamType:N,log:c}),j=>{var V;return(V=i.onConnectivityStateChange)==null?void 0:V.call(i,j)});I.start(),P.onicecandidate=j=>{var V;c("peerConnection.onicecandidate",j);try{j.candidate&&j.candidate.sdpMid&&j.candidate.sdpMLineIndex!==null?R(_,{candidate:j.candidate.candidate,sdpMid:j.candidate.sdpMid,sdpMLineIndex:j.candidate.sdpMLineIndex},T,a):R(_,{candidate:null},T,a)}catch(ce){(V=i.onError)==null||V.call(i,ce,{streamId:_})}},U.onopen=()=>{u=!0,(!W||l)&&Te()};let B=null;const q=j=>{var V;B=j,(V=i.onVideoIdChange)==null||V.call(i,j)};function te(j,V){if(j===Q.StreamStarted&&typeof V=="object"&&"metadata"in V){const ce=V.metadata;q(ce.videoId)}j===Q.StreamDone&&q(null),h=j===Q.StreamStarted?Z.Start:Z.Stop,Ba({statsSignal:N===at.Legacy?m:void 0,dataChannelSignal:h,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,streamType:N,log:c})}function se(j,V){var Ge;const ce=typeof V=="string"?V:V==null?void 0:V.metadata;ce&&o.enrich({streamMetadata:ce}),(Ge=i.onStreamReady)==null||Ge.call(i)}const ae={[Q.StreamStarted]:te,[Q.StreamDone]:te,[Q.StreamReady]:se};U.onmessage=j=>{var Ge;const{subject:V,data:ce}=d(j.data);(Ge=ae[V])==null||Ge.call(ae,V,ce)},P.oniceconnectionstatechange=()=>{var V;c("peerConnection.oniceconnectionstatechange => "+P.iceConnectionState);const j=Fa(P.iceConnectionState);j!==le.Connected&&((V=i.onConnectionStateChange)==null||V.call(i,j,`webrtc:ice-${P.iceConnectionState}`))},P.ontrack=j=>{var V;c("peerConnection.ontrack",j),c("CALLBACK: onSrcObjectReady"),(V=i.onSrcObjectReady)==null||V.call(i,j.streams[0])},await P.setRemoteDescription(y),c("set remote description OK");const we=await P.createAnswer();c("create answer OK"),await P.setLocalDescription(we),c("set local description OK"),await v(_,we,T,a),c("start connection OK");function Ne(j){var V,ce;if(!l||U.readyState!=="open"){c("Data channel is not ready for sending messages"),(V=i.onError)==null||V.call(i,new oi("Data channel is not ready for sending messages"),{streamId:_});return}try{U.send(j)}catch(Ge){c("Error sending data channel message",Ge),(ce=i.onError)==null||ce.call(i,Ge,{streamId:_})}}return{speak(j){return g(_,T,j)},async disconnect(){var j;if(_){const V=Fa(P.iceConnectionState);if(P){if(V===le.New){I.stop();return}P.close(),P.oniceconnectionstatechange=null,P.onnegotiationneeded=null,P.onicecandidate=null,P.ontrack=null}try{V===le.Connected&&await S(_,T).catch(ce=>{})}catch(ce){c("Error on close stream connection",ce)}(j=i.onAgentActivityStateChange)==null||j.call(i,fe.Idle),I.stop()}},sendDataChannelMessage:Ne,sessionId:T,streamId:_,streamType:N,interruptAvailable:F??!1,isInterruptible:!0,interrupt(j){if(!F)throw new Error("Interrupt is not enabled for this stream");if(N!==at.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!B)throw new Error("No active video to interrupt");const V={type:Q.StreamInterrupt,videoId:B,timestamp:Date.now()};Ne(JSON.stringify(V))}}}var vr=(n=>(n.V1="v1",n.V2="v2",n))(vr||{});async function Bu(n,e,t,i){const r=n.id;switch(e.version){case"v1":{const{version:s,...o}=e;return Fu(r,o,t,i)}case"v2":{const{version:s,...o}=e;switch(o.transport.provider){case ci.Livekit:const{createLiveKitStreamingManager:a}=await Promise.resolve().then(()=>nh);return a(r,o,t);default:throw new Error(`Unsupported transport provider: ${o.transport.provider}`)}}default:throw new Error(`Invalid stream version: ${e.version}`)}}const ju="cht";function Vu(){return{transport:{provider:ci.Livekit}}}function qu(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 Ku(n,e){return dr(n.presenter.type)?{version:vr.V2,...Vu()}:{version:vr.V1,...qu(e)}}function Wu(n,e,t){t.track("agent-connection-state-change",{state:n,...e&&{reason:e}})}function Hu(n,e,t,i,r){r===at.Fluent?Ju(n,e,t,i,r):Gu(n,e,t,i,r)}function Ju(n,e,t,i,r){n===Z.Start?i.track("stream-session",{event:"start","stream-type":r}):n===Z.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 ja(n,e,t,i,r){n===Z.Start?t.linkTrack("agent-video",{event:"start",...r,"stream-type":i},"start",[Q.StreamVideoCreated]):n===Z.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",[Q.StreamVideoDone])}function Gu(n,e,t,i,r){n===Z.Start?i.linkTrack("agent-video",{event:"start",latency:pt.get(!0),"stream-type":r},"start",[Q.StreamVideoCreated]):n===Z.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",[Q.StreamVideoDone])}function zu(n,e,t){const i={call_id:e.call_id,name:e.name};if(n===Q.ToolCallStarted){t.track("agent-tool-call",{...i,event:"started"});return}const r=e;t.track("agent-tool-call",{...i,event:n===Q.ToolCallDone?"done":"error",duration_ms:r.duration_ms,extra_keys:r.extra?Object.keys(r.extra).length:0})}function Va(n,e,t,i){return pt.reset(),Ma.update(),new Promise(async(r,s)=>{try{let o,a=!1;const c=Ku(n,e);t.enrich({"stream-version":c.version.toString()});let d=null;const l=n.presenter.type==="expressive";o=await Bu(n,c,{...e,analytics:t,callbacks:{...e.callbacks,onConnectionStateChange:(u,h)=>{var m,v;(v=(m=e.callbacks).onConnectionStateChange)==null||v.call(m,u),Wu(u,h,t),u===le.Connected&&(o?r(o):a=!0)},onVideoStateChange:(u,h)=>{var m,v;(v=(m=e.callbacks).onVideoStateChange)==null||v.call(m,u),Hu(u,n,h,t,o.streamType)},onAgentActivityStateChange:u=>{var h,m;(m=(h=e.callbacks).onAgentActivityStateChange)==null||m.call(h,u),u===fe.Talking?(gr.update(),d=v=>{ja(Z.Start,n,t,o.streamType,v),d=null},l||d({latency:pt.get(!0)})):(gr.reset(),d=null,ja(Z.Stop,n,t,o.streamType))},onFirstAudioDetected:u=>{d==null||d(u)},onStreamReady:()=>{const u=Ma.get(!0);t.track("agent-chat",{event:"ready",latency:u})},onToolEvent:((u,h)=>{var m,v;(v=(m=e.callbacks).onToolEvent)==null||v.call(m,u,h),zu(u,h,t)})}},i),a&&r(o)}catch(o){s(o)}})}async function $u(n,e,t,i,r){var l,u,h,m;const s=async()=>{if(dr(n.presenter.type)){const v=await Va(n,e,i),g=`${ju}_${v.sessionId}`,S=new Date().toISOString();return{chatResult:{chatMode:Pe.Functional,chat:{id:g,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,g=v.signal;let S;try{const k=Da(n,t,i,e.mode,e.persistentChat,r),R=Va(n,e,i,g).then(b=>(S=b,b)),[_,y]=await Promise.all([k,R]);return{chatResult:_,streamingManager:y}}catch(k){throw v.abort(),S&&await S.disconnect().catch(()=>{}),k}}},{chatResult:o,streamingManager:a}=await s(),{chat:c,chatMode:d}=o;return d&&e.mode!==void 0&&d!==e.mode&&(e.mode=d,(u=(l=e.callbacks).onModeChange)==null||u.call(l,d),d!==Pe.Functional)?((m=(h=e.callbacks).onError)==null||m.call(h,new ea(d)),a==null||a.disconnect(),{chat:c}):{chat:c,streamingManager:a}}async function Qu(n,e){var N,W,ee,Te;let t=!0;const i=e.mixpanelKey||Ql,r=e.wsURL||$l,s=e.baseURL||Mn,o=e.mode||Pe.Functional,a={messages:[],chatMode:o},c=pu({token:i,agentId:n,isEnabled:e.enableAnalitics,externalId:e.externalId,mixpanelAdditionalProperties:e.mixpanelAdditionalProperties}),d=Date.now();Ra(()=>{c.track("agent-sdk",{event:"init"},d)});const l=e.callbacks.onError;e.callbacks.onError=(I,B)=>{c.track("agent-error",{error:ui(I)}),l==null||l(I,B)};const u=ru(e.auth,s,e.callbacks.onError,e.externalId),h=await u.getById(n);e.debug=e.debug||((N=h==null?void 0:h.advanced_settings)==null?void 0:N.ui_debug_mode);const m=dr(h.presenter.type);c.enrich(au(h));const{onMessage:v,clearQueue:g}=Su(c,a,e,h,()=>{var I,B,q;(I=a.socketManager)==null||I.disconnect(),(q=(B=e.callbacks).onConnectionStateChange)==null||q.call(B,le.Disconnected)});a.messages=gu(e.initialMessages),(ee=(W=e.callbacks).onNewMessage)==null||ee.call(W,[...a.messages],"answer");const S=I=>{c.enrich({videoId:I})},k=({type:I})=>{var q,te,se,ae;if(!((q=a.streamingManager)!=null&&q.interruptAvailable)||!((te=a.streamingManager)!=null&&te.isInterruptible))return;const B=a.messages[a.messages.length-1];c.track("agent-video-interrupt",{type:I||"click",video_duration_to_interrupt:gr.get(!0),message_duration_to_interrupt:pt.get(!0)}),B.interrupted=!0,(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"answer"),a.streamingManager.interrupt(I)},R=new Map;function _(I){return async B=>{const q=R.get(I);if(!q)throw new Error(`No handler registered for client tool: ${I}`);try{const te=JSON.parse(B.payload);return await q(te)}catch(te){throw new Error(`Client tool "${I}" failed: ${te.message}`)}}}function y(){var I,B,q,te;for(const[se]of R)(B=(I=a.streamingManager)==null?void 0:I.unregisterRpcMethod)==null||B.call(I,se),(te=(q=a.streamingManager)==null?void 0:q.registerRpcMethod)==null||te.call(q,se,_(se))}function b(I,B){var te,se;const q=!R.has(I);R.set(I,B),q&&((se=(te=a.streamingManager)==null?void 0:te.registerRpcMethod)==null||se.call(te,I,_(I)))}function T(I){var B,q;R.delete(I),(q=(B=a.streamingManager)==null?void 0:B.unregisterRpcMethod)==null||q.call(B,I)}const L=Date.now();Ra(()=>{c.track("agent-sdk",{event:"loaded",...su(h)},L)});async function F(I){var we,Ne,Ue,j,V,ce,Ge;Jl(),(Ne=(we=e.callbacks).onConnectionStateChange)==null||Ne.call(we,le.Connecting),pt.reset(),I&&!t&&(delete a.chat,(j=(Ue=e.callbacks).onNewMessage)==null||j.call(Ue,[...a.messages],"answer"));const B=o===Pe.DirectPlayback||m?Promise.resolve(void 0):bu(e.auth,r,{onMessage:v,onError:e.callbacks.onError},e.externalId),q=ur(()=>$u(h,{...e,mode:o,callbacks:{...e.callbacks,onVideoIdChange:S,onMessage:v}},u,c,a.chat),{limit:3,timeout:Gl,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:ze=>(ze==null?void 0:ze.message)!=="Could not connect"&&!(ze instanceof ar&&(ze.status===429||ze.kind==="InsufficientCreditsError")),delayMs:1e3}).catch(ze=>{var _e,rt;throw U(Pe.Maintenance),(rt=(_e=e.callbacks).onConnectionStateChange)==null||rt.call(_e,le.Fail),ze}),[te,{streamingManager:se,chat:ae}]=await Promise.all([B,q]);ae&&ae.id!==((V=a.chat)==null?void 0:V.id)&&((Ge=(ce=e.callbacks).onNewChat)==null||Ge.call(ce,ae.id)),a.streamingManager=se,a.socketManager=te,a.chat=ae,y(),t=!1,c.enrich({chatId:ae==null?void 0:ae.id,streamId:se==null?void 0:se.streamId,mode:a.chatMode}),U((ae==null?void 0:ae.chat_mode)??o)}async function P(){var I,B,q,te;(I=a.socketManager)==null||I.disconnect(),await((B=a.streamingManager)==null?void 0:B.disconnect()),delete a.streamingManager,delete a.socketManager,(te=(q=e.callbacks).onConnectionStateChange)==null||te.call(q,le.Disconnected)}async function U(I){var B,q;I!==a.chatMode&&(c.track("agent-mode-change",{mode:I}),a.chatMode=I,a.chatMode!==Pe.Functional&&await P(),(q=(B=e.callbacks).onModeChange)==null||q.call(B,I))}return{agent:h,getStreamType:()=>{var I;return(I=a.streamingManager)==null?void 0:I.streamType},getIsInterruptAvailable:()=>{var I;return((I=a.streamingManager)==null?void 0:I.interruptAvailable)??!1},starterMessages:((Te=h.knowledge)==null?void 0:Te.starter_message)||[],getSTTToken:()=>u.getSTTToken(h.id),changeMode:U,enrichAnalytics:c.enrich,async connect(){await F(!0),c.track("agent-chat",{event:"connect",mode:a.chatMode})},async reconnect(){const I=a.streamingManager;let B;if(m&&(I!=null&&I.reconnect))try{await I.reconnect()}catch(q){B=ui(q).kind,await P(),await F(!1)}else await P(),await F(!1);c.track("agent-chat",{event:"reconnect",mode:a.chatMode,success:!0,...B&&{fallbackReason:B}})},async disconnect(){await P(),c.track("agent-chat",{event:"disconnect",mode:a.chatMode})},publishMicrophoneStream(I){var B;return(B=a.streamingManager)!=null&&B.publishMicrophoneStream?a.streamingManager.publishMicrophoneStream(I):Promise.reject(new Error("publishMicrophoneStream is not available for this streaming manager"))},unpublishMicrophoneStream(){var I;return(I=a.streamingManager)!=null&&I.unpublishMicrophoneStream?a.streamingManager.unpublishMicrophoneStream():Promise.resolve()},replaceMicrophoneTrack(I){var B;return(B=a.streamingManager)!=null&&B.replaceMicrophoneTrack?a.streamingManager.replaceMicrophoneTrack(I):Promise.reject(new Error("replaceMicrophoneTrack is not available for this streaming manager"))},publishCameraStream(I){var B;return(B=a.streamingManager)!=null&&B.publishCameraStream?a.streamingManager.publishCameraStream(I):Promise.reject(new Error("publishCameraStream is not available for this streaming manager"))},unpublishCameraStream(){var I;return(I=a.streamingManager)!=null&&I.unpublishCameraStream?a.streamingManager.unpublishCameraStream():Promise.resolve()},async chat(I){var se,ae,we,Ne,Ue;const B=()=>{if(ga(o))throw new $e(`${o} is enabled, chat is disabled`);if(I.length>=fa)throw new $e(`Message cannot be more than ${fa} characters`);if(I.length===0)throw new $e("Message cannot be empty");if(a.chatMode===Pe.Maintenance)throw new $e("Chat is in maintenance mode");if(![Pe.TextOnly,Pe.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new $e("Streaming manager is not initialized");if(!a.chat)throw new $e("Chat is not initialized")}},q=async()=>{var j,V;if(!a.chat){const ce=await Da(h,u,c,a.chatMode,e.persistentChat);if(!ce.chat)throw new Zs(a.chatMode,!!e.persistentChat);a.chat=ce.chat,(V=(j=e.callbacks).onNewChat)==null||V.call(j,a.chat.id)}return a.chat.id},te=async(j,V)=>{const ce=a.chatMode===Pe.Playground;return ur(m&&!ce?async()=>{var _e,rt;return await((rt=(_e=a.streamingManager)==null?void 0:_e.sendTextMessage)==null?void 0:rt.call(_e,I)),Promise.resolve({})}:async()=>{var _e,rt;return u.chat(h.id,V,{chatMode:a.chatMode,streamId:(_e=a.streamingManager)==null?void 0:_e.streamId,sessionId:(rt=a.streamingManager)==null?void 0:rt.sessionId,messages:j.map(({matches:zs,...Pn})=>Pn)},{...Oa(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:_e=>{var Pn,ir,rr,sr;const rt=(Pn=_e==null?void 0:_e.message)==null?void 0:Pn.includes("missing or invalid session_id");return!((ir=_e==null?void 0:_e.message)==null?void 0:ir.includes("Stream Error"))&&!rt?((sr=(rr=e.callbacks).onError)==null||sr.call(rr,_e),!1):!0},onRetry:async()=>{await P(),await F(!1)}})};try{g(),B(),a.messages.push({id:Gt(),role:"user",content:I,parts:On(I),created_at:new Date(pt.update()).toISOString()}),(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"user");const j=await q(),V=await te([...a.messages],j);return V.result&&a.messages.push({id:Gt(),role:"assistant",content:V.result,parts:On(V.result),created_at:new Date().toISOString(),context:V.context,matches:V.matches}),c.track("agent-message-send",{event:"success",messages:a.messages.length+1}),V.result&&((Ne=(we=e.callbacks).onNewMessage)==null||Ne.call(we,[...a.messages],"answer"),c.track("agent-message-received",{latency:pt.get(!0),messages:a.messages.length})),V}catch(j){throw((Ue=a.messages[a.messages.length-1])==null?void 0:Ue.role)==="assistant"&&a.messages.pop(),c.track("agent-message-send",{event:"error",messages:a.messages.length,error:ui(j)}),j}},rate(I,B,q){var ae,we,Ne,Ue;const te=a.messages.find(j=>j.id===I);if(a.chat){if(!te)throw new $e("Message not found")}else throw new $e("Chat is not initialized");const se=((ae=te.matches)==null?void 0:ae.map(j=>[j.document_id,j.id]))??[];return c.track("agent-rate",{event:q?"update":"create",thumb:B===1?"up":"down",knowledge_id:((we=h.knowledge)==null?void 0:we.id)??"",matches:se,score:B}),q?u.updateRating(h.id,a.chat.id,q,{knowledge_id:((Ne=h.knowledge)==null?void 0:Ne.id)??"",message_id:I,matches:se,score:B}):u.createRating(h.id,a.chat.id,{knowledge_id:((Ue=h.knowledge)==null?void 0:Ue.id)??"",message_id:I,matches:se,score:B})},deleteRate(I){if(!a.chat)throw new $e("Chat is not initialized");return c.track("agent-rate-delete",{type:"text"}),u.deleteRating(h.id,a.chat.id,I)},async speak(I){var se,ae,we;function B(){if(typeof I=="string"){if(!h.presenter.voice)throw new $e("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:I,ssml:!1}}if(I.type==="text"&&!I.provider){if(!h.presenter.voice)throw new $e("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:I.input,ssml:I.ssml}}return I}const q=B();if(c.track("agent-speak",q),pt.update(),a.messages&&q.type==="text"&&(a.messages.push({id:Gt(),role:"assistant",content:q.input,parts:On(q.input),created_at:new Date().toISOString()}),(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"answer")),Zl(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new $e("Please connect to the agent first");return a.streamingManager.speak({script:q,metadata:{chat_id:(we=a.chat)==null?void 0:we.id,agent_id:h.id}})},interrupt:k,registerClientTool:b,unregisterClientTool:T}}function Yu(n,e,t,i){const r=hr(n,`${e}/v2/agents/${t}`,i);return{async createStream(s){return r.post("/sessions",s)}}}const Xu={[Q.ChatAnswer]:Ae.Answer,[Q.ChatPartial]:Ae.Partial},qa=2e4;async function Zu(){try{return await Promise.resolve().then(()=>mv)}catch{throw new Error("LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client")}}const eh={excellent:st.Strong,good:st.Strong,poor:st.Weak,lost:st.Unknown,unknown:st.Unknown},ln=(n="Stream Error")=>new oi(n);function yr(n,e,t){var i,r;throw e("Failed to connect to LiveKit room:",n),(i=t.onConnectionStateChange)==null||i.call(t,le.Fail,"internal:init-error"),(r=t.onError)==null||r.call(t,n,{sessionId:""}),n}async function th(n,e,t){var Fl;const i=xa(t.debug||!1,"LiveKitStreamingManager"),{Room:r,RoomEvent:s,ConnectionState:o,Track:a}=await Zu(),{callbacks:c,auth:d,baseURL:l,analytics:u}=t;let h=null,m=!1;const v=at.Fluent;let g=null;const S={isPublishing:!1,publication:null},k={isPublishing:!1,publication:null};let R=null,_=null,y=null,b=!1;h=new r({adaptiveStream:!1,dynacast:!0});let T=null,L=fe.Idle,F=!0;const P=new Set,U=Yu(d,l||Mn,n,c.onError);let N,W,ee,Te=!0;try{const E=await U.createStream({transport:e.transport,chat_persist:e.chat_persist??!0,verbose:t.verbose??!1}),{id:D,session_token:H,session_url:J,interrupt_enabled:de}=E;(Fl=c.onStreamCreated)==null||Fl.call(c,{session_id:D,stream_id:D,agent_id:n}),N=D,W=H,ee=J,Te=de??!0,await h.prepareConnection(ee,W)}catch(E){yr(E,i,c)}if(!ee||!W||!N)return Promise.reject(new Error("Failed to initialize LiveKit stream"));h.on(s.ConnectionStateChanged,B).on(s.ConnectionQualityChanged,q).on(s.ParticipantConnected,te).on(s.ParticipantDisconnected,se).on(s.TrackSubscribed,Ne).on(s.TrackUnsubscribed,Ue).on(s.DataReceived,zs).on(s.MediaDevicesError,Pn).on(s.TranscriptionReceived,I).on(s.EncryptionError,ir).on(s.TrackSubscriptionFailed,rr);function I(E,D){D!=null&&D.isLocal&&(pt.update(),L===fe.Talking&&(L=fe.Idle))}try{await h.connect(ee,W),i("LiveKit room joined successfully"),T=setTimeout(()=>{var D;i(`Track subscription timeout - no track subscribed within ${qa/1e3} seconds after connect`),T=null;const E=ln("Track subscription timeout");u.track("connectivity-error",{error:ui(E),sessionId:N}),(D=c.onError)==null||D.call(c,E,{sessionId:N}),Xs("internal:track-subscription-timeout")},qa)}catch(E){yr(E,i,c)}u.enrich({"stream-type":v});function B(E){var D,H,J,de;switch(i("Connection state changed:",E),E){case o.Connecting:i("CALLBACK: onConnectionStateChange(Connecting)"),(D=c.onConnectionStateChange)==null||D.call(c,le.Connecting,"livekit:connecting");break;case o.Connected:i("LiveKit room connected successfully"),m=!0;break;case o.Disconnected:i("LiveKit room disconnected"),m=!1,b=!1,S.publication=null,k.publication=null,(H=c.onConnectionStateChange)==null||H.call(c,le.Disconnected,"livekit:disconnected");break;case o.Reconnecting:i("LiveKit room reconnecting..."),(J=c.onConnectionStateChange)==null||J.call(c,le.Connecting,"livekit:reconnecting");break;case o.SignalReconnecting:i("LiveKit room signal reconnecting..."),(de=c.onConnectionStateChange)==null||de.call(c,le.Connecting,"livekit:signal-reconnecting");break}}function q(E,D){var H;i("Connection quality:",E),D!=null&&D.isLocal&&((H=c.onConnectivityStateChange)==null||H.call(c,eh[E]))}function te(E){i("Participant connected:",E.identity)}function se(E){i("Participant disconnected:",E.identity),Xs("livekit:participant-disconnected")}function ae(){var E;y!==Z.Start&&(i("CALLBACK: onVideoStateChange(Start)"),y=Z.Start,(E=c.onVideoStateChange)==null||E.call(c,Z.Start))}function we(E){var D;y!==Z.Stop&&(i("CALLBACK: onVideoStateChange(Stop)"),y=Z.Stop,(D=c.onVideoStateChange)==null||D.call(c,Z.Stop,E))}function Ne(E,D,H){var de,he,Ie;i(`Track subscribed: ${E.kind} from ${H.identity}`);const J=E.mediaStreamTrack;if(!J){i(`No mediaStreamTrack available for ${E.kind}`);return}g?(g.addTrack(J),i(`Added ${E.kind} track to shared MediaStream`)):(g=new MediaStream([J]),i(`Created shared MediaStream with ${E.kind} track`)),E.kind==="audio"&&(_=Iu(()=>E.getRTCStatsReport(),({sttLatency:ie,serviceLatency:ft})=>{var Bl,jl,Vl;const si=pt.get(!0);let ai=0;if(ie){const ql=((jl=(Bl=R==null?void 0:R.getReport())==null?void 0:Bl.webRTCStats)==null?void 0:jl.avgRtt)??0;ai=ql>0?Math.round(ql*1e3):0}const In=si>0?si+(ie??0)+ai:void 0,Lt=In!==void 0&&ft!==void 0?In-ft:void 0;(Vl=c.onFirstAudioDetected)==null||Vl.call(c,{latency:In,networkLatency:Lt})})),E.kind==="video"&&((de=c.onStreamReady)==null||de.call(c),i("CALLBACK: onSrcObjectReady"),(he=c.onSrcObjectReady)==null||he.call(c,g),b||(b=!0,i("CALLBACK: onConnectionStateChange(Connected)"),(Ie=c.onConnectionStateChange)==null||Ie.call(c,le.Connected,"livekit:track-subscribed")),R=Ua(()=>E.getRTCStatsReport(),()=>m,Hl,(ie,ft)=>{i(`Video state change: ${ie}`),ie===Z.Start?(T&&(clearTimeout(T),T=null,i("Track subscription timeout cleared")),ae()):ie===Z.Stop&&we(ft)}),R.start())}function Ue(E,D,H){i(`Track unsubscribed: ${E.kind} from ${H.identity}`),E.kind==="audio"&&(_==null||_.destroy(),_=null),E.kind==="video"&&(we(R==null?void 0:R.getReport()),R==null||R.stop(),R=null)}function j(E,D){var J;const H=Xu[E];H&&((J=c.onMessage)==null||J.call(c,H,{event:H,...D}))}function V(E,D){var H,J,de,he,Ie;if(E===Q.ToolCallStarted){const ie=D;F=ie.interruptible!==!1,(H=c.onInterruptibleChange)==null||H.call(c,F),P.add(ie.call_id),L=fe.ToolActive,(J=c.onAgentActivityStateChange)==null||J.call(c,fe.ToolActive),(de=c.onToolEvent)==null||de.call(c,Q.ToolCallStarted,ie);return}if(E===Q.ToolCallDone){const ie=D;ce(ie.call_id),(he=c.onToolEvent)==null||he.call(c,Q.ToolCallDone,ie);return}if(E===Q.ToolCallError){const ie=D;ce(ie.call_id),(Ie=c.onToolEvent)==null||Ie.call(c,Q.ToolCallError,ie)}}function ce(E){var D;P.delete(E),P.size===0&&L===fe.ToolActive&&(L=fe.Idle,(D=c.onAgentActivityStateChange)==null||D.call(c,fe.Idle))}function Ge(E,D){var H,J,de,he,Ie,ie;if(F=((H=D.metadata)==null?void 0:H.interruptible)!==!1,(J=c.onInterruptibleChange)==null||J.call(c,F),E===Q.StreamVideoCreated){L=fe.Talking,(de=c.onAgentActivityStateChange)==null||de.call(c,fe.Talking),_==null||_.arm({sttLatency:(he=D==null?void 0:D.stt)==null?void 0:he.latency,serviceLatency:D==null?void 0:D.serviceLatency});return}if(P.size>0){L!==fe.ToolActive&&(L=fe.ToolActive,(Ie=c.onAgentActivityStateChange)==null||Ie.call(c,fe.ToolActive));return}F&&(L=fe.Idle,(ie=c.onAgentActivityStateChange)==null||ie.call(c,fe.Idle))}function ze(E,D){var he,Ie,ie,ft;const H=((Ie=(he=R==null?void 0:R.getReport())==null?void 0:he.webRTCStats)==null?void 0:Ie.avgRtt)??0,J=H>0?Math.round(H/2*1e3):0,de={...D,downstreamNetworkLatency:J};t.debug&&((ie=D==null?void 0:D.metadata)!=null&&ie.sentiment)&&(de.sentiment={id:D.metadata.sentiment.id,name:D.metadata.sentiment.sentiment}),(ft=c.onMessage)==null||ft.call(c,E,de),Ge(E,D)}function _e(E,D){var H;(H=c.onMessage)==null||H.call(c,Ae.Transcribe,{event:Ae.Transcribe,...D}),queueMicrotask(()=>{var J;(J=c.onAgentActivityStateChange)==null||J.call(c,fe.Loading)})}const rt={[Q.ChatAnswer]:j,[Q.ChatPartial]:j,[Q.ToolCallStarted]:V,[Q.ToolCallDone]:V,[Q.ToolCallError]:V,[Q.StreamVideoCreated]:ze,[Q.StreamVideoDone]:ze,[Q.StreamVideoError]:ze,[Q.StreamVideoRejected]:ze,[Q.ChatAudioTranscribed]:_e};function zs(E,D,H,J){const de=new TextDecoder().decode(E);try{const he=JSON.parse(de),Ie=J||he.subject;if(i("Data received:",{subject:Ie,data:he}),!Ie)return;const ie=rt[Ie];ie==null||ie(Ie,he)}catch(he){i("Failed to parse data channel message:",he)}}function Pn(E){var D;i("Media devices error:",E),(D=c.onError)==null||D.call(c,ln(),{sessionId:N})}function ir(E){var D;i("Encryption error:",E),(D=c.onError)==null||D.call(c,ln(),{sessionId:N})}function rr(E,D,H){i("Track subscription failed:",{trackSid:E,participant:D,reason:H})}function sr(E,D,H){for(const[J,de]of H)if(de.source===D&&de.track){const he=de.track.mediaStreamTrack;if(he===E||(he==null?void 0:he.id)===E.id)return de}return null}async function Ll(E,D,H,J,de,he){var si,ai,In;if(!m||!h)throw i(`Room is not connected, cannot publish ${J} stream`),new Error("Room is not connected");if(E.isPublishing){i(`${J} publish already in progress, skipping`);return}const Ie=H(D);if(Ie.length===0)throw new Error(`No ${J} track found in the provided MediaStream`);const ie=Ie[0],ft=sr(ie,J,de());if(ft){i(`${J} track is already published, skipping`,{trackId:ie.id,publishedTrackId:(ai=(si=ft.track)==null?void 0:si.mediaStreamTrack)==null?void 0:ai.id}),E.publication=ft;return}if((In=E.publication)!=null&&In.track){const Lt=E.publication.track.mediaStreamTrack;Lt!==ie&&(Lt==null?void 0:Lt.id)!==ie.id&&(i(`Unpublishing existing ${J} track before publishing new one`),await he())}i(`Publishing ${J} track from provided MediaStream`,{trackId:ie.id}),E.isPublishing=!0;try{E.publication=await h.localParticipant.publishTrack(ie,{source:J}),i(`${J} track published successfully`,{trackSid:E.publication.trackSid})}catch(Lt){throw i(`Failed to publish ${J} track:`,Lt),Lt}finally{E.isPublishing=!1}}async function Nl(E,D){if(!(!E.publication||!E.publication.track))try{h&&(await h.localParticipant.unpublishTrack(E.publication.track,!1),i(`${D} track unpublished`))}catch(H){i(`Error unpublishing ${D} track:`,H)}finally{E.publication=null}}async function fv(E){return Ll(S,E,D=>D.getAudioTracks(),a.Source.Microphone,()=>h.localParticipant.audioTrackPublications,$s)}async function $s(){return Nl(S,"Microphone")}async function pv(E){if(!m||!h)throw i("Cannot replace microphone track: room is not connected"),new Error("Room is not connected");if(E.kind!=="audio")throw i("Cannot replace microphone track: not an audio track",{kind:E.kind}),new Error("Microphone track must be an audio track");if(S.isPublishing)throw i("Cannot replace microphone track: publish in progress"),new Error("Microphone publish in progress");const D=S.publication;if(!D||!D.track)throw i("Cannot replace microphone track: no publication to replace"),new Error("No microphone publication to replace");try{S.isPublishing=!0,await D.track.replaceTrack(E),i("Microphone track replaced",{trackId:E.id,trackSid:D.trackSid})}finally{S.isPublishing=!1}}async function gv(E){return Ll(k,E,D=>D.getVideoTracks(),a.Source.Camera,()=>h.localParticipant.videoTrackPublications,Qs)}async function Qs(){return Nl(k,"Camera")}function vv(){g&&(g.getTracks().forEach(E=>E.stop()),g=null)}async function Ys(E,D){var H,J;if(!m||!h){i("Room is not connected for sending messages"),(H=c.onError)==null||H.call(c,ln(),{sessionId:N});return}try{await h.localParticipant.sendText(E,{topic:D}),i("Message sent successfully:",E)}catch(de){i("Failed to send message:",de),(J=c.onError)==null||J.call(c,ln(),{sessionId:N})}}async function Ul(E){var D;try{const J=JSON.parse(E).topic;return Ys("",J)}catch(H){i("Failed to send data channel message:",H),(D=c.onError)==null||D.call(c,ln(),{sessionId:N})}}function yv(E){return Ys(E,"lk.chat")}async function Xs(E){var D,H;T&&(clearTimeout(T),T=null),_==null||_.destroy(),_=null,h&&((D=c.onConnectionStateChange)==null||D.call(c,le.Disconnecting,E),await Promise.all([$s(),Qs()]),await h.disconnect()),vv(),m=!1,b=!1,P.clear(),(H=c.onAgentActivityStateChange)==null||H.call(c,fe.Idle),L=fe.Idle}return{speak(E){const D=typeof E=="string"?E:JSON.stringify(E);return Ys(D,"did.speak")},disconnect:()=>Xs("user:disconnect"),async reconnect(){var E,D;if((h==null?void 0:h.state)===o.Connected){i("Room is already connected");return}if(!h||!ee||!W)throw i("Cannot reconnect: missing room, URL or token"),new Error("Cannot reconnect: session not available");i("Reconnecting to LiveKit room, state:",h.state),b=!1,(E=c.onConnectionStateChange)==null||E.call(c,le.Connecting,"user:reconnect");try{if(await h.connect(ee,W),i("Room reconnected"),m=!0,h.remoteParticipants.size===0){if(i("Waiting for agent to join..."),!await new Promise(J=>{const de=setTimeout(()=>{h==null||h.off(s.ParticipantConnected,he),J(!1)},5e3),he=()=>{clearTimeout(de),h==null||h.off(s.ParticipantConnected,he),J(!0)};h==null||h.on(s.ParticipantConnected,he)}))throw i("Agent did not join within timeout"),await h.disconnect(),new Error("Agent did not rejoin the room");i("Agent joined, reconnection successful")}}catch(H){throw i("Failed to reconnect:",H),(D=c.onConnectionStateChange)==null||D.call(c,le.Fail,"user:reconnect-failed"),H}},sendDataChannelMessage:Ul,sendTextMessage:yv,publishMicrophoneStream:fv,unpublishMicrophoneStream:$s,replaceMicrophoneTrack:pv,publishCameraStream:gv,unpublishCameraStream:Qs,interrupt(E){E!=="text"&&Ul(JSON.stringify({topic:"did.interrupt"}))},registerRpcMethod(E,D){h==null||h.registerRpcMethod(E,D)},unregisterRpcMethod(E){h==null||h.unregisterRpcMethod(E)},sessionId:N,streamId:N,streamType:v,interruptAvailable:Te,isInterruptible:F}}const nh=Object.freeze(Object.defineProperty({__proto__:null,createLiveKitStreamingManager:th,handleInitError:yr},Symbol.toStringTag,{value:"Module"}));function ih(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 rh=Object.defineProperty,sh=(n,e,t)=>e in n?rh(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,Ka=(n,e,t)=>sh(n,typeof e!="symbol"?e+"":e,t);class xe{constructor(){Ka(this,"_locking"),Ka(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 ye(n,e){if(!n)throw new Error(e)}const ah=34028234663852886e22,oh=-34028234663852886e22,ch=4294967295,dh=2147483647,lh=-2147483648;function mi(n){if(typeof n!="number")throw new Error("invalid int 32: "+typeof n);if(!Number.isInteger(n)||n>dh||n<lh)throw new Error("invalid int 32: "+n)}function br(n){if(typeof n!="number")throw new Error("invalid uint 32: "+typeof n);if(!Number.isInteger(n)||n>ch||n<0)throw new Error("invalid uint 32: "+n)}function Wa(n){if(typeof n!="number")throw new Error("invalid float 32: "+typeof n);if(Number.isFinite(n)&&(n>ah||n<oh))throw new Error("invalid float 32: "+n)}const Ha=Symbol("@bufbuild/protobuf/enum-type");function uh(n){const e=n[Ha];return ye(e,"missing enum type on enum object"),e}function Ja(n,e,t,i){n[Ha]=Ga(e,t.map(r=>({no:r.no,name:r.name,localName:n[r.no]})))}function Ga(n,e,t){const i=Object.create(null),r=Object.create(null),s=[];for(const o of e){const a=za(o);s.push(a),i[o.name]=a,r[o.no]=a}return{typeName:n,values:s,findName(o){return i[o]},findNumber(o){return r[o]}}}function hh(n,e,t){const i={};for(const r of e){const s=za(r);i[s.localName]=s.no,i[s.no]=s.localName}return Ja(i,n,e),i}function za(n){return"localName"in n?n:Object.assign(Object.assign({},n),{localName:n.name})}class kr{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 mh(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),o={[s]:function(a){n.util.initFields(this),n.util.initPartial(a,this)}}[s];return Object.setPrototypeOf(o.prototype,new kr),Object.assign(o,{runtime:n,typeName:e,fields:n.util.newFieldList(t),fromBinary(a,c){return new o().fromBinary(a,c)},fromJson(a,c){return new o().fromJson(a,c)},fromJsonString(a,c){return new o().fromJsonString(a,c)},equals(a,c){return n.util.equals(o,a,c)}}),o}function fh(){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)==0)return this.assertBounds(),[n,e]}let t=this.buf[this.pos++];if(n|=(t&15)<<28,e=(t&112)>>4,(t&128)==0)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)==0)return this.assertBounds(),[n,e]}throw new Error("invalid varint")}function Tr(n,e,t){for(let s=0;s<28;s=s+7){const o=n>>>s,a=!(!(o>>>7)&&e==0),c=(a?o|128:o)&255;if(t.push(c),!a)return}const i=n>>>28&15|(e&7)<<4,r=e>>3!=0;if(t.push((r?i|128:i)&255),!!r){for(let s=3;s<31;s=s+7){const o=e>>>s,a=!!(o>>>7),c=(a?o|128:o)&255;if(t.push(c),!a)return}t.push(e>>>31&1)}}const fi=4294967296;function $a(n){const e=n[0]==="-";e&&(n=n.slice(1));const t=1e6;let i=0,r=0;function s(o,a){const c=Number(n.slice(o,a));r*=t,i=i*t+c,i>=fi&&(r=r+(i/fi|0),i=i%fi)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?Ya(i,r):Sr(i,r)}function ph(n,e){let t=Sr(n,e);const i=t.hi&2147483648;i&&(t=Ya(t.lo,t.hi));const r=Qa(t.lo,t.hi);return i?"-"+r:r}function Qa(n,e){if({lo:n,hi:e}=gh(n,e),e<=2097151)return String(fi*e+n);const t=n&16777215,i=(n>>>24|e<<8)&16777215,r=e>>16&65535;let s=t+i*6777216+r*6710656,o=i+r*8147497,a=r*2;const c=1e7;return s>=c&&(o+=Math.floor(s/c),s%=c),o>=c&&(a+=Math.floor(o/c),o%=c),a.toString()+Xa(o)+Xa(s)}function gh(n,e){return{lo:n>>>0,hi:e>>>0}}function Sr(n,e){return{lo:n|0,hi:e|0}}function Ya(n,e){return e=~e,n?n=~n+1:e+=1,Sr(n,e)}const Xa=n=>{const e=String(n);return"0000000".slice(e.length)+e};function Za(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 vh(){let n=this.buf[this.pos++],e=n&127;if((n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<7,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<14,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<21,(n&128)==0)return this.assertBounds(),e;n=this.buf[this.pos++],e|=(n&15)<<28;for(let t=5;(n&128)!==0&&t<10;t++)n=this.buf[this.pos++];if((n&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function yh(){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"),o=BigInt("0"),a=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>a||d<o)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=>ye(/^-?[0-9]+$/.test(r),"int64 invalid: ".concat(r)),i=r=>ye(/^[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),$a(r)},uEnc(r){return typeof r!="string"&&(r=r.toString()),i(r),$a(r)},dec(r,s){return ph(r,s)},uDec(r,s){return Qa(r,s)}}}const pe=yh();var w;(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"})(w||(w={}));var Ut;(function(n){n[n.BIGINT=0]="BIGINT",n[n.STRING=1]="STRING"})(Ut||(Ut={}));function Ft(n,e,t){if(e===t)return!0;if(n==w.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 w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return e==t}return!1}function un(n,e){switch(n){case w.BOOL:return!1;case w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return e==0?pe.zero:"0";case w.DOUBLE:case w.FLOAT:return 0;case w.BYTES:return new Uint8Array(0);case w.STRING:return"";default:return 0}}function eo(n,e){switch(n){case w.BOOL:return e===!1;case w.STRING:return e==="";case w.BYTES:return e instanceof Uint8Array&&!e.byteLength;default:return e==0}}var Ce;(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"})(Ce||(Ce={}));class bh{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(br(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return mi(e),Za(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){Wa(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){br(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){mi(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return mi(e),e=(e<<1^e>>31)>>>0,Za(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=pe.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=pe.uEnc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=pe.enc(e);return Tr(t.lo,t.hi,this.buf),this}sint64(e){let t=pe.enc(e),i=t.hi>>31,r=t.lo<<1^i,s=(t.hi<<1|t.lo>>>31)^i;return Tr(r,s,this.buf),this}uint64(e){let t=pe.uEnc(e);return Tr(t.lo,t.hi,this.buf),this}}class kh{constructor(e,t){this.varint64=fh,this.uint32=vh,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 Ce.Varint:for(;this.buf[this.pos++]&128;);break;case Ce.Bit64:this.pos+=4;case Ce.Bit32:this.pos+=4;break;case Ce.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Ce.StartGroup:for(;;){const[s,o]=this.tag();if(o===Ce.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(o,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 pe.dec(...this.varint64())}uint64(){return pe.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),i=-(e&1);return e=(e>>>1|(t&1)<<31)^i,t=t>>>1^i,pe.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 pe.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return pe.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 Th(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 to(n){const e=n.field.localName,t=Object.create(null);return t[e]=Sh(n),[t,()=>t[e]]}function Sh(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 un(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 Ch(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 wt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),pi=[];for(let n=0;n<wt.length;n++)pi[wt[n].charCodeAt(0)]=n;pi[45]=wt.indexOf("+"),pi[95]=wt.indexOf("/");const no={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,o=0;for(let a=0;a<n.length;a++){if(s=pi[n.charCodeAt(a)],s===void 0)switch(n[a]){case"=":r=0;case`
|
|
2
|
-
`:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string.")}switch(r){case 0:o=s,r=1;break;case 1:t[i++]=o<<2|(s&48)>>4,o=s,r=2;break;case 2:t[i++]=(o&15)<<4|(s&60)>>2,o=s,r=3;break;case 3:t[i++]=(o&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+=wt[i>>2],r=(i&3)<<4,t=1;break;case 1:e+=wt[r|i>>4],r=(i&15)<<2,t=2;break;case 2:e+=wt[r|i>>6],e+=wt[i&63],t=0;break}return t&&(e+=wt[r],e+="=",t==1&&(e+="=")),e}};function Eh(n,e,t){ro(e,n);const i=e.runtime.bin.makeReadOptions(t),r=Ch(n.getType().runtime.bin.listUnknownFields(n),e.field),[s,o]=to(e);for(const a of r)e.runtime.bin.readField(s,i.readerFactory(a.data),e.field,a.wireType,i);return o()}function wh(n,e,t,i){ro(e,n);const r=e.runtime.bin.makeReadOptions(i),s=e.runtime.bin.makeWriteOptions(i);if(io(n,e)){const d=n.getType().runtime.bin.listUnknownFields(n).filter(l=>l.no!=e.field.no);n.getType().runtime.bin.discardUnknownFields(n);for(const l of d)n.getType().runtime.bin.onUnknownField(n,l.no,l.wireType,l.data)}const o=s.writerFactory();let a=e.field;!a.opt&&!a.repeated&&(a.kind=="enum"||a.kind=="scalar")&&(a=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(a,t,o,s);const c=r.readerFactory(o.finish());for(;c.pos<c.len;){const[d,l]=c.tag(),u=c.skip(l,d);n.getType().runtime.bin.onUnknownField(n,d,l,u)}}function io(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 ro(n,e){ye(n.extendee.typeName==e.getType().typeName,"extension ".concat(n.typeName," can only be applied to message ").concat(n.extendee.typeName))}function so(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:!eo(n.T,e[t]);case"message":return e[t]!==void 0;case"map":return Object.keys(e[t]).length>0}}function ao(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?un(n.T,n.L):void 0;break;case"message":e[t]=void 0;break}}function Rt(n,e){if(n===null||typeof n!="object"||!Object.getOwnPropertyNames(kr.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 oo(n,e){return Rt(e)||!n.fieldWrapper?e:n.fieldWrapper.wrapField(e)}w.DOUBLE,w.FLOAT,w.INT64,w.UINT64,w.INT32,w.UINT32,w.BOOL,w.STRING,w.BYTES;const co={ignoreUnknownFields:!1},lo={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function Rh(n){return n?Object.assign(Object.assign({},co),n):co}function _h(n){return n?Object.assign(Object.assign({},lo),n):lo}const gi=Symbol(),vi=Symbol();function Ph(){return{makeReadOptions:Rh,makeWriteOptions:_h,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(gt(e)));i=i??new n;const r=new Map,s=t.typeRegistry;for(const[o,a]of Object.entries(e)){const c=n.fields.findJsonName(o);if(c){if(c.oneof){if(a===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(o,'"'));r.set(c.oneof,o)}uo(i,a,c,t,n)}else{let d=!1;if(s!=null&&s.findExtension&&o.startsWith("[")&&o.endsWith("]")){const l=s.findExtension(o.substring(1,o.length-1));if(l&&l.extendee.typeName==n.typeName){d=!0;const[u,h]=to(l);uo(u,a,l.field,t,l),wh(i,l,h(),t)}}if(!d&&!t.ignoreUnknownFields)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: key "').concat(o,'" is unknown'))}}return i},writeMessage(n,e){const t=n.getType(),i={};let r;try{for(r of t.fields.byNumber()){if(!so(r,n)){if(r.req)throw"required field not set";if(!e.emitDefaultValues||!Mh(r))continue}const o=r.oneof?n[r.oneof.localName].value:n[r.localName],a=ho(r,o,e);a!==void 0&&(i[e.useProtoFieldName?r.name:r.jsonName]=a)}const s=e.typeRegistry;if(s!=null&&s.findExtensionFor)for(const o of t.runtime.bin.listUnknownFields(n)){const a=s.findExtensionFor(t.typeName,o.no);if(a&&io(n,a)){const c=Eh(n,a,e),d=ho(a.field,c,e);d!==void 0&&(i[a.field.jsonName]=d)}}}catch(s){const o=r?"cannot encode field ".concat(t.typeName,".").concat(r.name," to JSON"):"cannot encode message ".concat(t.typeName," to JSON"),a=s instanceof Error?s.message:String(s);throw new Error(o+(a.length>0?": ".concat(a):""))}return i},readScalar(n,e,t){return An(n,e,t??Ut.BIGINT,!0)},writeScalar(n,e,t){if(e!==void 0&&(t||eo(n,e)))return yi(n,e)},debug:gt}}function gt(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 uo(n,e,t,i,r){let s=t.localName;if(t.repeated){if(ye(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(gt(e)));const o=n[s];for(const a of e){if(a===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(a)));switch(t.kind){case"message":o.push(t.T.fromJson(a,i));break;case"enum":const c=Cr(t.T,a,i.ignoreUnknownFields,!0);c!==vi&&o.push(c);break;case"scalar":try{o.push(An(t.T,a,t.L,!0))}catch(d){let l="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(a));throw d instanceof Error&&d.message.length>0&&(l+=": ".concat(d.message)),new Error(l)}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(gt(e)));const o=n[s];for(const[a,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=Ih(t.K,a)}catch(l){let u="cannot decode map key for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw l instanceof Error&&l.message.length>0&&(u+=": ".concat(l.message)),new Error(u)}switch(t.V.kind){case"message":o[d]=t.V.T.fromJson(c,i);break;case"enum":const l=Cr(t.V.T,c,i.ignoreUnknownFields,!0);l!==vi&&(o[d]=l);break;case"scalar":try{o[d]=An(t.V.T,c,Ut.BIGINT,!0)}catch(u){let h="cannot decode map value for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw u instanceof Error&&u.message.length>0&&(h+=": ".concat(u.message)),new Error(h)}break}}}else switch(t.oneof&&(n=n[t.oneof.localName]={case:s},s="value"),t.kind){case"message":const o=t.T;if(e===null&&o.typeName!="google.protobuf.Value")return;let a=n[s];Rt(a)?a.fromJson(e,i):(n[s]=a=o.fromJson(e,i),o.fieldWrapper&&!t.oneof&&(n[s]=o.fieldWrapper.unwrapField(a)));break;case"enum":const c=Cr(t.T,e,i.ignoreUnknownFields,!1);switch(c){case gi:ao(t,n);break;case vi:break;default:n[s]=c;break}break;case"scalar":try{const d=An(t.T,e,t.L,!1);switch(d){case gi:ao(t,n);break;default:n[s]=d;break}}catch(d){let l="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw d instanceof Error&&d.message.length>0&&(l+=": ".concat(d.message)),new Error(l)}break}}function Ih(n,e){if(n===w.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return An(n,e,Ut.BIGINT,!0).toString()}function An(n,e,t,i){if(e===null)return i?un(n,t):gi;switch(n){case w.DOUBLE:case w.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==w.FLOAT&&Wa(r),r;case w.INT32:case w.FIXED32:case w.SFIXED32:case w.SINT32:case w.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==w.UINT32||n==w.FIXED32?br(s):mi(s),s;case w.INT64:case w.SFIXED64:case w.SINT64:if(typeof e!="number"&&typeof e!="string")break;const o=pe.parse(e);return t?o.toString():o;case w.FIXED64:case w.UINT64:if(typeof e!="number"&&typeof e!="string")break;const a=pe.uParse(e);return t?a.toString():a;case w.BOOL:if(typeof e!="boolean")break;return e;case w.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case w.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return no.dec(e)}throw new Error}function Cr(n,e,t,i){if(e===null)return n.typeName=="google.protobuf.NullValue"?0:i?n.values[0].no:gi;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 vi;break}throw new Error("cannot decode enum ".concat(n.typeName," from JSON: ").concat(gt(e)))}function Mh(n){return n.repeated||n.kind=="map"?!0:!(n.oneof||n.kind=="message"||n.opt||n.req)}function ho(n,e,t){if(n.kind=="map"){ye(typeof e=="object"&&e!=null);const i={},r=Object.entries(e);switch(n.V.kind){case"scalar":for(const[o,a]of r)i[o.toString()]=yi(n.V.T,a);break;case"message":for(const[o,a]of r)i[o.toString()]=a.toJson(t);break;case"enum":const s=n.V.T;for(const[o,a]of r)i[o.toString()]=Er(s,a,t.enumAsInteger);break}return t.emitDefaultValues||r.length>0?i:void 0}if(n.repeated){ye(Array.isArray(e));const i=[];switch(n.kind){case"scalar":for(let r=0;r<e.length;r++)i.push(yi(n.T,e[r]));break;case"enum":for(let r=0;r<e.length;r++)i.push(Er(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 yi(n.T,e);case"enum":return Er(n.T,e,t.enumAsInteger);case"message":return oo(n.T,e).toJson(t)}}function Er(n,e,t){var i;if(ye(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 yi(n,e){switch(n){case w.INT32:case w.SFIXED32:case w.SINT32:case w.FIXED32:case w.UINT32:return ye(typeof e=="number"),e;case w.FLOAT:case w.DOUBLE:return ye(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case w.STRING:return ye(typeof e=="string"),e;case w.BOOL:return ye(typeof e=="boolean"),e;case w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return ye(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case w.BYTES:return ye(e instanceof Uint8Array),no.enc(e)}}const hn=Symbol("@bufbuild/protobuf/unknown-fields"),mo={readUnknownFields:!0,readerFactory:n=>new kh(n)},fo={writeUnknownFields:!0,writerFactory:()=>new bh};function Oh(n){return n?Object.assign(Object.assign({},mo),n):mo}function Dh(n){return n?Object.assign(Object.assign({},fo),n):fo}function Ah(){return{makeReadOptions:Oh,makeWriteOptions:Dh,listUnknownFields(n){var e;return(e=n[hn])!==null&&e!==void 0?e:[]},discardUnknownFields(n){delete n[hn]},writeUnknownFields(n,e){const i=n[hn];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[hn])||(r[hn]=[]),r[hn].push({no:e,wireType:t,data:i})},readMessage(n,e,t,i,r){const s=n.getType(),o=r?e.len:e.pos+t;let a,c;for(;e.pos<o&&([a,c]=e.tag(),!(r===!0&&c==Ce.EndGroup));){const d=s.fields.find(a);if(!d){const l=e.skip(c,a);i.readUnknownFields&&this.onUnknownField(n,a,c,l);continue}po(n,e,d,c,i)}if(r&&(c!=Ce.EndGroup||a!==t))throw new Error("invalid end group tag")},readField:po,writeMessage(n,e,t){const i=n.getType();for(const r of i.fields.byNumber()){if(!so(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];go(r,s,e,t)}return t.writeUnknownFields&&this.writeUnknownFields(n,e),e},writeField(n,e,t,i){e!==void 0&&go(n,e,t,i)}}}function po(n,e,t,i,r){let{repeated:s,localName:o}=t;switch(t.oneof&&(n=n[t.oneof.localName],n.case!=o&&delete n.value,n.case=o,o="value"),t.kind){case"scalar":case"enum":const a=t.kind=="enum"?w.INT32:t.T;let c=ki;if(t.kind=="scalar"&&t.L>0&&(c=Lh),s){let h=n[o];if(i==Ce.LengthDelimited&&a!=w.STRING&&a!=w.BYTES){let v=e.uint32()+e.pos;for(;e.pos<v;)h.push(c(e,a))}else h.push(c(e,a))}else n[o]=c(e,a);break;case"message":const d=t.T;s?n[o].push(bi(e,new d,r,t)):Rt(n[o])?bi(e,n[o],r,t):(n[o]=bi(e,new d,r,t),d.fieldWrapper&&!t.oneof&&!t.repeated&&(n[o]=d.fieldWrapper.unwrapField(n[o])));break;case"map":let[l,u]=xh(t,e,r);n[o][l]=u;break}}function bi(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 xh(n,e,t){const i=e.uint32(),r=e.pos+i;let s,o;for(;e.pos<r;){const[a]=e.tag();switch(a){case 1:s=ki(e,n.K);break;case 2:switch(n.V.kind){case"scalar":o=ki(e,n.V.T);break;case"enum":o=e.int32();break;case"message":o=bi(e,new n.V.T,t,void 0);break}break}}if(s===void 0&&(s=un(n.K,Ut.BIGINT)),typeof s!="string"&&typeof s!="number"&&(s=s.toString()),o===void 0)switch(n.V.kind){case"scalar":o=un(n.V.T,Ut.BIGINT);break;case"enum":o=n.V.T.values[0].no;break;case"message":o=new n.V.T;break}return[s,o]}function Lh(n,e){const t=ki(n,e);return typeof t=="bigint"?t.toString():t}function ki(n,e){switch(e){case w.STRING:return n.string();case w.BOOL:return n.bool();case w.DOUBLE:return n.double();case w.FLOAT:return n.float();case w.INT32:return n.int32();case w.INT64:return n.int64();case w.UINT64:return n.uint64();case w.FIXED64:return n.fixed64();case w.BYTES:return n.bytes();case w.FIXED32:return n.fixed32();case w.SFIXED32:return n.sfixed32();case w.SFIXED64:return n.sfixed64();case w.SINT64:return n.sint64();case w.UINT32:return n.uint32();case w.SINT32:return n.sint32()}}function go(n,e,t,i){ye(e!==void 0);const r=n.repeated;switch(n.kind){case"scalar":case"enum":let s=n.kind=="enum"?w.INT32:n.T;if(r)if(ye(Array.isArray(e)),n.packed)Uh(t,s,n.no,e);else for(const o of e)xn(t,s,n.no,o);else xn(t,s,n.no,e);break;case"message":if(r){ye(Array.isArray(e));for(const o of e)vo(t,i,n,o)}else vo(t,i,n,e);break;case"map":ye(typeof e=="object"&&e!=null);for(const[o,a]of Object.entries(e))Nh(t,i,n,o,a);break}}function Nh(n,e,t,i,r){n.tag(t.no,Ce.LengthDelimited),n.fork();let s=i;switch(t.K){case w.INT32:case w.FIXED32:case w.UINT32:case w.SFIXED32:case w.SINT32:s=Number.parseInt(i);break;case w.BOOL:ye(i=="true"||i=="false"),s=i=="true";break}switch(xn(n,t.K,1,s),t.V.kind){case"scalar":xn(n,t.V.T,2,r);break;case"enum":xn(n,w.INT32,2,r);break;case"message":ye(r!==void 0),n.tag(2,Ce.LengthDelimited).bytes(r.toBinary(e));break}n.join()}function vo(n,e,t,i){const r=oo(t.T,i);t.delimited?n.tag(t.no,Ce.StartGroup).raw(r.toBinary(e)).tag(t.no,Ce.EndGroup):n.tag(t.no,Ce.LengthDelimited).bytes(r.toBinary(e))}function xn(n,e,t,i){ye(i!==void 0);let[r,s]=yo(e);n.tag(t,r)[s](i)}function Uh(n,e,t,i){if(!i.length)return;n.tag(t,Ce.LengthDelimited).fork();let[,r]=yo(e);for(let s=0;s<i.length;s++)n[r](i[s]);n.join()}function yo(n){let e=Ce.Varint;switch(n){case w.BYTES:case w.STRING:e=Ce.LengthDelimited;break;case w.DOUBLE:case w.FIXED64:case w.SFIXED64:e=Ce.Bit64;break;case w.FIXED32:case w.SFIXED32:case w.FLOAT:e=Ce.Bit32;break}const t=w[n].toLowerCase();return[e,t]}function Fh(){return{setEnumType:Ja,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,o=n;if(o[r]!=null)switch(i.kind){case"oneof":const a=o[r].case;if(a===void 0)continue;const c=i.findField(a);let d=o[r].value;c&&c.kind=="message"&&!Rt(d,c.T)?d=new c.T(d):c&&c.kind==="scalar"&&c.T===w.BYTES&&(d=Ln(d)),s[r]={case:a,value:d};break;case"scalar":case"enum":let l=o[r];i.T===w.BYTES&&(l=i.repeated?l.map(Ln):Ln(l)),s[r]=l;break;case"map":switch(i.V.kind){case"scalar":case"enum":if(i.V.T===w.BYTES)for(const[m,v]of Object.entries(o[r]))s[r][m]=Ln(v);else Object.assign(s[r],o[r]);break;case"message":const h=i.V.T;for(const m of Object.keys(o[r])){let v=o[r][m];h.fieldWrapper||(v=new h(v)),s[r][m]=v}break}break;case"message":const u=i.T;if(i.repeated)s[r]=o[r].map(h=>Rt(h,u)?h:new u(h));else{const h=o[r];u.fieldWrapper?u.typeName==="google.protobuf.BytesValue"?s[r]=Ln(h):s[r]=h:s[r]=Rt(h,u)?h:new u(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((o,a)=>i.T.equals(o,s[a]));case"scalar":return r.every((o,a)=>Ft(i.T,o,s[a]));case"enum":return r.every((o,a)=>Ft(w.INT32,o,s[a]))}throw new Error("repeated cannot contain ".concat(i.kind))}switch(i.kind){case"message":let o=r,a=s;return i.T.fieldWrapper&&(o!==void 0&&!Rt(o)&&(o=i.T.fieldWrapper.wrapField(o)),a!==void 0&&!Rt(a)&&(a=i.T.fieldWrapper.wrapField(a))),i.T.equals(o,a);case"enum":return Ft(w.INT32,r,s);case"scalar":return Ft(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 Ft(w.INT32,r.value,s.value);case"scalar":return Ft(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 l=i.V.T;return d.every(h=>l.equals(r[h],s[h]));case"enum":return d.every(h=>Ft(w.INT32,r[h],s[h]));case"scalar":const u=i.V.T;return d.every(h=>Ft(u,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 o;if(r.repeated)o=s.map(Ti);else if(r.kind=="map"){o=i[r.localName];for(const[a,c]of Object.entries(s))o[a]=Ti(c)}else r.kind=="oneof"?o=r.findField(s.case)?{case:s.case,value:Ti(s.value)}:{case:void 0}:o=Ti(s);i[r.localName]=o}for(const r of e.runtime.bin.listUnknownFields(n))e.runtime.bin.onUnknownField(i,r.no,r.wireType,r.data);return t}}}function Ti(n){if(n===void 0)return n;if(Rt(n))return n.clone();if(n instanceof Uint8Array){const e=new Uint8Array(n.byteLength);return e.set(n),e}return n}function Ln(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function Bh(n,e,t){return{syntax:n,json:Ph(),bin:Ah(),util:Object.assign(Object.assign({},Fh()),{newFieldList:e,initFields:t}),makeMessageType(i,r,s){return mh(this,i,r,s)},makeEnum:hh,makeEnumType:Ga,getEnumType:uh,makeExtension(i,r,s){return Th(this,i,r,s)}}}class jh{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 bo(n,e){const t=ko(n);return e?t:Jh(Hh(t))}function Vh(n){return bo(n,!1)}const qh=ko;function ko(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 Kh=new Set(["constructor","toString","toJSON","valueOf"]),Wh=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),To=n=>"".concat(n,"$"),Hh=n=>Wh.has(n)?To(n):n,Jh=n=>Kh.has(n)?To(n):n;class Gh{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=Vh(e)}addField(e){ye(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 zh(n,e){var t,i,r,s,o,a;const c=[];let d;for(const l of typeof n=="function"?n():n){const u=l;if(u.localName=bo(l.name,l.oneof!==void 0),u.jsonName=(t=l.jsonName)!==null&&t!==void 0?t:qh(l.name),u.repeated=(i=l.repeated)!==null&&i!==void 0?i:!1,l.kind=="scalar"&&(u.L=(r=l.L)!==null&&r!==void 0?r:Ut.BIGINT),u.delimited=(s=l.delimited)!==null&&s!==void 0?s:!1,u.req=(o=l.req)!==null&&o!==void 0?o:!1,u.opt=(a=l.opt)!==null&&a!==void 0?a:!1,l.packed===void 0&&(u.packed=l.kind=="enum"||l.kind=="scalar"&&l.T!=w.BYTES&&l.T!=w.STRING),l.oneof!==void 0){const h=typeof l.oneof=="string"?l.oneof:l.oneof.name;(!d||d.name!=h)&&(d=new Gh(h)),u.oneof=d,d.addField(u)}c.push(u)}return c}const p=Bh("proto3",n=>new jh(n,e=>zh(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]=un(e.T,e.L);break}}});class We extends kr{constructor(e){super(),this.seconds=pe.zero,this.nanos=0,p.util.initPartial(e,this)}fromJson(e,t){if(typeof e!="string")throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(p.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=pe.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 We.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new We({seconds:pe.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return new We().fromBinary(e,t)}static fromJson(e,t){return new We().fromJson(e,t)}static fromJsonString(e,t){return new We().fromJsonString(e,t)}static equals(e,t){return p.util.equals(We,e,t)}}We.runtime=p,We.typeName="google.protobuf.Timestamp",We.fields=p.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const $h=p.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:We},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:Qh,repeated:!0},{no:5,name:"events",kind:"message",T:Xh,repeated:!0}]),Qh=p.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:Yh,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),Yh=p.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:We},{no:3,name:"value",kind:"scalar",T:2}]),Xh=p.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:We},{no:7,name:"normalized_end_timestamp",kind:"message",T:We,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),Zh=p.makeEnum("livekit.AudioCodec",[{no:0,name:"DEFAULT_AC"},{no:1,name:"OPUS"},{no:2,name:"AAC"},{no:3,name:"AC_MP3"}]),em=p.makeEnum("livekit.VideoCodec",[{no:0,name:"DEFAULT_VC"},{no:1,name:"H264_BASELINE"},{no:2,name:"H264_MAIN"},{no:3,name:"H264_HIGH"},{no:4,name:"VP8"}]),tm=p.makeEnum("livekit.ImageCodec",[{no:0,name:"IC_DEFAULT"},{no:1,name:"IC_JPEG"}]),So=p.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),Xe=p.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),Re=p.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"}]),wr=p.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),Nn=p.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),Un=p.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Ze=p.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"}]),$t=p.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"}]),Co=p.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),Me=p.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"}]),Si=p.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:Ci,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:Uo}]),Ci=p.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),nm=p.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:p.getEnumType(Re),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}]),Qt=p.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:p.getEnumType(mn)},{no:4,name:"tracks",kind:"message",T:pn,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:nm},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:p.getEnumType(fn)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:p.getEnumType(Ze)},{no:18,name:"kind_details",kind:"enum",T:p.getEnumType(im),repeated:!0},{no:19,name:"data_tracks",kind:"message",T:Rr,repeated:!0}]),mn=p.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),fn=p.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"},{no:7,name:"CONNECTOR"},{no:8,name:"BRIDGE"}]),im=p.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"},{no:2,name:"CONNECTOR_WHATSAPP"},{no:3,name:"CONNECTOR_TWILIO"},{no:4,name:"BRIDGE_RTSP"}]),be=p.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),rm=p.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:Bt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:p.getEnumType(Eo)},{no:6,name:"sdp_cid",kind:"scalar",T:9}]),pn=p.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:p.getEnumType(Xe)},{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:p.getEnumType(Re)},{no:10,name:"layers",kind:"message",T:Bt,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:rm,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:p.getEnumType(be)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:Uo},{no:19,name:"audio_features",kind:"enum",T:p.getEnumType(Me),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:p.getEnumType(So)}]),Rr=p.makeMessageType("livekit.DataTrackInfo",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"sid",kind:"scalar",T:9},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"encryption",kind:"enum",T:p.getEnumType(be)}]),sm=p.makeMessageType("livekit.DataTrackSubscriptionOptions",()=>[{no:1,name:"target_fps",kind:"scalar",T:13,opt:!0}]),Bt=p.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:p.getEnumType(wr)},{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},{no:8,name:"repair_ssrc",kind:"scalar",T:13}]),Eo=p.makeEnum("livekit.VideoLayer.Mode",[{no:0,name:"MODE_UNUSED"},{no:1,name:"ONE_SPATIAL_LAYER_PER_STREAM"},{no:2,name:"MULTIPLE_SPATIAL_LAYERS_PER_STREAM"},{no:3,name:"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR"}]),je=p.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:p.getEnumType($)},{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:_r,oneof:"value"},{no:3,name:"speaker",kind:"message",T:am,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:Po,oneof:"value"},{no:7,name:"transcription",kind:"message",T:om,oneof:"value"},{no:8,name:"metrics",kind:"message",T:$h,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:Ei,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:Pr,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:Ir,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:Mr,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:wi,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:Ri,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:_i,oneof:"value"},{no:18,name:"encrypted_packet",kind:"message",T:wo,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),$=p.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),wo=p.makeMessageType("livekit.EncryptedPacket",()=>[{no:1,name:"encryption_type",kind:"enum",T:p.getEnumType(be)},{no:2,name:"iv",kind:"scalar",T:12},{no:3,name:"key_index",kind:"scalar",T:13},{no:4,name:"encrypted_value",kind:"scalar",T:12}]),Ro=p.makeMessageType("livekit.EncryptedPacketPayload",()=>[{no:1,name:"user",kind:"message",T:_r,oneof:"value"},{no:3,name:"chat_message",kind:"message",T:Ei,oneof:"value"},{no:4,name:"rpc_request",kind:"message",T:Pr,oneof:"value"},{no:5,name:"rpc_ack",kind:"message",T:Ir,oneof:"value"},{no:6,name:"rpc_response",kind:"message",T:Mr,oneof:"value"},{no:7,name:"stream_header",kind:"message",T:wi,oneof:"value"},{no:8,name:"stream_chunk",kind:"message",T:Ri,oneof:"value"},{no:9,name:"stream_trailer",kind:"message",T:_i,oneof:"value"}]),am=p.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:_o,repeated:!0}]),_o=p.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}]),_r=p.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}]),Po=p.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),om=p.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:cm,repeated:!0}]),cm=p.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}]),Ei=p.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}]),Pr=p.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}]),Ir=p.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),Mr=p.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:Io,oneof:"value"}]),Io=p.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}]),Mo=p.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),Oo=p.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:p.getEnumType(Do)},{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}]),Do=p.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),Ao=p.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:p.getEnumType(xo)},{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}]),xo=p.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"}]),Lo=p.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:No},{no:2,name:"screen",kind:"message",T:No},{no:3,name:"resume_connection",kind:"enum",T:p.getEnumType(Un)},{no:4,name:"disabled_codecs",kind:"message",T:dm},{no:5,name:"force_relay",kind:"enum",T:p.getEnumType(Un)}]),No=p.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:p.getEnumType(Un)}]),dm=p.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:Ci,repeated:!0},{no:2,name:"publish",kind:"message",T:Ci,repeated:!0}]),Uo=p.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Or=p.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),Fo=p.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:p.getEnumType(Or)},{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"}),Bo=p.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),wi=p.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:p.getEnumType(be)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:Fo,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:Bo,oneof:"content_header"}],{localName:"DataStream_Header"}),Ri=p.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"}),_i=p.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"}),lm=p.makeMessageType("livekit.FilterParams",()=>[{no:1,name:"include_events",kind:"scalar",T:9,repeated:!0},{no:2,name:"exclude_events",kind:"scalar",T:9,repeated:!0}]),um=p.makeMessageType("livekit.WebhookConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"signing_key",kind:"scalar",T:9},{no:3,name:"filter_params",kind:"message",T:lm}]),hm=p.makeMessageType("livekit.SubscribedAudioCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"enabled",kind:"scalar",T:8}]),Dr=p.makeMessageType("livekit.RoomAgentDispatch",()=>[{no:1,name:"agent_name",kind:"scalar",T:9},{no:2,name:"metadata",kind:"scalar",T:9}]),ot=p.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),Ar=p.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),mm=p.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),fm=p.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:jt,oneof:"message"},{no:2,name:"answer",kind:"message",T:jt,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Pi,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Fn,oneof:"message"},{no:5,name:"mute",kind:"message",T:Ii,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Mi,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:Wo,oneof:"message"},{no:8,name:"leave",kind:"message",T:Oi,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:Jo,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:$o,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:Br,oneof:"message"},{no:13,name:"simulate",kind:"message",T:vt,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:Ur,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:Xo,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:Nr,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:Ho,oneof:"message"},{no:19,name:"publish_data_track_request",kind:"message",T:Vo,oneof:"message"},{no:20,name:"unpublish_data_track_request",kind:"message",T:Ko,oneof:"message"},{no:21,name:"update_data_subscription",kind:"message",T:Sm,oneof:"message"}]),jo=p.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:ym,oneof:"message"},{no:2,name:"answer",kind:"message",T:jt,oneof:"message"},{no:3,name:"offer",kind:"message",T:jt,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Pi,oneof:"message"},{no:5,name:"update",kind:"message",T:Tm,oneof:"message"},{no:6,name:"track_published",kind:"message",T:Lr,oneof:"message"},{no:8,name:"leave",kind:"message",T:Oi,oneof:"message"},{no:9,name:"mute",kind:"message",T:Ii,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:Em,oneof:"message"},{no:11,name:"room_update",kind:"message",T:wm,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:_m,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:Im,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:Om,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Am,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:km,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:bm,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:Lm,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:Fm,oneof:"message"},{no:22,name:"request_response",kind:"message",T:Bm,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:jm,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:xm,oneof:"message"},{no:25,name:"media_sections_requirement",kind:"message",T:Wm,oneof:"message"},{no:26,name:"subscribed_audio_codec_update",kind:"message",T:Dm,oneof:"message"},{no:27,name:"publish_data_track_response",kind:"message",T:qo,oneof:"message"},{no:28,name:"unpublish_data_track_response",kind:"message",T:pm,oneof:"message"},{no:29,name:"data_track_subscriber_handles",kind:"message",T:gm,oneof:"message"}]),xr=p.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:Bt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:p.getEnumType(Eo)}]),Fn=p.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:p.getEnumType(Xe)},{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:p.getEnumType(Re)},{no:9,name:"layers",kind:"message",T:Bt,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:xr,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:p.getEnumType(be)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:p.getEnumType(So)},{no:17,name:"audio_features",kind:"enum",T:p.getEnumType(Me),repeated:!0}]),Vo=p.makeMessageType("livekit.PublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"encryption",kind:"enum",T:p.getEnumType(be)}]),qo=p.makeMessageType("livekit.PublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:Rr}]),Ko=p.makeMessageType("livekit.UnpublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13}]),pm=p.makeMessageType("livekit.UnpublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:Rr}]),gm=p.makeMessageType("livekit.DataTrackSubscriberHandles",()=>[{no:1,name:"sub_handles",kind:"map",K:13,V:{kind:"message",T:vm}}]),vm=p.makeMessageType("livekit.DataTrackSubscriberHandles.PublishedDataTrack",()=>[{no:1,name:"publisher_identity",kind:"scalar",T:9},{no:2,name:"publisher_sid",kind:"scalar",T:9},{no:3,name:"track_sid",kind:"scalar",T:9}],{localName:"DataTrackSubscriberHandles_PublishedDataTrack"}),Pi=p.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:p.getEnumType(ot)},{no:3,name:"final",kind:"scalar",T:8}]),Ii=p.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),ym=p.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Si},{no:2,name:"participant",kind:"message",T:Qt},{no:3,name:"other_participants",kind:"message",T:Qt,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:Go,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:Lo},{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:Oo},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:Ci,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),bm=p.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:Go,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:Lo},{no:3,name:"server_info",kind:"message",T:Oo},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),Lr=p.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:pn}]),km=p.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),jt=p.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},{no:4,name:"mid_to_track_id",kind:"map",K:9,V:{kind:"scalar",T:9}}]),Tm=p.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:Qt,repeated:!0}]),Mi=p.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:Mo,repeated:!0}]),Sm=p.makeMessageType("livekit.UpdateDataSubscription",()=>[{no:1,name:"updates",kind:"message",T:Cm,repeated:!0}]),Cm=p.makeMessageType("livekit.UpdateDataSubscription.Update",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"options",kind:"message",T:sm}],{localName:"UpdateDataSubscription_Update"}),Wo=p.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:p.getEnumType(wr)},{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}]),Nr=p.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:p.getEnumType(Me),repeated:!0}]),Ho=p.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}]),Oi=p.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:p.getEnumType(Ze)},{no:3,name:"action",kind:"enum",T:p.getEnumType(gn)},{no:4,name:"regions",kind:"message",T:Nm}]),gn=p.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),Jo=p.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:Bt,repeated:!0}]),Ur=p.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}]),Go=p.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}]),Em=p.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:_o,repeated:!0}]),wm=p.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Si}]),Rm=p.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:p.getEnumType(Nn)},{no:3,name:"score",kind:"scalar",T:2}]),_m=p.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:Rm,repeated:!0}]),Pm=p.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:p.getEnumType(Ar)}]),Im=p.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:Pm,repeated:!0}]),Fr=p.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:p.getEnumType(wr)},{no:2,name:"enabled",kind:"scalar",T:8}]),Mm=p.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:Fr,repeated:!0}]),Om=p.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:Fr,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:Mm,repeated:!0}]),Dm=p.makeMessageType("livekit.SubscribedAudioCodecUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_audio_codecs",kind:"message",T:hm,repeated:!0}]),zo=p.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}]),$o=p.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:zo,repeated:!0}]),Am=p.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}]),xm=p.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Si},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:Qt},{no:4,name:"other_participants",kind:"message",T:Qt,repeated:!0}]),Br=p.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:jt},{no:2,name:"subscription",kind:"message",T:Mi},{no:3,name:"publish_tracks",kind:"message",T:Lr,repeated:!0},{no:4,name:"data_channels",kind:"message",T:Yo,repeated:!0},{no:5,name:"offer",kind:"message",T:jt},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:Qo,repeated:!0},{no:8,name:"publish_data_tracks",kind:"message",T:qo,repeated:!0}]),Qo=p.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),Yo=p.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:p.getEnumType(ot)}]),vt=p.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:p.getEnumType(mm),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"}]),Xo=p.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),Lm=p.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),Nm=p.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:Um,repeated:!0}]),Um=p.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}]),Fm=p.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:p.getEnumType(Co)}]),Bm=p.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:p.getEnumType(jr)},{no:3,name:"message",kind:"scalar",T:9},{no:4,name:"trickle",kind:"message",T:Pi,oneof:"request"},{no:5,name:"add_track",kind:"message",T:Fn,oneof:"request"},{no:6,name:"mute",kind:"message",T:Ii,oneof:"request"},{no:7,name:"update_metadata",kind:"message",T:Ur,oneof:"request"},{no:8,name:"update_audio_track",kind:"message",T:Nr,oneof:"request"},{no:9,name:"update_video_track",kind:"message",T:Ho,oneof:"request"},{no:10,name:"publish_data_track",kind:"message",T:Vo,oneof:"request"},{no:11,name:"unpublish_data_track",kind:"message",T:Ko,oneof:"request"}]),jr=p.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"},{no:4,name:"QUEUED"},{no:5,name:"UNSUPPORTED_TYPE"},{no:6,name:"UNCLASSIFIED_ERROR"},{no:7,name:"INVALID_HANDLE"},{no:8,name:"INVALID_NAME"},{no:9,name:"DUPLICATE_HANDLE"},{no:10,name:"DUPLICATE_NAME"}]),jm=p.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),Zo=p.makeMessageType("livekit.ConnectionSettings",()=>[{no:1,name:"auto_subscribe",kind:"scalar",T:8},{no:2,name:"adaptive_stream",kind:"scalar",T:8},{no:3,name:"subscriber_allow_pause",kind:"scalar",T:8,opt:!0},{no:4,name:"disable_ice_lite",kind:"scalar",T:8},{no:5,name:"auto_subscribe_data_track",kind:"scalar",T:8,opt:!0}]),Vm=p.makeMessageType("livekit.JoinRequest",()=>[{no:1,name:"client_info",kind:"message",T:Ao},{no:2,name:"connection_settings",kind:"message",T:Zo},{no:3,name:"metadata",kind:"scalar",T:9},{no:4,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:5,name:"add_track_requests",kind:"message",T:Fn,repeated:!0},{no:6,name:"publisher_offer",kind:"message",T:jt},{no:7,name:"reconnect",kind:"scalar",T:8},{no:8,name:"reconnect_reason",kind:"enum",T:p.getEnumType($t)},{no:9,name:"participant_sid",kind:"scalar",T:9},{no:10,name:"sync_state",kind:"message",T:Br}]),qm=p.makeMessageType("livekit.WrappedJoinRequest",()=>[{no:1,name:"compression",kind:"enum",T:p.getEnumType(Km)},{no:2,name:"join_request",kind:"scalar",T:12}]),Km=p.makeEnum("livekit.WrappedJoinRequest.Compression",[{no:0,name:"NONE"},{no:1,name:"GZIP"}]),Wm=p.makeMessageType("livekit.MediaSectionsRequirement",()=>[{no:1,name:"num_audios",kind:"scalar",T:13},{no:2,name:"num_videos",kind:"scalar",T:13}]),Hm=p.makeEnum("livekit.EncodedFileType",[{no:0,name:"DEFAULT_FILETYPE"},{no:1,name:"MP4"},{no:2,name:"OGG"},{no:3,name:"MP3"}]),Jm=p.makeEnum("livekit.SegmentedFileProtocol",[{no:0,name:"DEFAULT_SEGMENTED_FILE_PROTOCOL"},{no:1,name:"HLS_PROTOCOL"}]),Gm=p.makeEnum("livekit.SegmentedFileSuffix",[{no:0,name:"INDEX"},{no:1,name:"TIMESTAMP"}]),zm=p.makeEnum("livekit.ImageFileSuffix",[{no:0,name:"IMAGE_SUFFIX_INDEX"},{no:1,name:"IMAGE_SUFFIX_TIMESTAMP"},{no:2,name:"IMAGE_SUFFIX_NONE_OVERWRITE"}]),$m=p.makeEnum("livekit.StreamProtocol",[{no:0,name:"DEFAULT_PROTOCOL"},{no:1,name:"RTMP"},{no:2,name:"SRT"}]),Qm=p.makeEnum("livekit.AudioMixing",[{no:0,name:"DEFAULT_MIXING"},{no:1,name:"DUAL_CHANNEL_AGENT"},{no:2,name:"DUAL_CHANNEL_ALTERNATE"}]),ec=p.makeEnum("livekit.EncodingOptionsPreset",[{no:0,name:"H264_720P_30"},{no:1,name:"H264_720P_60"},{no:2,name:"H264_1080P_30"},{no:3,name:"H264_1080P_60"},{no:4,name:"PORTRAIT_H264_720P_30"},{no:5,name:"PORTRAIT_H264_720P_60"},{no:6,name:"PORTRAIT_H264_1080P_30"},{no:7,name:"PORTRAIT_H264_1080P_60"}]),Ym=p.makeMessageType("livekit.RoomCompositeEgressRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9},{no:2,name:"layout",kind:"scalar",T:9},{no:3,name:"audio_only",kind:"scalar",T:8},{no:15,name:"audio_mixing",kind:"enum",T:p.getEnumType(Qm)},{no:4,name:"video_only",kind:"scalar",T:8},{no:5,name:"custom_base_url",kind:"scalar",T:9},{no:6,name:"file",kind:"message",T:Vr,oneof:"output"},{no:7,name:"stream",kind:"message",T:nc,oneof:"output"},{no:10,name:"segments",kind:"message",T:qr,oneof:"output"},{no:8,name:"preset",kind:"enum",T:p.getEnumType(ec),oneof:"options"},{no:9,name:"advanced",kind:"message",T:ic,oneof:"options"},{no:11,name:"file_outputs",kind:"message",T:Vr,repeated:!0},{no:12,name:"stream_outputs",kind:"message",T:nc,repeated:!0},{no:13,name:"segment_outputs",kind:"message",T:qr,repeated:!0},{no:14,name:"image_outputs",kind:"message",T:Xm,repeated:!0},{no:16,name:"webhooks",kind:"message",T:um,repeated:!0}]),Vr=p.makeMessageType("livekit.EncodedFileOutput",()=>[{no:1,name:"file_type",kind:"enum",T:p.getEnumType(Hm)},{no:2,name:"filepath",kind:"scalar",T:9},{no:6,name:"disable_manifest",kind:"scalar",T:8},{no:3,name:"s3",kind:"message",T:Di,oneof:"output"},{no:4,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:5,name:"azure",kind:"message",T:xi,oneof:"output"},{no:7,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),qr=p.makeMessageType("livekit.SegmentedFileOutput",()=>[{no:1,name:"protocol",kind:"enum",T:p.getEnumType(Jm)},{no:2,name:"filename_prefix",kind:"scalar",T:9},{no:3,name:"playlist_name",kind:"scalar",T:9},{no:11,name:"live_playlist_name",kind:"scalar",T:9},{no:4,name:"segment_duration",kind:"scalar",T:13},{no:10,name:"filename_suffix",kind:"enum",T:p.getEnumType(Gm)},{no:8,name:"disable_manifest",kind:"scalar",T:8},{no:5,name:"s3",kind:"message",T:Di,oneof:"output"},{no:6,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:7,name:"azure",kind:"message",T:xi,oneof:"output"},{no:9,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),Xm=p.makeMessageType("livekit.ImageOutput",()=>[{no:1,name:"capture_interval",kind:"scalar",T:13},{no:2,name:"width",kind:"scalar",T:5},{no:3,name:"height",kind:"scalar",T:5},{no:4,name:"filename_prefix",kind:"scalar",T:9},{no:5,name:"filename_suffix",kind:"enum",T:p.getEnumType(zm)},{no:6,name:"image_codec",kind:"enum",T:p.getEnumType(tm)},{no:7,name:"disable_manifest",kind:"scalar",T:8},{no:8,name:"s3",kind:"message",T:Di,oneof:"output"},{no:9,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:10,name:"azure",kind:"message",T:xi,oneof:"output"},{no:11,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),Di=p.makeMessageType("livekit.S3Upload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:11,name:"session_token",kind:"scalar",T:9},{no:12,name:"assume_role_arn",kind:"scalar",T:9},{no:13,name:"assume_role_external_id",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9},{no:6,name:"force_path_style",kind:"scalar",T:8},{no:7,name:"metadata",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:8,name:"tagging",kind:"scalar",T:9},{no:9,name:"content_disposition",kind:"scalar",T:9},{no:10,name:"proxy",kind:"message",T:tc}]),Ai=p.makeMessageType("livekit.GCPUpload",()=>[{no:1,name:"credentials",kind:"scalar",T:9},{no:2,name:"bucket",kind:"scalar",T:9},{no:3,name:"proxy",kind:"message",T:tc}]),xi=p.makeMessageType("livekit.AzureBlobUpload",()=>[{no:1,name:"account_name",kind:"scalar",T:9},{no:2,name:"account_key",kind:"scalar",T:9},{no:3,name:"container_name",kind:"scalar",T:9}]),Li=p.makeMessageType("livekit.AliOSSUpload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9}]),tc=p.makeMessageType("livekit.ProxyConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"password",kind:"scalar",T:9}]),nc=p.makeMessageType("livekit.StreamOutput",()=>[{no:1,name:"protocol",kind:"enum",T:p.getEnumType($m)},{no:2,name:"urls",kind:"scalar",T:9,repeated:!0}]),ic=p.makeMessageType("livekit.EncodingOptions",()=>[{no:1,name:"width",kind:"scalar",T:5},{no:2,name:"height",kind:"scalar",T:5},{no:3,name:"depth",kind:"scalar",T:5},{no:4,name:"framerate",kind:"scalar",T:5},{no:5,name:"audio_codec",kind:"enum",T:p.getEnumType(Zh)},{no:6,name:"audio_bitrate",kind:"scalar",T:5},{no:11,name:"audio_quality",kind:"scalar",T:5},{no:7,name:"audio_frequency",kind:"scalar",T:5},{no:8,name:"video_codec",kind:"enum",T:p.getEnumType(em)},{no:9,name:"video_bitrate",kind:"scalar",T:5},{no:12,name:"video_quality",kind:"scalar",T:5},{no:10,name:"key_frame_interval",kind:"scalar",T:1}]),Zm=p.makeMessageType("livekit.AutoParticipantEgress",()=>[{no:1,name:"preset",kind:"enum",T:p.getEnumType(ec),oneof:"options"},{no:2,name:"advanced",kind:"message",T:ic,oneof:"options"},{no:3,name:"file_outputs",kind:"message",T:Vr,repeated:!0},{no:4,name:"segment_outputs",kind:"message",T:qr,repeated:!0}]),ef=p.makeMessageType("livekit.AutoTrackEgress",()=>[{no:1,name:"filepath",kind:"scalar",T:9},{no:5,name:"disable_manifest",kind:"scalar",T:8},{no:2,name:"s3",kind:"message",T:Di,oneof:"output"},{no:3,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:4,name:"azure",kind:"message",T:xi,oneof:"output"},{no:6,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),tf=p.makeMessageType("livekit.RoomEgress",()=>[{no:1,name:"room",kind:"message",T:Ym},{no:3,name:"participant",kind:"message",T:Zm},{no:2,name:"tracks",kind:"message",T:ef}]),Ni=p.makeMessageType("livekit.RoomConfiguration",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"empty_timeout",kind:"scalar",T:13},{no:3,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:11,name:"metadata",kind:"scalar",T:9},{no:5,name:"egress",kind:"message",T:tf},{no:7,name:"min_playout_delay",kind:"scalar",T:13},{no:8,name:"max_playout_delay",kind:"scalar",T:13},{no:9,name:"sync_streams",kind:"scalar",T:8},{no:10,name:"agents",kind:"message",T:Dr,repeated:!0}]),nf=p.makeMessageType("livekit.TokenSourceRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9,opt:!0},{no:2,name:"participant_name",kind:"scalar",T:9,opt:!0},{no:3,name:"participant_identity",kind:"scalar",T:9,opt:!0},{no:4,name:"participant_metadata",kind:"scalar",T:9,opt:!0},{no:5,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:6,name:"room_config",kind:"message",T:Ni,opt:!0}]),rc=p.makeMessageType("livekit.TokenSourceResponse",()=>[{no:1,name:"server_url",kind:"scalar",T:9},{no:2,name:"participant_token",kind:"scalar",T:9}]);function rf(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Ui={exports:{}},sf=Ui.exports,sc;function af(){return sc||(sc=1,(function(n){(function(e,t){n.exports?n.exports=t():e.log=t()})(sf,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={},o=null;function a(g,S){var k=g[S];if(typeof k.bind=="function")return k.bind(g);try{return Function.prototype.bind.call(k,g)}catch{return function(){return Function.prototype.apply.apply(k,[g,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(g){return g==="debug"&&(g="log"),typeof console===t?!1:g==="trace"&&i?c:console[g]!==void 0?a(console,g):console.log!==void 0?a(console,"log"):e}function l(){for(var g=this.getLevel(),S=0;S<r.length;S++){var k=r[S];this[k]=S<g?e:this.methodFactory(k,g,this.name)}if(this.log=this.debug,typeof console===t&&g<this.levels.SILENT)return"No console available for logging"}function u(g){return function(){typeof console!==t&&(l.call(this),this[g].apply(this,arguments))}}function h(g,S,k){return d(g)||u.apply(this,arguments)}function m(g,S){var k=this,R,_,y,b="loglevel";typeof g=="string"?b+=":"+g:typeof g=="symbol"&&(b=void 0);function T(N){var W=(r[N]||"silent").toUpperCase();if(!(typeof window===t||!b)){try{window.localStorage[b]=W;return}catch{}try{window.document.cookie=encodeURIComponent(b)+"="+W+";"}catch{}}}function L(){var N;if(!(typeof window===t||!b)){try{N=window.localStorage[b]}catch{}if(typeof N===t)try{var W=window.document.cookie,ee=encodeURIComponent(b),Te=W.indexOf(ee+"=");Te!==-1&&(N=/^([^;]+)/.exec(W.slice(Te+ee.length+1))[1])}catch{}return k.levels[N]===void 0&&(N=void 0),N}}function F(){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 P(N){var W=N;if(typeof W=="string"&&k.levels[W.toUpperCase()]!==void 0&&(W=k.levels[W.toUpperCase()]),typeof W=="number"&&W>=0&&W<=k.levels.SILENT)return W;throw new TypeError("log.setLevel() called with invalid level: "+N)}k.name=g,k.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},k.methodFactory=S||h,k.getLevel=function(){return y??_??R},k.setLevel=function(N,W){return y=P(N),W!==!1&&T(y),l.call(k)},k.setDefaultLevel=function(N){_=P(N),L()||k.setLevel(N,!1)},k.resetLevel=function(){y=null,F(),l.call(k)},k.enableAll=function(N){k.setLevel(k.levels.TRACE,N)},k.disableAll=function(N){k.setLevel(k.levels.SILENT,N)},k.rebuild=function(){if(o!==k&&(R=P(o.getLevel())),l.call(k),o===k)for(var N in s)s[N].rebuild()},R=P(o?o.getLevel():"WARN");var U=L();U!=null&&(y=P(U)),l.call(k)}o=new m,o.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,o.methodFactory)),k};var v=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=v),o},o.getLoggers=function(){return s},o.default=o,o})})(Ui)),Ui.exports}var Bn=af(),vn;(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"})(vn||(vn={}));var Qe;(function(n){n.Default="livekit",n.Room="livekit-room",n.TokenSource="livekit-token-source",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",n.DataTracks="livekit-data-tracks"})(Qe||(Qe={}));let z=Bn.getLogger("livekit");const ac=Object.values(Qe).map(n=>Bn.getLogger(n));z.setDefaultLevel(vn.info);function ct(n){const e=Bn.getLogger(n);return e.setDefaultLevel(z.getLevel()),e}function of(n,e){if(e)Bn.getLogger(e).setLevel(n);else for(const t of ac)t.setLevel(n)}function cf(n,e){(e?[e]:ac).forEach(i=>{const r=i.methodFactory;i.methodFactory=(s,o,a)=>{const c=r(s,o,a),d=vn[s],l=d>=o&&d<vn.silent;return(u,h)=>{h?c(u,h):c(u),l&&n(d,u,h)}},i.setLevel(i.getLevel())})}const df=Bn.getLogger("lk-e2ee"),jn=7e3,lf=[0,300,4*300,9*300,16*300,jn,jn,jn,jn,jn];class oc{constructor(e){this._retryDelays=e!==void 0?[...e]:lf}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 Kr(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(o){o(s)})}return new(t||(t=Promise))(function(s,o){function a(l){try{d(i.next(l))}catch(u){o(u)}}function c(l){try{d(i.throw(l))}catch(u){o(u)}}function d(l){l.done?s(l.value):r(l.value).then(a,c)}d((i=i.apply(n,e||[])).next())})}function cc(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 _t(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 cc=="function"?cc(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(o){return new Promise(function(a,c){o=n[s](o),r(a,c,o.done,o.value)})}}function r(s,o,a,c){Promise.resolve(c).then(function(d){s({value:d,done:a})},o)}}typeof SuppressedError=="function"&&SuppressedError;var Fi={exports:{}},dc;function uf(){if(dc)return Fi.exports;dc=1;var n=typeof Reflect=="object"?Reflect:null,e=n&&typeof n.apply=="function"?n.apply:function(b,T,L){return Function.prototype.apply.call(b,T,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(y){console&&console.warn&&console.warn(y)}var r=Number.isNaN||function(b){return b!==b};function s(){s.init.call(this)}Fi.exports=s,Fi.exports.once=k,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function a(y){if(typeof y!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof y)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(y){if(typeof y!="number"||y<0||r(y))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+y+".");o=y}}),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(y){return y._maxListeners===void 0?s.defaultMaxListeners:y._maxListeners}s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(b){for(var T=[],L=1;L<arguments.length;L++)T.push(arguments[L]);var F=b==="error",P=this._events;if(P!==void 0)F=F&&P.error===void 0;else if(!F)return!1;if(F){var U;if(T.length>0&&(U=T[0]),U instanceof Error)throw U;var N=new Error("Unhandled error."+(U?" ("+U.message+")":""));throw N.context=U,N}var W=P[b];if(W===void 0)return!1;if(typeof W=="function")e(W,this,T);else for(var ee=W.length,Te=v(W,ee),L=0;L<ee;++L)e(Te[L],this,T);return!0};function d(y,b,T,L){var F,P,U;if(a(T),P=y._events,P===void 0?(P=y._events=Object.create(null),y._eventsCount=0):(P.newListener!==void 0&&(y.emit("newListener",b,T.listener?T.listener:T),P=y._events),U=P[b]),U===void 0)U=P[b]=T,++y._eventsCount;else if(typeof U=="function"?U=P[b]=L?[T,U]:[U,T]:L?U.unshift(T):U.push(T),F=c(y),F>0&&U.length>F&&!U.warned){U.warned=!0;var N=new Error("Possible EventEmitter memory leak detected. "+U.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");N.name="MaxListenersExceededWarning",N.emitter=y,N.type=b,N.count=U.length,i(N)}return y}s.prototype.addListener=function(b,T){return d(this,b,T,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(b,T){return d(this,b,T,!0)};function l(){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 u(y,b,T){var L={fired:!1,wrapFn:void 0,target:y,type:b,listener:T},F=l.bind(L);return F.listener=T,L.wrapFn=F,F}s.prototype.once=function(b,T){return a(T),this.on(b,u(this,b,T)),this},s.prototype.prependOnceListener=function(b,T){return a(T),this.prependListener(b,u(this,b,T)),this},s.prototype.removeListener=function(b,T){var L,F,P,U,N;if(a(T),F=this._events,F===void 0)return this;if(L=F[b],L===void 0)return this;if(L===T||L.listener===T)--this._eventsCount===0?this._events=Object.create(null):(delete F[b],F.removeListener&&this.emit("removeListener",b,L.listener||T));else if(typeof L!="function"){for(P=-1,U=L.length-1;U>=0;U--)if(L[U]===T||L[U].listener===T){N=L[U].listener,P=U;break}if(P<0)return this;P===0?L.shift():g(L,P),L.length===1&&(F[b]=L[0]),F.removeListener!==void 0&&this.emit("removeListener",b,N||T)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(b){var T,L,F;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 P=Object.keys(L),U;for(F=0;F<P.length;++F)U=P[F],U!=="removeListener"&&this.removeAllListeners(U);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(T=L[b],typeof T=="function")this.removeListener(b,T);else if(T!==void 0)for(F=T.length-1;F>=0;F--)this.removeListener(b,T[F]);return this};function h(y,b,T){var L=y._events;if(L===void 0)return[];var F=L[b];return F===void 0?[]:typeof F=="function"?T?[F.listener||F]:[F]:T?S(F):v(F,F.length)}s.prototype.listeners=function(b){return h(this,b,!0)},s.prototype.rawListeners=function(b){return h(this,b,!1)},s.listenerCount=function(y,b){return typeof y.listenerCount=="function"?y.listenerCount(b):m.call(y,b)},s.prototype.listenerCount=m;function m(y){var b=this._events;if(b!==void 0){var T=b[y];if(typeof T=="function")return 1;if(T!==void 0)return T.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function v(y,b){for(var T=new Array(b),L=0;L<b;++L)T[L]=y[L];return T}function g(y,b){for(;b+1<y.length;b++)y[b]=y[b+1];y.pop()}function S(y){for(var b=new Array(y.length),T=0;T<b.length;++T)b[T]=y[T].listener||y[T];return b}function k(y,b){return new Promise(function(T,L){function F(U){y.removeListener(b,P),L(U)}function P(){typeof y.removeListener=="function"&&y.removeListener("error",F),T([].slice.call(arguments))}_(y,b,P,{once:!0}),b!=="error"&&R(y,F,{once:!0})})}function R(y,b,T){typeof y.on=="function"&&_(y,"error",b,T)}function _(y,b,T,L){if(typeof y.on=="function")L.once?y.once(b,T):y.on(b,T);else if(typeof y.addEventListener=="function")y.addEventListener(b,function F(P){L.once&&y.removeEventListener(b,F),T(P)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof y)}return Fi.exports}var yt=uf();let lc=!0,uc=!0;function Vn(n,e,t){const i=n.match(e);return i&&i.length>=t&&parseFloat(i[t],10)}function Yt(n,e,t){if(!n.RTCPeerConnection)return;const i=n.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(o,a){if(o!==e)return r.apply(this,arguments);const c=d=>{const l=t(d);l&&(a.handleEvent?a.handleEvent(l):a(l))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(a,c),r.apply(this,[o,c])};const s=i.removeEventListener;i.removeEventListener=function(o,a){if(o!==e||!this._eventMap||!this._eventMap[e])return s.apply(this,arguments);if(!this._eventMap[e].has(a))return s.apply(this,arguments);const c=this._eventMap[e].get(a);return this._eventMap[e].delete(a),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,s.apply(this,[o,c])},Object.defineProperty(i,"on"+e,{get(){return this["_on"+e]},set(o){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),o&&this.addEventListener(e,this["_on"+e]=o)},enumerable:!0,configurable:!0})}function hf(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(lc=n,n?"adapter.js logging disabled":"adapter.js logging enabled")}function mf(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(uc=!n,"adapter.js deprecation warnings "+(n?"disabled":"enabled"))}function hc(){if(typeof window=="object"){if(lc)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function Wr(n,e){uc&&console.warn(n+" is deprecated, please use "+e+" instead.")}function ff(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(Vn(t.userAgent,/Firefox\/(\d+)\./,1));else if(t.webkitGetUserMedia||n.isSecureContext===!1&&n.webkitRTCPeerConnection)e.browser="chrome",e.version=parseInt(Vn(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else if(n.RTCPeerConnection&&t.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=parseInt(Vn(t.userAgent,/AppleWebKit\/(\d+)\./,1)),e.supportsUnifiedPlan=n.RTCRtpTransceiver&&"currentDirection"in n.RTCRtpTransceiver.prototype,e._safariVersion=Vn(t.userAgent,/Version\/(\d+(\.?\d+))/,1);else return e.browser="Not a supported browser.",e;return e}function mc(n){return Object.prototype.toString.call(n)==="[object Object]"}function fc(n){return mc(n)?Object.keys(n).reduce(function(e,t){const i=mc(n[t]),r=i?fc(n[t]):n[t],s=i&&!Object.keys(r).length;return r===void 0||s?e:Object.assign(e,{[t]:r})},{}):n}function Hr(n,e,t){!e||t.has(e.id)||(t.set(e.id,e),Object.keys(e).forEach(i=>{i.endsWith("Id")?Hr(n,n.get(e[i]),t):i.endsWith("Ids")&&e[i].forEach(r=>{Hr(n,n.get(r),t)})}))}function pc(n,e,t){const i=t?"outbound-rtp":"inbound-rtp",r=new Map;if(e===null)return r;const s=[];return n.forEach(o=>{o.type==="track"&&o.trackIdentifier===e.id&&s.push(o)}),s.forEach(o=>{n.forEach(a=>{a.type===i&&a.trackId===o.id&&Hr(n,a,r)})}),r}const gc=hc;function vc(n,e){const t=n&&n.navigator;if(!t.mediaDevices)return;const i=function(a){if(typeof a!="object"||a.mandatory||a.optional)return a;const c={};return Object.keys(a).forEach(d=>{if(d==="require"||d==="advanced"||d==="mediaSource")return;const l=typeof a[d]=="object"?a[d]:{ideal:a[d]};l.exact!==void 0&&typeof l.exact=="number"&&(l.min=l.max=l.exact);const u=function(h,m){return h?h+m.charAt(0).toUpperCase()+m.slice(1):m==="deviceId"?"sourceId":m};if(l.ideal!==void 0){c.optional=c.optional||[];let h={};typeof l.ideal=="number"?(h[u("min",d)]=l.ideal,c.optional.push(h),h={},h[u("max",d)]=l.ideal,c.optional.push(h)):(h[u("",d)]=l.ideal,c.optional.push(h))}l.exact!==void 0&&typeof l.exact!="number"?(c.mandatory=c.mandatory||{},c.mandatory[u("",d)]=l.exact):["min","max"].forEach(h=>{l[h]!==void 0&&(c.mandatory=c.mandatory||{},c.mandatory[u(h,d)]=l[h])})}),a.advanced&&(c.optional=(c.optional||[]).concat(a.advanced)),c},r=function(a,c){if(e.version>=61)return c(a);if(a=JSON.parse(JSON.stringify(a)),a&&typeof a.audio=="object"){const d=function(l,u,h){u in l&&!(h in l)&&(l[h]=l[u],delete l[u])};a=JSON.parse(JSON.stringify(a)),d(a.audio,"autoGainControl","googAutoGainControl"),d(a.audio,"noiseSuppression","googNoiseSuppression"),a.audio=i(a.audio)}if(a&&typeof a.video=="object"){let d=a.video.facingMode;d=d&&(typeof d=="object"?d:{ideal:d});const l=e.version<66;if(d&&(d.exact==="user"||d.exact==="environment"||d.ideal==="user"||d.ideal==="environment")&&!(t.mediaDevices.getSupportedConstraints&&t.mediaDevices.getSupportedConstraints().facingMode&&!l)){delete a.video.facingMode;let u;if(d.exact==="environment"||d.ideal==="environment"?u=["back","rear"]:(d.exact==="user"||d.ideal==="user")&&(u=["front"]),u)return t.mediaDevices.enumerateDevices().then(h=>{h=h.filter(v=>v.kind==="videoinput");let m=h.find(v=>u.some(g=>v.label.toLowerCase().includes(g)));return!m&&h.length&&u.includes("back")&&(m=h[h.length-1]),m&&(a.video.deviceId=d.exact?{exact:m.deviceId}:{ideal:m.deviceId}),a.video=i(a.video),gc("chrome: "+JSON.stringify(a)),c(a)})}a.video=i(a.video)}return gc("chrome: "+JSON.stringify(a)),c(a)},s=function(a){return e.version>=64?a:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[a.name]||a.name,message:a.message,constraint:a.constraint||a.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},o=function(a,c,d){r(a,l=>{t.webkitGetUserMedia(l,c,u=>{d&&d(s(u))})})};if(t.getUserMedia=o.bind(t),t.mediaDevices.getUserMedia){const a=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(c){return r(c,d=>a(d).then(l=>{if(d.audio&&!l.getAudioTracks().length||d.video&&!l.getVideoTracks().length)throw l.getTracks().forEach(u=>{u.stop()}),new DOMException("","NotFoundError");return l},l=>Promise.reject(s(l))))}}}function yc(n){n.MediaStream=n.MediaStream||n.webkitMediaStream}function bc(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(a=>a.track&&a.track.id===r.track.id):s={track:r.track};const o=new Event("track");o.track=r.track,o.receiver=s,o.transceiver={receiver:s},o.streams=[i.stream],this.dispatchEvent(o)}),i.stream.getTracks().forEach(r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(a=>a.track&&a.track.id===r.id):s={track:r};const o=new Event("track");o.track=r,o.receiver=s,o.transceiver={receiver:s},o.streams=[i.stream],this.dispatchEvent(o)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else Yt(n,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function kc(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(a,c){let d=r.apply(this,arguments);return d||(d=e(this,a),this._senders.push(d)),d};const s=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(a){s.apply(this,arguments);const c=this._senders.indexOf(a);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(o=>{this._senders.push(e(this,o))})};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(s){this._senders=this._senders||[],i.apply(this,[s]),s.getTracks().forEach(o=>{const a=this._senders.find(c=>c.track===o);a&&this._senders.splice(this._senders.indexOf(a),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 Tc(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(o=>o._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(o=>pc(o,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}),Yt(n,"track",i=>(i.receiver._pc=i.srcElement,i)),n.RTCRtpReceiver.prototype.getStats=function(){const r=this;return this._pc.getStats().then(s=>pc(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,o;return this.getSenders().forEach(a=>{a.track===i&&(r?o=!0:r=a)}),this.getReceivers().forEach(a=>(a.track===i&&(s?o=!0:s=a),a.track===i)),o||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 Sc(n){n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(o=>this._shimmedLocalStreams[o][0])};const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(o,a){if(!a)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const c=e.apply(this,arguments);return this._shimmedLocalStreams[a.id]?this._shimmedLocalStreams[a.id].indexOf(c)===-1&&this._shimmedLocalStreams[a.id].push(c):this._shimmedLocalStreams[a.id]=[a,c],c};const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(o){this._shimmedLocalStreams=this._shimmedLocalStreams||{},o.getTracks().forEach(d=>{if(this.getSenders().find(u=>u.track===d))throw new DOMException("Track already exists.","InvalidAccessError")});const a=this.getSenders();t.apply(this,arguments);const c=this.getSenders().filter(d=>a.indexOf(d)===-1);this._shimmedLocalStreams[o.id]=[o].concat(c)};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[o.id],i.apply(this,arguments)};const r=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},o&&Object.keys(this._shimmedLocalStreams).forEach(a=>{const c=this._shimmedLocalStreams[a].indexOf(o);c!==-1&&this._shimmedLocalStreams[a].splice(c,1),this._shimmedLocalStreams[a].length===1&&delete this._shimmedLocalStreams[a]}),r.apply(this,arguments)}}function Cc(n,e){if(!n.RTCPeerConnection)return;if(n.RTCPeerConnection.prototype.addTrack&&e.version>=65)return Sc(n);const t=n.RTCPeerConnection.prototype.getLocalStreams;n.RTCPeerConnection.prototype.getLocalStreams=function(){const l=t.apply(this);return this._reverseStreams=this._reverseStreams||{},l.map(u=>this._reverseStreams[u.id])};const i=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(l){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},l.getTracks().forEach(u=>{if(this.getSenders().find(m=>m.track===u))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[l.id]){const u=new n.MediaStream(l.getTracks());this._streams[l.id]=u,this._reverseStreams[u.id]=l,l=u}i.apply(this,[l])};const r=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(l){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[l.id]||l]),delete this._reverseStreams[this._streams[l.id]?this._streams[l.id].id:l.id],delete this._streams[l.id]},n.RTCPeerConnection.prototype.addTrack=function(l,u){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(g=>g===l))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(g=>g.track===l))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const v=this._streams[u.id];if(v)v.addTrack(l),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const g=new n.MediaStream([l]);this._streams[u.id]=g,this._reverseStreams[g.id]=u,this.addStream(g)}return this.getSenders().find(g=>g.track===l)};function s(d,l){let u=l.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];u=u.replace(new RegExp(v.id,"g"),m.id)}),new RTCSessionDescription({type:l.type,sdp:u})}function o(d,l){let u=l.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];u=u.replace(new RegExp(m.id,"g"),v.id)}),new RTCSessionDescription({type:l.type,sdp:u})}["createOffer","createAnswer"].forEach(function(d){const l=n.RTCPeerConnection.prototype[d],u={[d](){const h=arguments;return arguments.length&&typeof arguments[0]=="function"?l.apply(this,[v=>{const g=s(this,v);h[0].apply(null,[g])},v=>{h[1]&&h[1].apply(null,v)},arguments[2]]):l.apply(this,arguments).then(v=>s(this,v))}};n.RTCPeerConnection.prototype[d]=u[d]});const a=n.RTCPeerConnection.prototype.setLocalDescription;n.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?a.apply(this,arguments):(arguments[0]=o(this,arguments[0]),a.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(l){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!l._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(l._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(g=>l.track===g)&&(h=this._streams[m])}),h&&(h.getTracks().length===1?this.removeStream(this._reverseStreams[h.id]):h.removeTrack(l.track),this.dispatchEvent(new Event("negotiationneeded")))}}function Jr(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 Ec(n,e){Yt(n,"negotiationneeded",t=>{const i=t.target;if(!((e.version<72||i.getConfiguration&&i.getConfiguration().sdpSemantics==="plan-b")&&i.signalingState!=="stable"))return t})}var wc=Object.freeze({__proto__:null,fixNegotiationNeeded:Ec,shimAddTrackRemoveTrack:Cc,shimAddTrackRemoveTrackWithNative:Sc,shimGetSendersWithDtmf:kc,shimGetUserMedia:vc,shimMediaStream:yc,shimOnTrack:bc,shimPeerConnection:Jr,shimSenderReceiverGetStats:Tc});function Rc(n,e){const t=n&&n.navigator,i=n&&n.MediaStreamTrack;if(t.getUserMedia=function(r,s,o){Wr("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),t.mediaDevices.getUserMedia(r).then(s,o)},!(e.version>55&&"autoGainControl"in t.mediaDevices.getSupportedConstraints())){const r=function(o,a,c){a in o&&!(c in o)&&(o[c]=o[a],delete o[a])},s=t.mediaDevices.getUserMedia.bind(t.mediaDevices);if(t.mediaDevices.getUserMedia=function(o){return typeof o=="object"&&typeof o.audio=="object"&&(o=JSON.parse(JSON.stringify(o)),r(o.audio,"autoGainControl","mozAutoGainControl"),r(o.audio,"noiseSuppression","mozNoiseSuppression")),s(o)},i&&i.prototype.getSettings){const o=i.prototype.getSettings;i.prototype.getSettings=function(){const a=o.apply(this,arguments);return r(a,"mozAutoGainControl","autoGainControl"),r(a,"mozNoiseSuppression","noiseSuppression"),a}}if(i&&i.prototype.applyConstraints){const o=i.prototype.applyConstraints;i.prototype.applyConstraints=function(a){return this.kind==="audio"&&typeof a=="object"&&(a=JSON.parse(JSON.stringify(a)),r(a,"autoGainControl","mozAutoGainControl"),r(a,"noiseSuppression","mozNoiseSuppression")),o.apply(this,[a])}}}}function pf(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 _c(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 Gr(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],o={[r](){return arguments[0]=new(r==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),s.apply(this,arguments)}};n.RTCPeerConnection.prototype[r]=o[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,o,a]=arguments;return i.apply(this,[s||null]).then(c=>{if(e.version<53&&!o)try{c.forEach(d=>{d.type=t[d.type]||d.type})}catch(d){if(d.name!=="TypeError")throw d;c.forEach((l,u)=>{c.set(u,Object.assign({},l,{type:t[l.type]||l.type}))})}return c}).then(o,a)}}function Pc(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 Ic(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}),Yt(n,"track",t=>(t.receiver._pc=t.srcElement,t)),n.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Mc(n){!n.RTCPeerConnection||"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){Wr("removeStream","removeTrack"),this.getSenders().forEach(i=>{i.track&&t.getTracks().includes(i.track)&&this.removeTrack(i)})})}function Oc(n){n.DataChannel&&!n.RTCDataChannel&&(n.RTCDataChannel=n.DataChannel)}function Dc(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(o=>{if("rid"in o&&!/^[a-z0-9]{0,16}$/i.test(o.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in o&&!(parseFloat(o.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in o&&!(parseFloat(o.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const s=e.apply(this,arguments);if(r){const{sender:o}=s,a=o.getParameters();(!("encodings"in a)||a.encodings.length===1&&Object.keys(a.encodings[0]).length===0)&&(a.encodings=i,o.sendEncodings=i,this.setParametersPromises.push(o.setParameters(a).then(()=>{delete o.sendEncodings}).catch(()=>{delete o.sendEncodings})))}return s})}function Ac(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 xc(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 Lc(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 Nc=Object.freeze({__proto__:null,shimAddTransceiver:Dc,shimCreateAnswer:Lc,shimCreateOffer:xc,shimGetDisplayMedia:pf,shimGetParameters:Ac,shimGetUserMedia:Rc,shimOnTrack:_c,shimPeerConnection:Gr,shimRTCDataChannel:Oc,shimReceiverGetStats:Ic,shimRemoveStream:Mc,shimSenderGetStats:Pc});function Uc(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),o=1;o<r;o++)s[o-1]=arguments[o];return s&&s.forEach(a=>{this._localStreams?this._localStreams.includes(a)||this._localStreams.push(a):this._localStreams=[a]}),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 Fc(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 o=new Event("addstream");o.stream=s,i.dispatchEvent(o)})}),e.apply(i,arguments)}}}function Bc(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,o=e.addIceCandidate;e.createOffer=function(d,l){const u=arguments.length>=2?arguments[2]:arguments[0],h=t.apply(this,[u]);return l?(h.then(d,l),Promise.resolve()):h},e.createAnswer=function(d,l){const u=arguments.length>=2?arguments[2]:arguments[0],h=i.apply(this,[u]);return l?(h.then(d,l),Promise.resolve()):h};let a=function(c,d,l){const u=r.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u};e.setLocalDescription=a,a=function(c,d,l){const u=s.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u},e.setRemoteDescription=a,a=function(c,d,l){const u=o.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u},e.addIceCandidate=a}function jc(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(Vc(r))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=(function(i,r,s){e.mediaDevices.getUserMedia(i).then(r,s)}).bind(e))}function Vc(n){return n&&n.video!==void 0?Object.assign({},n,{video:fc(n.video)}):n}function qc(n){if(!n.RTCPeerConnection)return;const e=n.RTCPeerConnection;n.RTCPeerConnection=function(i,r){if(i&&i.iceServers){const s=[];for(let o=0;o<i.iceServers.length;o++){let a=i.iceServers[o];a.urls===void 0&&a.url?(Wr("RTCIceServer.url","RTCIceServer.urls"),a=JSON.parse(JSON.stringify(a)),a.urls=a.url,delete a.url,s.push(a)):s.push(i.iceServers[o])}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 Kc(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 Wc(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(o=>o.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(o=>o.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 Hc(n){typeof n!="object"||n.AudioContext||(n.AudioContext=n.webkitAudioContext)}var Jc=Object.freeze({__proto__:null,shimAudioContext:Hc,shimCallbacksAPI:Bc,shimConstraints:Vc,shimCreateOfferLegacy:Wc,shimGetUserMedia:jc,shimLocalStreamsAPI:Uc,shimRTCIceServerUrls:qc,shimRemoteStreamsAPI:Fc,shimTrackEventTransceiver:Kc}),zr={exports:{}},Gc;function gf(){return Gc||(Gc=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(G,Ce){typeof exports=="object"&&typeof module<"u"?Ce(exports):typeof define=="function"&&define.amd?define(["exports"],Ce):(G=typeof globalThis<"u"?globalThis:G||self,Ce(G.index={}))})(this,(function(G){"use strict";var Cv=Object.defineProperty;var Ev=(G,Ce,dn)=>Ce in G?Cv(G,Ce,{enumerable:!0,configurable:!0,writable:!0,value:dn}):G[Ce]=dn;var Nt=(G,Ce,dn)=>Ev(G,typeof Ce!="symbol"?Ce+"":Ce,dn);class Ce extends Error{constructor(e,t="Error",i){super(e),this.kind=t,this.originalError=i,Object.setPrototypeOf(this,new.target.prototype)}toJson(){const e=this.originalError instanceof Error?this.originalError.message.slice(0,256):void 0;return{kind:this.kind,message:this.message,...e&&e!==this.message?{cause:e}:{}}}}function dn(n){return n instanceof Error&&typeof n.kind=="string"}class Zs extends Ce{constructor(e,t){super(`Failed to create ${t?"persistent":""} chat, mode: ${e}`,"ChatCreationFailed")}}class ea extends Ce{constructor(e){super(`Chat mode downgraded to ${e}`,"ChatModeDowngraded")}}function Kl(n){try{const e=JSON.parse(n);if(e&&typeof e=="object"&&typeof e.kind=="string")return e}catch{}}class ar extends Ce{constructor(t,i,r={}){const s=Kl(i);super(((s==null?void 0:s.description)??i).slice(0,256),(s==null?void 0:s.kind)??"HttpError");Nt(this,"status");Nt(this,"url");Nt(this,"method");this.status=t,this.url=r.url,this.method=r.method}toJson(){return{...super.toJson(),httpStatus:this.status,...this.url?{endpoint:this.url}:{},...this.method?{method:this.method}:{}}}}class ta extends Ce{constructor(t,i={}){super("Network request failed","NetworkError",t);Nt(this,"endpoint");Nt(this,"method");Nt(this,"durationMs");Nt(this,"online");Nt(this,"visibility");this.endpoint=i.url,this.method=i.method,this.durationMs=i.durationMs,this.online=i.online,this.visibility=i.visibility}toJson(){return{...super.toJson(),...this.endpoint?{endpoint:this.endpoint}:{},...this.method?{method:this.method}:{},...this.durationMs!==void 0?{durationMs:this.durationMs}:{},...this.online!==void 0?{online:this.online}:{},...this.visibility?{visibility:this.visibility}:{}}}}class oi extends Ce{constructor(e,t){super(e,"StreamError",t)}}class He extends Ce{constructor(e,t){super(e,"ValidationError"),this.key=t}}class na extends Ce{constructor(e){super(e,"WSError")}}var ia=(n=>(n.TRIAL="trial",n.BASIC="basic",n.ENTERPRISE="enterprise",n.LITE="lite",n.ADVANCED="advanced",n))(ia||{}),ra=(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))(ra||{}),sa=(n=>(n.Created="created",n.Started="started",n.Done="done",n.Error="error",n.Rejected="rejected",n.Ready="ready",n))(sa||{}),aa=(n=>(n.Unrated="Unrated",n.Positive="Positive",n.Negative="Negative",n))(aa||{}),Pe=(n=>(n.Functional="Functional",n.TextOnly="TextOnly",n.Maintenance="Maintenance",n.Playground="Playground",n.DirectPlayback="DirectPlayback",n.Off="Off",n))(Pe||{}),xe=(n=>(n.Embed="embed",n.Query="query",n.Partial="partial",n.Answer="answer",n.Transcribe="transcribe",n.Complete="done",n))(xe||{}),oa=(n=>(n.KnowledgeProcessing="knowledge/processing",n.KnowledgeIndexing="knowledge/indexing",n.KnowledgeFailed="knowledge/error",n.KnowledgeDone="knowledge/done",n))(oa||{}),ca=(n=>(n.Knowledge="knowledge",n.Document="document",n.Record="record",n))(ca||{}),da=(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))(da||{}),or=(n=>(n.Clip="clip",n.Talk="talk",n.Expressive="expressive",n))(or||{});const Wl=n=>{switch(n){case"clip":return"clip";case"talk":return"talk";case"expressive":return"expressive";default:throw new Error(`Unknown video type: ${n}`)}};var Z=(n=>(n.Start="START",n.Stop="STOP",n))(Z||{}),rt=(n=>(n.Strong="STRONG",n.Weak="WEAK",n.Unknown="UNKNOWN",n))(rt||{}),fe=(n=>(n.Idle="IDLE",n.Loading="LOADING",n.Talking="TALKING",n.ToolActive="TOOL_ACTIVE",n))(fe||{}),Q=(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.ToolCallStarted="tool-call/started",n.ToolCallDone="tool-call/done",n.ToolCallError="tool-call/error",n))(Q||{}),le=(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))(le||{}),st=(n=>(n.Legacy="legacy",n.Fluent="fluent",n))(st||{}),ci=(n=>(n.Livekit="livekit",n))(ci||{}),la=(n=>(n.Amazon="amazon",n.AzureOpenAi="azure-openai",n.Microsoft="microsoft",n.Afflorithmics="afflorithmics",n.Elevenlabs="elevenlabs",n))(la||{}),ua=(n=>(n.Public="public",n.Premium="premium",n.Private="private",n))(ua||{});const Hl=(...n)=>{},ha=n=>new Promise(e=>setTimeout(e,n)),Gt=(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)};function cr(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=Gt();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let di=Gt();function Jl(){di=Gt()}function ma(n,e){if(n.type==="bearer")return`Bearer ${n.token}~${di}`;if(n.type==="basic")return`Basic ${"token"in n?n.token:btoa(`${n.username}:${n.password}`)}~${di}`;if(n.type==="key")return`Client-Key ${n.clientKey}.${cr(e)}_${di}`;throw new Error(`Unknown auth type: ${n}`)}const Gl=45*1e3,zl="X-Playground-Chat",fa=2e3,Mn="https://api.d-id.com",$l="wss://notifications.d-id.com",Ql="79f81a83a67430be2bc0fd61042b8faa",pa=n=>n.type==="clip"&&n.presenter_id.startsWith("v2_")?"clip_v2":n.type,Yl=n=>{switch(n.type){case"expressive":return"v4";case"clip":return"v3-pro";case"talk":return"v2"}},Xl=n=>n.type==="talk"?n.source_url:n.presenter_id,dr=n=>n===or.Expressive,Zl=n=>[Pe.TextOnly,Pe.Playground,Pe.Maintenance].includes(n),ga=n=>n&&[Pe.DirectPlayback,Pe.Off].includes(n),va=/\[!\[([^\[\]]*)\]\(([^)\s]+)\)\]\(([^)\s]+)\)/g,ya=/!\[([^\[\]]*)\]\(([^)\s]+)\)/g,eu=[".mp4",".webm",".mkv",".mov",".m4v",".ogv"];function tu(n){const e=n.split("?")[0].split("#")[0].toLowerCase();return eu.some(t=>e.endsWith(t))}const ba=new RegExp("(?<!!)\\[([^\\[\\]]+)\\]\\(([^)\\s]+)\\)","g"),ka=/<a\s+href="([^"]*)"[^>]*?>([^<]*)<\/a>/gi;function Ta(n){if(n.length===0)return[];const e=[];let t;for(va.lastIndex=0;(t=va.exec(n))!==null;)e.push({index:t.index,length:t[0].length,part:{type:"video",src:t[3],alt:t[1],thumbnail:t[2]}});for(ya.lastIndex=0;(t=ya.exec(n))!==null;)if(!e.some(o=>t.index>=o.index&&t.index<o.index+o.length)){const o=t[2],a=t[1];let c;tu(o)?c={type:"video",src:o,alt:a}:(c={type:"image",src:o,alt:a},o.toLowerCase().endsWith(".gif")&&(c.mimeType="image/gif")),e.push({index:t.index,length:t[0].length,part:c})}for(ba.lastIndex=0;(t=ba.exec(n))!==null;)e.some(o=>t.index>=o.index&&t.index<o.index+o.length)||e.push({index:t.index,length:t[0].length,part:{type:"link",href:t[2],label:t[1]}});for(ka.lastIndex=0;(t=ka.exec(n))!==null;)e.some(o=>t.index>=o.index&&t.index<o.index+o.length)||e.push({index:t.index,length:t[0].length,part:{type:"link",href:t[1],label:t[2]}});if(e.length===0)return[{type:"text",text:n}];e.sort((s,o)=>s.index-o.index);const i=[];let r=0;for(const s of e)s.index>r&&i.push({type:"text",text:n.slice(r,s.index)}),i.push(s.part),r=s.index+s.length;return r<n.length&&i.push({type:"text",text:n.slice(r)}),i}let Sa="",lr=[];function On(n){return n===Sa||(Sa=n,lr=Ta(n)),lr}function nu(n,e){let t;return{promise:new Promise((r,s)=>{t=setTimeout(()=>s(new Error(e)),n)}),clear:()=>clearTimeout(t)}}async function ur(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:o}=nu(t.timeout,t.timeoutErrorMessage),a=n().finally(o);return await Promise.race([a,s])}catch(s){if(i=s,!t.shouldRetryFn(s)||r>=t.limit)throw s;await ha(t.delayMs),t.onRetry(s)}throw i}const iu=n=>ur(n,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:e=>e.status===429});function hr(n,e=Mn,t,i){const r=async(s,o)=>{const{skipErrorHandler:a,...c}=o||{},d=c.method??"GET",l=performance.now();let u;try{u=await iu(()=>fetch(e+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:ma(n,i),"Content-Type":"application/json"}}))}catch(h){if((h==null?void 0:h.name)==="AbortError")throw h;const v=new ta(h,{url:s,method:d,durationMs:Math.round(performance.now()-l),online:typeof navigator<"u"?navigator.onLine:void 0,visibility:typeof document<"u"?document.visibilityState:void 0});throw a||t==null||t(v,{url:s,options:c}),v}if(!u.ok){const h=await u.text().catch(()=>`Failed to fetch with status ${u.status}`),m=new ar(u.status,h,{url:s,method:d});throw a||t==null||t(m,{url:s,options:c,headers:u.headers}),m}return u.json()};return{get(s,o){return r(s,{...o,method:"GET"})},post(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"POST"})},delete(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"DELETE"})},patch(s,o,a){return r(s,{...a,body:JSON.stringify(o),method:"PATCH"})}}}function ru(n,e=Mn,t,i){const r=hr(n,`${e}/agents`,t,i);return{create(s,o){return r.post("/",s,o)},getAgents(s,o){return r.get(`/${s?`?tag=${s}`:""}`,o).then(a=>a??[])},getById(s,o){return r.get(`/${s}`,o)},delete(s,o){return r.delete(`/${s}`,void 0,o)},update(s,o,a){return r.patch(`/${s}`,o,a)},newChat(s,o,a){return r.post(`/${s}/chat`,o,a)},chat(s,o,a,c){return r.post(`/${s}/chat/${o}`,a,c)},createRating(s,o,a,c){return r.post(`/${s}/chat/${o}/ratings`,a,c)},updateRating(s,o,a,c,d){return r.patch(`/${s}/chat/${o}/ratings/${a}`,c,d)},deleteRating(s,o,a,c){return r.delete(`/${s}/chat/${o}/ratings/${a}`,c)},submitFeedback(s,o,a,c){return r.post(`/${s}/chat/${o}/feedback`,a,c)},getSTTToken(s,o){return r.get(`/${s}/stt-token`,o)}}}function su(n){var r,s,o,a;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:pa(i),agentVoice:{voiceId:(s=(r=n.presenter)==null?void 0:r.voice)==null?void 0:s.voice_id,provider:(a=(o=n.presenter)==null?void 0:o.voice)==null?void 0:a.type}}}function au(n){var t,i,r,s,o,a;const e=(t=n.llm)==null?void 0:t.prompt_customization;return{agentType:pa(n.presenter),presenterType:Yl(n.presenter),presenter:Xl(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:(a=(o=n.knowledge)==null?void 0:o.starter_message)==null?void 0:a.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,agentName:n.preview_name,...n.access==="public"?{from:"agent-template"}:{}}}const ou=n=>{try{return String((n==null?void 0:n.message)??n??"").slice(0,256)}catch{return"Unknown error"}},cu=n=>n.reduce((e,t)=>e+t,0),Ca=n=>cu(n)/n.length,Ea=n=>Math.min(...n),wa=n=>Math.max(...n),li=(n,e=0)=>{const t=10**e;return Math.round(n*t)/t},du=(n,e)=>{const t=[...n].sort((i,r)=>i-r);return t[Math.min(t.length-1,Math.floor(e*(t.length-1)))]},lu=n=>du(n,.5),uu=(n,e)=>{try{return n()}catch{return e}};function hu(n,e,t){var c,d,l;const{event:i,...r}=n,{template:s}=(e==null?void 0:e.llm)||{},{language:o}=((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:o}},stitch:(e==null?void 0:e.presenter.type)==="talk"?(l=e==null?void 0:e.presenter)==null?void 0:l.stitch:void 0,...t}}function Ra(n){"requestIdleCallback"in window?requestIdleCallback(n,{timeout:2e3}):setTimeout(n,0)}function ui(n){return n instanceof Ce?n.toJson():{kind:"UnknownError",message:ou(n)||"UnknownError"}}const _a="1.2.8-staging.365",mu="https://api-js.mixpanel.com/track/?verbose=1&ip=1",Pa=50,zt=[];let mr=!1;async function Ia(n){const e=await fetch(mu,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify(n)})});if(!e.ok)throw new Error(`Mixpanel responded with ${e.status}`)}function fu(n){zt.push(n),zt.splice(Pa)}function fr(){if(mr||!zt.length)return;mr=!0;const n=zt.splice(0,zt.length);Ia(n).catch(()=>{zt.unshift(...n),zt.splice(Pa)}).finally(()=>{mr=!1})}typeof window<"u"&&typeof window.addEventListener=="function"&&(window.addEventListener("online",fr),typeof document<"u"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&fr()}));function pu(n){const e=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",t={};return{token:n.token||"testKey",distinct_id:cr(n.externalId),agentId:n.agentId,additionalProperties:{id:cr(n.externalId),...n.mixpanelAdditionalProperties||{}},isEnabled:n.isEnabled??!0,getRandom:Gt,enrich(i){this.additionalProperties={...this.additionalProperties,...i}},async track(i,r,s){if(!this.isEnabled)return Promise.resolve();const{audioPath:o,...a}=r||{},c=s||Date.now(),d={event:i,properties:{...this.additionalProperties,...a,agentId:this.agentId,source:e,emittedBy:"agents-sdk",sdkVersion:_a,token:this.token,time:c,$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerHeight,"Screen Width":window.screen.width||window.innerWidth,"User Agent":navigator.userAgent}};return fr(),Ia([d]).catch(()=>fu(d)),Promise.resolve()},linkTrack(i,r,s,o){t[i]||(t[i]={events:{},resolvedDependencies:[]}),o.includes(s)||o.push(s);const a=t[i];if(a.events[s]={props:r},a.resolvedDependencies.push(s),o.every(d=>a.resolvedDependencies.includes(d))){const d=o.reduce((l,u)=>a.events[u]?{...l,...a.events[u].props}:l,{});this.track(i,d),a.resolvedDependencies=a.resolvedDependencies.filter(l=>!o.includes(l)),o.forEach(l=>{delete a.events[l]})}}}}function pr(){let n=0;return{reset:()=>n=0,update:()=>n=Date.now(),get:(e=!1)=>e?Date.now()-n:n}}const pt=pr(),gr=pr(),Ma=pr();function Oa(n){return n===Pe.Playground?{headers:{[zl]:"true"}}:{}}async function Da(n,e,t,i,r=!1,s){return!s&&!ga(i)&&(s=await e.newChat(n.id,{persist:r},Oa(i)),t.track("agent-chat",{event:"created",chatId:s.id,mode:i})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??i}}function gu(n){return n&&n.length>0?n:[]}function vu(n){return new Promise((e,t)=>{const{callbacks:i,host:r,auth:s,externalId:o}=n,{onMessage:a=null,onOpen:c=null,onClose:d=null,onError:l=null}=i||{},u=new WebSocket(`${r}?authorization=${encodeURIComponent(ma(s,o))}`);u.onmessage=a,u.onclose=d,u.onerror=h=>{console.error(h),l==null||l("Websocket failed to connect",h),t(h)},u.onopen=h=>{c==null||c(h),e(u)}})}async function yu(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 vu(n)}catch(r){if(i===e)throw r;await ha(i*500)}return t}async function bu(n,e,t,i){const r=t!=null&&t.onMessage?[t.onMessage]:[],s=await yu({auth:n,host:e,externalId:i,callbacks:{onError:o=>{var a;return(a=t.onError)==null?void 0:a.call(t,new na(o))},onMessage(o){const a=JSON.parse(o.data);r.forEach(c=>c(a.event,a))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:o=>r.push(o)}}function Aa(n){if(n.answer!==void 0)return n.answer;let e=0,t="";for(;e in n;)t+=n[e++];return t}function ku(n,e,t){if(!n.content)return;const i={id:n.id||`user-${Date.now()}`,role:n.role,content:n.content,parts:On(n.content),created_at:n.created_at||new Date().toISOString(),transcribed:!0};e.messages.push(i),t==null||t([...e.messages],"user")}function Tu(n,e,t,i,r,s,o){if(n===xe.Transcribe&&e.content){ku(e,i,r);return}if(!(n===xe.Partial||n===xe.Answer))return;const a=i.messages[i.messages.length-1];if(n===xe.Answer&&(a==null?void 0:a.role)==="user"&&o==="partial")return;const d=o==="answer";let l;if((a==null?void 0:a.role)==="assistant"&&!d)l=a;else if(!a||a.role==="user"||d)d&&s(),l={id:e.id||`assistant-${Date.now()}`,role:e.role||"assistant",content:e.content||"",parts:[],created_at:e.created_at||new Date().toISOString()},i.messages.push(l);else return;const{content:u,sequence:h}=e;if(n===xe.Partial)t[h]=u;else{const v=Aa(t);!!(u&&u.length<v.length)&&(l.interrupted=!0),t.answer=u}const m=Aa(t);(l.content!==m||n===xe.Answer)&&(l.content=m,l.parts=On(m),r==null||r([...i.messages],n))}function Su(n,e,t,i,r){const s={},o=()=>{for(const d of Object.keys(s))delete s[d]};let a=null;const c=(d,l)=>{var u,h;l==="user"&&o(),(h=(u=t.callbacks).onNewMessage)==null||h.call(u,d,l)};return{clearQueue:o,onMessage:(d,l)=>{var u,h;if("content"in l){const m=d===Q.ChatAnswer?xe.Answer:d===Q.ChatAudioTranscribed?xe.Transcribe:d;Tu(m,l,s,e,c,o,a),m===xe.Partial?a="partial":m===xe.Answer&&(a="answer",o()),m===xe.Answer&&n.track("agent-message-received",{content:l.content,messages:e.messages.length,mode:e.chatMode})}else{const m=Q,v=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],g=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],S=hu(l,i,{mode:e.chatMode});if(d=d,d===m.StreamVideoCreated&&(n.linkTrack("agent-video",S,m.StreamVideoCreated,["start"]),l.sentiment)){const k=e.messages[e.messages.length-1];if((k==null?void 0:k.role)==="assistant"){const R={...k,sentiment:l.sentiment};e.messages[e.messages.length-1]=R,c==null||c([...e.messages],a??"answer")}}if(v.includes(d)){const k=d.split("/")[1];g.includes(d)?n.track("agent-video",{...S,event:k}):n.linkTrack("agent-video",{...S,event:k},d,["done"])}g.includes(d)&&((h=(u=t.callbacks).onError)==null||h.call(u,new oi(`Stream failed with event ${d}`),{data:l})),l.event===m.StreamDone&&r()}}}}function Cu(n,e,t,i){const r=hr(n,`${e}/agents/${t}`,i);return{createStream(s,o){return r.post("/streams",s,{signal:o})},startConnection(s,o,a,c){return r.post(`/streams/${s}/sdp`,{session_id:a,answer:o},{signal:c})},addIceCandidate(s,o,a,c){return r.post(`/streams/${s}/ice`,{session_id:a,...o},{signal:c})},sendStreamRequest(s,o,a){return r.post(`/streams/${s}`,{session_id:o,...a})},close(s,o){return r.delete(`/streams/${s}`,{session_id:o})}}}const xa=(n,e)=>(t,i)=>n&&console.log(`[${e}] ${t}`,i??""),Eu=45;function wu(n){const e=n.map(c=>c.av).filter(c=>!!c&&c.audioPlayout>0&&c.videoPlayout>0);if(e.length<2)return null;const t=e[0].localTs,i=e[e.length-1].localTs-t,r=e.map(c=>c.audioPlayout-c.videoPlayout),s=r.filter(c=>c>Eu||c<-100),o=e.filter(c=>c.localTs-t>=Math.min(5e3,i/2)),a=(o.length?o:e).map(c=>c.audioPlayout-c.videoPlayout);return{sampleCount:e.length,durationMs:li(i),desyncDurationMs:li(i*(s.length/r.length)),maxOffsetMs:li(r.reduce((c,d)=>Math.abs(d)>Math.abs(c)?d:c)),residualOffsetMs:li(lu(a))}}function Ru(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 _u(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 Pu(n){var c;let e="",t=0,i=null,r=null;const s=new Map;for(const d of n.values())if(d)if(d.type==="codec"&&((c=d.mimeType)!=null&&c.startsWith("video")))s.set(d.id,d.mimeType.split("/")[1]);else if(d.type==="candidate-pair"){const l=d,u=l.currentRoundTripTime??0;u>0&&(l.nominated===!0||t===0)&&(t=u)}else d.type==="inbound-rtp"&&d.kind==="video"?i=d:d.type==="inbound-rtp"&&d.kind==="audio"&&(r=d);if(!i)return{};const o=i;o.codecId&&s.has(o.codecId)?e=s.get(o.codecId):s.size>0&&(e=s.values().next().value??"");const a={codec:e,rtt:t,timestamp:o.timestamp,bytesReceived:o.bytesReceived,packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,frameWidth:o.frameWidth,frameHeight:o.frameHeight,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.totalFreezesDuration};return r&&(a.av={audioPlayout:r.estimatedPlayoutTimestamp??0,videoPlayout:o.estimatedPlayoutTimestamp??0,localTs:o.timestamp}),a}function La(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=_u(i),s=r.reduce((c,d)=>c+(d.causes.includes("low fps")?1:0),0),o=i.filter(c=>!!c.avgJitterDelayInInterval).map(c=>c.avgJitterDelayInInterval),a=i.filter(c=>!!c.rtt).map(c=>c.rtt);return{webRTCStats:{anomalies:r,avSync:uu(()=>wu(n),null),minRtt:Ea(a),avgRtt:Ca(a),maxRtt:wa(a),aggregateReport:Ru(n[0],n[n.length-1],s),minJitterDelayInInterval:Ea(o),maxJitterDelayInInterval:wa(o),avgJitterDelayInInterval:Ca(o)},codec:n[0].codec,resolution:`${n[0].frameWidth}x${n[0].frameHeight}`}}function Na(n,e){for(const t of n.values())if((t==null?void 0:t.type)==="inbound-rtp"&&t.kind===e)return t;return null}const Dn=10;function Iu(n,e){let t=!1,i=!1,r=null,s=0,o=0,a={};async function c(){if(t){try{const d=await n();if(!d){r=setTimeout(c,Dn);return}const l=Na(d,"audio");if(!l){r=setTimeout(c,Dn);return}const u=l.totalAudioEnergy??0,h=l.totalSamplesReceived??0;if(!i){s=u,o=h,i=!0,r=setTimeout(c,Dn);return}const m=u-s,v=h-o;if(s=u,o=h,v>0&&m>0){t=!1,e(a);return}}catch{}t&&(r=setTimeout(c,Dn))}}return{arm(d={}){a=d,t=!0,i=!1,performance.now(),r!==null&&clearTimeout(r),r=setTimeout(c,Dn)},destroy(){t=!1,r!==null&&(clearTimeout(r),r=null)}}}const hi=100,Mu=Math.max(Math.ceil(400/hi),1),Ou=.25,Du=.28;function Au(){let n=0,e,t,i=0;return r=>{const s=Na(r,"video");if(!s)return{isReceiving:!1,avgJitterDelayInInterval:i};const o=s.jitterBufferDelay,a=s.jitterBufferEmittedCount;if(t&&a>t){const l=o-e,u=a-t;i=l/u}e=o,t=a;const c=s.framesDecoded,d=c-n>0;return n=c,{isReceiving:d,avgJitterDelayInInterval:i,freezeCount:s.freezeCount}}}function Ua(n,e,t,i,r){let s=null,o=[],a,c=0,d=!1,l=rt.Unknown,u=rt.Unknown,h=0,m=0;const v=Au();async function g(){const S=await n();if(!S)return;const{isReceiving:k,avgJitterDelayInInterval:R,freezeCount:P}=v(S),y=Pu(S);if(k)c=0,h=P-m,u=R<Ou?rt.Strong:R>Du&&h>1?rt.Weak:l,u!==l&&(r==null||r(u),l=u,m+=h,h=0),d||(i==null||i(Z.Start),a=o[o.length-1],o=[],d=!0),o.push(y);else if(d&&(c++,c>=Mu)){const b=La(o,hi,a);i==null||i(Z.Stop,b),e()||t(),m=P,d=!1}}return{start:()=>{s||(s=setInterval(g,hi))},stop:()=>{s&&(clearInterval(s),s=null)},getReport:()=>La(o,hi,a)}}const xu=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Fa(n){switch(n){case"connected":return le.Connected;case"checking":return le.Connecting;case"failed":return le.Fail;case"new":return le.New;case"closed":return le.Closed;case"disconnected":return le.Disconnected;case"completed":return le.Completed;default:return le.New}}const Lu=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 Nu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:i,log:r}){n===Z.Start&&e===Z.Start?(r("CALLBACK: onVideoStateChange(Start)"),t==null||t(Z.Start)):n===Z.Stop&&e===Z.Stop&&(r("CALLBACK: onVideoStateChange(Stop)"),t==null||t(Z.Stop,i))}function Uu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:r,log:s}){n===Z.Start?(s("CALLBACK: onVideoStateChange(Start)"),t==null||t(Z.Start)):n===Z.Stop&&(s("CALLBACK: onVideoStateChange(Stop)"),t==null||t(Z.Stop,r)),e===Z.Start?i==null||i(fe.Talking):e===Z.Stop&&(i==null||i(fe.Idle))}function Ba({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,streamType:r,report:s,log:o}){r===st.Legacy?Nu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,report:s,log:o}):r===st.Fluent&&Uu({statsSignal:n,dataChannelSignal:e,onVideoStateChange:t,onAgentActivityStateChange:i,report:s,log:o})}async function Fu(n,e,{debug:t=!1,callbacks:i,auth:r,baseURL:s=Mn,analytics:o},a){var Ue;const c=xa(t,"WebRTCStreamingManager"),d=Lu(c);let l=!1,u=!1,h=Z.Stop,m=Z.Stop;const{startConnection:v,sendStreamRequest:g,close:S,createStream:k,addIceCandidate:R}=Cu(r,s,n,i.onError),{id:P,offer:y,ice_servers:b,session_id:T,fluent:L,interrupt_enabled:B}=await k(e,a);(Ue=i.onStreamCreated)==null||Ue.call(i,{stream_id:P,session_id:T,agent_id:n});const I=new xu({iceServers:b}),U=I.createDataChannel("JanusDataChannel");if(!T)throw new Error("Could not create session_id");const N=L?st.Fluent:st.Legacy;o.enrich({"stream-type":N});const W=e.stream_warmup&&!L,ee=()=>l,Se=()=>{var j;l=!0,u&&(c("CALLBACK: onConnectionStateChange(Connected)"),(j=i.onConnectionStateChange)==null||j.call(i,le.Connected))},_=Ua(()=>I.getStats(),ee,Se,(j,V)=>Ba({statsSignal:m=j,dataChannelSignal:N===st.Legacy?h:void 0,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,report:V,streamType:N,log:c}),j=>{var V;return(V=i.onConnectivityStateChange)==null?void 0:V.call(i,j)});_.start(),I.onicecandidate=j=>{var V;c("peerConnection.onicecandidate",j);try{j.candidate&&j.candidate.sdpMid&&j.candidate.sdpMLineIndex!==null?R(P,{candidate:j.candidate.candidate,sdpMid:j.candidate.sdpMid,sdpMLineIndex:j.candidate.sdpMLineIndex},T,a):R(P,{candidate:null},T,a)}catch(oe){(V=i.onError)==null||V.call(i,oe,{streamId:P})}},U.onopen=()=>{u=!0,(!W||l)&&Se()};let F=null;const q=j=>{var V;F=j,(V=i.onVideoIdChange)==null||V.call(i,j)};function te(j,V){if(j===Q.StreamStarted&&typeof V=="object"&&"metadata"in V){const oe=V.metadata;q(oe.videoId)}j===Q.StreamDone&&q(null),h=j===Q.StreamStarted?Z.Start:Z.Stop,Ba({statsSignal:N===st.Legacy?m:void 0,dataChannelSignal:h,onVideoStateChange:i.onVideoStateChange,onAgentActivityStateChange:i.onAgentActivityStateChange,streamType:N,log:c})}function se(j,V){var We;const oe=typeof V=="string"?V:V==null?void 0:V.metadata;oe&&o.enrich({streamMetadata:oe}),(We=i.onStreamReady)==null||We.call(i)}const ae={[Q.StreamStarted]:te,[Q.StreamDone]:te,[Q.StreamReady]:se};U.onmessage=j=>{var We;const{subject:V,data:oe}=d(j.data);(We=ae[V])==null||We.call(ae,V,oe)},I.oniceconnectionstatechange=()=>{var V;c("peerConnection.oniceconnectionstatechange => "+I.iceConnectionState);const j=Fa(I.iceConnectionState);j!==le.Connected&&((V=i.onConnectionStateChange)==null||V.call(i,j,`webrtc:ice-${I.iceConnectionState}`))},I.ontrack=j=>{var V;c("peerConnection.ontrack",j),c("CALLBACK: onSrcObjectReady"),(V=i.onSrcObjectReady)==null||V.call(i,j.streams[0])},await I.setRemoteDescription(y),c("set remote description OK");const _e=await I.createAnswer();c("create answer OK"),await I.setLocalDescription(_e),c("set local description OK"),await v(P,_e,T,a),c("start connection OK");function Ae(j){var V,oe;if(!l||U.readyState!=="open"){c("Data channel is not ready for sending messages"),(V=i.onError)==null||V.call(i,new oi("Data channel is not ready for sending messages"),{streamId:P});return}try{U.send(j)}catch(We){c("Error sending data channel message",We),(oe=i.onError)==null||oe.call(i,We,{streamId:P})}}return{speak(j){return g(P,T,j)},async disconnect(){var j;if(P){const V=Fa(I.iceConnectionState);if(I){if(V===le.New){_.stop();return}I.close(),I.oniceconnectionstatechange=null,I.onnegotiationneeded=null,I.onicecandidate=null,I.ontrack=null}try{V===le.Connected&&await S(P,T).catch(oe=>{})}catch(oe){c("Error on close stream connection",oe)}(j=i.onAgentActivityStateChange)==null||j.call(i,fe.Idle),_.stop()}},sendDataChannelMessage:Ae,sessionId:T,streamId:P,streamType:N,interruptAvailable:B??!1,isInterruptible:!0,interrupt(j){if(!B)throw new Error("Interrupt is not enabled for this stream");if(N!==st.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!F)throw new Error("No active video to interrupt");const V={type:Q.StreamInterrupt,videoId:F,timestamp:Date.now()};Ae(JSON.stringify(V))}}}var vr=(n=>(n.V1="v1",n.V2="v2",n))(vr||{});async function Bu(n,e,t,i){const r=n.id;switch(e.version){case"v1":{const{version:s,...o}=e;return Fu(r,o,t,i)}case"v2":{const{version:s,...o}=e;switch(o.transport.provider){case ci.Livekit:const{createLiveKitStreamingManager:a}=await Promise.resolve().then(()=>sh);return a(r,o,t);default:throw new Error(`Unsupported transport provider: ${o.transport.provider}`)}}default:throw new Error(`Invalid stream version: ${e.version}`)}}const ju="cht";function Vu(){return{transport:{provider:ci.Livekit}}}function qu(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 Ku(n,e){return dr(n.presenter.type)?{version:vr.V2,...Vu()}:{version:vr.V1,...qu(e)}}function Wu(n,e,t){t.track("agent-connection-state-change",{state:n,...e&&{reason:e}})}function Hu(n,e,t,i,r){r===st.Fluent?Ju(n,e,t,i,r):Gu(n,e,t,i,r)}function Ju(n,e,t,i,r){n===Z.Start?i.track("stream-session",{event:"start","stream-type":r}):n===Z.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 ja(n,e,t,i,r){n===Z.Start?t.linkTrack("agent-video",{event:"start",...r,"stream-type":i},"start",[Q.StreamVideoCreated]):n===Z.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",[Q.StreamVideoDone])}function Gu(n,e,t,i,r){n===Z.Start?i.linkTrack("agent-video",{event:"start",latency:pt.get(!0),"stream-type":r},"start",[Q.StreamVideoCreated]):n===Z.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",[Q.StreamVideoDone])}function zu(n,e,t){const i={call_id:e.call_id,name:e.name};if(n===Q.ToolCallStarted){t.track("agent-tool-call",{...i,event:"started"});return}const r=e;t.track("agent-tool-call",{...i,event:n===Q.ToolCallDone?"done":"error",duration_ms:r.duration_ms,extra_keys:r.extra?Object.keys(r.extra).length:0})}function Va(n,e,t,i){return pt.reset(),Ma.update(),new Promise(async(r,s)=>{try{let o,a=!1;const c=Ku(n,e);t.enrich({"stream-version":c.version.toString()});let d=null;const l=n.presenter.type==="expressive";o=await Bu(n,c,{...e,analytics:t,callbacks:{...e.callbacks,onConnectionStateChange:(u,h)=>{var m,v;(v=(m=e.callbacks).onConnectionStateChange)==null||v.call(m,u),Wu(u,h,t),u===le.Connected&&(o?r(o):a=!0)},onVideoStateChange:(u,h)=>{var m,v;(v=(m=e.callbacks).onVideoStateChange)==null||v.call(m,u),Hu(u,n,h,t,o.streamType)},onAgentActivityStateChange:u=>{var h,m;(m=(h=e.callbacks).onAgentActivityStateChange)==null||m.call(h,u),u===fe.Talking?(gr.update(),d=v=>{ja(Z.Start,n,t,o.streamType,v),d=null},l||d({latency:pt.get(!0)})):(gr.reset(),d=null,ja(Z.Stop,n,t,o.streamType))},onFirstAudioDetected:u=>{d==null||d(u)},onStreamReady:()=>{const u=Ma.get(!0);t.track("agent-chat",{event:"ready",latency:u})},onToolEvent:((u,h)=>{var m,v;(v=(m=e.callbacks).onToolEvent)==null||v.call(m,u,h),zu(u,h,t)})}},i),a&&r(o)}catch(o){s(o)}})}async function $u(n,e,t,i,r){var l,u,h,m;const s=async()=>{if(dr(n.presenter.type)){const v=await Va(n,e,i),g=`${ju}_${v.sessionId}`,S=new Date().toISOString();return{chatResult:{chatMode:Pe.Functional,chat:{id:g,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,g=v.signal;let S;try{const k=Da(n,t,i,e.mode,e.persistentChat,r),R=Va(n,e,i,g).then(b=>(S=b,b)),[P,y]=await Promise.all([k,R]);return{chatResult:P,streamingManager:y}}catch(k){throw v.abort(),S&&await S.disconnect().catch(()=>{}),k}}},{chatResult:o,streamingManager:a}=await s(),{chat:c,chatMode:d}=o;return d&&e.mode!==void 0&&d!==e.mode&&(e.mode=d,(u=(l=e.callbacks).onModeChange)==null||u.call(l,d),d!==Pe.Functional)?((m=(h=e.callbacks).onError)==null||m.call(h,new ea(d)),a==null||a.disconnect(),{chat:c}):{chat:c,streamingManager:a}}async function Qu(n,e){var N,W,ee,Se;let t=!0;const i=e.mixpanelKey||Ql,r=e.wsURL||$l,s=e.baseURL||Mn,o=e.mode||Pe.Functional,a={messages:[],chatMode:o},c=pu({token:i,agentId:n,isEnabled:e.enableAnalitics,externalId:e.externalId,mixpanelAdditionalProperties:e.mixpanelAdditionalProperties}),d=Date.now();Ra(()=>{c.track("agent-sdk",{event:"init"},d)});const l=e.callbacks.onError;e.callbacks.onError=(_,F)=>{c.track("agent-error",{error:ui(_)}),l==null||l(_,F)};const u=ru(e.auth,s,e.callbacks.onError,e.externalId),h=await u.getById(n);e.debug=e.debug||((N=h==null?void 0:h.advanced_settings)==null?void 0:N.ui_debug_mode);const m=dr(h.presenter.type);c.enrich(au(h));const{onMessage:v,clearQueue:g}=Su(c,a,e,h,()=>{var _,F,q;(_=a.socketManager)==null||_.disconnect(),(q=(F=e.callbacks).onConnectionStateChange)==null||q.call(F,le.Disconnected)});a.messages=gu(e.initialMessages),(ee=(W=e.callbacks).onNewMessage)==null||ee.call(W,[...a.messages],"answer");const S=_=>{c.enrich({videoId:_})},k=({type:_})=>{var q,te,se,ae;if(!((q=a.streamingManager)!=null&&q.interruptAvailable)||!((te=a.streamingManager)!=null&&te.isInterruptible))return;const F=a.messages[a.messages.length-1];c.track("agent-video-interrupt",{type:_||"click",video_duration_to_interrupt:gr.get(!0),message_duration_to_interrupt:pt.get(!0)}),F.interrupted=!0,(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"answer"),a.streamingManager.interrupt(_)},R=new Map;function P(_){return async F=>{const q=R.get(_);if(!q)throw new Error(`No handler registered for client tool: ${_}`);try{const te=JSON.parse(F.payload);return await q(te)}catch(te){throw new Error(`Client tool "${_}" failed: ${te.message}`)}}}function y(){var _,F,q,te;for(const[se]of R)(F=(_=a.streamingManager)==null?void 0:_.unregisterRpcMethod)==null||F.call(_,se),(te=(q=a.streamingManager)==null?void 0:q.registerRpcMethod)==null||te.call(q,se,P(se))}function b(_,F){var te,se;const q=!R.has(_);R.set(_,F),q&&((se=(te=a.streamingManager)==null?void 0:te.registerRpcMethod)==null||se.call(te,_,P(_)))}function T(_){var F,q;R.delete(_),(q=(F=a.streamingManager)==null?void 0:F.unregisterRpcMethod)==null||q.call(F,_)}const L=Date.now();Ra(()=>{c.track("agent-sdk",{event:"loaded",...su(h)},L)});async function B(_){var _e,Ae,Ue,j,V,oe,We;Jl(),(Ae=(_e=e.callbacks).onConnectionStateChange)==null||Ae.call(_e,le.Connecting),pt.reset(),_&&!t&&(delete a.chat,(j=(Ue=e.callbacks).onNewMessage)==null||j.call(Ue,[...a.messages],"answer"));const F=o===Pe.DirectPlayback||m?Promise.resolve(void 0):bu(e.auth,r,{onMessage:v,onError:e.callbacks.onError},e.externalId),q=ur(()=>$u(h,{...e,mode:o,callbacks:{...e.callbacks,onVideoIdChange:S,onMessage:v}},u,c,a.chat),{limit:3,timeout:Gl,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:mt=>(mt==null?void 0:mt.message)!=="Could not connect"&&!(mt instanceof ar&&(mt.status===429||mt.kind==="InsufficientCreditsError")),delayMs:1e3}).catch(mt=>{var ye,it;throw U(Pe.Maintenance),(it=(ye=e.callbacks).onConnectionStateChange)==null||it.call(ye,le.Fail),mt}),[te,{streamingManager:se,chat:ae}]=await Promise.all([F,q]);ae&&ae.id!==((V=a.chat)==null?void 0:V.id)&&((We=(oe=e.callbacks).onNewChat)==null||We.call(oe,ae.id)),a.streamingManager=se,a.socketManager=te,a.chat=ae,y(),t=!1,c.enrich({chatId:ae==null?void 0:ae.id,streamId:se==null?void 0:se.streamId,mode:a.chatMode}),U((ae==null?void 0:ae.chat_mode)??o)}async function I(){var _,F,q,te;(_=a.socketManager)==null||_.disconnect(),await((F=a.streamingManager)==null?void 0:F.disconnect()),delete a.streamingManager,delete a.socketManager,(te=(q=e.callbacks).onConnectionStateChange)==null||te.call(q,le.Disconnected)}async function U(_){var F,q;_!==a.chatMode&&(c.track("agent-mode-change",{mode:_}),a.chatMode=_,a.chatMode!==Pe.Functional&&await I(),(q=(F=e.callbacks).onModeChange)==null||q.call(F,_))}return{agent:h,getStreamType:()=>{var _;return(_=a.streamingManager)==null?void 0:_.streamType},getIsInterruptAvailable:()=>{var _;return((_=a.streamingManager)==null?void 0:_.interruptAvailable)??!1},starterMessages:((Se=h.knowledge)==null?void 0:Se.starter_message)||[],getSTTToken:()=>u.getSTTToken(h.id),changeMode:U,enrichAnalytics:c.enrich,async connect(){await B(!0),c.track("agent-chat",{event:"connect",mode:a.chatMode})},async reconnect(){const _=a.streamingManager;let F;if(m&&(_!=null&&_.reconnect))try{await _.reconnect()}catch(q){F=ui(q).kind,await I(),await B(!1)}else await I(),await B(!1);c.track("agent-chat",{event:"reconnect",mode:a.chatMode,success:!0,...F&&{fallbackReason:F}})},async disconnect(){await I(),c.track("agent-chat",{event:"disconnect",mode:a.chatMode})},publishMicrophoneStream(_){var F;return(F=a.streamingManager)!=null&&F.publishMicrophoneStream?a.streamingManager.publishMicrophoneStream(_):Promise.reject(new Error("publishMicrophoneStream is not available for this streaming manager"))},unpublishMicrophoneStream(){var _;return(_=a.streamingManager)!=null&&_.unpublishMicrophoneStream?a.streamingManager.unpublishMicrophoneStream():Promise.resolve()},replaceMicrophoneTrack(_){var F;return(F=a.streamingManager)!=null&&F.replaceMicrophoneTrack?a.streamingManager.replaceMicrophoneTrack(_):Promise.reject(new Error("replaceMicrophoneTrack is not available for this streaming manager"))},publishCameraStream(_){var F;return(F=a.streamingManager)!=null&&F.publishCameraStream?a.streamingManager.publishCameraStream(_):Promise.reject(new Error("publishCameraStream is not available for this streaming manager"))},unpublishCameraStream(){var _;return(_=a.streamingManager)!=null&&_.unpublishCameraStream?a.streamingManager.unpublishCameraStream():Promise.resolve()},async chat(_){var se,ae,_e,Ae,Ue;const F=()=>{if(ga(o))throw new He(`${o} is enabled, chat is disabled`);if(_.length>=fa)throw new He(`Message cannot be more than ${fa} characters`);if(_.length===0)throw new He("Message cannot be empty");if(a.chatMode===Pe.Maintenance)throw new He("Chat is in maintenance mode");if(![Pe.TextOnly,Pe.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new He("Streaming manager is not initialized");if(!a.chat)throw new He("Chat is not initialized")}},q=async()=>{var j,V;if(!a.chat){const oe=await Da(h,u,c,a.chatMode,e.persistentChat);if(!oe.chat)throw new Zs(a.chatMode,!!e.persistentChat);a.chat=oe.chat,(V=(j=e.callbacks).onNewChat)==null||V.call(j,a.chat.id)}return a.chat.id},te=async(j,V)=>{const oe=a.chatMode===Pe.Playground;return ur(m&&!oe?async()=>{var ye,it;return await((it=(ye=a.streamingManager)==null?void 0:ye.sendTextMessage)==null?void 0:it.call(ye,_)),Promise.resolve({})}:async()=>{var ye,it;return u.chat(h.id,V,{chatMode:a.chatMode,streamId:(ye=a.streamingManager)==null?void 0:ye.streamId,sessionId:(it=a.streamingManager)==null?void 0:it.sessionId,messages:j.map(({matches:zs,...Pn})=>Pn)},{...Oa(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:ye=>{var Pn,ir,rr,sr;const it=(Pn=ye==null?void 0:ye.message)==null?void 0:Pn.includes("missing or invalid session_id");return!((ir=ye==null?void 0:ye.message)==null?void 0:ir.includes("Stream Error"))&&!it?((sr=(rr=e.callbacks).onError)==null||sr.call(rr,ye),!1):!0},onRetry:async()=>{await I(),await B(!1)}})};try{g(),F(),a.messages.push({id:Gt(),role:"user",content:_,parts:On(_),created_at:new Date(pt.update()).toISOString()}),(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"user");const j=await q(),V=await te([...a.messages],j);return V.result&&a.messages.push({id:Gt(),role:"assistant",content:V.result,parts:On(V.result),created_at:new Date().toISOString(),context:V.context,matches:V.matches}),c.track("agent-message-send",{event:"success",messages:a.messages.length+1}),V.result&&((Ae=(_e=e.callbacks).onNewMessage)==null||Ae.call(_e,[...a.messages],"answer"),c.track("agent-message-received",{latency:pt.get(!0),messages:a.messages.length})),V}catch(j){throw((Ue=a.messages[a.messages.length-1])==null?void 0:Ue.role)==="assistant"&&a.messages.pop(),c.track("agent-message-send",{event:"error",messages:a.messages.length,error:ui(j)}),j}},rate(_,F,q){var ae,_e,Ae,Ue;const te=a.messages.find(j=>j.id===_);if(a.chat){if(!te)throw new He("Message not found")}else throw new He("Chat is not initialized");const se=((ae=te.matches)==null?void 0:ae.map(j=>[j.document_id,j.id]))??[];return c.track("agent-rate",{event:q?"update":"create",thumb:F===1?"up":"down",knowledge_id:((_e=h.knowledge)==null?void 0:_e.id)??"",matches:se,score:F}),q?u.updateRating(h.id,a.chat.id,q,{knowledge_id:((Ae=h.knowledge)==null?void 0:Ae.id)??"",message_id:_,matches:se,score:F}):u.createRating(h.id,a.chat.id,{knowledge_id:((Ue=h.knowledge)==null?void 0:Ue.id)??"",message_id:_,matches:se,score:F})},deleteRate(_){if(!a.chat)throw new He("Chat is not initialized");return c.track("agent-rate-delete",{type:"text"}),u.deleteRating(h.id,a.chat.id,_)},submitFeedback(_,F){if(!a.chat)throw new He("Chat is not initialized");return c.track("agent-feedback",{rating:_,hasAnswer:!!F}),u.submitFeedback(h.id,a.chat.id,{rating:_,answer:F})},async speak(_){var se,ae,_e;function F(){if(typeof _=="string"){if(!h.presenter.voice)throw new He("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:_,ssml:!1}}if(_.type==="text"&&!_.provider){if(!h.presenter.voice)throw new He("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:_.input,ssml:_.ssml}}return _}const q=F();if(c.track("agent-speak",q),pt.update(),a.messages&&q.type==="text"&&(a.messages.push({id:Gt(),role:"assistant",content:q.input,parts:On(q.input),created_at:new Date().toISOString()}),(ae=(se=e.callbacks).onNewMessage)==null||ae.call(se,[...a.messages],"answer")),Zl(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new He("Please connect to the agent first");return a.streamingManager.speak({script:q,metadata:{chat_id:(_e=a.chat)==null?void 0:_e.id,agent_id:h.id}})},interrupt:k,registerClientTool:b,unregisterClientTool:T}}function Yu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone??""}catch{return""}}function Xu(){if(typeof navigator>"u")return"";const n=navigator.userAgent??"",e=(navigator.platform??"").toLowerCase();let t="Unknown";/android/i.test(n)?t="Android":/iphone|ipad|ipod/i.test(n)?t="iOS":e.includes("win")?t="Windows":e.includes("mac")?t="Mac OS X":e.includes("linux")&&(t="Linux");const i=t==="Android"||t==="iOS"||/Mobi/i.test(n);return`${t}, ${i?"Mobile":"Desktop"}`}function Zu(){const n={},e=Yu();e&&(n.timezone=e);const t=Xu();return t&&(n.device=t),n}function eh(n,e,t,i){const r=hr(n,`${e}/v2/agents/${t}`,i);return{async createStream(s){return r.post("/sessions",s)}}}const th={[Q.ChatAnswer]:xe.Answer,[Q.ChatPartial]:xe.Partial},qa=2e4;async function nh(){try{return await Promise.resolve().then(()=>gv)}catch{throw new Error("LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client")}}const ih={excellent:rt.Strong,good:rt.Strong,poor:rt.Weak,lost:rt.Unknown,unknown:rt.Unknown},ln=(n="Stream Error")=>new oi(n);function yr(n,e,t){var i,r;throw e("Failed to connect to LiveKit room:",n),(i=t.onConnectionStateChange)==null||i.call(t,le.Fail,"internal:init-error"),(r=t.onError)==null||r.call(t,n,{sessionId:""}),n}async function rh(n,e,t){var Fl;const i=xa(t.debug||!1,"LiveKitStreamingManager"),{Room:r,RoomEvent:s,ConnectionState:o,Track:a}=await nh(),{callbacks:c,auth:d,baseURL:l,analytics:u}=t;let h=null,m=!1;const v=st.Fluent;let g=null;const S={isPublishing:!1,publication:null},k={isPublishing:!1,publication:null};let R=null,P=null,y=null,b=!1;h=new r({adaptiveStream:!1,dynacast:!0});let T=null,L=fe.Idle,B=!0;const I=new Set,U=eh(d,l||Mn,n,c.onError);let N,W,ee,Se=!0;try{const C=await U.createStream({transport:e.transport,chat_persist:e.chat_persist??!0,verbose:t.verbose??!1}),{id:O,session_token:H,session_url:J,interrupt_enabled:de}=C;(Fl=c.onStreamCreated)==null||Fl.call(c,{session_id:O,stream_id:O,agent_id:n}),N=O,W=H,ee=J,Se=de??!0,await h.prepareConnection(ee,W)}catch(C){yr(C,i,c)}if(!ee||!W||!N)return Promise.reject(new Error("Failed to initialize LiveKit stream"));h.on(s.ConnectionStateChanged,q).on(s.ConnectionQualityChanged,te).on(s.ParticipantConnected,se).on(s.ParticipantDisconnected,ae).on(s.TrackSubscribed,Ue).on(s.TrackUnsubscribed,j).on(s.DataReceived,Pn).on(s.MediaDevicesError,ir).on(s.TranscriptionReceived,_).on(s.EncryptionError,rr).on(s.TrackSubscriptionFailed,sr);function _(C,O){O!=null&&O.isLocal&&(pt.update(),L===fe.Talking&&(L=fe.Idle))}async function F(){const C=Zu();if(!(!h||Object.keys(C).length===0))try{await h.localParticipant.setAttributes(C)}catch(O){i("Failed to set user context attributes",O)}}try{await h.connect(ee,W),i("LiveKit room joined successfully"),F(),T=setTimeout(()=>{var O;i(`Track subscription timeout - no track subscribed within ${qa/1e3} seconds after connect`),T=null;const C=ln("Track subscription timeout");u.track("connectivity-error",{error:ui(C),sessionId:N}),(O=c.onError)==null||O.call(c,C,{sessionId:N}),Xs("internal:track-subscription-timeout")},qa)}catch(C){yr(C,i,c)}u.enrich({"stream-type":v});function q(C){var O,H,J,de;switch(i("Connection state changed:",C),C){case o.Connecting:i("CALLBACK: onConnectionStateChange(Connecting)"),(O=c.onConnectionStateChange)==null||O.call(c,le.Connecting,"livekit:connecting");break;case o.Connected:i("LiveKit room connected successfully"),m=!0;break;case o.Disconnected:i("LiveKit room disconnected"),m=!1,b=!1,S.publication=null,k.publication=null,(H=c.onConnectionStateChange)==null||H.call(c,le.Disconnected,"livekit:disconnected");break;case o.Reconnecting:i("LiveKit room reconnecting..."),(J=c.onConnectionStateChange)==null||J.call(c,le.Connecting,"livekit:reconnecting");break;case o.SignalReconnecting:i("LiveKit room signal reconnecting..."),(de=c.onConnectionStateChange)==null||de.call(c,le.Connecting,"livekit:signal-reconnecting");break}}function te(C,O){var H;i("Connection quality:",C),O!=null&&O.isLocal&&((H=c.onConnectivityStateChange)==null||H.call(c,ih[C]))}function se(C){i("Participant connected:",C.identity)}function ae(C){i("Participant disconnected:",C.identity),Xs("livekit:participant-disconnected")}function _e(){var C;y!==Z.Start&&(i("CALLBACK: onVideoStateChange(Start)"),y=Z.Start,(C=c.onVideoStateChange)==null||C.call(c,Z.Start))}function Ae(C){var O;y!==Z.Stop&&(i("CALLBACK: onVideoStateChange(Stop)"),y=Z.Stop,(O=c.onVideoStateChange)==null||O.call(c,Z.Stop,C))}function Ue(C,O,H){var de,he,Ie;i(`Track subscribed: ${C.kind} from ${H.identity}`);const J=C.mediaStreamTrack;if(!J){i(`No mediaStreamTrack available for ${C.kind}`);return}g?(g.addTrack(J),i(`Added ${C.kind} track to shared MediaStream`)):(g=new MediaStream([J]),i(`Created shared MediaStream with ${C.kind} track`)),C.kind==="audio"&&(P=Iu(()=>C.getRTCStatsReport(),({sttLatency:ie,serviceLatency:ft})=>{var Bl,jl,Vl;const si=pt.get(!0);let ai=0;if(ie){const ql=((jl=(Bl=R==null?void 0:R.getReport())==null?void 0:Bl.webRTCStats)==null?void 0:jl.avgRtt)??0;ai=ql>0?Math.round(ql*1e3):0}const In=si>0?si+(ie??0)+ai:void 0,Lt=In!==void 0&&ft!==void 0?In-ft:void 0;(Vl=c.onFirstAudioDetected)==null||Vl.call(c,{latency:In,networkLatency:Lt})})),C.kind==="video"&&((de=c.onStreamReady)==null||de.call(c),i("CALLBACK: onSrcObjectReady"),(he=c.onSrcObjectReady)==null||he.call(c,g),b||(b=!0,i("CALLBACK: onConnectionStateChange(Connected)"),(Ie=c.onConnectionStateChange)==null||Ie.call(c,le.Connected,"livekit:track-subscribed")),R=Ua(()=>C.getRTCStatsReport(),()=>m,Hl,(ie,ft)=>{i(`Video state change: ${ie}`),ie===Z.Start?(T&&(clearTimeout(T),T=null,i("Track subscription timeout cleared")),_e()):ie===Z.Stop&&Ae(ft)}),R.start())}function j(C,O,H){i(`Track unsubscribed: ${C.kind} from ${H.identity}`),C.kind==="audio"&&(P==null||P.destroy(),P=null),C.kind==="video"&&(Ae(R==null?void 0:R.getReport()),R==null||R.stop(),R=null)}function V(C,O){var J;const H=th[C];H&&((J=c.onMessage)==null||J.call(c,H,{event:H,...O}))}function oe(C,O){var H,J,de,he,Ie;if(C===Q.ToolCallStarted){const ie=O;B=ie.interruptible!==!1,(H=c.onInterruptibleChange)==null||H.call(c,B),I.add(ie.call_id),L=fe.ToolActive,(J=c.onAgentActivityStateChange)==null||J.call(c,fe.ToolActive),(de=c.onToolEvent)==null||de.call(c,Q.ToolCallStarted,ie);return}if(C===Q.ToolCallDone){const ie=O;We(ie.call_id),(he=c.onToolEvent)==null||he.call(c,Q.ToolCallDone,ie);return}if(C===Q.ToolCallError){const ie=O;We(ie.call_id),(Ie=c.onToolEvent)==null||Ie.call(c,Q.ToolCallError,ie)}}function We(C){var O;I.delete(C),I.size===0&&L===fe.ToolActive&&(L=fe.Idle,(O=c.onAgentActivityStateChange)==null||O.call(c,fe.Idle))}function mt(C,O){var H,J,de,he,Ie,ie;if(B=((H=O.metadata)==null?void 0:H.interruptible)!==!1,(J=c.onInterruptibleChange)==null||J.call(c,B),C===Q.StreamVideoCreated){L=fe.Talking,(de=c.onAgentActivityStateChange)==null||de.call(c,fe.Talking),P==null||P.arm({sttLatency:(he=O==null?void 0:O.stt)==null?void 0:he.latency,serviceLatency:O==null?void 0:O.serviceLatency});return}if(I.size>0){L!==fe.ToolActive&&(L=fe.ToolActive,(Ie=c.onAgentActivityStateChange)==null||Ie.call(c,fe.ToolActive));return}B&&(L=fe.Idle,(ie=c.onAgentActivityStateChange)==null||ie.call(c,fe.Idle))}function ye(C,O){var he,Ie,ie,ft;const H=((Ie=(he=R==null?void 0:R.getReport())==null?void 0:he.webRTCStats)==null?void 0:Ie.avgRtt)??0,J=H>0?Math.round(H/2*1e3):0,de={...O,downstreamNetworkLatency:J};t.debug&&((ie=O==null?void 0:O.metadata)!=null&&ie.sentiment)&&(de.sentiment={id:O.metadata.sentiment.id,name:O.metadata.sentiment.sentiment}),(ft=c.onMessage)==null||ft.call(c,C,de),mt(C,O)}function it(C,O){var H;(H=c.onMessage)==null||H.call(c,xe.Transcribe,{event:xe.Transcribe,...O}),queueMicrotask(()=>{var J;(J=c.onAgentActivityStateChange)==null||J.call(c,fe.Loading)})}const zs={[Q.ChatAnswer]:V,[Q.ChatPartial]:V,[Q.ToolCallStarted]:oe,[Q.ToolCallDone]:oe,[Q.ToolCallError]:oe,[Q.StreamVideoCreated]:ye,[Q.StreamVideoDone]:ye,[Q.StreamVideoError]:ye,[Q.StreamVideoRejected]:ye,[Q.ChatAudioTranscribed]:it};function Pn(C,O,H,J){const de=new TextDecoder().decode(C);try{const he=JSON.parse(de),Ie=J||he.subject;if(i("Data received:",{subject:Ie,data:he}),!Ie)return;const ie=zs[Ie];ie==null||ie(Ie,he)}catch(he){i("Failed to parse data channel message:",he)}}function ir(C){var O;i("Media devices error:",C),(O=c.onError)==null||O.call(c,ln(),{sessionId:N})}function rr(C){var O;i("Encryption error:",C),(O=c.onError)==null||O.call(c,ln(),{sessionId:N})}function sr(C,O,H){i("Track subscription failed:",{trackSid:C,participant:O,reason:H})}function vv(C,O,H){for(const[J,de]of H)if(de.source===O&&de.track){const he=de.track.mediaStreamTrack;if(he===C||(he==null?void 0:he.id)===C.id)return de}return null}async function Ll(C,O,H,J,de,he){var si,ai,In;if(!m||!h)throw i(`Room is not connected, cannot publish ${J} stream`),new Error("Room is not connected");if(C.isPublishing){i(`${J} publish already in progress, skipping`);return}const Ie=H(O);if(Ie.length===0)throw new Error(`No ${J} track found in the provided MediaStream`);const ie=Ie[0],ft=vv(ie,J,de());if(ft){i(`${J} track is already published, skipping`,{trackId:ie.id,publishedTrackId:(ai=(si=ft.track)==null?void 0:si.mediaStreamTrack)==null?void 0:ai.id}),C.publication=ft;return}if((In=C.publication)!=null&&In.track){const Lt=C.publication.track.mediaStreamTrack;Lt!==ie&&(Lt==null?void 0:Lt.id)!==ie.id&&(i(`Unpublishing existing ${J} track before publishing new one`),await he())}i(`Publishing ${J} track from provided MediaStream`,{trackId:ie.id}),C.isPublishing=!0;try{C.publication=await h.localParticipant.publishTrack(ie,{source:J}),i(`${J} track published successfully`,{trackSid:C.publication.trackSid})}catch(Lt){throw i(`Failed to publish ${J} track:`,Lt),Lt}finally{C.isPublishing=!1}}async function Nl(C,O){if(!(!C.publication||!C.publication.track))try{h&&(await h.localParticipant.unpublishTrack(C.publication.track,!1),i(`${O} track unpublished`))}catch(H){i(`Error unpublishing ${O} track:`,H)}finally{C.publication=null}}async function yv(C){return Ll(S,C,O=>O.getAudioTracks(),a.Source.Microphone,()=>h.localParticipant.audioTrackPublications,$s)}async function $s(){return Nl(S,"Microphone")}async function bv(C){if(!m||!h)throw i("Cannot replace microphone track: room is not connected"),new Error("Room is not connected");if(C.kind!=="audio")throw i("Cannot replace microphone track: not an audio track",{kind:C.kind}),new Error("Microphone track must be an audio track");if(S.isPublishing)throw i("Cannot replace microphone track: publish in progress"),new Error("Microphone publish in progress");const O=S.publication;if(!O||!O.track)throw i("Cannot replace microphone track: no publication to replace"),new Error("No microphone publication to replace");try{S.isPublishing=!0,await O.track.replaceTrack(C),i("Microphone track replaced",{trackId:C.id,trackSid:O.trackSid})}finally{S.isPublishing=!1}}async function kv(C){return Ll(k,C,O=>O.getVideoTracks(),a.Source.Camera,()=>h.localParticipant.videoTrackPublications,Qs)}async function Qs(){return Nl(k,"Camera")}function Tv(){g&&(g.getTracks().forEach(C=>C.stop()),g=null)}async function Ys(C,O){var H,J;if(!m||!h){i("Room is not connected for sending messages"),(H=c.onError)==null||H.call(c,ln(),{sessionId:N});return}try{await h.localParticipant.sendText(C,{topic:O}),i("Message sent successfully:",C)}catch(de){i("Failed to send message:",de),(J=c.onError)==null||J.call(c,ln(),{sessionId:N})}}async function Ul(C){var O;try{const J=JSON.parse(C).topic;return Ys("",J)}catch(H){i("Failed to send data channel message:",H),(O=c.onError)==null||O.call(c,ln(),{sessionId:N})}}function Sv(C){return Ys(C,"lk.chat")}async function Xs(C){var O,H;T&&(clearTimeout(T),T=null),P==null||P.destroy(),P=null,h&&((O=c.onConnectionStateChange)==null||O.call(c,le.Disconnecting,C),await Promise.all([$s(),Qs()]),await h.disconnect()),Tv(),m=!1,b=!1,I.clear(),(H=c.onAgentActivityStateChange)==null||H.call(c,fe.Idle),L=fe.Idle}return{speak(C){const O=typeof C=="string"?C:JSON.stringify(C);return Ys(O,"did.speak")},disconnect:()=>Xs("user:disconnect"),async reconnect(){var C,O;if((h==null?void 0:h.state)===o.Connected){i("Room is already connected");return}if(!h||!ee||!W)throw i("Cannot reconnect: missing room, URL or token"),new Error("Cannot reconnect: session not available");i("Reconnecting to LiveKit room, state:",h.state),b=!1,(C=c.onConnectionStateChange)==null||C.call(c,le.Connecting,"user:reconnect");try{if(await h.connect(ee,W),i("Room reconnected"),m=!0,h.remoteParticipants.size===0){if(i("Waiting for agent to join..."),!await new Promise(J=>{const de=setTimeout(()=>{h==null||h.off(s.ParticipantConnected,he),J(!1)},5e3),he=()=>{clearTimeout(de),h==null||h.off(s.ParticipantConnected,he),J(!0)};h==null||h.on(s.ParticipantConnected,he)}))throw i("Agent did not join within timeout"),await h.disconnect(),new Error("Agent did not rejoin the room");i("Agent joined, reconnection successful")}}catch(H){throw i("Failed to reconnect:",H),(O=c.onConnectionStateChange)==null||O.call(c,le.Fail,"user:reconnect-failed"),H}},sendDataChannelMessage:Ul,sendTextMessage:Sv,publishMicrophoneStream:yv,unpublishMicrophoneStream:$s,replaceMicrophoneTrack:bv,publishCameraStream:kv,unpublishCameraStream:Qs,interrupt(C){C!=="text"&&Ul(JSON.stringify({topic:"did.interrupt"}))},registerRpcMethod(C,O){h==null||h.registerRpcMethod(C,O)},unregisterRpcMethod(C){h==null||h.unregisterRpcMethod(C)},sessionId:N,streamId:N,streamType:v,interruptAvailable:Se,isInterruptible:B}}const sh=Object.freeze(Object.defineProperty({__proto__:null,createLiveKitStreamingManager:rh,handleInitError:yr},Symbol.toStringTag,{value:"Module"}));function ah(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 oh=Object.defineProperty,ch=(n,e,t)=>e in n?oh(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,Ka=(n,e,t)=>ch(n,typeof e!="symbol"?e+"":e,t);class Le{constructor(){Ka(this,"_locking"),Ka(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 be(n,e){if(!n)throw new Error(e)}const dh=34028234663852886e22,lh=-34028234663852886e22,uh=4294967295,hh=2147483647,mh=-2147483648;function mi(n){if(typeof n!="number")throw new Error("invalid int 32: "+typeof n);if(!Number.isInteger(n)||n>hh||n<mh)throw new Error("invalid int 32: "+n)}function br(n){if(typeof n!="number")throw new Error("invalid uint 32: "+typeof n);if(!Number.isInteger(n)||n>uh||n<0)throw new Error("invalid uint 32: "+n)}function Wa(n){if(typeof n!="number")throw new Error("invalid float 32: "+typeof n);if(Number.isFinite(n)&&(n>dh||n<lh))throw new Error("invalid float 32: "+n)}const Ha=Symbol("@bufbuild/protobuf/enum-type");function fh(n){const e=n[Ha];return be(e,"missing enum type on enum object"),e}function Ja(n,e,t,i){n[Ha]=Ga(e,t.map(r=>({no:r.no,name:r.name,localName:n[r.no]})))}function Ga(n,e,t){const i=Object.create(null),r=Object.create(null),s=[];for(const o of e){const a=za(o);s.push(a),i[o.name]=a,r[o.no]=a}return{typeName:n,values:s,findName(o){return i[o]},findNumber(o){return r[o]}}}function ph(n,e,t){const i={};for(const r of e){const s=za(r);i[s.localName]=s.no,i[s.no]=s.localName}return Ja(i,n,e),i}function za(n){return"localName"in n?n:Object.assign(Object.assign({},n),{localName:n.name})}class kr{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 gh(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),o={[s]:function(a){n.util.initFields(this),n.util.initPartial(a,this)}}[s];return Object.setPrototypeOf(o.prototype,new kr),Object.assign(o,{runtime:n,typeName:e,fields:n.util.newFieldList(t),fromBinary(a,c){return new o().fromBinary(a,c)},fromJson(a,c){return new o().fromJson(a,c)},fromJsonString(a,c){return new o().fromJsonString(a,c)},equals(a,c){return n.util.equals(o,a,c)}}),o}function vh(){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)==0)return this.assertBounds(),[n,e]}let t=this.buf[this.pos++];if(n|=(t&15)<<28,e=(t&112)>>4,(t&128)==0)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)==0)return this.assertBounds(),[n,e]}throw new Error("invalid varint")}function Tr(n,e,t){for(let s=0;s<28;s=s+7){const o=n>>>s,a=!(!(o>>>7)&&e==0),c=(a?o|128:o)&255;if(t.push(c),!a)return}const i=n>>>28&15|(e&7)<<4,r=e>>3!=0;if(t.push((r?i|128:i)&255),!!r){for(let s=3;s<31;s=s+7){const o=e>>>s,a=!!(o>>>7),c=(a?o|128:o)&255;if(t.push(c),!a)return}t.push(e>>>31&1)}}const fi=4294967296;function $a(n){const e=n[0]==="-";e&&(n=n.slice(1));const t=1e6;let i=0,r=0;function s(o,a){const c=Number(n.slice(o,a));r*=t,i=i*t+c,i>=fi&&(r=r+(i/fi|0),i=i%fi)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?Ya(i,r):Sr(i,r)}function yh(n,e){let t=Sr(n,e);const i=t.hi&2147483648;i&&(t=Ya(t.lo,t.hi));const r=Qa(t.lo,t.hi);return i?"-"+r:r}function Qa(n,e){if({lo:n,hi:e}=bh(n,e),e<=2097151)return String(fi*e+n);const t=n&16777215,i=(n>>>24|e<<8)&16777215,r=e>>16&65535;let s=t+i*6777216+r*6710656,o=i+r*8147497,a=r*2;const c=1e7;return s>=c&&(o+=Math.floor(s/c),s%=c),o>=c&&(a+=Math.floor(o/c),o%=c),a.toString()+Xa(o)+Xa(s)}function bh(n,e){return{lo:n>>>0,hi:e>>>0}}function Sr(n,e){return{lo:n|0,hi:e|0}}function Ya(n,e){return e=~e,n?n=~n+1:e+=1,Sr(n,e)}const Xa=n=>{const e=String(n);return"0000000".slice(e.length)+e};function Za(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 kh(){let n=this.buf[this.pos++],e=n&127;if((n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<7,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<14,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<21,(n&128)==0)return this.assertBounds(),e;n=this.buf[this.pos++],e|=(n&15)<<28;for(let t=5;(n&128)!==0&&t<10;t++)n=this.buf[this.pos++];if((n&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Th(){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"),o=BigInt("0"),a=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>a||d<o)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=>be(/^-?[0-9]+$/.test(r),"int64 invalid: ".concat(r)),i=r=>be(/^[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),$a(r)},uEnc(r){return typeof r!="string"&&(r=r.toString()),i(r),$a(r)},dec(r,s){return yh(r,s)},uDec(r,s){return Qa(r,s)}}}const pe=Th();var w;(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"})(w||(w={}));var Ut;(function(n){n[n.BIGINT=0]="BIGINT",n[n.STRING=1]="STRING"})(Ut||(Ut={}));function Ft(n,e,t){if(e===t)return!0;if(n==w.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 w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return e==t}return!1}function un(n,e){switch(n){case w.BOOL:return!1;case w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return e==0?pe.zero:"0";case w.DOUBLE:case w.FLOAT:return 0;case w.BYTES:return new Uint8Array(0);case w.STRING:return"";default:return 0}}function eo(n,e){switch(n){case w.BOOL:return e===!1;case w.STRING:return e==="";case w.BYTES:return e instanceof Uint8Array&&!e.byteLength;default:return e==0}}var Ee;(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"})(Ee||(Ee={}));class Sh{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(br(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return mi(e),Za(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){Wa(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){br(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){mi(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return mi(e),e=(e<<1^e>>31)>>>0,Za(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=pe.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=pe.uEnc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=pe.enc(e);return Tr(t.lo,t.hi,this.buf),this}sint64(e){let t=pe.enc(e),i=t.hi>>31,r=t.lo<<1^i,s=(t.hi<<1|t.lo>>>31)^i;return Tr(r,s,this.buf),this}uint64(e){let t=pe.uEnc(e);return Tr(t.lo,t.hi,this.buf),this}}class Ch{constructor(e,t){this.varint64=vh,this.uint32=kh,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 Ee.Varint:for(;this.buf[this.pos++]&128;);break;case Ee.Bit64:this.pos+=4;case Ee.Bit32:this.pos+=4;break;case Ee.LengthDelimited:let r=this.uint32();this.pos+=r;break;case Ee.StartGroup:for(;;){const[s,o]=this.tag();if(o===Ee.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(o,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 pe.dec(...this.varint64())}uint64(){return pe.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),i=-(e&1);return e=(e>>>1|(t&1)<<31)^i,t=t>>>1^i,pe.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 pe.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return pe.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 Eh(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 to(n){const e=n.field.localName,t=Object.create(null);return t[e]=wh(n),[t,()=>t[e]]}function wh(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 un(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 Rh(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 wt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),pi=[];for(let n=0;n<wt.length;n++)pi[wt[n].charCodeAt(0)]=n;pi[45]=wt.indexOf("+"),pi[95]=wt.indexOf("/");const no={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,o=0;for(let a=0;a<n.length;a++){if(s=pi[n.charCodeAt(a)],s===void 0)switch(n[a]){case"=":r=0;case`
|
|
2
|
+
`:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string.")}switch(r){case 0:o=s,r=1;break;case 1:t[i++]=o<<2|(s&48)>>4,o=s,r=2;break;case 2:t[i++]=(o&15)<<4|(s&60)>>2,o=s,r=3;break;case 3:t[i++]=(o&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+=wt[i>>2],r=(i&3)<<4,t=1;break;case 1:e+=wt[r|i>>4],r=(i&15)<<2,t=2;break;case 2:e+=wt[r|i>>6],e+=wt[i&63],t=0;break}return t&&(e+=wt[r],e+="=",t==1&&(e+="=")),e}};function _h(n,e,t){ro(e,n);const i=e.runtime.bin.makeReadOptions(t),r=Rh(n.getType().runtime.bin.listUnknownFields(n),e.field),[s,o]=to(e);for(const a of r)e.runtime.bin.readField(s,i.readerFactory(a.data),e.field,a.wireType,i);return o()}function Ph(n,e,t,i){ro(e,n);const r=e.runtime.bin.makeReadOptions(i),s=e.runtime.bin.makeWriteOptions(i);if(io(n,e)){const d=n.getType().runtime.bin.listUnknownFields(n).filter(l=>l.no!=e.field.no);n.getType().runtime.bin.discardUnknownFields(n);for(const l of d)n.getType().runtime.bin.onUnknownField(n,l.no,l.wireType,l.data)}const o=s.writerFactory();let a=e.field;!a.opt&&!a.repeated&&(a.kind=="enum"||a.kind=="scalar")&&(a=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(a,t,o,s);const c=r.readerFactory(o.finish());for(;c.pos<c.len;){const[d,l]=c.tag(),u=c.skip(l,d);n.getType().runtime.bin.onUnknownField(n,d,l,u)}}function io(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 ro(n,e){be(n.extendee.typeName==e.getType().typeName,"extension ".concat(n.typeName," can only be applied to message ").concat(n.extendee.typeName))}function so(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:!eo(n.T,e[t]);case"message":return e[t]!==void 0;case"map":return Object.keys(e[t]).length>0}}function ao(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?un(n.T,n.L):void 0;break;case"message":e[t]=void 0;break}}function Rt(n,e){if(n===null||typeof n!="object"||!Object.getOwnPropertyNames(kr.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 oo(n,e){return Rt(e)||!n.fieldWrapper?e:n.fieldWrapper.wrapField(e)}w.DOUBLE,w.FLOAT,w.INT64,w.UINT64,w.INT32,w.UINT32,w.BOOL,w.STRING,w.BYTES;const co={ignoreUnknownFields:!1},lo={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function Ih(n){return n?Object.assign(Object.assign({},co),n):co}function Mh(n){return n?Object.assign(Object.assign({},lo),n):lo}const gi=Symbol(),vi=Symbol();function Oh(){return{makeReadOptions:Ih,makeWriteOptions:Mh,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(gt(e)));i=i??new n;const r=new Map,s=t.typeRegistry;for(const[o,a]of Object.entries(e)){const c=n.fields.findJsonName(o);if(c){if(c.oneof){if(a===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(o,'"'));r.set(c.oneof,o)}uo(i,a,c,t,n)}else{let d=!1;if(s!=null&&s.findExtension&&o.startsWith("[")&&o.endsWith("]")){const l=s.findExtension(o.substring(1,o.length-1));if(l&&l.extendee.typeName==n.typeName){d=!0;const[u,h]=to(l);uo(u,a,l.field,t,l),Ph(i,l,h(),t)}}if(!d&&!t.ignoreUnknownFields)throw new Error("cannot decode message ".concat(n.typeName,' from JSON: key "').concat(o,'" is unknown'))}}return i},writeMessage(n,e){const t=n.getType(),i={};let r;try{for(r of t.fields.byNumber()){if(!so(r,n)){if(r.req)throw"required field not set";if(!e.emitDefaultValues||!Ah(r))continue}const o=r.oneof?n[r.oneof.localName].value:n[r.localName],a=ho(r,o,e);a!==void 0&&(i[e.useProtoFieldName?r.name:r.jsonName]=a)}const s=e.typeRegistry;if(s!=null&&s.findExtensionFor)for(const o of t.runtime.bin.listUnknownFields(n)){const a=s.findExtensionFor(t.typeName,o.no);if(a&&io(n,a)){const c=_h(n,a,e),d=ho(a.field,c,e);d!==void 0&&(i[a.field.jsonName]=d)}}}catch(s){const o=r?"cannot encode field ".concat(t.typeName,".").concat(r.name," to JSON"):"cannot encode message ".concat(t.typeName," to JSON"),a=s instanceof Error?s.message:String(s);throw new Error(o+(a.length>0?": ".concat(a):""))}return i},readScalar(n,e,t){return An(n,e,t??Ut.BIGINT,!0)},writeScalar(n,e,t){if(e!==void 0&&(t||eo(n,e)))return yi(n,e)},debug:gt}}function gt(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 uo(n,e,t,i,r){let s=t.localName;if(t.repeated){if(be(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(gt(e)));const o=n[s];for(const a of e){if(a===null)throw new Error("cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(a)));switch(t.kind){case"message":o.push(t.T.fromJson(a,i));break;case"enum":const c=Cr(t.T,a,i.ignoreUnknownFields,!0);c!==vi&&o.push(c);break;case"scalar":try{o.push(An(t.T,a,t.L,!0))}catch(d){let l="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(a));throw d instanceof Error&&d.message.length>0&&(l+=": ".concat(d.message)),new Error(l)}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(gt(e)));const o=n[s];for(const[a,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=Dh(t.K,a)}catch(l){let u="cannot decode map key for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw l instanceof Error&&l.message.length>0&&(u+=": ".concat(l.message)),new Error(u)}switch(t.V.kind){case"message":o[d]=t.V.T.fromJson(c,i);break;case"enum":const l=Cr(t.V.T,c,i.ignoreUnknownFields,!0);l!==vi&&(o[d]=l);break;case"scalar":try{o[d]=An(t.V.T,c,Ut.BIGINT,!0)}catch(u){let h="cannot decode map value for field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw u instanceof Error&&u.message.length>0&&(h+=": ".concat(u.message)),new Error(h)}break}}}else switch(t.oneof&&(n=n[t.oneof.localName]={case:s},s="value"),t.kind){case"message":const o=t.T;if(e===null&&o.typeName!="google.protobuf.Value")return;let a=n[s];Rt(a)?a.fromJson(e,i):(n[s]=a=o.fromJson(e,i),o.fieldWrapper&&!t.oneof&&(n[s]=o.fieldWrapper.unwrapField(a)));break;case"enum":const c=Cr(t.T,e,i.ignoreUnknownFields,!1);switch(c){case gi:ao(t,n);break;case vi:break;default:n[s]=c;break}break;case"scalar":try{const d=An(t.T,e,t.L,!1);switch(d){case gi:ao(t,n);break;default:n[s]=d;break}}catch(d){let l="cannot decode field ".concat(r.typeName,".").concat(t.name," from JSON: ").concat(gt(e));throw d instanceof Error&&d.message.length>0&&(l+=": ".concat(d.message)),new Error(l)}break}}function Dh(n,e){if(n===w.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return An(n,e,Ut.BIGINT,!0).toString()}function An(n,e,t,i){if(e===null)return i?un(n,t):gi;switch(n){case w.DOUBLE:case w.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==w.FLOAT&&Wa(r),r;case w.INT32:case w.FIXED32:case w.SFIXED32:case w.SINT32:case w.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==w.UINT32||n==w.FIXED32?br(s):mi(s),s;case w.INT64:case w.SFIXED64:case w.SINT64:if(typeof e!="number"&&typeof e!="string")break;const o=pe.parse(e);return t?o.toString():o;case w.FIXED64:case w.UINT64:if(typeof e!="number"&&typeof e!="string")break;const a=pe.uParse(e);return t?a.toString():a;case w.BOOL:if(typeof e!="boolean")break;return e;case w.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case w.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return no.dec(e)}throw new Error}function Cr(n,e,t,i){if(e===null)return n.typeName=="google.protobuf.NullValue"?0:i?n.values[0].no:gi;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 vi;break}throw new Error("cannot decode enum ".concat(n.typeName," from JSON: ").concat(gt(e)))}function Ah(n){return n.repeated||n.kind=="map"?!0:!(n.oneof||n.kind=="message"||n.opt||n.req)}function ho(n,e,t){if(n.kind=="map"){be(typeof e=="object"&&e!=null);const i={},r=Object.entries(e);switch(n.V.kind){case"scalar":for(const[o,a]of r)i[o.toString()]=yi(n.V.T,a);break;case"message":for(const[o,a]of r)i[o.toString()]=a.toJson(t);break;case"enum":const s=n.V.T;for(const[o,a]of r)i[o.toString()]=Er(s,a,t.enumAsInteger);break}return t.emitDefaultValues||r.length>0?i:void 0}if(n.repeated){be(Array.isArray(e));const i=[];switch(n.kind){case"scalar":for(let r=0;r<e.length;r++)i.push(yi(n.T,e[r]));break;case"enum":for(let r=0;r<e.length;r++)i.push(Er(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 yi(n.T,e);case"enum":return Er(n.T,e,t.enumAsInteger);case"message":return oo(n.T,e).toJson(t)}}function Er(n,e,t){var i;if(be(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 yi(n,e){switch(n){case w.INT32:case w.SFIXED32:case w.SINT32:case w.FIXED32:case w.UINT32:return be(typeof e=="number"),e;case w.FLOAT:case w.DOUBLE:return be(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case w.STRING:return be(typeof e=="string"),e;case w.BOOL:return be(typeof e=="boolean"),e;case w.UINT64:case w.FIXED64:case w.INT64:case w.SFIXED64:case w.SINT64:return be(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case w.BYTES:return be(e instanceof Uint8Array),no.enc(e)}}const hn=Symbol("@bufbuild/protobuf/unknown-fields"),mo={readUnknownFields:!0,readerFactory:n=>new Ch(n)},fo={writeUnknownFields:!0,writerFactory:()=>new Sh};function xh(n){return n?Object.assign(Object.assign({},mo),n):mo}function Lh(n){return n?Object.assign(Object.assign({},fo),n):fo}function Nh(){return{makeReadOptions:xh,makeWriteOptions:Lh,listUnknownFields(n){var e;return(e=n[hn])!==null&&e!==void 0?e:[]},discardUnknownFields(n){delete n[hn]},writeUnknownFields(n,e){const i=n[hn];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[hn])||(r[hn]=[]),r[hn].push({no:e,wireType:t,data:i})},readMessage(n,e,t,i,r){const s=n.getType(),o=r?e.len:e.pos+t;let a,c;for(;e.pos<o&&([a,c]=e.tag(),!(r===!0&&c==Ee.EndGroup));){const d=s.fields.find(a);if(!d){const l=e.skip(c,a);i.readUnknownFields&&this.onUnknownField(n,a,c,l);continue}po(n,e,d,c,i)}if(r&&(c!=Ee.EndGroup||a!==t))throw new Error("invalid end group tag")},readField:po,writeMessage(n,e,t){const i=n.getType();for(const r of i.fields.byNumber()){if(!so(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];go(r,s,e,t)}return t.writeUnknownFields&&this.writeUnknownFields(n,e),e},writeField(n,e,t,i){e!==void 0&&go(n,e,t,i)}}}function po(n,e,t,i,r){let{repeated:s,localName:o}=t;switch(t.oneof&&(n=n[t.oneof.localName],n.case!=o&&delete n.value,n.case=o,o="value"),t.kind){case"scalar":case"enum":const a=t.kind=="enum"?w.INT32:t.T;let c=ki;if(t.kind=="scalar"&&t.L>0&&(c=Fh),s){let h=n[o];if(i==Ee.LengthDelimited&&a!=w.STRING&&a!=w.BYTES){let v=e.uint32()+e.pos;for(;e.pos<v;)h.push(c(e,a))}else h.push(c(e,a))}else n[o]=c(e,a);break;case"message":const d=t.T;s?n[o].push(bi(e,new d,r,t)):Rt(n[o])?bi(e,n[o],r,t):(n[o]=bi(e,new d,r,t),d.fieldWrapper&&!t.oneof&&!t.repeated&&(n[o]=d.fieldWrapper.unwrapField(n[o])));break;case"map":let[l,u]=Uh(t,e,r);n[o][l]=u;break}}function bi(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 Uh(n,e,t){const i=e.uint32(),r=e.pos+i;let s,o;for(;e.pos<r;){const[a]=e.tag();switch(a){case 1:s=ki(e,n.K);break;case 2:switch(n.V.kind){case"scalar":o=ki(e,n.V.T);break;case"enum":o=e.int32();break;case"message":o=bi(e,new n.V.T,t,void 0);break}break}}if(s===void 0&&(s=un(n.K,Ut.BIGINT)),typeof s!="string"&&typeof s!="number"&&(s=s.toString()),o===void 0)switch(n.V.kind){case"scalar":o=un(n.V.T,Ut.BIGINT);break;case"enum":o=n.V.T.values[0].no;break;case"message":o=new n.V.T;break}return[s,o]}function Fh(n,e){const t=ki(n,e);return typeof t=="bigint"?t.toString():t}function ki(n,e){switch(e){case w.STRING:return n.string();case w.BOOL:return n.bool();case w.DOUBLE:return n.double();case w.FLOAT:return n.float();case w.INT32:return n.int32();case w.INT64:return n.int64();case w.UINT64:return n.uint64();case w.FIXED64:return n.fixed64();case w.BYTES:return n.bytes();case w.FIXED32:return n.fixed32();case w.SFIXED32:return n.sfixed32();case w.SFIXED64:return n.sfixed64();case w.SINT64:return n.sint64();case w.UINT32:return n.uint32();case w.SINT32:return n.sint32()}}function go(n,e,t,i){be(e!==void 0);const r=n.repeated;switch(n.kind){case"scalar":case"enum":let s=n.kind=="enum"?w.INT32:n.T;if(r)if(be(Array.isArray(e)),n.packed)jh(t,s,n.no,e);else for(const o of e)xn(t,s,n.no,o);else xn(t,s,n.no,e);break;case"message":if(r){be(Array.isArray(e));for(const o of e)vo(t,i,n,o)}else vo(t,i,n,e);break;case"map":be(typeof e=="object"&&e!=null);for(const[o,a]of Object.entries(e))Bh(t,i,n,o,a);break}}function Bh(n,e,t,i,r){n.tag(t.no,Ee.LengthDelimited),n.fork();let s=i;switch(t.K){case w.INT32:case w.FIXED32:case w.UINT32:case w.SFIXED32:case w.SINT32:s=Number.parseInt(i);break;case w.BOOL:be(i=="true"||i=="false"),s=i=="true";break}switch(xn(n,t.K,1,s),t.V.kind){case"scalar":xn(n,t.V.T,2,r);break;case"enum":xn(n,w.INT32,2,r);break;case"message":be(r!==void 0),n.tag(2,Ee.LengthDelimited).bytes(r.toBinary(e));break}n.join()}function vo(n,e,t,i){const r=oo(t.T,i);t.delimited?n.tag(t.no,Ee.StartGroup).raw(r.toBinary(e)).tag(t.no,Ee.EndGroup):n.tag(t.no,Ee.LengthDelimited).bytes(r.toBinary(e))}function xn(n,e,t,i){be(i!==void 0);let[r,s]=yo(e);n.tag(t,r)[s](i)}function jh(n,e,t,i){if(!i.length)return;n.tag(t,Ee.LengthDelimited).fork();let[,r]=yo(e);for(let s=0;s<i.length;s++)n[r](i[s]);n.join()}function yo(n){let e=Ee.Varint;switch(n){case w.BYTES:case w.STRING:e=Ee.LengthDelimited;break;case w.DOUBLE:case w.FIXED64:case w.SFIXED64:e=Ee.Bit64;break;case w.FIXED32:case w.SFIXED32:case w.FLOAT:e=Ee.Bit32;break}const t=w[n].toLowerCase();return[e,t]}function Vh(){return{setEnumType:Ja,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,o=n;if(o[r]!=null)switch(i.kind){case"oneof":const a=o[r].case;if(a===void 0)continue;const c=i.findField(a);let d=o[r].value;c&&c.kind=="message"&&!Rt(d,c.T)?d=new c.T(d):c&&c.kind==="scalar"&&c.T===w.BYTES&&(d=Ln(d)),s[r]={case:a,value:d};break;case"scalar":case"enum":let l=o[r];i.T===w.BYTES&&(l=i.repeated?l.map(Ln):Ln(l)),s[r]=l;break;case"map":switch(i.V.kind){case"scalar":case"enum":if(i.V.T===w.BYTES)for(const[m,v]of Object.entries(o[r]))s[r][m]=Ln(v);else Object.assign(s[r],o[r]);break;case"message":const h=i.V.T;for(const m of Object.keys(o[r])){let v=o[r][m];h.fieldWrapper||(v=new h(v)),s[r][m]=v}break}break;case"message":const u=i.T;if(i.repeated)s[r]=o[r].map(h=>Rt(h,u)?h:new u(h));else{const h=o[r];u.fieldWrapper?u.typeName==="google.protobuf.BytesValue"?s[r]=Ln(h):s[r]=h:s[r]=Rt(h,u)?h:new u(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((o,a)=>i.T.equals(o,s[a]));case"scalar":return r.every((o,a)=>Ft(i.T,o,s[a]));case"enum":return r.every((o,a)=>Ft(w.INT32,o,s[a]))}throw new Error("repeated cannot contain ".concat(i.kind))}switch(i.kind){case"message":let o=r,a=s;return i.T.fieldWrapper&&(o!==void 0&&!Rt(o)&&(o=i.T.fieldWrapper.wrapField(o)),a!==void 0&&!Rt(a)&&(a=i.T.fieldWrapper.wrapField(a))),i.T.equals(o,a);case"enum":return Ft(w.INT32,r,s);case"scalar":return Ft(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 Ft(w.INT32,r.value,s.value);case"scalar":return Ft(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 l=i.V.T;return d.every(h=>l.equals(r[h],s[h]));case"enum":return d.every(h=>Ft(w.INT32,r[h],s[h]));case"scalar":const u=i.V.T;return d.every(h=>Ft(u,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 o;if(r.repeated)o=s.map(Ti);else if(r.kind=="map"){o=i[r.localName];for(const[a,c]of Object.entries(s))o[a]=Ti(c)}else r.kind=="oneof"?o=r.findField(s.case)?{case:s.case,value:Ti(s.value)}:{case:void 0}:o=Ti(s);i[r.localName]=o}for(const r of e.runtime.bin.listUnknownFields(n))e.runtime.bin.onUnknownField(i,r.no,r.wireType,r.data);return t}}}function Ti(n){if(n===void 0)return n;if(Rt(n))return n.clone();if(n instanceof Uint8Array){const e=new Uint8Array(n.byteLength);return e.set(n),e}return n}function Ln(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function qh(n,e,t){return{syntax:n,json:Oh(),bin:Nh(),util:Object.assign(Object.assign({},Vh()),{newFieldList:e,initFields:t}),makeMessageType(i,r,s){return gh(this,i,r,s)},makeEnum:ph,makeEnumType:Ga,getEnumType:fh,makeExtension(i,r,s){return Eh(this,i,r,s)}}}class Kh{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 bo(n,e){const t=ko(n);return e?t:$h(zh(t))}function Wh(n){return bo(n,!1)}const Hh=ko;function ko(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 Jh=new Set(["constructor","toString","toJSON","valueOf"]),Gh=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),To=n=>"".concat(n,"$"),zh=n=>Gh.has(n)?To(n):n,$h=n=>Jh.has(n)?To(n):n;class Qh{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=Wh(e)}addField(e){be(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 Yh(n,e){var t,i,r,s,o,a;const c=[];let d;for(const l of typeof n=="function"?n():n){const u=l;if(u.localName=bo(l.name,l.oneof!==void 0),u.jsonName=(t=l.jsonName)!==null&&t!==void 0?t:Hh(l.name),u.repeated=(i=l.repeated)!==null&&i!==void 0?i:!1,l.kind=="scalar"&&(u.L=(r=l.L)!==null&&r!==void 0?r:Ut.BIGINT),u.delimited=(s=l.delimited)!==null&&s!==void 0?s:!1,u.req=(o=l.req)!==null&&o!==void 0?o:!1,u.opt=(a=l.opt)!==null&&a!==void 0?a:!1,l.packed===void 0&&(u.packed=l.kind=="enum"||l.kind=="scalar"&&l.T!=w.BYTES&&l.T!=w.STRING),l.oneof!==void 0){const h=typeof l.oneof=="string"?l.oneof:l.oneof.name;(!d||d.name!=h)&&(d=new Qh(h)),u.oneof=d,d.addField(u)}c.push(u)}return c}const p=qh("proto3",n=>new Kh(n,e=>Yh(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]=un(e.T,e.L);break}}});class Je extends kr{constructor(e){super(),this.seconds=pe.zero,this.nanos=0,p.util.initPartial(e,this)}fromJson(e,t){if(typeof e!="string")throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(p.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=pe.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 Je.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new Je({seconds:pe.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return new Je().fromBinary(e,t)}static fromJson(e,t){return new Je().fromJson(e,t)}static fromJsonString(e,t){return new Je().fromJsonString(e,t)}static equals(e,t){return p.util.equals(Je,e,t)}}Je.runtime=p,Je.typeName="google.protobuf.Timestamp",Je.fields=p.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const Xh=p.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Je},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:Zh,repeated:!0},{no:5,name:"events",kind:"message",T:tm,repeated:!0}]),Zh=p.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:em,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),em=p.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Je},{no:3,name:"value",kind:"scalar",T:2}]),tm=p.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:Je},{no:7,name:"normalized_end_timestamp",kind:"message",T:Je,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),nm=p.makeEnum("livekit.AudioCodec",[{no:0,name:"DEFAULT_AC"},{no:1,name:"OPUS"},{no:2,name:"AAC"},{no:3,name:"AC_MP3"}]),im=p.makeEnum("livekit.VideoCodec",[{no:0,name:"DEFAULT_VC"},{no:1,name:"H264_BASELINE"},{no:2,name:"H264_MAIN"},{no:3,name:"H264_HIGH"},{no:4,name:"VP8"}]),rm=p.makeEnum("livekit.ImageCodec",[{no:0,name:"IC_DEFAULT"},{no:1,name:"IC_JPEG"}]),So=p.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),Ye=p.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),Re=p.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"}]),wr=p.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),Nn=p.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),Un=p.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Xe=p.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"}]),$t=p.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"}]),Co=p.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),Me=p.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"}]),Si=p.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:Ci,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:Uo}]),Ci=p.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),sm=p.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:p.getEnumType(Re),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}]),Qt=p.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:p.getEnumType(mn)},{no:4,name:"tracks",kind:"message",T:pn,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:sm},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:p.getEnumType(fn)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:p.getEnumType(Xe)},{no:18,name:"kind_details",kind:"enum",T:p.getEnumType(am),repeated:!0},{no:19,name:"data_tracks",kind:"message",T:Rr,repeated:!0}]),mn=p.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),fn=p.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"},{no:7,name:"CONNECTOR"},{no:8,name:"BRIDGE"}]),am=p.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"},{no:2,name:"CONNECTOR_WHATSAPP"},{no:3,name:"CONNECTOR_TWILIO"},{no:4,name:"BRIDGE_RTSP"}]),ke=p.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),om=p.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:Bt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:p.getEnumType(Eo)},{no:6,name:"sdp_cid",kind:"scalar",T:9}]),pn=p.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:p.getEnumType(Ye)},{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:p.getEnumType(Re)},{no:10,name:"layers",kind:"message",T:Bt,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:om,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:p.getEnumType(ke)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:Uo},{no:19,name:"audio_features",kind:"enum",T:p.getEnumType(Me),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:p.getEnumType(So)}]),Rr=p.makeMessageType("livekit.DataTrackInfo",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"sid",kind:"scalar",T:9},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"encryption",kind:"enum",T:p.getEnumType(ke)}]),cm=p.makeMessageType("livekit.DataTrackSubscriptionOptions",()=>[{no:1,name:"target_fps",kind:"scalar",T:13,opt:!0}]),Bt=p.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:p.getEnumType(wr)},{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},{no:8,name:"repair_ssrc",kind:"scalar",T:13}]),Eo=p.makeEnum("livekit.VideoLayer.Mode",[{no:0,name:"MODE_UNUSED"},{no:1,name:"ONE_SPATIAL_LAYER_PER_STREAM"},{no:2,name:"MULTIPLE_SPATIAL_LAYERS_PER_STREAM"},{no:3,name:"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR"}]),je=p.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:p.getEnumType($)},{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:_r,oneof:"value"},{no:3,name:"speaker",kind:"message",T:dm,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:Po,oneof:"value"},{no:7,name:"transcription",kind:"message",T:lm,oneof:"value"},{no:8,name:"metrics",kind:"message",T:Xh,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:Ei,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:Pr,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:Ir,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:Mr,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:wi,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:Ri,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:_i,oneof:"value"},{no:18,name:"encrypted_packet",kind:"message",T:wo,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),$=p.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),wo=p.makeMessageType("livekit.EncryptedPacket",()=>[{no:1,name:"encryption_type",kind:"enum",T:p.getEnumType(ke)},{no:2,name:"iv",kind:"scalar",T:12},{no:3,name:"key_index",kind:"scalar",T:13},{no:4,name:"encrypted_value",kind:"scalar",T:12}]),Ro=p.makeMessageType("livekit.EncryptedPacketPayload",()=>[{no:1,name:"user",kind:"message",T:_r,oneof:"value"},{no:3,name:"chat_message",kind:"message",T:Ei,oneof:"value"},{no:4,name:"rpc_request",kind:"message",T:Pr,oneof:"value"},{no:5,name:"rpc_ack",kind:"message",T:Ir,oneof:"value"},{no:6,name:"rpc_response",kind:"message",T:Mr,oneof:"value"},{no:7,name:"stream_header",kind:"message",T:wi,oneof:"value"},{no:8,name:"stream_chunk",kind:"message",T:Ri,oneof:"value"},{no:9,name:"stream_trailer",kind:"message",T:_i,oneof:"value"}]),dm=p.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:_o,repeated:!0}]),_o=p.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}]),_r=p.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}]),Po=p.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),lm=p.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:um,repeated:!0}]),um=p.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}]),Ei=p.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}]),Pr=p.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}]),Ir=p.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),Mr=p.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:Io,oneof:"value"}]),Io=p.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}]),Mo=p.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),Oo=p.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:p.getEnumType(Do)},{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}]),Do=p.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),Ao=p.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:p.getEnumType(xo)},{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}]),xo=p.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"}]),Lo=p.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:No},{no:2,name:"screen",kind:"message",T:No},{no:3,name:"resume_connection",kind:"enum",T:p.getEnumType(Un)},{no:4,name:"disabled_codecs",kind:"message",T:hm},{no:5,name:"force_relay",kind:"enum",T:p.getEnumType(Un)}]),No=p.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:p.getEnumType(Un)}]),hm=p.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:Ci,repeated:!0},{no:2,name:"publish",kind:"message",T:Ci,repeated:!0}]),Uo=p.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Or=p.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),Fo=p.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:p.getEnumType(Or)},{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"}),Bo=p.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),wi=p.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:p.getEnumType(ke)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:Fo,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:Bo,oneof:"content_header"}],{localName:"DataStream_Header"}),Ri=p.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"}),_i=p.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"}),mm=p.makeMessageType("livekit.FilterParams",()=>[{no:1,name:"include_events",kind:"scalar",T:9,repeated:!0},{no:2,name:"exclude_events",kind:"scalar",T:9,repeated:!0}]),fm=p.makeMessageType("livekit.WebhookConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"signing_key",kind:"scalar",T:9},{no:3,name:"filter_params",kind:"message",T:mm}]),pm=p.makeMessageType("livekit.SubscribedAudioCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"enabled",kind:"scalar",T:8}]),Dr=p.makeMessageType("livekit.RoomAgentDispatch",()=>[{no:1,name:"agent_name",kind:"scalar",T:9},{no:2,name:"metadata",kind:"scalar",T:9}]),at=p.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),Ar=p.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),gm=p.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),vm=p.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:jt,oneof:"message"},{no:2,name:"answer",kind:"message",T:jt,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Pi,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Fn,oneof:"message"},{no:5,name:"mute",kind:"message",T:Ii,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Mi,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:Wo,oneof:"message"},{no:8,name:"leave",kind:"message",T:Oi,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:Jo,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:$o,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:Br,oneof:"message"},{no:13,name:"simulate",kind:"message",T:vt,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:Ur,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:Xo,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:Nr,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:Ho,oneof:"message"},{no:19,name:"publish_data_track_request",kind:"message",T:Vo,oneof:"message"},{no:20,name:"unpublish_data_track_request",kind:"message",T:Ko,oneof:"message"},{no:21,name:"update_data_subscription",kind:"message",T:wm,oneof:"message"}]),jo=p.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:Tm,oneof:"message"},{no:2,name:"answer",kind:"message",T:jt,oneof:"message"},{no:3,name:"offer",kind:"message",T:jt,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Pi,oneof:"message"},{no:5,name:"update",kind:"message",T:Em,oneof:"message"},{no:6,name:"track_published",kind:"message",T:Lr,oneof:"message"},{no:8,name:"leave",kind:"message",T:Oi,oneof:"message"},{no:9,name:"mute",kind:"message",T:Ii,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:_m,oneof:"message"},{no:11,name:"room_update",kind:"message",T:Pm,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:Mm,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:Dm,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:xm,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Nm,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:Cm,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:Sm,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:Fm,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:Vm,oneof:"message"},{no:22,name:"request_response",kind:"message",T:qm,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:Km,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:Um,oneof:"message"},{no:25,name:"media_sections_requirement",kind:"message",T:Gm,oneof:"message"},{no:26,name:"subscribed_audio_codec_update",kind:"message",T:Lm,oneof:"message"},{no:27,name:"publish_data_track_response",kind:"message",T:qo,oneof:"message"},{no:28,name:"unpublish_data_track_response",kind:"message",T:ym,oneof:"message"},{no:29,name:"data_track_subscriber_handles",kind:"message",T:bm,oneof:"message"}]),xr=p.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:Bt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:p.getEnumType(Eo)}]),Fn=p.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:p.getEnumType(Ye)},{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:p.getEnumType(Re)},{no:9,name:"layers",kind:"message",T:Bt,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:xr,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:p.getEnumType(ke)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:p.getEnumType(So)},{no:17,name:"audio_features",kind:"enum",T:p.getEnumType(Me),repeated:!0}]),Vo=p.makeMessageType("livekit.PublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"encryption",kind:"enum",T:p.getEnumType(ke)}]),qo=p.makeMessageType("livekit.PublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:Rr}]),Ko=p.makeMessageType("livekit.UnpublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13}]),ym=p.makeMessageType("livekit.UnpublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:Rr}]),bm=p.makeMessageType("livekit.DataTrackSubscriberHandles",()=>[{no:1,name:"sub_handles",kind:"map",K:13,V:{kind:"message",T:km}}]),km=p.makeMessageType("livekit.DataTrackSubscriberHandles.PublishedDataTrack",()=>[{no:1,name:"publisher_identity",kind:"scalar",T:9},{no:2,name:"publisher_sid",kind:"scalar",T:9},{no:3,name:"track_sid",kind:"scalar",T:9}],{localName:"DataTrackSubscriberHandles_PublishedDataTrack"}),Pi=p.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:p.getEnumType(at)},{no:3,name:"final",kind:"scalar",T:8}]),Ii=p.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),Tm=p.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Si},{no:2,name:"participant",kind:"message",T:Qt},{no:3,name:"other_participants",kind:"message",T:Qt,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:Go,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:Lo},{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:Oo},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:Ci,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),Sm=p.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:Go,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:Lo},{no:3,name:"server_info",kind:"message",T:Oo},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),Lr=p.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:pn}]),Cm=p.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),jt=p.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},{no:4,name:"mid_to_track_id",kind:"map",K:9,V:{kind:"scalar",T:9}}]),Em=p.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:Qt,repeated:!0}]),Mi=p.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:Mo,repeated:!0}]),wm=p.makeMessageType("livekit.UpdateDataSubscription",()=>[{no:1,name:"updates",kind:"message",T:Rm,repeated:!0}]),Rm=p.makeMessageType("livekit.UpdateDataSubscription.Update",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"options",kind:"message",T:cm}],{localName:"UpdateDataSubscription_Update"}),Wo=p.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:p.getEnumType(wr)},{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}]),Nr=p.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:p.getEnumType(Me),repeated:!0}]),Ho=p.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}]),Oi=p.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:p.getEnumType(Xe)},{no:3,name:"action",kind:"enum",T:p.getEnumType(gn)},{no:4,name:"regions",kind:"message",T:Bm}]),gn=p.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),Jo=p.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:Bt,repeated:!0}]),Ur=p.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}]),Go=p.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}]),_m=p.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:_o,repeated:!0}]),Pm=p.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Si}]),Im=p.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:p.getEnumType(Nn)},{no:3,name:"score",kind:"scalar",T:2}]),Mm=p.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:Im,repeated:!0}]),Om=p.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:p.getEnumType(Ar)}]),Dm=p.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:Om,repeated:!0}]),Fr=p.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:p.getEnumType(wr)},{no:2,name:"enabled",kind:"scalar",T:8}]),Am=p.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:Fr,repeated:!0}]),xm=p.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:Fr,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:Am,repeated:!0}]),Lm=p.makeMessageType("livekit.SubscribedAudioCodecUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_audio_codecs",kind:"message",T:pm,repeated:!0}]),zo=p.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}]),$o=p.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:zo,repeated:!0}]),Nm=p.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}]),Um=p.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Si},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:Qt},{no:4,name:"other_participants",kind:"message",T:Qt,repeated:!0}]),Br=p.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:jt},{no:2,name:"subscription",kind:"message",T:Mi},{no:3,name:"publish_tracks",kind:"message",T:Lr,repeated:!0},{no:4,name:"data_channels",kind:"message",T:Yo,repeated:!0},{no:5,name:"offer",kind:"message",T:jt},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:Qo,repeated:!0},{no:8,name:"publish_data_tracks",kind:"message",T:qo,repeated:!0}]),Qo=p.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),Yo=p.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:p.getEnumType(at)}]),vt=p.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:p.getEnumType(gm),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"}]),Xo=p.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),Fm=p.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),Bm=p.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:jm,repeated:!0}]),jm=p.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}]),Vm=p.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:p.getEnumType(Co)}]),qm=p.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:p.getEnumType(jr)},{no:3,name:"message",kind:"scalar",T:9},{no:4,name:"trickle",kind:"message",T:Pi,oneof:"request"},{no:5,name:"add_track",kind:"message",T:Fn,oneof:"request"},{no:6,name:"mute",kind:"message",T:Ii,oneof:"request"},{no:7,name:"update_metadata",kind:"message",T:Ur,oneof:"request"},{no:8,name:"update_audio_track",kind:"message",T:Nr,oneof:"request"},{no:9,name:"update_video_track",kind:"message",T:Ho,oneof:"request"},{no:10,name:"publish_data_track",kind:"message",T:Vo,oneof:"request"},{no:11,name:"unpublish_data_track",kind:"message",T:Ko,oneof:"request"}]),jr=p.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"},{no:4,name:"QUEUED"},{no:5,name:"UNSUPPORTED_TYPE"},{no:6,name:"UNCLASSIFIED_ERROR"},{no:7,name:"INVALID_HANDLE"},{no:8,name:"INVALID_NAME"},{no:9,name:"DUPLICATE_HANDLE"},{no:10,name:"DUPLICATE_NAME"}]),Km=p.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),Zo=p.makeMessageType("livekit.ConnectionSettings",()=>[{no:1,name:"auto_subscribe",kind:"scalar",T:8},{no:2,name:"adaptive_stream",kind:"scalar",T:8},{no:3,name:"subscriber_allow_pause",kind:"scalar",T:8,opt:!0},{no:4,name:"disable_ice_lite",kind:"scalar",T:8},{no:5,name:"auto_subscribe_data_track",kind:"scalar",T:8,opt:!0}]),Wm=p.makeMessageType("livekit.JoinRequest",()=>[{no:1,name:"client_info",kind:"message",T:Ao},{no:2,name:"connection_settings",kind:"message",T:Zo},{no:3,name:"metadata",kind:"scalar",T:9},{no:4,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:5,name:"add_track_requests",kind:"message",T:Fn,repeated:!0},{no:6,name:"publisher_offer",kind:"message",T:jt},{no:7,name:"reconnect",kind:"scalar",T:8},{no:8,name:"reconnect_reason",kind:"enum",T:p.getEnumType($t)},{no:9,name:"participant_sid",kind:"scalar",T:9},{no:10,name:"sync_state",kind:"message",T:Br}]),Hm=p.makeMessageType("livekit.WrappedJoinRequest",()=>[{no:1,name:"compression",kind:"enum",T:p.getEnumType(Jm)},{no:2,name:"join_request",kind:"scalar",T:12}]),Jm=p.makeEnum("livekit.WrappedJoinRequest.Compression",[{no:0,name:"NONE"},{no:1,name:"GZIP"}]),Gm=p.makeMessageType("livekit.MediaSectionsRequirement",()=>[{no:1,name:"num_audios",kind:"scalar",T:13},{no:2,name:"num_videos",kind:"scalar",T:13}]),zm=p.makeEnum("livekit.EncodedFileType",[{no:0,name:"DEFAULT_FILETYPE"},{no:1,name:"MP4"},{no:2,name:"OGG"},{no:3,name:"MP3"}]),$m=p.makeEnum("livekit.SegmentedFileProtocol",[{no:0,name:"DEFAULT_SEGMENTED_FILE_PROTOCOL"},{no:1,name:"HLS_PROTOCOL"}]),Qm=p.makeEnum("livekit.SegmentedFileSuffix",[{no:0,name:"INDEX"},{no:1,name:"TIMESTAMP"}]),Ym=p.makeEnum("livekit.ImageFileSuffix",[{no:0,name:"IMAGE_SUFFIX_INDEX"},{no:1,name:"IMAGE_SUFFIX_TIMESTAMP"},{no:2,name:"IMAGE_SUFFIX_NONE_OVERWRITE"}]),Xm=p.makeEnum("livekit.StreamProtocol",[{no:0,name:"DEFAULT_PROTOCOL"},{no:1,name:"RTMP"},{no:2,name:"SRT"}]),Zm=p.makeEnum("livekit.AudioMixing",[{no:0,name:"DEFAULT_MIXING"},{no:1,name:"DUAL_CHANNEL_AGENT"},{no:2,name:"DUAL_CHANNEL_ALTERNATE"}]),ec=p.makeEnum("livekit.EncodingOptionsPreset",[{no:0,name:"H264_720P_30"},{no:1,name:"H264_720P_60"},{no:2,name:"H264_1080P_30"},{no:3,name:"H264_1080P_60"},{no:4,name:"PORTRAIT_H264_720P_30"},{no:5,name:"PORTRAIT_H264_720P_60"},{no:6,name:"PORTRAIT_H264_1080P_30"},{no:7,name:"PORTRAIT_H264_1080P_60"}]),ef=p.makeMessageType("livekit.RoomCompositeEgressRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9},{no:2,name:"layout",kind:"scalar",T:9},{no:3,name:"audio_only",kind:"scalar",T:8},{no:15,name:"audio_mixing",kind:"enum",T:p.getEnumType(Zm)},{no:4,name:"video_only",kind:"scalar",T:8},{no:5,name:"custom_base_url",kind:"scalar",T:9},{no:6,name:"file",kind:"message",T:Vr,oneof:"output"},{no:7,name:"stream",kind:"message",T:nc,oneof:"output"},{no:10,name:"segments",kind:"message",T:qr,oneof:"output"},{no:8,name:"preset",kind:"enum",T:p.getEnumType(ec),oneof:"options"},{no:9,name:"advanced",kind:"message",T:ic,oneof:"options"},{no:11,name:"file_outputs",kind:"message",T:Vr,repeated:!0},{no:12,name:"stream_outputs",kind:"message",T:nc,repeated:!0},{no:13,name:"segment_outputs",kind:"message",T:qr,repeated:!0},{no:14,name:"image_outputs",kind:"message",T:tf,repeated:!0},{no:16,name:"webhooks",kind:"message",T:fm,repeated:!0}]),Vr=p.makeMessageType("livekit.EncodedFileOutput",()=>[{no:1,name:"file_type",kind:"enum",T:p.getEnumType(zm)},{no:2,name:"filepath",kind:"scalar",T:9},{no:6,name:"disable_manifest",kind:"scalar",T:8},{no:3,name:"s3",kind:"message",T:Di,oneof:"output"},{no:4,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:5,name:"azure",kind:"message",T:xi,oneof:"output"},{no:7,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),qr=p.makeMessageType("livekit.SegmentedFileOutput",()=>[{no:1,name:"protocol",kind:"enum",T:p.getEnumType($m)},{no:2,name:"filename_prefix",kind:"scalar",T:9},{no:3,name:"playlist_name",kind:"scalar",T:9},{no:11,name:"live_playlist_name",kind:"scalar",T:9},{no:4,name:"segment_duration",kind:"scalar",T:13},{no:10,name:"filename_suffix",kind:"enum",T:p.getEnumType(Qm)},{no:8,name:"disable_manifest",kind:"scalar",T:8},{no:5,name:"s3",kind:"message",T:Di,oneof:"output"},{no:6,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:7,name:"azure",kind:"message",T:xi,oneof:"output"},{no:9,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),tf=p.makeMessageType("livekit.ImageOutput",()=>[{no:1,name:"capture_interval",kind:"scalar",T:13},{no:2,name:"width",kind:"scalar",T:5},{no:3,name:"height",kind:"scalar",T:5},{no:4,name:"filename_prefix",kind:"scalar",T:9},{no:5,name:"filename_suffix",kind:"enum",T:p.getEnumType(Ym)},{no:6,name:"image_codec",kind:"enum",T:p.getEnumType(rm)},{no:7,name:"disable_manifest",kind:"scalar",T:8},{no:8,name:"s3",kind:"message",T:Di,oneof:"output"},{no:9,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:10,name:"azure",kind:"message",T:xi,oneof:"output"},{no:11,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),Di=p.makeMessageType("livekit.S3Upload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:11,name:"session_token",kind:"scalar",T:9},{no:12,name:"assume_role_arn",kind:"scalar",T:9},{no:13,name:"assume_role_external_id",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9},{no:6,name:"force_path_style",kind:"scalar",T:8},{no:7,name:"metadata",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:8,name:"tagging",kind:"scalar",T:9},{no:9,name:"content_disposition",kind:"scalar",T:9},{no:10,name:"proxy",kind:"message",T:tc}]),Ai=p.makeMessageType("livekit.GCPUpload",()=>[{no:1,name:"credentials",kind:"scalar",T:9},{no:2,name:"bucket",kind:"scalar",T:9},{no:3,name:"proxy",kind:"message",T:tc}]),xi=p.makeMessageType("livekit.AzureBlobUpload",()=>[{no:1,name:"account_name",kind:"scalar",T:9},{no:2,name:"account_key",kind:"scalar",T:9},{no:3,name:"container_name",kind:"scalar",T:9}]),Li=p.makeMessageType("livekit.AliOSSUpload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9}]),tc=p.makeMessageType("livekit.ProxyConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"password",kind:"scalar",T:9}]),nc=p.makeMessageType("livekit.StreamOutput",()=>[{no:1,name:"protocol",kind:"enum",T:p.getEnumType(Xm)},{no:2,name:"urls",kind:"scalar",T:9,repeated:!0}]),ic=p.makeMessageType("livekit.EncodingOptions",()=>[{no:1,name:"width",kind:"scalar",T:5},{no:2,name:"height",kind:"scalar",T:5},{no:3,name:"depth",kind:"scalar",T:5},{no:4,name:"framerate",kind:"scalar",T:5},{no:5,name:"audio_codec",kind:"enum",T:p.getEnumType(nm)},{no:6,name:"audio_bitrate",kind:"scalar",T:5},{no:11,name:"audio_quality",kind:"scalar",T:5},{no:7,name:"audio_frequency",kind:"scalar",T:5},{no:8,name:"video_codec",kind:"enum",T:p.getEnumType(im)},{no:9,name:"video_bitrate",kind:"scalar",T:5},{no:12,name:"video_quality",kind:"scalar",T:5},{no:10,name:"key_frame_interval",kind:"scalar",T:1}]),nf=p.makeMessageType("livekit.AutoParticipantEgress",()=>[{no:1,name:"preset",kind:"enum",T:p.getEnumType(ec),oneof:"options"},{no:2,name:"advanced",kind:"message",T:ic,oneof:"options"},{no:3,name:"file_outputs",kind:"message",T:Vr,repeated:!0},{no:4,name:"segment_outputs",kind:"message",T:qr,repeated:!0}]),rf=p.makeMessageType("livekit.AutoTrackEgress",()=>[{no:1,name:"filepath",kind:"scalar",T:9},{no:5,name:"disable_manifest",kind:"scalar",T:8},{no:2,name:"s3",kind:"message",T:Di,oneof:"output"},{no:3,name:"gcp",kind:"message",T:Ai,oneof:"output"},{no:4,name:"azure",kind:"message",T:xi,oneof:"output"},{no:6,name:"aliOSS",kind:"message",T:Li,oneof:"output"}]),sf=p.makeMessageType("livekit.RoomEgress",()=>[{no:1,name:"room",kind:"message",T:ef},{no:3,name:"participant",kind:"message",T:nf},{no:2,name:"tracks",kind:"message",T:rf}]),Ni=p.makeMessageType("livekit.RoomConfiguration",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"empty_timeout",kind:"scalar",T:13},{no:3,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:11,name:"metadata",kind:"scalar",T:9},{no:5,name:"egress",kind:"message",T:sf},{no:7,name:"min_playout_delay",kind:"scalar",T:13},{no:8,name:"max_playout_delay",kind:"scalar",T:13},{no:9,name:"sync_streams",kind:"scalar",T:8},{no:10,name:"agents",kind:"message",T:Dr,repeated:!0}]),af=p.makeMessageType("livekit.TokenSourceRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9,opt:!0},{no:2,name:"participant_name",kind:"scalar",T:9,opt:!0},{no:3,name:"participant_identity",kind:"scalar",T:9,opt:!0},{no:4,name:"participant_metadata",kind:"scalar",T:9,opt:!0},{no:5,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:6,name:"room_config",kind:"message",T:Ni,opt:!0}]),rc=p.makeMessageType("livekit.TokenSourceResponse",()=>[{no:1,name:"server_url",kind:"scalar",T:9},{no:2,name:"participant_token",kind:"scalar",T:9}]);function of(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Ui={exports:{}},cf=Ui.exports,sc;function df(){return sc||(sc=1,(function(n){(function(e,t){n.exports?n.exports=t():e.log=t()})(cf,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={},o=null;function a(g,S){var k=g[S];if(typeof k.bind=="function")return k.bind(g);try{return Function.prototype.bind.call(k,g)}catch{return function(){return Function.prototype.apply.apply(k,[g,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(g){return g==="debug"&&(g="log"),typeof console===t?!1:g==="trace"&&i?c:console[g]!==void 0?a(console,g):console.log!==void 0?a(console,"log"):e}function l(){for(var g=this.getLevel(),S=0;S<r.length;S++){var k=r[S];this[k]=S<g?e:this.methodFactory(k,g,this.name)}if(this.log=this.debug,typeof console===t&&g<this.levels.SILENT)return"No console available for logging"}function u(g){return function(){typeof console!==t&&(l.call(this),this[g].apply(this,arguments))}}function h(g,S,k){return d(g)||u.apply(this,arguments)}function m(g,S){var k=this,R,P,y,b="loglevel";typeof g=="string"?b+=":"+g:typeof g=="symbol"&&(b=void 0);function T(N){var W=(r[N]||"silent").toUpperCase();if(!(typeof window===t||!b)){try{window.localStorage[b]=W;return}catch{}try{window.document.cookie=encodeURIComponent(b)+"="+W+";"}catch{}}}function L(){var N;if(!(typeof window===t||!b)){try{N=window.localStorage[b]}catch{}if(typeof N===t)try{var W=window.document.cookie,ee=encodeURIComponent(b),Se=W.indexOf(ee+"=");Se!==-1&&(N=/^([^;]+)/.exec(W.slice(Se+ee.length+1))[1])}catch{}return k.levels[N]===void 0&&(N=void 0),N}}function B(){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 I(N){var W=N;if(typeof W=="string"&&k.levels[W.toUpperCase()]!==void 0&&(W=k.levels[W.toUpperCase()]),typeof W=="number"&&W>=0&&W<=k.levels.SILENT)return W;throw new TypeError("log.setLevel() called with invalid level: "+N)}k.name=g,k.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},k.methodFactory=S||h,k.getLevel=function(){return y??P??R},k.setLevel=function(N,W){return y=I(N),W!==!1&&T(y),l.call(k)},k.setDefaultLevel=function(N){P=I(N),L()||k.setLevel(N,!1)},k.resetLevel=function(){y=null,B(),l.call(k)},k.enableAll=function(N){k.setLevel(k.levels.TRACE,N)},k.disableAll=function(N){k.setLevel(k.levels.SILENT,N)},k.rebuild=function(){if(o!==k&&(R=I(o.getLevel())),l.call(k),o===k)for(var N in s)s[N].rebuild()},R=I(o?o.getLevel():"WARN");var U=L();U!=null&&(y=I(U)),l.call(k)}o=new m,o.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,o.methodFactory)),k};var v=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=v),o},o.getLoggers=function(){return s},o.default=o,o})})(Ui)),Ui.exports}var Bn=df(),vn;(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"})(vn||(vn={}));var $e;(function(n){n.Default="livekit",n.Room="livekit-room",n.TokenSource="livekit-token-source",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",n.DataTracks="livekit-data-tracks"})($e||($e={}));let z=Bn.getLogger("livekit");const ac=Object.values($e).map(n=>Bn.getLogger(n));z.setDefaultLevel(vn.info);function ot(n){const e=Bn.getLogger(n);return e.setDefaultLevel(z.getLevel()),e}function lf(n,e){if(e)Bn.getLogger(e).setLevel(n);else for(const t of ac)t.setLevel(n)}function uf(n,e){(e?[e]:ac).forEach(i=>{const r=i.methodFactory;i.methodFactory=(s,o,a)=>{const c=r(s,o,a),d=vn[s],l=d>=o&&d<vn.silent;return(u,h)=>{h?c(u,h):c(u),l&&n(d,u,h)}},i.setLevel(i.getLevel())})}const hf=Bn.getLogger("lk-e2ee"),jn=7e3,mf=[0,300,4*300,9*300,16*300,jn,jn,jn,jn,jn];class oc{constructor(e){this._retryDelays=e!==void 0?[...e]:mf}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 Kr(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(o){o(s)})}return new(t||(t=Promise))(function(s,o){function a(l){try{d(i.next(l))}catch(u){o(u)}}function c(l){try{d(i.throw(l))}catch(u){o(u)}}function d(l){l.done?s(l.value):r(l.value).then(a,c)}d((i=i.apply(n,e||[])).next())})}function cc(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 _t(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 cc=="function"?cc(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(o){return new Promise(function(a,c){o=n[s](o),r(a,c,o.done,o.value)})}}function r(s,o,a,c){Promise.resolve(c).then(function(d){s({value:d,done:a})},o)}}typeof SuppressedError=="function"&&SuppressedError;var Fi={exports:{}},dc;function ff(){if(dc)return Fi.exports;dc=1;var n=typeof Reflect=="object"?Reflect:null,e=n&&typeof n.apply=="function"?n.apply:function(b,T,L){return Function.prototype.apply.call(b,T,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(y){console&&console.warn&&console.warn(y)}var r=Number.isNaN||function(b){return b!==b};function s(){s.init.call(this)}Fi.exports=s,Fi.exports.once=k,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function a(y){if(typeof y!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof y)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(y){if(typeof y!="number"||y<0||r(y))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+y+".");o=y}}),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(y){return y._maxListeners===void 0?s.defaultMaxListeners:y._maxListeners}s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(b){for(var T=[],L=1;L<arguments.length;L++)T.push(arguments[L]);var B=b==="error",I=this._events;if(I!==void 0)B=B&&I.error===void 0;else if(!B)return!1;if(B){var U;if(T.length>0&&(U=T[0]),U instanceof Error)throw U;var N=new Error("Unhandled error."+(U?" ("+U.message+")":""));throw N.context=U,N}var W=I[b];if(W===void 0)return!1;if(typeof W=="function")e(W,this,T);else for(var ee=W.length,Se=v(W,ee),L=0;L<ee;++L)e(Se[L],this,T);return!0};function d(y,b,T,L){var B,I,U;if(a(T),I=y._events,I===void 0?(I=y._events=Object.create(null),y._eventsCount=0):(I.newListener!==void 0&&(y.emit("newListener",b,T.listener?T.listener:T),I=y._events),U=I[b]),U===void 0)U=I[b]=T,++y._eventsCount;else if(typeof U=="function"?U=I[b]=L?[T,U]:[U,T]:L?U.unshift(T):U.push(T),B=c(y),B>0&&U.length>B&&!U.warned){U.warned=!0;var N=new Error("Possible EventEmitter memory leak detected. "+U.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");N.name="MaxListenersExceededWarning",N.emitter=y,N.type=b,N.count=U.length,i(N)}return y}s.prototype.addListener=function(b,T){return d(this,b,T,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(b,T){return d(this,b,T,!0)};function l(){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 u(y,b,T){var L={fired:!1,wrapFn:void 0,target:y,type:b,listener:T},B=l.bind(L);return B.listener=T,L.wrapFn=B,B}s.prototype.once=function(b,T){return a(T),this.on(b,u(this,b,T)),this},s.prototype.prependOnceListener=function(b,T){return a(T),this.prependListener(b,u(this,b,T)),this},s.prototype.removeListener=function(b,T){var L,B,I,U,N;if(a(T),B=this._events,B===void 0)return this;if(L=B[b],L===void 0)return this;if(L===T||L.listener===T)--this._eventsCount===0?this._events=Object.create(null):(delete B[b],B.removeListener&&this.emit("removeListener",b,L.listener||T));else if(typeof L!="function"){for(I=-1,U=L.length-1;U>=0;U--)if(L[U]===T||L[U].listener===T){N=L[U].listener,I=U;break}if(I<0)return this;I===0?L.shift():g(L,I),L.length===1&&(B[b]=L[0]),B.removeListener!==void 0&&this.emit("removeListener",b,N||T)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(b){var T,L,B;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 I=Object.keys(L),U;for(B=0;B<I.length;++B)U=I[B],U!=="removeListener"&&this.removeAllListeners(U);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(T=L[b],typeof T=="function")this.removeListener(b,T);else if(T!==void 0)for(B=T.length-1;B>=0;B--)this.removeListener(b,T[B]);return this};function h(y,b,T){var L=y._events;if(L===void 0)return[];var B=L[b];return B===void 0?[]:typeof B=="function"?T?[B.listener||B]:[B]:T?S(B):v(B,B.length)}s.prototype.listeners=function(b){return h(this,b,!0)},s.prototype.rawListeners=function(b){return h(this,b,!1)},s.listenerCount=function(y,b){return typeof y.listenerCount=="function"?y.listenerCount(b):m.call(y,b)},s.prototype.listenerCount=m;function m(y){var b=this._events;if(b!==void 0){var T=b[y];if(typeof T=="function")return 1;if(T!==void 0)return T.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]};function v(y,b){for(var T=new Array(b),L=0;L<b;++L)T[L]=y[L];return T}function g(y,b){for(;b+1<y.length;b++)y[b]=y[b+1];y.pop()}function S(y){for(var b=new Array(y.length),T=0;T<b.length;++T)b[T]=y[T].listener||y[T];return b}function k(y,b){return new Promise(function(T,L){function B(U){y.removeListener(b,I),L(U)}function I(){typeof y.removeListener=="function"&&y.removeListener("error",B),T([].slice.call(arguments))}P(y,b,I,{once:!0}),b!=="error"&&R(y,B,{once:!0})})}function R(y,b,T){typeof y.on=="function"&&P(y,"error",b,T)}function P(y,b,T,L){if(typeof y.on=="function")L.once?y.once(b,T):y.on(b,T);else if(typeof y.addEventListener=="function")y.addEventListener(b,function B(I){L.once&&y.removeEventListener(b,B),T(I)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof y)}return Fi.exports}var yt=ff();let lc=!0,uc=!0;function Vn(n,e,t){const i=n.match(e);return i&&i.length>=t&&parseFloat(i[t],10)}function Yt(n,e,t){if(!n.RTCPeerConnection)return;const i=n.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(o,a){if(o!==e)return r.apply(this,arguments);const c=d=>{const l=t(d);l&&(a.handleEvent?a.handleEvent(l):a(l))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(a,c),r.apply(this,[o,c])};const s=i.removeEventListener;i.removeEventListener=function(o,a){if(o!==e||!this._eventMap||!this._eventMap[e])return s.apply(this,arguments);if(!this._eventMap[e].has(a))return s.apply(this,arguments);const c=this._eventMap[e].get(a);return this._eventMap[e].delete(a),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,s.apply(this,[o,c])},Object.defineProperty(i,"on"+e,{get(){return this["_on"+e]},set(o){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),o&&this.addEventListener(e,this["_on"+e]=o)},enumerable:!0,configurable:!0})}function pf(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(lc=n,n?"adapter.js logging disabled":"adapter.js logging enabled")}function gf(n){return typeof n!="boolean"?new Error("Argument type: "+typeof n+". Please use a boolean."):(uc=!n,"adapter.js deprecation warnings "+(n?"disabled":"enabled"))}function hc(){if(typeof window=="object"){if(lc)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function Wr(n,e){uc&&console.warn(n+" is deprecated, please use "+e+" instead.")}function vf(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(Vn(t.userAgent,/Firefox\/(\d+)\./,1));else if(t.webkitGetUserMedia||n.isSecureContext===!1&&n.webkitRTCPeerConnection)e.browser="chrome",e.version=parseInt(Vn(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else if(n.RTCPeerConnection&&t.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=parseInt(Vn(t.userAgent,/AppleWebKit\/(\d+)\./,1)),e.supportsUnifiedPlan=n.RTCRtpTransceiver&&"currentDirection"in n.RTCRtpTransceiver.prototype,e._safariVersion=Vn(t.userAgent,/Version\/(\d+(\.?\d+))/,1);else return e.browser="Not a supported browser.",e;return e}function mc(n){return Object.prototype.toString.call(n)==="[object Object]"}function fc(n){return mc(n)?Object.keys(n).reduce(function(e,t){const i=mc(n[t]),r=i?fc(n[t]):n[t],s=i&&!Object.keys(r).length;return r===void 0||s?e:Object.assign(e,{[t]:r})},{}):n}function Hr(n,e,t){!e||t.has(e.id)||(t.set(e.id,e),Object.keys(e).forEach(i=>{i.endsWith("Id")?Hr(n,n.get(e[i]),t):i.endsWith("Ids")&&e[i].forEach(r=>{Hr(n,n.get(r),t)})}))}function pc(n,e,t){const i=t?"outbound-rtp":"inbound-rtp",r=new Map;if(e===null)return r;const s=[];return n.forEach(o=>{o.type==="track"&&o.trackIdentifier===e.id&&s.push(o)}),s.forEach(o=>{n.forEach(a=>{a.type===i&&a.trackId===o.id&&Hr(n,a,r)})}),r}const gc=hc;function vc(n,e){const t=n&&n.navigator;if(!t.mediaDevices)return;const i=function(a){if(typeof a!="object"||a.mandatory||a.optional)return a;const c={};return Object.keys(a).forEach(d=>{if(d==="require"||d==="advanced"||d==="mediaSource")return;const l=typeof a[d]=="object"?a[d]:{ideal:a[d]};l.exact!==void 0&&typeof l.exact=="number"&&(l.min=l.max=l.exact);const u=function(h,m){return h?h+m.charAt(0).toUpperCase()+m.slice(1):m==="deviceId"?"sourceId":m};if(l.ideal!==void 0){c.optional=c.optional||[];let h={};typeof l.ideal=="number"?(h[u("min",d)]=l.ideal,c.optional.push(h),h={},h[u("max",d)]=l.ideal,c.optional.push(h)):(h[u("",d)]=l.ideal,c.optional.push(h))}l.exact!==void 0&&typeof l.exact!="number"?(c.mandatory=c.mandatory||{},c.mandatory[u("",d)]=l.exact):["min","max"].forEach(h=>{l[h]!==void 0&&(c.mandatory=c.mandatory||{},c.mandatory[u(h,d)]=l[h])})}),a.advanced&&(c.optional=(c.optional||[]).concat(a.advanced)),c},r=function(a,c){if(e.version>=61)return c(a);if(a=JSON.parse(JSON.stringify(a)),a&&typeof a.audio=="object"){const d=function(l,u,h){u in l&&!(h in l)&&(l[h]=l[u],delete l[u])};a=JSON.parse(JSON.stringify(a)),d(a.audio,"autoGainControl","googAutoGainControl"),d(a.audio,"noiseSuppression","googNoiseSuppression"),a.audio=i(a.audio)}if(a&&typeof a.video=="object"){let d=a.video.facingMode;d=d&&(typeof d=="object"?d:{ideal:d});const l=e.version<66;if(d&&(d.exact==="user"||d.exact==="environment"||d.ideal==="user"||d.ideal==="environment")&&!(t.mediaDevices.getSupportedConstraints&&t.mediaDevices.getSupportedConstraints().facingMode&&!l)){delete a.video.facingMode;let u;if(d.exact==="environment"||d.ideal==="environment"?u=["back","rear"]:(d.exact==="user"||d.ideal==="user")&&(u=["front"]),u)return t.mediaDevices.enumerateDevices().then(h=>{h=h.filter(v=>v.kind==="videoinput");let m=h.find(v=>u.some(g=>v.label.toLowerCase().includes(g)));return!m&&h.length&&u.includes("back")&&(m=h[h.length-1]),m&&(a.video.deviceId=d.exact?{exact:m.deviceId}:{ideal:m.deviceId}),a.video=i(a.video),gc("chrome: "+JSON.stringify(a)),c(a)})}a.video=i(a.video)}return gc("chrome: "+JSON.stringify(a)),c(a)},s=function(a){return e.version>=64?a:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[a.name]||a.name,message:a.message,constraint:a.constraint||a.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},o=function(a,c,d){r(a,l=>{t.webkitGetUserMedia(l,c,u=>{d&&d(s(u))})})};if(t.getUserMedia=o.bind(t),t.mediaDevices.getUserMedia){const a=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(c){return r(c,d=>a(d).then(l=>{if(d.audio&&!l.getAudioTracks().length||d.video&&!l.getVideoTracks().length)throw l.getTracks().forEach(u=>{u.stop()}),new DOMException("","NotFoundError");return l},l=>Promise.reject(s(l))))}}}function yc(n){n.MediaStream=n.MediaStream||n.webkitMediaStream}function bc(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(a=>a.track&&a.track.id===r.track.id):s={track:r.track};const o=new Event("track");o.track=r.track,o.receiver=s,o.transceiver={receiver:s},o.streams=[i.stream],this.dispatchEvent(o)}),i.stream.getTracks().forEach(r=>{let s;n.RTCPeerConnection.prototype.getReceivers?s=this.getReceivers().find(a=>a.track&&a.track.id===r.id):s={track:r};const o=new Event("track");o.track=r,o.receiver=s,o.transceiver={receiver:s},o.streams=[i.stream],this.dispatchEvent(o)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else Yt(n,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function kc(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(a,c){let d=r.apply(this,arguments);return d||(d=e(this,a),this._senders.push(d)),d};const s=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(a){s.apply(this,arguments);const c=this._senders.indexOf(a);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(o=>{this._senders.push(e(this,o))})};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(s){this._senders=this._senders||[],i.apply(this,[s]),s.getTracks().forEach(o=>{const a=this._senders.find(c=>c.track===o);a&&this._senders.splice(this._senders.indexOf(a),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 Tc(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(o=>o._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(o=>pc(o,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}),Yt(n,"track",i=>(i.receiver._pc=i.srcElement,i)),n.RTCRtpReceiver.prototype.getStats=function(){const r=this;return this._pc.getStats().then(s=>pc(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,o;return this.getSenders().forEach(a=>{a.track===i&&(r?o=!0:r=a)}),this.getReceivers().forEach(a=>(a.track===i&&(s?o=!0:s=a),a.track===i)),o||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 Sc(n){n.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(o=>this._shimmedLocalStreams[o][0])};const e=n.RTCPeerConnection.prototype.addTrack;n.RTCPeerConnection.prototype.addTrack=function(o,a){if(!a)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const c=e.apply(this,arguments);return this._shimmedLocalStreams[a.id]?this._shimmedLocalStreams[a.id].indexOf(c)===-1&&this._shimmedLocalStreams[a.id].push(c):this._shimmedLocalStreams[a.id]=[a,c],c};const t=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(o){this._shimmedLocalStreams=this._shimmedLocalStreams||{},o.getTracks().forEach(d=>{if(this.getSenders().find(u=>u.track===d))throw new DOMException("Track already exists.","InvalidAccessError")});const a=this.getSenders();t.apply(this,arguments);const c=this.getSenders().filter(d=>a.indexOf(d)===-1);this._shimmedLocalStreams[o.id]=[o].concat(c)};const i=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[o.id],i.apply(this,arguments)};const r=n.RTCPeerConnection.prototype.removeTrack;n.RTCPeerConnection.prototype.removeTrack=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},o&&Object.keys(this._shimmedLocalStreams).forEach(a=>{const c=this._shimmedLocalStreams[a].indexOf(o);c!==-1&&this._shimmedLocalStreams[a].splice(c,1),this._shimmedLocalStreams[a].length===1&&delete this._shimmedLocalStreams[a]}),r.apply(this,arguments)}}function Cc(n,e){if(!n.RTCPeerConnection)return;if(n.RTCPeerConnection.prototype.addTrack&&e.version>=65)return Sc(n);const t=n.RTCPeerConnection.prototype.getLocalStreams;n.RTCPeerConnection.prototype.getLocalStreams=function(){const l=t.apply(this);return this._reverseStreams=this._reverseStreams||{},l.map(u=>this._reverseStreams[u.id])};const i=n.RTCPeerConnection.prototype.addStream;n.RTCPeerConnection.prototype.addStream=function(l){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},l.getTracks().forEach(u=>{if(this.getSenders().find(m=>m.track===u))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[l.id]){const u=new n.MediaStream(l.getTracks());this._streams[l.id]=u,this._reverseStreams[u.id]=l,l=u}i.apply(this,[l])};const r=n.RTCPeerConnection.prototype.removeStream;n.RTCPeerConnection.prototype.removeStream=function(l){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[l.id]||l]),delete this._reverseStreams[this._streams[l.id]?this._streams[l.id].id:l.id],delete this._streams[l.id]},n.RTCPeerConnection.prototype.addTrack=function(l,u){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(g=>g===l))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(g=>g.track===l))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const v=this._streams[u.id];if(v)v.addTrack(l),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const g=new n.MediaStream([l]);this._streams[u.id]=g,this._reverseStreams[g.id]=u,this.addStream(g)}return this.getSenders().find(g=>g.track===l)};function s(d,l){let u=l.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];u=u.replace(new RegExp(v.id,"g"),m.id)}),new RTCSessionDescription({type:l.type,sdp:u})}function o(d,l){let u=l.sdp;return Object.keys(d._reverseStreams||[]).forEach(h=>{const m=d._reverseStreams[h],v=d._streams[m.id];u=u.replace(new RegExp(m.id,"g"),v.id)}),new RTCSessionDescription({type:l.type,sdp:u})}["createOffer","createAnswer"].forEach(function(d){const l=n.RTCPeerConnection.prototype[d],u={[d](){const h=arguments;return arguments.length&&typeof arguments[0]=="function"?l.apply(this,[v=>{const g=s(this,v);h[0].apply(null,[g])},v=>{h[1]&&h[1].apply(null,v)},arguments[2]]):l.apply(this,arguments).then(v=>s(this,v))}};n.RTCPeerConnection.prototype[d]=u[d]});const a=n.RTCPeerConnection.prototype.setLocalDescription;n.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?a.apply(this,arguments):(arguments[0]=o(this,arguments[0]),a.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(l){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!l._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(l._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(g=>l.track===g)&&(h=this._streams[m])}),h&&(h.getTracks().length===1?this.removeStream(this._reverseStreams[h.id]):h.removeTrack(l.track),this.dispatchEvent(new Event("negotiationneeded")))}}function Jr(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 Ec(n,e){Yt(n,"negotiationneeded",t=>{const i=t.target;if(!((e.version<72||i.getConfiguration&&i.getConfiguration().sdpSemantics==="plan-b")&&i.signalingState!=="stable"))return t})}var wc=Object.freeze({__proto__:null,fixNegotiationNeeded:Ec,shimAddTrackRemoveTrack:Cc,shimAddTrackRemoveTrackWithNative:Sc,shimGetSendersWithDtmf:kc,shimGetUserMedia:vc,shimMediaStream:yc,shimOnTrack:bc,shimPeerConnection:Jr,shimSenderReceiverGetStats:Tc});function Rc(n,e){const t=n&&n.navigator,i=n&&n.MediaStreamTrack;if(t.getUserMedia=function(r,s,o){Wr("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),t.mediaDevices.getUserMedia(r).then(s,o)},!(e.version>55&&"autoGainControl"in t.mediaDevices.getSupportedConstraints())){const r=function(o,a,c){a in o&&!(c in o)&&(o[c]=o[a],delete o[a])},s=t.mediaDevices.getUserMedia.bind(t.mediaDevices);if(t.mediaDevices.getUserMedia=function(o){return typeof o=="object"&&typeof o.audio=="object"&&(o=JSON.parse(JSON.stringify(o)),r(o.audio,"autoGainControl","mozAutoGainControl"),r(o.audio,"noiseSuppression","mozNoiseSuppression")),s(o)},i&&i.prototype.getSettings){const o=i.prototype.getSettings;i.prototype.getSettings=function(){const a=o.apply(this,arguments);return r(a,"mozAutoGainControl","autoGainControl"),r(a,"mozNoiseSuppression","noiseSuppression"),a}}if(i&&i.prototype.applyConstraints){const o=i.prototype.applyConstraints;i.prototype.applyConstraints=function(a){return this.kind==="audio"&&typeof a=="object"&&(a=JSON.parse(JSON.stringify(a)),r(a,"autoGainControl","mozAutoGainControl"),r(a,"noiseSuppression","mozNoiseSuppression")),o.apply(this,[a])}}}}function yf(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 _c(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 Gr(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],o={[r](){return arguments[0]=new(r==="addIceCandidate"?n.RTCIceCandidate:n.RTCSessionDescription)(arguments[0]),s.apply(this,arguments)}};n.RTCPeerConnection.prototype[r]=o[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,o,a]=arguments;return i.apply(this,[s||null]).then(c=>{if(e.version<53&&!o)try{c.forEach(d=>{d.type=t[d.type]||d.type})}catch(d){if(d.name!=="TypeError")throw d;c.forEach((l,u)=>{c.set(u,Object.assign({},l,{type:t[l.type]||l.type}))})}return c}).then(o,a)}}function Pc(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 Ic(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}),Yt(n,"track",t=>(t.receiver._pc=t.srcElement,t)),n.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Mc(n){!n.RTCPeerConnection||"removeStream"in n.RTCPeerConnection.prototype||(n.RTCPeerConnection.prototype.removeStream=function(t){Wr("removeStream","removeTrack"),this.getSenders().forEach(i=>{i.track&&t.getTracks().includes(i.track)&&this.removeTrack(i)})})}function Oc(n){n.DataChannel&&!n.RTCDataChannel&&(n.RTCDataChannel=n.DataChannel)}function Dc(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(o=>{if("rid"in o&&!/^[a-z0-9]{0,16}$/i.test(o.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in o&&!(parseFloat(o.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in o&&!(parseFloat(o.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const s=e.apply(this,arguments);if(r){const{sender:o}=s,a=o.getParameters();(!("encodings"in a)||a.encodings.length===1&&Object.keys(a.encodings[0]).length===0)&&(a.encodings=i,o.sendEncodings=i,this.setParametersPromises.push(o.setParameters(a).then(()=>{delete o.sendEncodings}).catch(()=>{delete o.sendEncodings})))}return s})}function Ac(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 xc(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 Lc(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 Nc=Object.freeze({__proto__:null,shimAddTransceiver:Dc,shimCreateAnswer:Lc,shimCreateOffer:xc,shimGetDisplayMedia:yf,shimGetParameters:Ac,shimGetUserMedia:Rc,shimOnTrack:_c,shimPeerConnection:Gr,shimRTCDataChannel:Oc,shimReceiverGetStats:Ic,shimRemoveStream:Mc,shimSenderGetStats:Pc});function Uc(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),o=1;o<r;o++)s[o-1]=arguments[o];return s&&s.forEach(a=>{this._localStreams?this._localStreams.includes(a)||this._localStreams.push(a):this._localStreams=[a]}),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 Fc(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 o=new Event("addstream");o.stream=s,i.dispatchEvent(o)})}),e.apply(i,arguments)}}}function Bc(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,o=e.addIceCandidate;e.createOffer=function(d,l){const u=arguments.length>=2?arguments[2]:arguments[0],h=t.apply(this,[u]);return l?(h.then(d,l),Promise.resolve()):h},e.createAnswer=function(d,l){const u=arguments.length>=2?arguments[2]:arguments[0],h=i.apply(this,[u]);return l?(h.then(d,l),Promise.resolve()):h};let a=function(c,d,l){const u=r.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u};e.setLocalDescription=a,a=function(c,d,l){const u=s.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u},e.setRemoteDescription=a,a=function(c,d,l){const u=o.apply(this,[c]);return l?(u.then(d,l),Promise.resolve()):u},e.addIceCandidate=a}function jc(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(Vc(r))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=(function(i,r,s){e.mediaDevices.getUserMedia(i).then(r,s)}).bind(e))}function Vc(n){return n&&n.video!==void 0?Object.assign({},n,{video:fc(n.video)}):n}function qc(n){if(!n.RTCPeerConnection)return;const e=n.RTCPeerConnection;n.RTCPeerConnection=function(i,r){if(i&&i.iceServers){const s=[];for(let o=0;o<i.iceServers.length;o++){let a=i.iceServers[o];a.urls===void 0&&a.url?(Wr("RTCIceServer.url","RTCIceServer.urls"),a=JSON.parse(JSON.stringify(a)),a.urls=a.url,delete a.url,s.push(a)):s.push(i.iceServers[o])}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 Kc(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 Wc(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(o=>o.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(o=>o.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 Hc(n){typeof n!="object"||n.AudioContext||(n.AudioContext=n.webkitAudioContext)}var Jc=Object.freeze({__proto__:null,shimAudioContext:Hc,shimCallbacksAPI:Bc,shimConstraints:Vc,shimCreateOfferLegacy:Wc,shimGetUserMedia:jc,shimLocalStreamsAPI:Uc,shimRTCIceServerUrls:qc,shimRemoteStreamsAPI:Fc,shimTrackEventTransceiver:Kc}),zr={exports:{}},Gc;function bf(){return Gc||(Gc=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+" "+o+` 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})(zr)),zr.exports}var zc=
|
|
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})(zr)),zr.exports}var zc=bf(),yn=of(zc),kf=ah({__proto__:null,default:yn},[zc]);function Bi(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=yn.parseCandidate(i.candidate);for(const o in s)o in r||Object.defineProperty(r,o,{value:s[o]});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,Yt(n,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new n.RTCIceCandidate(t.candidate),writable:"false"}),t))}function $r(n){!n.RTCIceCandidate||n.RTCIceCandidate&&"relayProtocol"in n.RTCIceCandidate.prototype||Yt(n,"icecandidate",e=>{if(e.candidate){const t=yn.parseCandidate(e.candidate.candidate);t.type==="relay"&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[t.priority>>24])}return e})}function ji(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(a){if(!a||!a.sdp)return!1;const c=yn.splitSections(a.sdp);return c.shift(),c.some(d=>{const l=yn.parseMLine(d);return l&&l.kind==="application"&&l.protocol.indexOf("SCTP")!==-1})},i=function(a){const c=a.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(a){let c=65536;return e.browser==="firefox"&&(e.version<57?a===-1?c=16384:c=2147483637:e.version<60?c=e.version===57?65535:65536:c=2147483637),c},s=function(a,c){let d=65536;e.browser==="firefox"&&e.version===57&&(d=65535);const l=yn.matchPrefix(a.sdp,"a=max-message-size:");return l.length>0?d=parseInt(l[0].substring(19),10):e.browser==="firefox"&&c!==-1&&(d=2147483637),d},o=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),l=s(arguments[0],c);let u;d===0&&l===0?u=Number.POSITIVE_INFINITY:d===0||l===0?u=Math.max(d,l):u=Math.min(d,l);const h={};Object.defineProperty(h,"maxMessageSize",{get(){return u}}),this._sctp=h}return o.apply(this,arguments)}}function Vi(n){if(!(n.RTCPeerConnection&&"createDataChannel"in n.RTCPeerConnection.prototype))return;function e(i,r){const s=i.send;i.send=function(){const a=arguments[0],c=a.length||a.size||a.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},Yt(n,"datachannel",i=>(e(i.channel,i.target),i))}function Qr(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 o=new Event("connectionstatechange",r);s.dispatchEvent(o)}return r},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),i.apply(this,arguments)}})}function Yr(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(o=>o.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 qi(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 Ki(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(o=>t.apply(this,[o]))})}var yf=Object.freeze({__proto__:null,removeExtmapAllowMixed:Yr,shimAddIceCandidateNullOrEmpty:qi,shimConnectionState:Qr,shimMaxMessageSize:ji,shimParameterlessSetLocalDescription:Ki,shimRTCIceCandidate:Bi,shimRTCIceCandidateRelayProtocol:$r,shimSendThrowTypeError:Vi});function bf(){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=hc,i=ff(n),r={browserDetails:i,commonShim:yf,extractVersion:Vn,disableLog:hf,disableWarnings:mf,sdp:vf};switch(i.browser){case"chrome":if(!wc||!Jr||!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=wc,qi(n,i),Ki(n),vc(n,i),yc(n),Jr(n,i),bc(n),Cc(n,i),kc(n),Tc(n),Ec(n,i),Bi(n),$r(n),Qr(n),ji(n,i),Vi(n),Yr(n,i);break;case"firefox":if(!Nc||!Gr||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),r;t("adapter.js shimming firefox."),r.browserShim=Nc,qi(n,i),Ki(n),Rc(n,i),Gr(n,i),_c(n),Mc(n),Pc(n),Ic(n),Oc(n),Dc(n),Ac(n),xc(n),Lc(n),Bi(n),Qr(n),ji(n,i),Vi(n);break;case"safari":if(!Jc||!e.shimSafari)return t("Safari shim is not included in this adapter release."),r;t("adapter.js shimming safari."),r.browserShim=Jc,qi(n,i),Ki(n),qc(n),Wc(n),Bc(n),Uc(n),Fc(n),Kc(n),jc(n),Hc(n),Bi(n),$r(n),ji(n,i),Vi(n),Yr(n,i);break;default:t("Unsupported browser!");break}return r}bf({window:typeof window>"u"?void 0:window});var Xr,$c;class Fe extends($c=Promise){constructor(e){super(e)}catch(e){return super.catch(e)}static reject(e){return super.reject(e)}static all(e){return super.all(e)}static race(e){return super.race(e)}}Xr=Fe,Fe.resolve=n=>Reflect.get($c,"resolve",Xr).call(Xr,n);const kf=/version\/(\d+(\.?_?\d+)+)/i;let Zr;function Ve(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(Zr===void 0||e){const i=Tf.find(r=>{let{test:s}=r;return s.test(t)});Zr=i==null?void 0:i.describe(t)}return Zr}const Tf=[{test:/firefox|iceweasel|fxios/i,describe(n){return{name:"Firefox",version:Wi(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:es(n)}}},{test:/chrom|crios|crmo/i,describe(n){return{name:"Chrome",version:Wi(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("crios")?"iOS":void 0,osVersion:es(n)}}},{test:/safari|applewebkit/i,describe(n){return{name:"Safari",version:Wi(kf,n),os:n.includes("mobile/")?"iOS":"macOS",osVersion:es(n)}}}];function Wi(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 es(n){return n.includes("mac os")?Wi(/\(.+?(\d+_\d+(:?_\d+)?)/,n,1).replace(/_/g,"."):void 0}var Sf="2.17.2";const Qc=Sf,Yc=16;class et extends Error{constructor(e,t,i){super(t||"an error has occurred"),this.name="LiveKitError",this.code=e,typeof(i==null?void 0:i.cause)<"u"&&(this.cause=i==null?void 0:i.cause)}}class Xt extends et{}class Cf extends et{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Simulated failure";super(-1,e),this.name="simulated"}}var ue;(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",n[n.WebSocket=6]="WebSocket",n[n.ServiceNotFound=7]="ServiceNotFound"})(ue||(ue={}));class K extends Xt{constructor(e,t,i,r){super(1,e),this.name="ConnectionError",this.status=i,this.reason=t,this.context=r,this.reasonName=ue[t]}static notAllowed(e,t,i){return new K(e,ue.NotAllowed,t,i)}static timeout(e){return new K(e,ue.Timeout)}static leaveRequest(e,t){return new K(e,ue.LeaveRequest,void 0,t)}static internal(e,t){return new K(e,ue.InternalError,void 0,t)}static cancelled(e){return new K(e,ue.Cancelled)}static serverUnreachable(e,t){return new K(e,ue.ServerUnreachable,t)}static websocket(e,t,i){return new K(e,ue.WebSocket,t,i)}static serviceNotFound(e,t){return new K(e,ue.ServiceNotFound,void 0,t)}}class qn extends et{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class dt extends et{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class Xc extends et{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class ke extends et{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Vt extends et{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class Ef extends et{constructor(e){super(14,e??"unable to publish data"),this.name="PublishDataError"}}class ts extends et{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class ns extends Xt{constructor(e,t){super(15,e),this.name="SignalRequestError",this.reason=t,this.reasonName=typeof t=="string"?t:jr[t]}}var Be;(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",n[n.EncryptionTypeMismatch=8]="EncryptionTypeMismatch"})(Be||(Be={}));class Ye extends Xt{constructor(e,t){super(16,e),this.name="DataStreamError",this.reason=t,this.reasonName=Be[t]}}class Zt extends et{constructor(e){super(18,e),this.name="SignalReconnectError"}}var Kn;(function(n){n.PermissionDenied="PermissionDenied",n.NotFound="NotFound",n.DeviceInUse="DeviceInUse",n.Other="Other"})(Kn||(Kn={})),(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})(Kn||(Kn={}));class Oe{}Oe.setTimeout=function(){return setTimeout(...arguments)},Oe.setInterval=function(){return setInterval(...arguments)},Oe.clearTimeout=function(){return clearTimeout(...arguments)},Oe.clearInterval=function(){return clearInterval(...arguments)};var M;(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"})(M||(M={}));var x;(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"})(x||(x={}));var A;(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"})(A||(A={}));var O;(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"})(O||(O={}));function wf(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))}class oe{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 Zc=["opus","red"],Rf=["vp8","h264"],ed=["vp8","h264","vp9","av1","h265"];function td(n){return!!Rf.find(e=>e===n)}const nd=td;var is;(function(n){n[n.PREFER_REGRESSION=0]="PREFER_REGRESSION",n[n.SIMULCAST=1]="SIMULCAST",n[n.REGRESSION=2]="REGRESSION"})(is||(is={}));var Hi;(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}})(Hi||(Hi={}));const bn={h90:new oe(160,90,9e4,20),h180:new oe(320,180,16e4,20),h216:new oe(384,216,18e4,20),h360:new oe(640,360,45e4,20),h540:new oe(960,540,8e5,25),h720:new oe(1280,720,17e5,30),h1080:new oe(1920,1080,3e6,30),h1440:new oe(2560,1440,5e6,30),h2160:new oe(3840,2160,8e6,30)},Ji={h120:new oe(160,120,7e4,20),h180:new oe(240,180,125e3,20),h240:new oe(320,240,14e4,20),h360:new oe(480,360,33e4,20),h480:new oe(640,480,5e5,20),h540:new oe(720,540,6e5,25),h720:new oe(960,720,13e5,30),h1080:new oe(1440,1080,23e5,30),h1440:new oe(1920,1440,38e5,30)},Wn={h360fps3:new oe(640,360,2e5,3,"medium"),h360fps15:new oe(640,360,4e5,15,"medium"),h720fps5:new oe(1280,720,8e5,5,"medium"),h720fps15:new oe(1280,720,15e5,15,"medium"),h720fps30:new oe(1280,720,2e6,30,"medium"),h1080fps15:new oe(1920,1080,25e5,15,"medium"),h1080fps30:new oe(1920,1080,5e6,30,"medium"),original:new oe(0,0,7e6,30,"medium")};function id(n,e,t){var i,r,s,o;const{optionsWithoutProcessor:a,audioProcessor:c,videoProcessor:d}=ad(n??{}),l=e==null?void 0:e.processor,u=t==null?void 0:t.processor,h=a??{};return h.audio===!0&&(h.audio={}),h.video===!0&&(h.video={}),h.audio&&(rs(h.audio,e),(i=(s=h.audio).deviceId)!==null&&i!==void 0||(s.deviceId={ideal:"default"}),(c||l)&&(h.audio.processor=c??l)),h.video&&(rs(h.video,t),(r=(o=h.video).deviceId)!==null&&r!==void 0||(o.deviceId={ideal:"default"}),(d||u)&&(h.video.processor=d??u)),h}function rs(n,e){return Object.keys(e).forEach(t=>{n[t]===void 0&&(n[t]=e[t])}),n}function ss(n){var e,t,i,r;const s={};if(n.video)if(typeof n.video=="object"){const o={},a=o,c=n.video;Object.keys(c).forEach(d=>{switch(d){case"resolution":rs(a,c.resolution);break;default:a[d]=c[d]}}),s.video=o,(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 rd(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=as();if(i){const r=i.createAnalyser();r.fftSize=2048;const s=r.frequencyBinCount,o=new Uint8Array(s);i.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(r),yield Le(t),r.getByteTimeDomainData(o);const c=o.some(d=>d!==128&&d!==0);return i.close(),!c}return!1})()})}function as(){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)}finally{(r=window.document.body)===null||r===void 0||r.removeEventListener("click",i)}});t.addEventListener("statechange",()=>{var r;t.state==="closed"&&((r=window.document.body)===null||r===void 0||r.removeEventListener("click",i))}),window.document.body.addEventListener("click",i)}return t}}function _f(n){return n==="audioinput"?C.Source.Microphone:n==="videoinput"?C.Source.Camera:C.Source.Unknown}function os(n){return n===C.Source.Microphone?"audioinput":n===C.Source.Camera?"videoinput":void 0}function sd(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,rn()?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 Hn(n){return n.split("/")[1].toLowerCase()}function Pf(n){const e=[];return n.forEach(t=>{t.track!==void 0&&e.push(new Lr({cid:t.track.mediaStreamID,track:t.trackInfo}))}),e}function Y(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?Y(n.track):{})}}function If(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function Mf(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 ad(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:wf(e)}}function Of(n){switch(n){case Re.CAMERA:return C.Source.Camera;case Re.MICROPHONE:return C.Source.Microphone;case Re.SCREEN_SHARE:return C.Source.ScreenShare;case Re.SCREEN_SHARE_AUDIO:return C.Source.ScreenShareAudio;default:return C.Source.Unknown}}function od(n,e){return n.width*n.height<e.width*e.height}function Df(n,e){var t;return(t=n.layers)===null||t===void 0?void 0:t.find(i=>i.quality===e)}const Af=5e3,Jn=[];var He;(function(n){n[n.LOW=0]="LOW",n[n.MEDIUM=1]="MEDIUM",n[n.HIGH=2]="HIGH"})(He||(He={}));class C extends yt.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=z,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),Af):this.handleAppVisibilityChanged()},this.log=ct((r=i.loggerName)!==null&&r!==void 0?r:Qe.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)),Y(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"&&(Jn.forEach(s=>{s.parentElement===null&&!e&&(e=s)}),e&&Jn.splice(Jn.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),en(this.mediaStreamTrack,e);const i=e.srcObject.getTracks(),r=i.some(s=>s.kind==="audio");return e.play().then(()=>{this.emit(r?O.AudioPlaybackStarted:O.VideoPlaybackStarted)}).catch(s=>{s.name==="NotAllowedError"?this.emit(r?O.AudioPlaybackFailed:O.VideoPlaybackFailed,s):s.name==="AbortError"?z.debug("".concat(r?"audio":"video"," playback aborted, likely due to new play request")):z.warn("could not playback ".concat(r?"audio":"video"),s),r&&e&&i.some(o=>o.kind==="video")&&s.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(O.ElementAttached,e),e}detach(e){try{if(e){tn(this.mediaStreamTrack,e);const i=this.attachedElements.indexOf(e);return i>=0&&(this.attachedElements.splice(i,1),this.recycleElement(e),this.emit(O.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(i=>{tn(this.mediaStreamTrack,i),t.push(i),this.recycleElement(i),this.emit(O.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=ct(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),Jn.forEach(i=>{i.parentElement||(t=!1)}),t&&Jn.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(){Je()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){Je()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function en(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)),(!rn()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=t.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==t&&(e.srcObject=t,(rn()||nn())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=t,e.play().catch(()=>{})},0))}function tn(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 Xe.AUDIO;case e.Video:return Xe.VIDEO;default:return Xe.DATA}}n.kindToProto=r;function s(d){switch(d){case Xe.AUDIO:return e.Audio;case Xe.VIDEO:return e.Video;default:return e.Unknown}}n.kindFromProto=s;function o(d){switch(d){case t.Camera:return Re.CAMERA;case t.Microphone:return Re.MICROPHONE;case t.ScreenShare:return Re.SCREEN_SHARE;case t.ScreenShareAudio:return Re.SCREEN_SHARE_AUDIO;default:return Re.UNKNOWN}}n.sourceToProto=o;function a(d){switch(d){case Re.CAMERA:return t.Camera;case Re.MICROPHONE:return t.Microphone;case Re.SCREEN_SHARE:return t.ScreenShare;case Re.SCREEN_SHARE_AUDIO:return t.ScreenShareAudio;default:return t.Unknown}}n.sourceFromProto=a;function c(d){switch(d){case Ar.ACTIVE:return i.Active;case Ar.PAUSED:return i.Paused;default:return i.Unknown}}n.streamStateFromProto=c})(C||(C={}));const xf="|",cd="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function Lf(n){const e=n.split(xf);return e.length>1?[e[0],n.substr(e[0].length+1)]:[n,""]}function Le(n){return new Fe(e=>Oe.setTimeout(e,n))}function Gi(){return"addTransceiver"in RTCPeerConnection.prototype}function cs(){return"addTrack"in RTCPeerConnection.prototype}function Nf(){return typeof ResizeObserver!==void 0&&typeof IntersectionObserver!==void 0}function Uf(){return Gi()}function dd(){if(!("getCapabilities"in RTCRtpSender)||rn()||nn())return!1;const n=RTCRtpSender.getCapabilities("video");let e=!1;if(n){for(const t of n.codecs)if(t.mimeType.toLowerCase()==="video/av1"){e=!0;break}}return e}function ld(){if(!("getCapabilities"in RTCRtpSender)||nn())return!1;if(rn()){const t=Ve();if(t!=null&&t.version&&ut(t.version,"16")<0||(t==null?void 0:t.os)==="iOS"&&(t!=null&&t.osVersion)&&ut(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.toLowerCase()==="video/vp9"){e=!0;break}}return e}function lt(n){return n==="av1"||n==="vp9"}function zi(n){return!document||Gn()?!1:(n||(n=document.createElement("audio")),"setSinkId"in n)}function Ff(){return zi()}function ud(){return typeof RTCPeerConnection>"u"?!1:Gi()||cs()}function nn(){var n;return((n=Ve())===null||n===void 0?void 0:n.name)==="Firefox"}function hd(){const n=Ve();return!!n&&n.name==="Chrome"&&n.os!=="iOS"}function rn(){var n;return((n=Ve())===null||n===void 0?void 0:n.name)==="Safari"}function Gn(){const n=Ve();return(n==null?void 0:n.name)==="Safari"||(n==null?void 0:n.os)==="iOS"}function md(){const n=Ve();return(n==null?void 0:n.name)==="Safari"&&n.version.startsWith("17.")||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&ut(n.osVersion,"17")>=0}function Bf(n){return n||(n=Ve()),(n==null?void 0:n.name)==="Safari"&&ut(n.version,"18.3")>0||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&&ut(n.osVersion,"18.3")>0}function fd(){var n,e;return Je()?(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 jf(){const n=Ve(),e="17.2";if(n)return n.name!=="Safari"&&n.os!=="iOS"||n.os==="iOS"&&n.osVersion&&ut(n.osVersion,e)>=0?!0:n.name==="Safari"&&ut(n.version,e)>=0}function Je(){return typeof document<"u"}function bt(){return navigator.product=="ReactNative"}function kn(n){return n.hostname.endsWith(".livekit.cloud")||n.hostname.endsWith(".livekit.run")}function ds(n){return kn(n)?n.hostname.split(".")[0]:null}function pd(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function gd(){if(!bt())return;let n=pd();if(n)return n.platform}function vd(){if(Je())return window.devicePixelRatio;if(bt()){let n=pd();if(n)return n.devicePixelRatio}return 1}function ut(n,e){const t=n.split("."),i=e.split("."),r=Math.min(t.length,i.length);for(let s=0;s<r;++s){const o=parseInt(t[s],10),a=parseInt(i[s],10);if(o>a)return 1;if(o<a)return-1;if(s===r-1&&o===a)return 0}return n===""&&e!==""?-1:e===""?1:t.length==i.length?0:t.length<i.length?-1:1}function Vf(n){for(const e of n)e.target.handleResize(e)}function qf(n){for(const e of n)e.target.handleVisibilityChanged(e)}let ls=null;const yd=()=>(ls||(ls=new ResizeObserver(Vf)),ls);let us=null;const bd=()=>(us||(us=new IntersectionObserver(qf,{root:null,rootMargin:"0px"})),us);function Kf(){var n;const e=new Ao({sdk:xo.JS,protocol:Yc,version:Qc});return bt()&&(e.os=(n=gd())!==null&&n!==void 0?n:""),e}let hs;function Wf(){return hs||(hs=ms()),hs.clone()}function ms(){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 o=r.captureStream(),[a]=o.getTracks();if(!a)throw Error("Could not get empty media stream video track");return a.enabled=t,a}let zn;function $i(){if(!zn){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(),[zn]=i.stream.getAudioTracks(),!zn)throw Error("Could not get empty media stream audio track");zn.enabled=!1}return zn.clone()}class tt{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 Hf(n,e){const t=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:.8,minDecibels:-100,maxDecibels:-80},e),i=as();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])),o=i.createAnalyser();o.minDecibels=t.minDecibels,o.maxDecibels=t.maxDecibels,o.fftSize=t.fftSize,o.smoothingTimeConstant=t.smoothingTimeConstant,s.connect(o);const a=new Uint8Array(o.frequencyBinCount);return{calculateVolume:()=>{o.getByteFrequencyData(a);let l=0;for(const h of a)l+=Math.pow(h/255,2);return Math.sqrt(l/a.length)},analyser:o,cleanup:()=>f(this,void 0,void 0,function*(){yield i.close(),t.cloneTrack&&r.stop()})}}function Jf(n){return Zc.includes(n)}function kd(n){return ed.includes(n)}function sn(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 Gf(n){return n.startsWith("http")?n.replace(/^(http)/,"ws"):n}function $n(n){return n.startsWith("ws")?n.replace(/^(ws)/,"http"):n}function zf(n,e){return n.segments.map(t=>{let{id:i,text:r,language:s,startTime:o,endTime:a,final:c}=t;var d;const l=(d=e.get(i))!==null&&d!==void 0?d:Date.now(),u=Date.now();return c?e.delete(i):e.set(i,l),{id:i,text:r,startTime:Number.parseInt(o.toString()),endTime:Number.parseInt(a.toString()),final:c,language:s,firstReceivedTime:l,lastReceivedTime:u}})}function $f(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 Td(n){switch(n.reason){case ue.LeaveRequest:return n.context;case ue.Cancelled:return Ze.CLIENT_INITIATED;case ue.NotAllowed:return Ze.USER_REJECTED;case ue.ServerUnreachable:return Ze.JOIN_FAILURE;default:return Ze.UNKNOWN_REASON}}function Qi(n){return n!==void 0?Number(n):void 0}function an(n){return n!==void 0?BigInt(n):void 0}function qt(n){return!!n&&!(n instanceof MediaStreamTrack)&&n.isLocal}function ht(n){return!!n&&n.kind==C.Kind.Audio}function Pt(n){return!!n&&n.kind==C.Kind.Video}function Kt(n){return qt(n)&&Pt(n)}function It(n){return qt(n)&&ht(n)}function Yi(n){return!!n&&!n.isLocal}function Qf(n){return!!n&&!n.isLocal}function fs(n){return Yi(n)&&Pt(n)}function Sd(n){return n.isLocal}function Yf(n){return!n.isLocal}function Xf(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 Zf(n){var e;const t=n.get("Cache-Control");if(t){const i=(e=t.match(/(?:^|[,\s])max-age=(\d+)/))===null||e===void 0?void 0:e[1];if(i)return parseInt(i,10)}}function ep(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const i=tp(n,e);return t?i:ps(i,"v1")}function tp(n,e){const t=new URL(Gf(n));return e.forEach((i,r)=>{t.searchParams.set(r,i)}),ps(t,"rtc")}function np(n){const e=new URL($n(n));return ps(e,"validate")}function Cd(n){return n.endsWith("/")?n:"".concat(n,"/")}function ps(n,e){return n.pathname="".concat(Cd(n.pathname)).concat(e),n}function Ed(n){if(typeof n=="string")return jo.fromJson(JSON.parse(n),{ignoreUnknownFields:!0});if(n instanceof ArrayBuffer)return jo.fromBinary(new Uint8Array(n));throw new Error("could not decode websocket message: ".concat(typeof n))}function ip(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Unknown reason";if(!(n instanceof AbortSignal))return e;const t=n.reason;switch(typeof t){case"string":return t;case"object":return t instanceof Error?t.message:e;default:return"toString"in t?t.toString():e}}const wd="AES-GCM",rp=10,Qn="lk_e2ee",sp={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:rp,keyringSize:16};var Mt;(function(n){n.SetKey="setKey",n.RatchetRequest="ratchetRequest",n.KeyRatcheted="keyRatcheted"})(Mt||(Mt={}));var gs;(function(n){n.KeyRatcheted="keyRatcheted"})(gs||(gs={}));var Ot;(function(n){n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError"})(Ot||(Ot={}));var vs;(function(n){n.Error="cryptorError"})(vs||(vs={}));function Rd(){return _d()||Xi()}function Xi(){return typeof window.RTCRtpScriptTransform<"u"}function _d(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}function ap(n){return"type"in n}function op(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{name:wd},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 Pd(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 Id(n){return f(this,void 0,void 0,function*(){return yield crypto.subtle.importKey("raw",n,"HKDF",!1,["deriveBits","deriveKey"])})}function Md(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 cp(n,e){return f(this,void 0,void 0,function*(){const t=Md(n.algorithm.name,e),i=yield crypto.subtle.deriveKey(t,n,{name:wd,length:128},!1,["encrypt","decrypt"]);return{material:n,encryptionKey:i}})}function dp(){return window.crypto.getRandomValues(new Uint8Array(32))}function lp(n,e){return f(this,void 0,void 0,function*(){const t=Md(n.algorithm.name,e);return crypto.subtle.deriveBits(t,n,256)})}function up(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 hp(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 mp=2,Od=3;function fp(n){const e=[];for(var t=0,i=0;i<n.length;++i){var r=n[i];r<=Od&&t>=mp&&(e.push(Od),t=0),e.push(r),r==0?++t:t=0}return new Uint8Array(e)}function Dd(n){var e,t,i,r,s;if(((e=n.value)===null||e===void 0?void 0:e.case)!=="sipDtmf"&&((t=n.value)===null||t===void 0?void 0:t.case)!=="metrics"&&((i=n.value)===null||i===void 0?void 0:i.case)!=="speaker"&&((r=n.value)===null||r===void 0?void 0:r.case)!=="transcription"&&((s=n.value)===null||s===void 0?void 0:s.case)!=="encryptedPacket")return new Ro({value:n.value})}class Ad extends yt.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(t,i,r)=>{z.debug("key ratcheted event received",{ratchetResult:t,participantId:i,keyIndex:r})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},sp),e),this.on(Mt.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(Mt.SetKey,r)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,t){this.emit(Mt.RatchetRequest,e,t)}}class pp extends Ad{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 Pd(e):yield Id(e);this.onSetEncryptionKey(t)})}}var Zi;(function(n){n[n.InvalidKey=0]="InvalidKey",n[n.MissingKey=1]="MissingKey",n[n.InternalError=2]="InternalError"})(Zi||(Zi={}));class gp extends et{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zi.InternalError,i=arguments.length>2?arguments[2]:void 0;super(40,e),this.reason=t,this.participantIdentity=i}}class vp extends yt.EventEmitter{constructor(e,t){super(),this.decryptDataRequests=new Map,this.encryptDataRequests=new Map,this.onWorkerMessage=i=>{var r,s;const{kind:o,data:a}=i.data;switch(o){case"error":if(z.error(a.error.message),a.uuid){const l=this.decryptDataRequests.get(a.uuid);if(l!=null&&l.reject){l.reject(a.error);break}const u=this.encryptDataRequests.get(a.uuid);if(u!=null&&u.reject){u.reject(a.error);break}}this.emit(Ot.EncryptionError,a.error,a.participantIdentity);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)});break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)}),this.encryptionEnabled!==a.enabled&&a.participantIdentity===((r=this.room)===null||r===void 0?void 0:r.localParticipant.identity))this.emit(Ot.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const l=(s=this.room)===null||s===void 0?void 0:s.getParticipantByIdentity(a.participantIdentity);if(!l)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(Ot.ParticipantEncryptionStatusChanged,a.enabled,l)}break;case"ratchetKey":this.keyProvider.emit(Mt.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break;case"decryptDataResponse":const c=this.decryptDataRequests.get(a.uuid);c!=null&&c.resolve&&c.resolve(a);break;case"encryptDataResponse":const d=this.encryptDataRequests.get(a.uuid);d!=null&&d.resolve&&d.resolve(a);break}},this.onWorkerError=i=>{z.error("e2ee worker encountered an error:",{error:i.error}),this.emit(Ot.EncryptionError,i.error,void 0)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1,this.dataChannelEncryptionEnabled=t}get isEnabled(){return this.encryptionEnabled}get isDataChannelEncryptionEnabled(){return this.isEnabled&&this.dataChannelEncryptionEnabled}setup(e){if(!Rd())throw new qn("tried to setup end-to-end encryption on an unsupported browser");if(z.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:df.getLevel()}};this.worker&&(z.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){z.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){!e||e.length===0?z.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(A.RTPVideoMapUpdate,t=>{this.postRTPMap(t)})}setupEventListeners(e,t){e.on(M.TrackPublished,(i,r)=>this.setParticipantCryptorEnabled(i.trackInfo.encryption!==be.NONE,r.identity)),e.on(M.ConnectionStateChanged,i=>{i===re.Connected&&e.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{this.setParticipantCryptorEnabled(s.trackInfo.encryption!==be.NONE,r.identity)})})}).on(M.TrackUnsubscribed,(i,r,s)=>{var o;const a={kind:"removeTransform",data:{participantIdentity:s.identity,trackId:i.mediaStreamID}};(o=this.worker)===null||o===void 0||o.postMessage(a)}).on(M.TrackSubscribed,(i,r,s)=>{this.setupE2EEReceiver(i,s.identity,r.trackInfo)}).on(M.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(x.LocalSenderCreated,(i,r)=>f(this,void 0,void 0,function*(){this.setupE2EESender(r,i)})),e.localParticipant.on(x.LocalTrackPublished,i=>{if(!Pt(i.track)||!Gn())return;const r={kind:"updateCodec",data:{trackId:i.track.mediaStreamID,codec:Hn(i.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(r)}),t.on(Mt.SetKey,i=>this.postKey(i)).on(Mt.RatchetRequest,(i,r)=>this.postRatchetRequest(i,r))}encryptData(e){return f(this,void 0,void 0,function*(){if(!this.worker)throw Error("could not encrypt data, worker is missing");const t=crypto.randomUUID(),i={kind:"encryptDataRequest",data:{uuid:t,payload:e,participantIdentity:this.room.localParticipant.identity}},r=new tt;return r.onFinally=()=>{this.encryptDataRequests.delete(t)},this.encryptDataRequests.set(t,r),this.worker.postMessage(i),r.promise})}handleEncryptedData(e,t,i,r){if(!this.worker)throw Error("could not handle encrypted data, worker is missing");const s=crypto.randomUUID(),o={kind:"decryptDataRequest",data:{uuid:s,payload:e,iv:t,participantIdentity:i,keyIndex:r}},a=new tt;return a.onFinally=()=>{this.decryptDataRequests.delete(s)},this.decryptDataRequests.set(s,a),this.worker.postMessage(o),a.promise}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 o={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(o)}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"?Hn(i.mimeType):void 0)}}setupE2EESender(e,t){if(!qt(e)||!t){t||z.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(Xi()&&!hd()){const s={kind:"decode",participantIdentity:i,trackId:t,codec:r};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{if(Qn in e&&r){const c={kind:"updateCodec",data:{trackId:t,codec:r,participantIdentity:i}};this.worker.postMessage(c);return}let s=e.writableStream,o=e.readableStream;if(!s||!o){const c=e.createEncodedStreams();e.writableStream=c.writable,s=c.writable,e.readableStream=c.readable,o=c.readable}const a={kind:"decode",data:{readableStream:o,writableStream:s,trackId:t,codec:r,participantIdentity:i,isReuse:Qn in e}};this.worker.postMessage(a,[o,s])}e[Qn]=!0}})}handleSender(e,t,i){var r;if(!(Qn 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(Xi()&&!hd()){z.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{z.info("initialize encoded streams");const s=e.createEncodedStreams(),o={kind:"encode",data:{readableStream:s.readable,writableStream:s.writable,codec:i,trackId:t,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(o,[s.readable,s.writable])}e[Qn]=!0}}}const yp=500,bp=15e3;class Tn{constructor(){this.failedConnectionAttempts=new Map,this.backOffPromises=new Map}static getInstance(){return this._instance||(this._instance=new Tn),this._instance}addFailedConnectionAttempt(e){var t;const i=new URL(e),r=ds(i);if(!r)return;let s=(t=this.failedConnectionAttempts.get(r))!==null&&t!==void 0?t:0;this.failedConnectionAttempts.set(r,s+1),this.backOffPromises.set(r,Le(Math.min(yp*Math.pow(2,s),bp)))}getBackOffPromise(e){const t=new URL(e),i=t&&ds(t);return i&&this.backOffPromises.get(i)||Promise.resolve()}resetFailedConnectionAttempts(e){const t=new URL(e),i=t&&ds(t);i&&(this.failedConnectionAttempts.set(i,0),this.backOffPromises.set(i,Promise.resolve()))}resetAll(){this.backOffPromises.clear(),this.failedConnectionAttempts.clear()}}Tn._instance=null;const ys="default";class De{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new De),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=De.userMediaPromiseMap)===null||s===void 0?void 0:s.size)>0){z.debug("awaiting getUserMedia promise");try{t?yield De.userMediaPromiseMap.get(t):yield Promise.all(De.userMediaPromiseMap.values())}catch{z.warn("error waiting for media permissons")}}let o=yield navigator.mediaDevices.enumerateDevices();if(r&&!(rn()&&i.hasDeviceInUse(t))&&(o.filter(c=>c.kind===t).length===0||o.some(c=>{const d=c.label==="",l=t?c.kind===t:!0;return d&&l}))){const c={video:t!=="audioinput"&&t!=="audiooutput",audio:t!=="videoinput"&&{deviceId:{ideal:"default"}}},d=yield navigator.mediaDevices.getUserMedia(c);o=yield navigator.mediaDevices.enumerateDevices(),d.getTracks().forEach(l=>{l.stop()})}return i._previousDevices=o,t&&(o=o.filter(a=>a.kind===t)),o})()})}normalizeDeviceId(e,t,i){return f(this,void 0,void 0,function*(){if(t!==ys)return t;const r=yield this.getDevices(e),s=r.find(a=>a.deviceId===ys);if(!s){z.warn("could not reliably determine default device");return}const o=r.find(a=>a.deviceId!==ys&&a.groupId===(i??s.groupId));if(!o){z.warn("could not reliably determine default device");return}return o==null?void 0:o.deviceId})}hasDeviceInUse(e){return e?De.userMediaPromiseMap.has(e):De.userMediaPromiseMap.size>0}}De.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],De.userMediaPromiseMap=new Map;var Yn;(function(n){n[n.WAITING=0]="WAITING",n[n.RUNNING=1]="RUNNING",n[n.COMPLETED=2]="COMPLETED"})(Yn||(Yn={}));class kp{constructor(){this.pendingTasks=new Map,this.taskMutex=new xe,this.nextTaskIndex=0}run(e){return f(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:Yn.WAITING};this.pendingTasks.set(t.id,t);const i=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=Yn.RUNNING,yield e()}finally{t.status=Yn.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())}}class Tp{get readyState(){return this.ws.readyState}constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var i,r;if(!((i=t.signal)===null||i===void 0)&&i.aborted)throw new DOMException("This operation was aborted","AbortError");this.url=e;const s=new WebSocket(e,(r=t.protocols)!==null&&r!==void 0?r:[]);s.binaryType="arraybuffer",this.ws=s;const o=function(){let{closeCode:a,reason:c}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return s.close(a,c)};this.opened=new Fe((a,c)=>{const d=()=>{c(K.websocket("Encountered websocket error during connection establishment"))};s.onopen=()=>{a({readable:new ReadableStream({start(l){s.onmessage=u=>{let{data:h}=u;return l.enqueue(h)},s.onerror=u=>l.error(u)},cancel:o}),writable:new WritableStream({write(l){s.send(l)},abort(){s.close()},close:o}),protocol:s.protocol,extensions:s.extensions}),s.removeEventListener("error",d)},s.addEventListener("error",d)}),this.closed=new Fe((a,c)=>{const d=()=>f(this,void 0,void 0,function*(){const l=new Fe(h=>{s.readyState!==WebSocket.CLOSED&&s.addEventListener("close",m=>{h(m)},{once:!0})}),u=yield Fe.race([Le(250),l]);u?a(u):c(K.websocket("Encountered unspecified websocket error without a timely close event"))});s.onclose=l=>{let{code:u,reason:h}=l;a({closeCode:u,reason:h}),s.removeEventListener("error",d)},s.addEventListener("error",d)}),t.signal&&(t.signal.onabort=()=>s.close()),this.close=o}}const Sp=["syncState","trickle","offer","answer","simulate","leave"];function Cp(n){const e=Sp.indexOf(n.case)>=0;return z.trace("request allowed to bypass queue:",{canPass:e,req:n}),e}var me;(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"})(me||(me={}));const Ep=250;class bs{get currentState(){return this.state}get isDisconnected(){return this.state===me.DISCONNECTING||this.state===me.DISCONNECTED}get isEstablishingConnection(){return this.state===me.CONNECTING||this.state===me.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=me.DISCONNECTED,this.log=z,this._requestId=0,this.useV0SignalPath=!1,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.onMediaSectionsRequirement=void 0},this.log=ct((i=t.loggerName)!==null&&i!==void 0?i:Qe.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new kp,this.queuedRequests=[],this.closingLock=new xe,this.connectionLock=new xe,this.state=me.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,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){return d.state=me.CONNECTING,d.options=a,yield d.connect(s,o,a,c,l)})()})}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=me.RECONNECTING,this.clearPingInterval(),yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:i,reconnectReason:r}),void 0,this.useV0SignalPath)})}connect(e,t,i,r){return f(this,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){const u=yield d.connectionLock.lock();d.connectOptions=a,d.useV0SignalPath=l;const h=Kf(),m=l?wp(o,h,a):Rp(o,h,a),v=ep(s,m,l).toString(),g=np(v).toString();return new Promise((S,k)=>f(d,void 0,void 0,function*(){var R,_;try{let y=!1;const b=U=>f(this,void 0,void 0,function*(){if(y)return;y=!0;const N=U instanceof Event?U.currentTarget:U,W=ip(N,"Abort handler called");this.streamWriter&&!this.isDisconnected?this.sendLeave().then(()=>this.close(W)).catch(ee=>{this.log.error(ee),this.close()}):this.close(),T(),k(K.cancelled(W))});c==null||c.addEventListener("abort",b);const T=()=>{clearTimeout(L),c==null||c.removeEventListener("abort",b)},L=setTimeout(()=>{b(K.timeout("room connection has timed out (signal)"))},a.websocketTimeout),F=(U,N)=>{this.handleSignalConnected(U,L,N)},P=new URL(v);P.searchParams.has("access_token")&&P.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(P),Object.assign({reconnect:a.reconnect,reconnectReason:a.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new Tp(v);try{this.ws.closed.then(B=>{var q;this.isEstablishingConnection&&k(K.internal("Websocket got closed during a (re)connection attempt: ".concat(B.reason))),B.closeCode!==1e3&&(this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:B.reason,code:B.closeCode,wasClean:B.closeCode===1e3,state:this.state})),this.state===me.CONNECTED&&this.handleOnClose((q=B.reason)!==null&&q!==void 0?q:"Unexpected WS error"))}).catch(B=>{this.isEstablishingConnection&&k(K.internal("Websocket error during a (re)connection attempt: ".concat(B)))});const U=yield this.ws.opened.catch(B=>f(this,void 0,void 0,function*(){if(this.state!==me.CONNECTED){this.state=me.DISCONNECTED,clearTimeout(L);const q=yield this.handleConnectionError(B,g);k(q);return}this.handleWSError(B),k(B)}));if(clearTimeout(L),!U)return;const N=U.readable.getReader();this.streamWriter=U.writable.getWriter();const W=yield N.read();if(N.releaseLock(),!W.value)throw K.internal("no message received as first message");const ee=Ed(W.value),Te=this.validateFirstMessage(ee,(R=a.reconnect)!==null&&R!==void 0?R:!1);if(!Te.isValid){k(Te.error);return}((_=ee.message)===null||_===void 0?void 0:_.case)==="join"&&(this.pingTimeoutDuration=ee.message.value.pingTimeout,this.pingIntervalDuration=ee.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})));const I=Te.shouldProcessFirstMessage?ee:void 0;F(U,I),S(Te.response)}catch(U){k(U)}finally{T()}}finally{u()}}))})()})}startReadingLoop(e,t){return f(this,void 0,void 0,function*(){for(t&&this.handleSignalResponse(t);;){this.signalLatency&&(yield Le(this.signalLatency));const{done:i,value:r}=yield e.read();if(i)break;const s=Ed(r);this.handleSignalResponse(s)}})}close(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Close method called on signal client";return(function*(){if([me.DISCONNECTING||me.DISCONNECTED].includes(e.state)){e.log.debug("ignoring signal close as it's already in disconnecting state");return}const r=yield e.closingLock.lock();try{if(e.clearPingInterval(),t&&(e.state=me.DISCONNECTING),e.ws){e.ws.close({closeCode:1e3,reason:i});const s=e.ws.closed;e.ws=void 0,e.streamWriter=void 0,yield Promise.race([s,Le(Ep)])}}catch(s){e.log.debug("websocket error while closing",Object.assign(Object.assign({},e.logContext),{error:s}))}finally{t&&(e.state=me.DISCONNECTED),r()}})()})}sendOffer(e,t){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:Sn(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:Sn(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 Pi({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new Ii({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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return(function*(){const a=s.getNextRequestId();return yield s.sendRequest({case:"updateMetadata",value:new Ur({requestId:a,metadata:i,name:r,attributes:o})}),a})()})}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 Jo({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new $o({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:pe.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new Xo({timestamp:pe.parse(Date.now()),rtt:pe.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new Nr({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new Oi({reason:Ze.CLIENT_INITIATED,action:gn.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&&!Cp(t)&&i.state===me.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 Le(i.signalLatency)),i.isDisconnected){i.log.debug("skipping signal request (type: ".concat(t.case,") - SignalClient disconnected"));return}if(!i.streamWriter){i.log.error("cannot send signal request before connected, type: ".concat(t==null?void 0:t.case),i.logContext);return}const o=new fm({message:t});try{i.useJSON?yield i.streamWriter.write(o.toJsonString()):yield i.streamWriter.write(o.toBinary())}catch(a){i.log.error("error sending signal message",Object.assign(Object.assign({},i.logContext),{error:a}))}})()})}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 o=xd(r.value);this.onAnswer&&this.onAnswer(o,r.value.id,r.value.midToTrackId)}else if(r.case==="offer"){const o=xd(r.value);this.onOffer&&this.onOffer(o,r.value.id,r.value.midToTrackId)}else if(r.case==="trickle"){const o=JSON.parse(r.value.candidateInit);this.onTrickle&&this.onTrickle(o,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)):r.case==="mediaSectionsRequirement"?this.onMediaSectionsRequirement&&this.onMediaSectionsRequirement(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===me.DISCONNECTED)return;const t=this.onClose;yield this.close(void 0,e),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=Oe.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&&Oe.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=Oe.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&Oe.clearInterval(this.pingInterval)}handleSignalConnected(e,t,i){this.state=me.CONNECTED,clearTimeout(t),this.startPingInterval(),this.startReadingLoop(e.readable.getReader(),i)}validateFirstMessage(e,t){var i,r,s,o,a;return((i=e.message)===null||i===void 0?void 0:i.case)==="join"?{isValid:!0,response:e.message.value}:this.state===me.RECONNECTING&&((r=e.message)===null||r===void 0?void 0:r.case)!=="leave"?((s=e.message)===null||s===void 0?void 0:s.case)==="reconnect"?{isValid:!0,response:e.message.value}:(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),{isValid:!0,response:void 0,shouldProcessFirstMessage:!0}):this.isEstablishingConnection&&((o=e.message)===null||o===void 0?void 0:o.case)==="leave"?{isValid:!1,error:K.leaveRequest("Received leave request while trying to (re)connect",e.message.value.reason)}:t?{isValid:!1,error:K.internal("Unexpected first message")}:{isValid:!1,error:K.internal("did not receive join response, got ".concat((a=e.message)===null||a===void 0?void 0:a.case," instead"))}}handleConnectionError(e,t){return f(this,void 0,void 0,function*(){try{const i=yield fetch(t);switch(i.status){case 404:return K.serviceNotFound("v1 RTC path not found. Consider upgrading your LiveKit server version","v0-rtc");case 401:case 403:const r=yield i.text();return K.notAllowed(r,i.status);default:break}return e instanceof K?e:K.internal("Encountered unknown websocket error during connection: ".concat(e),{status:i.status,statusText:i.statusText})}catch(i){return i instanceof K?i:K.serverUnreachable(i instanceof Error?i.message:"server was not reachable")}})}}function xd(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 Sn(n,e){return new jt({sdp:n.sdp,type:n.type,id:e})}function wp(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",bt()?"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}function Rp(n,e,t){const i=new URLSearchParams;i.set("access_token",n);const r=new Vm({clientInfo:e,connectionSettings:new Zo({autoSubscribe:!!t.autoSubscribe,adaptiveStream:!!t.adaptiveStream}),reconnect:!!t.reconnect,participantSid:t.sid?t.sid:void 0});t.reconnectReason&&(r.reconnectReason=t.reconnectReason);const s=new qm({joinRequest:r.toBinary()});return i.set("join_request",btoa(new TextDecoder("utf-8").decode(s.toBinary()))),i}class Ld{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 _p{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 mt={},ks={},Ts={exports:{}},Nd;function Ss(){if(Nd)return Ts.exports;Nd=1;var n=Ts.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")})}),Ts.exports}var Ud;function Pp(){return Ud||(Ud=1,(function(n){var e=function(a){return String(Number(a))===a?Number(a):a},t=function(a,c,d,l){if(l&&!d)c[l]=e(a[1]);else for(var u=0;u<d.length;u+=1)a[u+1]!=null&&(c[d[u]]=e(a[u+1]))},i=function(a,c,d){var l=a.name&&a.names;a.push&&!c[a.push]?c[a.push]=[]:l&&!c[a.name]&&(c[a.name]={});var u=a.push?{}:l?c[a.name]:c;t(d.match(a.reg),u,a.names,a.name),a.push&&c[a.push].push(u)},r=Ss(),s=RegExp.prototype.test.bind(/^([a-z])=(.*)/);n.parse=function(a){var c={},d=[],l=c;return a.split(/(\r\n|\r|\n)/).filter(s).forEach(function(u){var h=u[0],m=u.slice(2);h==="m"&&(d.push({rtp:[],fmtp:[]}),l=d[d.length-1]);for(var v=0;v<(r[h]||[]).length;v+=1){var g=r[h][v];if(g.reg.test(m))return i(g,l,m)}}),c.media=d,c};var o=function(a,c){var d=c.split(/=(.+)/,2);return d.length===2?a[d[0]]=e(d[1]):d.length===1&&c.length>1&&(a[d[0]]=void 0),a};n.parseParams=function(a){return a.split(/;\s?/).reduce(o,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(a){return a.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(a){for(var c=[],d=a.split(" ").map(e),l=0;l<d.length;l+=3)c.push({component:d[l],ip:d[l+1],port:d[l+2]});return c},n.parseImageAttributes=function(a){return a.split(" ").map(function(c){return c.substring(1,c.length-1).split(",").reduce(o,{})})},n.parseSimulcastStreamList=function(a){return a.split(";").map(function(c){return c.split(",").map(function(d){var l,u=!1;return d[0]!=="~"?l=e(d):(l=e(d.substring(1,d.length)),u=!0),{scid:l,paused:u}})})}})(ks)),ks}var Cs,Fd;function Ip(){if(Fd)return Cs;Fd=1;var n=Ss(),e=/%[sdv%]/g,t=function(o){var a=1,c=arguments,d=c.length;return o.replace(e,function(l){if(a>=d)return l;var u=c[a];switch(a+=1,l){case"%%":return"%";case"%s":return String(u);case"%d":return Number(u);case"%v":return""}})},i=function(o,a,c){var d=a.format instanceof Function?a.format(a.push?c:c[a.name]):a.format,l=[o+"="+d];if(a.names)for(var u=0;u<a.names.length;u+=1){var h=a.names[u];a.name?l.push(c[a.name][h]):l.push(c[a.names[u]])}else l.push(c[a.name]);return t.apply(null,l)},r=["v","o","s","i","u","e","p","c","b","t","r","z","a"],s=["i","c","b","a"];return Cs=function(o,a){a=a||{},o.version==null&&(o.version=0),o.name==null&&(o.name=" "),o.media.forEach(function(u){u.payloads==null&&(u.payloads="")});var c=a.outerOrder||r,d=a.innerOrder||s,l=[];return c.forEach(function(u){n[u].forEach(function(h){h.name in o&&o[h.name]!=null?l.push(i(u,h,o)):h.push in o&&o[h.push]!=null&&o[h.push].forEach(function(m){l.push(i(u,h,m))})})}),o.media.forEach(function(u){l.push(i("m",n.m[0],u)),d.forEach(function(h){n[h].forEach(function(m){m.name in u&&u[m.name]!=null?l.push(i(h,m,u)):m.push in u&&u[m.push]!=null&&u[m.push].forEach(function(v){l.push(i(h,m,v))})})})}),l.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 qi(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 Ki(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(o=>t.apply(this,[o]))})}var Tf=Object.freeze({__proto__:null,removeExtmapAllowMixed:Yr,shimAddIceCandidateNullOrEmpty:qi,shimConnectionState:Qr,shimMaxMessageSize:ji,shimParameterlessSetLocalDescription:Ki,shimRTCIceCandidate:Bi,shimRTCIceCandidateRelayProtocol:$r,shimSendThrowTypeError:Vi});function Sf(){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=hc,i=vf(n),r={browserDetails:i,commonShim:Tf,extractVersion:Vn,disableLog:pf,disableWarnings:gf,sdp:kf};switch(i.browser){case"chrome":if(!wc||!Jr||!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=wc,qi(n,i),Ki(n),vc(n,i),yc(n),Jr(n,i),bc(n),Cc(n,i),kc(n),Tc(n),Ec(n,i),Bi(n),$r(n),Qr(n),ji(n,i),Vi(n),Yr(n,i);break;case"firefox":if(!Nc||!Gr||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),r;t("adapter.js shimming firefox."),r.browserShim=Nc,qi(n,i),Ki(n),Rc(n,i),Gr(n,i),_c(n),Mc(n),Pc(n),Ic(n),Oc(n),Dc(n),Ac(n),xc(n),Lc(n),Bi(n),Qr(n),ji(n,i),Vi(n);break;case"safari":if(!Jc||!e.shimSafari)return t("Safari shim is not included in this adapter release."),r;t("adapter.js shimming safari."),r.browserShim=Jc,qi(n,i),Ki(n),qc(n),Wc(n),Bc(n),Uc(n),Fc(n),Kc(n),jc(n),Hc(n),Bi(n),$r(n),ji(n,i),Vi(n),Yr(n,i);break;default:t("Unsupported browser!");break}return r}Sf({window:typeof window>"u"?void 0:window});var Xr,$c;class Fe extends($c=Promise){constructor(e){super(e)}catch(e){return super.catch(e)}static reject(e){return super.reject(e)}static all(e){return super.all(e)}static race(e){return super.race(e)}}Xr=Fe,Fe.resolve=n=>Reflect.get($c,"resolve",Xr).call(Xr,n);const Cf=/version\/(\d+(\.?_?\d+)+)/i;let Zr;function Ve(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(Zr===void 0||e){const i=Ef.find(r=>{let{test:s}=r;return s.test(t)});Zr=i==null?void 0:i.describe(t)}return Zr}const Ef=[{test:/firefox|iceweasel|fxios/i,describe(n){return{name:"Firefox",version:Wi(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:es(n)}}},{test:/chrom|crios|crmo/i,describe(n){return{name:"Chrome",version:Wi(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("crios")?"iOS":void 0,osVersion:es(n)}}},{test:/safari|applewebkit/i,describe(n){return{name:"Safari",version:Wi(Cf,n),os:n.includes("mobile/")?"iOS":"macOS",osVersion:es(n)}}}];function Wi(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 es(n){return n.includes("mac os")?Wi(/\(.+?(\d+_\d+(:?_\d+)?)/,n,1).replace(/_/g,"."):void 0}var wf="2.17.2";const Qc=wf,Yc=16;class Ze extends Error{constructor(e,t,i){super(t||"an error has occurred"),this.name="LiveKitError",this.code=e,typeof(i==null?void 0:i.cause)<"u"&&(this.cause=i==null?void 0:i.cause)}}class Xt extends Ze{}class Rf extends Ze{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Simulated failure";super(-1,e),this.name="simulated"}}var ue;(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",n[n.WebSocket=6]="WebSocket",n[n.ServiceNotFound=7]="ServiceNotFound"})(ue||(ue={}));class K extends Xt{constructor(e,t,i,r){super(1,e),this.name="ConnectionError",this.status=i,this.reason=t,this.context=r,this.reasonName=ue[t]}static notAllowed(e,t,i){return new K(e,ue.NotAllowed,t,i)}static timeout(e){return new K(e,ue.Timeout)}static leaveRequest(e,t){return new K(e,ue.LeaveRequest,void 0,t)}static internal(e,t){return new K(e,ue.InternalError,void 0,t)}static cancelled(e){return new K(e,ue.Cancelled)}static serverUnreachable(e,t){return new K(e,ue.ServerUnreachable,t)}static websocket(e,t,i){return new K(e,ue.WebSocket,t,i)}static serviceNotFound(e,t){return new K(e,ue.ServiceNotFound,void 0,t)}}class qn extends Ze{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class ct extends Ze{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class Xc extends Ze{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class Te extends Ze{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Vt extends Ze{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class _f extends Ze{constructor(e){super(14,e??"unable to publish data"),this.name="PublishDataError"}}class ts extends Ze{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class ns extends Xt{constructor(e,t){super(15,e),this.name="SignalRequestError",this.reason=t,this.reasonName=typeof t=="string"?t:jr[t]}}var Be;(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",n[n.EncryptionTypeMismatch=8]="EncryptionTypeMismatch"})(Be||(Be={}));class Qe extends Xt{constructor(e,t){super(16,e),this.name="DataStreamError",this.reason=t,this.reasonName=Be[t]}}class Zt extends Ze{constructor(e){super(18,e),this.name="SignalReconnectError"}}var Kn;(function(n){n.PermissionDenied="PermissionDenied",n.NotFound="NotFound",n.DeviceInUse="DeviceInUse",n.Other="Other"})(Kn||(Kn={})),(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})(Kn||(Kn={}));class Oe{}Oe.setTimeout=function(){return setTimeout(...arguments)},Oe.setInterval=function(){return setInterval(...arguments)},Oe.clearTimeout=function(){return clearTimeout(...arguments)},Oe.clearInterval=function(){return clearInterval(...arguments)};var M;(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"})(M||(M={}));var x;(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"})(x||(x={}));var A;(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"})(A||(A={}));var D;(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"})(D||(D={}));function Pf(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))}class ce{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 Zc=["opus","red"],If=["vp8","h264"],ed=["vp8","h264","vp9","av1","h265"];function td(n){return!!If.find(e=>e===n)}const nd=td;var is;(function(n){n[n.PREFER_REGRESSION=0]="PREFER_REGRESSION",n[n.SIMULCAST=1]="SIMULCAST",n[n.REGRESSION=2]="REGRESSION"})(is||(is={}));var Hi;(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}})(Hi||(Hi={}));const bn={h90:new ce(160,90,9e4,20),h180:new ce(320,180,16e4,20),h216:new ce(384,216,18e4,20),h360:new ce(640,360,45e4,20),h540:new ce(960,540,8e5,25),h720:new ce(1280,720,17e5,30),h1080:new ce(1920,1080,3e6,30),h1440:new ce(2560,1440,5e6,30),h2160:new ce(3840,2160,8e6,30)},Ji={h120:new ce(160,120,7e4,20),h180:new ce(240,180,125e3,20),h240:new ce(320,240,14e4,20),h360:new ce(480,360,33e4,20),h480:new ce(640,480,5e5,20),h540:new ce(720,540,6e5,25),h720:new ce(960,720,13e5,30),h1080:new ce(1440,1080,23e5,30),h1440:new ce(1920,1440,38e5,30)},Wn={h360fps3:new ce(640,360,2e5,3,"medium"),h360fps15:new ce(640,360,4e5,15,"medium"),h720fps5:new ce(1280,720,8e5,5,"medium"),h720fps15:new ce(1280,720,15e5,15,"medium"),h720fps30:new ce(1280,720,2e6,30,"medium"),h1080fps15:new ce(1920,1080,25e5,15,"medium"),h1080fps30:new ce(1920,1080,5e6,30,"medium"),original:new ce(0,0,7e6,30,"medium")};function id(n,e,t){var i,r,s,o;const{optionsWithoutProcessor:a,audioProcessor:c,videoProcessor:d}=ad(n??{}),l=e==null?void 0:e.processor,u=t==null?void 0:t.processor,h=a??{};return h.audio===!0&&(h.audio={}),h.video===!0&&(h.video={}),h.audio&&(rs(h.audio,e),(i=(s=h.audio).deviceId)!==null&&i!==void 0||(s.deviceId={ideal:"default"}),(c||l)&&(h.audio.processor=c??l)),h.video&&(rs(h.video,t),(r=(o=h.video).deviceId)!==null&&r!==void 0||(o.deviceId={ideal:"default"}),(d||u)&&(h.video.processor=d??u)),h}function rs(n,e){return Object.keys(e).forEach(t=>{n[t]===void 0&&(n[t]=e[t])}),n}function ss(n){var e,t,i,r;const s={};if(n.video)if(typeof n.video=="object"){const o={},a=o,c=n.video;Object.keys(c).forEach(d=>{switch(d){case"resolution":rs(a,c.resolution);break;default:a[d]=c[d]}}),s.video=o,(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 rd(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=as();if(i){const r=i.createAnalyser();r.fftSize=2048;const s=r.frequencyBinCount,o=new Uint8Array(s);i.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(r),yield Ne(t),r.getByteTimeDomainData(o);const c=o.some(d=>d!==128&&d!==0);return i.close(),!c}return!1})()})}function as(){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)}finally{(r=window.document.body)===null||r===void 0||r.removeEventListener("click",i)}});t.addEventListener("statechange",()=>{var r;t.state==="closed"&&((r=window.document.body)===null||r===void 0||r.removeEventListener("click",i))}),window.document.body.addEventListener("click",i)}return t}}function Mf(n){return n==="audioinput"?E.Source.Microphone:n==="videoinput"?E.Source.Camera:E.Source.Unknown}function os(n){return n===E.Source.Microphone?"audioinput":n===E.Source.Camera?"videoinput":void 0}function sd(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,rn()?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 Hn(n){return n.split("/")[1].toLowerCase()}function Of(n){const e=[];return n.forEach(t=>{t.track!==void 0&&e.push(new Lr({cid:t.track.mediaStreamID,track:t.trackInfo}))}),e}function Y(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?Y(n.track):{})}}function Df(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function Af(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 ad(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:Pf(e)}}function xf(n){switch(n){case Re.CAMERA:return E.Source.Camera;case Re.MICROPHONE:return E.Source.Microphone;case Re.SCREEN_SHARE:return E.Source.ScreenShare;case Re.SCREEN_SHARE_AUDIO:return E.Source.ScreenShareAudio;default:return E.Source.Unknown}}function od(n,e){return n.width*n.height<e.width*e.height}function Lf(n,e){var t;return(t=n.layers)===null||t===void 0?void 0:t.find(i=>i.quality===e)}const Nf=5e3,Jn=[];var Ge;(function(n){n[n.LOW=0]="LOW",n[n.MEDIUM=1]="MEDIUM",n[n.HIGH=2]="HIGH"})(Ge||(Ge={}));class E extends yt.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=E.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=z,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),Nf):this.handleAppVisibilityChanged()},this.log=ot((r=i.loggerName)!==null&&r!==void 0?r:$e.Track),this.loggerContextCb=i.loggerContextCb,this.setMaxListeners(100),this.kind=t,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=E.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Y(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let t="audio";this.kind===E.Kind.Video&&(t="video"),this.attachedElements.length===0&&this.kind===E.Kind.Video&&this.addAppVisibilityListener(),e||(t==="audio"&&(Jn.forEach(s=>{s.parentElement===null&&!e&&(e=s)}),e&&Jn.splice(Jn.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),en(this.mediaStreamTrack,e);const i=e.srcObject.getTracks(),r=i.some(s=>s.kind==="audio");return e.play().then(()=>{this.emit(r?D.AudioPlaybackStarted:D.VideoPlaybackStarted)}).catch(s=>{s.name==="NotAllowedError"?this.emit(r?D.AudioPlaybackFailed:D.VideoPlaybackFailed,s):s.name==="AbortError"?z.debug("".concat(r?"audio":"video"," playback aborted, likely due to new play request")):z.warn("could not playback ".concat(r?"audio":"video"),s),r&&e&&i.some(o=>o.kind==="video")&&s.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(D.ElementAttached,e),e}detach(e){try{if(e){tn(this.mediaStreamTrack,e);const i=this.attachedElements.indexOf(e);return i>=0&&(this.attachedElements.splice(i,1),this.recycleElement(e),this.emit(D.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(i=>{tn(this.mediaStreamTrack,i),t.push(i),this.recycleElement(i),this.emit(D.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=ot(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),Jn.forEach(i=>{i.parentElement||(t=!1)}),t&&Jn.push(e)}}handleAppVisibilityChanged(){return f(this,void 0,void 0,function*(){this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===E.Kind.Video&&setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){ze()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){ze()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function en(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)),(!rn()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=t.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==t&&(e.srcObject=t,(rn()||nn())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=t,e.play().catch(()=>{})},0))}function tn(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 Ye.AUDIO;case e.Video:return Ye.VIDEO;default:return Ye.DATA}}n.kindToProto=r;function s(d){switch(d){case Ye.AUDIO:return e.Audio;case Ye.VIDEO:return e.Video;default:return e.Unknown}}n.kindFromProto=s;function o(d){switch(d){case t.Camera:return Re.CAMERA;case t.Microphone:return Re.MICROPHONE;case t.ScreenShare:return Re.SCREEN_SHARE;case t.ScreenShareAudio:return Re.SCREEN_SHARE_AUDIO;default:return Re.UNKNOWN}}n.sourceToProto=o;function a(d){switch(d){case Re.CAMERA:return t.Camera;case Re.MICROPHONE:return t.Microphone;case Re.SCREEN_SHARE:return t.ScreenShare;case Re.SCREEN_SHARE_AUDIO:return t.ScreenShareAudio;default:return t.Unknown}}n.sourceFromProto=a;function c(d){switch(d){case Ar.ACTIVE:return i.Active;case Ar.PAUSED:return i.Paused;default:return i.Unknown}}n.streamStateFromProto=c})(E||(E={}));const Uf="|",cd="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function Ff(n){const e=n.split(Uf);return e.length>1?[e[0],n.substr(e[0].length+1)]:[n,""]}function Ne(n){return new Fe(e=>Oe.setTimeout(e,n))}function Gi(){return"addTransceiver"in RTCPeerConnection.prototype}function cs(){return"addTrack"in RTCPeerConnection.prototype}function Bf(){return typeof ResizeObserver!==void 0&&typeof IntersectionObserver!==void 0}function jf(){return Gi()}function dd(){if(!("getCapabilities"in RTCRtpSender)||rn()||nn())return!1;const n=RTCRtpSender.getCapabilities("video");let e=!1;if(n){for(const t of n.codecs)if(t.mimeType.toLowerCase()==="video/av1"){e=!0;break}}return e}function ld(){if(!("getCapabilities"in RTCRtpSender)||nn())return!1;if(rn()){const t=Ve();if(t!=null&&t.version&<(t.version,"16")<0||(t==null?void 0:t.os)==="iOS"&&(t!=null&&t.osVersion)&<(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.toLowerCase()==="video/vp9"){e=!0;break}}return e}function dt(n){return n==="av1"||n==="vp9"}function zi(n){return!document||Gn()?!1:(n||(n=document.createElement("audio")),"setSinkId"in n)}function Vf(){return zi()}function ud(){return typeof RTCPeerConnection>"u"?!1:Gi()||cs()}function nn(){var n;return((n=Ve())===null||n===void 0?void 0:n.name)==="Firefox"}function hd(){const n=Ve();return!!n&&n.name==="Chrome"&&n.os!=="iOS"}function rn(){var n;return((n=Ve())===null||n===void 0?void 0:n.name)==="Safari"}function Gn(){const n=Ve();return(n==null?void 0:n.name)==="Safari"||(n==null?void 0:n.os)==="iOS"}function md(){const n=Ve();return(n==null?void 0:n.name)==="Safari"&&n.version.startsWith("17.")||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&<(n.osVersion,"17")>=0}function qf(n){return n||(n=Ve()),(n==null?void 0:n.name)==="Safari"&<(n.version,"18.3")>0||(n==null?void 0:n.os)==="iOS"&&!!(n!=null&&n.osVersion)&<(n.osVersion,"18.3")>0}function fd(){var n,e;return ze()?(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 Kf(){const n=Ve(),e="17.2";if(n)return n.name!=="Safari"&&n.os!=="iOS"||n.os==="iOS"&&n.osVersion&<(n.osVersion,e)>=0?!0:n.name==="Safari"&<(n.version,e)>=0}function ze(){return typeof document<"u"}function bt(){return navigator.product=="ReactNative"}function kn(n){return n.hostname.endsWith(".livekit.cloud")||n.hostname.endsWith(".livekit.run")}function ds(n){return kn(n)?n.hostname.split(".")[0]:null}function pd(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function gd(){if(!bt())return;let n=pd();if(n)return n.platform}function vd(){if(ze())return window.devicePixelRatio;if(bt()){let n=pd();if(n)return n.devicePixelRatio}return 1}function lt(n,e){const t=n.split("."),i=e.split("."),r=Math.min(t.length,i.length);for(let s=0;s<r;++s){const o=parseInt(t[s],10),a=parseInt(i[s],10);if(o>a)return 1;if(o<a)return-1;if(s===r-1&&o===a)return 0}return n===""&&e!==""?-1:e===""?1:t.length==i.length?0:t.length<i.length?-1:1}function Wf(n){for(const e of n)e.target.handleResize(e)}function Hf(n){for(const e of n)e.target.handleVisibilityChanged(e)}let ls=null;const yd=()=>(ls||(ls=new ResizeObserver(Wf)),ls);let us=null;const bd=()=>(us||(us=new IntersectionObserver(Hf,{root:null,rootMargin:"0px"})),us);function Jf(){var n;const e=new Ao({sdk:xo.JS,protocol:Yc,version:Qc});return bt()&&(e.os=(n=gd())!==null&&n!==void 0?n:""),e}let hs;function Gf(){return hs||(hs=ms()),hs.clone()}function ms(){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 o=r.captureStream(),[a]=o.getTracks();if(!a)throw Error("Could not get empty media stream video track");return a.enabled=t,a}let zn;function $i(){if(!zn){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(),[zn]=i.stream.getAudioTracks(),!zn)throw Error("Could not get empty media stream audio track");zn.enabled=!1}return zn.clone()}class et{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 zf(n,e){const t=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:.8,minDecibels:-100,maxDecibels:-80},e),i=as();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])),o=i.createAnalyser();o.minDecibels=t.minDecibels,o.maxDecibels=t.maxDecibels,o.fftSize=t.fftSize,o.smoothingTimeConstant=t.smoothingTimeConstant,s.connect(o);const a=new Uint8Array(o.frequencyBinCount);return{calculateVolume:()=>{o.getByteFrequencyData(a);let l=0;for(const h of a)l+=Math.pow(h/255,2);return Math.sqrt(l/a.length)},analyser:o,cleanup:()=>f(this,void 0,void 0,function*(){yield i.close(),t.cloneTrack&&r.stop()})}}function $f(n){return Zc.includes(n)}function kd(n){return ed.includes(n)}function sn(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 Qf(n){return n.startsWith("http")?n.replace(/^(http)/,"ws"):n}function $n(n){return n.startsWith("ws")?n.replace(/^(ws)/,"http"):n}function Yf(n,e){return n.segments.map(t=>{let{id:i,text:r,language:s,startTime:o,endTime:a,final:c}=t;var d;const l=(d=e.get(i))!==null&&d!==void 0?d:Date.now(),u=Date.now();return c?e.delete(i):e.set(i,l),{id:i,text:r,startTime:Number.parseInt(o.toString()),endTime:Number.parseInt(a.toString()),final:c,language:s,firstReceivedTime:l,lastReceivedTime:u}})}function Xf(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 Td(n){switch(n.reason){case ue.LeaveRequest:return n.context;case ue.Cancelled:return Xe.CLIENT_INITIATED;case ue.NotAllowed:return Xe.USER_REJECTED;case ue.ServerUnreachable:return Xe.JOIN_FAILURE;default:return Xe.UNKNOWN_REASON}}function Qi(n){return n!==void 0?Number(n):void 0}function an(n){return n!==void 0?BigInt(n):void 0}function qt(n){return!!n&&!(n instanceof MediaStreamTrack)&&n.isLocal}function ut(n){return!!n&&n.kind==E.Kind.Audio}function Pt(n){return!!n&&n.kind==E.Kind.Video}function Kt(n){return qt(n)&&Pt(n)}function It(n){return qt(n)&&ut(n)}function Yi(n){return!!n&&!n.isLocal}function Zf(n){return!!n&&!n.isLocal}function fs(n){return Yi(n)&&Pt(n)}function Sd(n){return n.isLocal}function ep(n){return!n.isLocal}function tp(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 np(n){var e;const t=n.get("Cache-Control");if(t){const i=(e=t.match(/(?:^|[,\s])max-age=(\d+)/))===null||e===void 0?void 0:e[1];if(i)return parseInt(i,10)}}function ip(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const i=rp(n,e);return t?i:ps(i,"v1")}function rp(n,e){const t=new URL(Qf(n));return e.forEach((i,r)=>{t.searchParams.set(r,i)}),ps(t,"rtc")}function sp(n){const e=new URL($n(n));return ps(e,"validate")}function Cd(n){return n.endsWith("/")?n:"".concat(n,"/")}function ps(n,e){return n.pathname="".concat(Cd(n.pathname)).concat(e),n}function Ed(n){if(typeof n=="string")return jo.fromJson(JSON.parse(n),{ignoreUnknownFields:!0});if(n instanceof ArrayBuffer)return jo.fromBinary(new Uint8Array(n));throw new Error("could not decode websocket message: ".concat(typeof n))}function ap(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Unknown reason";if(!(n instanceof AbortSignal))return e;const t=n.reason;switch(typeof t){case"string":return t;case"object":return t instanceof Error?t.message:e;default:return"toString"in t?t.toString():e}}const wd="AES-GCM",op=10,Qn="lk_e2ee",cp={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:op,keyringSize:16};var Mt;(function(n){n.SetKey="setKey",n.RatchetRequest="ratchetRequest",n.KeyRatcheted="keyRatcheted"})(Mt||(Mt={}));var gs;(function(n){n.KeyRatcheted="keyRatcheted"})(gs||(gs={}));var Ot;(function(n){n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError"})(Ot||(Ot={}));var vs;(function(n){n.Error="cryptorError"})(vs||(vs={}));function Rd(){return _d()||Xi()}function Xi(){return typeof window.RTCRtpScriptTransform<"u"}function _d(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}function dp(n){return"type"in n}function lp(n){return f(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{name:wd},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 Pd(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 Id(n){return f(this,void 0,void 0,function*(){return yield crypto.subtle.importKey("raw",n,"HKDF",!1,["deriveBits","deriveKey"])})}function Md(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 up(n,e){return f(this,void 0,void 0,function*(){const t=Md(n.algorithm.name,e),i=yield crypto.subtle.deriveKey(t,n,{name:wd,length:128},!1,["encrypt","decrypt"]);return{material:n,encryptionKey:i}})}function hp(){return window.crypto.getRandomValues(new Uint8Array(32))}function mp(n,e){return f(this,void 0,void 0,function*(){const t=Md(n.algorithm.name,e);return crypto.subtle.deriveBits(t,n,256)})}function fp(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 pp(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 gp=2,Od=3;function vp(n){const e=[];for(var t=0,i=0;i<n.length;++i){var r=n[i];r<=Od&&t>=gp&&(e.push(Od),t=0),e.push(r),r==0?++t:t=0}return new Uint8Array(e)}function Dd(n){var e,t,i,r,s;if(((e=n.value)===null||e===void 0?void 0:e.case)!=="sipDtmf"&&((t=n.value)===null||t===void 0?void 0:t.case)!=="metrics"&&((i=n.value)===null||i===void 0?void 0:i.case)!=="speaker"&&((r=n.value)===null||r===void 0?void 0:r.case)!=="transcription"&&((s=n.value)===null||s===void 0?void 0:s.case)!=="encryptedPacket")return new Ro({value:n.value})}class Ad extends yt.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(t,i,r)=>{z.debug("key ratcheted event received",{ratchetResult:t,participantId:i,keyIndex:r})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},cp),e),this.on(Mt.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(Mt.SetKey,r)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,t){this.emit(Mt.RatchetRequest,e,t)}}class yp extends Ad{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 Pd(e):yield Id(e);this.onSetEncryptionKey(t)})}}var Zi;(function(n){n[n.InvalidKey=0]="InvalidKey",n[n.MissingKey=1]="MissingKey",n[n.InternalError=2]="InternalError"})(Zi||(Zi={}));class bp extends Ze{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zi.InternalError,i=arguments.length>2?arguments[2]:void 0;super(40,e),this.reason=t,this.participantIdentity=i}}class kp extends yt.EventEmitter{constructor(e,t){super(),this.decryptDataRequests=new Map,this.encryptDataRequests=new Map,this.onWorkerMessage=i=>{var r,s;const{kind:o,data:a}=i.data;switch(o){case"error":if(z.error(a.error.message),a.uuid){const l=this.decryptDataRequests.get(a.uuid);if(l!=null&&l.reject){l.reject(a.error);break}const u=this.encryptDataRequests.get(a.uuid);if(u!=null&&u.reject){u.reject(a.error);break}}this.emit(Ot.EncryptionError,a.error,a.participantIdentity);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)});break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)}),this.encryptionEnabled!==a.enabled&&a.participantIdentity===((r=this.room)===null||r===void 0?void 0:r.localParticipant.identity))this.emit(Ot.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const l=(s=this.room)===null||s===void 0?void 0:s.getParticipantByIdentity(a.participantIdentity);if(!l)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(Ot.ParticipantEncryptionStatusChanged,a.enabled,l)}break;case"ratchetKey":this.keyProvider.emit(Mt.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break;case"decryptDataResponse":const c=this.decryptDataRequests.get(a.uuid);c!=null&&c.resolve&&c.resolve(a);break;case"encryptDataResponse":const d=this.encryptDataRequests.get(a.uuid);d!=null&&d.resolve&&d.resolve(a);break}},this.onWorkerError=i=>{z.error("e2ee worker encountered an error:",{error:i.error}),this.emit(Ot.EncryptionError,i.error,void 0)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1,this.dataChannelEncryptionEnabled=t}get isEnabled(){return this.encryptionEnabled}get isDataChannelEncryptionEnabled(){return this.isEnabled&&this.dataChannelEncryptionEnabled}setup(e){if(!Rd())throw new qn("tried to setup end-to-end encryption on an unsupported browser");if(z.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:hf.getLevel()}};this.worker&&(z.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){z.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){!e||e.length===0?z.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(A.RTPVideoMapUpdate,t=>{this.postRTPMap(t)})}setupEventListeners(e,t){e.on(M.TrackPublished,(i,r)=>this.setParticipantCryptorEnabled(i.trackInfo.encryption!==ke.NONE,r.identity)),e.on(M.ConnectionStateChanged,i=>{i===re.Connected&&e.remoteParticipants.forEach(r=>{r.trackPublications.forEach(s=>{this.setParticipantCryptorEnabled(s.trackInfo.encryption!==ke.NONE,r.identity)})})}).on(M.TrackUnsubscribed,(i,r,s)=>{var o;const a={kind:"removeTransform",data:{participantIdentity:s.identity,trackId:i.mediaStreamID}};(o=this.worker)===null||o===void 0||o.postMessage(a)}).on(M.TrackSubscribed,(i,r,s)=>{this.setupE2EEReceiver(i,s.identity,r.trackInfo)}).on(M.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(x.LocalSenderCreated,(i,r)=>f(this,void 0,void 0,function*(){this.setupE2EESender(r,i)})),e.localParticipant.on(x.LocalTrackPublished,i=>{if(!Pt(i.track)||!Gn())return;const r={kind:"updateCodec",data:{trackId:i.track.mediaStreamID,codec:Hn(i.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(r)}),t.on(Mt.SetKey,i=>this.postKey(i)).on(Mt.RatchetRequest,(i,r)=>this.postRatchetRequest(i,r))}encryptData(e){return f(this,void 0,void 0,function*(){if(!this.worker)throw Error("could not encrypt data, worker is missing");const t=crypto.randomUUID(),i={kind:"encryptDataRequest",data:{uuid:t,payload:e,participantIdentity:this.room.localParticipant.identity}},r=new et;return r.onFinally=()=>{this.encryptDataRequests.delete(t)},this.encryptDataRequests.set(t,r),this.worker.postMessage(i),r.promise})}handleEncryptedData(e,t,i,r){if(!this.worker)throw Error("could not handle encrypted data, worker is missing");const s=crypto.randomUUID(),o={kind:"decryptDataRequest",data:{uuid:s,payload:e,iv:t,participantIdentity:i,keyIndex:r}},a=new et;return a.onFinally=()=>{this.decryptDataRequests.delete(s)},this.decryptDataRequests.set(s,a),this.worker.postMessage(o),a.promise}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 o={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(o)}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"?Hn(i.mimeType):void 0)}}setupE2EESender(e,t){if(!qt(e)||!t){t||z.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(Xi()&&!hd()){const s={kind:"decode",participantIdentity:i,trackId:t,codec:r};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{if(Qn in e&&r){const c={kind:"updateCodec",data:{trackId:t,codec:r,participantIdentity:i}};this.worker.postMessage(c);return}let s=e.writableStream,o=e.readableStream;if(!s||!o){const c=e.createEncodedStreams();e.writableStream=c.writable,s=c.writable,e.readableStream=c.readable,o=c.readable}const a={kind:"decode",data:{readableStream:o,writableStream:s,trackId:t,codec:r,participantIdentity:i,isReuse:Qn in e}};this.worker.postMessage(a,[o,s])}e[Qn]=!0}})}handleSender(e,t,i){var r;if(!(Qn 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(Xi()&&!hd()){z.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{z.info("initialize encoded streams");const s=e.createEncodedStreams(),o={kind:"encode",data:{readableStream:s.readable,writableStream:s.writable,codec:i,trackId:t,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(o,[s.readable,s.writable])}e[Qn]=!0}}}const Tp=500,Sp=15e3;class Tn{constructor(){this.failedConnectionAttempts=new Map,this.backOffPromises=new Map}static getInstance(){return this._instance||(this._instance=new Tn),this._instance}addFailedConnectionAttempt(e){var t;const i=new URL(e),r=ds(i);if(!r)return;let s=(t=this.failedConnectionAttempts.get(r))!==null&&t!==void 0?t:0;this.failedConnectionAttempts.set(r,s+1),this.backOffPromises.set(r,Ne(Math.min(Tp*Math.pow(2,s),Sp)))}getBackOffPromise(e){const t=new URL(e),i=t&&ds(t);return i&&this.backOffPromises.get(i)||Promise.resolve()}resetFailedConnectionAttempts(e){const t=new URL(e),i=t&&ds(t);i&&(this.failedConnectionAttempts.set(i,0),this.backOffPromises.set(i,Promise.resolve()))}resetAll(){this.backOffPromises.clear(),this.failedConnectionAttempts.clear()}}Tn._instance=null;const ys="default";class De{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new De),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=De.userMediaPromiseMap)===null||s===void 0?void 0:s.size)>0){z.debug("awaiting getUserMedia promise");try{t?yield De.userMediaPromiseMap.get(t):yield Promise.all(De.userMediaPromiseMap.values())}catch{z.warn("error waiting for media permissons")}}let o=yield navigator.mediaDevices.enumerateDevices();if(r&&!(rn()&&i.hasDeviceInUse(t))&&(o.filter(c=>c.kind===t).length===0||o.some(c=>{const d=c.label==="",l=t?c.kind===t:!0;return d&&l}))){const c={video:t!=="audioinput"&&t!=="audiooutput",audio:t!=="videoinput"&&{deviceId:{ideal:"default"}}},d=yield navigator.mediaDevices.getUserMedia(c);o=yield navigator.mediaDevices.enumerateDevices(),d.getTracks().forEach(l=>{l.stop()})}return i._previousDevices=o,t&&(o=o.filter(a=>a.kind===t)),o})()})}normalizeDeviceId(e,t,i){return f(this,void 0,void 0,function*(){if(t!==ys)return t;const r=yield this.getDevices(e),s=r.find(a=>a.deviceId===ys);if(!s){z.warn("could not reliably determine default device");return}const o=r.find(a=>a.deviceId!==ys&&a.groupId===(i??s.groupId));if(!o){z.warn("could not reliably determine default device");return}return o==null?void 0:o.deviceId})}hasDeviceInUse(e){return e?De.userMediaPromiseMap.has(e):De.userMediaPromiseMap.size>0}}De.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],De.userMediaPromiseMap=new Map;var Yn;(function(n){n[n.WAITING=0]="WAITING",n[n.RUNNING=1]="RUNNING",n[n.COMPLETED=2]="COMPLETED"})(Yn||(Yn={}));class Cp{constructor(){this.pendingTasks=new Map,this.taskMutex=new Le,this.nextTaskIndex=0}run(e){return f(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:Yn.WAITING};this.pendingTasks.set(t.id,t);const i=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=Yn.RUNNING,yield e()}finally{t.status=Yn.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())}}class Ep{get readyState(){return this.ws.readyState}constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var i,r;if(!((i=t.signal)===null||i===void 0)&&i.aborted)throw new DOMException("This operation was aborted","AbortError");this.url=e;const s=new WebSocket(e,(r=t.protocols)!==null&&r!==void 0?r:[]);s.binaryType="arraybuffer",this.ws=s;const o=function(){let{closeCode:a,reason:c}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return s.close(a,c)};this.opened=new Fe((a,c)=>{const d=()=>{c(K.websocket("Encountered websocket error during connection establishment"))};s.onopen=()=>{a({readable:new ReadableStream({start(l){s.onmessage=u=>{let{data:h}=u;return l.enqueue(h)},s.onerror=u=>l.error(u)},cancel:o}),writable:new WritableStream({write(l){s.send(l)},abort(){s.close()},close:o}),protocol:s.protocol,extensions:s.extensions}),s.removeEventListener("error",d)},s.addEventListener("error",d)}),this.closed=new Fe((a,c)=>{const d=()=>f(this,void 0,void 0,function*(){const l=new Fe(h=>{s.readyState!==WebSocket.CLOSED&&s.addEventListener("close",m=>{h(m)},{once:!0})}),u=yield Fe.race([Ne(250),l]);u?a(u):c(K.websocket("Encountered unspecified websocket error without a timely close event"))});s.onclose=l=>{let{code:u,reason:h}=l;a({closeCode:u,reason:h}),s.removeEventListener("error",d)},s.addEventListener("error",d)}),t.signal&&(t.signal.onabort=()=>s.close()),this.close=o}}const wp=["syncState","trickle","offer","answer","simulate","leave"];function Rp(n){const e=wp.indexOf(n.case)>=0;return z.trace("request allowed to bypass queue:",{canPass:e,req:n}),e}var me;(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"})(me||(me={}));const _p=250;class bs{get currentState(){return this.state}get isDisconnected(){return this.state===me.DISCONNECTING||this.state===me.DISCONNECTED}get isEstablishingConnection(){return this.state===me.CONNECTING||this.state===me.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=me.DISCONNECTED,this.log=z,this._requestId=0,this.useV0SignalPath=!1,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.onMediaSectionsRequirement=void 0},this.log=ot((i=t.loggerName)!==null&&i!==void 0?i:$e.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new Cp,this.queuedRequests=[],this.closingLock=new Le,this.connectionLock=new Le,this.state=me.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,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){return d.state=me.CONNECTING,d.options=a,yield d.connect(s,o,a,c,l)})()})}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=me.RECONNECTING,this.clearPingInterval(),yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:i,reconnectReason:r}),void 0,this.useV0SignalPath)})}connect(e,t,i,r){return f(this,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){const u=yield d.connectionLock.lock();d.connectOptions=a,d.useV0SignalPath=l;const h=Jf(),m=l?Pp(o,h,a):Ip(o,h,a),v=ip(s,m,l).toString(),g=sp(v).toString();return new Promise((S,k)=>f(d,void 0,void 0,function*(){var R,P;try{let y=!1;const b=U=>f(this,void 0,void 0,function*(){if(y)return;y=!0;const N=U instanceof Event?U.currentTarget:U,W=ap(N,"Abort handler called");this.streamWriter&&!this.isDisconnected?this.sendLeave().then(()=>this.close(W)).catch(ee=>{this.log.error(ee),this.close()}):this.close(),T(),k(K.cancelled(W))});c==null||c.addEventListener("abort",b);const T=()=>{clearTimeout(L),c==null||c.removeEventListener("abort",b)},L=setTimeout(()=>{b(K.timeout("room connection has timed out (signal)"))},a.websocketTimeout),B=(U,N)=>{this.handleSignalConnected(U,L,N)},I=new URL(v);I.searchParams.has("access_token")&&I.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(I),Object.assign({reconnect:a.reconnect,reconnectReason:a.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new Ep(v);try{this.ws.closed.then(F=>{var q;this.isEstablishingConnection&&k(K.internal("Websocket got closed during a (re)connection attempt: ".concat(F.reason))),F.closeCode!==1e3&&(this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:F.reason,code:F.closeCode,wasClean:F.closeCode===1e3,state:this.state})),this.state===me.CONNECTED&&this.handleOnClose((q=F.reason)!==null&&q!==void 0?q:"Unexpected WS error"))}).catch(F=>{this.isEstablishingConnection&&k(K.internal("Websocket error during a (re)connection attempt: ".concat(F)))});const U=yield this.ws.opened.catch(F=>f(this,void 0,void 0,function*(){if(this.state!==me.CONNECTED){this.state=me.DISCONNECTED,clearTimeout(L);const q=yield this.handleConnectionError(F,g);k(q);return}this.handleWSError(F),k(F)}));if(clearTimeout(L),!U)return;const N=U.readable.getReader();this.streamWriter=U.writable.getWriter();const W=yield N.read();if(N.releaseLock(),!W.value)throw K.internal("no message received as first message");const ee=Ed(W.value),Se=this.validateFirstMessage(ee,(R=a.reconnect)!==null&&R!==void 0?R:!1);if(!Se.isValid){k(Se.error);return}((P=ee.message)===null||P===void 0?void 0:P.case)==="join"&&(this.pingTimeoutDuration=ee.message.value.pingTimeout,this.pingIntervalDuration=ee.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})));const _=Se.shouldProcessFirstMessage?ee:void 0;B(U,_),S(Se.response)}catch(U){k(U)}finally{T()}}finally{u()}}))})()})}startReadingLoop(e,t){return f(this,void 0,void 0,function*(){for(t&&this.handleSignalResponse(t);;){this.signalLatency&&(yield Ne(this.signalLatency));const{done:i,value:r}=yield e.read();if(i)break;const s=Ed(r);this.handleSignalResponse(s)}})}close(){return f(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Close method called on signal client";return(function*(){if([me.DISCONNECTING||me.DISCONNECTED].includes(e.state)){e.log.debug("ignoring signal close as it's already in disconnecting state");return}const r=yield e.closingLock.lock();try{if(e.clearPingInterval(),t&&(e.state=me.DISCONNECTING),e.ws){e.ws.close({closeCode:1e3,reason:i});const s=e.ws.closed;e.ws=void 0,e.streamWriter=void 0,yield Promise.race([s,Ne(_p)])}}catch(s){e.log.debug("websocket error while closing",Object.assign(Object.assign({},e.logContext),{error:s}))}finally{t&&(e.state=me.DISCONNECTED),r()}})()})}sendOffer(e,t){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:Sn(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:Sn(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 Pi({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new Ii({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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return(function*(){const a=s.getNextRequestId();return yield s.sendRequest({case:"updateMetadata",value:new Ur({requestId:a,metadata:i,name:r,attributes:o})}),a})()})}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 Jo({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new $o({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:pe.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new Xo({timestamp:pe.parse(Date.now()),rtt:pe.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new Nr({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new Oi({reason:Xe.CLIENT_INITIATED,action:gn.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&&!Rp(t)&&i.state===me.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 Ne(i.signalLatency)),i.isDisconnected){i.log.debug("skipping signal request (type: ".concat(t.case,") - SignalClient disconnected"));return}if(!i.streamWriter){i.log.error("cannot send signal request before connected, type: ".concat(t==null?void 0:t.case),i.logContext);return}const o=new vm({message:t});try{i.useJSON?yield i.streamWriter.write(o.toJsonString()):yield i.streamWriter.write(o.toBinary())}catch(a){i.log.error("error sending signal message",Object.assign(Object.assign({},i.logContext),{error:a}))}})()})}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 o=xd(r.value);this.onAnswer&&this.onAnswer(o,r.value.id,r.value.midToTrackId)}else if(r.case==="offer"){const o=xd(r.value);this.onOffer&&this.onOffer(o,r.value.id,r.value.midToTrackId)}else if(r.case==="trickle"){const o=JSON.parse(r.value.candidateInit);this.onTrickle&&this.onTrickle(o,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)):r.case==="mediaSectionsRequirement"?this.onMediaSectionsRequirement&&this.onMediaSectionsRequirement(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===me.DISCONNECTED)return;const t=this.onClose;yield this.close(void 0,e),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=Oe.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&&Oe.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=Oe.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&Oe.clearInterval(this.pingInterval)}handleSignalConnected(e,t,i){this.state=me.CONNECTED,clearTimeout(t),this.startPingInterval(),this.startReadingLoop(e.readable.getReader(),i)}validateFirstMessage(e,t){var i,r,s,o,a;return((i=e.message)===null||i===void 0?void 0:i.case)==="join"?{isValid:!0,response:e.message.value}:this.state===me.RECONNECTING&&((r=e.message)===null||r===void 0?void 0:r.case)!=="leave"?((s=e.message)===null||s===void 0?void 0:s.case)==="reconnect"?{isValid:!0,response:e.message.value}:(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),{isValid:!0,response:void 0,shouldProcessFirstMessage:!0}):this.isEstablishingConnection&&((o=e.message)===null||o===void 0?void 0:o.case)==="leave"?{isValid:!1,error:K.leaveRequest("Received leave request while trying to (re)connect",e.message.value.reason)}:t?{isValid:!1,error:K.internal("Unexpected first message")}:{isValid:!1,error:K.internal("did not receive join response, got ".concat((a=e.message)===null||a===void 0?void 0:a.case," instead"))}}handleConnectionError(e,t){return f(this,void 0,void 0,function*(){try{const i=yield fetch(t);switch(i.status){case 404:return K.serviceNotFound("v1 RTC path not found. Consider upgrading your LiveKit server version","v0-rtc");case 401:case 403:const r=yield i.text();return K.notAllowed(r,i.status);default:break}return e instanceof K?e:K.internal("Encountered unknown websocket error during connection: ".concat(e),{status:i.status,statusText:i.statusText})}catch(i){return i instanceof K?i:K.serverUnreachable(i instanceof Error?i.message:"server was not reachable")}})}}function xd(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 Sn(n,e){return new jt({sdp:n.sdp,type:n.type,id:e})}function Pp(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",bt()?"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}function Ip(n,e,t){const i=new URLSearchParams;i.set("access_token",n);const r=new Wm({clientInfo:e,connectionSettings:new Zo({autoSubscribe:!!t.autoSubscribe,adaptiveStream:!!t.adaptiveStream}),reconnect:!!t.reconnect,participantSid:t.sid?t.sid:void 0});t.reconnectReason&&(r.reconnectReason=t.reconnectReason);const s=new Hm({joinRequest:r.toBinary()});return i.set("join_request",btoa(new TextDecoder("utf-8").decode(s.toBinary()))),i}class Ld{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 Mp{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 ht={},ks={},Ts={exports:{}},Nd;function Ss(){if(Nd)return Ts.exports;Nd=1;var n=Ts.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")})}),Ts.exports}var Ud;function Op(){return Ud||(Ud=1,(function(n){var e=function(a){return String(Number(a))===a?Number(a):a},t=function(a,c,d,l){if(l&&!d)c[l]=e(a[1]);else for(var u=0;u<d.length;u+=1)a[u+1]!=null&&(c[d[u]]=e(a[u+1]))},i=function(a,c,d){var l=a.name&&a.names;a.push&&!c[a.push]?c[a.push]=[]:l&&!c[a.name]&&(c[a.name]={});var u=a.push?{}:l?c[a.name]:c;t(d.match(a.reg),u,a.names,a.name),a.push&&c[a.push].push(u)},r=Ss(),s=RegExp.prototype.test.bind(/^([a-z])=(.*)/);n.parse=function(a){var c={},d=[],l=c;return a.split(/(\r\n|\r|\n)/).filter(s).forEach(function(u){var h=u[0],m=u.slice(2);h==="m"&&(d.push({rtp:[],fmtp:[]}),l=d[d.length-1]);for(var v=0;v<(r[h]||[]).length;v+=1){var g=r[h][v];if(g.reg.test(m))return i(g,l,m)}}),c.media=d,c};var o=function(a,c){var d=c.split(/=(.+)/,2);return d.length===2?a[d[0]]=e(d[1]):d.length===1&&c.length>1&&(a[d[0]]=void 0),a};n.parseParams=function(a){return a.split(/;\s?/).reduce(o,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(a){return a.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(a){for(var c=[],d=a.split(" ").map(e),l=0;l<d.length;l+=3)c.push({component:d[l],ip:d[l+1],port:d[l+2]});return c},n.parseImageAttributes=function(a){return a.split(" ").map(function(c){return c.substring(1,c.length-1).split(",").reduce(o,{})})},n.parseSimulcastStreamList=function(a){return a.split(";").map(function(c){return c.split(",").map(function(d){var l,u=!1;return d[0]!=="~"?l=e(d):(l=e(d.substring(1,d.length)),u=!0),{scid:l,paused:u}})})}})(ks)),ks}var Cs,Fd;function Dp(){if(Fd)return Cs;Fd=1;var n=Ss(),e=/%[sdv%]/g,t=function(o){var a=1,c=arguments,d=c.length;return o.replace(e,function(l){if(a>=d)return l;var u=c[a];switch(a+=1,l){case"%%":return"%";case"%s":return String(u);case"%d":return Number(u);case"%v":return""}})},i=function(o,a,c){var d=a.format instanceof Function?a.format(a.push?c:c[a.name]):a.format,l=[o+"="+d];if(a.names)for(var u=0;u<a.names.length;u+=1){var h=a.names[u];a.name?l.push(c[a.name][h]):l.push(c[a.names[u]])}else l.push(c[a.name]);return t.apply(null,l)},r=["v","o","s","i","u","e","p","c","b","t","r","z","a"],s=["i","c","b","a"];return Cs=function(o,a){a=a||{},o.version==null&&(o.version=0),o.name==null&&(o.name=" "),o.media.forEach(function(u){u.payloads==null&&(u.payloads="")});var c=a.outerOrder||r,d=a.innerOrder||s,l=[];return c.forEach(function(u){n[u].forEach(function(h){h.name in o&&o[h.name]!=null?l.push(i(u,h,o)):h.push in o&&o[h.push]!=null&&o[h.push].forEach(function(m){l.push(i(u,h,m))})})}),o.media.forEach(function(u){l.push(i("m",n.m[0],u)),d.forEach(function(h){n[h].forEach(function(m){m.name in u&&u[m.name]!=null?l.push(i(h,m,u)):m.push in u&&u[m.push]!=null&&u[m.push].forEach(function(v){l.push(i(h,m,v))})})})}),l.join(`\r
|
|
37
37
|
`)+`\r
|
|
38
|
-
`},Cs}var Bd;function Mp(){if(Bd)return mt;Bd=1;var n=Pp(),e=Ip(),t=Ss();return mt.grammar=t,mt.write=e,mt.parse=n.parse,mt.parseParams=n.parseParams,mt.parseFmtpConfig=n.parseFmtpConfig,mt.parsePayloads=n.parsePayloads,mt.parseRemoteCandidates=n.parseRemoteCandidates,mt.parseImageAttributes=n.parseImageAttributes,mt.parseSimulcastStreamList=n.parseSimulcastStreamList,mt}var Wt=Mp();function Es(n,e,t){var i,r,s;e===void 0&&(e=50),t===void 0&&(t={});var o=(i=t.isImmediate)!=null&&i,a=(r=t.callback)!=null&&r,c=t.maxWait,d=Date.now(),l=[];function u(){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(g,S){var k=o&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,d=Date.now(),!o){var _=n.apply(v,m);a&&a(_),l.forEach(function(y){return(0,y.resolve)(_)}),l=[]}},u()),k){var R=n.apply(v,m);return a&&a(R),g(R)}l.push({resolve:g,reject:S})})};return h.cancel=function(m){s!==void 0&&clearTimeout(s),l.forEach(function(v){return(0,v.reject)(m)}),l=[]},h}const Op=.7,Dp=20,on={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class jd extends yt.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=z,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Es(r=>f(this,void 0,void 0,function*(){this.emit(on.NegotiationStarted);try{yield this.createAndSendOffer()}catch(s){if(r)r(s);else throw s}}),Dp),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=ct((i=t.loggerName)!==null&&i!==void 0?i:Qe.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC(),this.offerLock=new xe}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:o}=Ap(e);this.remoteStereoMids=s,this.remoteNackMids=o}else if(e.type==="answer"){const s=Wt.parse((i=e.sdp)!==null&&i!==void 0?i:"");s.media.forEach(o=>{const a=ws(o.mid);o.type==="audio"&&this.trackBitrates.some(c=>{if(!c.transceiver||a!=c.transceiver.mid)return!1;let d=0;if(o.rtp.some(u=>u.codec.toUpperCase()===c.codec.toUpperCase()?(d=u.payload,!0):!1),d===0)return!0;let l=!1;for(const u of o.fmtp)if(u.payload===d){u.config=u.config.split(";").filter(h=>!h.includes("maxaveragebitrate")).join(";"),c.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(c.maxbr*1e3)),l=!0;break}return l||c.maxbr>0&&o.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(c.maxbr*1e3)}),!0})}),r=Wt.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(on.NegotiationComplete),e.sdp&&Wt.parse(e.sdp).media.forEach(o=>{o.type==="video"&&this.emit(on.RTPVideoPayloadTypes,o.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 a=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&a)yield this._pc.setRemoteDescription(a);else{this.renegotiate=!0,this.log.debug("requesting renegotiation",Object.assign({},this.logContext));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 o=Wt.parse((t=s.sdp)!==null&&t!==void 0?t:"");if(o.media.forEach(a=>{qd(a),a.type==="audio"?Vd(a,["all"],[]):a.type==="video"&&this.trackBitrates.some(c=>{if(!a.msid||!c.cid||!a.msid.includes(c.cid))return!1;let d=0;if(a.rtp.some(u=>u.codec.toUpperCase()===c.codec.toUpperCase()?(d=u.payload,!0):!1),d===0||(lt(c.codec)&&!rn()&&this.ensureVideoDDExtensionForSVC(a,o),!lt(c.codec)))return!0;const l=Math.round(c.maxbr*Op);for(const u of a.fmtp)if(u.payload===d){u.config.includes("x-google-start-bitrate")||(u.config+=";x-google-start-bitrate=".concat(l));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,Wt.write(o)),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=Wt.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(r=>{qd(r),r.type==="audio"&&Vd(r,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,Wt.write(i)),t})}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTransceiverOfKind(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new ke("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 ke("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(a=>{switch(a.type){case"transport":t=a.selectedCandidatePairId;break;case"candidate-pair":t===""&&a.selected&&(t=a.id),i.set(a.id,a);break;case"remote-candidate":r.set(a.id,"".concat(a.address,":").concat(a.port));break}}),t==="")return;const o=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(o!==void 0)return r.get(o)})}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 o={error:s,sdp:e.sdp};throw!i&&this.pc.remoteDescription&&(o.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:o})),new Vt(s)}})}ensureVideoDDExtensionForSVC(e,t){var i,r;if(!((i=e.ext)===null||i===void 0?void 0:i.some(o=>o.uri===cd))){if(this.ddExtID===0){let o=0;t.media.forEach(a=>{var c;a.type==="video"&&((c=a.ext)===null||c===void 0||c.forEach(d=>{d.value>o&&(o=d.value)}))}),this.ddExtID=o+1}(r=e.ext)===null||r===void 0||r.push({value:this.ddExtID,uri:cd})}}}function Vd(n,e,t){const i=ws(n.mid);let r=0;n.rtp.some(s=>s.codec==="opus"?(r=s.payload,!0):!1),r>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(i)&&!n.rtcpFb.some(s=>s.payload===r&&s.type==="nack")&&n.rtcpFb.push({payload:r,type:"nack"}),(e.includes(i)||e.length===1&&e[0]==="all")&&n.fmtp.some(s=>s.payload===r?(s.config.includes("stereo=1")||(s.config+=";stereo=1"),!0):!1))}function Ap(n){var e;const t=[],i=[],r=Wt.parse((e=n.sdp)!==null&&e!==void 0?e:"");let s=0;return r.media.forEach(o=>{var a;const c=ws(o.mid);o.type==="audio"&&(o.rtp.some(d=>d.codec==="opus"?(s=d.payload,!0):!1),!((a=o.rtcpFb)===null||a===void 0)&&a.some(d=>d.payload===s&&d.type==="nack")&&i.push(c),o.fmtp.some(d=>d.payload===s?(d.config.includes("sprop-stereo=1")&&t.push(c),!0):!1))}),{stereoMids:t,nackMids:i}}function qd(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)}}function ws(n){return typeof n=="number"?n.toFixed(0):n}const Rs="vp8",xp={audioPreset:Hi.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Wn.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Rs,backupCodec:!0,preConnectBuffer:!1},Kd={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Wd={deviceId:{ideal:"default"},resolution:bn.h720.resolution},Lp={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new oc,disconnectOnPageLeave:!0,webAudioMix:!1,singlePeerConnection:!0},_s={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ge;(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"})(ge||(ge={}));class Np{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}get mode(){return this._mode}constructor(e,t,i){var r;this.peerConnectionTimeout=_s.peerConnectionTimeout,this.log=z,this.updateState=()=>{var s,o;const a=this.state,c=this.requiredTransports.map(d=>d.getConnectionState());c.every(d=>d==="connected")?this.state=ge.CONNECTED:c.some(d=>d==="failed")?this.state=ge.FAILED:c.some(d=>d==="connecting")?this.state=ge.CONNECTING:c.every(d=>d==="closed")?this.state=ge.CLOSED:c.some(d=>d==="closed")?this.state=ge.CLOSING:c.every(d=>d==="new")&&(this.state=ge.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ge[a]," to ").concat(ge[this.state]),this.logContext),(s=this.onStateChange)===null||s===void 0||s.call(this,this.state,this.publisher.getConnectionState(),(o=this.subscriber)===null||o===void 0?void 0:o.getConnectionState()))},this.log=ct((r=i.loggerName)!==null&&r!==void 0?r:Qe.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=t!=="subscriber-primary",this.isSubscriberConnectionRequired=t==="subscriber-primary",this.publisher=new jd(e,i),this._mode=t,t!=="publisher-only"&&(this.subscriber=new jd(e,i),this.subscriber.onConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.subscriber.onIceCandidate=s=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,s,ot.SUBSCRIBER)},this.subscriber.onDataChannel=s=>{var o;(o=this.onDataChannel)===null||o===void 0||o.call(this,s)},this.subscriber.onTrack=s=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,s)}),this.publisher.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=s=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,s,ot.PUBLISHER)},this.publisher.onTrack=s=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,s)},this.publisher.onOffer=(s,o)=>{var a;(a=this.onPublisherOffer)===null||a===void 0||a.call(this,s,o)},this.state=ge.NEW,this.connectionLock=new xe,this.remoteOfferLock=new xe}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()}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*(){var e;if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const t=this.publisher;for(const i of t.getSenders())try{t.canRemoveTrack()&&t.removeTrack(i)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),(e=this.subscriber)===null||e===void 0?void 0:e.close()]),this.updateState()})}triggerIceRestart(){return f(this,void 0,void 0,function*(){this.subscriber&&(this.subscriber.restartingIce=!0),this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return f(this,void 0,void 0,function*(){var i;t===ot.PUBLISHER?yield this.publisher.addIceCandidate(e):yield(i=this.subscriber)===null||i===void 0?void 0:i.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e,t){return f(this,void 0,void 0,function*(){var i,r,s;this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:(i=this.subscriber)===null||i===void 0?void 0:i.getSignallingState().toString()}));const o=yield this.remoteOfferLock.lock();try{return(yield(r=this.subscriber)===null||r===void 0?void 0:r.setRemoteDescription(e,t))?yield(s=this.subscriber)===null||s===void 0?void 0:s.createAndSetAnswer():void 0}finally{o()}})}updateConfiguration(e,t){var i;this.publisher.setConfiguration(e),(i=this.subscriber)===null||i===void 0||i.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 Fe((t,i)=>f(this,void 0,void 0,function*(){let r=setTimeout(()=>{i(new Vt("negotiation timed out"))},this.peerConnectionTimeout);const s=()=>{clearTimeout(r),this.publisher.off(on.NegotiationStarted,a),e.signal.removeEventListener("abort",o)},o=()=>{s(),i(new Vt("negotiation aborted"))},a=()=>{e.signal.aborted||(clearTimeout(r),r=setTimeout(()=>{s(),i(new Vt("negotiation timed out"))},this.peerConnectionTimeout))};e.signal.addEventListener("abort",o),this.publisher.on(on.NegotiationStarted,a),this.publisher.once(on.NegotiationComplete,()=>{s(),t()}),yield this.publisher.negotiate(c=>{s(),c instanceof Error?i(c):i(new Error(String(c)))})}))})}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTransceiverOfKind(e,t){return this.publisher.addTransceiverOfKind(e,t)}getMidForReceiver(e){const i=(this.subscriber?this.subscriber.getTransceivers():this.publisher.getTransceivers()).find(r=>r.receiver===e);return i==null?void 0:i.mid}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===ot.PUBLISHER?this.publisher.getConnectedAddress():e===ot.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&this.subscriber&&e.push(this.subscriber),e}ensureTransportConnected(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let o=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 l=()=>{this.log.warn("abort transport connection",this.logContext),Oe.clearTimeout(u),d(K.cancelled("room connection has been cancelled"))};r!=null&&r.signal.aborted&&l(),r==null||r.signal.addEventListener("abort",l);const u=Oe.setTimeout(()=>{r==null||r.signal.removeEventListener("abort",l),d(K.internal("could not establish pc connection"))},o);for(;this.state!==ge.CONNECTED;)if(yield Le(50),r!=null&&r.signal.aborted){d(K.cancelled("room connection has been cancelled"));return}Oe.clearTimeout(u),r==null||r.signal.removeEventListener("abort",l),c()}))})()})}}const Hd=5e3,Up=3e4;class ne{static fetchRegionSettings(e,t,i){return f(this,void 0,void 0,function*(){const r=yield ne.fetchLock.lock();try{const s=yield fetch("".concat(Fp(e),"/regions"),{headers:{authorization:"Bearer ".concat(t)},signal:i});if(s.ok){const o=Zf(s.headers),a=o?o*1e3:Hd;return{regionSettings:yield s.json(),updatedAtInMs:Date.now(),maxAgeInMs:a}}else throw s.status===401?K.notAllowed("Could not fetch region settings: ".concat(s.statusText),s.status):K.internal("Could not fetch region settings: ".concat(s.statusText))}catch(s){throw s instanceof K?s:i!=null&&i.aborted?K.cancelled("Region fetching was aborted"):K.serverUnreachable("Could not fetch region settings, ".concat(s instanceof Error?"".concat(s.name,": ").concat(s.message):s))}finally{r()}})}static scheduleRefetch(e,t,i){return f(this,void 0,void 0,function*(){const r=ne.settingsTimeouts.get(e.hostname);clearTimeout(r),ne.settingsTimeouts.set(e.hostname,setTimeout(()=>f(this,void 0,void 0,function*(){try{const s=yield ne.fetchRegionSettings(e,t);ne.updateCachedRegionSettings(e,t,s)}catch(s){if(s instanceof K&&s.reason===ue.NotAllowed){z.debug("token is not valid, cancelling auto region refresh");return}z.debug("auto refetching of region settings failed",{error:s}),ne.scheduleRefetch(e,t,i)}}),i))})}static updateCachedRegionSettings(e,t,i){ne.cache.set(e.hostname,i),ne.scheduleRefetch(e,t,i.maxAgeInMs)}static stopRefetch(e){const t=ne.settingsTimeouts.get(e);t&&(clearTimeout(t),ne.settingsTimeouts.delete(e))}static scheduleCleanup(e){let t=ne.connectionTrackers.get(e);t&&(t.cleanupTimeout&&clearTimeout(t.cleanupTimeout),t.cleanupTimeout=setTimeout(()=>{const i=ne.connectionTrackers.get(e);i&&i.connectionCount===0&&(z.debug("stopping region refetch after disconnect delay",{hostname:e}),ne.stopRefetch(e)),i&&(i.cleanupTimeout=void 0)},Up))}static cancelCleanup(e){const t=ne.connectionTrackers.get(e);t!=null&&t.cleanupTimeout&&(clearTimeout(t.cleanupTimeout),t.cleanupTimeout=void 0)}notifyConnected(){const e=this.serverUrl.hostname;let t=ne.connectionTrackers.get(e);t||(t={connectionCount:0},ne.connectionTrackers.set(e,t)),t.connectionCount++,ne.cancelCleanup(e)}notifyDisconnected(){const e=this.serverUrl.hostname,t=ne.connectionTrackers.get(e);t&&(t.connectionCount=Math.max(0,t.connectionCount-1),t.connectionCount===0&&ne.scheduleCleanup(e))}constructor(e,t){this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){this.token=e}isCloud(){return kn(this.serverUrl)}getServerUrl(){return this.serverUrl}fetchRegionSettings(e){return f(this,void 0,void 0,function*(){return ne.fetchRegionSettings(this.serverUrl,this.token,e)})}getNextBestRegionUrl(e){return f(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");let t=ne.cache.get(this.serverUrl.hostname);(!t||Date.now()-t.updatedAtInMs>t.maxAgeInMs)&&(t=yield this.fetchRegionSettings(e),ne.updateCachedRegionSettings(this.serverUrl,this.token,t));const i=t.regionSettings.regions.filter(r=>!this.attemptedRegions.find(s=>s.url===r.url));if(i.length>0){const r=i[0];return this.attemptedRegions.push(r),z.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}setServerReportedRegions(e){ne.updateCachedRegionSettings(this.serverUrl,this.token,e)}}ne.cache=new Map,ne.settingsTimeouts=new Map,ne.connectionTrackers=new Map,ne.fetchLock=new xe;function Fp(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class ve extends Error{constructor(e,t,i){super(t),this.code=e,this.message=Gd(t,ve.MAX_MESSAGE_BYTES),this.data=i?Gd(i,ve.MAX_DATA_BYTES):void 0}static fromProto(e){return new ve(e.code,e.message,e.data)}toProto(){return new Io({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new ve(ve.ErrorCode[e],ve.ErrorMessage[e],t)}}ve.MAX_MESSAGE_BYTES=256,ve.MAX_DATA_BYTES=15360,ve.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},ve.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 Jd=15360;function Ps(n){return new TextEncoder().encode(n).length}function Gd(n,e){if(Ps(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 Is=2e3;function er(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 Ms=typeof MediaRecorder<"u";class Bp{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const jp=Ms?MediaRecorder:Bp;class zd extends jp{constructor(e,t){if(!Ms)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,r;const s=()=>r===void 0,o=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",o),this.removeEventListener("error",a),r==null||r.close(),r=void 0},a=c=>{r==null||r.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",o),this.removeEventListener("error",a),r=void 0};this.byteStream=new ReadableStream({start:c=>{r=c,i=d=>f(this,void 0,void 0,function*(){let l;if(d.data.arrayBuffer){const u=yield d.data.arrayBuffer();l=new Uint8Array(u)}else if(d.data.byteArray)l=d.data.byteArray;else throw new Error("no data available!");s()||c.enqueue(l)}),this.addEventListener("dataavailable",i)},cancel:()=>{o()}}),this.addEventListener("stop",o),this.addEventListener("error",a)}}function Vp(){return Ms}const qp=1e3,Kp=1e4;class Os 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.pendingDeviceChange=!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=Es(()=>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(O.Ended,this)},this.reacquireTrack=!1,this.providedByUser=r,this.muteLock=new xe,this.pauseUpstreamLock=new xe,this.trackChangeLock=new xe,this.trackChangeLock.lock().then(o=>f(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(e,!0)}finally{o()}})),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=>{tn(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&&(en(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=>{en(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]:qp;return(function*(){var i;if(e.kind===C.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=Ve())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Le(10));const r=Date.now();for(;Date.now()-r<t;){const s=e.dimensions;if(s)return s;yield Le(50)}throw new dt("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===sn(e)?!0:(this._constraints.deviceId=e,this.isMuted?(this.pendingDeviceChange=!0,!0):(yield this.restartTrack(),sn(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?De.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 dt("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=Kr(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const o={audio:!1,video:!1};this.kind===C.Kind.Video?o.video=i||r?{deviceId:i,facingMode:r}:!0:o.audio=i?Object.assign({deviceId:i},s):!0,this.attachedElements.forEach(d=>{tn(this.mediaStreamTrack,d)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(o)).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.pendingDeviceChange=!1,this.emit(O.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?O.Muted:O.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),fd()&&(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(O.UpstreamPaused,this);const i=Ve();if((i==null?void 0:i.name)==="Safari"&&ut(i.version,"12.0")<0)throw new qn("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(O.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 o=yield i.trackChangeLock.lock();try{i.log.debug("setting up processor",i.logContext);const a=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:a,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(en(i._mediaStreamTrack,a),a.muted=!0,a.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(()=>{a.play().catch(l=>{i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{err:l}))})},100)):i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:d}))}),i.processor=t,i.processorElement=a,i.processor.processedTrack){for(const d of i.attachedElements)d!==i.processorElement&&r&&(tn(i._mediaStreamTrack,d),en(i.processor.processedTrack,d));yield(s=i.sender)===null||s===void 0?void 0:s.replaceTrack(i.processor.processedTrack)}i.emit(O.TrackProcessorUpdate,i.processor)}finally{o()}})()})}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(O.TrackProcessorUpdate))})()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!Vp()){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 zd(this,{mimeType:t})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},Kp)}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 Cn extends Os{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 o;try{o=yield this.getSenderStats()}catch(a){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:a}));return}o&&this.prevStats&&(this._currentBitrate=er(o,this.prevStats)),this.prevStats=o}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(O.AudioTrackFeatureUpdate,this,Me.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(O.AudioTrackFeatureUpdate,this,Me.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{return this.isMuted?(this.source===C.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||this.pendingDeviceChange)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{t()}})}restartTrack(e){return f(this,void 0,void 0,function*(){let t;if(e){const i=ss({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(){Je()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Is)))}setProcessor(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.trackChangeLock.lock();try{if(!bt()&&!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(O.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 rd(this);return e&&(this.isMuted||this.log.debug("silence detected on local audio track",this.logContext),this.emit(O.AudioSilenceDetected)),e})}}function Wp(n,e,t){switch(n.kind){case"audio":return new Cn(n,e,!1,void 0,t);case"video":return new En(n,e,!1,t);default:throw new dt("unsupported track type: ".concat(n.kind))}}const Hp=Object.values(bn),Jp=Object.values(Ji),Gp=Object.values(Wn),zp=[bn.h180,bn.h360],$p=[Ji.h180,Ji.h360],Qp=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,r;return new oe(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)}),Ds=["q","h","f"];function As(n,e,t,i){var r,s;let o=i==null?void 0:i.videoEncoding;n&&(o=i==null?void 0:i.screenShareEncoding);const a=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,d=i==null?void 0:i.videoCodec;if(!o&&!a&&!c||!e||!t)return[{}];o||(o=Xp(n,e,t,d),z.debug("using video encoding",o));const l=o.maxFramerate,u=new oe(e,t,o.maxBitrate,o.maxFramerate,o.priority);if(c&<(d)){const v=new Yd(c),g=[];if(v.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const S=Ve();if(Gn()||bt()||(S==null?void 0:S.name)==="Chrome"&&ut(S==null?void 0:S.version,"113")<0){const k=v.suffix=="h"?2:3,R=Bf(S);for(let _=0;_<v.spatial;_+=1)g.push({rid:Ds[2-_],maxBitrate:o.maxBitrate/Math.pow(k,_),maxFramerate:u.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,_):void 0});g[0].scalabilityMode=c}else g.push({maxBitrate:o.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:c});return u.encoding.priority&&(g[0].priority=u.encoding.priority,g[0].networkPriority=u.encoding.priority),z.debug("using svc encoding",{encodings:g}),g}if(!a)return[o];let h=[];n?h=(r=Qd(i==null?void 0:i.screenShareSimulcastLayers))!==null&&r!==void 0?r:$d(n,u):h=(s=Qd(i==null?void 0:i.videoSimulcastLayers))!==null&&s!==void 0?s:$d(n,u);let m;if(h.length>0){const v=h[0];h.length>1&&([,m]=h);const g=Math.max(e,t);if(g>=960&&m)return xs(e,t,[v,m,u],l);if(g>=480)return xs(e,t,[v,u],l)}return xs(e,t,[u])}function Yp(n,e,t){var i,r,s,o;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&z.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const a=n.mediaStreamTrack.getSettings(),c=(i=a.width)!==null&&i!==void 0?i:(r=n.dimensions)===null||r===void 0?void 0:r.width,d=(s=a.height)!==null&&s!==void 0?s:(o=n.dimensions)===null||o===void 0?void 0:o.height;return n.source===C.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),As(n.source===C.Source.ScreenShare,c,d,t)}function Xp(n,e,t,i){const r=Zp(n,e,t);let{encoding:s}=r[0];const o=Math.max(e,t);for(let a=0;a<r.length;a+=1){const c=r[a];if(s=c.encoding,c.width>=o)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 Zp(n,e,t){if(n)return Gp;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?Hp:Jp}function $d(n,e){if(n)return Qp(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)?zp:$p}function xs(n,e,t,i){const r=[];if(t.forEach((s,o)=>{if(o>=Ds.length)return;const a=Math.min(n,e),d={rid:Ds[o],scaleResolutionDownBy:Math.max(1,a/Math.min(s.width,s.height)),maxBitrate:s.encoding.maxBitrate},l=i&&s.encoding.maxFramerate?Math.min(i,s.encoding.maxFramerate):s.encoding.maxFramerate;l&&(d.maxFramerate=l);const u=nn()||o===0;s.encoding.priority&&u&&(d.priority=s.encoding.priority,d.networkPriority=s.encoding.priority),r.push(d)}),bt()&&gd()==="ios"){let s;r.forEach(a=>{s?a.maxFramerate&&a.maxFramerate>s&&(s=a.maxFramerate):s=a.maxFramerate});let o=!0;r.forEach(a=>{var c;a.maxFramerate!=s&&(o&&(o=!1,z.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),z.info('Setting framerate of encoding "'.concat((c=a.rid)!==null&&c!==void 0?c:"",'" to ').concat(s)),a.maxFramerate=s)})}return r}function Qd(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 Yd{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 eg(n){return n.source===C.Source.ScreenShare||n.constraints.height&&sn(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const tg=5e3;class En extends Os{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 o=new Map(s.map(c=>[c.rid,c])),a=s.some(c=>c.qualityLimitationReason==="cpu");if(a!==this.isCpuConstrained&&(this.isCpuConstrained=a,this.isCpuConstrained&&this.emit(O.CpuConstrained)),this.prevStats){let c=0;o.forEach((d,l)=>{var u;const h=(u=this.prevStats)===null||u===void 0?void 0:u.get(l);c+=er(d,h)}),this._currentBitrate=c}this.prevStats=o}),this.senderLock=new xe}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!Je())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()},Is))}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,o;yield e.pauseUpstream.call(this);try{for(var a=!0,c=_t(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;a=!0)s=d.value,a=!1,yield(o=s.sender)===null||o===void 0?void 0:o.replaceTrack(null)}catch(l){i={error:l}}finally{try{!a&&!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,o;yield e.resumeUpstream.call(this);try{for(var a=!0,c=_t(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;a=!0){s=d.value,a=!1;const l=s;yield(o=l.sender)===null||o===void 0?void 0:o.replaceTrack(l.mediaStreamTrack)}}catch(l){i={error:l}}finally{try{!a&&!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 o={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},a=i.get(r.remoteId);a&&(o.jitter=a.jitter,o.packetsLost=a.packetsLost,o.roundTripTime=a.roundTripTime),t.push(o)}}),t.sort((r,s)=>{var o,a;return((o=s.frameWidth)!==null&&o!==void 0?o:0)-((a=r.frameWidth)!==null&&a!==void 0?a:0)}),t})}setPublishingQuality(e){const t=[];for(let i=He.LOW;i<=He.HIGH;i+=1)t.push(new Fr({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(lt(this.codec),t)}restartTrack(e){return f(this,void 0,void 0,function*(){var t,i,r,s,o;let a;if(e){const u=ss({video:e});typeof u.video!="boolean"&&(a=u.video)}yield this.restart(a),this.isCpuConstrained=!1;try{for(var c=!0,d=_t(this.simulcastCodecs.values()),l;l=yield d.next(),t=l.done,!t;c=!0){s=l.value,c=!1;const u=s;u.sender&&((o=u.sender.transport)===null||o===void 0?void 0:o.state)!=="closed"&&(u.mediaStreamTrack=this.mediaStreamTrack.clone(),yield u.sender.replaceTrack(u.mediaStreamTrack))}}catch(u){i={error:u}}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 o,a,c,d,l,u;if(yield t.setProcessor.call(r,i,s),!((l=r.processor)===null||l===void 0)&&l.processedTrack)try{for(var h=!0,m=_t(r.simulcastCodecs.values()),v;v=yield m.next(),o=v.done,!o;h=!0)d=v.value,h=!1,yield(u=d.sender)===null||u===void 0?void 0:u.replaceTrack(r.processor.processedTrack)}catch(g){a={error:g}}finally{try{!h&&!o&&(c=m.return)&&(yield c.call(m))}finally{if(a)throw a.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)},tg))}setPublishingCodecs(e){return f(this,void 0,void 0,function*(){var t,i,r,s,o,a,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(lt(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const d=[];try{for(t=!0,i=_t(e);r=yield i.next(),s=r.done,!s;t=!0){c=r.value,t=!1;const l=c;if(!this.codec||this.codec===l.codec)yield this.setPublishingLayers(lt(l.codec),l.qualities);else{const u=this.simulcastCodecs.get(l.codec);if(this.log.debug("try setPublishingCodec for ".concat(l.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:u})),!u||!u.sender){for(const h of l.qualities)if(h.enabled){d.push(l.codec);break}}else u.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(l.codec),this.logContext),yield Xd(u.sender,u.encodings,l.qualities,this.senderLock,lt(l.codec),this.log,this.logContext))}}}catch(l){o={error:l}}finally{try{!t&&!s&&(a=i.return)&&(yield a.call(i))}finally{if(o)throw o.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 Xd(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&<(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),fd()&&this.isInBackground&&this.source===C.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Xd(n,e,t,i,r,s,o){return f(this,void 0,void 0,function*(){const a=yield i.lock();s.debug("setPublishingLayersForSender",Object.assign(Object.assign({},o),{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({},o),{encodings:d,senderEncodings:e}));return}let l=!1;!1&&d[0].scalabilityMode||(r&&t.some(m=>m.enabled)&&t.forEach(m=>m.enabled=!0),d.forEach((h,m)=>{var v;let g=(v=h.rid)!==null&&v!==void 0?v:"";g===""&&(g="q");const S=Zd(g),k=t.find(R=>R.quality===S);k&&h.active!==k.enabled&&(l=!0,h.active=k.enabled,s.debug("setting layer ".concat(k.quality," to ").concat(h.active?"enabled":"disabled"),o),nn()&&(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)))})),l&&(c.encodings=d,s.debug("setting encodings",Object.assign(Object.assign({},o),{encodings:c.encodings})),yield n.setParameters(c))}finally{a()}})}function Zd(n){switch(n){case"f":return He.HIGH;case"h":return He.MEDIUM;case"q":return He.LOW;default:return He.HIGH}}function el(n,e,t,i){if(!t)return[new Bt({quality:He.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const r=t[0].scalabilityMode,s=new Yd(r),o=[],a=s.suffix=="h"?1.5:2,c=s.suffix=="h"?2:3;for(let d=0;d<s.spatial;d+=1)o.push(new Bt({quality:Math.min(He.HIGH,s.spatial-1)-d,width:Math.ceil(n/Math.pow(a,d)),height:Math.ceil(e/Math.pow(a,d)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,d)):0,ssrc:0}));return o}return t.map(r=>{var s,o,a;const c=(s=r.scaleResolutionDownBy)!==null&&s!==void 0?s:1;let d=Zd((o=r.rid)!==null&&o!==void 0?o:"");return new Bt({quality:d,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(a=r.maxBitrate)!==null&&a!==void 0?a:0,ssrc:0})})}const tl="_lossy",nl="_reliable",ng=2*1e3,Ls="leave-reconnect",ig=3e4,rg=8*1024,sg=256*1024;var nt;(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"})(nt||(nt={}));class ag extends yt.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=_s.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=nt.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=z,this.reliableDataSequence=1,this.reliableMessageBuffer=new Ld,this.reliableReceivedState=new _p(ig),this.lossyDataStatCurrentBytes=0,this.lossyDataStatByterate=0,this.lossyDataDropCount=0,this.midToTrackId={},this.isWaitingForNetworkReconnect=!1,this.handleDataChannel=i=>f(this,[i],void 0,function(r){var s=this;let{channel:o}=r;return(function*(){if(o){if(o.label===nl)s.reliableDCSub=o;else if(o.label===tl)s.lossyDCSub=o;else return;s.log.debug("on data channel ".concat(o.id,", ").concat(o.label),s.logContext),o.onmessage=s.handleDataMessage}})()}),this.handleDataMessage=i=>f(this,void 0,void 0,function*(){var r,s,o,a,c;const d=yield this.dataProcessLock.lock();try{let l;if(i.data instanceof ArrayBuffer)l=i.data;else if(i.data instanceof Blob)l=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const u=je.fromBinary(new Uint8Array(l));if(u.sequence>0&&u.participantSid!==""){const h=this.reliableReceivedState.get(u.participantSid);if(h&&u.sequence<=h)return;this.reliableReceivedState.set(u.participantSid,u.sequence)}if(((r=u.value)===null||r===void 0?void 0:r.case)==="speaker")this.emit(A.ActiveSpeakersUpdate,u.value.value.speakers);else if(((s=u.value)===null||s===void 0?void 0:s.case)==="encryptedPacket"){if(!this.e2eeManager){this.log.error("Received encrypted packet but E2EE not set up",this.logContext);return}const h=yield(o=this.e2eeManager)===null||o===void 0?void 0:o.handleEncryptedData(u.value.value.encryptedValue,u.value.value.iv,u.participantIdentity,u.value.value.keyIndex),m=Ro.fromBinary(h.payload),v=new je({value:m.value,participantIdentity:u.participantIdentity,participantSid:u.participantSid});((a=v.value)===null||a===void 0?void 0:a.case)==="user"&&il(v,v.value.value),this.emit(A.DataPacketReceived,v,u.value.value.encryptionType)}else((c=u.value)===null||c===void 0?void 0:c.case)==="user"&&il(u,u.value.value),this.emit(A.DataPacketReceived,u,be.NONE)}finally{d()}}),this.handleDataError=i=>{const s=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:o}=i.error;this.log.error("DataChannel error on ".concat(s,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:o}))}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?$.LOSSY:$.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(A.Disconnected),this.close()},o=Date.now()-this.reconnectStart;let a=this.getNextRetryDelay({elapsedMs:o,retryCount:this.reconnectAttempts});if(a===null){s(o);return}i===Ls&&(a=0),this.log.debug("reconnecting in ".concat(a,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Oe.setTimeout(()=>this.attemptReconnect(r).finally(()=>this.reconnectTimeout=void 0),a)},this.waitForRestarted=()=>new Promise((i,r)=>{this.pcState===nt.Connected&&i();const s=()=>{this.off(A.Disconnected,o),i()},o=()=>{this.off(A.Restarted,s),r()};this.once(A.Restarted,s),this.once(A.Disconnected,o)}),this.updateAndEmitDCBufferStatus=i=>{if(i===$.RELIABLE){const s=this.dataChannelForKind(i);s&&this.reliableMessageBuffer.alignBufferedAmount(s.bufferedAmount)}const r=this.isBufferStatusLow(i);typeof r<"u"&&r!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,r),this.emit(A.DCBufferStatusChanged,r,i))},this.isBufferStatusLow=i=>{const r=this.dataChannelForKind(i);if(r)return r.bufferedAmount<=r.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>f(this,void 0,void 0,function*(){!this.url||!(yield fetch($n(this.url),{method:"HEAD"}).then(r=>r.ok).catch(()=>!1))||(this.log.info("detected network reconnected"),(this.client.currentState===me.RECONNECTING||this.isWaitingForNetworkReconnect&&this.client.currentState===me.CONNECTED)&&(this.clearReconnectTimeout(),this.attemptReconnect($t.RR_SIGNAL_DISCONNECTED),this.isWaitingForNetworkReconnect=!1))}),this.handleBrowserOffline=()=>f(this,void 0,void 0,function*(){if(this.url)try{yield Promise.race([fetch($n(this.url),{method:"HEAD"}),Le(4e3).then(()=>Promise.reject())])}catch{window.navigator.onLine===!1&&(this.log.info("detected network interruption"),this.isWaitingForNetworkReconnect=!0)}}),this.log=ct((t=e.loggerName)!==null&&t!==void 0?t:Qe.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new bs(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.closingLock=new xe,this.dataProcessLock=new xe,this.dcBufferStatus=new Map([[$.LOSSY,!0],[$.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(A.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(A.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(A.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(A.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(A.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(A.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(A.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(A.SignalRequestResponse,i)}get logContext(){var e,t,i,r,s,o;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:(o=(s=this.latestJoinResponse)===null||s===void 0?void 0:s.participant)===null||o===void 0?void 0:o.identity,pID:this.participantSid}}join(e,t,i,r){return f(this,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){d.url=s,d.token=o,d.signalOpts=a,d.maxJoinAttempts=a.maxRetries;try{d.joinAttempts+=1,d.setupSignalClientCallbacks();const u=yield d.client.join(s,o,a,c,l);return d._isClosed=!1,d.latestJoinResponse=u,d.subscriberPrimary=u.subscriberPrimary,d.pcManager||(yield d.configure(u,!l)),(!d.subscriberPrimary||u.fastPublish)&&d.negotiate().catch(h=>{z.error(h,d.logContext)}),d.registerOnLineListener(),d.clientConfiguration=u.clientConfiguration,d.emit(A.SignalConnected,u),u}catch(u){if(u instanceof K){if(u.reason===ue.ServerUnreachable){if(d.log.warn("Couldn't connect to server, attempt ".concat(d.joinAttempts," of ").concat(d.maxJoinAttempts),d.logContext),d.joinAttempts<d.maxJoinAttempts)return d.join(s,o,a,c,l)}else if(u.reason===ue.ServiceNotFound)return d.log.warn("Initial connection failed: ".concat(u.message," – Retrying")),d.join(s,o,a,c,!0)}throw u}})()})}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(A.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),this.cleanupLossyDataStats(),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 Ld,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupLossyDataStats(){this.lossyDataStatByterate=0,this.lossyDataStatCurrentBytes=0,this.lossyDataStatInterval&&(clearInterval(this.lossyDataStatInterval),this.lossyDataStatInterval=void 0),this.lossyDataDropCount=0}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 dt("a track with the same ID has already been published");return new Promise((t,i)=>{const r=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(K.timeout("publication of local track timed out, no response from server"))},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,t){return f(this,void 0,void 0,function*(){var i,r;if(this.pcManager&&this.pcManager.currentState!==ge.NEW)return;this.participantSid=(i=e.participant)===null||i===void 0?void 0:i.sid;const s=this.makeRTCConfiguration(e);this.pcManager=new Np(s,t?"publisher-only":e.subscriberPrimary?"subscriber-primary":"publisher-primary",this.loggerOptions),this.emit(A.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(o,a)=>{this.client.sendIceCandidate(o,a)},this.pcManager.onPublisherOffer=(o,a)=>{this.client.sendOffer(o,a)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(o,a,c)=>f(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(o),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),o===ge.CONNECTED){const u=this.pcState===nt.New;this.pcState=nt.Connected,u&&this.emit(A.Connected,e)}else o===ge.FAILED&&(this.pcState===nt.Connected||this.pcState===nt.Reconnecting)&&(this.pcState=nt.Disconnected,this.handleDisconnect("peerconnection failed",c==="failed"?$t.RR_SUBSCRIBER_FAILED:$t.RR_PUBLISHER_FAILED));const d=this.client.isDisconnected||this.client.currentState===me.RECONNECTING,l=[ge.FAILED,ge.CLOSING,ge.CLOSED].includes(o);d&&l&&!this._isClosed&&this.emit(A.Offline)}),this.pcManager.onTrack=o=>{o.streams.length!==0&&this.emit(A.MediaTrackAdded,o.track,o.streams[0],o.receiver)},og((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(e,t,i)=>f(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,midToTrackId:i})),this.midToTrackId=i,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,i)=>f(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;this.midToTrackId=i;const r=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);r&&this.client.sendAnswer(r,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(A.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(A.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{var t;this.token=e,(t=this.regionUrlProvider)===null||t===void 0||t.updateToken(e)},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(A.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(A.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(A.RoomMoved,e)},this.client.onMediaSectionsRequirement=e=>{var t,i;const r={direction:"recvonly"};for(let s=0;s<e.numAudios;s++)(t=this.pcManager)===null||t===void 0||t.addPublisherTransceiverOfKind("audio",r);for(let s=0;s<e.numVideos;s++)(i=this.pcManager)===null||i===void 0||i.addPublisherTransceiverOfKind("video",r);this.negotiate()},this.client.onClose=()=>{this.handleDisconnect("signal",$t.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({updatedAtInMs:Date.now(),maxAgeInMs:Hd,regionSettings:e.regions})),e.action){case gn.DISCONNECT:this.emit(A.Disconnected,e==null?void 0:e.reason),this.close();break;case gn.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ls);break;case gn.RESUME:this.handleDisconnect(Ls)}}}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 o={urls:s.urls};s.username&&(o.username=s.username),s.credential&&(o.credential=s.credential),r.push(o)}),i.iceServers=r}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Un.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(tl,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(nl,{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,this.cleanupLossyDataStats(),this.lossyDataStatInterval=setInterval(()=>{this.lossyDataStatByterate=this.lossyDataStatCurrentBytes,this.lossyDataStatCurrentBytes=0;const e=this.dataChannelForKind($.LOSSY);if(e){const t=this.lossyDataStatByterate/10;e.bufferedAmountLowThreshold=Math.min(Math.max(t,rg),sg)}},1e3))}createSender(e,t,i){return f(this,void 0,void 0,function*(){if(Gi())return yield this.createTransceiverRTCRtpSender(e,t,i);if(cs())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new ke("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(Gi())return this.createSimulcastTransceiverSender(e,t,i,r);if(cs())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new ke("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new ke("publisher is closed");const r=[];e.mediaStream&&r.push(e.mediaStream),Pt(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 ke("publisher is closed");const s={direction:"sendonly"};r&&(s.sendEncodings=r);const o=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,s);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,o.sender),o.sender})}createRTCRtpSender(e){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new ke("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){z.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===Un.DISABLED||((r=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&r!==void 0?r:ge.NEW)===ge.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 o=!0;s instanceof ke?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:s})),o=!1):s instanceof Zt||(this.fullReconnectOnNext=!0),o?this.handleDisconnect("reconnect",$t.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(A.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 ke("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(A.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 Zt;s=yield this.join(e??this.url,this.token,this.signalOpts,void 0,!this.options.singlePeerConnection)}catch(o){throw o instanceof K&&o.reason===ue.NotAllowed?new ke("could not reconnect, token might be expired"):new Zt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(A.SignalRestarted,s),yield this.waitForPCReconnected(),this.client.currentState!==me.CONNECTED)throw new Zt("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(A.Restarted)}catch(s){const o=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(o){yield this.restartConnection(o);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 ke("could not reconnect, url or token not saved");if(!this.pcManager)throw new ke("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(A.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 K&&r.reason===ue.NotAllowed?new ke("could not reconnect, token might be expired"):r instanceof K&&r.reason===ue.LeaveRequest?r:new Zt(s)}if(this.emit(A.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!==me.CONNECTED)throw new Zt("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(A.Resumed)})}waitForPCInitialConnection(e,t){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new ke("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return f(this,void 0,void 0,function*(){this.pcState=nt.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Le(ng),!this.pcManager)throw new ke("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=nt.Connected}catch(e){throw this.pcState=nt.Disconnected,K.internal("could not establish PC connection, ".concat(e.message))}})}publishRpcResponse(e,t,i,r){return f(this,void 0,void 0,function*(){const s=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcResponse",value:new Mr({requestId:t,value:r?{case:"error",value:r.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(s,$.RELIABLE)})}publishRpcAck(e,t){return f(this,void 0,void 0,function*(){const i=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcAck",value:new Ir({requestId:t})}});yield this.sendDataPacket(i,$.RELIABLE)})}sendDataPacket(e,t){return f(this,void 0,void 0,function*(){if(yield this.ensurePublisherConnected(t),this.e2eeManager&&this.e2eeManager.isDataChannelEncryptionEnabled){const s=Dd(e);if(s){const o=yield this.e2eeManager.encryptData(s.toBinary());e.value={case:"encryptedPacket",value:new wo({encryptedValue:o.payload,iv:o.iv,keyIndex:o.keyIndex})}}}t===$.RELIABLE&&(e.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);const i=e.toBinary(),r=this.dataChannelForKind(t);if(r){if(t===$.RELIABLE)yield this.waitForBufferStatusLow(t),this.reliableMessageBuffer.push({data:i,sequence:e.sequence});else{if(!this.isBufferStatusLow(t)){this.lossyDataDropCount+=1,this.lossyDataDropCount%100===0&&this.log.warn("dropping lossy data channel messages, total dropped: ".concat(this.lossyDataDropCount),this.logContext);return}this.lossyDataStatCurrentBytes+=i.byteLength}if(this.attemptingReconnect)return;r.send(i)}this.updateAndEmitDCBufferStatus(t)})}resendReliableMessagesForResume(e){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected($.RELIABLE);const t=this.dataChannelForKind($.RELIABLE);t&&(this.reliableMessageBuffer.popToSequence(e),this.reliableMessageBuffer.getAll().forEach(i=>{t.send(i.data)})),this.updateAndEmitDCBufferStatus($.RELIABLE)})}waitForBufferStatusLow(e){return new Fe((t,i)=>f(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const r=()=>i(new ke("engine closed"));for(this.once(A.Closing,r);!this.dcBufferStatus.get(e);)yield Le(10);this.off(A.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 ke("PC manager is closed");const o=r?i.pcManager.subscriber:i.pcManager.publisher,a=r?"Subscriber":"Publisher";if(!o)throw K.internal("".concat(a," connection not set"));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().catch(u=>{z.error(u,i.logContext)});const d=i.dataChannelForKind(t,r);if((d==null?void 0:d.readyState)==="open")return;const l=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<l;){if(o.isICEConnected&&((s=i.dataChannelForKind(t,r))===null||s===void 0?void 0:s.readyState)==="open")return;yield Le(50)}throw K.internal("could not establish ".concat(a," connection, state: ").concat(o.getICEConnectionState()))})()})}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||![ge.CONNECTING,ge.CONNECTED].includes(this.pcManager.currentState)||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return f(this,void 0,void 0,function*(){return new Fe((e,t)=>f(this,void 0,void 0,function*(){if(!this.pcManager){t(new Vt("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(new Vt("cannot negotiate on closed engine")),this.on(A.Closing,r),this.on(A.Restarting,r),this.pcManager.publisher.once(on.RTPVideoPayloadTypes,s=>{const o=new Map;s.forEach(a=>{const c=a.codec.toLowerCase();kd(c)&&o.set(a.payload,c)}),this.emit(A.RTPVideoMapUpdate,o)});try{yield this.pcManager.negotiate(i),e()}catch(s){if(i.signal.aborted){e();return}s instanceof Vt&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",$t.RR_UNKNOWN),s instanceof Error?t(s):t(new Error(String(s)))}finally{this.off(A.Closing,r),this.off(A.Restarting,r)}}))})}dataChannelForKind(e,t){if(t){if(e===$.LOSSY)return this.lossyDCSub;if(e===$.RELIABLE)return this.reliableDCSub}else{if(e===$.LOSSY)return this.lossyDC;if(e===$.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,r,s,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const a=this.pcManager.publisher.getLocalDescription(),c=this.pcManager.publisher.getRemoteDescription(),d=(i=this.pcManager.subscriber)===null||i===void 0?void 0:i.getRemoteDescription(),l=(r=this.pcManager.subscriber)===null||r===void 0?void 0:r.getLocalDescription(),u=(o=(s=this.signalOpts)===null||s===void 0?void 0:s.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(v=>{v.isDesired!==u&&h.push(v.trackSid),v.isEnabled||m.push(v.trackSid)}),this.client.sendSyncState(new Br({answer:this.pcManager.mode==="publisher-only"?c?Sn({sdp:c.sdp,type:c.type}):void 0:l?Sn({sdp:l.sdp,type:l.type}):void 0,offer:this.pcManager.mode==="publisher-only"?a?Sn({sdp:a.sdp,type:a.type}):void 0:d?Sn({sdp:d.sdp,type:d.type}):void 0,subscription:new Mi({trackSids:h,subscribe:!u,participantTracks:[]}),publishTracks:Pf(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m,datachannelReceiveStates:this.reliableReceivedState.map((v,g)=>new Qo({publisherSid:g,lastSeq:v}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,r)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new Yo({label:i.label,id:i.id,target:r}))};return t(this.dataChannelForKind($.LOSSY),ot.PUBLISHER),t(this.dataChannelForKind($.RELIABLE),ot.PUBLISHER),t(this.dataChannelForKind($.LOSSY,!0),ot.SUBSCRIBER),t(this.dataChannelForKind($.RELIABLE,!0),ot.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Oe.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){Je()&&(window.addEventListener("online",this.handleBrowserOnLine),window.addEventListener("offline",this.handleBrowserOffline))}deregisterOnLineListener(){Je()&&(window.removeEventListener("online",this.handleBrowserOnLine),window.removeEventListener("offline",this.handleBrowserOffline))}getTrackIdForReceiver(e){var t;const i=(t=this.pcManager)===null||t===void 0?void 0:t.getMidForReceiver(e);if(i){const r=Object.entries(this.midToTrackId).find(s=>{let[o]=s;return o===i});if(r)return r[1]}}}function og(n){return n!==void 0&&n>13}function il(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 rl{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 Ye("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),Be.Incomplete);if(this.bytesReceived>this.totalByteSize)throw new Ye("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),Be.LengthExceeded)}}constructor(e,t,i,r){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=r}}class cg extends rl{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 tt,i=null,r=null;if(this.signal){const o=this.signal;r=()=>{var a;(a=t.reject)===null||a===void 0||a.call(t,o.reason)},o.addEventListener("abort",r),i=o}const s=()=>{e.releaseLock(),i&&r&&i.removeEventListener("abort",r),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var o,a;try{const{done:c,value:d}=yield Promise.race([e.read(),t.promise,(a=(o=this.outOfBandFailureRejectingFuture)===null||o===void 0?void 0:o.promise)!==null&&a!==void 0?a: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,o;let a=new Set;const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,l=_t(c),u;u=yield l.next(),i=u.done,!i;d=!0){o=u.value,d=!1;const h=o;a.add(h)}}catch(h){r={error:h}}finally{try{!d&&!i&&(s=l.return)&&(yield s.call(l))}finally{if(r)throw r.error}}return Array.from(a)})()})}}class dg extends rl{constructor(e,t,i,r){super(e,t,i,r),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=Qi(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 tt,r=null,s=null;if(this.signal){const a=this.signal;s=()=>{var c;(c=i.reject)===null||c===void 0||c.call(i,a.reason)},a.addEventListener("abort",s),r=a}const o=()=>{e.releaseLock(),r&&s&&r.removeEventListener("abort",s),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var a,c;try{const{done:d,value:l}=yield Promise.race([e.read(),i.promise,(c=(a=this.outOfBandFailureRejectingFuture)===null||a===void 0?void 0:a.promise)!==null&&c!==void 0?c:new Promise(()=>{})]);if(d)return this.validateBytesReceived(!0),{done:!0,value:void 0};{this.handleChunkReceived(l);let u;try{u=t.decode(l.content)}catch(h){throw new Ye("Cannot decode datastream chunk ".concat(l.chunkIndex," as text: ").concat(h),Be.DecodeFailed)}return{done:!1,value:u}}}catch(d){throw o(),d}}),return(){return f(this,void 0,void 0,function*(){return o(),{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,o;let a="";const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,l=_t(c),u;u=yield l.next(),i=u.done,!i;d=!0)o=u.value,d=!1,a+=o}catch(h){r={error:h}}finally{try{!d&&!i&&(s=l.return)&&(yield s.call(l))}finally{if(r)throw r.error}}return a})()})}}class lg{constructor(){this.log=z,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 Ye('A text stream handler for topic "'.concat(e,'" has already been set.'),Be.HandlerAlreadyRegistered);this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new Ye('A byte stream handler for topic "'.concat(e,'" has already been set.'),Be.HandlerAlreadyRegistered);this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear()}validateParticipantHasNoActiveDataStreams(e){var t,i,r,s;const o=Array.from(this.textStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e),a=Array.from(this.byteStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e);if(o.length>0||a.length>0){const c=new Ye("Participant ".concat(e," unexpectedly disconnected in the middle of sending data"),Be.AbnormalEnd);for(const[d,l]of a)(i=(t=l.outOfBandFailureRejectingFuture).reject)===null||i===void 0||i.call(t,c),this.byteStreamControllers.delete(d);for(const[d,l]of o)(s=(r=l.outOfBandFailureRejectingFuture).reject)===null||s===void 0||s.call(r,c),this.textStreamControllers.delete(d)}}handleDataStreamPacket(e,t){return f(this,void 0,void 0,function*(){switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity,t);case"streamChunk":return this.handleStreamChunk(e.value.value,t);case"streamTrailer":return this.handleStreamTrailer(e.value.value,t);default:throw new Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}})}handleStreamHeader(e,t,i){return f(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const s=this.byteStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let o;const a=new tt;a.promise.catch(l=>{this.log.error(l)});const c={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Qi(e.timestamp),attributes:e.attributes,encryptionType:i},d=new ReadableStream({start:l=>{if(o=l,this.textStreamControllers.has(e.streamId))throw new Ye("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Be.AlreadyOpened);this.byteStreamControllers.set(e.streamId,{info:c,controller:o,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});s(new cg(c,d,Qi(e.totalLength),a),{identity:t})}else if(e.contentHeader.case==="textHeader"){const s=this.textStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let o;const a=new tt;a.promise.catch(l=>{this.log.error(l)});const c={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes,encryptionType:i,attachedStreamIds:e.contentHeader.value.attachedStreamIds},d=new ReadableStream({start:l=>{if(o=l,this.textStreamControllers.has(e.streamId))throw new Ye("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Be.AlreadyOpened);this.textStreamControllers.set(e.streamId,{info:c,controller:o,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});s(new dg(c,d,Qi(e.totalLength),a),{identity:t})}})}handleStreamChunk(e,t){const i=this.byteStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?(i.controller.error(new Ye("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),Be.EncryptionTypeMismatch)),this.byteStreamControllers.delete(e.streamId)):e.content.length>0&&i.controller.enqueue(e));const r=this.textStreamControllers.get(e.streamId);r&&(r.info.encryptionType!==t?(r.controller.error(new Ye("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(r.info.encryptionType),Be.EncryptionTypeMismatch)),this.textStreamControllers.delete(e.streamId)):e.content.length>0&&r.controller.enqueue(e))}handleStreamTrailer(e,t){const i=this.textStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?i.controller.error(new Ye("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),Be.EncryptionTypeMismatch)):(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),e.attributes),i.controller.close(),this.textStreamControllers.delete(e.streamId)));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.encryptionType!==t?r.controller.error(new Ye("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(r.info.encryptionType),Be.EncryptionTypeMismatch)):(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close()),this.byteStreamControllers.delete(e.streamId))}}class sl{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 ug extends sl{}class hg extends sl{}const al=15e3;class mg{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(),o=new TextEncoder().encode(e).byteLength,a=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(a?a.length+1:1).fill(0),d=(u,h)=>{var m;c[h]=u;const v=c.reduce((g,S)=>g+S,0);(m=t==null?void 0:t.onProgress)===null||m===void 0||m.call(t,v)},l=yield this.streamText({streamId:r,totalSize:o,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:a,attributes:t==null?void 0:t.attributes});return yield l.write(e),d(1,0),yield l.close(),t!=null&&t.attachments&&a&&(yield Promise.all(t.attachments.map((u,h)=>f(this,void 0,void 0,function*(){return this._sendFile(a[h],u,{topic:t.topic,mimeType:u.type,onProgress:m=>{d(m,h+1)}})})))),l.info})}streamText(e){return f(this,void 0,void 0,function*(){var t,i,r;const s=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),o={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes,encryptionType:!((r=this.engine.e2eeManager)===null||r===void 0)&&r.isDataChannelEncryptionEnabled?be.GCM:be.NONE,attachedStreamIds:e==null?void 0:e.attachedStreamIds},a=new wi({streamId:s,mimeType:o.mimeType,topic:o.topic,timestamp:an(o.timestamp),totalLength:an(e==null?void 0:e.totalSize),attributes:o.attributes,contentHeader:{case:"textHeader",value:new Fo({version:e==null?void 0:e.version,attachedStreamIds:o.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Or.UPDATE:Or.CREATE})}}),c=e==null?void 0:e.destinationIdentities,d=new je({destinationIdentities:c,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(d,$.RELIABLE);let l=0;const u=this.engine,h=new WritableStream({write(g){return f(this,void 0,void 0,function*(){for(const S of Xf(g,al)){const k=new Ri({content:S,streamId:s,chunkIndex:an(l)}),R=new je({destinationIdentities:c,value:{case:"streamChunk",value:k}});yield u.sendDataPacket(R,$.RELIABLE),l+=1}})},close(){return f(this,void 0,void 0,function*(){const g=new _i({streamId:s}),S=new je({destinationIdentities:c,value:{case:"streamTrailer",value:g}});yield u.sendDataPacket(S,$.RELIABLE)})},abort(g){console.log("Sink error:",g)}});let m=()=>f(this,void 0,void 0,function*(){yield v.close()});u.once(A.Closing,m);const v=new ug(h,o,()=>this.engine.off(A.Closing,m));return v})}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}),o=t.stream().getReader();for(;;){const{done:a,value:c}=yield o.read();if(a)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,o,a;const c=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),d=e==null?void 0:e.destinationIdentities,l={id:c,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",encryptionType:!((o=this.engine.e2eeManager)===null||o===void 0)&&o.isDataChannelEncryptionEnabled?be.GCM:be.NONE},u=new wi({totalLength:an((a=l.size)!==null&&a!==void 0?a:0),mimeType:l.mimeType,streamId:c,topic:l.topic,timestamp:an(Date.now()),attributes:l.attributes,contentHeader:{case:"byteHeader",value:new Bo({name:l.name})}}),h=new je({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,$.RELIABLE);let m=0;const v=new xe,g=this.engine,S=this.log,k=new WritableStream({write(_){return f(this,void 0,void 0,function*(){const y=yield v.lock();let b=0;try{for(;b<_.byteLength;){const T=_.slice(b,b+al),L=new je({destinationIdentities:d,value:{case:"streamChunk",value:new Ri({content:T,streamId:c,chunkIndex:an(m)})}});yield g.sendDataPacket(L,$.RELIABLE),m+=1,b+=T.byteLength}}finally{y()}})},close(){return f(this,void 0,void 0,function*(){const _=new _i({streamId:c}),y=new je({destinationIdentities:d,value:{case:"streamTrailer",value:_}});yield g.sendDataPacket(y,$.RELIABLE)})},abort(_){S.error("Sink error:",_)}});return new hg(k,l)})}}class Ns 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?O.Muted:O.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(O.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(),Is)),If()&&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(O.TimeSyncUpdate,{timestamp:r,rtpTimestamp:s}),this.rtpTimestamp=s)}};e()}}class ol extends Ns{constructor(e,t,i,r,s,o){super(e,t,C.Kind.Audio,i,o),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=er(a,this.prevStats)),this.prevStats=a}),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;bt()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(bt())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(zi(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&zi(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(O.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(r=>{this.emit(O.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 Us=100;class cl extends Ns{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 o=yield this.getReceiverStats();o&&this.prevStats&&this.receiver&&(this._currentBitrate=er(o,this.prevStats)),this.prevStats=o}),this.debouncedHandleResize=Es(()=>{this.updateDimensions()},Us),this.adaptiveStreamSettings=r}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}setStreamState(e){super.setStreamState(e),this.log.debug("setStreamState",e),this.isAdaptiveStream&&e===C.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?tn(this._mediaStreamTrack,t):en(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 fg(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,o=this.elementInfos.some(c=>c.pictureInPicture),a=this.elementInfos.some(c=>c.visible)&&!s||o;if(!(this.lastVisible===a&&!e)){if(!a&&Date.now()-r<Us){Oe.setTimeout(()=>{this.updateVisibility()},Us);return}this.lastVisible=a,this.emit(O.VisibilityChanged,a,this)}}updateDimensions(){var e,t;let i=0,r=0;const s=this.getPixelDensity();for(const o of this.elementInfos){const a=o.width()*s,c=o.height()*s;a+c>i+r&&(i=a,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(O.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?vd():t||(vd()>2?2:1)}}class fg{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var r;const{target:s,isIntersecting:o}=i;s===this.element&&(this.isIntersecting=o,this.isPiP=Xn(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=Xn(this.element),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=Xn(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Fs(e),this.isPiP=Je()&&Xn(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Fs(this.element),this.isPiP=Xn(this.element),this.element.handleResize=()=>{var r;(r=this.handleResize)===null||r===void 0||r.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,bd().observe(this.element),yd().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=bd())===null||e===void 0||e.unobserve(this.element),(t=yd())===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 Xn(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Fs(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Fs(n,e){const t=e||window;let i=n.offsetTop,r=n.offsetLeft;const s=n.offsetWidth,o=n.offsetHeight,{hidden:a}=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+o>t.pageYOffset&&r+s>t.pageXOffset&&!a&&c!=="none"}class kt extends yt.EventEmitter{constructor(e,t,i,r){var s;super(),this.metadataMuted=!1,this.encryption=be.NONE,this.log=z,this.handleMuted=()=>{this.emit(O.Muted)},this.handleUnmuted=()=>{this.emit(O.Unmuted)},this.log=ct((s=r==null?void 0:r.loggerName)!==null&&s!==void 0?s:Qe.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(O.Muted,this.handleMuted),this.track.off(O.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(O.Muted,this.handleMuted),e.on(O.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Y(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==be.NONE}get audioTrack(){if(ht(this.track))return this.track}get videoTrack(){if(Pt(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={}))})(kt||(kt={}));class tr extends kt{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(O.Ended)},this.handleCpuConstrained=()=>{this.track&&Pt(this.track)&&this.emit(O.CpuConstrained,this.track)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&(this.track.off(O.Ended,this.handleTrackEnded),this.track.off(O.CpuConstrained,this.handleCpuConstrained)),super.setTrack(e),e&&(e.on(O.Ended,this.handleTrackEnded),e.on(O.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(ht(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(Me.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(Me.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(Me.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(Me.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(Me.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(Me.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function Zn(n,e){return f(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:r,optionsWithoutProcessor:s}=ad(n);let o=s.audio,a=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 u=s.audio.deviceId;s.audio.deviceId={exact:u},t=!0,o=Object.assign(Object.assign({},s.audio),{deviceId:{ideal:u}})}if(s.video&&typeof s.video=="object"&&typeof s.video.deviceId=="string"){const u=s.video.deviceId;s.video.deviceId={exact:u},t=!0,a=Object.assign(Object.assign({},s.video),{deviceId:{ideal:u}})}s.audio===!0?s.audio={deviceId:"default"}:typeof s.audio=="object"&&s.audio!==null&&(s.audio=Object.assign(Object.assign({},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=id(s,Kd,Wd),d=ss(c),l=navigator.mediaDevices.getUserMedia(d);s.audio&&(De.userMediaPromiseMap.set("audioinput",l),l.catch(()=>De.userMediaPromiseMap.delete("audioinput"))),s.video&&(De.userMediaPromiseMap.set("videoinput",l),l.catch(()=>De.userMediaPromiseMap.delete("videoinput")));try{const u=yield l;return yield Promise.all(u.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 g;const S=m?d.audio:d.video;typeof S!="boolean"&&(g=S);const k=h.getSettings().deviceId;g!=null&&g.deviceId&&sn(g.deviceId)!==k?g.deviceId=k:g||(g={deviceId:k});const R=Wp(h,g,e);return R.kind===C.Kind.Video?R.source=C.Source.Camera:R.kind===C.Kind.Audio&&(R.source=C.Source.Microphone),R.mediaStream=u,ht(R)&&i?yield R.setProcessor(i):Pt(R)&&r&&(yield R.setProcessor(r)),R})))}catch(u){if(!t)throw u;return Zn(Object.assign(Object.assign({},n),{audio:o,video:a}),e)}})}function dl(n){return f(this,void 0,void 0,function*(){return(yield Zn({audio:!1,video:n??!0}))[0]})}function ll(n){return f(this,void 0,void 0,function*(){return(yield Zn({audio:n??!0,video:!1}))[0]})}function pg(n){return f(this,void 0,void 0,function*(){if(n===void 0&&(n={}),n.resolution===void 0&&!md()&&(n.resolution=Wn.h1080fps30.resolution),navigator.mediaDevices.getDisplayMedia===void 0)throw new qn("getDisplayMedia not supported");const e=sd(n),t=yield navigator.mediaDevices.getDisplayMedia(e),i=t.getVideoTracks();if(i.length===0)throw new dt("no video track found");const r=new En(i[0],void 0,!1);r.source=C.Source.ScreenShare;const s=[r];if(t.getAudioTracks().length>0){const o=new Cn(t.getAudioTracks()[0],void 0,!1);o.source=C.Source.ScreenShareAudio,s.push(o)}return s})}var Dt;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(Dt||(Dt={}));function gg(n){switch(n){case Nn.EXCELLENT:return Dt.Excellent;case Nn.GOOD:return Dt.Good;case Nn.POOR:return Dt.Poor;case Nn.LOST:return Dt.Lost;default:return Dt.Unknown}}class Bs extends yt.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===fn.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===mn.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,r,s,o){let a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:fn.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Dt.Unknown,this.log=z,this.log=ct((c=o==null?void 0:o.loggerName)!==null&&c!==void 0?c:Qe.Participant),this.loggerOptions=o,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=a,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 tt,this.once(x.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===mn.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==mn.ACTIVE&&this.emit(x.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(x.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(x.ParticipantNameChanged,e)}_setAttributes(e){const t=Mf(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(x.AttributesChanged,t)}setPermissions(e){var t,i,r,s,o,a;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!==((o=this.permissions)===null||o===void 0?void 0:o.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((l,u)=>{var h;return l!==((h=this.permissions)===null||h===void 0?void 0:h.canPublishSources[u])})||e.canSubscribeMetrics!==((a=this.permissions)===null||a===void 0?void 0:a.canSubscribeMetrics);return this.permissions=e,d&&this.emit(x.ParticipantPermissionsChanged,c),d}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(x.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=gg(e),t!==this._connectionQuality&&this.emit(x.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=>ht(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(O.Muted,()=>{this.emit(x.TrackMuted,e)}),e.on(O.Unmuted,()=>{this.emit(x.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 vg(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 zo({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 ul extends Bs{constructor(e,t,i,r,s,o){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=be.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new tt)},this.handleReconnected=()=>{var a,c;(c=(a=this.reconnectFuture)===null||a===void 0?void 0:a.resolve)===null||c===void 0||c.call(a),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var a,c,d,l,u,h;this.reconnectFuture&&(this.reconnectFuture.promise.catch(m=>this.log.warn(m.message,this.logContext)),(c=(a=this.reconnectFuture)===null||a===void 0?void 0:a.reject)===null||c===void 0||c.call(a,new Error("Got disconnected during reconnection attempt")),this.reconnectFuture=void 0),this.signalConnectedFuture&&((l=(d=this.signalConnectedFuture).reject)===null||l===void 0||l.call(d,new Error("Got disconnected without signal connected")),this.signalConnectedFuture=void 0),(h=(u=this.activeAgentFuture)===null||u===void 0?void 0:u.reject)===null||h===void 0||h.call(u,new Error("Got disconnected without active agent present")),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=a=>{var c,d;a.participant&&this.updateInfo(a.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new tt),(d=(c=this.signalConnectedFuture).resolve)===null||d===void 0||d.call(c)},this.handleSignalRequestResponse=a=>{const{requestId:c,reason:d,message:l}=a,u=this.pendingSignalRequests.get(c);u&&(d!==jr.OK&&u.reject(new ns(l,d)),this.pendingSignalRequests.delete(c))},this.handleDataPacket=a=>{switch(a.value.case){case"rpcResponse":let c=a.value.value,d=null,l=null;c.value.case==="payload"?d=c.value.value:c.value.case==="error"&&(l=ve.fromProto(c.value.value)),this.handleIncomingRpcResponse(c.requestId,d,l);break;case"rpcAck":let u=a.value.value;this.handleIncomingRpcAck(u.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(a=>vg(a)))},this.onTrackUnmuted=a=>{this.onTrackMuted(a,a.isUpstreamPaused)},this.onTrackMuted=(a,c)=>{if(c===void 0&&(c=!0),!a.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Y(a)));return}this.engine.updateMuteStatus(a.sid,c)},this.onTrackUpstreamPaused=a=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Y(a))),this.onTrackMuted(a,!0)},this.onTrackUpstreamResumed=a=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Y(a))),this.onTrackMuted(a,a.isMuted)},this.onTrackFeatureUpdate=a=>{const c=this.audioTrackPublications.get(a.sid);if(!c){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(a.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(c.trackSid,c.getTrackFeatures())},this.onTrackCpuConstrained=(a,c)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),Y(c))),this.emit(x.LocalTrackCpuConstrained,a,c)},this.handleSubscribedQualityUpdate=a=>f(this,void 0,void 0,function*(){var c,d,l,u,h;if(!(!((h=this.roomOptions)===null||h===void 0)&&h.dynacast))return;const m=this.videoTrackPublications.get(a.trackSid);if(!m){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}if(!m.videoTrack)return;const v=yield m.videoTrack.setPublishingCodecs(a.subscribedCodecs);try{for(var g=!0,S=_t(v),k;k=yield S.next(),c=k.done,!c;g=!0){u=k.value,g=!1;const R=u;nd(R)&&(this.log.debug("publish ".concat(R," for ").concat(m.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Y(m))),yield this.publishAdditionalCodecForTrack(m.videoTrack,R,m.options))}}catch(R){d={error:R}}finally{try{!g&&!c&&(l=S.return)&&(yield l.call(S))}finally{if(d)throw d.error}}}),this.handleLocalTrackUnpublished=a=>{const c=this.trackPublications.get(a.trackSid);if(!c){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}this.unpublishTrack(c.track)},this.handleTrackEnded=a=>f(this,void 0,void 0,function*(){if(a.source===C.Source.ScreenShare||a.source===C.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Y(a))),this.unpublishTrack(a);else if(a.isUserProvided)yield a.mute();else if(It(a)||Kt(a))try{if(Je())try{const c=yield navigator==null?void 0:navigator.permissions.query({name:a.source===C.Source.Camera?"camera":"microphone"});if(c&&c.state==="denied")throw this.log.warn("user has revoked access to ".concat(a.source),Object.assign(Object.assign({},this.logContext),Y(a))),c.onchange=()=>{c.state!=="denied"&&(a.isMuted||a.restartTrack(),c.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}a.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Y(a))),It(a)?yield a.restartTrack({deviceId:"default"}):yield a.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Y(a))),yield a.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=o}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==be.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(A.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(A.Connected,this.handleReconnected).on(A.SignalConnected,this.handleSignalConnected).on(A.SignalRestarted,this.handleReconnected).on(A.SignalResumed,this.handleReconnected).on(A.Restarting,this.handleReconnecting).on(A.Resuming,this.handleReconnecting).on(A.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(A.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(A.Closing,this.handleClosing).on(A.SignalRequestResponse,this.handleSignalRequestResponse).on(A.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:o}=t;return(function*(){return new Fe((a,c)=>f(i,void 0,void 0,function*(){var d,l;try{let u=!1;const h=yield this.engine.client.sendUpdateLocalMetadata((d=r??this.metadata)!==null&&d!==void 0?d:"",(l=s??this.name)!==null&&l!==void 0?l:"",o),m=performance.now();for(this.pendingSignalRequests.set(h,{resolve:a,reject:v=>{c(v),u=!0},values:{name:s,metadata:r,attributes:o}});performance.now()-m<5e3&&!u;){if((!s||this.name===s)&&(!r||this.metadata===r)&&(!o||Object.entries(o).every(v=>{let[g,S]=v;return this.attributes[g]===S||S===""&&!this.attributes[g]}))){this.pendingSignalRequests.delete(h),a();return}yield Le(50)}c(new ns("Request to update local metadata timed out","TimeoutError"))}catch(u){u instanceof Error?c(u):c(new Error(String(u)))}}))})()})}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)}setE2EEEnabled(e){return f(this,void 0,void 0,function*(){this.encryptionType=e?be.GCM:be.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,r){return f(this,void 0,void 0,function*(){var s,o;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let a=this.getTrackPublication(e);if(t)if(a)yield a.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:(o=i)!==null&&o!==void 0?o:!0});break;case C.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new dt(e)}}catch(d){throw c==null||c.forEach(l=>{l.stop()}),d instanceof Error&&this.emit(x.MediaDevicesError,d,os(e)),this.pendingPublishing.delete(e),d}for(const d of c){const l=Object.assign(Object.assign({},this.roomOptions.publishDefaults),i);e===C.Source.Microphone&&ht(d)&&l.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),d.startPreConnectBuffer())}try{const d=[];for(const u of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Y(u))),d.push(this.publishTrack(u,r));[a]=yield Promise.all(d)}catch(d){throw c==null||c.forEach(l=>{l.stop()}),d}finally{this.pendingPublishing.delete(e)}}else if(!(a!=null&&a.track)&&this.pendingPublishing.has(e)&&(a=yield this.waitForPendingPublicationOfSource(e),a||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),a&&a.track)if(e===C.Source.ScreenShare){a=yield this.unpublishTrack(a.track);const c=this.getTrackPublication(C.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield a.mute();return a})}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=id(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 Zn(r,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(a=>(ht(a)&&(this.microphoneError=void 0,a.setAudioContext(this.audioContext),a.source=C.Source.Microphone,this.emit(x.AudioStreamAcquired)),Pt(a)&&(this.cameraError=void 0,a.source=C.Source.Camera),a))}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 qn("getDisplayMedia not supported");e.resolution===void 0&&!md()&&(e.resolution=Wn.h1080fps30.resolution);const t=sd(e),i=yield navigator.mediaDevices.getDisplayMedia(t),r=i.getVideoTracks();if(r.length===0)throw new dt("no video track found");const s=new En(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 o=[s];if(i.getAudioTracks().length>0){this.emit(x.AudioStreamAcquired);const a=new Cn(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});a.source=C.Source.ScreenShareAudio,o.push(a)}return o})}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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return(function*(){var a,c,d,l;It(i)&&i.setAudioContext(s.audioContext),yield(a=s.reconnectFuture)===null||a===void 0?void 0:a.promise,s.republishPromise&&!o&&(yield s.republishPromise),qt(i)&&s.pendingPublishPromises.has(i)&&(yield s.pendingPublishPromises.get(i));let u;if(i instanceof MediaStreamTrack)u=i.getConstraints();else{u=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)&&(u=Object.assign(Object.assign({},u),{deviceId:s.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new Cn(i,u,!0,s.audioContext,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;case"video":i=new En(i,u,!0,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;default:throw new dt("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),Y(h))),h;const m=Object.assign(Object.assign({},s.roomOptions.publishDefaults),r),v="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,g=(c=m.forceStereo)!==null&&c!==void 0?c:v;g&&(m.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),Y(i))),m.red===void 0&&s.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(d=m.dtx)!==null&&d!==void 0||(m.dtx=!1),(l=m.red)!==null&&l!==void 0||(m.red=!1)),!jf()&&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)),m.simulcast=!1),m.source&&(i.source=m.source);const S=new Promise((k,R)=>f(s,void 0,void 0,function*(){try{if(this.engine.client.currentState!==me.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:Y(i)}));let _=!1;const y=setTimeout(()=>{_=!0,i.stop(),R(new ts("publishing rejected as engine not connected within timeout",408))},15e3);if(yield this.waitUntilEngineConnected(),clearTimeout(y),_)return;const b=yield this.publish(i,m,g);k(b)}else try{const _=yield this.publish(i,m,g);k(_)}catch(_){R(_)}}catch(_){R(_)}}));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 tt),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Y(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(r=>Of(r)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Y(e))),!1)}publish(e,t,i){return f(this,void 0,void 0,function*(){var r,s,o,a,c,d,l,u,h,m;if(!this.hasPermissionsToPublish(e))throw new ts("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(P=>qt(e)&&P.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),Y(e))),t.stopMicTrackOnMute&&ht(e)&&(e.stopOnMute=!0),e.source===C.Source.ScreenShare&&nn()&&(t.simulcast=!1),t.videoCodec==="av1"&&!dd()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!ld()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=Rs),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(P=>t.videoCodec===Hn(P.mime))||(t.videoCodec=Hn(this.enabledPublishVideoCodecs[0].mime)));const g=t.videoCodec;e.on(O.Muted,this.onTrackMuted),e.on(O.Unmuted,this.onTrackUnmuted),e.on(O.Ended,this.handleTrackEnded),e.on(O.UpstreamPaused,this.onTrackUpstreamPaused),e.on(O.UpstreamResumed,this.onTrackUpstreamResumed),e.on(O.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const S=[],k=!(!((r=t.dtx)!==null&&r!==void 0)||r),R=e.getSourceTrackSettings();R.autoGainControl&&S.push(Me.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&S.push(Me.TF_ECHO_CANCELLATION),R.noiseSuppression&&S.push(Me.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&S.push(Me.TF_STEREO),k&&S.push(Me.TF_NO_DTX),It(e)&&e.hasPreConnectBuffer&&S.push(Me.TF_PRECONNECT_BUFFER);const _=new Fn({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 y;if(e.kind===C.Kind.Video){let P={width:0,height:0};try{P=yield e.waitForDimensions()}catch{const N=(a=(o=this.roomOptions.videoCaptureDefaults)===null||o===void 0?void 0:o.resolution)!==null&&a!==void 0?a:bn.h720.resolution;P={width:N.width,height:N.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{dims:P}))}_.width=P.width,_.height=P.height,Kt(e)&&(lt(g)&&(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),Y(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),_.simulcastCodecs=[new xr({codec:g,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:Rs}),t.backupCodec&&g!==t.backupCodec.codec&&_.encryption===be.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),_.simulcastCodecs.push(new xr({codec:t.backupCodec.codec,cid:""})))),y=As(e.source===C.Source.ScreenShare,_.width,_.height,t),_.layers=el(_.width,_.height,y,lt(t.videoCodec))}else e.kind===C.Kind.Audio&&(y=[{maxBitrate:(d=t.audioPreset)===null||d===void 0?void 0:d.maxBitrate,priority:(u=(l=t.audioPreset)===null||l===void 0?void 0:l.priority)!==null&&u!==void 0?u:"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 ke("cannot publish track when not connected");const b=()=>f(this,void 0,void 0,function*(){var P,U,N;if(!this.engine.pcManager)throw new ke("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,y),this.emit(x.LocalSenderCreated,e.sender,e),Kt(e)&&((P=t.degradationPreference)!==null&&P!==void 0||(t.degradationPreference=eg(e)),e.setDegradationPreference(t.degradationPreference)),y)if(nn()&&e.kind===C.Kind.Audio){let W;for(const ee of this.engine.pcManager.publisher.getTransceivers())if(ee.sender===e.sender){W=ee;break}W&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:W,codec:"opus",maxbr:!((U=y[0])===null||U===void 0)&&U.maxBitrate?y[0].maxBitrate/1e3:0})}else e.codec&<(e.codec)&&(!((N=y[0])===null||N===void 0)&&N.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:_.cid,codec:e.codec,maxbr:y[0].maxBitrate/1e3});yield this.engine.negotiate()});let T;const L=new Promise((P,U)=>f(this,void 0,void 0,function*(){var N;try{T=yield this.engine.addTrack(_),P(T)}catch(W){e.sender&&(!((N=this.engine.pcManager)===null||N===void 0)&&N.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(ee=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{error:ee}))})),U(W)}}));if(this.enabledPublishVideoCodecs.length>0)T=(yield Promise.all([L,b()]))[0];else{T=yield L;let P;if(T.codecs.forEach(U=>{P===void 0&&(P=U.mimeType)}),P&&e.kind===C.Kind.Video){const U=Hn(P);U!==g&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{codec:U})),t.videoCodec=U,y=As(e.source===C.Source.ScreenShare,_.width,_.height,t))}yield b()}const F=new tr(e.kind,T,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(F.on(O.CpuConstrained,P=>this.onTrackCpuConstrained(P,F)),F.options=t,e.sid=T.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:y,trackInfo:T})),Kt(e)?e.startMonitor(this.engine.client):It(e)&&e.startMonitor(),this.addTrackPublication(F),this.emit(x.LocalTrackPublished,F),It(e)&&T.audioFeatures.includes(Me.TF_PRECONNECT_BUFFER)){const P=e.getPreConnectBuffer(),U=e.getPreConnectBufferMimeType();this.on(x.LocalTrackSubscribed,N=>{if(N.trackSid===T.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),Y(e))),e.stopPreConnectBuffer()}}),P&&new Promise((W,ee)=>f(this,void 0,void 0,function*(){var Te,I,B,q,te,se;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),Y(e)));const Ue=setTimeout(()=>{ee(new Error("agent not active within 10 seconds"))},1e4),j=yield this.waitUntilActiveAgentPresent();clearTimeout(Ue),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),Y(e)));const V=yield this.streamBytes({name:"preconnect-buffer",mimeType:U,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[j.identity],attributes:{trackId:F.trackSid,sampleRate:String((te=R.sampleRate)!==null&&te!==void 0?te:"48000"),channels:String((se=R.channelCount)!==null&&se!==void 0?se:"1")}});try{for(var ae=!0,we=_t(P),Ne;Ne=yield we.next(),Te=Ne.done,!Te;ae=!0){q=Ne.value,ae=!1;const ce=q;yield V.write(ce)}}catch(ce){I={error:ce}}finally{try{!ae&&!Te&&(B=we.return)&&(yield B.call(we))}finally{if(I)throw I.error}}yield V.close(),W()}catch(Ue){ee(Ue)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),Y(e)))}).catch(W=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{error:W}))})}return F})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return f(this,void 0,void 0,function*(){var r;if(this.encryptionType!==be.NONE)return;let s;if(this.trackPublications.forEach(m=>{m.track&&m.track===e&&(s=m)}),!s)throw new dt("track is not published");if(!Kt(e))throw new dt("track is not a video track");const o=Object.assign(Object.assign({},(r=this.roomOptions)===null||r===void 0?void 0:r.publishDefaults),i),a=Yp(e,t,o);if(!a){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Y(e)));return}const c=e.addSimulcastTrack(t,a);if(!c)return;const d=new Fn({cid:c.mediaStreamTrack.id,type:C.kindToProto(e.kind),muted:e.isMuted,source:C.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:o.videoCodec,cid:c.mediaStreamTrack.id}]});if(d.layers=el(d.width,d.height,a),!this.engine||this.engine.isClosed)throw new ke("cannot publish track when not connected");const l=()=>f(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,o,a),yield this.engine.negotiate()}),h=(yield Promise.all([this.engine.addTrack(d),l()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:a,trackInfo:h}))})}unpublishTrack(e,t){return f(this,void 0,void 0,function*(){var i,r;if(qt(e)){const d=this.pendingPublishPromises.get(e);d&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Y(e))),yield d)}const s=this.getPublicationForTrack(e),o=s?Y(s):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),o)),!s||!s.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),o));return}e=s.track,e.off(O.Muted,this.onTrackMuted),e.off(O.Unmuted,this.onTrackUnmuted),e.off(O.Ended,this.handleTrackEnded),e.off(O.UpstreamPaused,this.onTrackUpstreamPaused),e.off(O.UpstreamResumed,this.onTrackUpstreamResumed),e.off(O.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 a=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ge.FAILED&&c)try{for(const d of this.engine.pcManager.publisher.getTransceivers())d.sender===c&&(d.direction="inactive",a=!0);if(this.engine.removeTrack(c)&&(a=!0),Kt(e)){for(const[,d]of e.simulcastCodecs)d.sender&&(this.engine.removeTrack(d.sender)&&(a=!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),o),{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(x.LocalTrackUnpublished,s),s.setTrack(void 0),a&&(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 Fe((s,o)=>f(i,void 0,void 0,function*(){try{const a=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),a.push(c))}),yield Promise.all(a.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&&(It(d)||Kt(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(a){a instanceof Error?o(a):o(new Error(String(a)))}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?$.RELIABLE:$.LOSSY,o=r.destinationIdentities,a=r.topic;let c=new _r({participantIdentity:i.identity,payload:t,destinationIdentities:o,topic:a});const d=new je({kind:s,value:{case:"user",value:c}});yield i.engine.sendDataPacket(d,s)})()})}publishDtmf(e,t){return f(this,void 0,void 0,function*(){const i=new je({kind:$.RELIABLE,value:{case:"sipDtmf",value:new Po({code:e,digit:t})}});yield this.engine.sendDataPacket(i,$.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 je({value:{case:"chatMessage",value:new Ei(Object.assign(Object.assign({},i),{timestamp:pe.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(r,$.RELIABLE),this.emit(x.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 je({value:{case:"chatMessage",value:new Ei(Object.assign(Object.assign({},i),{timestamp:pe.parse(i.timestamp),editTimestamp:pe.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(r,$.RELIABLE),this.emit(x.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){let{destinationIdentity:t,method:i,payload:r,responseTimeout:s=15e3}=e;const o=7e3,a=o+1e3;return new Fe((c,d)=>f(this,void 0,void 0,function*(){var l,u,h,m;if(Ps(r)>Jd){d(ve.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((u=(l=this.engine.latestJoinResponse)===null||l===void 0?void 0:l.serverInfo)===null||u===void 0)&&u.version&&ut((m=(h=this.engine.latestJoinResponse)===null||h===void 0?void 0:h.serverInfo)===null||m===void 0?void 0:m.version,"1.8.0")<0){d(ve.builtIn("UNSUPPORTED_SERVER"));return}const v=Math.max(s,a),g=crypto.randomUUID();yield this.publishRpcRequest(t,g,i,r,v);const S=setTimeout(()=>{this.pendingAcks.delete(g),d(ve.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(g),clearTimeout(k)},o);this.pendingAcks.set(g,{resolve:()=>{clearTimeout(S)},participantIdentity:t});const k=setTimeout(()=>{this.pendingResponses.delete(g),d(ve.builtIn("RESPONSE_TIMEOUT"))},s);this.pendingResponses.set(g,{resolve:(R,_)=>{clearTimeout(k),this.pendingAcks.has(g)&&(this.log.warn("RPC response received before ack",g),this.pendingAcks.delete(g),clearTimeout(S)),_?d(_):c(R??"")},participantIdentity:t})}))}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 o=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcRequest",value:new Pr({id:t,method:i,payload:r,responseTimeoutMs:s,version:1})}});yield this.engine.sendDataPacket(o,$.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,ve.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 o=s.isMuted||((r=(i=s.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&r!==void 0?r:!1);o!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Y(s)),{mutedOnServer:o})),this.engine.client.sendMuteTrack(t.sid,o))}}),!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,new Error("Agent disconnected")),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new tt),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const r=i.track;r&&(e instanceof MediaStreamTrack?(It(r)||Kt(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[o]=s;return o.source===e});if(r)return r[1];yield Le(20)}})}}class hl extends kt{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(O.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 Mi({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Mo({participantSid:"",trackSids:[this.trackSid]})]});this.emit(O.UpdateSubscription,r),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?kt.SubscriptionStatus.Unsubscribed:super.isSubscribed?kt.SubscriptionStatus.Subscribed:kt.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?kt.PermissionStatus.Allowed:kt.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||(fs(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&fs(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var e;return(e=this.requestedMaxQuality)!==null&&e!==void 0?e:He.HIGH}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,r=this.track;r!==e&&(r&&(r.off(O.VideoDimensionsChanged,this.handleVideoDimensionsChange),r.off(O.VisibilityChanged,this.handleVisibilityChange),r.off(O.Ended,this.handleEnded),r.detach(),r.stopMonitor(),this.emit(O.Unsubscribed,r)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(O.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(O.VisibilityChanged,this.handleVisibilityChange),e.on(O.Ended,this.handleEnded),this.emit(O.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(O.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?O.Muted:O.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(O.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(O.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 fs(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new Wo({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)od(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=Df(this.trackInfo,this.requestedMaxQuality);i&&od(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:He.HIGH})),e.quality=He.HIGH)}this.emit(O.UpdateSettings,e)}}class ei extends Bs{static fromParticipantInfo(e,t,i){return new ei(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,o,a){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:fn.STANDARD;super(t,i||"",r,s,o,a,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(O.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{settings:t})),this.signalClient.sendUpdateTrackSettings(t)}),e.on(O.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(O.SubscriptionPermissionChanged,t=>{this.emit(x.TrackSubscriptionPermissionChanged,e,t)}),e.on(O.SubscriptionStatusChanged,t=>{this.emit(x.TrackSubscriptionStatusChanged,e,t)}),e.on(O.Subscribed,t=>{this.emit(x.TrackSubscribed,t,e)}),e.on(O.Unsubscribed,t=>{this.emit(x.TrackUnsubscribed,t,e)}),e.on(O.SubscriptionFailed,t=>{this.emit(x.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,o){let a=this.getTrackPublicationBySid(t);if(a||t.startsWith("TR")||this.trackPublications.forEach(l=>{!a&&e.kind===l.kind.toString()&&(a=l)}),!a){if(o===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(x.TrackSubscriptionFailed,t);return}o===void 0&&(o=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,r,s,o-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),Y(a))),this.emit(x.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let d;return c?d=new cl(e,t,r,s):d=new ol(e,t,r,this.audioContext,this.audioOutput),d.source=a.source,d.isMuted=a.isMuted,d.setMediaStream(i),d.start(),a.setTrack(d),this.volumeMap.has(a.source)&&Yi(d)&&ht(d)&&d.setVolume(this.volumeMap.get(a.source)),a}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,o;let a=this.getTrackPublicationBySid(r.sid);if(a)a.updateInfo(r);else{const c=C.kindFromProto(r.type);if(!c)return;a=new hl(c,r,(s=this.signalClient.connectOptions)===null||s===void 0?void 0:s.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(o=this.loggerOptions)===null||o===void 0?void 0:o.loggerName}),a.updateInfo(r),i.set(r.sid,a);const d=Array.from(this.trackPublications.values()).find(l=>l.source===(a==null?void 0:a.source));d&&a.source!==C.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(a.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Y(d),newTrack:Y(a)})),this.addTrackPublication(a)}t.set(r.sid,a)}),this.trackPublications.forEach(r=>{t.has(r.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Y(r))),this.unpublishTrack(r.trackSid,!0))}),i.forEach(r=>{this.emit(x.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(x.TrackUnpublished,i)}setAudioOutput(e){return f(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var r;ht(i.track)&&Yi(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 re;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})(re||(re={}));const yg=4*1e3;class wn extends yt.EventEmitter{get hasE2EESetup(){return this.e2eeManager!==void 0}constructor(e){var t,i,r,s,o;if(super(),t=this,this.state=re.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=z,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(a,c,d)=>f(this,void 0,void 0,function*(){var l;if(!ud())throw bt()?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===re.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(re.Connecting),((l=this.regionUrlProvider)===null||l===void 0?void 0:l.getServerUrl().toString())!==Cd(a)&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),kn(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new ne(a,c):this.regionUrlProvider.updateToken(c),this.regionUrlProvider.fetchRegionSettings().then(v=>{var g;(g=this.regionUrlProvider)===null||g===void 0||g.setServerReportedRegions(v)}).catch(v=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:v}))}));const h=(v,g,S)=>f(this,void 0,void 0,function*(){var k,R;this.abortController&&this.abortController.abort();const _=new AbortController;this.abortController=_,u==null||u();try{if(yield Tn.getInstance().getBackOffPromise(a),_.signal.aborted)throw K.cancelled("Connection attempt aborted");yield this.attemptConnection(S??a,c,d,_),this.abortController=void 0,v()}catch(y){if(this.regionUrlProvider&&y instanceof K&&y.reason!==ue.Cancelled&&y.reason!==ue.NotAllowed){let b=null;try{this.log.debug("Fetching next region"),b=yield this.regionUrlProvider.getNextBestRegionUrl((k=this.abortController)===null||k===void 0?void 0:k.signal)}catch(T){if(T instanceof K&&(T.status===401||T.reason===ue.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),g(T);return}}[ue.InternalError,ue.ServerUnreachable,ue.Timeout].includes(y.reason)&&(this.log.debug("Adding failed connection attempt to back off"),Tn.getInstance().addFailedConnectionAttempt(a)),b&&!(!((R=this.abortController)===null||R===void 0)&&R.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(y.message,". Retrying with another region: ").concat(b),this.logContext),this.recreateEngine(),yield h(v,g,b)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Td(y)),g(y))}else{let b=Ze.UNKNOWN_REASON;y instanceof K&&(b=Td(y)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,b),g(y)}}}),m=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new tt((v,g)=>{h(v,g,m)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,c,d,l,u,h)=>f(this,void 0,void 0,function*(){var m,v,g;const S=yield d.join(a,c,{autoSubscribe:l.autoSubscribe,adaptiveStream:typeof u.adaptiveStream=="object"?!0:u.adaptiveStream,maxRetries:l.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:l.websocketTimeout},h.signal,!u.singlePeerConnection);let k=S.serverInfo;if(k||(k={version:S.serverVersion,region:S.serverRegion}),this.serverInfo=k,this.log.debug("connected to Livekit Server ".concat(Object.entries(k).map(R=>{let[_,y]=R;return"".concat(_,": ").concat(y)}).join(", ")),{room:(m=S.room)===null||m===void 0?void 0:m.name,roomSid:(v=S.room)===null||v===void 0?void 0:v.sid,identity:(g=S.participant)===null||g===void 0?void 0:g.identity}),!k.version)throw new Xc("unknown server version");return k.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),u.dynacast=!1),S}),this.applyJoinResponse=a=>{const c=a.participant;if(this.localParticipant.sid=c.sid,this.localParticipant.identity=c.identity,this.localParticipant.setEnabledPublishCodecs(a.enabledPublishCodecs),this.e2eeManager)try{this.e2eeManager.setSifTrailer(a.sifTrailer)}catch(d){this.log.error(d instanceof Error?d.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:d}))}this.handleParticipantUpdates([c,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,c,d,l)=>f(this,void 0,void 0,function*(){var u,h;this.state===re.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(),!((h=this.regionUrlProvider)===null||h===void 0)&&h.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},_s),d),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const m=yield this.connectSignal(a,c,this.engine,this.connOptions,this.options,l);this.applyJoinResponse(m),this.setupLocalParticipantEvents(),this.emit(M.SignalConnected)}catch(m){yield this.engine.close(),this.recreateEngine();const v=l.signal.aborted?K.cancelled("Signal connection aborted"):K.serverUnreachable("could not establish signal connection");throw m instanceof Error&&(v.message="".concat(v.message,": ").concat(m.message)),m instanceof K&&(v.reason=m.reason,v.status=m.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:m})),v}if(l.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),K.cancelled("Connection attempt aborted");try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,l)}catch(m){throw yield this.engine.close(),this.recreateEngine(),m}Je()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),Je()&&window.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(re.Connected),this.emit(M.Connected),Tn.getInstance().resetFailedConnectionAttempts(a),this.registerConnectionReconcile(),this.regionUrlProvider&&this.regionUrlProvider.notifyConnected()}),this.disconnect=function(){for(var a=arguments.length,c=new Array(a),d=0;d<a;d++)c[d]=arguments[d];return f(t,[...c],void 0,function(){var l=this;let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var h,m,v;const g=yield l.disconnectLock.lock();try{if(l.state===re.Disconnected){l.log.debug("already disconnected",l.logContext);return}if(l.log.info("disconnect from room",Object.assign({},l.logContext)),l.state===re.Connecting||l.state===re.Reconnecting||l.isResuming){const S="Abort connection attempt due to user initiated disconnect";l.log.warn(S,l.logContext),(h=l.abortController)===null||h===void 0||h.abort(S),(v=(m=l.connectFuture)===null||m===void 0?void 0:m.reject)===null||v===void 0||v.call(m,K.cancelled("Client initiated disconnect")),l.connectFuture=void 0}l.engine&&(l.engine.client.isDisconnected||(yield l.engine.client.sendLeave()),yield l.engine.close()),l.handleDisconnect(u,Ze.CLIENT_INITIATED),l.engine=void 0}finally{g()}})()})},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=[],c=Ve();if(c&&c.os==="iOS"){const d="livekit-dummy-audio-el";let l=document.getElementById(d);if(!l){l=document.createElement("audio"),l.id=d,l.autoplay=!0,l.hidden=!0;const u=$i();u.enabled=!0;const h=new MediaStream([u]);l.srcObject=h,document.addEventListener("visibilitychange",()=>{l&&(l.srcObject=document.hidden?null:h,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(l),this.once(M.Disconnected,()=>{l==null||l.remove(),l=null})}a.push(l)}this.remoteParticipants.forEach(d=>{d.audioTrackPublications.forEach(l=>{l.track&&l.track.attachedElements.forEach(u=>{a.push(u)})})});try{yield Promise.all([this.acquireAudioContext(),...a.map(d=>(d.muted=!1,d.play()))]),this.handleAudioPlaybackStarted()}catch(d){throw this.handleAudioPlaybackFailed(d),d}}),this.startVideo=()=>f(this,void 0,void 0,function*(){const a=[];for(const c of this.remoteParticipants.values())c.videoTrackPublications.forEach(d=>{var l;(l=d.track)===null||l===void 0||l.attachedElements.forEach(u=>{a.includes(u)||a.push(u)})});yield Promise.all(a.map(c=>c.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(c=>{c.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(re.Reconnecting)&&this.emit(M.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(c){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:c}))}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(re.Connected),this.emit(M.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(c=>{var d;if(c.identity===this.localParticipant.identity){this.localParticipant.updateInfo(c);return}c.identity===""&&(c.identity=(d=this.sidToIdentity.get(c.sid))!==null&&d!==void 0?d:"");let l=this.remoteParticipants.get(c.identity);c.state===mn.DISCONNECTED?this.handleParticipantDisconnected(c.identity,l):l=this.getOrCreateParticipant(c.identity,c)})},this.handleActiveSpeakersUpdate=a=>{const c=[],d={};a.forEach(l=>{if(d[l.sid]=!0,l.sid===this.localParticipant.sid)this.localParticipant.audioLevel=l.level,this.localParticipant.setIsSpeaking(!0),c.push(this.localParticipant);else{const u=this.getRemoteParticipantBySid(l.sid);u&&(u.audioLevel=l.level,u.setIsSpeaking(!0),c.push(u))}}),d[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(l=>{d[l.sid]||(l.audioLevel=0,l.setIsSpeaking(!1))}),this.activeSpeakers=c,this.emitWhenConnected(M.ActiveSpeakersChanged,c)},this.handleSpeakersChanged=a=>{const c=new Map;this.activeSpeakers.forEach(l=>{const u=this.remoteParticipants.get(l.identity);u&&u.sid!==l.sid||c.set(l.sid,l)}),a.forEach(l=>{let u=this.getRemoteParticipantBySid(l.sid);l.sid===this.localParticipant.sid&&(u=this.localParticipant),u&&(u.audioLevel=l.level,u.setIsSpeaking(l.active),l.active?c.set(l.sid,u):c.delete(l.sid))});const d=Array.from(c.values());d.sort((l,u)=>u.audioLevel-l.audioLevel),this.activeSpeakers=d,this.emitWhenConnected(M.ActiveSpeakersChanged,d)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(c=>{const d=this.getRemoteParticipantBySid(c.participantSid);if(!d)return;const l=d.getTrackPublicationBySid(c.trackSid);if(!l||!l.track)return;const u=C.streamStateFromProto(c.state);l.track.setStreamState(u),u!==l.track.streamState&&(d.emit(x.TrackStreamStateChanged,l,l.track.streamState),this.emitWhenConnected(M.TrackStreamStateChanged,l,l.track.streamState,d))})},this.handleSubscriptionPermissionUpdate=a=>{const c=this.getRemoteParticipantBySid(a.participantSid);if(!c)return;const d=c.getTrackPublicationBySid(a.trackSid);d&&d.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const c=Array.from(this.remoteParticipants.values()).find(l=>l.trackPublications.has(a.trackSid));if(!c)return;const d=c.getTrackPublicationBySid(a.trackSid);d&&d.setSubscriptionError(a.err)},this.handleDataPacket=(a,c)=>{const d=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(d,a.value.value,a.kind,c);else if(a.value.case==="transcription")this.handleTranscription(d,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(d,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(d,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,d);else if(a.value.case==="streamHeader"||a.value.case==="streamChunk"||a.value.case==="streamTrailer")this.handleDataStream(a,c);else if(a.value.case==="rpcRequest"){const l=a.value.value;this.handleIncomingRpcRequest(a.participantIdentity,l.id,l.method,l.payload,l.responseTimeoutMs,l.version)}},this.handleUserPacket=(a,c,d,l)=>{this.emit(M.DataReceived,c.payload,a,d,c.topic,l),a==null||a.emit(x.DataReceived,c.payload,d,l)},this.handleSipDtmf=(a,c)=>{this.emit(M.SipDTMFReceived,c,a),a==null||a.emit(x.SipDTMFReceived,c)},this.handleTranscription=(a,c)=>{const d=c.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(c.transcribedParticipantIdentity),l=d==null?void 0:d.trackPublications.get(c.trackId),u=zf(c,this.transcriptionReceivedTimes);l==null||l.emit(O.TranscriptionReceived,u),d==null||d.emit(x.TranscriptionReceived,u,l),this.emit(M.TranscriptionReceived,u,d,l)},this.handleChatMessage=(a,c)=>{const d=$f(c);this.emit(M.ChatMessage,d,a)},this.handleMetrics=(a,c)=>{this.emit(M.MetricsReceived,a,c)},this.handleDataStream=(a,c)=>{this.incomingDataStreamManager.handleDataStreamPacket(a,c)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(M.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(M.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(M.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(M.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>f(this,void 0,void 0,function*(){var a;((a=Ve())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(M.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const c=this.roomInfo;this.roomInfo=a,c&&c.metadata!==a.metadata&&this.emitWhenConnected(M.RoomMetadataChanged,a.metadata),(c==null?void 0:c.activeRecording)!==a.activeRecording&&this.emitWhenConnected(M.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(c=>{if(c.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(c.quality);return}const d=this.getRemoteParticipantBySid(c.participantSid);d&&d.setConnectionQuality(c.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(M.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(M.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(M.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(M.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(M.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var c;(c=a==null?void 0:a.onPublish)===null||c===void 0||c.call(a,this)},this.onLocalTrackPublished=a=>f(this,void 0,void 0,function*(){var c,d,l,u,h,m;(c=a.track)===null||c===void 0||c.on(O.TrackProcessorUpdate,this.onTrackProcessorUpdate),(d=a.track)===null||d===void 0||d.on(O.Restarted,this.onLocalTrackRestarted),(h=(u=(l=a.track)===null||l===void 0?void 0:l.getProcessor())===null||u===void 0?void 0:u.onPublish)===null||h===void 0||h.call(u,this),this.emit(M.LocalTrackPublished,a,this.localParticipant),It(a.track)&&(yield a.track.checkForSilence())&&this.emit(M.LocalAudioSilenceDetected,a);const v=yield(m=a.track)===null||m===void 0?void 0:m.getDeviceId(!1),g=os(a.source);g&&v&&v!==this.localParticipant.activeDeviceMap.get(g)&&(this.localParticipant.activeDeviceMap.set(g,v),this.emit(M.ActiveDeviceChanged,g,v))}),this.onLocalTrackUnpublished=a=>{var c,d;(c=a.track)===null||c===void 0||c.off(O.TrackProcessorUpdate,this.onTrackProcessorUpdate),(d=a.track)===null||d===void 0||d.off(O.Restarted,this.onLocalTrackRestarted),this.emit(M.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>f(this,void 0,void 0,function*(){const c=yield a.getDeviceId(!1),d=os(a.source);d&&c&&c!==this.localParticipant.activeDeviceMap.get(d)&&(this.log.debug("local track restarted, setting ".concat(d," ").concat(c," active"),this.logContext),this.localParticipant.activeDeviceMap.set(d,c),this.emit(M.ActiveDeviceChanged,d,c))}),this.onLocalConnectionQualityChanged=a=>{this.emit(M.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,c)=>{this.emit(M.MediaDevicesError,a,c)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(M.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(M.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},Lp),e),this.log=ct((i=this.options.loggerName)!==null&&i!==void 0?i:Qe.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Kd),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Wd),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},xp),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new lg,this.outgoingDataStreamManager=new mg(this.engine,this.log),this.disconnectLock=new xe,this.localParticipant=new ul("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),(this.options.e2ee||this.options.encryption)&&this.setupE2EE(),this.engine.e2eeManager=this.e2eeManager,this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",sn(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",sn(this.options.audioCaptureDefaults.deviceId)),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&this.switchActiveDevice("audiooutput",sn(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),Je()){const a=new AbortController;(o=(s=navigator.mediaDevices)===null||s===void 0?void 0:s.addEventListener)===null||o===void 0||o.call(s,"devicechange",this.handleDeviceChange,{signal:a.signal}),wn.cleanupRegistry&&wn.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;const t=!!this.options.encryption,i=this.options.encryption||this.options.e2ee;i&&("e2eeManager"in i?(this.e2eeManager=i.e2eeManager,this.e2eeManager.isDataChannelEncryptionEnabled=t):this.e2eeManager=new vp(i,t),this.e2eeManager.on(Ot.ParticipantEncryptionStatusChanged,(r,s)=>{Sd(s)&&(this.isE2EEEnabled=r),this.emit(M.ParticipantEncryptionStatusChanged,r,s)}),this.e2eeManager.on(Ot.EncryptionError,(r,s)=>{const o=s?this.getParticipantByIdentity(s):void 0;this.emit(M.EncryptionError,r,o)}),(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 this.state===re.Disconnected?Fe.resolve(""):this.roomInfo&&this.roomInfo.sid!==""?Fe.resolve(this.roomInfo.sid):new Fe((e,t)=>{const i=r=>{r.sid!==""&&(this.engine.off(A.RoomUpdate,i),e(r.sid))};this.engine.on(A.RoomUpdate,i),this.once(M.Disconnected,()=>{this.engine.off(A.RoomUpdate,i),t(new ke("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 ag(this.options),this.engine.e2eeManager=this.e2eeManager,this.engine.on(A.ParticipantUpdate,this.handleParticipantUpdates).on(A.RoomUpdate,this.handleRoomUpdate).on(A.SpeakersChanged,this.handleSpeakersChanged).on(A.StreamStateChanged,this.handleStreamStateUpdate).on(A.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(A.SubscriptionError,this.handleSubscriptionError).on(A.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(A.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(A.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(A.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(A.DataPacketReceived,this.handleDataPacket).on(A.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(re.SignalReconnecting)&&this.emit(M.SignalReconnecting)}).on(A.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(re.Connected)&&this.emit(M.Reconnected)}).on(A.SignalResumed,()=>{this.bufferedEvents=[],(this.state===re.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(A.Restarting,this.handleRestarting).on(A.SignalRestarted,this.handleSignalRestarted).on(A.Offline,()=>{this.setAndEmitConnectionState(re.Reconnecting)&&this.emit(M.Reconnecting)}).on(A.DCBufferStatusChanged,(e,t)=>{this.emit(M.DCBufferStatusChanged,e,t)}).on(A.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(x.LocalTrackSubscribed,t),this.emitWhenConnected(M.LocalTrackSubscribed,t,this.localParticipant)}).on(A.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(M.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 De.getInstance().getDevices(e,t)}prepareConnection(e,t){return f(this,void 0,void 0,function*(){if(this.state===re.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(kn(new URL(e))&&t){this.regionUrlProvider=new ne(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===re.Disconnected&&(this.regionUrl=i,yield fetch($n(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch($n(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=()=>f(this,void 0,void 0,function*(){}),r;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":r=new vt({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":r=new vt({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":r=new vt({scenario:{case:"serverLeave",value:!0}});break;case"migration":r=new vt({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 vt({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 vt({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 vt({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 Oi({reason:Ze.CLIENT_INITIATED,action:gn.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");r=new vt({scenario:{case:"subscriberBandwidth",value:an(t)}});break;case"leave-full-reconnect":r=new vt({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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return(function*(){var a,c,d,l,u,h,m;let v=!0,g=!1;const S=o?{exact:r}:r;if(i==="audioinput"){g=s.localParticipant.audioTrackPublications.size===0;const k=(a=s.getActiveDevice(i))!==null&&a!==void 0?a:s.options.audioCaptureDefaults.deviceId;s.options.audioCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.audioTrackPublications.values()).filter(y=>y.source===C.Source.Microphone);try{v=(yield Promise.all(R.map(y=>{var b;return(b=y.audioTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(y=>y===!0)}catch(y){throw s.options.audioCaptureDefaults.deviceId=k,y}const _=R.some(y=>{var b,T;return(T=(b=y.track)===null||b===void 0?void 0:b.isMuted)!==null&&T!==void 0?T:!1});v&&_&&(g=!0)}else if(i==="videoinput"){g=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(y=>y.source===C.Source.Camera);try{v=(yield Promise.all(R.map(y=>{var b;return(b=y.videoTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(y=>y===!0)}catch(y){throw s.options.videoCaptureDefaults.deviceId=k,y}const _=R.some(y=>{var b,T;return(T=(b=y.track)===null||b===void 0?void 0:b.isMuted)!==null&&T!==void 0?T:!1});v&&_&&(g=!0)}else if(i==="audiooutput"){if(g=!0,!zi()&&!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 De.getInstance().normalizeDeviceId("audiooutput",r))!==null&&d!==void 0?d:""),(l=(m=s.options).audioOutput)!==null&&l!==void 0||(m.audioOutput={});const k=(u=s.getActiveDevice(i))!==null&&u!==void 0?u: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 g&&(s.localParticipant.activeDeviceMap.set(i,r),s.emit(M.ActiveDeviceChanged,i,r)),v})()})}setupLocalParticipantEvents(){this.localParticipant.on(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(x.AttributesChanged,this.onLocalAttributesChanged).on(x.TrackMuted,this.onLocalTrackMuted).on(x.TrackUnmuted,this.onLocalTrackUnmuted).on(x.LocalTrackPublished,this.onLocalTrackPublished).on(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(x.MediaDevicesError,this.onMediaDevicesError).on(x.AudioStreamAcquired,this.startAudio).on(x.ChatMessage,this.onLocalChatMessageSent).on(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,t,i){if(this.state===re.Connecting||this.state===re.Reconnecting){const u=()=>{this.log.debug("deferring on track for later",{mediaTrackId:e.id,mediaStreamId:t.id,tracksInStream:t.getTracks().map(m=>m.id)}),this.onTrackAdded(e,t,i),h()},h=()=>{this.off(M.Reconnected,u),this.off(M.Connected,u),this.off(M.Disconnected,h)};this.once(M.Reconnected,u),this.once(M.Connected,u),this.once(M.Disconnected,h);return}if(this.state===re.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=Lf(t.id),s=r[0];let o=r[1],a=e.id;if(o&&o.startsWith("TR")&&(a=o),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(u=>u.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}if(!a.startsWith("TR")){const u=this.engine.getTrackIdForReceiver(i);if(!u){this.log.error("Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ".concat(s),this.logContext);return}a=u}a.startsWith("TR")||this.log.warn("Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ".concat(s,", streamId: ").concat(o,", trackId: ").concat(a),Object.assign(Object.assign({},this.logContext),{rpID:s,streamId:o,trackId:a}));let d;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?d=this.options.adaptiveStream:d={});const l=c.addSubscribedMediaTrack(e,a,t,i,d);l!=null&&l.isEncrypted&&!this.e2eeManager&&this.emit(M.EncryptionError,new Error("Encrypted ".concat(l.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,r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearControllers(),this.state!==re.Disconnected){this.regionUrl=void 0,this.regionUrlProvider&&this.regionUrlProvider.notifyDisconnected();try{this.remoteParticipants.forEach(s=>{s.trackPublications.forEach(o=>{s.unpublishTrack(o.trackSid)})}),this.localParticipant.trackPublications.forEach(s=>{var o,a,c;s.track&&this.localParticipant.unpublishTrack(s.track,e),e?((o=s.track)===null||o===void 0||o.detach(),(a=s.track)===null||a===void 0||a.stop()):(c=s.track)===null||c===void 0||c.stopMonitor()}),this.localParticipant.off(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(x.AttributesChanged,this.onLocalAttributesChanged).off(x.TrackMuted,this.onLocalTrackMuted).off(x.TrackUnmuted,this.onLocalTrackUnmuted).off(x.LocalTrackPublished,this.onLocalTrackPublished).off(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(x.MediaDevicesError,this.onMediaDevicesError).off(x.AudioStreamAcquired,this.startAudio).off(x.ChatMessage,this.onLocalChatMessageSent).off(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),Je()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=(i=navigator.mediaDevices)===null||i===void 0?void 0:i.removeEventListener)===null||r===void 0||r.call(i,"devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(re.Disconnected),this.emit(M.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(M.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleIncomingRpcRequest(e,t,i,r,s,o){return f(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),o!==1){yield this.engine.publishRpcResponse(e,t,null,ve.builtIn("UNSUPPORTED_VERSION"));return}const a=this.rpcHandlers.get(i);if(!a){yield this.engine.publishRpcResponse(e,t,null,ve.builtIn("UNSUPPORTED_METHOD"));return}let c=null,d=null;try{const l=yield a({requestId:t,callerIdentity:e,payload:r,responseTimeout:s});Ps(l)>Jd?(c=ve.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),this.log.warn("RPC Response payload too large for ".concat(i))):d=l}catch(l){l instanceof ve?c=l:(this.log.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),l),c=ve.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=De.getInstance().previousDevices,s=yield De.getInstance().getDevices(void 0,!1),o=Ve();if((o==null?void 0:o.name)==="Chrome"&&o.os!=="iOS")for(let c of s){const d=r.find(l=>l.deviceId===c.deviceId);d&&d.label!==""&&d.kind===c.kind&&d.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(M.ActiveDeviceChanged,c.kind,c.deviceId)}const a=["audiooutput","audioinput","videoinput"];for(let c of a){const d=_f(c),l=this.localParticipant.getTrackPublication(d);if(l&&(!((e=l.track)===null||e===void 0)&&e.isUserProvided))continue;const u=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)&&u.length>0&&((i=u[0])===null||i===void 0?void 0:i.deviceId)!==h){yield this.switchActiveDevice(c,u[0].deviceId);continue}c==="audioinput"&&!Gn()||c==="videoinput"||u.length>0&&!u.find(m=>m.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!Gn())&&(yield this.switchActiveDevice(c,u[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=as())!==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(),Le(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(M.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let r;return t?r=ei.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):r=new ei(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(M.ParticipantConnected,i),i.on(x.TrackPublished,r=>{this.emitWhenConnected(M.TrackPublished,r,i)}).on(x.TrackSubscribed,(r,s)=>{r.kind===C.Kind.Audio?(r.on(O.AudioPlaybackStarted,this.handleAudioPlaybackStarted),r.on(O.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):r.kind===C.Kind.Video&&(r.on(O.VideoPlaybackFailed,this.handleVideoPlaybackFailed),r.on(O.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(M.TrackSubscribed,r,s,i)}).on(x.TrackUnpublished,r=>{this.emit(M.TrackUnpublished,r,i)}).on(x.TrackUnsubscribed,(r,s)=>{this.emit(M.TrackUnsubscribed,r,s,i)}).on(x.TrackMuted,r=>{this.emitWhenConnected(M.TrackMuted,r,i)}).on(x.TrackUnmuted,r=>{this.emitWhenConnected(M.TrackUnmuted,r,i)}).on(x.ParticipantMetadataChanged,r=>{this.emitWhenConnected(M.ParticipantMetadataChanged,r,i)}).on(x.ParticipantNameChanged,r=>{this.emitWhenConnected(M.ParticipantNameChanged,r,i)}).on(x.AttributesChanged,r=>{this.emitWhenConnected(M.ParticipantAttributesChanged,r,i)}).on(x.ConnectionQualityChanged,r=>{this.emitWhenConnected(M.ConnectionQualityChanged,r,i)}).on(x.ParticipantPermissionsChanged,r=>{this.emitWhenConnected(M.ParticipantPermissionsChanged,r,i)}).on(x.TrackSubscriptionStatusChanged,(r,s)=>{this.emitWhenConnected(M.TrackSubscriptionStatusChanged,r,s,i)}).on(x.TrackSubscriptionFailed,(r,s)=>{this.emit(M.TrackSubscriptionFailed,r,i,s)}).on(x.TrackSubscriptionPermissionChanged,(r,s)=>{this.emitWhenConnected(M.TrackSubscriptionPermissionChanged,r,s,i)}).on(x.Active,()=>{this.emitWhenConnected(M.ParticipantActive,i),i.kind===fn.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&&Qf(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=Oe.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,transportsConnectedOrConnecting:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Ze.STATE_MISMATCH))):e=0},yg)}clearConnectionReconcile(){this.connectionReconcileInterval&&Oe.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(M.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===re.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===re.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return f(this,void 0,void 0,function*(){var t,i,r,s;const o=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),a=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new Si({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:pe.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new Qt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(M.SignalConnected),this.emit(M.Connected),this.setAndEmitConnectionState(re.Connected),o.video){const c=new tr(C.Kind.Video,new pn({source:Re.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Xe.AUDIO,name:"video-dummy"}),new En(o.useRealTracks&&(!((t=window.navigator.mediaDevices)===null||t===void 0)&&t.getUserMedia)?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:ms(160*((i=a.aspectRatios[0])!==null&&i!==void 0?i:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(x.LocalTrackPublished,c)}if(o.audio){const c=new tr(C.Kind.Audio,new pn({source:Re.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Xe.AUDIO}),new Cn(o.useRealTracks&&(!((r=navigator.mediaDevices)===null||r===void 0)&&r.getUserMedia)?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:$i(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(x.LocalTrackPublished,c)}for(let c=0;c<a.count-1;c+=1){let d=new Qt({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(c),state:mn.ACTIVE,tracks:[],joinedAt:pe.parse(Date.now())});const l=this.getOrCreateParticipant(d.identity,d);if(a.video){const u=ms(160*((s=a.aspectRatios[c%a.aspectRatios.length])!==null&&s!==void 0?s:1),160,!1,!0),h=new pn({source:Re.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Xe.AUDIO});l.addSubscribedMediaTrack(u,h.sid,new MediaStream([u]),new RTCRtpReceiver),d.tracks=[...d.tracks,h]}if(a.audio){const u=$i(),h=new pn({source:Re.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Xe.AUDIO});l.addSubscribedMediaTrack(u,h.sid,new MediaStream([u]),new RTCRtpReceiver),d.tracks=[...d.tracks,h]}l.updateInfo(d)}})}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!==M.ActiveSpeakersChanged&&e!==M.TranscriptionReceived){const s=ml(i).filter(o=>o!==void 0);(e===M.TrackSubscribed||e===M.TrackUnsubscribed)&&this.log.trace("subscribe trace: ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s})),this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s}))}return super.emit(e,...i)}}wn.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function ml(n){return n.map(e=>{if(e)return Array.isArray(e)?ml(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}class bg{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 kg=Object.freeze({__proto__:null,Convert:bg});const fl=65535,pl=4294967295;class Ht{static u16(e){return new Ht(e,fl)}static u32(e){return new Ht(e,pl)}constructor(e,t){if(this.value=e,e<0)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0");if(t>Number.MAX_SAFE_INTEGER)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.");this.maxSize=t,this.clamp()}clamp(){for(;this.value>this.maxSize;)this.value-=this.maxSize+1;for(;this.value<0;)this.value+=this.maxSize+1}clone(){return new Ht(this.value,this.maxSize)}update(e){this.value=e(this.value),this.clamp()}increment(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update(t=>t+e)}decrement(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update(t=>t-e)}getThenIncrement(){const e=this.value;return this.increment(),new Ht(e,this.maxSize)}isBefore(e){const t=this.value>>>0,r=(e.value>>>0)-t>>>0;return r!==0&&r<this.maxSize+1}}class ti{static fromRtpTicks(e){return new ti(e,9e4)}static rtpRandom(){const e=Math.round(Math.random()*pl);return ti.fromRtpTicks(e)}constructor(e,t){this.timestamp=Ht.u32(e),this.rateInHz=t}asTicks(){return this.timestamp.value}clone(){return new ti(this.timestamp.value,this.rateInHz)}wrappingAdd(e){this.timestamp.increment(e)}isBefore(e){return this.timestamp.isBefore(e.timestamp)}}function js(n){if(n instanceof DataView)return n;if(n instanceof ArrayBuffer)return new DataView(n);if(n instanceof Uint8Array)return new DataView(n.buffer,n.byteOffset,n.byteLength);throw new Error("Error coercing ".concat(n," to DataView - input was not DataView, ArrayBuffer, or Uint8Array."))}const Tt=1,Ee=2,gl=4,Tg=8,vl=0,yl=12,bl=5,Sg=7,kl=3,Cg=3,Tl=2,Sl=1,Cl=0,El=3,Eg=2,wl=2,wg=1,Rg=0;var At;(function(n){n[n.TooShort=0]="TooShort",n[n.HeaderOverrun=1]="HeaderOverrun",n[n.MissingExtWords=2]="MissingExtWords",n[n.UnsupportedVersion=3]="UnsupportedVersion",n[n.InvalidHandle=4]="InvalidHandle",n[n.MalformedExt=5]="MalformedExt"})(At||(At={}));class qe extends Xt{constructor(e,t,i){super(19,e,i),this.name="DataTrackDeserializeError",this.reason=t,this.reasonName=At[t]}static tooShort(){return new qe("Too short to contain a valid header",At.TooShort)}static headerOverrun(){return new qe("Header exceeds total packet length",At.HeaderOverrun)}static missingExtWords(){return new qe("Extension word indicator is missing",At.MissingExtWords)}static unsupportedVersion(e){return new qe("Unsupported version ".concat(e),At.UnsupportedVersion)}static invalidHandle(e){return new qe("invalid track handle: ".concat(e.message),At.InvalidHandle,{cause:e})}static malformedExt(e){return new qe("Extension with tag ".concat(e," is malformed"),At.MalformedExt)}}var ni;(function(n){n[n.TooSmallForHeader=0]="TooSmallForHeader",n[n.TooSmallForPayload=1]="TooSmallForPayload"})(ni||(ni={}));class ii extends Xt{constructor(e,t,i){super(19,e,i),this.name="DataTrackSerializeError",this.reason=t,this.reasonName=ni[t]}static tooSmallForHeader(){return new ii("Buffer cannot fit header",ni.TooSmallForHeader)}static tooSmallForPayload(){return new ii("Buffer cannot fit payload",ni.TooSmallForPayload)}}class nr{toBinary(){const e=this.toBinaryLengthBytes(),t=new ArrayBuffer(e),i=new DataView(t),r=this.toBinaryInto(i);if(e!==r)throw new Error("".concat(this.constructor.name,".toBinary: written bytes (").concat(r," bytes) not equal to allocated array buffer length (").concat(e," bytes)."));return new Uint8Array(t)}}var Rn;(function(n){n[n.UserTimestamp=2]="UserTimestamp",n[n.E2ee=1]="E2ee"})(Rn||(Rn={}));class Rl extends nr{}class St extends Rl{constructor(e){super(),this.timestamp=e}toBinaryLengthBytes(){return Ee+Ee+St.lengthBytes}toBinaryInto(e){let t=0;e.setUint16(t,St.tag),t+=Ee;const i=St.lengthBytes-1;e.setUint16(t,i),t+=Ee,e.setBigUint64(t,this.timestamp),t+=Tg;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackUserTimestampExtension.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return t}toJSON(){return{tag:St.tag,lengthBytes:St.lengthBytes,timestamp:this.timestamp}}}St.tag=Rn.UserTimestamp,St.lengthBytes=8;class Ct extends Rl{constructor(e,t){super(),this.keyIndex=e,this.iv=t}toBinaryLengthBytes(){return Ee+Ee+Ct.lengthBytes}toBinaryInto(e){let t=0;e.setUint16(t,Ct.tag),t+=Ee;const i=Ct.lengthBytes-1;e.setUint16(t,i),t+=Ee,e.setUint8(t,this.keyIndex),t+=Tt;for(let s=0;s<this.iv.length;s+=1)e.setUint8(t,this.iv[s]),t+=Tt;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackE2eeExtension.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return t}toJSON(){return{tag:Ct.tag,lengthBytes:Ct.lengthBytes,keyIndex:this.keyIndex,iv:this.iv}}}Ct.tag=Rn.E2ee,Ct.lengthBytes=13;class ri extends nr{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.userTimestamp=e.userTimestamp,this.e2ee=e.e2ee}toBinaryLengthBytes(){let e=0;return this.userTimestamp&&(e+=this.userTimestamp.toBinaryLengthBytes()),this.e2ee&&(e+=this.e2ee.toBinaryLengthBytes()),e}toBinaryInto(e){let t=0;if(this.e2ee){const r=this.e2ee.toBinaryInto(e);t+=r}if(this.userTimestamp){const r=this.userTimestamp.toBinaryInto(new DataView(e.buffer,e.byteOffset+t));t+=r}const i=this.toBinaryLengthBytes();if(t!==i)throw new Error("DataTrackExtensions.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(i," bytes"));return t}static fromBinary(e){const t=js(e);let i,r,s=0;for(;t.byteLength-s>=Ee+Ee;){const o=t.getUint16(s);s+=Ee;const c=t.getUint16(s)+1;if(s+=Ee,o!==Rg)switch(o){case Rn.UserTimestamp:if(t.byteLength-s<St.lengthBytes)throw qe.malformedExt(o);i=new St(t.getBigUint64(s)),s+=c;break;case Rn.E2ee:if(t.byteLength-s<Ct.lengthBytes)throw qe.malformedExt(o);const d=t.getUint8(s),l=new Uint8Array(12);for(let u=0;u<l.length;u+=1){let h=s;h+=Tt,h+=u*Tt,l[u]=t.getUint8(h)}r=new Ct(d,l),s+=c;break;default:if(t.byteLength-s<c)throw qe.malformedExt(o);s+=c;break}}return[new ri({userTimestamp:i,e2ee:r}),t.byteLength]}toJSON(){var e,t,i,r;return{userTimestamp:(t=(e=this.userTimestamp)===null||e===void 0?void 0:e.toJSON())!==null&&t!==void 0?t:null,e2ee:(r=(i=this.e2ee)===null||i===void 0?void 0:i.toJSON())!==null&&r!==void 0?r:null}}}var cn;(function(n){n[n.Reserved=0]="Reserved",n[n.TooLarge=1]="TooLarge"})(cn||(cn={}));class _n extends Xt{constructor(e,t){super(19,e),this.name="DataTrackHandleError",this.reason=t,this.reasonName=cn[t]}isReason(e){return this.reason===e}static tooLarge(){return new _n("Value too large to be a valid track handle",cn.TooLarge)}static reserved(e){return new _n("0x".concat(e.toString(16)," is a reserved value."),cn.Reserved)}}class Vs{static fromNumber(e){if(e===0)throw _n.reserved(e);if(e>fl)throw _n.tooLarge();return new Vs(e)}constructor(e){this.value=e}}class qs extends nr{constructor(e){var t;super(),this.marker=e.marker,this.trackHandle=e.trackHandle,this.sequence=e.sequence,this.frameNumber=e.frameNumber,this.timestamp=e.timestamp,this.extensions=(t=e.extensions)!==null&&t!==void 0?t:new ri}extensionsMetrics(){const e=this.extensions.toBinaryLengthBytes(),t=Math.ceil(e/4),i=t*4-e;return{lengthBytes:e,lengthWords:t,paddingLengthBytes:i}}toBinaryLengthBytes(){const{lengthBytes:e,paddingLengthBytes:t}=this.extensionsMetrics();let i=yl;return e>0&&(i+=Eg+e+t),i}toBinaryInto(e){if(e.byteLength<this.toBinaryLengthBytes())throw ii.tooSmallForHeader();let t=vl<<bl,i;switch(this.marker){case Et.Inter:i=Cl;break;case Et.Final:i=Sl;break;case Et.Start:i=Tl;break;case Et.Single:i=El;break}t|=i<<kl;const{lengthBytes:r,lengthWords:s,paddingLengthBytes:o}=this.extensionsMetrics();r>0&&(t|=1<<wl);let a=0;if(e.setUint8(a,t),a+=Tt,e.setUint8(a,0),a+=Tt,e.setUint16(a,this.trackHandle.value),a+=Ee,e.setUint16(a,this.sequence.value),a+=Ee,e.setUint16(a,this.frameNumber.value),a+=Ee,e.setUint32(a,this.timestamp.asTicks()),a+=gl,r>0){const d=s-1;e.setUint16(a,d),a+=Ee;const l=this.extensions.toBinaryInto(new DataView(e.buffer,e.byteOffset+a));a+=l;for(let u=0;u<o;u+=1)e.setUint8(a,0),a+=Tt}const c=this.toBinaryLengthBytes();if(a!==c)throw new Error("DataTrackPacketHeader.toBinaryInto: Wrote ".concat(a," bytes but expected length was ").concat(c," bytes"));return c}static fromBinary(e){const t=js(e);if(t.byteLength<yl)throw qe.tooShort();let i=0;const r=t.getUint8(i);i+=Tt;const s=r>>bl&Sg;if(s>vl)throw qe.unsupportedVersion(s);let o;switch(r>>kl&Cg){case Tl:o=Et.Start;break;case Sl:o=Et.Final;break;case El:o=Et.Single;break;case Cl:default:o=Et.Inter;break}const a=(r>>wl&wg)>0;i+=Tt;let c;try{c=Vs.fromNumber(t.getUint16(i))}catch(m){throw m instanceof _n&&(m.isReason(cn.Reserved)||m.isReason(cn.TooLarge))?qe.invalidHandle(m):m}i+=Ee;const d=Ht.u16(t.getUint16(i));i+=Ee;const l=Ht.u16(t.getUint16(i));i+=Ee;const u=ti.fromRtpTicks(t.getUint32(i));i+=gl;let h=new ri;if(a){if(t.byteLength-i<Ee)throw qe.missingExtWords();let m=t.getUint16(i);i+=Ee;let g=4*(m+1);if(i+g>t.byteLength)throw qe.headerOverrun();let S=new DataView(t.buffer,t.byteOffset+i,g);const[k,R]=ri.fromBinary(S);h=k,i+=R}return[new qs({marker:o,trackHandle:c,sequence:d,frameNumber:l,timestamp:u,extensions:h}),i]}toJSON(){return{marker:this.marker,trackHandle:this.trackHandle.value,sequence:this.sequence.value,frameNumber:this.frameNumber.value,timestamp:this.timestamp.asTicks(),extensions:this.extensions.toJSON()}}}var Et;(function(n){n[n.Start=0]="Start",n[n.Inter=1]="Inter",n[n.Final=2]="Final",n[n.Single=3]="Single"})(Et||(Et={}));class Ks extends nr{constructor(e,t){super(),this.header=e,this.payload=t}toBinaryLengthBytes(){return this.header.toBinaryLengthBytes()+this.payload.byteLength}toBinaryInto(e){let t=0;const i=this.header.toBinaryInto(e);if(t+=i,e.byteLength-t<this.payload.byteLength)throw ii.tooSmallForPayload();for(let s=0;s<this.payload.length;s+=1)e.setUint8(t,this.payload[s]),t+=Tt;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackPacket.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return r}static fromBinary(e){const t=js(e),[i,r]=qs.fromBinary(t),s=t.buffer.slice(t.byteOffset+r,t.byteOffset+t.byteLength);return[new Ks(i,new Uint8Array(s)),t.byteLength]}toJSON(){return{header:this.header.toJSON(),payload:this.payload}}}var _l;(function(n){n[n.MtuTooShort=0]="MtuTooShort"})(_l||(_l={})),ct(Qe.DataTracks);var Pl;(function(n){n[n.Interrupted=0]="Interrupted",n[n.UnknownFrame=1]="UnknownFrame",n[n.BufferFull=2]="BufferFull",n[n.Incomplete=3]="Incomplete"})(Pl||(Pl={}));var it;(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"})(it||(it={}));class xt extends yt.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=it.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new wn(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return f(this,void 0,void 0,function*(){if(this.status!==it.IDLE)throw Error("check is running already");this.setStatus(it.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!==it.SKIPPED&&this.setStatus(this.isSuccess()?it.SUCCESS:it.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===re.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!==re.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(it.SKIPPED)}switchProtocol(e){return f(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(M.Reconnecting,()=>{t=!0}),this.room.once(M.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 Le(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 _g extends xt{get description(){return"Cloud regions"}perform(){return f(this,void 0,void 0,function*(){const e=new ne(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let s=0;s<3;s++){const o=yield e.getNextBestRegionUrl();if(!o)break;if(i.has(o))continue;i.add(o);const a=yield this.checkCloudRegion(o);this.appendMessage("".concat(a.region," RTT: ").concat(a.rtt,"ms, duration: ").concat(a.duration,"ms")),t.push(a)}t.sort((s,o)=>(s.duration-o.duration)*.5+(s.rtt-o.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"}),o=1e3,c=1e6/o,d="A".repeat(o),l=Date.now();for(let v=0;v<c;v++)yield s.write(d);yield s.close();const u=Date.now(),h=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),m={region:r,rtt:1e4,duration:u-l};return h==null||h.forEach(v=>{v.type==="candidate-pair"&&v.nominated&&(m.rtt=v.currentRoundTripTime*1e3)}),yield this.disconnect(),m})}}const Ws=1e4;class Pg extends xt{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/(Ws/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Ws/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 a=t.captureStream(30).getVideoTracks()[0],d=(yield this.room.localParticipant.publishTrack(a,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,l={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},u=setInterval(()=>f(this,void 0,void 0,function*(){const h=yield d.getRTCStatsReport();h==null||h.forEach(m=>{m.type==="outbound-rtp"?(l.packetsSent=m.packetsSent,l.qualityLimitationDurations=m.qualityLimitationDurations,l.bitrateTotal+=m.targetBitrate,l.count++):m.type==="remote-inbound-rtp"&&(l.packetsLost=m.packetsLost,l.rttTotal+=m.roundTripTime,l.jitterTotal+=m.jitter)})}),1e3);return yield new Promise(h=>setTimeout(h,Ws)),clearInterval(u),a.stop(),t.remove(),yield this.disconnect(),l})}}class Ig extends xt{get description(){return"Can publish audio"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield ll();if(yield rd(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,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 o=0;if(s.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="audio"||!a.kind&&a.mediaType==="audio")&&(o=a.packetsSent)}),o===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(o," audio packets"))})}}class Mg extends xt{get description(){return"Can publish video"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield dl();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(o=>setTimeout(o,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(o=>{o.type==="outbound-rtp"&&(o.kind==="video"||!o.kind&&o.mediaType==="video")&&(s+=o.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,i.autoplay=!0,i.playsInline=!0,i.setAttribute("playsinline","true"),document.body.appendChild(i),yield new Promise(r=>{i.onplay=()=>{setTimeout(()=>{var s,o,a,c;const d=document.createElement("canvas"),l=e.getSettings(),u=(o=(s=l.width)!==null&&s!==void 0?s:i.videoWidth)!==null&&o!==void 0?o:1280,h=(c=(a=l.height)!==null&&a!==void 0?a:i.videoHeight)!==null&&c!==void 0?c:720;d.width=u,d.height=h;const m=d.getContext("2d");m.drawImage(i,0,0);const g=m.getImageData(0,0,d.width,d.height).data;let S=!0;for(let k=0;k<g.length;k+=4)if(g[k]!==0||g[k+1]!==0||g[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 Og extends xt{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 o=new Promise(d=>{setTimeout(d,5e3),s=d}),a=()=>{i=!0};t.on(M.SignalReconnecting,a).on(M.Reconnecting,a).on(M.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 o,i){if(!r||t.state!==re.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 Dg extends xt{get description(){return"Can connect via TURN"}perform(){return f(this,void 0,void 0,function*(){var e,t,i;kn(new URL(this.url))&&(this.appendMessage("Using region specific url"),this.url=(e=yield new ne(this.url,this.token).getNextBestRegionUrl())!==null&&e!==void 0?e:this.url);const r=new bs,s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0);let o=!1,a=!1,c=!1;for(let d of s.iceServers)for(let l of d.urls)l.startsWith("turn:")?(a=!0,c=!0):l.startsWith("turns:")&&(a=!0,c=!0,o=!0),l.startsWith("stun:")&&(c=!0);c?a&&!o&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((i=(t=this.connectOptions)===null||t===void 0?void 0:t.rtcConfig)===null||i===void 0)&&i.iceServers||a?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(d=>setTimeout(d,0)))})}}class Ag extends xt{get description(){return"Establishing WebRTC connection"}perform(){return f(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(M.SignalConnected,()=>{var i;const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(s,o)=>{if(s.candidate){const a=new RTCIceCandidate(s);let c="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(xg(a.address)?c+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,c+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(c)}r&&r(s,o)},!((i=this.room.engine.pcManager)===null||i===void 0)&&i.subscriber&&(this.room.engine.pcManager.subscriber.onIceCandidateError=s=>{s instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(s.errorCode," ").concat(s.errorText," ").concat(s.url))})});try{yield this.connect(),z.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 xg(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 Lg extends xt{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 bs,s;try{s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0)}catch(o){if(kn(new URL(this.url))){this.appendMessage("Initial connection failed with error ".concat(o.message,". Retrying with region fallback"));const c=yield new ne(this.url,this.token).getNextBestRegionUrl();c&&(s=yield r.join(c,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0),this.appendMessage("Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time"))}}s?(this.appendMessage("Connected to server, version ".concat(s.serverVersion,".")),((e=s.serverInfo)===null||e===void 0?void 0:e.edition)===Do.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))):this.appendError("Websocket connection could not be established"),yield r.close()})}}class Ng extends yt.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:it.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!==it.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=o=>{this.updateCheck(t,o)};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(Lg)})}checkWebRTC(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Ag)})}checkTURN(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Dg)})}checkReconnect(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Og)})}checkPublishAudio(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Ig)})}checkPublishVideo(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Mg)})}checkConnectionProtocol(){return f(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(Pg);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(_g)})}}class Il{}class Ml{}function X(n,e,t){return(e=Fg(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function Ug(n,e){if(typeof n!="object"||!n)return n;var t=n[Symbol.toPrimitive];if(t!==void 0){var i=t.call(n,e);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(n)}function Fg(n){var e=Ug(n,"string");return typeof e=="symbol"?e:e+""}new TextEncoder;const Hs=new TextDecoder;function Bg(n){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(n);const e=atob(n),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.charCodeAt(i);return t}function jg(n){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(typeof n=="string"?n:Hs.decode(n),{alphabet:"base64url"});let e=n;e instanceof Uint8Array&&(e=Hs.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/");try{return Bg(e)}catch{throw new TypeError("The input to be decoded is not correctly encoded.")}}class Ke extends Error{constructor(e,t){var i;super(e,t),X(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,(i=Error.captureStackTrace)===null||i===void 0||i.call(Error,this,this.constructor)}}X(Ke,"code","ERR_JOSE_GENERIC");class Vg extends Ke{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(e,{cause:{claim:i,reason:r,payload:t}}),X(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),X(this,"claim",void 0),X(this,"reason",void 0),X(this,"payload",void 0),this.claim=i,this.reason=r,this.payload=t}}X(Vg,"code","ERR_JWT_CLAIM_VALIDATION_FAILED");class qg extends Ke{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(e,{cause:{claim:i,reason:r,payload:t}}),X(this,"code","ERR_JWT_EXPIRED"),X(this,"claim",void 0),X(this,"reason",void 0),X(this,"payload",void 0),this.claim=i,this.reason=r,this.payload=t}}X(qg,"code","ERR_JWT_EXPIRED");class Kg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}}X(Kg,"code","ERR_JOSE_ALG_NOT_ALLOWED");class Wg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JOSE_NOT_SUPPORTED")}}X(Wg,"code","ERR_JOSE_NOT_SUPPORTED");class Hg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"decryption operation failed",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWE_DECRYPTION_FAILED")}}X(Hg,"code","ERR_JWE_DECRYPTION_FAILED");class Jg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWE_INVALID")}}X(Jg,"code","ERR_JWE_INVALID");class Gg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWS_INVALID")}}X(Gg,"code","ERR_JWS_INVALID");class Jt extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWT_INVALID")}}X(Jt,"code","ERR_JWT_INVALID");class zg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWK_INVALID")}}X(zg,"code","ERR_JWK_INVALID");class $g extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWKS_INVALID")}}X($g,"code","ERR_JWKS_INVALID");class Qg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"no applicable key found in the JSON Web Key Set",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWKS_NO_MATCHING_KEY")}}X(Qg,"code","ERR_JWKS_NO_MATCHING_KEY");class Yg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"multiple matching keys found in the JSON Web Key Set",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,Symbol.asyncIterator,void 0),X(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}}X(Yg,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");class Xg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"request timed out",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWKS_TIMEOUT")}}X(Xg,"code","ERR_JWKS_TIMEOUT");class Zg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"signature verification failed",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}}X(Zg,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");const ev=n=>typeof n=="object"&&n!==null;function tv(n){if(!ev(n)||Object.prototype.toString.call(n)!=="[object Object]")return!1;if(Object.getPrototypeOf(n)===null)return!0;let e=n;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(n)===e}function nv(n){if(typeof n!="string")throw new Jt("JWTs must use Compact JWS serialization, JWT must be a string");const{1:e,length:t}=n.split(".");if(t===5)throw new Jt("Only JWTs using Compact JWS serialization can be decoded");if(t!==3)throw new Jt("Invalid JWT");if(!e)throw new Jt("JWTs must contain a payload");let i;try{i=jg(e)}catch{throw new Jt("Failed to base64url decode the payload")}let r;try{r=JSON.parse(Hs.decode(i))}catch{throw new Jt("Failed to parse the decoded payload as JSON")}if(!tv(r))throw new Jt("Invalid JWT Claims Set");return r}const Js=1e3,iv=60*Js;function rv(n){const e=Gs(n.participantToken);if(!(e!=null&&e.nbf)||!(e!=null&&e.exp))return!0;const t=new Date,i=e.nbf*Js,r=new Date(i),s=e.exp*Js,o=new Date(s-iv);return r<=t&&o>t}function Gs(n){const e=nv(n),{roomConfig:t}=e,i=Kr(e,["roomConfig"]);return Object.assign(Object.assign({},i),{roomConfig:e.roomConfig?Ni.fromJson(e.roomConfig):void 0})}function sv(n,e){const t=new Set([...Object.keys(n),...Object.keys(e)]);for(const i of t)switch(i){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(n[i]!==e[i])return!1;break;default:const r=i;throw new Error("Options key ".concat(r," not being checked for equality!"))}return!0}class Ol extends Ml{constructor(){super(...arguments),this.cachedFetchOptions=null,this.cachedResponse=null,this.fetchMutex=new xe}isSameAsCachedFetchOptions(e){if(!this.cachedFetchOptions)return!1;for(const t of Object.keys(this.cachedFetchOptions))switch(t){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(this.cachedFetchOptions[t]!==e[t])return!1;break;default:const i=t;throw new Error("Options key ".concat(i," not being checked for equality!"))}return!0}shouldReturnCachedValueFromFetch(e){return!(!this.cachedResponse||!rv(this.cachedResponse)||this.isSameAsCachedFetchOptions(e))}getCachedResponseJwtPayload(){return this.cachedResponse?Gs(this.cachedResponse.participantToken):null}fetch(e){return f(this,void 0,void 0,function*(){const t=yield this.fetchMutex.lock();try{if(this.shouldReturnCachedValueFromFetch(e))return this.cachedResponse.toJson();this.cachedFetchOptions=e;const i=yield this.update(e);return this.cachedResponse=i,i.toJson()}finally{t()}})}}class av extends Il{constructor(e){super(),this.literalOrFn=e}fetch(){return f(this,void 0,void 0,function*(){return typeof this.literalOrFn=="function"?this.literalOrFn():this.literalOrFn})}}class ov extends Ol{constructor(e){super(),this.customFn=e}update(e){return f(this,void 0,void 0,function*(){const t=this.customFn(e);let i;return t instanceof Promise?i=yield t:i=t,rc.fromJson(i,{ignoreUnknownFields:!0})})}}class Dl extends Ol{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),this.url=e,this.endpointOptions=t}createRequestFromOptions(e){var t,i,r;const s=new nf;for(const o of Object.keys(e))switch(o){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":s[o]=e[o];break;case"participantAttributes":s.participantAttributes=(t=e.participantAttributes)!==null&&t!==void 0?t:{};break;case"agentName":s.roomConfig=(i=s.roomConfig)!==null&&i!==void 0?i:new Ni,s.roomConfig.agents.length===0&&s.roomConfig.agents.push(new Dr),s.roomConfig.agents[0].agentName=e.agentName;break;case"agentMetadata":s.roomConfig=(r=s.roomConfig)!==null&&r!==void 0?r:new Ni,s.roomConfig.agents.length===0&&s.roomConfig.agents.push(new Dr),s.roomConfig.agents[0].metadata=e.agentMetadata;break;default:const a=o;throw new Error("Options key ".concat(a," not being included in forming request!"))}return s}update(e){return f(this,void 0,void 0,function*(){var t;const i=this.createRequestFromOptions(e),r=yield fetch(this.url,Object.assign(Object.assign({},this.endpointOptions),{method:(t=this.endpointOptions.method)!==null&&t!==void 0?t:"POST",headers:Object.assign({"Content-Type":"application/json"},this.endpointOptions.headers),body:i.toJsonString({useProtoFieldName:!0})}));if(!r.ok)throw new Error("Error generating token from endpoint ".concat(this.url,": received ").concat(r.status," / ").concat(yield r.text()));const s=yield r.json();return rc.fromJson(s,{ignoreUnknownFields:!0})})}}class cv extends Dl{constructor(e,t){const{baseUrl:i="https://cloud-api.livekit.io"}=t,r=Kr(t,["baseUrl"]);super("".concat(i,"/api/v2/sandbox/connection-details"),Object.assign(Object.assign({},r),{headers:{"X-Sandbox-ID":e}}))}}const dv={literal(n){return new av(n)},custom(n){return new ov(n)},endpoint(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Dl(n,e)},sandboxTokenServer(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new cv(n,e)}};function lv(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var t;const i=qt(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 o=r.facingMode;z.trace("rawFacingMode",{rawFacingMode:o}),o&&typeof o=="string"&&hv(o)&&(s={facingMode:o,confidence:"high"})}if(["low","medium"].includes(s.confidence)){z.trace("Try to get facing mode from device label: (".concat(i.label,")"));const o=xl(i.label);o!==void 0&&(s=o)}return s}const Al=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),uv=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]]);function xl(n){var e;const t=n.trim().toLowerCase();if(t!=="")return Al.has(t)?Al.get(t):(e=Array.from(uv.entries()).find(i=>{let[r]=i;return t.includes(r)}))===null||e===void 0?void 0:e[1]}function hv(n){return n===void 0||["user","environment","left","right"].includes(n)}const mv=Object.freeze(Object.defineProperty({__proto__:null,get AudioPresets(){return Hi},get BackupCodecPolicy(){return is},BaseKeyProvider:Ad,get CheckStatus(){return it},Checker:xt,ConnectionCheck:Ng,ConnectionError:K,get ConnectionErrorReason(){return ue},get ConnectionQuality(){return Dt},get ConnectionState(){return re},CriticalTimers:Oe,CryptorError:gp,get CryptorErrorReason(){return Zi},get CryptorEvent(){return vs},DataPacket_Kind:$,DataStreamError:Ye,get DataStreamErrorReason(){return Be},DataTrackPacket:Ks,DefaultReconnectPolicy:oc,DeviceUnsupportedError:qn,DisconnectReason:Ze,get EncryptionEvent(){return Ot},Encryption_Type:be,get EngineEvent(){return A},ExternalE2EEKeyProvider:pp,get KeyHandlerEvent(){return gs},get KeyProviderEvent(){return Mt},LivekitError:et,LivekitReasonedError:Xt,LocalAudioTrack:Cn,LocalParticipant:ul,LocalTrack:Os,LocalTrackPublication:tr,LocalTrackRecorder:zd,LocalVideoTrack:En,get LogLevel(){return vn},get LoggerNames(){return Qe},get MediaDeviceFailure(){return Kn},Mutex:xe,NegotiationError:Vt,Participant:Bs,get ParticipantEvent(){return x},ParticipantKind:fn,PublishDataError:Ef,PublishTrackError:ts,RemoteAudioTrack:ol,RemoteParticipant:ei,RemoteTrack:Ns,RemoteTrackPublication:hl,RemoteVideoTrack:cl,Room:wn,get RoomEvent(){return M},RpcError:ve,ScreenSharePresets:Wn,SignalReconnectError:Zt,SignalRequestError:ns,SimulatedError:Cf,SubscriptionError:Co,TokenSource:dv,TokenSourceConfigurable:Ml,TokenSourceFixed:Il,get Track(){return C},get TrackEvent(){return O},TrackInvalidError:dt,get TrackPublication(){return kt},TrackType:Xe,UnexpectedConnectionState:ke,UnsupportedServer:Xc,VideoPreset:oe,VideoPresets:bn,VideoPresets43:Ji,get VideoQuality(){return He},areTokenSourceFetchOptionsEqual:sv,asEncryptablePacket:Dd,attachToElement:en,attributes:kg,audioCodecs:Zc,compareVersions:ut,createAudioAnalyser:Hf,createE2EEKey:dp,createKeyMaterialFromBuffer:Id,createKeyMaterialFromString:Pd,createLocalAudioTrack:ll,createLocalScreenTracks:pg,createLocalTracks:Zn,createLocalVideoTrack:dl,decodeTokenPayload:Gs,deriveKeys:cp,detachTrack:tn,facingModeFromDeviceLabel:xl,facingModeFromLocalTrack:lv,getBrowser:Ve,getEmptyAudioStreamTrack:$i,getEmptyVideoStreamTrack:Wf,getLogger:ct,importKey:op,isAudioCodec:Jf,isAudioTrack:ht,isBackupCodec:nd,isBackupVideoCodec:td,isBrowserSupported:ud,isE2EESupported:Rd,isInsertableStreamSupported:_d,isLocalParticipant:Sd,isLocalTrack:qt,isRemoteParticipant:Yf,isRemoteTrack:Yi,isScriptTransformSupported:Xi,isVideoCodec:kd,isVideoFrame:ap,isVideoTrack:Pt,needsRbspUnescaping:up,parseRbsp:hp,protocolVersion:Yc,ratchet:lp,setLogExtension:cf,setLogLevel:of,supportsAV1:dd,supportsAdaptiveStream:Nf,supportsAudioOutputSelection:Ff,supportsDynacast:Uf,supportsVP9:ld,version:Qc,videoCodecs:ed,writeRbsp:fp},Symbol.toStringTag,{value:"Module"}));G.AgentActivityState=fe,G.AgentStatus=sa,G.BaseError=Se,G.ChatCreationFailed=Zs,G.ChatMode=Pe,G.ChatModeDowngraded=ea,G.ChatProgress=Ae,G.ConnectionState=le,G.ConnectivityState=st,G.DocumentType=da,G.HttpError=ar,G.KnowledgeType=ca,G.NetworkError=ta,G.PlanGroup=ra,G.Providers=la,G.RateState=aa,G.SDK_VERSION=_a,G.StreamError=oi,G.StreamEvents=Q,G.StreamType=at,G.StreamingState=Z,G.Subject=oa,G.TransportProvider=ci,G.UserPlan=ia,G.ValidationError=$e,G.VideoType=or,G.VoiceAccess=ua,G.WsError=na,G.createAgentManager=Qu,G.isDIDError=dn,G.mapVideoType=Wl,G.parseMessageParts=Ta,Object.defineProperty(G,Symbol.toStringTag,{value:"Module"})}));
|
|
38
|
+
`},Cs}var Bd;function Ap(){if(Bd)return ht;Bd=1;var n=Op(),e=Dp(),t=Ss();return ht.grammar=t,ht.write=e,ht.parse=n.parse,ht.parseParams=n.parseParams,ht.parseFmtpConfig=n.parseFmtpConfig,ht.parsePayloads=n.parsePayloads,ht.parseRemoteCandidates=n.parseRemoteCandidates,ht.parseImageAttributes=n.parseImageAttributes,ht.parseSimulcastStreamList=n.parseSimulcastStreamList,ht}var Wt=Ap();function Es(n,e,t){var i,r,s;e===void 0&&(e=50),t===void 0&&(t={});var o=(i=t.isImmediate)!=null&&i,a=(r=t.callback)!=null&&r,c=t.maxWait,d=Date.now(),l=[];function u(){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(g,S){var k=o&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,d=Date.now(),!o){var P=n.apply(v,m);a&&a(P),l.forEach(function(y){return(0,y.resolve)(P)}),l=[]}},u()),k){var R=n.apply(v,m);return a&&a(R),g(R)}l.push({resolve:g,reject:S})})};return h.cancel=function(m){s!==void 0&&clearTimeout(s),l.forEach(function(v){return(0,v.reject)(m)}),l=[]},h}const xp=.7,Lp=20,on={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class jd extends yt.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=z,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Es(r=>f(this,void 0,void 0,function*(){this.emit(on.NegotiationStarted);try{yield this.createAndSendOffer()}catch(s){if(r)r(s);else throw s}}),Lp),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=ot((i=t.loggerName)!==null&&i!==void 0?i:$e.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC(),this.offerLock=new Le}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:o}=Np(e);this.remoteStereoMids=s,this.remoteNackMids=o}else if(e.type==="answer"){const s=Wt.parse((i=e.sdp)!==null&&i!==void 0?i:"");s.media.forEach(o=>{const a=ws(o.mid);o.type==="audio"&&this.trackBitrates.some(c=>{if(!c.transceiver||a!=c.transceiver.mid)return!1;let d=0;if(o.rtp.some(u=>u.codec.toUpperCase()===c.codec.toUpperCase()?(d=u.payload,!0):!1),d===0)return!0;let l=!1;for(const u of o.fmtp)if(u.payload===d){u.config=u.config.split(";").filter(h=>!h.includes("maxaveragebitrate")).join(";"),c.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(c.maxbr*1e3)),l=!0;break}return l||c.maxbr>0&&o.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(c.maxbr*1e3)}),!0})}),r=Wt.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(on.NegotiationComplete),e.sdp&&Wt.parse(e.sdp).media.forEach(o=>{o.type==="video"&&this.emit(on.RTPVideoPayloadTypes,o.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 a=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&a)yield this._pc.setRemoteDescription(a);else{this.renegotiate=!0,this.log.debug("requesting renegotiation",Object.assign({},this.logContext));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 o=Wt.parse((t=s.sdp)!==null&&t!==void 0?t:"");if(o.media.forEach(a=>{qd(a),a.type==="audio"?Vd(a,["all"],[]):a.type==="video"&&this.trackBitrates.some(c=>{if(!a.msid||!c.cid||!a.msid.includes(c.cid))return!1;let d=0;if(a.rtp.some(u=>u.codec.toUpperCase()===c.codec.toUpperCase()?(d=u.payload,!0):!1),d===0||(dt(c.codec)&&!rn()&&this.ensureVideoDDExtensionForSVC(a,o),!dt(c.codec)))return!0;const l=Math.round(c.maxbr*xp);for(const u of a.fmtp)if(u.payload===d){u.config.includes("x-google-start-bitrate")||(u.config+=";x-google-start-bitrate=".concat(l));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,Wt.write(o)),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=Wt.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(r=>{qd(r),r.type==="audio"&&Vd(r,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,Wt.write(i)),t})}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTransceiverOfKind(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new Te("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 Te("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(a=>{switch(a.type){case"transport":t=a.selectedCandidatePairId;break;case"candidate-pair":t===""&&a.selected&&(t=a.id),i.set(a.id,a);break;case"remote-candidate":r.set(a.id,"".concat(a.address,":").concat(a.port));break}}),t==="")return;const o=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(o!==void 0)return r.get(o)})}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 o={error:s,sdp:e.sdp};throw!i&&this.pc.remoteDescription&&(o.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:o})),new Vt(s)}})}ensureVideoDDExtensionForSVC(e,t){var i,r;if(!((i=e.ext)===null||i===void 0?void 0:i.some(o=>o.uri===cd))){if(this.ddExtID===0){let o=0;t.media.forEach(a=>{var c;a.type==="video"&&((c=a.ext)===null||c===void 0||c.forEach(d=>{d.value>o&&(o=d.value)}))}),this.ddExtID=o+1}(r=e.ext)===null||r===void 0||r.push({value:this.ddExtID,uri:cd})}}}function Vd(n,e,t){const i=ws(n.mid);let r=0;n.rtp.some(s=>s.codec==="opus"?(r=s.payload,!0):!1),r>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(i)&&!n.rtcpFb.some(s=>s.payload===r&&s.type==="nack")&&n.rtcpFb.push({payload:r,type:"nack"}),(e.includes(i)||e.length===1&&e[0]==="all")&&n.fmtp.some(s=>s.payload===r?(s.config.includes("stereo=1")||(s.config+=";stereo=1"),!0):!1))}function Np(n){var e;const t=[],i=[],r=Wt.parse((e=n.sdp)!==null&&e!==void 0?e:"");let s=0;return r.media.forEach(o=>{var a;const c=ws(o.mid);o.type==="audio"&&(o.rtp.some(d=>d.codec==="opus"?(s=d.payload,!0):!1),!((a=o.rtcpFb)===null||a===void 0)&&a.some(d=>d.payload===s&&d.type==="nack")&&i.push(c),o.fmtp.some(d=>d.payload===s?(d.config.includes("sprop-stereo=1")&&t.push(c),!0):!1))}),{stereoMids:t,nackMids:i}}function qd(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)}}function ws(n){return typeof n=="number"?n.toFixed(0):n}const Rs="vp8",Up={audioPreset:Hi.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Wn.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Rs,backupCodec:!0,preConnectBuffer:!1},Kd={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Wd={deviceId:{ideal:"default"},resolution:bn.h720.resolution},Fp={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new oc,disconnectOnPageLeave:!0,webAudioMix:!1,singlePeerConnection:!0},_s={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ge;(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"})(ge||(ge={}));class Bp{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}get mode(){return this._mode}constructor(e,t,i){var r;this.peerConnectionTimeout=_s.peerConnectionTimeout,this.log=z,this.updateState=()=>{var s,o;const a=this.state,c=this.requiredTransports.map(d=>d.getConnectionState());c.every(d=>d==="connected")?this.state=ge.CONNECTED:c.some(d=>d==="failed")?this.state=ge.FAILED:c.some(d=>d==="connecting")?this.state=ge.CONNECTING:c.every(d=>d==="closed")?this.state=ge.CLOSED:c.some(d=>d==="closed")?this.state=ge.CLOSING:c.every(d=>d==="new")&&(this.state=ge.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ge[a]," to ").concat(ge[this.state]),this.logContext),(s=this.onStateChange)===null||s===void 0||s.call(this,this.state,this.publisher.getConnectionState(),(o=this.subscriber)===null||o===void 0?void 0:o.getConnectionState()))},this.log=ot((r=i.loggerName)!==null&&r!==void 0?r:$e.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=t!=="subscriber-primary",this.isSubscriberConnectionRequired=t==="subscriber-primary",this.publisher=new jd(e,i),this._mode=t,t!=="publisher-only"&&(this.subscriber=new jd(e,i),this.subscriber.onConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.subscriber.onIceCandidate=s=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,s,at.SUBSCRIBER)},this.subscriber.onDataChannel=s=>{var o;(o=this.onDataChannel)===null||o===void 0||o.call(this,s)},this.subscriber.onTrack=s=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,s)}),this.publisher.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=s=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,s,at.PUBLISHER)},this.publisher.onTrack=s=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,s)},this.publisher.onOffer=(s,o)=>{var a;(a=this.onPublisherOffer)===null||a===void 0||a.call(this,s,o)},this.state=ge.NEW,this.connectionLock=new Le,this.remoteOfferLock=new Le}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()}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*(){var e;if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const t=this.publisher;for(const i of t.getSenders())try{t.canRemoveTrack()&&t.removeTrack(i)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),(e=this.subscriber)===null||e===void 0?void 0:e.close()]),this.updateState()})}triggerIceRestart(){return f(this,void 0,void 0,function*(){this.subscriber&&(this.subscriber.restartingIce=!0),this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return f(this,void 0,void 0,function*(){var i;t===at.PUBLISHER?yield this.publisher.addIceCandidate(e):yield(i=this.subscriber)===null||i===void 0?void 0:i.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e,t){return f(this,void 0,void 0,function*(){var i,r,s;this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:(i=this.subscriber)===null||i===void 0?void 0:i.getSignallingState().toString()}));const o=yield this.remoteOfferLock.lock();try{return(yield(r=this.subscriber)===null||r===void 0?void 0:r.setRemoteDescription(e,t))?yield(s=this.subscriber)===null||s===void 0?void 0:s.createAndSetAnswer():void 0}finally{o()}})}updateConfiguration(e,t){var i;this.publisher.setConfiguration(e),(i=this.subscriber)===null||i===void 0||i.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 Fe((t,i)=>f(this,void 0,void 0,function*(){let r=setTimeout(()=>{i(new Vt("negotiation timed out"))},this.peerConnectionTimeout);const s=()=>{clearTimeout(r),this.publisher.off(on.NegotiationStarted,a),e.signal.removeEventListener("abort",o)},o=()=>{s(),i(new Vt("negotiation aborted"))},a=()=>{e.signal.aborted||(clearTimeout(r),r=setTimeout(()=>{s(),i(new Vt("negotiation timed out"))},this.peerConnectionTimeout))};e.signal.addEventListener("abort",o),this.publisher.on(on.NegotiationStarted,a),this.publisher.once(on.NegotiationComplete,()=>{s(),t()}),yield this.publisher.negotiate(c=>{s(),c instanceof Error?i(c):i(new Error(String(c)))})}))})}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTransceiverOfKind(e,t){return this.publisher.addTransceiverOfKind(e,t)}getMidForReceiver(e){const i=(this.subscriber?this.subscriber.getTransceivers():this.publisher.getTransceivers()).find(r=>r.receiver===e);return i==null?void 0:i.mid}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===at.PUBLISHER?this.publisher.getConnectedAddress():e===at.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&this.subscriber&&e.push(this.subscriber),e}ensureTransportConnected(e,t){return f(this,arguments,void 0,function(i,r){var s=this;let o=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 l=()=>{this.log.warn("abort transport connection",this.logContext),Oe.clearTimeout(u),d(K.cancelled("room connection has been cancelled"))};r!=null&&r.signal.aborted&&l(),r==null||r.signal.addEventListener("abort",l);const u=Oe.setTimeout(()=>{r==null||r.signal.removeEventListener("abort",l),d(K.internal("could not establish pc connection"))},o);for(;this.state!==ge.CONNECTED;)if(yield Ne(50),r!=null&&r.signal.aborted){d(K.cancelled("room connection has been cancelled"));return}Oe.clearTimeout(u),r==null||r.signal.removeEventListener("abort",l),c()}))})()})}}const Hd=5e3,jp=3e4;class ne{static fetchRegionSettings(e,t,i){return f(this,void 0,void 0,function*(){const r=yield ne.fetchLock.lock();try{const s=yield fetch("".concat(Vp(e),"/regions"),{headers:{authorization:"Bearer ".concat(t)},signal:i});if(s.ok){const o=np(s.headers),a=o?o*1e3:Hd;return{regionSettings:yield s.json(),updatedAtInMs:Date.now(),maxAgeInMs:a}}else throw s.status===401?K.notAllowed("Could not fetch region settings: ".concat(s.statusText),s.status):K.internal("Could not fetch region settings: ".concat(s.statusText))}catch(s){throw s instanceof K?s:i!=null&&i.aborted?K.cancelled("Region fetching was aborted"):K.serverUnreachable("Could not fetch region settings, ".concat(s instanceof Error?"".concat(s.name,": ").concat(s.message):s))}finally{r()}})}static scheduleRefetch(e,t,i){return f(this,void 0,void 0,function*(){const r=ne.settingsTimeouts.get(e.hostname);clearTimeout(r),ne.settingsTimeouts.set(e.hostname,setTimeout(()=>f(this,void 0,void 0,function*(){try{const s=yield ne.fetchRegionSettings(e,t);ne.updateCachedRegionSettings(e,t,s)}catch(s){if(s instanceof K&&s.reason===ue.NotAllowed){z.debug("token is not valid, cancelling auto region refresh");return}z.debug("auto refetching of region settings failed",{error:s}),ne.scheduleRefetch(e,t,i)}}),i))})}static updateCachedRegionSettings(e,t,i){ne.cache.set(e.hostname,i),ne.scheduleRefetch(e,t,i.maxAgeInMs)}static stopRefetch(e){const t=ne.settingsTimeouts.get(e);t&&(clearTimeout(t),ne.settingsTimeouts.delete(e))}static scheduleCleanup(e){let t=ne.connectionTrackers.get(e);t&&(t.cleanupTimeout&&clearTimeout(t.cleanupTimeout),t.cleanupTimeout=setTimeout(()=>{const i=ne.connectionTrackers.get(e);i&&i.connectionCount===0&&(z.debug("stopping region refetch after disconnect delay",{hostname:e}),ne.stopRefetch(e)),i&&(i.cleanupTimeout=void 0)},jp))}static cancelCleanup(e){const t=ne.connectionTrackers.get(e);t!=null&&t.cleanupTimeout&&(clearTimeout(t.cleanupTimeout),t.cleanupTimeout=void 0)}notifyConnected(){const e=this.serverUrl.hostname;let t=ne.connectionTrackers.get(e);t||(t={connectionCount:0},ne.connectionTrackers.set(e,t)),t.connectionCount++,ne.cancelCleanup(e)}notifyDisconnected(){const e=this.serverUrl.hostname,t=ne.connectionTrackers.get(e);t&&(t.connectionCount=Math.max(0,t.connectionCount-1),t.connectionCount===0&&ne.scheduleCleanup(e))}constructor(e,t){this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){this.token=e}isCloud(){return kn(this.serverUrl)}getServerUrl(){return this.serverUrl}fetchRegionSettings(e){return f(this,void 0,void 0,function*(){return ne.fetchRegionSettings(this.serverUrl,this.token,e)})}getNextBestRegionUrl(e){return f(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");let t=ne.cache.get(this.serverUrl.hostname);(!t||Date.now()-t.updatedAtInMs>t.maxAgeInMs)&&(t=yield this.fetchRegionSettings(e),ne.updateCachedRegionSettings(this.serverUrl,this.token,t));const i=t.regionSettings.regions.filter(r=>!this.attemptedRegions.find(s=>s.url===r.url));if(i.length>0){const r=i[0];return this.attemptedRegions.push(r),z.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}setServerReportedRegions(e){ne.updateCachedRegionSettings(this.serverUrl,this.token,e)}}ne.cache=new Map,ne.settingsTimeouts=new Map,ne.connectionTrackers=new Map,ne.fetchLock=new Le;function Vp(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class ve extends Error{constructor(e,t,i){super(t),this.code=e,this.message=Gd(t,ve.MAX_MESSAGE_BYTES),this.data=i?Gd(i,ve.MAX_DATA_BYTES):void 0}static fromProto(e){return new ve(e.code,e.message,e.data)}toProto(){return new Io({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new ve(ve.ErrorCode[e],ve.ErrorMessage[e],t)}}ve.MAX_MESSAGE_BYTES=256,ve.MAX_DATA_BYTES=15360,ve.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},ve.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 Jd=15360;function Ps(n){return new TextEncoder().encode(n).length}function Gd(n,e){if(Ps(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 Is=2e3;function er(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 Ms=typeof MediaRecorder<"u";class qp{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const Kp=Ms?MediaRecorder:qp;class zd extends Kp{constructor(e,t){if(!Ms)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,r;const s=()=>r===void 0,o=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",o),this.removeEventListener("error",a),r==null||r.close(),r=void 0},a=c=>{r==null||r.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",o),this.removeEventListener("error",a),r=void 0};this.byteStream=new ReadableStream({start:c=>{r=c,i=d=>f(this,void 0,void 0,function*(){let l;if(d.data.arrayBuffer){const u=yield d.data.arrayBuffer();l=new Uint8Array(u)}else if(d.data.byteArray)l=d.data.byteArray;else throw new Error("no data available!");s()||c.enqueue(l)}),this.addEventListener("dataavailable",i)},cancel:()=>{o()}}),this.addEventListener("stop",o),this.addEventListener("error",a)}}function Wp(){return Ms}const Hp=1e3,Jp=1e4;class Os extends E{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.pendingDeviceChange=!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=Es(()=>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(D.Ended,this)},this.reacquireTrack=!1,this.providedByUser=r,this.muteLock=new Le,this.pauseUpstreamLock=new Le,this.trackChangeLock=new Le,this.trackChangeLock.lock().then(o=>f(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(e,!0)}finally{o()}})),this._constraints=e.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==E.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=>{tn(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&&(en(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=>{en(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]:Hp;return(function*(){var i;if(e.kind===E.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=Ve())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Ne(10));const r=Date.now();for(;Date.now()-r<t;){const s=e.dimensions;if(s)return s;yield Ne(50)}throw new ct("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===sn(e)?!0:(this._constraints.deviceId=e,this.isMuted?(this.pendingDeviceChange=!0,!0):(yield this.restartTrack(),sn(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===E.Source.ScreenShare)return;const{deviceId:i,groupId:r}=e._mediaStreamTrack.getSettings(),s=e.kind===E.Kind.Audio?"audioinput":"videoinput";return t?De.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 ct("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=Kr(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const o={audio:!1,video:!1};this.kind===E.Kind.Video?o.video=i||r?{deviceId:i,facingMode:r}:!0:o.audio=i?Object.assign({deviceId:i},s):!0,this.attachedElements.forEach(d=>{tn(this.mediaStreamTrack,d)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(o)).getTracks()[0];return this.kind===E.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.pendingDeviceChange=!1,this.emit(D.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?D.Muted:D.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),fd()&&(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(D.UpstreamPaused,this);const i=Ve();if((i==null?void 0:i.name)==="Safari"&<(i.version,"12.0")<0)throw new qn("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(D.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 o=yield i.trackChangeLock.lock();try{i.log.debug("setting up processor",i.logContext);const a=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:a,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(en(i._mediaStreamTrack,a),a.muted=!0,a.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(()=>{a.play().catch(l=>{i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{err:l}))})},100)):i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:d}))}),i.processor=t,i.processorElement=a,i.processor.processedTrack){for(const d of i.attachedElements)d!==i.processorElement&&r&&(tn(i._mediaStreamTrack,d),en(i.processor.processedTrack,d));yield(s=i.sender)===null||s===void 0?void 0:s.replaceTrack(i.processor.processedTrack)}i.emit(D.TrackProcessorUpdate,i.processor)}finally{o()}})()})}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(D.TrackProcessorUpdate))})()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!Wp()){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 zd(this,{mimeType:t})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},Jp)}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 Cn extends Os{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,E.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 o;try{o=yield this.getSenderStats()}catch(a){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:a}));return}o&&this.prevStats&&(this._currentBitrate=er(o,this.prevStats)),this.prevStats=o}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(D.AudioTrackFeatureUpdate,this,Me.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(D.AudioTrackFeatureUpdate,this,Me.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===E.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{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===E.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||this.pendingDeviceChange)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{t()}})}restartTrack(e){return f(this,void 0,void 0,function*(){let t;if(e){const i=ss({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(){ze()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Is)))}setProcessor(e){return f(this,void 0,void 0,function*(){var t;const i=yield this.trackChangeLock.lock();try{if(!bt()&&!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(D.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 rd(this);return e&&(this.isMuted||this.log.debug("silence detected on local audio track",this.logContext),this.emit(D.AudioSilenceDetected)),e})}}function Gp(n,e,t){switch(n.kind){case"audio":return new Cn(n,e,!1,void 0,t);case"video":return new En(n,e,!1,t);default:throw new ct("unsupported track type: ".concat(n.kind))}}const zp=Object.values(bn),$p=Object.values(Ji),Qp=Object.values(Wn),Yp=[bn.h180,bn.h360],Xp=[Ji.h180,Ji.h360],Zp=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,r;return new ce(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)}),Ds=["q","h","f"];function As(n,e,t,i){var r,s;let o=i==null?void 0:i.videoEncoding;n&&(o=i==null?void 0:i.screenShareEncoding);const a=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,d=i==null?void 0:i.videoCodec;if(!o&&!a&&!c||!e||!t)return[{}];o||(o=tg(n,e,t,d),z.debug("using video encoding",o));const l=o.maxFramerate,u=new ce(e,t,o.maxBitrate,o.maxFramerate,o.priority);if(c&&dt(d)){const v=new Yd(c),g=[];if(v.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const S=Ve();if(Gn()||bt()||(S==null?void 0:S.name)==="Chrome"&<(S==null?void 0:S.version,"113")<0){const k=v.suffix=="h"?2:3,R=qf(S);for(let P=0;P<v.spatial;P+=1)g.push({rid:Ds[2-P],maxBitrate:o.maxBitrate/Math.pow(k,P),maxFramerate:u.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,P):void 0});g[0].scalabilityMode=c}else g.push({maxBitrate:o.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:c});return u.encoding.priority&&(g[0].priority=u.encoding.priority,g[0].networkPriority=u.encoding.priority),z.debug("using svc encoding",{encodings:g}),g}if(!a)return[o];let h=[];n?h=(r=Qd(i==null?void 0:i.screenShareSimulcastLayers))!==null&&r!==void 0?r:$d(n,u):h=(s=Qd(i==null?void 0:i.videoSimulcastLayers))!==null&&s!==void 0?s:$d(n,u);let m;if(h.length>0){const v=h[0];h.length>1&&([,m]=h);const g=Math.max(e,t);if(g>=960&&m)return xs(e,t,[v,m,u],l);if(g>=480)return xs(e,t,[v,u],l)}return xs(e,t,[u])}function eg(n,e,t){var i,r,s,o;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&z.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const a=n.mediaStreamTrack.getSettings(),c=(i=a.width)!==null&&i!==void 0?i:(r=n.dimensions)===null||r===void 0?void 0:r.width,d=(s=a.height)!==null&&s!==void 0?s:(o=n.dimensions)===null||o===void 0?void 0:o.height;return n.source===E.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),As(n.source===E.Source.ScreenShare,c,d,t)}function tg(n,e,t,i){const r=ng(n,e,t);let{encoding:s}=r[0];const o=Math.max(e,t);for(let a=0;a<r.length;a+=1){const c=r[a];if(s=c.encoding,c.width>=o)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 ng(n,e,t){if(n)return Qp;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?zp:$p}function $d(n,e){if(n)return Zp(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)?Yp:Xp}function xs(n,e,t,i){const r=[];if(t.forEach((s,o)=>{if(o>=Ds.length)return;const a=Math.min(n,e),d={rid:Ds[o],scaleResolutionDownBy:Math.max(1,a/Math.min(s.width,s.height)),maxBitrate:s.encoding.maxBitrate},l=i&&s.encoding.maxFramerate?Math.min(i,s.encoding.maxFramerate):s.encoding.maxFramerate;l&&(d.maxFramerate=l);const u=nn()||o===0;s.encoding.priority&&u&&(d.priority=s.encoding.priority,d.networkPriority=s.encoding.priority),r.push(d)}),bt()&&gd()==="ios"){let s;r.forEach(a=>{s?a.maxFramerate&&a.maxFramerate>s&&(s=a.maxFramerate):s=a.maxFramerate});let o=!0;r.forEach(a=>{var c;a.maxFramerate!=s&&(o&&(o=!1,z.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),z.info('Setting framerate of encoding "'.concat((c=a.rid)!==null&&c!==void 0?c:"",'" to ').concat(s)),a.maxFramerate=s)})}return r}function Qd(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 Yd{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 ig(n){return n.source===E.Source.ScreenShare||n.constraints.height&&sn(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const rg=5e3;class En extends Os{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,E.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 o=new Map(s.map(c=>[c.rid,c])),a=s.some(c=>c.qualityLimitationReason==="cpu");if(a!==this.isCpuConstrained&&(this.isCpuConstrained=a,this.isCpuConstrained&&this.emit(D.CpuConstrained)),this.prevStats){let c=0;o.forEach((d,l)=>{var u;const h=(u=this.prevStats)===null||u===void 0?void 0:u.get(l);c+=er(d,h)}),this._currentBitrate=c}this.prevStats=o}),this.senderLock=new Le}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!ze())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()},Is))}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,o;yield e.pauseUpstream.call(this);try{for(var a=!0,c=_t(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;a=!0)s=d.value,a=!1,yield(o=s.sender)===null||o===void 0?void 0:o.replaceTrack(null)}catch(l){i={error:l}}finally{try{!a&&!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,o;yield e.resumeUpstream.call(this);try{for(var a=!0,c=_t(this.simulcastCodecs.values()),d;d=yield c.next(),t=d.done,!t;a=!0){s=d.value,a=!1;const l=s;yield(o=l.sender)===null||o===void 0?void 0:o.replaceTrack(l.mediaStreamTrack)}}catch(l){i={error:l}}finally{try{!a&&!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===E.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===E.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{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 o={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},a=i.get(r.remoteId);a&&(o.jitter=a.jitter,o.packetsLost=a.packetsLost,o.roundTripTime=a.roundTripTime),t.push(o)}}),t.sort((r,s)=>{var o,a;return((o=s.frameWidth)!==null&&o!==void 0?o:0)-((a=r.frameWidth)!==null&&a!==void 0?a:0)}),t})}setPublishingQuality(e){const t=[];for(let i=Ge.LOW;i<=Ge.HIGH;i+=1)t.push(new Fr({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(dt(this.codec),t)}restartTrack(e){return f(this,void 0,void 0,function*(){var t,i,r,s,o;let a;if(e){const u=ss({video:e});typeof u.video!="boolean"&&(a=u.video)}yield this.restart(a),this.isCpuConstrained=!1;try{for(var c=!0,d=_t(this.simulcastCodecs.values()),l;l=yield d.next(),t=l.done,!t;c=!0){s=l.value,c=!1;const u=s;u.sender&&((o=u.sender.transport)===null||o===void 0?void 0:o.state)!=="closed"&&(u.mediaStreamTrack=this.mediaStreamTrack.clone(),yield u.sender.replaceTrack(u.mediaStreamTrack))}}catch(u){i={error:u}}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 o,a,c,d,l,u;if(yield t.setProcessor.call(r,i,s),!((l=r.processor)===null||l===void 0)&&l.processedTrack)try{for(var h=!0,m=_t(r.simulcastCodecs.values()),v;v=yield m.next(),o=v.done,!o;h=!0)d=v.value,h=!1,yield(u=d.sender)===null||u===void 0?void 0:u.replaceTrack(r.processor.processedTrack)}catch(g){a={error:g}}finally{try{!h&&!o&&(c=m.return)&&(yield c.call(m))}finally{if(a)throw a.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)},rg))}setPublishingCodecs(e){return f(this,void 0,void 0,function*(){var t,i,r,s,o,a,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(dt(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const d=[];try{for(t=!0,i=_t(e);r=yield i.next(),s=r.done,!s;t=!0){c=r.value,t=!1;const l=c;if(!this.codec||this.codec===l.codec)yield this.setPublishingLayers(dt(l.codec),l.qualities);else{const u=this.simulcastCodecs.get(l.codec);if(this.log.debug("try setPublishingCodec for ".concat(l.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:u})),!u||!u.sender){for(const h of l.qualities)if(h.enabled){d.push(l.codec);break}}else u.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(l.codec),this.logContext),yield Xd(u.sender,u.encodings,l.qualities,this.senderLock,dt(l.codec),this.log,this.logContext))}}}catch(l){o={error:l}}finally{try{!t&&!s&&(a=i.return)&&(yield a.call(i))}finally{if(o)throw o.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 Xd(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&&dt(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),fd()&&this.isInBackground&&this.source===E.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Xd(n,e,t,i,r,s,o){return f(this,void 0,void 0,function*(){const a=yield i.lock();s.debug("setPublishingLayersForSender",Object.assign(Object.assign({},o),{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({},o),{encodings:d,senderEncodings:e}));return}let l=!1;!1&&d[0].scalabilityMode||(r&&t.some(m=>m.enabled)&&t.forEach(m=>m.enabled=!0),d.forEach((h,m)=>{var v;let g=(v=h.rid)!==null&&v!==void 0?v:"";g===""&&(g="q");const S=Zd(g),k=t.find(R=>R.quality===S);k&&h.active!==k.enabled&&(l=!0,h.active=k.enabled,s.debug("setting layer ".concat(k.quality," to ").concat(h.active?"enabled":"disabled"),o),nn()&&(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)))})),l&&(c.encodings=d,s.debug("setting encodings",Object.assign(Object.assign({},o),{encodings:c.encodings})),yield n.setParameters(c))}finally{a()}})}function Zd(n){switch(n){case"f":return Ge.HIGH;case"h":return Ge.MEDIUM;case"q":return Ge.LOW;default:return Ge.HIGH}}function el(n,e,t,i){if(!t)return[new Bt({quality:Ge.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const r=t[0].scalabilityMode,s=new Yd(r),o=[],a=s.suffix=="h"?1.5:2,c=s.suffix=="h"?2:3;for(let d=0;d<s.spatial;d+=1)o.push(new Bt({quality:Math.min(Ge.HIGH,s.spatial-1)-d,width:Math.ceil(n/Math.pow(a,d)),height:Math.ceil(e/Math.pow(a,d)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,d)):0,ssrc:0}));return o}return t.map(r=>{var s,o,a;const c=(s=r.scaleResolutionDownBy)!==null&&s!==void 0?s:1;let d=Zd((o=r.rid)!==null&&o!==void 0?o:"");return new Bt({quality:d,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(a=r.maxBitrate)!==null&&a!==void 0?a:0,ssrc:0})})}const tl="_lossy",nl="_reliable",sg=2*1e3,Ls="leave-reconnect",ag=3e4,og=8*1024,cg=256*1024;var tt;(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"})(tt||(tt={}));class dg extends yt.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=_s.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=tt.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=z,this.reliableDataSequence=1,this.reliableMessageBuffer=new Ld,this.reliableReceivedState=new Mp(ag),this.lossyDataStatCurrentBytes=0,this.lossyDataStatByterate=0,this.lossyDataDropCount=0,this.midToTrackId={},this.isWaitingForNetworkReconnect=!1,this.handleDataChannel=i=>f(this,[i],void 0,function(r){var s=this;let{channel:o}=r;return(function*(){if(o){if(o.label===nl)s.reliableDCSub=o;else if(o.label===tl)s.lossyDCSub=o;else return;s.log.debug("on data channel ".concat(o.id,", ").concat(o.label),s.logContext),o.onmessage=s.handleDataMessage}})()}),this.handleDataMessage=i=>f(this,void 0,void 0,function*(){var r,s,o,a,c;const d=yield this.dataProcessLock.lock();try{let l;if(i.data instanceof ArrayBuffer)l=i.data;else if(i.data instanceof Blob)l=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const u=je.fromBinary(new Uint8Array(l));if(u.sequence>0&&u.participantSid!==""){const h=this.reliableReceivedState.get(u.participantSid);if(h&&u.sequence<=h)return;this.reliableReceivedState.set(u.participantSid,u.sequence)}if(((r=u.value)===null||r===void 0?void 0:r.case)==="speaker")this.emit(A.ActiveSpeakersUpdate,u.value.value.speakers);else if(((s=u.value)===null||s===void 0?void 0:s.case)==="encryptedPacket"){if(!this.e2eeManager){this.log.error("Received encrypted packet but E2EE not set up",this.logContext);return}const h=yield(o=this.e2eeManager)===null||o===void 0?void 0:o.handleEncryptedData(u.value.value.encryptedValue,u.value.value.iv,u.participantIdentity,u.value.value.keyIndex),m=Ro.fromBinary(h.payload),v=new je({value:m.value,participantIdentity:u.participantIdentity,participantSid:u.participantSid});((a=v.value)===null||a===void 0?void 0:a.case)==="user"&&il(v,v.value.value),this.emit(A.DataPacketReceived,v,u.value.value.encryptionType)}else((c=u.value)===null||c===void 0?void 0:c.case)==="user"&&il(u,u.value.value),this.emit(A.DataPacketReceived,u,ke.NONE)}finally{d()}}),this.handleDataError=i=>{const s=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:o}=i.error;this.log.error("DataChannel error on ".concat(s,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:o}))}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?$.LOSSY:$.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(A.Disconnected),this.close()},o=Date.now()-this.reconnectStart;let a=this.getNextRetryDelay({elapsedMs:o,retryCount:this.reconnectAttempts});if(a===null){s(o);return}i===Ls&&(a=0),this.log.debug("reconnecting in ".concat(a,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Oe.setTimeout(()=>this.attemptReconnect(r).finally(()=>this.reconnectTimeout=void 0),a)},this.waitForRestarted=()=>new Promise((i,r)=>{this.pcState===tt.Connected&&i();const s=()=>{this.off(A.Disconnected,o),i()},o=()=>{this.off(A.Restarted,s),r()};this.once(A.Restarted,s),this.once(A.Disconnected,o)}),this.updateAndEmitDCBufferStatus=i=>{if(i===$.RELIABLE){const s=this.dataChannelForKind(i);s&&this.reliableMessageBuffer.alignBufferedAmount(s.bufferedAmount)}const r=this.isBufferStatusLow(i);typeof r<"u"&&r!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,r),this.emit(A.DCBufferStatusChanged,r,i))},this.isBufferStatusLow=i=>{const r=this.dataChannelForKind(i);if(r)return r.bufferedAmount<=r.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>f(this,void 0,void 0,function*(){!this.url||!(yield fetch($n(this.url),{method:"HEAD"}).then(r=>r.ok).catch(()=>!1))||(this.log.info("detected network reconnected"),(this.client.currentState===me.RECONNECTING||this.isWaitingForNetworkReconnect&&this.client.currentState===me.CONNECTED)&&(this.clearReconnectTimeout(),this.attemptReconnect($t.RR_SIGNAL_DISCONNECTED),this.isWaitingForNetworkReconnect=!1))}),this.handleBrowserOffline=()=>f(this,void 0,void 0,function*(){if(this.url)try{yield Promise.race([fetch($n(this.url),{method:"HEAD"}),Ne(4e3).then(()=>Promise.reject())])}catch{window.navigator.onLine===!1&&(this.log.info("detected network interruption"),this.isWaitingForNetworkReconnect=!0)}}),this.log=ot((t=e.loggerName)!==null&&t!==void 0?t:$e.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new bs(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.closingLock=new Le,this.dataProcessLock=new Le,this.dcBufferStatus=new Map([[$.LOSSY,!0],[$.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(A.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(A.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(A.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(A.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(A.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(A.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(A.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(A.SignalRequestResponse,i)}get logContext(){var e,t,i,r,s,o;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:(o=(s=this.latestJoinResponse)===null||s===void 0?void 0:s.participant)===null||o===void 0?void 0:o.identity,pID:this.participantSid}}join(e,t,i,r){return f(this,arguments,void 0,function(s,o,a,c){var d=this;let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return(function*(){d.url=s,d.token=o,d.signalOpts=a,d.maxJoinAttempts=a.maxRetries;try{d.joinAttempts+=1,d.setupSignalClientCallbacks();const u=yield d.client.join(s,o,a,c,l);return d._isClosed=!1,d.latestJoinResponse=u,d.subscriberPrimary=u.subscriberPrimary,d.pcManager||(yield d.configure(u,!l)),(!d.subscriberPrimary||u.fastPublish)&&d.negotiate().catch(h=>{z.error(h,d.logContext)}),d.registerOnLineListener(),d.clientConfiguration=u.clientConfiguration,d.emit(A.SignalConnected,u),u}catch(u){if(u instanceof K){if(u.reason===ue.ServerUnreachable){if(d.log.warn("Couldn't connect to server, attempt ".concat(d.joinAttempts," of ").concat(d.maxJoinAttempts),d.logContext),d.joinAttempts<d.maxJoinAttempts)return d.join(s,o,a,c,l)}else if(u.reason===ue.ServiceNotFound)return d.log.warn("Initial connection failed: ".concat(u.message," – Retrying")),d.join(s,o,a,c,!0)}throw u}})()})}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(A.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),this.cleanupLossyDataStats(),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 Ld,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupLossyDataStats(){this.lossyDataStatByterate=0,this.lossyDataStatCurrentBytes=0,this.lossyDataStatInterval&&(clearInterval(this.lossyDataStatInterval),this.lossyDataStatInterval=void 0),this.lossyDataDropCount=0}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 ct("a track with the same ID has already been published");return new Promise((t,i)=>{const r=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(K.timeout("publication of local track timed out, no response from server"))},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,t){return f(this,void 0,void 0,function*(){var i,r;if(this.pcManager&&this.pcManager.currentState!==ge.NEW)return;this.participantSid=(i=e.participant)===null||i===void 0?void 0:i.sid;const s=this.makeRTCConfiguration(e);this.pcManager=new Bp(s,t?"publisher-only":e.subscriberPrimary?"subscriber-primary":"publisher-primary",this.loggerOptions),this.emit(A.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(o,a)=>{this.client.sendIceCandidate(o,a)},this.pcManager.onPublisherOffer=(o,a)=>{this.client.sendOffer(o,a)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(o,a,c)=>f(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(o),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),o===ge.CONNECTED){const u=this.pcState===tt.New;this.pcState=tt.Connected,u&&this.emit(A.Connected,e)}else o===ge.FAILED&&(this.pcState===tt.Connected||this.pcState===tt.Reconnecting)&&(this.pcState=tt.Disconnected,this.handleDisconnect("peerconnection failed",c==="failed"?$t.RR_SUBSCRIBER_FAILED:$t.RR_PUBLISHER_FAILED));const d=this.client.isDisconnected||this.client.currentState===me.RECONNECTING,l=[ge.FAILED,ge.CLOSING,ge.CLOSED].includes(o);d&&l&&!this._isClosed&&this.emit(A.Offline)}),this.pcManager.onTrack=o=>{o.streams.length!==0&&this.emit(A.MediaTrackAdded,o.track,o.streams[0],o.receiver)},lg((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(e,t,i)=>f(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,midToTrackId:i})),this.midToTrackId=i,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,i)=>f(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;this.midToTrackId=i;const r=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);r&&this.client.sendAnswer(r,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(A.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(A.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{var t;this.token=e,(t=this.regionUrlProvider)===null||t===void 0||t.updateToken(e)},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(A.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(A.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(A.RoomMoved,e)},this.client.onMediaSectionsRequirement=e=>{var t,i;const r={direction:"recvonly"};for(let s=0;s<e.numAudios;s++)(t=this.pcManager)===null||t===void 0||t.addPublisherTransceiverOfKind("audio",r);for(let s=0;s<e.numVideos;s++)(i=this.pcManager)===null||i===void 0||i.addPublisherTransceiverOfKind("video",r);this.negotiate()},this.client.onClose=()=>{this.handleDisconnect("signal",$t.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({updatedAtInMs:Date.now(),maxAgeInMs:Hd,regionSettings:e.regions})),e.action){case gn.DISCONNECT:this.emit(A.Disconnected,e==null?void 0:e.reason),this.close();break;case gn.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ls);break;case gn.RESUME:this.handleDisconnect(Ls)}}}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 o={urls:s.urls};s.username&&(o.username=s.username),s.credential&&(o.credential=s.credential),r.push(o)}),i.iceServers=r}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Un.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(tl,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(nl,{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,this.cleanupLossyDataStats(),this.lossyDataStatInterval=setInterval(()=>{this.lossyDataStatByterate=this.lossyDataStatCurrentBytes,this.lossyDataStatCurrentBytes=0;const e=this.dataChannelForKind($.LOSSY);if(e){const t=this.lossyDataStatByterate/10;e.bufferedAmountLowThreshold=Math.min(Math.max(t,og),cg)}},1e3))}createSender(e,t,i){return f(this,void 0,void 0,function*(){if(Gi())return yield this.createTransceiverRTCRtpSender(e,t,i);if(cs())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new Te("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,r){return f(this,void 0,void 0,function*(){if(Gi())return this.createSimulcastTransceiverSender(e,t,i,r);if(cs())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Te("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new Te("publisher is closed");const r=[];e.mediaStream&&r.push(e.mediaStream),Pt(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 Te("publisher is closed");const s={direction:"sendonly"};r&&(s.sendEncodings=r);const o=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,s);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,o.sender),o.sender})}createRTCRtpSender(e){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new Te("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){z.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===Un.DISABLED||((r=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&r!==void 0?r:ge.NEW)===ge.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 o=!0;s instanceof Te?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:s})),o=!1):s instanceof Zt||(this.fullReconnectOnNext=!0),o?this.handleDisconnect("reconnect",$t.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(A.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 Te("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(A.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 Zt;s=yield this.join(e??this.url,this.token,this.signalOpts,void 0,!this.options.singlePeerConnection)}catch(o){throw o instanceof K&&o.reason===ue.NotAllowed?new Te("could not reconnect, token might be expired"):new Zt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(A.SignalRestarted,s),yield this.waitForPCReconnected(),this.client.currentState!==me.CONNECTED)throw new Zt("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(A.Restarted)}catch(s){const o=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(o){yield this.restartConnection(o);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 Te("could not reconnect, url or token not saved");if(!this.pcManager)throw new Te("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(A.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 K&&r.reason===ue.NotAllowed?new Te("could not reconnect, token might be expired"):r instanceof K&&r.reason===ue.LeaveRequest?r:new Zt(s)}if(this.emit(A.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!==me.CONNECTED)throw new Zt("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(A.Resumed)})}waitForPCInitialConnection(e,t){return f(this,void 0,void 0,function*(){if(!this.pcManager)throw new Te("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return f(this,void 0,void 0,function*(){this.pcState=tt.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Ne(sg),!this.pcManager)throw new Te("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=tt.Connected}catch(e){throw this.pcState=tt.Disconnected,K.internal("could not establish PC connection, ".concat(e.message))}})}publishRpcResponse(e,t,i,r){return f(this,void 0,void 0,function*(){const s=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcResponse",value:new Mr({requestId:t,value:r?{case:"error",value:r.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(s,$.RELIABLE)})}publishRpcAck(e,t){return f(this,void 0,void 0,function*(){const i=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcAck",value:new Ir({requestId:t})}});yield this.sendDataPacket(i,$.RELIABLE)})}sendDataPacket(e,t){return f(this,void 0,void 0,function*(){if(yield this.ensurePublisherConnected(t),this.e2eeManager&&this.e2eeManager.isDataChannelEncryptionEnabled){const s=Dd(e);if(s){const o=yield this.e2eeManager.encryptData(s.toBinary());e.value={case:"encryptedPacket",value:new wo({encryptedValue:o.payload,iv:o.iv,keyIndex:o.keyIndex})}}}t===$.RELIABLE&&(e.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);const i=e.toBinary(),r=this.dataChannelForKind(t);if(r){if(t===$.RELIABLE)yield this.waitForBufferStatusLow(t),this.reliableMessageBuffer.push({data:i,sequence:e.sequence});else{if(!this.isBufferStatusLow(t)){this.lossyDataDropCount+=1,this.lossyDataDropCount%100===0&&this.log.warn("dropping lossy data channel messages, total dropped: ".concat(this.lossyDataDropCount),this.logContext);return}this.lossyDataStatCurrentBytes+=i.byteLength}if(this.attemptingReconnect)return;r.send(i)}this.updateAndEmitDCBufferStatus(t)})}resendReliableMessagesForResume(e){return f(this,void 0,void 0,function*(){yield this.ensurePublisherConnected($.RELIABLE);const t=this.dataChannelForKind($.RELIABLE);t&&(this.reliableMessageBuffer.popToSequence(e),this.reliableMessageBuffer.getAll().forEach(i=>{t.send(i.data)})),this.updateAndEmitDCBufferStatus($.RELIABLE)})}waitForBufferStatusLow(e){return new Fe((t,i)=>f(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const r=()=>i(new Te("engine closed"));for(this.once(A.Closing,r);!this.dcBufferStatus.get(e);)yield Ne(10);this.off(A.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 Te("PC manager is closed");const o=r?i.pcManager.subscriber:i.pcManager.publisher,a=r?"Subscriber":"Publisher";if(!o)throw K.internal("".concat(a," connection not set"));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().catch(u=>{z.error(u,i.logContext)});const d=i.dataChannelForKind(t,r);if((d==null?void 0:d.readyState)==="open")return;const l=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<l;){if(o.isICEConnected&&((s=i.dataChannelForKind(t,r))===null||s===void 0?void 0:s.readyState)==="open")return;yield Ne(50)}throw K.internal("could not establish ".concat(a," connection, state: ").concat(o.getICEConnectionState()))})()})}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||![ge.CONNECTING,ge.CONNECTED].includes(this.pcManager.currentState)||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return f(this,void 0,void 0,function*(){return new Fe((e,t)=>f(this,void 0,void 0,function*(){if(!this.pcManager){t(new Vt("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(new Vt("cannot negotiate on closed engine")),this.on(A.Closing,r),this.on(A.Restarting,r),this.pcManager.publisher.once(on.RTPVideoPayloadTypes,s=>{const o=new Map;s.forEach(a=>{const c=a.codec.toLowerCase();kd(c)&&o.set(a.payload,c)}),this.emit(A.RTPVideoMapUpdate,o)});try{yield this.pcManager.negotiate(i),e()}catch(s){if(i.signal.aborted){e();return}s instanceof Vt&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",$t.RR_UNKNOWN),s instanceof Error?t(s):t(new Error(String(s)))}finally{this.off(A.Closing,r),this.off(A.Restarting,r)}}))})}dataChannelForKind(e,t){if(t){if(e===$.LOSSY)return this.lossyDCSub;if(e===$.RELIABLE)return this.reliableDCSub}else{if(e===$.LOSSY)return this.lossyDC;if(e===$.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,r,s,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const a=this.pcManager.publisher.getLocalDescription(),c=this.pcManager.publisher.getRemoteDescription(),d=(i=this.pcManager.subscriber)===null||i===void 0?void 0:i.getRemoteDescription(),l=(r=this.pcManager.subscriber)===null||r===void 0?void 0:r.getLocalDescription(),u=(o=(s=this.signalOpts)===null||s===void 0?void 0:s.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(v=>{v.isDesired!==u&&h.push(v.trackSid),v.isEnabled||m.push(v.trackSid)}),this.client.sendSyncState(new Br({answer:this.pcManager.mode==="publisher-only"?c?Sn({sdp:c.sdp,type:c.type}):void 0:l?Sn({sdp:l.sdp,type:l.type}):void 0,offer:this.pcManager.mode==="publisher-only"?a?Sn({sdp:a.sdp,type:a.type}):void 0:d?Sn({sdp:d.sdp,type:d.type}):void 0,subscription:new Mi({trackSids:h,subscribe:!u,participantTracks:[]}),publishTracks:Of(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m,datachannelReceiveStates:this.reliableReceivedState.map((v,g)=>new Qo({publisherSid:g,lastSeq:v}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,r)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new Yo({label:i.label,id:i.id,target:r}))};return t(this.dataChannelForKind($.LOSSY),at.PUBLISHER),t(this.dataChannelForKind($.RELIABLE),at.PUBLISHER),t(this.dataChannelForKind($.LOSSY,!0),at.SUBSCRIBER),t(this.dataChannelForKind($.RELIABLE,!0),at.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Oe.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){ze()&&(window.addEventListener("online",this.handleBrowserOnLine),window.addEventListener("offline",this.handleBrowserOffline))}deregisterOnLineListener(){ze()&&(window.removeEventListener("online",this.handleBrowserOnLine),window.removeEventListener("offline",this.handleBrowserOffline))}getTrackIdForReceiver(e){var t;const i=(t=this.pcManager)===null||t===void 0?void 0:t.getMidForReceiver(e);if(i){const r=Object.entries(this.midToTrackId).find(s=>{let[o]=s;return o===i});if(r)return r[1]}}}function lg(n){return n!==void 0&&n>13}function il(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 rl{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 Qe("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),Be.Incomplete);if(this.bytesReceived>this.totalByteSize)throw new Qe("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),Be.LengthExceeded)}}constructor(e,t,i,r){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=r}}class ug extends rl{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 et,i=null,r=null;if(this.signal){const o=this.signal;r=()=>{var a;(a=t.reject)===null||a===void 0||a.call(t,o.reason)},o.addEventListener("abort",r),i=o}const s=()=>{e.releaseLock(),i&&r&&i.removeEventListener("abort",r),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var o,a;try{const{done:c,value:d}=yield Promise.race([e.read(),t.promise,(a=(o=this.outOfBandFailureRejectingFuture)===null||o===void 0?void 0:o.promise)!==null&&a!==void 0?a: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,o;let a=new Set;const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,l=_t(c),u;u=yield l.next(),i=u.done,!i;d=!0){o=u.value,d=!1;const h=o;a.add(h)}}catch(h){r={error:h}}finally{try{!d&&!i&&(s=l.return)&&(yield s.call(l))}finally{if(r)throw r.error}}return Array.from(a)})()})}}class hg extends rl{constructor(e,t,i,r){super(e,t,i,r),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=Qi(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 et,r=null,s=null;if(this.signal){const a=this.signal;s=()=>{var c;(c=i.reject)===null||c===void 0||c.call(i,a.reason)},a.addEventListener("abort",s),r=a}const o=()=>{e.releaseLock(),r&&s&&r.removeEventListener("abort",s),this.signal=void 0};return{next:()=>f(this,void 0,void 0,function*(){var a,c;try{const{done:d,value:l}=yield Promise.race([e.read(),i.promise,(c=(a=this.outOfBandFailureRejectingFuture)===null||a===void 0?void 0:a.promise)!==null&&c!==void 0?c:new Promise(()=>{})]);if(d)return this.validateBytesReceived(!0),{done:!0,value:void 0};{this.handleChunkReceived(l);let u;try{u=t.decode(l.content)}catch(h){throw new Qe("Cannot decode datastream chunk ".concat(l.chunkIndex," as text: ").concat(h),Be.DecodeFailed)}return{done:!1,value:u}}}catch(d){throw o(),d}}),return(){return f(this,void 0,void 0,function*(){return o(),{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,o;let a="";const c=t.signal?e.withAbortSignal(t.signal):e;try{for(var d=!0,l=_t(c),u;u=yield l.next(),i=u.done,!i;d=!0)o=u.value,d=!1,a+=o}catch(h){r={error:h}}finally{try{!d&&!i&&(s=l.return)&&(yield s.call(l))}finally{if(r)throw r.error}}return a})()})}}class mg{constructor(){this.log=z,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 Qe('A text stream handler for topic "'.concat(e,'" has already been set.'),Be.HandlerAlreadyRegistered);this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new Qe('A byte stream handler for topic "'.concat(e,'" has already been set.'),Be.HandlerAlreadyRegistered);this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear()}validateParticipantHasNoActiveDataStreams(e){var t,i,r,s;const o=Array.from(this.textStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e),a=Array.from(this.byteStreamControllers.entries()).filter(c=>c[1].sendingParticipantIdentity===e);if(o.length>0||a.length>0){const c=new Qe("Participant ".concat(e," unexpectedly disconnected in the middle of sending data"),Be.AbnormalEnd);for(const[d,l]of a)(i=(t=l.outOfBandFailureRejectingFuture).reject)===null||i===void 0||i.call(t,c),this.byteStreamControllers.delete(d);for(const[d,l]of o)(s=(r=l.outOfBandFailureRejectingFuture).reject)===null||s===void 0||s.call(r,c),this.textStreamControllers.delete(d)}}handleDataStreamPacket(e,t){return f(this,void 0,void 0,function*(){switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity,t);case"streamChunk":return this.handleStreamChunk(e.value.value,t);case"streamTrailer":return this.handleStreamTrailer(e.value.value,t);default:throw new Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}})}handleStreamHeader(e,t,i){return f(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const s=this.byteStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let o;const a=new et;a.promise.catch(l=>{this.log.error(l)});const c={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Qi(e.timestamp),attributes:e.attributes,encryptionType:i},d=new ReadableStream({start:l=>{if(o=l,this.textStreamControllers.has(e.streamId))throw new Qe("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Be.AlreadyOpened);this.byteStreamControllers.set(e.streamId,{info:c,controller:o,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});s(new ug(c,d,Qi(e.totalLength),a),{identity:t})}else if(e.contentHeader.case==="textHeader"){const s=this.textStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let o;const a=new et;a.promise.catch(l=>{this.log.error(l)});const c={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes,encryptionType:i,attachedStreamIds:e.contentHeader.value.attachedStreamIds},d=new ReadableStream({start:l=>{if(o=l,this.textStreamControllers.has(e.streamId))throw new Qe("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),Be.AlreadyOpened);this.textStreamControllers.set(e.streamId,{info:c,controller:o,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:a})}});s(new hg(c,d,Qi(e.totalLength),a),{identity:t})}})}handleStreamChunk(e,t){const i=this.byteStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?(i.controller.error(new Qe("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),Be.EncryptionTypeMismatch)),this.byteStreamControllers.delete(e.streamId)):e.content.length>0&&i.controller.enqueue(e));const r=this.textStreamControllers.get(e.streamId);r&&(r.info.encryptionType!==t?(r.controller.error(new Qe("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(r.info.encryptionType),Be.EncryptionTypeMismatch)),this.textStreamControllers.delete(e.streamId)):e.content.length>0&&r.controller.enqueue(e))}handleStreamTrailer(e,t){const i=this.textStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?i.controller.error(new Qe("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),Be.EncryptionTypeMismatch)):(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),e.attributes),i.controller.close(),this.textStreamControllers.delete(e.streamId)));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.encryptionType!==t?r.controller.error(new Qe("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(r.info.encryptionType),Be.EncryptionTypeMismatch)):(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close()),this.byteStreamControllers.delete(e.streamId))}}class sl{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 fg extends sl{}class pg extends sl{}const al=15e3;class gg{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(),o=new TextEncoder().encode(e).byteLength,a=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(a?a.length+1:1).fill(0),d=(u,h)=>{var m;c[h]=u;const v=c.reduce((g,S)=>g+S,0);(m=t==null?void 0:t.onProgress)===null||m===void 0||m.call(t,v)},l=yield this.streamText({streamId:r,totalSize:o,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:a,attributes:t==null?void 0:t.attributes});return yield l.write(e),d(1,0),yield l.close(),t!=null&&t.attachments&&a&&(yield Promise.all(t.attachments.map((u,h)=>f(this,void 0,void 0,function*(){return this._sendFile(a[h],u,{topic:t.topic,mimeType:u.type,onProgress:m=>{d(m,h+1)}})})))),l.info})}streamText(e){return f(this,void 0,void 0,function*(){var t,i,r;const s=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),o={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes,encryptionType:!((r=this.engine.e2eeManager)===null||r===void 0)&&r.isDataChannelEncryptionEnabled?ke.GCM:ke.NONE,attachedStreamIds:e==null?void 0:e.attachedStreamIds},a=new wi({streamId:s,mimeType:o.mimeType,topic:o.topic,timestamp:an(o.timestamp),totalLength:an(e==null?void 0:e.totalSize),attributes:o.attributes,contentHeader:{case:"textHeader",value:new Fo({version:e==null?void 0:e.version,attachedStreamIds:o.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Or.UPDATE:Or.CREATE})}}),c=e==null?void 0:e.destinationIdentities,d=new je({destinationIdentities:c,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(d,$.RELIABLE);let l=0;const u=this.engine,h=new WritableStream({write(g){return f(this,void 0,void 0,function*(){for(const S of tp(g,al)){const k=new Ri({content:S,streamId:s,chunkIndex:an(l)}),R=new je({destinationIdentities:c,value:{case:"streamChunk",value:k}});yield u.sendDataPacket(R,$.RELIABLE),l+=1}})},close(){return f(this,void 0,void 0,function*(){const g=new _i({streamId:s}),S=new je({destinationIdentities:c,value:{case:"streamTrailer",value:g}});yield u.sendDataPacket(S,$.RELIABLE)})},abort(g){console.log("Sink error:",g)}});let m=()=>f(this,void 0,void 0,function*(){yield v.close()});u.once(A.Closing,m);const v=new fg(h,o,()=>this.engine.off(A.Closing,m));return v})}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}),o=t.stream().getReader();for(;;){const{done:a,value:c}=yield o.read();if(a)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,o,a;const c=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),d=e==null?void 0:e.destinationIdentities,l={id:c,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",encryptionType:!((o=this.engine.e2eeManager)===null||o===void 0)&&o.isDataChannelEncryptionEnabled?ke.GCM:ke.NONE},u=new wi({totalLength:an((a=l.size)!==null&&a!==void 0?a:0),mimeType:l.mimeType,streamId:c,topic:l.topic,timestamp:an(Date.now()),attributes:l.attributes,contentHeader:{case:"byteHeader",value:new Bo({name:l.name})}}),h=new je({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,$.RELIABLE);let m=0;const v=new Le,g=this.engine,S=this.log,k=new WritableStream({write(P){return f(this,void 0,void 0,function*(){const y=yield v.lock();let b=0;try{for(;b<P.byteLength;){const T=P.slice(b,b+al),L=new je({destinationIdentities:d,value:{case:"streamChunk",value:new Ri({content:T,streamId:c,chunkIndex:an(m)})}});yield g.sendDataPacket(L,$.RELIABLE),m+=1,b+=T.byteLength}}finally{y()}})},close(){return f(this,void 0,void 0,function*(){const P=new _i({streamId:c}),y=new je({destinationIdentities:d,value:{case:"streamTrailer",value:P}});yield g.sendDataPacket(y,$.RELIABLE)})},abort(P){S.error("Sink error:",P)}});return new pg(k,l)})}}class Ns extends E{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?D.Muted:D.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(D.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(),Is)),Df()&&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(D.TimeSyncUpdate,{timestamp:r,rtpTimestamp:s}),this.rtpTimestamp=s)}};e()}}class ol extends Ns{constructor(e,t,i,r,s,o){super(e,t,E.Kind.Audio,i,o),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=er(a,this.prevStats)),this.prevStats=a}),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;bt()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(bt())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(zi(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&zi(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(D.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(r=>{this.emit(D.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 Us=100;class cl extends Ns{constructor(e,t,i,r,s){super(e,t,E.Kind.Video,i,s),this.elementInfos=[],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=er(o,this.prevStats)),this.prevStats=o}),this.debouncedHandleResize=Es(()=>{this.updateDimensions()},Us),this.adaptiveStreamSettings=r}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}setStreamState(e){super.setStreamState(e),this.log.debug("setStreamState",e),this.isAdaptiveStream&&e===E.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?tn(this._mediaStreamTrack,t):en(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 vg(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,o=this.elementInfos.some(c=>c.pictureInPicture),a=this.elementInfos.some(c=>c.visible)&&!s||o;if(!(this.lastVisible===a&&!e)){if(!a&&Date.now()-r<Us){Oe.setTimeout(()=>{this.updateVisibility()},Us);return}this.lastVisible=a,this.emit(D.VisibilityChanged,a,this)}}updateDimensions(){var e,t;let i=0,r=0;const s=this.getPixelDensity();for(const o of this.elementInfos){const a=o.width()*s,c=o.height()*s;a+c>i+r&&(i=a,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(D.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?vd():t||(vd()>2?2:1)}}class vg{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var r;const{target:s,isIntersecting:o}=i;s===this.element&&(this.isIntersecting=o,this.isPiP=Xn(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=Xn(this.element),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=Xn(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Fs(e),this.isPiP=ze()&&Xn(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Fs(this.element),this.isPiP=Xn(this.element),this.element.handleResize=()=>{var r;(r=this.handleResize)===null||r===void 0||r.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,bd().observe(this.element),yd().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=bd())===null||e===void 0||e.unobserve(this.element),(t=yd())===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 Xn(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Fs(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Fs(n,e){const t=e||window;let i=n.offsetTop,r=n.offsetLeft;const s=n.offsetWidth,o=n.offsetHeight,{hidden:a}=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+o>t.pageYOffset&&r+s>t.pageXOffset&&!a&&c!=="none"}class kt extends yt.EventEmitter{constructor(e,t,i,r){var s;super(),this.metadataMuted=!1,this.encryption=ke.NONE,this.log=z,this.handleMuted=()=>{this.emit(D.Muted)},this.handleUnmuted=()=>{this.emit(D.Unmuted)},this.log=ot((s=r==null?void 0:r.loggerName)!==null&&s!==void 0?s:$e.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=i,this.source=E.Source.Unknown}setTrack(e){this.track&&(this.track.off(D.Muted,this.handleMuted),this.track.off(D.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(D.Muted,this.handleMuted),e.on(D.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Y(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==ke.NONE}get audioTrack(){if(ut(this.track))return this.track}get videoTrack(){if(Pt(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=E.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===E.Kind.Video&&e.width>0&&(this.dimensions={width:e.width,height:e.height},this.simulcasted=e.simulcast),this.encryption=e.encryption,this.trackInfo=e,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:e}))}}(function(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={}))})(kt||(kt={}));class tr extends kt{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(D.Ended)},this.handleCpuConstrained=()=>{this.track&&Pt(this.track)&&this.emit(D.CpuConstrained,this.track)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&(this.track.off(D.Ended,this.handleTrackEnded),this.track.off(D.CpuConstrained,this.handleCpuConstrained)),super.setTrack(e),e&&(e.on(D.Ended,this.handleTrackEnded),e.on(D.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(ut(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(Me.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(Me.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(Me.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(Me.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(Me.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(Me.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function Zn(n,e){return f(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:r,optionsWithoutProcessor:s}=ad(n);let o=s.audio,a=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 u=s.audio.deviceId;s.audio.deviceId={exact:u},t=!0,o=Object.assign(Object.assign({},s.audio),{deviceId:{ideal:u}})}if(s.video&&typeof s.video=="object"&&typeof s.video.deviceId=="string"){const u=s.video.deviceId;s.video.deviceId={exact:u},t=!0,a=Object.assign(Object.assign({},s.video),{deviceId:{ideal:u}})}s.audio===!0?s.audio={deviceId:"default"}:typeof s.audio=="object"&&s.audio!==null&&(s.audio=Object.assign(Object.assign({},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=id(s,Kd,Wd),d=ss(c),l=navigator.mediaDevices.getUserMedia(d);s.audio&&(De.userMediaPromiseMap.set("audioinput",l),l.catch(()=>De.userMediaPromiseMap.delete("audioinput"))),s.video&&(De.userMediaPromiseMap.set("videoinput",l),l.catch(()=>De.userMediaPromiseMap.delete("videoinput")));try{const u=yield l;return yield Promise.all(u.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 g;const S=m?d.audio:d.video;typeof S!="boolean"&&(g=S);const k=h.getSettings().deviceId;g!=null&&g.deviceId&&sn(g.deviceId)!==k?g.deviceId=k:g||(g={deviceId:k});const R=Gp(h,g,e);return R.kind===E.Kind.Video?R.source=E.Source.Camera:R.kind===E.Kind.Audio&&(R.source=E.Source.Microphone),R.mediaStream=u,ut(R)&&i?yield R.setProcessor(i):Pt(R)&&r&&(yield R.setProcessor(r)),R})))}catch(u){if(!t)throw u;return Zn(Object.assign(Object.assign({},n),{audio:o,video:a}),e)}})}function dl(n){return f(this,void 0,void 0,function*(){return(yield Zn({audio:!1,video:n??!0}))[0]})}function ll(n){return f(this,void 0,void 0,function*(){return(yield Zn({audio:n??!0,video:!1}))[0]})}function yg(n){return f(this,void 0,void 0,function*(){if(n===void 0&&(n={}),n.resolution===void 0&&!md()&&(n.resolution=Wn.h1080fps30.resolution),navigator.mediaDevices.getDisplayMedia===void 0)throw new qn("getDisplayMedia not supported");const e=sd(n),t=yield navigator.mediaDevices.getDisplayMedia(e),i=t.getVideoTracks();if(i.length===0)throw new ct("no video track found");const r=new En(i[0],void 0,!1);r.source=E.Source.ScreenShare;const s=[r];if(t.getAudioTracks().length>0){const o=new Cn(t.getAudioTracks()[0],void 0,!1);o.source=E.Source.ScreenShareAudio,s.push(o)}return s})}var Dt;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(Dt||(Dt={}));function bg(n){switch(n){case Nn.EXCELLENT:return Dt.Excellent;case Nn.GOOD:return Dt.Good;case Nn.POOR:return Dt.Poor;case Nn.LOST:return Dt.Lost;default:return Dt.Unknown}}class Bs extends yt.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===fn.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===mn.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,r,s,o){let a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:fn.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Dt.Unknown,this.log=z,this.log=ot((c=o==null?void 0:o.loggerName)!==null&&c!==void 0?c:$e.Participant),this.loggerOptions=o,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=a,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 et,this.once(x.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(E.Source.Camera);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(E.Source.Microphone);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(E.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){var 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===mn.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==mn.ACTIVE&&this.emit(x.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(x.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(x.ParticipantNameChanged,e)}_setAttributes(e){const t=Af(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(x.AttributesChanged,t)}setPermissions(e){var t,i,r,s,o,a;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!==((o=this.permissions)===null||o===void 0?void 0:o.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((l,u)=>{var h;return l!==((h=this.permissions)===null||h===void 0?void 0:h.canPublishSources[u])})||e.canSubscribeMetrics!==((a=this.permissions)===null||a===void 0?void 0:a.canSubscribeMetrics);return this.permissions=e,d&&this.emit(x.ParticipantPermissionsChanged,c),d}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(x.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=bg(e),t!==this._connectionQuality&&this.emit(x.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=>ut(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(D.Muted,()=>{this.emit(x.TrackMuted,e)}),e.on(D.Unmuted,()=>{this.emit(x.TrackUnmuted,e)});const t=e;switch(t.track&&(t.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case E.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case E.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function kg(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 zo({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 ul extends Bs{constructor(e,t,i,r,s,o){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=ke.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new et)},this.handleReconnected=()=>{var a,c;(c=(a=this.reconnectFuture)===null||a===void 0?void 0:a.resolve)===null||c===void 0||c.call(a),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var a,c,d,l,u,h;this.reconnectFuture&&(this.reconnectFuture.promise.catch(m=>this.log.warn(m.message,this.logContext)),(c=(a=this.reconnectFuture)===null||a===void 0?void 0:a.reject)===null||c===void 0||c.call(a,new Error("Got disconnected during reconnection attempt")),this.reconnectFuture=void 0),this.signalConnectedFuture&&((l=(d=this.signalConnectedFuture).reject)===null||l===void 0||l.call(d,new Error("Got disconnected without signal connected")),this.signalConnectedFuture=void 0),(h=(u=this.activeAgentFuture)===null||u===void 0?void 0:u.reject)===null||h===void 0||h.call(u,new Error("Got disconnected without active agent present")),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=a=>{var c,d;a.participant&&this.updateInfo(a.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new et),(d=(c=this.signalConnectedFuture).resolve)===null||d===void 0||d.call(c)},this.handleSignalRequestResponse=a=>{const{requestId:c,reason:d,message:l}=a,u=this.pendingSignalRequests.get(c);u&&(d!==jr.OK&&u.reject(new ns(l,d)),this.pendingSignalRequests.delete(c))},this.handleDataPacket=a=>{switch(a.value.case){case"rpcResponse":let c=a.value.value,d=null,l=null;c.value.case==="payload"?d=c.value.value:c.value.case==="error"&&(l=ve.fromProto(c.value.value)),this.handleIncomingRpcResponse(c.requestId,d,l);break;case"rpcAck":let u=a.value.value;this.handleIncomingRpcAck(u.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(a=>kg(a)))},this.onTrackUnmuted=a=>{this.onTrackMuted(a,a.isUpstreamPaused)},this.onTrackMuted=(a,c)=>{if(c===void 0&&(c=!0),!a.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Y(a)));return}this.engine.updateMuteStatus(a.sid,c)},this.onTrackUpstreamPaused=a=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Y(a))),this.onTrackMuted(a,!0)},this.onTrackUpstreamResumed=a=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Y(a))),this.onTrackMuted(a,a.isMuted)},this.onTrackFeatureUpdate=a=>{const c=this.audioTrackPublications.get(a.sid);if(!c){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(a.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(c.trackSid,c.getTrackFeatures())},this.onTrackCpuConstrained=(a,c)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),Y(c))),this.emit(x.LocalTrackCpuConstrained,a,c)},this.handleSubscribedQualityUpdate=a=>f(this,void 0,void 0,function*(){var c,d,l,u,h;if(!(!((h=this.roomOptions)===null||h===void 0)&&h.dynacast))return;const m=this.videoTrackPublications.get(a.trackSid);if(!m){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}if(!m.videoTrack)return;const v=yield m.videoTrack.setPublishingCodecs(a.subscribedCodecs);try{for(var g=!0,S=_t(v),k;k=yield S.next(),c=k.done,!c;g=!0){u=k.value,g=!1;const R=u;nd(R)&&(this.log.debug("publish ".concat(R," for ").concat(m.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Y(m))),yield this.publishAdditionalCodecForTrack(m.videoTrack,R,m.options))}}catch(R){d={error:R}}finally{try{!g&&!c&&(l=S.return)&&(yield l.call(S))}finally{if(d)throw d.error}}}),this.handleLocalTrackUnpublished=a=>{const c=this.trackPublications.get(a.trackSid);if(!c){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}this.unpublishTrack(c.track)},this.handleTrackEnded=a=>f(this,void 0,void 0,function*(){if(a.source===E.Source.ScreenShare||a.source===E.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Y(a))),this.unpublishTrack(a);else if(a.isUserProvided)yield a.mute();else if(It(a)||Kt(a))try{if(ze())try{const c=yield navigator==null?void 0:navigator.permissions.query({name:a.source===E.Source.Camera?"camera":"microphone"});if(c&&c.state==="denied")throw this.log.warn("user has revoked access to ".concat(a.source),Object.assign(Object.assign({},this.logContext),Y(a))),c.onchange=()=>{c.state!=="denied"&&(a.isMuted||a.restartTrack(),c.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}a.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Y(a))),It(a)?yield a.restartTrack({deviceId:"default"}):yield a.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Y(a))),yield a.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=o}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==ke.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(A.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(A.Connected,this.handleReconnected).on(A.SignalConnected,this.handleSignalConnected).on(A.SignalRestarted,this.handleReconnected).on(A.SignalResumed,this.handleReconnected).on(A.Restarting,this.handleReconnecting).on(A.Resuming,this.handleReconnecting).on(A.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(A.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(A.Closing,this.handleClosing).on(A.SignalRequestResponse,this.handleSignalRequestResponse).on(A.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:o}=t;return(function*(){return new Fe((a,c)=>f(i,void 0,void 0,function*(){var d,l;try{let u=!1;const h=yield this.engine.client.sendUpdateLocalMetadata((d=r??this.metadata)!==null&&d!==void 0?d:"",(l=s??this.name)!==null&&l!==void 0?l:"",o),m=performance.now();for(this.pendingSignalRequests.set(h,{resolve:a,reject:v=>{c(v),u=!0},values:{name:s,metadata:r,attributes:o}});performance.now()-m<5e3&&!u;){if((!s||this.name===s)&&(!r||this.metadata===r)&&(!o||Object.entries(o).every(v=>{let[g,S]=v;return this.attributes[g]===S||S===""&&!this.attributes[g]}))){this.pendingSignalRequests.delete(h),a();return}yield Ne(50)}c(new ns("Request to update local metadata timed out","TimeoutError"))}catch(u){u instanceof Error?c(u):c(new Error(String(u)))}}))})()})}setCameraEnabled(e,t,i){return this.setTrackEnabled(E.Source.Camera,e,t,i)}setMicrophoneEnabled(e,t,i){return this.setTrackEnabled(E.Source.Microphone,e,t,i)}setScreenShareEnabled(e,t,i){return this.setTrackEnabled(E.Source.ScreenShare,e,t,i)}setE2EEEnabled(e){return f(this,void 0,void 0,function*(){this.encryptionType=e?ke.GCM:ke.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,r){return f(this,void 0,void 0,function*(){var s,o;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let a=this.getTrackPublication(e);if(t)if(a)yield a.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 E.Source.Camera:c=yield this.createTracks({video:(s=i)!==null&&s!==void 0?s:!0});break;case E.Source.Microphone:c=yield this.createTracks({audio:(o=i)!==null&&o!==void 0?o:!0});break;case E.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new ct(e)}}catch(d){throw c==null||c.forEach(l=>{l.stop()}),d instanceof Error&&this.emit(x.MediaDevicesError,d,os(e)),this.pendingPublishing.delete(e),d}for(const d of c){const l=Object.assign(Object.assign({},this.roomOptions.publishDefaults),i);e===E.Source.Microphone&&ut(d)&&l.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),d.startPreConnectBuffer())}try{const d=[];for(const u of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Y(u))),d.push(this.publishTrack(u,r));[a]=yield Promise.all(d)}catch(d){throw c==null||c.forEach(l=>{l.stop()}),d}finally{this.pendingPublishing.delete(e)}}else if(!(a!=null&&a.track)&&this.pendingPublishing.has(e)&&(a=yield this.waitForPendingPublicationOfSource(e),a||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),a&&a.track)if(e===E.Source.ScreenShare){a=yield this.unpublishTrack(a.track);const c=this.getTrackPublication(E.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield a.mute();return a})}enableCameraAndMicrophone(){return f(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(E.Source.Camera)||this.pendingPublishing.has(E.Source.Microphone))){this.pendingPublishing.add(E.Source.Camera),this.pendingPublishing.add(E.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(t=>this.publishTrack(t)))}finally{this.pendingPublishing.delete(E.Source.Camera),this.pendingPublishing.delete(E.Source.Microphone)}}})}createTracks(e){return f(this,void 0,void 0,function*(){var t,i;e??(e={});const r=id(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 Zn(r,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(a=>(ut(a)&&(this.microphoneError=void 0,a.setAudioContext(this.audioContext),a.source=E.Source.Microphone,this.emit(x.AudioStreamAcquired)),Pt(a)&&(this.cameraError=void 0,a.source=E.Source.Camera),a))}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 qn("getDisplayMedia not supported");e.resolution===void 0&&!md()&&(e.resolution=Wn.h1080fps30.resolution);const t=sd(e),i=yield navigator.mediaDevices.getDisplayMedia(t),r=i.getVideoTracks();if(r.length===0)throw new ct("no video track found");const s=new En(r[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=E.Source.ScreenShare,e.contentHint&&(s.mediaStreamTrack.contentHint=e.contentHint);const o=[s];if(i.getAudioTracks().length>0){this.emit(x.AudioStreamAcquired);const a=new Cn(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});a.source=E.Source.ScreenShareAudio,o.push(a)}return o})}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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return(function*(){var a,c,d,l;It(i)&&i.setAudioContext(s.audioContext),yield(a=s.reconnectFuture)===null||a===void 0?void 0:a.promise,s.republishPromise&&!o&&(yield s.republishPromise),qt(i)&&s.pendingPublishPromises.has(i)&&(yield s.pendingPublishPromises.get(i));let u;if(i instanceof MediaStreamTrack)u=i.getConstraints();else{u=i.constraints;let k;switch(i.source){case E.Source.Microphone:k="audioinput";break;case E.Source.Camera:k="videoinput"}k&&s.activeDeviceMap.has(k)&&(u=Object.assign(Object.assign({},u),{deviceId:s.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new Cn(i,u,!0,s.audioContext,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;case"video":i=new En(i,u,!0,{loggerName:s.roomOptions.loggerName,loggerContextCb:()=>s.logContext});break;default:throw new ct("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),Y(h))),h;const m=Object.assign(Object.assign({},s.roomOptions.publishDefaults),r),v="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,g=(c=m.forceStereo)!==null&&c!==void 0?c:v;g&&(m.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),Y(i))),m.red===void 0&&s.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(d=m.dtx)!==null&&d!==void 0||(m.dtx=!1),(l=m.red)!==null&&l!==void 0||(m.red=!1)),!Kf()&&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)),m.simulcast=!1),m.source&&(i.source=m.source);const S=new Promise((k,R)=>f(s,void 0,void 0,function*(){try{if(this.engine.client.currentState!==me.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:Y(i)}));let P=!1;const y=setTimeout(()=>{P=!0,i.stop(),R(new ts("publishing rejected as engine not connected within timeout",408))},15e3);if(yield this.waitUntilEngineConnected(),clearTimeout(y),P)return;const b=yield this.publish(i,m,g);k(b)}else try{const P=yield this.publish(i,m,g);k(P)}catch(P){R(P)}}catch(P){R(P)}}));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 et),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Y(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(r=>xf(r)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Y(e))),!1)}publish(e,t,i){return f(this,void 0,void 0,function*(){var r,s,o,a,c,d,l,u,h,m;if(!this.hasPermissionsToPublish(e))throw new ts("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(I=>qt(e)&&I.source===e.source)&&e.source!==E.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),Y(e))),t.stopMicTrackOnMute&&ut(e)&&(e.stopOnMute=!0),e.source===E.Source.ScreenShare&&nn()&&(t.simulcast=!1),t.videoCodec==="av1"&&!dd()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!ld()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=Rs),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(I=>t.videoCodec===Hn(I.mime))||(t.videoCodec=Hn(this.enabledPublishVideoCodecs[0].mime)));const g=t.videoCodec;e.on(D.Muted,this.onTrackMuted),e.on(D.Unmuted,this.onTrackUnmuted),e.on(D.Ended,this.handleTrackEnded),e.on(D.UpstreamPaused,this.onTrackUpstreamPaused),e.on(D.UpstreamResumed,this.onTrackUpstreamResumed),e.on(D.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const S=[],k=!(!((r=t.dtx)!==null&&r!==void 0)||r),R=e.getSourceTrackSettings();R.autoGainControl&&S.push(Me.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&S.push(Me.TF_ECHO_CANCELLATION),R.noiseSuppression&&S.push(Me.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&S.push(Me.TF_STEREO),k&&S.push(Me.TF_NO_DTX),It(e)&&e.hasPreConnectBuffer&&S.push(Me.TF_PRECONNECT_BUFFER);const P=new Fn({cid:e.mediaStreamTrack.id,name:t.name,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.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 y;if(e.kind===E.Kind.Video){let I={width:0,height:0};try{I=yield e.waitForDimensions()}catch{const N=(a=(o=this.roomOptions.videoCaptureDefaults)===null||o===void 0?void 0:o.resolution)!==null&&a!==void 0?a:bn.h720.resolution;I={width:N.width,height:N.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{dims:I}))}P.width=I.width,P.height=I.height,Kt(e)&&(dt(g)&&(e.source===E.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),Y(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),P.simulcastCodecs=[new xr({codec:g,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:Rs}),t.backupCodec&&g!==t.backupCodec.codec&&P.encryption===ke.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),P.simulcastCodecs.push(new xr({codec:t.backupCodec.codec,cid:""})))),y=As(e.source===E.Source.ScreenShare,P.width,P.height,t),P.layers=el(P.width,P.height,y,dt(t.videoCodec))}else e.kind===E.Kind.Audio&&(y=[{maxBitrate:(d=t.audioPreset)===null||d===void 0?void 0:d.maxBitrate,priority:(u=(l=t.audioPreset)===null||l===void 0?void 0:l.priority)!==null&&u!==void 0?u:"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 Te("cannot publish track when not connected");const b=()=>f(this,void 0,void 0,function*(){var I,U,N;if(!this.engine.pcManager)throw new Te("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,y),this.emit(x.LocalSenderCreated,e.sender,e),Kt(e)&&((I=t.degradationPreference)!==null&&I!==void 0||(t.degradationPreference=ig(e)),e.setDegradationPreference(t.degradationPreference)),y)if(nn()&&e.kind===E.Kind.Audio){let W;for(const ee of this.engine.pcManager.publisher.getTransceivers())if(ee.sender===e.sender){W=ee;break}W&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:W,codec:"opus",maxbr:!((U=y[0])===null||U===void 0)&&U.maxBitrate?y[0].maxBitrate/1e3:0})}else e.codec&&dt(e.codec)&&(!((N=y[0])===null||N===void 0)&&N.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:P.cid,codec:e.codec,maxbr:y[0].maxBitrate/1e3});yield this.engine.negotiate()});let T;const L=new Promise((I,U)=>f(this,void 0,void 0,function*(){var N;try{T=yield this.engine.addTrack(P),I(T)}catch(W){e.sender&&(!((N=this.engine.pcManager)===null||N===void 0)&&N.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(ee=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{error:ee}))})),U(W)}}));if(this.enabledPublishVideoCodecs.length>0)T=(yield Promise.all([L,b()]))[0];else{T=yield L;let I;if(T.codecs.forEach(U=>{I===void 0&&(I=U.mimeType)}),I&&e.kind===E.Kind.Video){const U=Hn(I);U!==g&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{codec:U})),t.videoCodec=U,y=As(e.source===E.Source.ScreenShare,P.width,P.height,t))}yield b()}const B=new tr(e.kind,T,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(B.on(D.CpuConstrained,I=>this.onTrackCpuConstrained(I,B)),B.options=t,e.sid=T.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:y,trackInfo:T})),Kt(e)?e.startMonitor(this.engine.client):It(e)&&e.startMonitor(),this.addTrackPublication(B),this.emit(x.LocalTrackPublished,B),It(e)&&T.audioFeatures.includes(Me.TF_PRECONNECT_BUFFER)){const I=e.getPreConnectBuffer(),U=e.getPreConnectBufferMimeType();this.on(x.LocalTrackSubscribed,N=>{if(N.trackSid===T.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),Y(e))),e.stopPreConnectBuffer()}}),I&&new Promise((W,ee)=>f(this,void 0,void 0,function*(){var Se,_,F,q,te,se;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),Y(e)));const Ue=setTimeout(()=>{ee(new Error("agent not active within 10 seconds"))},1e4),j=yield this.waitUntilActiveAgentPresent();clearTimeout(Ue),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),Y(e)));const V=yield this.streamBytes({name:"preconnect-buffer",mimeType:U,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[j.identity],attributes:{trackId:B.trackSid,sampleRate:String((te=R.sampleRate)!==null&&te!==void 0?te:"48000"),channels:String((se=R.channelCount)!==null&&se!==void 0?se:"1")}});try{for(var ae=!0,_e=_t(I),Ae;Ae=yield _e.next(),Se=Ae.done,!Se;ae=!0){q=Ae.value,ae=!1;const oe=q;yield V.write(oe)}}catch(oe){_={error:oe}}finally{try{!ae&&!Se&&(F=_e.return)&&(yield F.call(_e))}finally{if(_)throw _.error}}yield V.close(),W()}catch(Ue){ee(Ue)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),Y(e)))}).catch(W=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{error:W}))})}return B})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return f(this,void 0,void 0,function*(){var r;if(this.encryptionType!==ke.NONE)return;let s;if(this.trackPublications.forEach(m=>{m.track&&m.track===e&&(s=m)}),!s)throw new ct("track is not published");if(!Kt(e))throw new ct("track is not a video track");const o=Object.assign(Object.assign({},(r=this.roomOptions)===null||r===void 0?void 0:r.publishDefaults),i),a=eg(e,t,o);if(!a){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Y(e)));return}const c=e.addSimulcastTrack(t,a);if(!c)return;const d=new Fn({cid:c.mediaStreamTrack.id,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:o.videoCodec,cid:c.mediaStreamTrack.id}]});if(d.layers=el(d.width,d.height,a),!this.engine||this.engine.isClosed)throw new Te("cannot publish track when not connected");const l=()=>f(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,o,a),yield this.engine.negotiate()}),h=(yield Promise.all([this.engine.addTrack(d),l()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:a,trackInfo:h}))})}unpublishTrack(e,t){return f(this,void 0,void 0,function*(){var i,r;if(qt(e)){const d=this.pendingPublishPromises.get(e);d&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Y(e))),yield d)}const s=this.getPublicationForTrack(e),o=s?Y(s):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),o)),!s||!s.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),o));return}e=s.track,e.off(D.Muted,this.onTrackMuted),e.off(D.Unmuted,this.onTrackUnmuted),e.off(D.Ended,this.handleTrackEnded),e.off(D.UpstreamPaused,this.onTrackUpstreamPaused),e.off(D.UpstreamResumed,this.onTrackUpstreamResumed),e.off(D.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 a=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ge.FAILED&&c)try{for(const d of this.engine.pcManager.publisher.getTransceivers())d.sender===c&&(d.direction="inactive",a=!0);if(this.engine.removeTrack(c)&&(a=!0),Kt(e)){for(const[,d]of e.simulcastCodecs)d.sender&&(this.engine.removeTrack(d.sender)&&(a=!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),o),{error:d}))}switch(this.trackPublications.delete(s.trackSid),s.kind){case E.Kind.Audio:this.audioTrackPublications.delete(s.trackSid);break;case E.Kind.Video:this.videoTrackPublications.delete(s.trackSid);break}return this.emit(x.LocalTrackUnpublished,s),s.setTrack(void 0),a&&(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 Fe((s,o)=>f(i,void 0,void 0,function*(){try{const a=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),a.push(c))}),yield Promise.all(a.map(c=>f(this,void 0,void 0,function*(){const d=c.track;yield this.unpublishTrack(d,!1),r&&!d.isMuted&&d.source!==E.Source.ScreenShare&&d.source!==E.Source.ScreenShareAudio&&(It(d)||Kt(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(a){a instanceof Error?o(a):o(new Error(String(a)))}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?$.RELIABLE:$.LOSSY,o=r.destinationIdentities,a=r.topic;let c=new _r({participantIdentity:i.identity,payload:t,destinationIdentities:o,topic:a});const d=new je({kind:s,value:{case:"user",value:c}});yield i.engine.sendDataPacket(d,s)})()})}publishDtmf(e,t){return f(this,void 0,void 0,function*(){const i=new je({kind:$.RELIABLE,value:{case:"sipDtmf",value:new Po({code:e,digit:t})}});yield this.engine.sendDataPacket(i,$.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 je({value:{case:"chatMessage",value:new Ei(Object.assign(Object.assign({},i),{timestamp:pe.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(r,$.RELIABLE),this.emit(x.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 je({value:{case:"chatMessage",value:new Ei(Object.assign(Object.assign({},i),{timestamp:pe.parse(i.timestamp),editTimestamp:pe.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(r,$.RELIABLE),this.emit(x.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){let{destinationIdentity:t,method:i,payload:r,responseTimeout:s=15e3}=e;const o=7e3,a=o+1e3;return new Fe((c,d)=>f(this,void 0,void 0,function*(){var l,u,h,m;if(Ps(r)>Jd){d(ve.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((u=(l=this.engine.latestJoinResponse)===null||l===void 0?void 0:l.serverInfo)===null||u===void 0)&&u.version&<((m=(h=this.engine.latestJoinResponse)===null||h===void 0?void 0:h.serverInfo)===null||m===void 0?void 0:m.version,"1.8.0")<0){d(ve.builtIn("UNSUPPORTED_SERVER"));return}const v=Math.max(s,a),g=crypto.randomUUID();yield this.publishRpcRequest(t,g,i,r,v);const S=setTimeout(()=>{this.pendingAcks.delete(g),d(ve.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(g),clearTimeout(k)},o);this.pendingAcks.set(g,{resolve:()=>{clearTimeout(S)},participantIdentity:t});const k=setTimeout(()=>{this.pendingResponses.delete(g),d(ve.builtIn("RESPONSE_TIMEOUT"))},s);this.pendingResponses.set(g,{resolve:(R,P)=>{clearTimeout(k),this.pendingAcks.has(g)&&(this.log.warn("RPC response received before ack",g),this.pendingAcks.delete(g),clearTimeout(S)),P?d(P):c(R??"")},participantIdentity:t})}))}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 o=new je({destinationIdentities:[e],kind:$.RELIABLE,value:{case:"rpcRequest",value:new Pr({id:t,method:i,payload:r,responseTimeoutMs:s,version:1})}});yield this.engine.sendDataPacket(o,$.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,ve.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 o=s.isMuted||((r=(i=s.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&r!==void 0?r:!1);o!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Y(s)),{mutedOnServer:o})),this.engine.client.sendMuteTrack(t.sid,o))}}),!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,new Error("Agent disconnected")),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new et),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const r=i.track;r&&(e instanceof MediaStreamTrack?(It(r)||Kt(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[o]=s;return o.source===e});if(r)return r[1];yield Ne(20)}})}}class hl extends kt{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(D.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 Mi({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Mo({participantSid:"",trackSids:[this.trackSid]})]});this.emit(D.UpdateSubscription,r),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?kt.SubscriptionStatus.Unsubscribed:super.isSubscribed?kt.SubscriptionStatus.Subscribed:kt.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?kt.PermissionStatus.Allowed:kt.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||(fs(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&fs(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var e;return(e=this.requestedMaxQuality)!==null&&e!==void 0?e:Ge.HIGH}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,r=this.track;r!==e&&(r&&(r.off(D.VideoDimensionsChanged,this.handleVideoDimensionsChange),r.off(D.VisibilityChanged,this.handleVisibilityChange),r.off(D.Ended,this.handleEnded),r.detach(),r.stopMonitor(),this.emit(D.Unsubscribed,r)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(D.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(D.VisibilityChanged,this.handleVisibilityChange),e.on(D.Ended,this.handleEnded),this.emit(D.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(D.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?D.Muted:D.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(D.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(D.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 fs(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new Wo({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===E.Kind.Video){let t=this.requestedVideoDimensions;if(this.videoDimensionsAdaptiveStream!==void 0)if(t)od(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=Lf(this.trackInfo,this.requestedMaxQuality);i&&od(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:Ge.HIGH})),e.quality=Ge.HIGH)}this.emit(D.UpdateSettings,e)}}class ei extends Bs{static fromParticipantInfo(e,t,i){return new ei(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,o,a){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:fn.STANDARD;super(t,i||"",r,s,o,a,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(D.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),Y(e)),{settings:t})),this.signalClient.sendUpdateTrackSettings(t)}),e.on(D.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(D.SubscriptionPermissionChanged,t=>{this.emit(x.TrackSubscriptionPermissionChanged,e,t)}),e.on(D.SubscriptionStatusChanged,t=>{this.emit(x.TrackSubscriptionStatusChanged,e,t)}),e.on(D.Subscribed,t=>{this.emit(x.TrackSubscribed,t,e)}),e.on(D.Unsubscribed,t=>{this.emit(x.TrackUnsubscribed,t,e)}),e.on(D.SubscriptionFailed,t=>{this.emit(x.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]:E.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]:E.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,i,r,s,o){let a=this.getTrackPublicationBySid(t);if(a||t.startsWith("TR")||this.trackPublications.forEach(l=>{!a&&e.kind===l.kind.toString()&&(a=l)}),!a){if(o===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(x.TrackSubscriptionFailed,t);return}o===void 0&&(o=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,r,s,o-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),Y(a))),this.emit(x.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let d;return c?d=new cl(e,t,r,s):d=new ol(e,t,r,this.audioContext,this.audioOutput),d.source=a.source,d.isMuted=a.isMuted,d.setMediaStream(i),d.start(),a.setTrack(d),this.volumeMap.has(a.source)&&Yi(d)&&ut(d)&&d.setVolume(this.volumeMap.get(a.source)),a}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,o;let a=this.getTrackPublicationBySid(r.sid);if(a)a.updateInfo(r);else{const c=E.kindFromProto(r.type);if(!c)return;a=new hl(c,r,(s=this.signalClient.connectOptions)===null||s===void 0?void 0:s.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(o=this.loggerOptions)===null||o===void 0?void 0:o.loggerName}),a.updateInfo(r),i.set(r.sid,a);const d=Array.from(this.trackPublications.values()).find(l=>l.source===(a==null?void 0:a.source));d&&a.source!==E.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(a.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Y(d),newTrack:Y(a)})),this.addTrackPublication(a)}t.set(r.sid,a)}),this.trackPublications.forEach(r=>{t.has(r.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Y(r))),this.unpublishTrack(r.trackSid,!0))}),i.forEach(r=>{this.emit(x.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 E.Kind.Audio:this.audioTrackPublications.delete(e);break;case E.Kind.Video:this.videoTrackPublications.delete(e);break}t&&this.emit(x.TrackUnpublished,i)}setAudioOutput(e){return f(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var r;ut(i.track)&&Yi(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 re;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})(re||(re={}));const Tg=4*1e3;class wn extends yt.EventEmitter{get hasE2EESetup(){return this.e2eeManager!==void 0}constructor(e){var t,i,r,s,o;if(super(),t=this,this.state=re.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=z,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(a,c,d)=>f(this,void 0,void 0,function*(){var l;if(!ud())throw bt()?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===re.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(re.Connecting),((l=this.regionUrlProvider)===null||l===void 0?void 0:l.getServerUrl().toString())!==Cd(a)&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),kn(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new ne(a,c):this.regionUrlProvider.updateToken(c),this.regionUrlProvider.fetchRegionSettings().then(v=>{var g;(g=this.regionUrlProvider)===null||g===void 0||g.setServerReportedRegions(v)}).catch(v=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:v}))}));const h=(v,g,S)=>f(this,void 0,void 0,function*(){var k,R;this.abortController&&this.abortController.abort();const P=new AbortController;this.abortController=P,u==null||u();try{if(yield Tn.getInstance().getBackOffPromise(a),P.signal.aborted)throw K.cancelled("Connection attempt aborted");yield this.attemptConnection(S??a,c,d,P),this.abortController=void 0,v()}catch(y){if(this.regionUrlProvider&&y instanceof K&&y.reason!==ue.Cancelled&&y.reason!==ue.NotAllowed){let b=null;try{this.log.debug("Fetching next region"),b=yield this.regionUrlProvider.getNextBestRegionUrl((k=this.abortController)===null||k===void 0?void 0:k.signal)}catch(T){if(T instanceof K&&(T.status===401||T.reason===ue.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),g(T);return}}[ue.InternalError,ue.ServerUnreachable,ue.Timeout].includes(y.reason)&&(this.log.debug("Adding failed connection attempt to back off"),Tn.getInstance().addFailedConnectionAttempt(a)),b&&!(!((R=this.abortController)===null||R===void 0)&&R.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(y.message,". Retrying with another region: ").concat(b),this.logContext),this.recreateEngine(),yield h(v,g,b)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Td(y)),g(y))}else{let b=Xe.UNKNOWN_REASON;y instanceof K&&(b=Td(y)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,b),g(y)}}}),m=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new et((v,g)=>{h(v,g,m)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,c,d,l,u,h)=>f(this,void 0,void 0,function*(){var m,v,g;const S=yield d.join(a,c,{autoSubscribe:l.autoSubscribe,adaptiveStream:typeof u.adaptiveStream=="object"?!0:u.adaptiveStream,maxRetries:l.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:l.websocketTimeout},h.signal,!u.singlePeerConnection);let k=S.serverInfo;if(k||(k={version:S.serverVersion,region:S.serverRegion}),this.serverInfo=k,this.log.debug("connected to Livekit Server ".concat(Object.entries(k).map(R=>{let[P,y]=R;return"".concat(P,": ").concat(y)}).join(", ")),{room:(m=S.room)===null||m===void 0?void 0:m.name,roomSid:(v=S.room)===null||v===void 0?void 0:v.sid,identity:(g=S.participant)===null||g===void 0?void 0:g.identity}),!k.version)throw new Xc("unknown server version");return k.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),u.dynacast=!1),S}),this.applyJoinResponse=a=>{const c=a.participant;if(this.localParticipant.sid=c.sid,this.localParticipant.identity=c.identity,this.localParticipant.setEnabledPublishCodecs(a.enabledPublishCodecs),this.e2eeManager)try{this.e2eeManager.setSifTrailer(a.sifTrailer)}catch(d){this.log.error(d instanceof Error?d.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:d}))}this.handleParticipantUpdates([c,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,c,d,l)=>f(this,void 0,void 0,function*(){var u,h;this.state===re.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(),!((h=this.regionUrlProvider)===null||h===void 0)&&h.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},_s),d),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const m=yield this.connectSignal(a,c,this.engine,this.connOptions,this.options,l);this.applyJoinResponse(m),this.setupLocalParticipantEvents(),this.emit(M.SignalConnected)}catch(m){yield this.engine.close(),this.recreateEngine();const v=l.signal.aborted?K.cancelled("Signal connection aborted"):K.serverUnreachable("could not establish signal connection");throw m instanceof Error&&(v.message="".concat(v.message,": ").concat(m.message)),m instanceof K&&(v.reason=m.reason,v.status=m.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:m})),v}if(l.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),K.cancelled("Connection attempt aborted");try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,l)}catch(m){throw yield this.engine.close(),this.recreateEngine(),m}ze()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),ze()&&window.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(re.Connected),this.emit(M.Connected),Tn.getInstance().resetFailedConnectionAttempts(a),this.registerConnectionReconcile(),this.regionUrlProvider&&this.regionUrlProvider.notifyConnected()}),this.disconnect=function(){for(var a=arguments.length,c=new Array(a),d=0;d<a;d++)c[d]=arguments[d];return f(t,[...c],void 0,function(){var l=this;let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var h,m,v;const g=yield l.disconnectLock.lock();try{if(l.state===re.Disconnected){l.log.debug("already disconnected",l.logContext);return}if(l.log.info("disconnect from room",Object.assign({},l.logContext)),l.state===re.Connecting||l.state===re.Reconnecting||l.isResuming){const S="Abort connection attempt due to user initiated disconnect";l.log.warn(S,l.logContext),(h=l.abortController)===null||h===void 0||h.abort(S),(v=(m=l.connectFuture)===null||m===void 0?void 0:m.reject)===null||v===void 0||v.call(m,K.cancelled("Client initiated disconnect")),l.connectFuture=void 0}l.engine&&(l.engine.client.isDisconnected||(yield l.engine.client.sendLeave()),yield l.engine.close()),l.handleDisconnect(u,Xe.CLIENT_INITIATED),l.engine=void 0}finally{g()}})()})},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=[],c=Ve();if(c&&c.os==="iOS"){const d="livekit-dummy-audio-el";let l=document.getElementById(d);if(!l){l=document.createElement("audio"),l.id=d,l.autoplay=!0,l.hidden=!0;const u=$i();u.enabled=!0;const h=new MediaStream([u]);l.srcObject=h,document.addEventListener("visibilitychange",()=>{l&&(l.srcObject=document.hidden?null:h,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(l),this.once(M.Disconnected,()=>{l==null||l.remove(),l=null})}a.push(l)}this.remoteParticipants.forEach(d=>{d.audioTrackPublications.forEach(l=>{l.track&&l.track.attachedElements.forEach(u=>{a.push(u)})})});try{yield Promise.all([this.acquireAudioContext(),...a.map(d=>(d.muted=!1,d.play()))]),this.handleAudioPlaybackStarted()}catch(d){throw this.handleAudioPlaybackFailed(d),d}}),this.startVideo=()=>f(this,void 0,void 0,function*(){const a=[];for(const c of this.remoteParticipants.values())c.videoTrackPublications.forEach(d=>{var l;(l=d.track)===null||l===void 0||l.attachedElements.forEach(u=>{a.includes(u)||a.push(u)})});yield Promise.all(a.map(c=>c.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(c=>{c.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(re.Reconnecting)&&this.emit(M.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(c){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:c}))}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(re.Connected),this.emit(M.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(c=>{var d;if(c.identity===this.localParticipant.identity){this.localParticipant.updateInfo(c);return}c.identity===""&&(c.identity=(d=this.sidToIdentity.get(c.sid))!==null&&d!==void 0?d:"");let l=this.remoteParticipants.get(c.identity);c.state===mn.DISCONNECTED?this.handleParticipantDisconnected(c.identity,l):l=this.getOrCreateParticipant(c.identity,c)})},this.handleActiveSpeakersUpdate=a=>{const c=[],d={};a.forEach(l=>{if(d[l.sid]=!0,l.sid===this.localParticipant.sid)this.localParticipant.audioLevel=l.level,this.localParticipant.setIsSpeaking(!0),c.push(this.localParticipant);else{const u=this.getRemoteParticipantBySid(l.sid);u&&(u.audioLevel=l.level,u.setIsSpeaking(!0),c.push(u))}}),d[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(l=>{d[l.sid]||(l.audioLevel=0,l.setIsSpeaking(!1))}),this.activeSpeakers=c,this.emitWhenConnected(M.ActiveSpeakersChanged,c)},this.handleSpeakersChanged=a=>{const c=new Map;this.activeSpeakers.forEach(l=>{const u=this.remoteParticipants.get(l.identity);u&&u.sid!==l.sid||c.set(l.sid,l)}),a.forEach(l=>{let u=this.getRemoteParticipantBySid(l.sid);l.sid===this.localParticipant.sid&&(u=this.localParticipant),u&&(u.audioLevel=l.level,u.setIsSpeaking(l.active),l.active?c.set(l.sid,u):c.delete(l.sid))});const d=Array.from(c.values());d.sort((l,u)=>u.audioLevel-l.audioLevel),this.activeSpeakers=d,this.emitWhenConnected(M.ActiveSpeakersChanged,d)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(c=>{const d=this.getRemoteParticipantBySid(c.participantSid);if(!d)return;const l=d.getTrackPublicationBySid(c.trackSid);if(!l||!l.track)return;const u=E.streamStateFromProto(c.state);l.track.setStreamState(u),u!==l.track.streamState&&(d.emit(x.TrackStreamStateChanged,l,l.track.streamState),this.emitWhenConnected(M.TrackStreamStateChanged,l,l.track.streamState,d))})},this.handleSubscriptionPermissionUpdate=a=>{const c=this.getRemoteParticipantBySid(a.participantSid);if(!c)return;const d=c.getTrackPublicationBySid(a.trackSid);d&&d.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const c=Array.from(this.remoteParticipants.values()).find(l=>l.trackPublications.has(a.trackSid));if(!c)return;const d=c.getTrackPublicationBySid(a.trackSid);d&&d.setSubscriptionError(a.err)},this.handleDataPacket=(a,c)=>{const d=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(d,a.value.value,a.kind,c);else if(a.value.case==="transcription")this.handleTranscription(d,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(d,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(d,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,d);else if(a.value.case==="streamHeader"||a.value.case==="streamChunk"||a.value.case==="streamTrailer")this.handleDataStream(a,c);else if(a.value.case==="rpcRequest"){const l=a.value.value;this.handleIncomingRpcRequest(a.participantIdentity,l.id,l.method,l.payload,l.responseTimeoutMs,l.version)}},this.handleUserPacket=(a,c,d,l)=>{this.emit(M.DataReceived,c.payload,a,d,c.topic,l),a==null||a.emit(x.DataReceived,c.payload,d,l)},this.handleSipDtmf=(a,c)=>{this.emit(M.SipDTMFReceived,c,a),a==null||a.emit(x.SipDTMFReceived,c)},this.handleTranscription=(a,c)=>{const d=c.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(c.transcribedParticipantIdentity),l=d==null?void 0:d.trackPublications.get(c.trackId),u=Yf(c,this.transcriptionReceivedTimes);l==null||l.emit(D.TranscriptionReceived,u),d==null||d.emit(x.TranscriptionReceived,u,l),this.emit(M.TranscriptionReceived,u,d,l)},this.handleChatMessage=(a,c)=>{const d=Xf(c);this.emit(M.ChatMessage,d,a)},this.handleMetrics=(a,c)=>{this.emit(M.MetricsReceived,a,c)},this.handleDataStream=(a,c)=>{this.incomingDataStreamManager.handleDataStreamPacket(a,c)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(M.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(M.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(M.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(M.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>f(this,void 0,void 0,function*(){var a;((a=Ve())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(M.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const c=this.roomInfo;this.roomInfo=a,c&&c.metadata!==a.metadata&&this.emitWhenConnected(M.RoomMetadataChanged,a.metadata),(c==null?void 0:c.activeRecording)!==a.activeRecording&&this.emitWhenConnected(M.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(c=>{if(c.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(c.quality);return}const d=this.getRemoteParticipantBySid(c.participantSid);d&&d.setConnectionQuality(c.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(M.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(M.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(M.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(M.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(M.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var c;(c=a==null?void 0:a.onPublish)===null||c===void 0||c.call(a,this)},this.onLocalTrackPublished=a=>f(this,void 0,void 0,function*(){var c,d,l,u,h,m;(c=a.track)===null||c===void 0||c.on(D.TrackProcessorUpdate,this.onTrackProcessorUpdate),(d=a.track)===null||d===void 0||d.on(D.Restarted,this.onLocalTrackRestarted),(h=(u=(l=a.track)===null||l===void 0?void 0:l.getProcessor())===null||u===void 0?void 0:u.onPublish)===null||h===void 0||h.call(u,this),this.emit(M.LocalTrackPublished,a,this.localParticipant),It(a.track)&&(yield a.track.checkForSilence())&&this.emit(M.LocalAudioSilenceDetected,a);const v=yield(m=a.track)===null||m===void 0?void 0:m.getDeviceId(!1),g=os(a.source);g&&v&&v!==this.localParticipant.activeDeviceMap.get(g)&&(this.localParticipant.activeDeviceMap.set(g,v),this.emit(M.ActiveDeviceChanged,g,v))}),this.onLocalTrackUnpublished=a=>{var c,d;(c=a.track)===null||c===void 0||c.off(D.TrackProcessorUpdate,this.onTrackProcessorUpdate),(d=a.track)===null||d===void 0||d.off(D.Restarted,this.onLocalTrackRestarted),this.emit(M.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>f(this,void 0,void 0,function*(){const c=yield a.getDeviceId(!1),d=os(a.source);d&&c&&c!==this.localParticipant.activeDeviceMap.get(d)&&(this.log.debug("local track restarted, setting ".concat(d," ").concat(c," active"),this.logContext),this.localParticipant.activeDeviceMap.set(d,c),this.emit(M.ActiveDeviceChanged,d,c))}),this.onLocalConnectionQualityChanged=a=>{this.emit(M.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,c)=>{this.emit(M.MediaDevicesError,a,c)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(M.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(M.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},Fp),e),this.log=ot((i=this.options.loggerName)!==null&&i!==void 0?i:$e.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Kd),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Wd),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},Up),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new mg,this.outgoingDataStreamManager=new gg(this.engine,this.log),this.disconnectLock=new Le,this.localParticipant=new ul("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),(this.options.e2ee||this.options.encryption)&&this.setupE2EE(),this.engine.e2eeManager=this.e2eeManager,this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",sn(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",sn(this.options.audioCaptureDefaults.deviceId)),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&this.switchActiveDevice("audiooutput",sn(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),ze()){const a=new AbortController;(o=(s=navigator.mediaDevices)===null||s===void 0?void 0:s.addEventListener)===null||o===void 0||o.call(s,"devicechange",this.handleDeviceChange,{signal:a.signal}),wn.cleanupRegistry&&wn.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;const t=!!this.options.encryption,i=this.options.encryption||this.options.e2ee;i&&("e2eeManager"in i?(this.e2eeManager=i.e2eeManager,this.e2eeManager.isDataChannelEncryptionEnabled=t):this.e2eeManager=new kp(i,t),this.e2eeManager.on(Ot.ParticipantEncryptionStatusChanged,(r,s)=>{Sd(s)&&(this.isE2EEEnabled=r),this.emit(M.ParticipantEncryptionStatusChanged,r,s)}),this.e2eeManager.on(Ot.EncryptionError,(r,s)=>{const o=s?this.getParticipantByIdentity(s):void 0;this.emit(M.EncryptionError,r,o)}),(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 this.state===re.Disconnected?Fe.resolve(""):this.roomInfo&&this.roomInfo.sid!==""?Fe.resolve(this.roomInfo.sid):new Fe((e,t)=>{const i=r=>{r.sid!==""&&(this.engine.off(A.RoomUpdate,i),e(r.sid))};this.engine.on(A.RoomUpdate,i),this.once(M.Disconnected,()=>{this.engine.off(A.RoomUpdate,i),t(new Te("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 dg(this.options),this.engine.e2eeManager=this.e2eeManager,this.engine.on(A.ParticipantUpdate,this.handleParticipantUpdates).on(A.RoomUpdate,this.handleRoomUpdate).on(A.SpeakersChanged,this.handleSpeakersChanged).on(A.StreamStateChanged,this.handleStreamStateUpdate).on(A.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(A.SubscriptionError,this.handleSubscriptionError).on(A.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(A.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(A.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(A.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(A.DataPacketReceived,this.handleDataPacket).on(A.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(re.SignalReconnecting)&&this.emit(M.SignalReconnecting)}).on(A.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(re.Connected)&&this.emit(M.Reconnected)}).on(A.SignalResumed,()=>{this.bufferedEvents=[],(this.state===re.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(A.Restarting,this.handleRestarting).on(A.SignalRestarted,this.handleSignalRestarted).on(A.Offline,()=>{this.setAndEmitConnectionState(re.Reconnecting)&&this.emit(M.Reconnecting)}).on(A.DCBufferStatusChanged,(e,t)=>{this.emit(M.DCBufferStatusChanged,e,t)}).on(A.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(x.LocalTrackSubscribed,t),this.emitWhenConnected(M.LocalTrackSubscribed,t,this.localParticipant)}).on(A.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(M.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 De.getInstance().getDevices(e,t)}prepareConnection(e,t){return f(this,void 0,void 0,function*(){if(this.state===re.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(kn(new URL(e))&&t){this.regionUrlProvider=new ne(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===re.Disconnected&&(this.regionUrl=i,yield fetch($n(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch($n(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=()=>f(this,void 0,void 0,function*(){}),r;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":r=new vt({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":r=new vt({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":r=new vt({scenario:{case:"serverLeave",value:!0}});break;case"migration":r=new vt({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 vt({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 vt({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 vt({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 Oi({reason:Xe.CLIENT_INITIATED,action:gn.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");r=new vt({scenario:{case:"subscriberBandwidth",value:an(t)}});break;case"leave-full-reconnect":r=new vt({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 o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return(function*(){var a,c,d,l,u,h,m;let v=!0,g=!1;const S=o?{exact:r}:r;if(i==="audioinput"){g=s.localParticipant.audioTrackPublications.size===0;const k=(a=s.getActiveDevice(i))!==null&&a!==void 0?a:s.options.audioCaptureDefaults.deviceId;s.options.audioCaptureDefaults.deviceId=S;const R=Array.from(s.localParticipant.audioTrackPublications.values()).filter(y=>y.source===E.Source.Microphone);try{v=(yield Promise.all(R.map(y=>{var b;return(b=y.audioTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(y=>y===!0)}catch(y){throw s.options.audioCaptureDefaults.deviceId=k,y}const P=R.some(y=>{var b,T;return(T=(b=y.track)===null||b===void 0?void 0:b.isMuted)!==null&&T!==void 0?T:!1});v&&P&&(g=!0)}else if(i==="videoinput"){g=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(y=>y.source===E.Source.Camera);try{v=(yield Promise.all(R.map(y=>{var b;return(b=y.videoTrack)===null||b===void 0?void 0:b.setDeviceId(S)}))).every(y=>y===!0)}catch(y){throw s.options.videoCaptureDefaults.deviceId=k,y}const P=R.some(y=>{var b,T;return(T=(b=y.track)===null||b===void 0?void 0:b.isMuted)!==null&&T!==void 0?T:!1});v&&P&&(g=!0)}else if(i==="audiooutput"){if(g=!0,!zi()&&!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 De.getInstance().normalizeDeviceId("audiooutput",r))!==null&&d!==void 0?d:""),(l=(m=s.options).audioOutput)!==null&&l!==void 0||(m.audioOutput={});const k=(u=s.getActiveDevice(i))!==null&&u!==void 0?u: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 g&&(s.localParticipant.activeDeviceMap.set(i,r),s.emit(M.ActiveDeviceChanged,i,r)),v})()})}setupLocalParticipantEvents(){this.localParticipant.on(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(x.AttributesChanged,this.onLocalAttributesChanged).on(x.TrackMuted,this.onLocalTrackMuted).on(x.TrackUnmuted,this.onLocalTrackUnmuted).on(x.LocalTrackPublished,this.onLocalTrackPublished).on(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(x.MediaDevicesError,this.onMediaDevicesError).on(x.AudioStreamAcquired,this.startAudio).on(x.ChatMessage,this.onLocalChatMessageSent).on(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,t,i){if(this.state===re.Connecting||this.state===re.Reconnecting){const u=()=>{this.log.debug("deferring on track for later",{mediaTrackId:e.id,mediaStreamId:t.id,tracksInStream:t.getTracks().map(m=>m.id)}),this.onTrackAdded(e,t,i),h()},h=()=>{this.off(M.Reconnected,u),this.off(M.Connected,u),this.off(M.Disconnected,h)};this.once(M.Reconnected,u),this.once(M.Connected,u),this.once(M.Disconnected,h);return}if(this.state===re.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=Ff(t.id),s=r[0];let o=r[1],a=e.id;if(o&&o.startsWith("TR")&&(a=o),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(u=>u.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}if(!a.startsWith("TR")){const u=this.engine.getTrackIdForReceiver(i);if(!u){this.log.error("Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ".concat(s),this.logContext);return}a=u}a.startsWith("TR")||this.log.warn("Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ".concat(s,", streamId: ").concat(o,", trackId: ").concat(a),Object.assign(Object.assign({},this.logContext),{rpID:s,streamId:o,trackId:a}));let d;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?d=this.options.adaptiveStream:d={});const l=c.addSubscribedMediaTrack(e,a,t,i,d);l!=null&&l.isEncrypted&&!this.e2eeManager&&this.emit(M.EncryptionError,new Error("Encrypted ".concat(l.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,r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearControllers(),this.state!==re.Disconnected){this.regionUrl=void 0,this.regionUrlProvider&&this.regionUrlProvider.notifyDisconnected();try{this.remoteParticipants.forEach(s=>{s.trackPublications.forEach(o=>{s.unpublishTrack(o.trackSid)})}),this.localParticipant.trackPublications.forEach(s=>{var o,a,c;s.track&&this.localParticipant.unpublishTrack(s.track,e),e?((o=s.track)===null||o===void 0||o.detach(),(a=s.track)===null||a===void 0||a.stop()):(c=s.track)===null||c===void 0||c.stopMonitor()}),this.localParticipant.off(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(x.AttributesChanged,this.onLocalAttributesChanged).off(x.TrackMuted,this.onLocalTrackMuted).off(x.TrackUnmuted,this.onLocalTrackUnmuted).off(x.LocalTrackPublished,this.onLocalTrackPublished).off(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(x.MediaDevicesError,this.onMediaDevicesError).off(x.AudioStreamAcquired,this.startAudio).off(x.ChatMessage,this.onLocalChatMessageSent).off(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),ze()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=(i=navigator.mediaDevices)===null||i===void 0?void 0:i.removeEventListener)===null||r===void 0||r.call(i,"devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(re.Disconnected),this.emit(M.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(M.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleIncomingRpcRequest(e,t,i,r,s,o){return f(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),o!==1){yield this.engine.publishRpcResponse(e,t,null,ve.builtIn("UNSUPPORTED_VERSION"));return}const a=this.rpcHandlers.get(i);if(!a){yield this.engine.publishRpcResponse(e,t,null,ve.builtIn("UNSUPPORTED_METHOD"));return}let c=null,d=null;try{const l=yield a({requestId:t,callerIdentity:e,payload:r,responseTimeout:s});Ps(l)>Jd?(c=ve.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),this.log.warn("RPC Response payload too large for ".concat(i))):d=l}catch(l){l instanceof ve?c=l:(this.log.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),l),c=ve.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=De.getInstance().previousDevices,s=yield De.getInstance().getDevices(void 0,!1),o=Ve();if((o==null?void 0:o.name)==="Chrome"&&o.os!=="iOS")for(let c of s){const d=r.find(l=>l.deviceId===c.deviceId);d&&d.label!==""&&d.kind===c.kind&&d.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(M.ActiveDeviceChanged,c.kind,c.deviceId)}const a=["audiooutput","audioinput","videoinput"];for(let c of a){const d=Mf(c),l=this.localParticipant.getTrackPublication(d);if(l&&(!((e=l.track)===null||e===void 0)&&e.isUserProvided))continue;const u=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)&&u.length>0&&((i=u[0])===null||i===void 0?void 0:i.deviceId)!==h){yield this.switchActiveDevice(c,u[0].deviceId);continue}c==="audioinput"&&!Gn()||c==="videoinput"||u.length>0&&!u.find(m=>m.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!Gn())&&(yield this.switchActiveDevice(c,u[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=as())!==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(),Ne(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(M.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let r;return t?r=ei.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):r=new ei(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(M.ParticipantConnected,i),i.on(x.TrackPublished,r=>{this.emitWhenConnected(M.TrackPublished,r,i)}).on(x.TrackSubscribed,(r,s)=>{r.kind===E.Kind.Audio?(r.on(D.AudioPlaybackStarted,this.handleAudioPlaybackStarted),r.on(D.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):r.kind===E.Kind.Video&&(r.on(D.VideoPlaybackFailed,this.handleVideoPlaybackFailed),r.on(D.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(M.TrackSubscribed,r,s,i)}).on(x.TrackUnpublished,r=>{this.emit(M.TrackUnpublished,r,i)}).on(x.TrackUnsubscribed,(r,s)=>{this.emit(M.TrackUnsubscribed,r,s,i)}).on(x.TrackMuted,r=>{this.emitWhenConnected(M.TrackMuted,r,i)}).on(x.TrackUnmuted,r=>{this.emitWhenConnected(M.TrackUnmuted,r,i)}).on(x.ParticipantMetadataChanged,r=>{this.emitWhenConnected(M.ParticipantMetadataChanged,r,i)}).on(x.ParticipantNameChanged,r=>{this.emitWhenConnected(M.ParticipantNameChanged,r,i)}).on(x.AttributesChanged,r=>{this.emitWhenConnected(M.ParticipantAttributesChanged,r,i)}).on(x.ConnectionQualityChanged,r=>{this.emitWhenConnected(M.ConnectionQualityChanged,r,i)}).on(x.ParticipantPermissionsChanged,r=>{this.emitWhenConnected(M.ParticipantPermissionsChanged,r,i)}).on(x.TrackSubscriptionStatusChanged,(r,s)=>{this.emitWhenConnected(M.TrackSubscriptionStatusChanged,r,s,i)}).on(x.TrackSubscriptionFailed,(r,s)=>{this.emit(M.TrackSubscriptionFailed,r,i,s)}).on(x.TrackSubscriptionPermissionChanged,(r,s)=>{this.emitWhenConnected(M.TrackSubscriptionPermissionChanged,r,s,i)}).on(x.Active,()=>{this.emitWhenConnected(M.ParticipantActive,i),i.kind===fn.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&&Zf(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=Oe.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,transportsConnectedOrConnecting:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Xe.STATE_MISMATCH))):e=0},Tg)}clearConnectionReconcile(){this.connectionReconcileInterval&&Oe.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(M.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===re.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===re.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return f(this,void 0,void 0,function*(){var t,i,r,s;const o=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),a=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new Si({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:pe.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new Qt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(M.SignalConnected),this.emit(M.Connected),this.setAndEmitConnectionState(re.Connected),o.video){const c=new tr(E.Kind.Video,new pn({source:Re.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ye.AUDIO,name:"video-dummy"}),new En(o.useRealTracks&&(!((t=window.navigator.mediaDevices)===null||t===void 0)&&t.getUserMedia)?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:ms(160*((i=a.aspectRatios[0])!==null&&i!==void 0?i:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(x.LocalTrackPublished,c)}if(o.audio){const c=new tr(E.Kind.Audio,new pn({source:Re.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ye.AUDIO}),new Cn(o.useRealTracks&&(!((r=navigator.mediaDevices)===null||r===void 0)&&r.getUserMedia)?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:$i(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(x.LocalTrackPublished,c)}for(let c=0;c<a.count-1;c+=1){let d=new Qt({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(c),state:mn.ACTIVE,tracks:[],joinedAt:pe.parse(Date.now())});const l=this.getOrCreateParticipant(d.identity,d);if(a.video){const u=ms(160*((s=a.aspectRatios[c%a.aspectRatios.length])!==null&&s!==void 0?s:1),160,!1,!0),h=new pn({source:Re.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Ye.AUDIO});l.addSubscribedMediaTrack(u,h.sid,new MediaStream([u]),new RTCRtpReceiver),d.tracks=[...d.tracks,h]}if(a.audio){const u=$i(),h=new pn({source:Re.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Ye.AUDIO});l.addSubscribedMediaTrack(u,h.sid,new MediaStream([u]),new RTCRtpReceiver),d.tracks=[...d.tracks,h]}l.updateInfo(d)}})}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!==M.ActiveSpeakersChanged&&e!==M.TranscriptionReceived){const s=ml(i).filter(o=>o!==void 0);(e===M.TrackSubscribed||e===M.TrackUnsubscribed)&&this.log.trace("subscribe trace: ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s})),this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:s}))}return super.emit(e,...i)}}wn.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function ml(n){return n.map(e=>{if(e)return Array.isArray(e)?ml(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}class Sg{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 Cg=Object.freeze({__proto__:null,Convert:Sg});const fl=65535,pl=4294967295;class Ht{static u16(e){return new Ht(e,fl)}static u32(e){return new Ht(e,pl)}constructor(e,t){if(this.value=e,e<0)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0");if(t>Number.MAX_SAFE_INTEGER)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.");this.maxSize=t,this.clamp()}clamp(){for(;this.value>this.maxSize;)this.value-=this.maxSize+1;for(;this.value<0;)this.value+=this.maxSize+1}clone(){return new Ht(this.value,this.maxSize)}update(e){this.value=e(this.value),this.clamp()}increment(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update(t=>t+e)}decrement(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update(t=>t-e)}getThenIncrement(){const e=this.value;return this.increment(),new Ht(e,this.maxSize)}isBefore(e){const t=this.value>>>0,r=(e.value>>>0)-t>>>0;return r!==0&&r<this.maxSize+1}}class ti{static fromRtpTicks(e){return new ti(e,9e4)}static rtpRandom(){const e=Math.round(Math.random()*pl);return ti.fromRtpTicks(e)}constructor(e,t){this.timestamp=Ht.u32(e),this.rateInHz=t}asTicks(){return this.timestamp.value}clone(){return new ti(this.timestamp.value,this.rateInHz)}wrappingAdd(e){this.timestamp.increment(e)}isBefore(e){return this.timestamp.isBefore(e.timestamp)}}function js(n){if(n instanceof DataView)return n;if(n instanceof ArrayBuffer)return new DataView(n);if(n instanceof Uint8Array)return new DataView(n.buffer,n.byteOffset,n.byteLength);throw new Error("Error coercing ".concat(n," to DataView - input was not DataView, ArrayBuffer, or Uint8Array."))}const Tt=1,we=2,gl=4,Eg=8,vl=0,yl=12,bl=5,wg=7,kl=3,Rg=3,Tl=2,Sl=1,Cl=0,El=3,_g=2,wl=2,Pg=1,Ig=0;var At;(function(n){n[n.TooShort=0]="TooShort",n[n.HeaderOverrun=1]="HeaderOverrun",n[n.MissingExtWords=2]="MissingExtWords",n[n.UnsupportedVersion=3]="UnsupportedVersion",n[n.InvalidHandle=4]="InvalidHandle",n[n.MalformedExt=5]="MalformedExt"})(At||(At={}));class qe extends Xt{constructor(e,t,i){super(19,e,i),this.name="DataTrackDeserializeError",this.reason=t,this.reasonName=At[t]}static tooShort(){return new qe("Too short to contain a valid header",At.TooShort)}static headerOverrun(){return new qe("Header exceeds total packet length",At.HeaderOverrun)}static missingExtWords(){return new qe("Extension word indicator is missing",At.MissingExtWords)}static unsupportedVersion(e){return new qe("Unsupported version ".concat(e),At.UnsupportedVersion)}static invalidHandle(e){return new qe("invalid track handle: ".concat(e.message),At.InvalidHandle,{cause:e})}static malformedExt(e){return new qe("Extension with tag ".concat(e," is malformed"),At.MalformedExt)}}var ni;(function(n){n[n.TooSmallForHeader=0]="TooSmallForHeader",n[n.TooSmallForPayload=1]="TooSmallForPayload"})(ni||(ni={}));class ii extends Xt{constructor(e,t,i){super(19,e,i),this.name="DataTrackSerializeError",this.reason=t,this.reasonName=ni[t]}static tooSmallForHeader(){return new ii("Buffer cannot fit header",ni.TooSmallForHeader)}static tooSmallForPayload(){return new ii("Buffer cannot fit payload",ni.TooSmallForPayload)}}class nr{toBinary(){const e=this.toBinaryLengthBytes(),t=new ArrayBuffer(e),i=new DataView(t),r=this.toBinaryInto(i);if(e!==r)throw new Error("".concat(this.constructor.name,".toBinary: written bytes (").concat(r," bytes) not equal to allocated array buffer length (").concat(e," bytes)."));return new Uint8Array(t)}}var Rn;(function(n){n[n.UserTimestamp=2]="UserTimestamp",n[n.E2ee=1]="E2ee"})(Rn||(Rn={}));class Rl extends nr{}class St extends Rl{constructor(e){super(),this.timestamp=e}toBinaryLengthBytes(){return we+we+St.lengthBytes}toBinaryInto(e){let t=0;e.setUint16(t,St.tag),t+=we;const i=St.lengthBytes-1;e.setUint16(t,i),t+=we,e.setBigUint64(t,this.timestamp),t+=Eg;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackUserTimestampExtension.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return t}toJSON(){return{tag:St.tag,lengthBytes:St.lengthBytes,timestamp:this.timestamp}}}St.tag=Rn.UserTimestamp,St.lengthBytes=8;class Ct extends Rl{constructor(e,t){super(),this.keyIndex=e,this.iv=t}toBinaryLengthBytes(){return we+we+Ct.lengthBytes}toBinaryInto(e){let t=0;e.setUint16(t,Ct.tag),t+=we;const i=Ct.lengthBytes-1;e.setUint16(t,i),t+=we,e.setUint8(t,this.keyIndex),t+=Tt;for(let s=0;s<this.iv.length;s+=1)e.setUint8(t,this.iv[s]),t+=Tt;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackE2eeExtension.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return t}toJSON(){return{tag:Ct.tag,lengthBytes:Ct.lengthBytes,keyIndex:this.keyIndex,iv:this.iv}}}Ct.tag=Rn.E2ee,Ct.lengthBytes=13;class ri extends nr{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.userTimestamp=e.userTimestamp,this.e2ee=e.e2ee}toBinaryLengthBytes(){let e=0;return this.userTimestamp&&(e+=this.userTimestamp.toBinaryLengthBytes()),this.e2ee&&(e+=this.e2ee.toBinaryLengthBytes()),e}toBinaryInto(e){let t=0;if(this.e2ee){const r=this.e2ee.toBinaryInto(e);t+=r}if(this.userTimestamp){const r=this.userTimestamp.toBinaryInto(new DataView(e.buffer,e.byteOffset+t));t+=r}const i=this.toBinaryLengthBytes();if(t!==i)throw new Error("DataTrackExtensions.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(i," bytes"));return t}static fromBinary(e){const t=js(e);let i,r,s=0;for(;t.byteLength-s>=we+we;){const o=t.getUint16(s);s+=we;const c=t.getUint16(s)+1;if(s+=we,o!==Ig)switch(o){case Rn.UserTimestamp:if(t.byteLength-s<St.lengthBytes)throw qe.malformedExt(o);i=new St(t.getBigUint64(s)),s+=c;break;case Rn.E2ee:if(t.byteLength-s<Ct.lengthBytes)throw qe.malformedExt(o);const d=t.getUint8(s),l=new Uint8Array(12);for(let u=0;u<l.length;u+=1){let h=s;h+=Tt,h+=u*Tt,l[u]=t.getUint8(h)}r=new Ct(d,l),s+=c;break;default:if(t.byteLength-s<c)throw qe.malformedExt(o);s+=c;break}}return[new ri({userTimestamp:i,e2ee:r}),t.byteLength]}toJSON(){var e,t,i,r;return{userTimestamp:(t=(e=this.userTimestamp)===null||e===void 0?void 0:e.toJSON())!==null&&t!==void 0?t:null,e2ee:(r=(i=this.e2ee)===null||i===void 0?void 0:i.toJSON())!==null&&r!==void 0?r:null}}}var cn;(function(n){n[n.Reserved=0]="Reserved",n[n.TooLarge=1]="TooLarge"})(cn||(cn={}));class _n extends Xt{constructor(e,t){super(19,e),this.name="DataTrackHandleError",this.reason=t,this.reasonName=cn[t]}isReason(e){return this.reason===e}static tooLarge(){return new _n("Value too large to be a valid track handle",cn.TooLarge)}static reserved(e){return new _n("0x".concat(e.toString(16)," is a reserved value."),cn.Reserved)}}class Vs{static fromNumber(e){if(e===0)throw _n.reserved(e);if(e>fl)throw _n.tooLarge();return new Vs(e)}constructor(e){this.value=e}}class qs extends nr{constructor(e){var t;super(),this.marker=e.marker,this.trackHandle=e.trackHandle,this.sequence=e.sequence,this.frameNumber=e.frameNumber,this.timestamp=e.timestamp,this.extensions=(t=e.extensions)!==null&&t!==void 0?t:new ri}extensionsMetrics(){const e=this.extensions.toBinaryLengthBytes(),t=Math.ceil(e/4),i=t*4-e;return{lengthBytes:e,lengthWords:t,paddingLengthBytes:i}}toBinaryLengthBytes(){const{lengthBytes:e,paddingLengthBytes:t}=this.extensionsMetrics();let i=yl;return e>0&&(i+=_g+e+t),i}toBinaryInto(e){if(e.byteLength<this.toBinaryLengthBytes())throw ii.tooSmallForHeader();let t=vl<<bl,i;switch(this.marker){case Et.Inter:i=Cl;break;case Et.Final:i=Sl;break;case Et.Start:i=Tl;break;case Et.Single:i=El;break}t|=i<<kl;const{lengthBytes:r,lengthWords:s,paddingLengthBytes:o}=this.extensionsMetrics();r>0&&(t|=1<<wl);let a=0;if(e.setUint8(a,t),a+=Tt,e.setUint8(a,0),a+=Tt,e.setUint16(a,this.trackHandle.value),a+=we,e.setUint16(a,this.sequence.value),a+=we,e.setUint16(a,this.frameNumber.value),a+=we,e.setUint32(a,this.timestamp.asTicks()),a+=gl,r>0){const d=s-1;e.setUint16(a,d),a+=we;const l=this.extensions.toBinaryInto(new DataView(e.buffer,e.byteOffset+a));a+=l;for(let u=0;u<o;u+=1)e.setUint8(a,0),a+=Tt}const c=this.toBinaryLengthBytes();if(a!==c)throw new Error("DataTrackPacketHeader.toBinaryInto: Wrote ".concat(a," bytes but expected length was ").concat(c," bytes"));return c}static fromBinary(e){const t=js(e);if(t.byteLength<yl)throw qe.tooShort();let i=0;const r=t.getUint8(i);i+=Tt;const s=r>>bl&wg;if(s>vl)throw qe.unsupportedVersion(s);let o;switch(r>>kl&Rg){case Tl:o=Et.Start;break;case Sl:o=Et.Final;break;case El:o=Et.Single;break;case Cl:default:o=Et.Inter;break}const a=(r>>wl&Pg)>0;i+=Tt;let c;try{c=Vs.fromNumber(t.getUint16(i))}catch(m){throw m instanceof _n&&(m.isReason(cn.Reserved)||m.isReason(cn.TooLarge))?qe.invalidHandle(m):m}i+=we;const d=Ht.u16(t.getUint16(i));i+=we;const l=Ht.u16(t.getUint16(i));i+=we;const u=ti.fromRtpTicks(t.getUint32(i));i+=gl;let h=new ri;if(a){if(t.byteLength-i<we)throw qe.missingExtWords();let m=t.getUint16(i);i+=we;let g=4*(m+1);if(i+g>t.byteLength)throw qe.headerOverrun();let S=new DataView(t.buffer,t.byteOffset+i,g);const[k,R]=ri.fromBinary(S);h=k,i+=R}return[new qs({marker:o,trackHandle:c,sequence:d,frameNumber:l,timestamp:u,extensions:h}),i]}toJSON(){return{marker:this.marker,trackHandle:this.trackHandle.value,sequence:this.sequence.value,frameNumber:this.frameNumber.value,timestamp:this.timestamp.asTicks(),extensions:this.extensions.toJSON()}}}var Et;(function(n){n[n.Start=0]="Start",n[n.Inter=1]="Inter",n[n.Final=2]="Final",n[n.Single=3]="Single"})(Et||(Et={}));class Ks extends nr{constructor(e,t){super(),this.header=e,this.payload=t}toBinaryLengthBytes(){return this.header.toBinaryLengthBytes()+this.payload.byteLength}toBinaryInto(e){let t=0;const i=this.header.toBinaryInto(e);if(t+=i,e.byteLength-t<this.payload.byteLength)throw ii.tooSmallForPayload();for(let s=0;s<this.payload.length;s+=1)e.setUint8(t,this.payload[s]),t+=Tt;const r=this.toBinaryLengthBytes();if(t!==r)throw new Error("DataTrackPacket.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(r," bytes"));return r}static fromBinary(e){const t=js(e),[i,r]=qs.fromBinary(t),s=t.buffer.slice(t.byteOffset+r,t.byteOffset+t.byteLength);return[new Ks(i,new Uint8Array(s)),t.byteLength]}toJSON(){return{header:this.header.toJSON(),payload:this.payload}}}var _l;(function(n){n[n.MtuTooShort=0]="MtuTooShort"})(_l||(_l={})),ot($e.DataTracks);var Pl;(function(n){n[n.Interrupted=0]="Interrupted",n[n.UnknownFrame=1]="UnknownFrame",n[n.BufferFull=2]="BufferFull",n[n.Incomplete=3]="Incomplete"})(Pl||(Pl={}));var nt;(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"})(nt||(nt={}));class xt extends yt.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=nt.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new wn(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return f(this,void 0,void 0,function*(){if(this.status!==nt.IDLE)throw Error("check is running already");this.setStatus(nt.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!==nt.SKIPPED&&this.setStatus(this.isSuccess()?nt.SUCCESS:nt.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===re.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!==re.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(nt.SKIPPED)}switchProtocol(e){return f(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(M.Reconnecting,()=>{t=!0}),this.room.once(M.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 Ne(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 Mg extends xt{get description(){return"Cloud regions"}perform(){return f(this,void 0,void 0,function*(){const e=new ne(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let s=0;s<3;s++){const o=yield e.getNextBestRegionUrl();if(!o)break;if(i.has(o))continue;i.add(o);const a=yield this.checkCloudRegion(o);this.appendMessage("".concat(a.region," RTT: ").concat(a.rtt,"ms, duration: ").concat(a.duration,"ms")),t.push(a)}t.sort((s,o)=>(s.duration-o.duration)*.5+(s.rtt-o.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"}),o=1e3,c=1e6/o,d="A".repeat(o),l=Date.now();for(let v=0;v<c;v++)yield s.write(d);yield s.close();const u=Date.now(),h=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),m={region:r,rtt:1e4,duration:u-l};return h==null||h.forEach(v=>{v.type==="candidate-pair"&&v.nominated&&(m.rtt=v.currentRoundTripTime*1e3)}),yield this.disconnect(),m})}}const Ws=1e4;class Og extends xt{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/(Ws/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Ws/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 a=t.captureStream(30).getVideoTracks()[0],d=(yield this.room.localParticipant.publishTrack(a,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,l={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},u=setInterval(()=>f(this,void 0,void 0,function*(){const h=yield d.getRTCStatsReport();h==null||h.forEach(m=>{m.type==="outbound-rtp"?(l.packetsSent=m.packetsSent,l.qualityLimitationDurations=m.qualityLimitationDurations,l.bitrateTotal+=m.targetBitrate,l.count++):m.type==="remote-inbound-rtp"&&(l.packetsLost=m.packetsLost,l.rttTotal+=m.roundTripTime,l.jitterTotal+=m.jitter)})}),1e3);return yield new Promise(h=>setTimeout(h,Ws)),clearInterval(u),a.stop(),t.remove(),yield this.disconnect(),l})}}class Dg extends xt{get description(){return"Can publish audio"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield ll();if(yield rd(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,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 o=0;if(s.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="audio"||!a.kind&&a.mediaType==="audio")&&(o=a.packetsSent)}),o===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(o," audio packets"))})}}class Ag extends xt{get description(){return"Can publish video"}perform(){return f(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield dl();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(o=>setTimeout(o,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(o=>{o.type==="outbound-rtp"&&(o.kind==="video"||!o.kind&&o.mediaType==="video")&&(s+=o.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,i.autoplay=!0,i.playsInline=!0,i.setAttribute("playsinline","true"),document.body.appendChild(i),yield new Promise(r=>{i.onplay=()=>{setTimeout(()=>{var s,o,a,c;const d=document.createElement("canvas"),l=e.getSettings(),u=(o=(s=l.width)!==null&&s!==void 0?s:i.videoWidth)!==null&&o!==void 0?o:1280,h=(c=(a=l.height)!==null&&a!==void 0?a:i.videoHeight)!==null&&c!==void 0?c:720;d.width=u,d.height=h;const m=d.getContext("2d");m.drawImage(i,0,0);const g=m.getImageData(0,0,d.width,d.height).data;let S=!0;for(let k=0;k<g.length;k+=4)if(g[k]!==0||g[k+1]!==0||g[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 xg extends xt{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 o=new Promise(d=>{setTimeout(d,5e3),s=d}),a=()=>{i=!0};t.on(M.SignalReconnecting,a).on(M.Reconnecting,a).on(M.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 o,i){if(!r||t.state!==re.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 Lg extends xt{get description(){return"Can connect via TURN"}perform(){return f(this,void 0,void 0,function*(){var e,t,i;kn(new URL(this.url))&&(this.appendMessage("Using region specific url"),this.url=(e=yield new ne(this.url,this.token).getNextBestRegionUrl())!==null&&e!==void 0?e:this.url);const r=new bs,s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0);let o=!1,a=!1,c=!1;for(let d of s.iceServers)for(let l of d.urls)l.startsWith("turn:")?(a=!0,c=!0):l.startsWith("turns:")&&(a=!0,c=!0,o=!0),l.startsWith("stun:")&&(c=!0);c?a&&!o&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((i=(t=this.connectOptions)===null||t===void 0?void 0:t.rtcConfig)===null||i===void 0)&&i.iceServers||a?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(d=>setTimeout(d,0)))})}}class Ng extends xt{get description(){return"Establishing WebRTC connection"}perform(){return f(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(M.SignalConnected,()=>{var i;const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(s,o)=>{if(s.candidate){const a=new RTCIceCandidate(s);let c="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(Ug(a.address)?c+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,c+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(c)}r&&r(s,o)},!((i=this.room.engine.pcManager)===null||i===void 0)&&i.subscriber&&(this.room.engine.pcManager.subscriber.onIceCandidateError=s=>{s instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(s.errorCode," ").concat(s.errorText," ").concat(s.url))})});try{yield this.connect(),z.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 Ug(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 Fg extends xt{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 bs,s;try{s=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0)}catch(o){if(kn(new URL(this.url))){this.appendMessage("Initial connection failed with error ".concat(o.message,". Retrying with region fallback"));const c=yield new ne(this.url,this.token).getNextBestRegionUrl();c&&(s=yield r.join(c,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0),this.appendMessage("Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time"))}}s?(this.appendMessage("Connected to server, version ".concat(s.serverVersion,".")),((e=s.serverInfo)===null||e===void 0?void 0:e.edition)===Do.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))):this.appendError("Websocket connection could not be established"),yield r.close()})}}class Bg extends yt.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:nt.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!==nt.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=o=>{this.updateCheck(t,o)};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(Fg)})}checkWebRTC(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Ng)})}checkTURN(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Lg)})}checkReconnect(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(xg)})}checkPublishAudio(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Dg)})}checkPublishVideo(){return f(this,void 0,void 0,function*(){return this.createAndRunCheck(Ag)})}checkConnectionProtocol(){return f(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(Og);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(Mg)})}}class Il{}class Ml{}function X(n,e,t){return(e=Vg(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function jg(n,e){if(typeof n!="object"||!n)return n;var t=n[Symbol.toPrimitive];if(t!==void 0){var i=t.call(n,e);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(n)}function Vg(n){var e=jg(n,"string");return typeof e=="symbol"?e:e+""}new TextEncoder;const Hs=new TextDecoder;function qg(n){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(n);const e=atob(n),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.charCodeAt(i);return t}function Kg(n){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(typeof n=="string"?n:Hs.decode(n),{alphabet:"base64url"});let e=n;e instanceof Uint8Array&&(e=Hs.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/");try{return qg(e)}catch{throw new TypeError("The input to be decoded is not correctly encoded.")}}class Ke extends Error{constructor(e,t){var i;super(e,t),X(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,(i=Error.captureStackTrace)===null||i===void 0||i.call(Error,this,this.constructor)}}X(Ke,"code","ERR_JOSE_GENERIC");class Wg extends Ke{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(e,{cause:{claim:i,reason:r,payload:t}}),X(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),X(this,"claim",void 0),X(this,"reason",void 0),X(this,"payload",void 0),this.claim=i,this.reason=r,this.payload=t}}X(Wg,"code","ERR_JWT_CLAIM_VALIDATION_FAILED");class Hg extends Ke{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(e,{cause:{claim:i,reason:r,payload:t}}),X(this,"code","ERR_JWT_EXPIRED"),X(this,"claim",void 0),X(this,"reason",void 0),X(this,"payload",void 0),this.claim=i,this.reason=r,this.payload=t}}X(Hg,"code","ERR_JWT_EXPIRED");class Jg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}}X(Jg,"code","ERR_JOSE_ALG_NOT_ALLOWED");class Gg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JOSE_NOT_SUPPORTED")}}X(Gg,"code","ERR_JOSE_NOT_SUPPORTED");class zg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"decryption operation failed",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWE_DECRYPTION_FAILED")}}X(zg,"code","ERR_JWE_DECRYPTION_FAILED");class $g extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWE_INVALID")}}X($g,"code","ERR_JWE_INVALID");class Qg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWS_INVALID")}}X(Qg,"code","ERR_JWS_INVALID");class Jt extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWT_INVALID")}}X(Jt,"code","ERR_JWT_INVALID");class Yg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWK_INVALID")}}X(Yg,"code","ERR_JWK_INVALID");class Xg extends Ke{constructor(){super(...arguments),X(this,"code","ERR_JWKS_INVALID")}}X(Xg,"code","ERR_JWKS_INVALID");class Zg extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"no applicable key found in the JSON Web Key Set",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWKS_NO_MATCHING_KEY")}}X(Zg,"code","ERR_JWKS_NO_MATCHING_KEY");class ev extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"multiple matching keys found in the JSON Web Key Set",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,Symbol.asyncIterator,void 0),X(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}}X(ev,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");class tv extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"request timed out",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWKS_TIMEOUT")}}X(tv,"code","ERR_JWKS_TIMEOUT");class nv extends Ke{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"signature verification failed",t=arguments.length>1?arguments[1]:void 0;super(e,t),X(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}}X(nv,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");const iv=n=>typeof n=="object"&&n!==null;function rv(n){if(!iv(n)||Object.prototype.toString.call(n)!=="[object Object]")return!1;if(Object.getPrototypeOf(n)===null)return!0;let e=n;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(n)===e}function sv(n){if(typeof n!="string")throw new Jt("JWTs must use Compact JWS serialization, JWT must be a string");const{1:e,length:t}=n.split(".");if(t===5)throw new Jt("Only JWTs using Compact JWS serialization can be decoded");if(t!==3)throw new Jt("Invalid JWT");if(!e)throw new Jt("JWTs must contain a payload");let i;try{i=Kg(e)}catch{throw new Jt("Failed to base64url decode the payload")}let r;try{r=JSON.parse(Hs.decode(i))}catch{throw new Jt("Failed to parse the decoded payload as JSON")}if(!rv(r))throw new Jt("Invalid JWT Claims Set");return r}const Js=1e3,av=60*Js;function ov(n){const e=Gs(n.participantToken);if(!(e!=null&&e.nbf)||!(e!=null&&e.exp))return!0;const t=new Date,i=e.nbf*Js,r=new Date(i),s=e.exp*Js,o=new Date(s-av);return r<=t&&o>t}function Gs(n){const e=sv(n),{roomConfig:t}=e,i=Kr(e,["roomConfig"]);return Object.assign(Object.assign({},i),{roomConfig:e.roomConfig?Ni.fromJson(e.roomConfig):void 0})}function cv(n,e){const t=new Set([...Object.keys(n),...Object.keys(e)]);for(const i of t)switch(i){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(n[i]!==e[i])return!1;break;default:const r=i;throw new Error("Options key ".concat(r," not being checked for equality!"))}return!0}class Ol extends Ml{constructor(){super(...arguments),this.cachedFetchOptions=null,this.cachedResponse=null,this.fetchMutex=new Le}isSameAsCachedFetchOptions(e){if(!this.cachedFetchOptions)return!1;for(const t of Object.keys(this.cachedFetchOptions))switch(t){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(this.cachedFetchOptions[t]!==e[t])return!1;break;default:const i=t;throw new Error("Options key ".concat(i," not being checked for equality!"))}return!0}shouldReturnCachedValueFromFetch(e){return!(!this.cachedResponse||!ov(this.cachedResponse)||this.isSameAsCachedFetchOptions(e))}getCachedResponseJwtPayload(){return this.cachedResponse?Gs(this.cachedResponse.participantToken):null}fetch(e){return f(this,void 0,void 0,function*(){const t=yield this.fetchMutex.lock();try{if(this.shouldReturnCachedValueFromFetch(e))return this.cachedResponse.toJson();this.cachedFetchOptions=e;const i=yield this.update(e);return this.cachedResponse=i,i.toJson()}finally{t()}})}}class dv extends Il{constructor(e){super(),this.literalOrFn=e}fetch(){return f(this,void 0,void 0,function*(){return typeof this.literalOrFn=="function"?this.literalOrFn():this.literalOrFn})}}class lv extends Ol{constructor(e){super(),this.customFn=e}update(e){return f(this,void 0,void 0,function*(){const t=this.customFn(e);let i;return t instanceof Promise?i=yield t:i=t,rc.fromJson(i,{ignoreUnknownFields:!0})})}}class Dl extends Ol{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),this.url=e,this.endpointOptions=t}createRequestFromOptions(e){var t,i,r;const s=new af;for(const o of Object.keys(e))switch(o){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":s[o]=e[o];break;case"participantAttributes":s.participantAttributes=(t=e.participantAttributes)!==null&&t!==void 0?t:{};break;case"agentName":s.roomConfig=(i=s.roomConfig)!==null&&i!==void 0?i:new Ni,s.roomConfig.agents.length===0&&s.roomConfig.agents.push(new Dr),s.roomConfig.agents[0].agentName=e.agentName;break;case"agentMetadata":s.roomConfig=(r=s.roomConfig)!==null&&r!==void 0?r:new Ni,s.roomConfig.agents.length===0&&s.roomConfig.agents.push(new Dr),s.roomConfig.agents[0].metadata=e.agentMetadata;break;default:const a=o;throw new Error("Options key ".concat(a," not being included in forming request!"))}return s}update(e){return f(this,void 0,void 0,function*(){var t;const i=this.createRequestFromOptions(e),r=yield fetch(this.url,Object.assign(Object.assign({},this.endpointOptions),{method:(t=this.endpointOptions.method)!==null&&t!==void 0?t:"POST",headers:Object.assign({"Content-Type":"application/json"},this.endpointOptions.headers),body:i.toJsonString({useProtoFieldName:!0})}));if(!r.ok)throw new Error("Error generating token from endpoint ".concat(this.url,": received ").concat(r.status," / ").concat(yield r.text()));const s=yield r.json();return rc.fromJson(s,{ignoreUnknownFields:!0})})}}class uv extends Dl{constructor(e,t){const{baseUrl:i="https://cloud-api.livekit.io"}=t,r=Kr(t,["baseUrl"]);super("".concat(i,"/api/v2/sandbox/connection-details"),Object.assign(Object.assign({},r),{headers:{"X-Sandbox-ID":e}}))}}const hv={literal(n){return new dv(n)},custom(n){return new lv(n)},endpoint(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Dl(n,e)},sandboxTokenServer(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new uv(n,e)}};function mv(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var t;const i=qt(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 o=r.facingMode;z.trace("rawFacingMode",{rawFacingMode:o}),o&&typeof o=="string"&&pv(o)&&(s={facingMode:o,confidence:"high"})}if(["low","medium"].includes(s.confidence)){z.trace("Try to get facing mode from device label: (".concat(i.label,")"));const o=xl(i.label);o!==void 0&&(s=o)}return s}const Al=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),fv=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]]);function xl(n){var e;const t=n.trim().toLowerCase();if(t!=="")return Al.has(t)?Al.get(t):(e=Array.from(fv.entries()).find(i=>{let[r]=i;return t.includes(r)}))===null||e===void 0?void 0:e[1]}function pv(n){return n===void 0||["user","environment","left","right"].includes(n)}const gv=Object.freeze(Object.defineProperty({__proto__:null,get AudioPresets(){return Hi},get BackupCodecPolicy(){return is},BaseKeyProvider:Ad,get CheckStatus(){return nt},Checker:xt,ConnectionCheck:Bg,ConnectionError:K,get ConnectionErrorReason(){return ue},get ConnectionQuality(){return Dt},get ConnectionState(){return re},CriticalTimers:Oe,CryptorError:bp,get CryptorErrorReason(){return Zi},get CryptorEvent(){return vs},DataPacket_Kind:$,DataStreamError:Qe,get DataStreamErrorReason(){return Be},DataTrackPacket:Ks,DefaultReconnectPolicy:oc,DeviceUnsupportedError:qn,DisconnectReason:Xe,get EncryptionEvent(){return Ot},Encryption_Type:ke,get EngineEvent(){return A},ExternalE2EEKeyProvider:yp,get KeyHandlerEvent(){return gs},get KeyProviderEvent(){return Mt},LivekitError:Ze,LivekitReasonedError:Xt,LocalAudioTrack:Cn,LocalParticipant:ul,LocalTrack:Os,LocalTrackPublication:tr,LocalTrackRecorder:zd,LocalVideoTrack:En,get LogLevel(){return vn},get LoggerNames(){return $e},get MediaDeviceFailure(){return Kn},Mutex:Le,NegotiationError:Vt,Participant:Bs,get ParticipantEvent(){return x},ParticipantKind:fn,PublishDataError:_f,PublishTrackError:ts,RemoteAudioTrack:ol,RemoteParticipant:ei,RemoteTrack:Ns,RemoteTrackPublication:hl,RemoteVideoTrack:cl,Room:wn,get RoomEvent(){return M},RpcError:ve,ScreenSharePresets:Wn,SignalReconnectError:Zt,SignalRequestError:ns,SimulatedError:Rf,SubscriptionError:Co,TokenSource:hv,TokenSourceConfigurable:Ml,TokenSourceFixed:Il,get Track(){return E},get TrackEvent(){return D},TrackInvalidError:ct,get TrackPublication(){return kt},TrackType:Ye,UnexpectedConnectionState:Te,UnsupportedServer:Xc,VideoPreset:ce,VideoPresets:bn,VideoPresets43:Ji,get VideoQuality(){return Ge},areTokenSourceFetchOptionsEqual:cv,asEncryptablePacket:Dd,attachToElement:en,attributes:Cg,audioCodecs:Zc,compareVersions:lt,createAudioAnalyser:zf,createE2EEKey:hp,createKeyMaterialFromBuffer:Id,createKeyMaterialFromString:Pd,createLocalAudioTrack:ll,createLocalScreenTracks:yg,createLocalTracks:Zn,createLocalVideoTrack:dl,decodeTokenPayload:Gs,deriveKeys:up,detachTrack:tn,facingModeFromDeviceLabel:xl,facingModeFromLocalTrack:mv,getBrowser:Ve,getEmptyAudioStreamTrack:$i,getEmptyVideoStreamTrack:Gf,getLogger:ot,importKey:lp,isAudioCodec:$f,isAudioTrack:ut,isBackupCodec:nd,isBackupVideoCodec:td,isBrowserSupported:ud,isE2EESupported:Rd,isInsertableStreamSupported:_d,isLocalParticipant:Sd,isLocalTrack:qt,isRemoteParticipant:ep,isRemoteTrack:Yi,isScriptTransformSupported:Xi,isVideoCodec:kd,isVideoFrame:dp,isVideoTrack:Pt,needsRbspUnescaping:fp,parseRbsp:pp,protocolVersion:Yc,ratchet:mp,setLogExtension:uf,setLogLevel:lf,supportsAV1:dd,supportsAdaptiveStream:Bf,supportsAudioOutputSelection:Vf,supportsDynacast:jf,supportsVP9:ld,version:Qc,videoCodecs:ed,writeRbsp:vp},Symbol.toStringTag,{value:"Module"}));G.AgentActivityState=fe,G.AgentStatus=sa,G.BaseError=Ce,G.ChatCreationFailed=Zs,G.ChatMode=Pe,G.ChatModeDowngraded=ea,G.ChatProgress=xe,G.ConnectionState=le,G.ConnectivityState=rt,G.DocumentType=da,G.HttpError=ar,G.KnowledgeType=ca,G.NetworkError=ta,G.PlanGroup=ra,G.Providers=la,G.RateState=aa,G.SDK_VERSION=_a,G.StreamError=oi,G.StreamEvents=Q,G.StreamType=st,G.StreamingState=Z,G.Subject=oa,G.TransportProvider=ci,G.UserPlan=ia,G.ValidationError=He,G.VideoType=or,G.VoiceAccess=ua,G.WsError=na,G.createAgentManager=Qu,G.isDIDError=dn,G.mapVideoType=Wl,G.parseMessageParts=Ta,Object.defineProperty(G,Symbol.toStringTag,{value:"Module"})}));
|