openclaw-liveavatar 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-build-manifest.json +42 -0
- package/.next/app-path-routes-manifest.json +6 -0
- package/.next/build-manifest.json +33 -0
- package/.next/cache/.previewinfo +1 -0
- package/.next/cache/.rscinfo +1 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/cache/chrome-devtools-workspace-uuid +1 -0
- package/.next/cache/next-devtools-config.json +1 -0
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/1.pack +0 -0
- package/.next/cache/webpack/client-production/2.pack +0 -0
- package/.next/cache/webpack/client-production/3.pack +0 -0
- package/.next/cache/webpack/client-production/4.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +58 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +61 -0
- package/.next/react-loadable-manifest.json +1 -0
- package/.next/required-server-files.json +320 -0
- package/.next/routes-manifest.json +53 -0
- package/.next/server/app/_not-found/page.js +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_not-found.html +4 -0
- package/.next/server/app/_not-found.meta +8 -0
- package/.next/server/app/_not-found.rsc +15 -0
- package/.next/server/app/api/get-avatars/route.js +1 -0
- package/.next/server/app/api/get-avatars/route.js.nft.json +1 -0
- package/.next/server/app/api/get-avatars/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/start-session/route.js +1 -0
- package/.next/server/app/api/start-session/route.js.nft.json +1 -0
- package/.next/server/app/api/start-session/route_client-reference-manifest.js +1 -0
- package/.next/server/app/index.html +4 -0
- package/.next/server/app/index.meta +7 -0
- package/.next/server/app/index.rsc +16 -0
- package/.next/server/app/page.js +9 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +6 -0
- package/.next/server/chunks/361.js +9 -0
- package/.next/server/chunks/611.js +6 -0
- package/.next/server/chunks/873.js +22 -0
- package/.next/server/functions-config-manifest.json +4 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/404.html +4 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages/_app.js +1 -0
- package/.next/server/pages/_app.js.nft.json +1 -0
- package/.next/server/pages/_document.js +1 -0
- package/.next/server/pages/_document.js.nft.json +1 -0
- package/.next/server/pages/_error.js +19 -0
- package/.next/server/pages/_error.js.nft.json +1 -0
- package/.next/server/pages-manifest.json +6 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/chunks/144d3bae-37bcc55d23f188ee.js +1 -0
- package/.next/static/chunks/255-35bf8c00c5dde345.js +1 -0
- package/.next/static/chunks/336-a66237a0a1db954a.js +1 -0
- package/.next/static/chunks/4bd1b696-c023c6e3521b1417.js +1 -0
- package/.next/static/chunks/app/_not-found/page-dfc6e5d8e6c6203c.js +1 -0
- package/.next/static/chunks/app/api/get-avatars/route-8017e1cff542d5d0.js +1 -0
- package/.next/static/chunks/app/api/start-session/route-8017e1cff542d5d0.js +1 -0
- package/.next/static/chunks/app/layout-ff675313cc8f8fcf.js +1 -0
- package/.next/static/chunks/app/page-9e4b703722bef650.js +1 -0
- package/.next/static/chunks/framework-de98b93a850cfc71.js +1 -0
- package/.next/static/chunks/main-1a0dcce460eb61ce.js +1 -0
- package/.next/static/chunks/main-app-e7f1007edc7ad7e1.js +1 -0
- package/.next/static/chunks/pages/_app-7d307437aca18ad4.js +1 -0
- package/.next/static/chunks/pages/_error-cb2a52f75f2162e2.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-4a462cecab786e93.js +1 -0
- package/.next/static/css/bfd73afa11897439.css +3 -0
- package/.next/static/v_GdCj8lVweDVhmIhhEcM/_buildManifest.js +1 -0
- package/.next/static/v_GdCj8lVweDVhmIhhEcM/_ssgManifest.js +1 -0
- package/.next/trace +2 -0
- package/.next/types/app/api/get-avatars/route.ts +347 -0
- package/.next/types/app/api/start-session/route.ts +347 -0
- package/.next/types/app/layout.ts +84 -0
- package/.next/types/app/page.ts +84 -0
- package/.next/types/cache-life.d.ts +141 -0
- package/.next/types/package.json +1 -0
- package/.next/types/routes.d.ts +74 -0
- package/.next/types/validator.ts +88 -0
- package/README.md +241 -0
- package/app/api/config.ts +18 -0
- package/app/api/get-avatars/route.ts +117 -0
- package/app/api/start-session/route.ts +95 -0
- package/app/globals.css +3 -0
- package/app/layout.tsx +37 -0
- package/app/page.tsx +9 -0
- package/bin/cli.js +100 -0
- package/package.json +66 -0
- package/src/components/LiveAvatarSession.tsx +825 -0
- package/src/components/OpenClawDemo.tsx +399 -0
- package/src/gateway/client.ts +522 -0
- package/src/gateway/types.ts +83 -0
- package/src/liveavatar/context.tsx +750 -0
- package/src/liveavatar/index.ts +6 -0
- package/src/liveavatar/types.ts +10 -0
- package/src/liveavatar/useAvatarActions.ts +41 -0
- package/src/liveavatar/useChatHistory.ts +7 -0
- package/src/liveavatar/useSession.ts +37 -0
- package/src/liveavatar/useTextChat.ts +32 -0
- package/src/liveavatar/useVoiceChat.ts +70 -0
- package/tsconfig.json +40 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(()=>{var a={};a.id=974,a.ids=[974],a.modules={20:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,1170,23)),Promise.resolve().then(c.t.bind(c,3597,23)),Promise.resolve().then(c.t.bind(c,6893,23)),Promise.resolve().then(c.t.bind(c,9748,23)),Promise.resolve().then(c.t.bind(c,6060,23)),Promise.resolve().then(c.t.bind(c,7184,23)),Promise.resolve().then(c.t.bind(c,9576,23)),Promise.resolve().then(c.t.bind(c,3041,23)),Promise.resolve().then(c.t.bind(c,1384,23))},261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},486:()=>{},846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},1025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},2042:(a,b,c)=>{Promise.resolve().then(c.bind(c,9829))},2704:()=>{},3033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},5758:()=>{},6439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},6713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},6953:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g,metadata:()=>e});var d=c(5338);c(2704);let e={title:"OpenClaw LiveAvatar",description:"Talk to your OpenClaw agent face-to-face with a real-time AI avatar"},f={url:process.env.OPENCLAW_GATEWAY_URL||"ws://127.0.0.1:18789",token:process.env.OPENCLAW_GATEWAY_TOKEN||""};function g({children:a}){return(0,d.jsxs)("html",{lang:"en",children:[(0,d.jsx)("head",{children:(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`
|
|
2
|
+
window.__OPENCLAW_GATEWAY_URL = ${JSON.stringify(f.url)};
|
|
3
|
+
window.__OPENCLAW_GATEWAY_TOKEN = ${JSON.stringify(f.token)};
|
|
4
|
+
`}})}),(0,d.jsx)("body",{className:"bg-gray-950 text-white min-h-screen",children:a})]})}},7636:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,4160,23)),Promise.resolve().then(c.t.bind(c,1603,23)),Promise.resolve().then(c.t.bind(c,8495,23)),Promise.resolve().then(c.t.bind(c,5170,23)),Promise.resolve().then(c.t.bind(c,7526,23)),Promise.resolve().then(c.t.bind(c,8922,23)),Promise.resolve().then(c.t.bind(c,9234,23)),Promise.resolve().then(c.t.bind(c,2263,23)),Promise.resolve().then(c.bind(c,2146))},7742:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(5338),e=c(9731);function f(){return(0,d.jsx)("main",{className:"min-h-screen flex items-center justify-center",children:(0,d.jsx)(e.OpenClawDemo,{})})}},8059:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>D.a,__next_app__:()=>J,handler:()=>L,pages:()=>I,routeModule:()=>K,tree:()=>H});var d=c(9754),e=c(9117),f=c(6595),g=c(2324),h=c(9326),i=c(8928),j=c(175),k=c(12),l=c(4290),m=c(2696),n=c(2802),o=c(7533),p=c(5229),q=c(2822),r=c(261),s=c(6453),t=c(2474),u=c(6713),v=c(1356),w=c(2685),x=c(6225),y=c(3446),z=c(2762),A=c(5742),B=c(6439),C=c(1170),D=c.n(C),E=c(2506),F=c(1203),G={};for(let a in E)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(G[a]=()=>E[a]);c.d(b,G);let H=["",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,7742)),"/Users/eno/Documents/OpenClawPlayground/openclaw-liveavatar/app/page.tsx"]}]},{layout:[()=>Promise.resolve().then(c.bind(c,6953)),"/Users/eno/Documents/OpenClawPlayground/openclaw-liveavatar/app/layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,1170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,7028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,2768,23)),"next/dist/client/components/builtin/unauthorized.js"]}],I=["/Users/eno/Documents/OpenClawPlayground/openclaw-liveavatar/app/page.tsx"],J={require:c,loadChunk:()=>Promise.resolve()},K=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/page",pathname:"/",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:H},distDir:".next",relativeProjectDir:""});async function L(a,b,d){var C;let G="/page";"/index"===G&&(G="/");let M=(0,h.getRequestMeta)(a,"postponed"),N=(0,h.getRequestMeta)(a,"minimalMode"),O=await K.prepare(a,b,{srcPage:G,multiZoneDraftMode:!1});if(!O)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:P,query:Q,params:R,parsedUrl:S,pageIsDynamic:T,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,serverActionsManifest:X,clientReferenceManifest:Y,subresourceIntegrityManifest:Z,prerenderManifest:$,isDraftMode:_,resolvedPathname:aa,revalidateOnlyGenerated:ab,routerServerContext:ac,nextConfig:ad,interceptionRoutePatterns:ae}=O,af=S.pathname||"/",ag=(0,r.normalizeAppPath)(G),{isOnDemandRevalidate:ah}=O,ai=K.match(af,$),aj=!!$.routes[aa],ak=!!(ai||aj||$.routes[ag]),al=a.headers["user-agent"]||"",am=(0,u.getBotType)(al),an=(0,p.isHtmlBotRequest)(a),ao=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[t.NEXT_ROUTER_PREFETCH_HEADER],ap=(0,h.getRequestMeta)(a,"isRSCRequest")??!!a.headers[t.RSC_HEADER],aq=(0,s.getIsPossibleServerAction)(a),ar=(0,m.checkIsAppPPREnabled)(ad.experimental.ppr)&&(null==(C=$.routes[ag]??$.dynamicRoutes[ag])?void 0:C.renderingMode)==="PARTIALLY_STATIC",as=!1,at=!1,au=ar?M:void 0,av=ar&&ap&&!ao,aw=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ax=!al||(0,p.shouldServeStreamingMetadata)(al,ad.htmlLimitedBots);an&&ar&&(ak=!1,ax=!1);let ay=!0===K.isDev||!ak||"string"==typeof M||av,az=an&&ar,aA=null;_||!ak||ay||aq||au||av||(aA=aa);let aB=aA;!aB&&K.isDev&&(aB=aa),K.isDev||_||!ak||!ap||av||(0,k.d)(a.headers);let aC={...E,tree:H,pages:I,GlobalError:D(),handler:L,routeModule:K,__next_app__:J};X&&Y&&(0,o.setReferenceManifestsSingleton)({page:G,clientReferenceManifest:Y,serverActionsManifest:X,serverModuleMap:(0,q.createServerModuleMap)({serverActionsManifest:X})});let aD=a.method||"GET",aE=(0,g.getTracer)(),aF=aE.getActiveScopeSpan();try{let f=K.getVaryHeader(aa,ae);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return K.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aE.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aD} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aD} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:Q,params:R,page:ag,sharedContext:{buildId:P},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aC,Component:(0,j.T)(aC),params:R,routeModule:K,page:G,postponed:f,shouldWaitOnAllReady:az,serveStreamingMetadata:ax,supportsDynamicResponse:"string"==typeof f||ay,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,subresourceIntegrityManifest:Z,serverActionsManifest:X,clientReferenceManifest:Y,setIsrStatus:null==ac?void 0:ac.setIsrStatus,dir:c(9902).join(process.cwd(),K.relativeProjectDir),isDraftMode:_,isRevalidate:ak&&!f&&!av,botType:am,isOnDemandRevalidate:ah,isPossibleServerAction:aq,assetPrefix:ad.assetPrefix,nextConfigOutput:ad.output,crossOrigin:ad.crossOrigin,trailingSlash:ad.trailingSlash,previewProps:$.preview,deploymentId:ad.deploymentId,enableTainting:ad.experimental.taint,htmlLimitedBots:ad.htmlLimitedBots,devtoolSegmentExplorer:ad.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ad.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ad.experimental.cacheLife,basePath:ad.basePath,serverActions:ad.experimental.serverActions,...as?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:as}:{},experimental:{isRoutePPREnabled:ar,expireTime:ad.expireTime,staleTimes:ad.experimental.staleTimes,cacheComponents:!!ad.experimental.cacheComponents,clientSegmentCache:!!ad.experimental.clientSegmentCache,clientParamParsing:!!ad.experimental.clientParamParsing,dynamicOnHover:!!ad.experimental.dynamicOnHover,inlineCss:!!ad.experimental.inlineCss,authInterrupts:!!ad.experimental.authInterrupts,clientTraceMetadata:ad.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>K.onRequestError(a,b,d,ac),err:(0,h.getRequestMeta)(a,"invokeError"),dev:K.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[y.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,ak&&(null==n?void 0:n.revalidate)===0&&!K.isDev&&!ar){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${aa}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
5
|
+
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:v.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},o=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===K.isDev,l=c||b.writableEnded;if(ah&&ab&&!f&&!N)return(null==ac?void 0:ac.render404)?await ac.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(ai&&(j=(0,w.parseFallbackField)(ai.fallback)),j===w.FallbackMode.PRERENDER&&(0,u.isBot)(al)&&(!ar||an)&&(j=w.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ah=!0),ah&&(j!==w.FallbackMode.NOT_FOUND||f)&&(j=w.FallbackMode.BLOCKING_STATIC_RENDER),!N&&j!==w.FallbackMode.BLOCKING_STATIC_RENDER&&aB&&!l&&!_&&T&&(k||!aj)){let b;if((k||ai)&&j===w.FallbackMode.NOT_FOUND)throw new B.NoFallbackError;if(ar&&!ap){let c="string"==typeof(null==ai?void 0:ai.fallback)?ai.fallback:k?ag:null;if(b=await K.handleResponse({cacheKey:c,req:a,nextConfig:ad,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:$,isRoutePPREnabled:ar,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||at?(0,n.u)(ag):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let o=ah||g||!au?void 0:au;if(as&&void 0!==o)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:v.CachedRouteKind.PAGES,html:x.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=T&&ar&&((0,h.getRequestMeta)(a,"renderFallbackShell")||at)?(0,n.u)(af):null;return m({span:i,postponed:o,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,n=await K.handleResponse({cacheKey:aA,responseGenerator:a=>o({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ah,isRoutePPREnabled:ar,req:a,nextConfig:ad,prerenderManifest:$,waitUntil:d.waitUntil});if(_&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),K.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!n){if(aA)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=n.value)?void 0:f.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=n.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof n.value.postponed;ak&&!av&&(!p||ao)&&(N||b.setHeader("x-nextjs-cache",ah?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b.setHeader(t.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=n;if(au)l={revalidate:0,expire:void 0};else if(N&&ap&&!ao&&ar)l={revalidate:0,expire:void 0};else if(!K.isDev)if(_)l={revalidate:0,expire:void 0};else if(ak){if(n.cacheControl)if("number"==typeof n.cacheControl.revalidate){if(n.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${n.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:n.cacheControl.revalidate,expire:(null==(j=n.cacheControl)?void 0:j.expire)??ad.expireTime}}else l={revalidate:y.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(n.cacheControl=l,"string"==typeof aw&&(null==q?void 0:q.kind)===v.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[y.NEXT_CACHE_TAGS_HEADER];N&&ak&&c&&"string"==typeof c&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(aw);return void 0!==d?(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.fromStatic(d,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl}):(b.statusCode=204,(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...n,value:{...n.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&au)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(N&&ak||delete a[y.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[y.NEXT_CACHE_TAGS_HEADER];if(N&&ak&&s&&"string"==typeof s&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,s),!q.status||ap&&ar||(b.statusCode=q.status),!N&&q.status&&F.RedirectStatusCode[q.status]&&ap&&(b.statusCode=200),p&&b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"1"),ap&&!_){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:q.html,cacheControl:av?{revalidate:0,expire:void 0}:n.cacheControl})}return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.fromStatic(q.rscData,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl})}let u=q.html;if(!p||N||ap)return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:n.cacheControl});if(as)return u.push(new ReadableStream({start(a){a.enqueue(z.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:{revalidate:0,expire:void 0}});let w=new TransformStream;return u.push(w.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(w.writable)}).catch(a=>{w.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:{revalidate:0,expire:void 0}})};if(!aF)return await aE.withPropagatedContext(a.headers,()=>aE.trace(i.BaseServerSpan.handleRequest,{spanName:`${aD} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aD,"http.target":a.url}},p));await p(aF)}catch(b){throw b instanceof B.NoFallbackError||await K.onRequestError(a,b,{routerKind:"App Router",routePath:G,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:ak,isOnDemandRevalidate:ah})},ac),b}}},8354:a=>{"use strict";a.exports=require("util")},8482:(a,b,c)=>{Promise.resolve().then(c.bind(c,9731))},9121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},9294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},9731:(a,b,c)=>{"use strict";c.d(b,{OpenClawDemo:()=>d});let d=(0,c(7954).registerClientReference)(function(){throw Error("Attempted to call OpenClawDemo() from the server but OpenClawDemo is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/eno/Documents/OpenClawPlayground/openclaw-liveavatar/src/components/OpenClawDemo.tsx","OpenClawDemo")},9829:(a,b,c)=>{"use strict";let d,e;c.d(b,{OpenClawDemo:()=>hr});var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ab=c(1124),ac=c(8301),ad=Object.defineProperty,ae=(a,b,c)=>((a,b,c)=>b in a?ad(a,b,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[b]=c)(a,"symbol"!=typeof b?b+"":b,c);class af{constructor(){ae(this,"_locking"),ae(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){let a;this._locks+=1;let b=new Promise(b=>a=()=>{this._locks-=1,b()}),c=this._locking.then(()=>a);return this._locking=this._locking.then(()=>b),c}}function ag(a,b){if(!a)throw Error(b)}function ah(a){if("number"!=typeof a)throw Error("invalid int 32: "+typeof a);if(!Number.isInteger(a)||a>0x7fffffff||a<-0x80000000)throw Error("invalid int 32: "+a)}function ai(a){if("number"!=typeof a)throw Error("invalid uint 32: "+typeof a);if(!Number.isInteger(a)||a>0xffffffff||a<0)throw Error("invalid uint 32: "+a)}function aj(a){if("number"!=typeof a)throw Error("invalid float 32: "+typeof a);if(Number.isFinite(a)&&(a>34028234663852886e22||a<-34028234663852886e22))throw Error("invalid float 32: "+a)}let ak=Symbol("@bufbuild/protobuf/enum-type");function al(a,b,c,d){a[ak]=am(b,c.map(b=>({no:b.no,name:b.name,localName:a[b.no]})))}function am(a,b,c){let d=Object.create(null),e=Object.create(null),f=[];for(let a of b){let b=an(a);f.push(b),d[a.name]=b,e[a.no]=b}return{typeName:a,values:f,findName:a=>d[a],findNumber:a=>e[a]}}function an(a){return"localName"in a?a:Object.assign(Object.assign({},a),{localName:a.name})}class ao{equals(a){return this.getType().runtime.util.equals(this.getType(),this,a)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(a,b){let c=this.getType().runtime.bin,d=c.makeReadOptions(b);return c.readMessage(this,d.readerFactory(a),a.byteLength,d),this}fromJson(a,b){let c=this.getType(),d=c.runtime.json,e=d.makeReadOptions(b);return d.readMessage(c,a,e,this),this}fromJsonString(a,b){let c;try{c=JSON.parse(a)}catch(a){throw Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(a instanceof Error?a.message:String(a)))}return this.fromJson(c,b)}toBinary(a){let b=this.getType().runtime.bin,c=b.makeWriteOptions(a),d=c.writerFactory();return b.writeMessage(this,d,c),d.finish()}toJson(a){let b=this.getType().runtime.json,c=b.makeWriteOptions(a);return b.writeMessage(this,c)}toJsonString(a){var b;return JSON.stringify(this.toJson(a),null,null!=(b=null==a?void 0:a.prettySpaces)?b:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function ap(){let a=0,b=0;for(let c=0;c<28;c+=7){let d=this.buf[this.pos++];if(a|=(127&d)<<c,(128&d)==0)return this.assertBounds(),[a,b]}let c=this.buf[this.pos++];if(a|=(15&c)<<28,b=(112&c)>>4,(128&c)==0)return this.assertBounds(),[a,b];for(let c=3;c<=31;c+=7){let d=this.buf[this.pos++];if(b|=(127&d)<<c,(128&d)==0)return this.assertBounds(),[a,b]}throw Error("invalid varint")}function aq(a,b,c){for(let d=0;d<28;d+=7){let e=a>>>d,f=e>>>7!=0||0!=b,g=(f?128|e:e)&255;if(c.push(g),!f)return}let d=a>>>28&15|(7&b)<<4,e=b>>3!=0;if(c.push((e?128|d:d)&255),e){for(let a=3;a<31;a+=7){let d=b>>>a,e=d>>>7!=0,f=(e?128|d:d)&255;if(c.push(f),!e)return}c.push(b>>>31&1)}}function ar(a){let b="-"===a[0];b&&(a=a.slice(1));let c=0,d=0;function e(b,e){let f=Number(a.slice(b,e));d*=1e6,(c=1e6*c+f)>=0x100000000&&(d+=c/0x100000000|0,c%=0x100000000)}return e(-24,-18),e(-18,-12),e(-12,-6),e(-6),b?au(c,d):at(c,d)}function as(a,b){if({lo:a,hi:b}={lo:a>>>0,hi:b>>>0},b<=2097151)return String(0x100000000*b+a);let c=0xffffff&a,d=(a>>>24|b<<8)&0xffffff,e=b>>16&65535,f=c+6777216*d+6710656*e,g=d+8147497*e,h=2*e;return f>=1e7&&(g+=Math.floor(f/1e7),f%=1e7),g>=1e7&&(h+=Math.floor(g/1e7),g%=1e7),h.toString()+av(g)+av(f)}function at(a,b){return{lo:0|a,hi:0|b}}function au(a,b){return b=~b,a?a=~a+1:b+=1,at(a,b)}let av=a=>{let b=String(a);return"0000000".slice(b.length)+b};function aw(a,b){if(a>=0){for(;a>127;)b.push(127&a|128),a>>>=7;b.push(a)}else{for(let c=0;c<9;c++)b.push(127&a|128),a>>=7;b.push(1)}}function ax(){let a=this.buf[this.pos++],b=127&a;if((128&a)==0||(b|=(127&(a=this.buf[this.pos++]))<<7,(128&a)==0)||(b|=(127&(a=this.buf[this.pos++]))<<14,(128&a)==0)||(b|=(127&(a=this.buf[this.pos++]))<<21,(128&a)==0))return this.assertBounds(),b;b|=(15&(a=this.buf[this.pos++]))<<28;for(let b=5;(128&a)!=0&&b<10;b++)a=this.buf[this.pos++];if((128&a)!=0)throw Error("invalid varint");return this.assertBounds(),b>>>0}let ay=function(){let a=new DataView(new ArrayBuffer(8));if("function"==typeof BigInt&&"function"==typeof a.getBigInt64&&"function"==typeof a.getBigUint64&&"function"==typeof a.setBigInt64&&"function"==typeof a.setBigUint64&&("object"!=typeof process||"object"!=typeof process.env||"1"!==process.env.BUF_BIGINT_DISABLE)){let b=BigInt("-9223372036854775808"),c=BigInt("9223372036854775807"),d=BigInt("0"),e=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(a){let d="bigint"==typeof a?a:BigInt(a);if(d>c||d<b)throw Error("int64 invalid: ".concat(a));return d},uParse(a){let b="bigint"==typeof a?a:BigInt(a);if(b>e||b<d)throw Error("uint64 invalid: ".concat(a));return b},enc(b){return a.setBigInt64(0,this.parse(b),!0),{lo:a.getInt32(0,!0),hi:a.getInt32(4,!0)}},uEnc(b){return a.setBigInt64(0,this.uParse(b),!0),{lo:a.getInt32(0,!0),hi:a.getInt32(4,!0)}},dec:(b,c)=>(a.setInt32(0,b,!0),a.setInt32(4,c,!0),a.getBigInt64(0,!0)),uDec:(b,c)=>(a.setInt32(0,b,!0),a.setInt32(4,c,!0),a.getBigUint64(0,!0))}}let b=a=>ag(/^-?[0-9]+$/.test(a),"int64 invalid: ".concat(a)),c=a=>ag(/^[0-9]+$/.test(a),"uint64 invalid: ".concat(a));return{zero:"0",supported:!1,parse:a=>("string"!=typeof a&&(a=a.toString()),b(a),a),uParse:a=>("string"!=typeof a&&(a=a.toString()),c(a),a),enc:a=>("string"!=typeof a&&(a=a.toString()),b(a),ar(a)),uEnc:a=>("string"!=typeof a&&(a=a.toString()),c(a),ar(a)),dec:(a,b)=>(function(a,b){let c=at(a,b),d=0x80000000&c.hi;d&&(c=au(c.lo,c.hi));let e=as(c.lo,c.hi);return d?"-"+e:e})(a,b),uDec:(a,b)=>as(a,b)}}();function az(a,b,c){if(b===c)return!0;if(a==h.BYTES){if(!(b instanceof Uint8Array)||!(c instanceof Uint8Array)||b.length!==c.length)return!1;for(let a=0;a<b.length;a++)if(b[a]!==c[a])return!1;return!0}switch(a){case h.UINT64:case h.FIXED64:case h.INT64:case h.SFIXED64:case h.SINT64:return b==c}return!1}function aA(a,b){switch(a){case h.BOOL:return!1;case h.UINT64:case h.FIXED64:case h.INT64:case h.SFIXED64:case h.SINT64:return 0==b?ay.zero:"0";case h.DOUBLE:case h.FLOAT:return 0;case h.BYTES:return new Uint8Array(0);case h.STRING:return"";default:return 0}}function aB(a,b){switch(a){case h.BOOL:return!1===b;case h.STRING:return""===b;case h.BYTES:return b instanceof Uint8Array&&!b.byteLength;default:return 0==b}}!function(a){a[a.DOUBLE=1]="DOUBLE",a[a.FLOAT=2]="FLOAT",a[a.INT64=3]="INT64",a[a.UINT64=4]="UINT64",a[a.INT32=5]="INT32",a[a.FIXED64=6]="FIXED64",a[a.FIXED32=7]="FIXED32",a[a.BOOL=8]="BOOL",a[a.STRING=9]="STRING",a[a.BYTES=12]="BYTES",a[a.UINT32=13]="UINT32",a[a.SFIXED32=15]="SFIXED32",a[a.SFIXED64=16]="SFIXED64",a[a.SINT32=17]="SINT32",a[a.SINT64=18]="SINT64"}(h||(h={})),function(a){a[a.BIGINT=0]="BIGINT",a[a.STRING=1]="STRING"}(i||(i={})),function(a){a[a.Varint=0]="Varint",a[a.Bit64=1]="Bit64",a[a.LengthDelimited=2]="LengthDelimited",a[a.StartGroup=3]="StartGroup",a[a.EndGroup=4]="EndGroup",a[a.Bit32=5]="Bit32"}(j||(j={}));class aC{constructor(a){this.stack=[],this.textEncoder=null!=a?a:new TextEncoder,this.chunks=[],this.buf=[]}finish(){this.chunks.push(new Uint8Array(this.buf));let a=0;for(let b=0;b<this.chunks.length;b++)a+=this.chunks[b].length;let b=new Uint8Array(a),c=0;for(let a=0;a<this.chunks.length;a++)b.set(this.chunks[a],c),c+=this.chunks[a].length;return this.chunks=[],b}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let a=this.finish(),b=this.stack.pop();if(!b)throw Error("invalid state, fork stack empty");return this.chunks=b.chunks,this.buf=b.buf,this.uint32(a.byteLength),this.raw(a)}tag(a,b){return this.uint32((a<<3|b)>>>0)}raw(a){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(a),this}uint32(a){for(ai(a);a>127;)this.buf.push(127&a|128),a>>>=7;return this.buf.push(a),this}int32(a){return ah(a),aw(a,this.buf),this}bool(a){return this.buf.push(+!!a),this}bytes(a){return this.uint32(a.byteLength),this.raw(a)}string(a){let b=this.textEncoder.encode(a);return this.uint32(b.byteLength),this.raw(b)}float(a){aj(a);let b=new Uint8Array(4);return new DataView(b.buffer).setFloat32(0,a,!0),this.raw(b)}double(a){let b=new Uint8Array(8);return new DataView(b.buffer).setFloat64(0,a,!0),this.raw(b)}fixed32(a){ai(a);let b=new Uint8Array(4);return new DataView(b.buffer).setUint32(0,a,!0),this.raw(b)}sfixed32(a){ah(a);let b=new Uint8Array(4);return new DataView(b.buffer).setInt32(0,a,!0),this.raw(b)}sint32(a){return ah(a),aw(a=(a<<1^a>>31)>>>0,this.buf),this}sfixed64(a){let b=new Uint8Array(8),c=new DataView(b.buffer),d=ay.enc(a);return c.setInt32(0,d.lo,!0),c.setInt32(4,d.hi,!0),this.raw(b)}fixed64(a){let b=new Uint8Array(8),c=new DataView(b.buffer),d=ay.uEnc(a);return c.setInt32(0,d.lo,!0),c.setInt32(4,d.hi,!0),this.raw(b)}int64(a){let b=ay.enc(a);return aq(b.lo,b.hi,this.buf),this}sint64(a){let b=ay.enc(a),c=b.hi>>31;return aq(b.lo<<1^c,(b.hi<<1|b.lo>>>31)^c,this.buf),this}uint64(a){let b=ay.uEnc(a);return aq(b.lo,b.hi,this.buf),this}}class aD{constructor(a,b){this.varint64=ap,this.uint32=ax,this.buf=a,this.len=a.length,this.pos=0,this.view=new DataView(a.buffer,a.byteOffset,a.byteLength),this.textDecoder=null!=b?b:new TextDecoder}tag(){let a=this.uint32(),b=a>>>3,c=7&a;if(b<=0||c<0||c>5)throw Error("illegal tag: field no "+b+" wire type "+c);return[b,c]}skip(a,b){let c=this.pos;switch(a){case j.Varint:for(;128&this.buf[this.pos++];);break;case j.Bit64:this.pos+=4;case j.Bit32:this.pos+=4;break;case j.LengthDelimited:let d=this.uint32();this.pos+=d;break;case j.StartGroup:for(;;){let[a,c]=this.tag();if(c===j.EndGroup){if(void 0!==b&&a!==b)throw Error("invalid end group tag");break}this.skip(c,a)}break;default:throw Error("cant skip wire type "+a)}return this.assertBounds(),this.buf.subarray(c,this.pos)}assertBounds(){if(this.pos>this.len)throw RangeError("premature EOF")}int32(){return 0|this.uint32()}sint32(){let a=this.uint32();return a>>>1^-(1&a)}int64(){return ay.dec(...this.varint64())}uint64(){return ay.uDec(...this.varint64())}sint64(){let[a,b]=this.varint64(),c=-(1&a);return a=(a>>>1|(1&b)<<31)^c,b=b>>>1^c,ay.dec(a,b)}bool(){let[a,b]=this.varint64();return 0!==a||0!==b}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return ay.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return ay.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 a=this.uint32(),b=this.pos;return this.pos+=a,this.assertBounds(),this.buf.subarray(b,b+a)}string(){return this.textDecoder.decode(this.bytes())}}function aE(a){let b=a.field.localName,c=Object.create(null);return c[b]=function(a){let b=a.field;if(b.repeated)return[];if(void 0!==b.default)return b.default;switch(b.kind){case"enum":return b.T.values[0].no;case"scalar":return aA(b.T,b.L);case"message":let c=b.T,d=new c;return c.fieldWrapper?c.fieldWrapper.unwrapField(d):d;case"map":throw"map fields are not allowed to be extensions"}}(a),[c,()=>c[b]]}let aF="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),aG=[];for(let a=0;a<aF.length;a++)aG[aF[a].charCodeAt(0)]=a;aG[45]=aF.indexOf("+"),aG[95]=aF.indexOf("/");let aH={dec(a){let b=3*a.length/4;"="==a[a.length-2]?b-=2:"="==a[a.length-1]&&(b-=1);let c=new Uint8Array(b),d=0,e=0,f,g=0;for(let b=0;b<a.length;b++){if(void 0===(f=aG[a.charCodeAt(b)]))switch(a[b]){case"=":e=0;case"\n":case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string.")}switch(e){case 0:g=f,e=1;break;case 1:c[d++]=g<<2|(48&f)>>4,g=f,e=2;break;case 2:c[d++]=(15&g)<<4|(60&f)>>2,g=f,e=3;break;case 3:c[d++]=(3&g)<<6|f,e=0}}if(1==e)throw Error("invalid base64 string.");return c.subarray(0,d)},enc(a){let b="",c=0,d,e=0;for(let f=0;f<a.length;f++)switch(d=a[f],c){case 0:b+=aF[d>>2],e=(3&d)<<4,c=1;break;case 1:b+=aF[e|d>>4],e=(15&d)<<2,c=2;break;case 2:b+=aF[e|d>>6],b+=aF[63&d],c=0}return c&&(b+=aF[e],b+="=",1==c&&(b+="=")),b}};function aI(a,b){let c=a.getType();return b.extendee.typeName===c.typeName&&!!c.runtime.bin.listUnknownFields(a).find(a=>a.no==b.field.no)}function aJ(a,b){ag(a.extendee.typeName==b.getType().typeName,"extension ".concat(a.typeName," can only be applied to message ").concat(a.extendee.typeName))}function aK(a,b){let c=a.localName;if(a.repeated)return b[c].length>0;if(a.oneof)return b[a.oneof.localName].case===c;switch(a.kind){case"enum":case"scalar":if(a.opt||a.req)return void 0!==b[c];if("enum"==a.kind)return b[c]!==a.T.values[0].no;return!aB(a.T,b[c]);case"message":return void 0!==b[c];case"map":return Object.keys(b[c]).length>0}}function aL(a,b){let c=a.localName,d=!a.opt&&!a.req;if(a.repeated)b[c]=[];else if(a.oneof)b[a.oneof.localName]={case:void 0};else switch(a.kind){case"map":b[c]={};break;case"enum":b[c]=d?a.T.values[0].no:void 0;break;case"scalar":b[c]=d?aA(a.T,a.L):void 0;break;case"message":b[c]=void 0}}function aM(a,b){if(null===a||"object"!=typeof a||!Object.getOwnPropertyNames(ao.prototype).every(b=>b in a&&"function"==typeof a[b]))return!1;let c=a.getType();return null!==c&&"function"==typeof c&&"typeName"in c&&"string"==typeof c.typeName&&(void 0===b||c.typeName==b.typeName)}function aN(a,b){return aM(b)||!a.fieldWrapper?b:a.fieldWrapper.wrapField(b)}h.DOUBLE,h.FLOAT,h.INT64,h.UINT64,h.INT32,h.UINT32,h.BOOL,h.STRING,h.BYTES;let aO={ignoreUnknownFields:!1},aP={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0},aQ=Symbol(),aR=Symbol();function aS(a){if(null===a)return"null";switch(typeof a){case"object":return Array.isArray(a)?"array":"object";case"string":return a.length>100?"string":'"'.concat(a.split('"').join('\\"'),'"');default:return String(a)}}function aT(a,b,c,d,e){let f=c.localName;if(c.repeated){if(ag("map"!=c.kind),null===b)return;if(!Array.isArray(b))throw Error("cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(b)));let g=a[f];for(let a of b){if(null===a)throw Error("cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(a)));switch(c.kind){case"message":g.push(c.T.fromJson(a,d));break;case"enum":let b=aV(c.T,a,d.ignoreUnknownFields,!0);b!==aR&&g.push(b);break;case"scalar":try{g.push(aU(c.T,a,c.L,!0))}catch(d){let b="cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(a));throw d instanceof Error&&d.message.length>0&&(b+=": ".concat(d.message)),Error(b)}}}}else if("map"==c.kind){if(null===b)return;if("object"!=typeof b||Array.isArray(b))throw Error("cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(b)));let g=a[f];for(let[a,f]of Object.entries(b)){let j;if(null===f)throw Error("cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: map value null"));try{j=function(a,b){if(a===h.BOOL)switch(b){case"true":b=!0;break;case"false":b=!1}return aU(a,b,i.BIGINT,!0).toString()}(c.K,a)}catch(d){let a="cannot decode map key for field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(b));throw d instanceof Error&&d.message.length>0&&(a+=": ".concat(d.message)),Error(a)}switch(c.V.kind){case"message":g[j]=c.V.T.fromJson(f,d);break;case"enum":let k=aV(c.V.T,f,d.ignoreUnknownFields,!0);k!==aR&&(g[j]=k);break;case"scalar":try{g[j]=aU(c.V.T,f,i.BIGINT,!0)}catch(d){let a="cannot decode map value for field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(b));throw d instanceof Error&&d.message.length>0&&(a+=": ".concat(d.message)),Error(a)}}}}else switch(c.oneof&&(a=a[c.oneof.localName]={case:f},f="value"),c.kind){case"message":let g=c.T;if(null===b&&"google.protobuf.Value"!=g.typeName)return;let j=a[f];aM(j)?j.fromJson(b,d):(a[f]=j=g.fromJson(b,d),g.fieldWrapper&&!c.oneof&&(a[f]=g.fieldWrapper.unwrapField(j)));break;case"enum":let k=aV(c.T,b,d.ignoreUnknownFields,!1);switch(k){case aQ:aL(c,a);break;case aR:break;default:a[f]=k}break;case"scalar":try{let d=aU(c.T,b,c.L,!1);d===aQ?aL(c,a):a[f]=d}catch(d){let a="cannot decode field ".concat(e.typeName,".").concat(c.name," from JSON: ").concat(aS(b));throw d instanceof Error&&d.message.length>0&&(a+=": ".concat(d.message)),Error(a)}}}function aU(a,b,c,d){if(null===b)return d?aA(a,c):aQ;switch(a){case h.DOUBLE:case h.FLOAT:if("NaN"===b)return NaN;if("Infinity"===b)return 1/0;if("-Infinity"===b)return-1/0;if(""===b||"string"==typeof b&&b.trim().length!==b.length||"string"!=typeof b&&"number"!=typeof b)break;let e=Number(b);if(Number.isNaN(e)||!Number.isFinite(e))break;return a==h.FLOAT&&aj(e),e;case h.INT32:case h.FIXED32:case h.SFIXED32:case h.SINT32:case h.UINT32:let f;if("number"==typeof b?f=b:"string"==typeof b&&b.length>0&&b.trim().length===b.length&&(f=Number(b)),void 0===f)break;return a==h.UINT32||a==h.FIXED32?ai(f):ah(f),f;case h.INT64:case h.SFIXED64:case h.SINT64:if("number"!=typeof b&&"string"!=typeof b)break;let g=ay.parse(b);return c?g.toString():g;case h.FIXED64:case h.UINT64:if("number"!=typeof b&&"string"!=typeof b)break;let i=ay.uParse(b);return c?i.toString():i;case h.BOOL:if("boolean"!=typeof b)break;return b;case h.STRING:if("string"!=typeof b)break;try{encodeURIComponent(b)}catch(a){throw Error("invalid UTF8")}return b;case h.BYTES:if(""===b)return new Uint8Array(0);if("string"!=typeof b)break;return aH.dec(b)}throw Error()}function aV(a,b,c,d){if(null===b)return"google.protobuf.NullValue"==a.typeName?0:d?a.values[0].no:aQ;switch(typeof b){case"number":if(Number.isInteger(b))return b;break;case"string":let e=a.findName(b);if(void 0!==e)return e.no;if(c)return aR}throw Error("cannot decode enum ".concat(a.typeName," from JSON: ").concat(aS(b)))}function aW(a,b,c){if("map"==a.kind){ag("object"==typeof b&&null!=b);let d={},e=Object.entries(b);switch(a.V.kind){case"scalar":for(let[b,c]of e)d[b.toString()]=aY(a.V.T,c);break;case"message":for(let[a,b]of e)d[a.toString()]=b.toJson(c);break;case"enum":let f=a.V.T;for(let[a,b]of e)d[a.toString()]=aX(f,b,c.enumAsInteger)}return c.emitDefaultValues||e.length>0?d:void 0}if(a.repeated){ag(Array.isArray(b));let d=[];switch(a.kind){case"scalar":for(let c=0;c<b.length;c++)d.push(aY(a.T,b[c]));break;case"enum":for(let e=0;e<b.length;e++)d.push(aX(a.T,b[e],c.enumAsInteger));break;case"message":for(let a=0;a<b.length;a++)d.push(b[a].toJson(c))}return c.emitDefaultValues||d.length>0?d:void 0}switch(a.kind){case"scalar":return aY(a.T,b);case"enum":return aX(a.T,b,c.enumAsInteger);case"message":return aN(a.T,b).toJson(c)}}function aX(a,b,c){var d;if(ag("number"==typeof b),"google.protobuf.NullValue"==a.typeName)return null;if(c)return b;let e=a.findNumber(b);return null!=(d=null==e?void 0:e.name)?d:b}function aY(a,b){switch(a){case h.INT32:case h.SFIXED32:case h.SINT32:case h.FIXED32:case h.UINT32:return ag("number"==typeof b),b;case h.FLOAT:case h.DOUBLE:if(ag("number"==typeof b),Number.isNaN(b))return"NaN";if(b===1/0)return"Infinity";if(b===-1/0)return"-Infinity";return b;case h.STRING:return ag("string"==typeof b),b;case h.BOOL:return ag("boolean"==typeof b),b;case h.UINT64:case h.FIXED64:case h.INT64:case h.SFIXED64:case h.SINT64:return ag("bigint"==typeof b||"string"==typeof b||"number"==typeof b),b.toString();case h.BYTES:return ag(b instanceof Uint8Array),aH.enc(b)}}let aZ=Symbol("@bufbuild/protobuf/unknown-fields"),a$={readUnknownFields:!0,readerFactory:a=>new aD(a)},a_={writeUnknownFields:!0,writerFactory:()=>new aC};function a0(a,b,c,d,e){let{repeated:f,localName:g}=c;switch(c.oneof&&((a=a[c.oneof.localName]).case!=g&&delete a.value,a.case=g,g="value"),c.kind){case"scalar":case"enum":let k="enum"==c.kind?h.INT32:c.T,l=a3;if("scalar"==c.kind&&c.L>0&&(l=a2),f){let c=a[g];if(d==j.LengthDelimited&&k!=h.STRING&&k!=h.BYTES){let a=b.uint32()+b.pos;for(;b.pos<a;)c.push(l(b,k))}else c.push(l(b,k))}else a[g]=l(b,k);break;case"message":let m=c.T;f?a[g].push(a1(b,new m,e,c)):aM(a[g])?a1(b,a[g],e,c):(a[g]=a1(b,new m,e,c),!m.fieldWrapper||c.oneof||c.repeated||(a[g]=m.fieldWrapper.unwrapField(a[g])));break;case"map":let[n,o]=function(a,b,c){let d,e,f=b.uint32(),g=b.pos+f;for(;b.pos<g;){let[f]=b.tag();switch(f){case 1:d=a3(b,a.K);break;case 2:switch(a.V.kind){case"scalar":e=a3(b,a.V.T);break;case"enum":e=b.int32();break;case"message":e=a1(b,new a.V.T,c,void 0)}}}if(void 0===d&&(d=aA(a.K,i.BIGINT)),"string"!=typeof d&&"number"!=typeof d&&(d=d.toString()),void 0===e)switch(a.V.kind){case"scalar":e=aA(a.V.T,i.BIGINT);break;case"enum":e=a.V.T.values[0].no;break;case"message":e=new a.V.T}return[d,e]}(c,b,e);a[g][n]=o}}function a1(a,b,c,d){let e=b.getType().runtime.bin,f=null==d?void 0:d.delimited;return e.readMessage(b,a,f?d.no:a.uint32(),c,f),b}function a2(a,b){let c=a3(a,b);return"bigint"==typeof c?c.toString():c}function a3(a,b){switch(b){case h.STRING:return a.string();case h.BOOL:return a.bool();case h.DOUBLE:return a.double();case h.FLOAT:return a.float();case h.INT32:return a.int32();case h.INT64:return a.int64();case h.UINT64:return a.uint64();case h.FIXED64:return a.fixed64();case h.BYTES:return a.bytes();case h.FIXED32:return a.fixed32();case h.SFIXED32:return a.sfixed32();case h.SFIXED64:return a.sfixed64();case h.SINT64:return a.sint64();case h.UINT32:return a.uint32();case h.SINT32:return a.sint32()}}function a4(a,b,c,d){ag(void 0!==b);let e=a.repeated;switch(a.kind){case"scalar":case"enum":let f="enum"==a.kind?h.INT32:a.T;if(e)if(ag(Array.isArray(b)),a.packed)!function(a,b,c,d){if(!d.length)return;a.tag(c,j.LengthDelimited).fork();let[,e]=a7(b);for(let b=0;b<d.length;b++)a[e](d[b]);a.join()}(c,f,a.no,b);else for(let d of b)a6(c,f,a.no,d);else a6(c,f,a.no,b);break;case"message":if(e)for(let e of(ag(Array.isArray(b)),b))a5(c,d,a,e);else a5(c,d,a,b);break;case"map":for(let[e,f]of(ag("object"==typeof b&&null!=b),Object.entries(b)))!function(a,b,c,d,e){a.tag(c.no,j.LengthDelimited),a.fork();let f=d;switch(c.K){case h.INT32:case h.FIXED32:case h.UINT32:case h.SFIXED32:case h.SINT32:f=Number.parseInt(d);break;case h.BOOL:ag("true"==d||"false"==d),f="true"==d}switch(a6(a,c.K,1,f),c.V.kind){case"scalar":a6(a,c.V.T,2,e);break;case"enum":a6(a,h.INT32,2,e);break;case"message":ag(void 0!==e),a.tag(2,j.LengthDelimited).bytes(e.toBinary(b))}a.join()}(c,d,a,e,f)}}function a5(a,b,c,d){let e=aN(c.T,d);c.delimited?a.tag(c.no,j.StartGroup).raw(e.toBinary(b)).tag(c.no,j.EndGroup):a.tag(c.no,j.LengthDelimited).bytes(e.toBinary(b))}function a6(a,b,c,d){ag(void 0!==d);let[e,f]=a7(b);a.tag(c,e)[f](d)}function a7(a){let b=j.Varint;switch(a){case h.BYTES:case h.STRING:b=j.LengthDelimited;break;case h.DOUBLE:case h.FIXED64:case h.SFIXED64:b=j.Bit64;break;case h.FIXED32:case h.SFIXED32:case h.FLOAT:b=j.Bit32}return[b,h[a].toLowerCase()]}function a8(a){if(void 0===a)return a;if(aM(a))return a.clone();if(a instanceof Uint8Array){let b=new Uint8Array(a.byteLength);return b.set(a),b}return a}function a9(a){return a instanceof Uint8Array?a:new Uint8Array(a)}class ba{constructor(a,b){this._fields=a,this._normalizer=b}findJsonName(a){if(!this.jsonNames){let a={};for(let b of this.list())a[b.jsonName]=a[b.name]=b;this.jsonNames=a}return this.jsonNames[a]}find(a){if(!this.numbers){let a={};for(let b of this.list())a[b.no]=b;this.numbers=a}return this.numbers[a]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((a,b)=>a.no-b.no)),this.numbersAsc}byMember(){if(!this.members){let a;this.members=[];let b=this.members;for(let c of this.list())c.oneof?c.oneof!==a&&(a=c.oneof,b.push(a)):b.push(c)}return this.members}}function bb(a,b){let c=bd(a);return b?c:bi(bh(c))}let bc=bd;function bd(a){let b=!1,c=[];for(let d=0;d<a.length;d++){let e=a.charAt(d);switch(e){case"_":b=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":c.push(e),b=!1;break;default:b&&(b=!1,e=e.toUpperCase()),c.push(e)}}return c.join("")}let be=new Set(["constructor","toString","toJSON","valueOf"]),bf=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),bg=a=>"".concat(a,"$"),bh=a=>bf.has(a)?bg(a):a,bi=a=>be.has(a)?bg(a):a;class bj{constructor(a){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=a,this.localName=bb(a,!1)}addField(a){ag(a.oneof===this,"field ".concat(a.name," not one of ").concat(this.name)),this.fields.push(a)}findField(a){if(!this._lookup){this._lookup=Object.create(null);for(let a=0;a<this.fields.length;a++)this._lookup[this.fields[a].localName]=this.fields[a]}return this._lookup[a]}}let bk=(f=a=>new ba(a,a=>(function(a,b){var c,d,e,f,g,j;let k,l=[];for(let b of"function"==typeof a?a():a){if(b.localName=bb(b.name,void 0!==b.oneof),b.jsonName=null!=(c=b.jsonName)?c:bc(b.name),b.repeated=null!=(d=b.repeated)&&d,"scalar"==b.kind&&(b.L=null!=(e=b.L)?e:i.BIGINT),b.delimited=null!=(f=b.delimited)&&f,b.req=null!=(g=b.req)&&g,b.opt=null!=(j=b.opt)&&j,void 0===b.packed&&(b.packed="enum"==b.kind||"scalar"==b.kind&&b.T!=h.BYTES&&b.T!=h.STRING),void 0!==b.oneof){let a="string"==typeof b.oneof?b.oneof:b.oneof.name;k&&k.name==a||(k=new bj(a)),b.oneof=k,k.addField(b)}l.push(b)}return l})(a)),g=a=>{for(let b of a.getType().fields.byMember()){if(b.opt)continue;let c=b.localName;if(b.repeated){a[c]=[];continue}switch(b.kind){case"oneof":a[c]={case:void 0};break;case"enum":a[c]=0;break;case"map":a[c]={};break;case"scalar":a[c]=aA(b.T,b.L)}}},{syntax:"proto3",json:{makeReadOptions:function(a){return a?Object.assign(Object.assign({},aO),a):aO},makeWriteOptions:function(a){return a?Object.assign(Object.assign({},aP),a):aP},readMessage(a,b,c,d){if(null==b||Array.isArray(b)||"object"!=typeof b)throw Error("cannot decode message ".concat(a.typeName," from JSON: ").concat(aS(b)));d=null!=d?d:new a;let e=new Map,f=c.typeRegistry;for(let[g,h]of Object.entries(b)){let b=a.fields.findJsonName(g);if(b){if(b.oneof){if(null===h&&"scalar"==b.kind)continue;let c=e.get(b.oneof);if(void 0!==c)throw Error("cannot decode message ".concat(a.typeName,' from JSON: multiple keys for oneof "').concat(b.oneof.name,'" present: "').concat(c,'", "').concat(g,'"'));e.set(b.oneof,g)}aT(d,h,b,c,a)}else{let b=!1;if((null==f?void 0:f.findExtension)&&g.startsWith("[")&&g.endsWith("]")){let e=f.findExtension(g.substring(1,g.length-1));if(e&&e.extendee.typeName==a.typeName){b=!0;let[a,f]=aE(e);aT(a,h,e.field,c,e),function(a,b,c,d){aJ(b,a);let e=b.runtime.bin.makeReadOptions(d),f=b.runtime.bin.makeWriteOptions(d);if(aI(a,b)){let c=a.getType().runtime.bin.listUnknownFields(a).filter(a=>a.no!=b.field.no);for(let b of(a.getType().runtime.bin.discardUnknownFields(a),c))a.getType().runtime.bin.onUnknownField(a,b.no,b.wireType,b.data)}let g=f.writerFactory(),h=b.field;h.opt||h.repeated||"enum"!=h.kind&&"scalar"!=h.kind||(h=Object.assign(Object.assign({},b.field),{opt:!0})),b.runtime.bin.writeField(h,c,g,f);let i=e.readerFactory(g.finish());for(;i.pos<i.len;){let[b,c]=i.tag(),d=i.skip(c,b);a.getType().runtime.bin.onUnknownField(a,b,c,d)}}(d,e,f(),c)}}if(!b&&!c.ignoreUnknownFields)throw Error("cannot decode message ".concat(a.typeName,' from JSON: key "').concat(g,'" is unknown'))}}return d},writeMessage(a,b){let c,d=a.getType(),e={};try{for(c of d.fields.byNumber()){if(!aK(c,a)){var f;if(c.req)throw"required field not set";if(!b.emitDefaultValues||!((f=c).repeated||"map"==f.kind||!f.oneof&&"message"!=f.kind&&!f.opt&&!f.req))continue}let d=c.oneof?a[c.oneof.localName].value:a[c.localName],g=aW(c,d,b);void 0!==g&&(e[b.useProtoFieldName?c.name:c.jsonName]=g)}let g=b.typeRegistry;if(null==g?void 0:g.findExtensionFor)for(let c of d.runtime.bin.listUnknownFields(a)){let f=g.findExtensionFor(d.typeName,c.no);if(f&&aI(a,f)){let c=function(a,b,c){aJ(b,a);let d=b.runtime.bin.makeReadOptions(c),e=function(a,b){if(!b.repeated&&("enum"==b.kind||"scalar"==b.kind)){for(let c=a.length-1;c>=0;--c)if(a[c].no==b.no)return[a[c]];return[]}return a.filter(a=>a.no===b.no)}(a.getType().runtime.bin.listUnknownFields(a),b.field),[f,g]=aE(b);for(let a of e)b.runtime.bin.readField(f,d.readerFactory(a.data),b.field,a.wireType,d);return g()}(a,f,b),d=aW(f.field,c,b);void 0!==d&&(e[f.field.jsonName]=d)}}}catch(e){let a=c?"cannot encode field ".concat(d.typeName,".").concat(c.name," to JSON"):"cannot encode message ".concat(d.typeName," to JSON"),b=e instanceof Error?e.message:String(e);throw Error(a+(b.length>0?": ".concat(b):""))}return e},readScalar:(a,b,c)=>aU(a,b,null!=c?c:i.BIGINT,!0),writeScalar(a,b,c){if(void 0!==b&&(c||aB(a,b)))return aY(a,b)},debug:aS},bin:{makeReadOptions:function(a){return a?Object.assign(Object.assign({},a$),a):a$},makeWriteOptions:function(a){return a?Object.assign(Object.assign({},a_),a):a_},listUnknownFields(a){var b;return null!=(b=a[aZ])?b:[]},discardUnknownFields(a){delete a[aZ]},writeUnknownFields(a,b){let c=a[aZ];if(c)for(let a of c)b.tag(a.no,a.wireType).raw(a.data)},onUnknownField(a,b,c,d){Array.isArray(a[aZ])||(a[aZ]=[]),a[aZ].push({no:b,wireType:c,data:d})},readMessage(a,b,c,d,e){let f,g,h=a.getType(),i=e?b.len:b.pos+c;for(;b.pos<i&&([f,g]=b.tag(),!0!==e||g!=j.EndGroup);){let c=h.fields.find(f);if(!c){let c=b.skip(g,f);d.readUnknownFields&&this.onUnknownField(a,f,g,c);continue}a0(a,b,c,g,d)}if(e&&(g!=j.EndGroup||f!==c))throw Error("invalid end group tag")},readField:a0,writeMessage(a,b,c){let d=a.getType();for(let e of d.fields.byNumber()){if(!aK(e,a)){if(e.req)throw Error("cannot encode field ".concat(d.typeName,".").concat(e.name," to binary: required field not set"));continue}let f=e.oneof?a[e.oneof.localName].value:a[e.localName];a4(e,f,b,c)}return c.writeUnknownFields&&this.writeUnknownFields(a,b),b},writeField(a,b,c,d){void 0!==b&&a4(a,b,c,d)}},util:Object.assign(Object.assign({},{setEnumType:al,initPartial(a,b){if(void 0!==a)for(let c of b.getType().fields.byMember()){let d=c.localName;if(null!=a[d])switch(c.kind){case"oneof":let e=a[d].case;if(void 0===e)continue;let f=c.findField(e),g=a[d].value;f&&"message"==f.kind&&!aM(g,f.T)?g=new f.T(g):f&&"scalar"===f.kind&&f.T===h.BYTES&&(g=a9(g)),b[d]={case:e,value:g};break;case"scalar":case"enum":let i=a[d];c.T===h.BYTES&&(i=c.repeated?i.map(a9):a9(i)),b[d]=i;break;case"map":switch(c.V.kind){case"scalar":case"enum":if(c.V.T===h.BYTES)for(let[c,e]of Object.entries(a[d]))b[d][c]=a9(e);else Object.assign(b[d],a[d]);break;case"message":let j=c.V.T;for(let c of Object.keys(a[d])){let e=a[d][c];j.fieldWrapper||(e=new j(e)),b[d][c]=e}}break;case"message":let k=c.T;if(c.repeated)b[d]=a[d].map(a=>aM(a,k)?a:new k(a));else{let c=a[d];k.fieldWrapper?"google.protobuf.BytesValue"===k.typeName?b[d]=a9(c):b[d]=c:b[d]=aM(c,k)?c:new k(c)}}}},equals:(a,b,c)=>b===c||!!b&&!!c&&a.fields.byMember().every(a=>{let d=b[a.localName],e=c[a.localName];if(a.repeated){if(d.length!==e.length)return!1;switch(a.kind){case"message":return d.every((b,c)=>a.T.equals(b,e[c]));case"scalar":return d.every((b,c)=>az(a.T,b,e[c]));case"enum":return d.every((a,b)=>az(h.INT32,a,e[b]))}throw Error("repeated cannot contain ".concat(a.kind))}switch(a.kind){case"message":let f=d,g=e;return a.T.fieldWrapper&&(void 0===f||aM(f)||(f=a.T.fieldWrapper.wrapField(f)),void 0===g||aM(g)||(g=a.T.fieldWrapper.wrapField(g))),a.T.equals(f,g);case"enum":return az(h.INT32,d,e);case"scalar":return az(a.T,d,e);case"oneof":if(d.case!==e.case)return!1;let i=a.findField(d.case);if(void 0===i)return!0;switch(i.kind){case"message":return i.T.equals(d.value,e.value);case"enum":return az(h.INT32,d.value,e.value);case"scalar":return az(i.T,d.value,e.value)}throw Error("oneof cannot contain ".concat(i.kind));case"map":let j=Object.keys(d).concat(Object.keys(e));switch(a.V.kind){case"message":let k=a.V.T;return j.every(a=>k.equals(d[a],e[a]));case"enum":return j.every(a=>az(h.INT32,d[a],e[a]));case"scalar":let l=a.V.T;return j.every(a=>az(l,d[a],e[a]))}}}),clone(a){let b=a.getType(),c=new b;for(let d of b.fields.byMember()){let b,e=a[d.localName];if(d.repeated)b=e.map(a8);else if("map"==d.kind)for(let[a,f]of(b=c[d.localName],Object.entries(e)))b[a]=a8(f);else b="oneof"==d.kind?d.findField(e.case)?{case:e.case,value:a8(e.value)}:{case:void 0}:a8(e);c[d.localName]=b}for(let d of b.runtime.bin.listUnknownFields(a))b.runtime.bin.onUnknownField(c,d.no,d.wireType,d.data);return c}}),{newFieldList:f,initFields:g}),makeMessageType(a,b,c){return function(a,b,c,d){var e;let f=null!=(e=null==d?void 0:d.localName)?e:b.substring(b.lastIndexOf(".")+1),g={[f]:function(b){a.util.initFields(this),a.util.initPartial(b,this)}}[f];return Object.setPrototypeOf(g.prototype,new ao),Object.assign(g,{runtime:a,typeName:b,fields:a.util.newFieldList(c),fromBinary:(a,b)=>new g().fromBinary(a,b),fromJson:(a,b)=>new g().fromJson(a,b),fromJsonString:(a,b)=>new g().fromJsonString(a,b),equals:(b,c)=>a.util.equals(g,b,c)}),g}(this,a,b,c)},makeEnum:function(a,b,c){let d={};for(let a of b){let b=an(a);d[b.localName]=b.no,d[b.no]=b.localName}return al(d,a,b),d},makeEnumType:am,getEnumType:function(a){let b=a[ak];return ag(b,"missing enum type on enum object"),b},makeExtension(a,b,c){var d;let e;return d=this,{typeName:a,extendee:b,get field(){if(!e){let b="function"==typeof c?c():c;b.name=a.split(".").pop(),b.jsonName="[".concat(a,"]"),e=d.util.newFieldList([b]).list()[0]}return e},runtime:d}}});class bl extends ao{constructor(a){super(),this.seconds=ay.zero,this.nanos=0,bk.util.initPartial(a,this)}fromJson(a,b){if("string"!=typeof a)throw Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(bk.json.debug(a)));let c=a.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(!c)throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");let d=Date.parse(c[1]+"-"+c[2]+"-"+c[3]+"T"+c[4]+":"+c[5]+":"+c[6]+(c[8]?c[8]:"Z"));if(Number.isNaN(d))throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(d<Date.parse("0001-01-01T00:00:00Z")||d>Date.parse("9999-12-31T23:59:59Z"))throw 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=ay.parse(d/1e3),this.nanos=0,c[7]&&(this.nanos=parseInt("1"+c[7]+"0".repeat(9-c[7].length))-1e9),this}toJson(a){let b=1e3*Number(this.seconds);if(b<Date.parse("0001-01-01T00:00:00Z")||b>Date.parse("9999-12-31T23:59:59Z"))throw 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 Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let c="Z";if(this.nanos>0){let a=(this.nanos+1e9).toString().substring(1);c="000000"===a.substring(3)?"."+a.substring(0,3)+"Z":"000"===a.substring(6)?"."+a.substring(0,6)+"Z":"."+a+"Z"}return new Date(b).toISOString().replace(".000Z",c)}toDate(){return new Date(1e3*Number(this.seconds)+Math.ceil(this.nanos/1e6))}static now(){return bl.fromDate(new Date)}static fromDate(a){let b=a.getTime();return new bl({seconds:ay.parse(Math.floor(b/1e3)),nanos:b%1e3*1e6})}static fromBinary(a,b){return new bl().fromBinary(a,b)}static fromJson(a,b){return new bl().fromJson(a,b)}static fromJsonString(a,b){return new bl().fromJsonString(a,b)}static equals(a,b){return bk.util.equals(bl,a,b)}}bl.runtime=bk,bl.typeName="google.protobuf.Timestamp",bl.fields=bk.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);let bm=bk.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:bl},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:bn,repeated:!0},{no:5,name:"events",kind:"message",T:bp,repeated:!0}]),bn=bk.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:bo,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),bo=bk.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:bl},{no:3,name:"value",kind:"scalar",T:2}]),bp=bk.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:bl},{no:7,name:"normalized_end_timestamp",kind:"message",T:bl,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),bq=bk.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),br=bk.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),bs=bk.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"}]),bt=bk.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),bu=bk.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),bv=bk.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),bw=bk.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"}]),bx=bk.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"}]),by=bk.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),bz=bk.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"}]),bA=bk.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:bB,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:b4}]),bB=bk.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),bC=bk.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:bk.getEnumType(bs),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}]),bD=bk.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:bk.getEnumType(bE)},{no:4,name:"tracks",kind:"message",T:bJ,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:bC},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:bk.getEnumType(bF)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:bk.getEnumType(bw)},{no:18,name:"kind_details",kind:"enum",T:bk.getEnumType(bG),repeated:!0}]),bE=bk.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),bF=bk.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"}]),bG=bk.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"}]),bH=bk.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),bI=bk.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:bK,repeated:!0}]),bJ=bk.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:bk.getEnumType(br)},{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:bk.getEnumType(bs)},{no:10,name:"layers",kind:"message",T:bK,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:bI,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:bk.getEnumType(bH)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:b4},{no:19,name:"audio_features",kind:"enum",T:bk.getEnumType(bz),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:bk.getEnumType(bq)}]),bK=bk.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:bk.getEnumType(bt)},{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}]),bL=bk.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:bk.getEnumType(bM)},{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:bP,oneof:"value"},{no:3,name:"speaker",kind:"message",T:bN,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:bQ,oneof:"value"},{no:7,name:"transcription",kind:"message",T:bR,oneof:"value"},{no:8,name:"metrics",kind:"message",T:bm,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:bT,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:bU,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:bV,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:bW,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:b8,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:b9,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:ca,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),bM=bk.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),bN=bk.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:bO,repeated:!0}]),bO=bk.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}]),bP=bk.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}]),bQ=bk.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),bR=bk.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:bS,repeated:!0}]),bS=bk.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}]),bT=bk.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}]),bU=bk.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}]),bV=bk.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),bW=bk.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:bX,oneof:"value"}]),bX=bk.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}]),bY=bk.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),bZ=bk.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:bk.getEnumType(b$)},{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}]),b$=bk.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),b_=bk.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:bk.getEnumType(b0)},{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}]),b0=bk.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"}]),b1=bk.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:b2},{no:2,name:"screen",kind:"message",T:b2},{no:3,name:"resume_connection",kind:"enum",T:bk.getEnumType(bv)},{no:4,name:"disabled_codecs",kind:"message",T:b3},{no:5,name:"force_relay",kind:"enum",T:bk.getEnumType(bv)}]),b2=bk.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:bk.getEnumType(bv)}]),b3=bk.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:bB,repeated:!0},{no:2,name:"publish",kind:"message",T:bB,repeated:!0}]),b4=bk.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),b5=bk.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),b6=bk.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:bk.getEnumType(b5)},{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"}),b7=bk.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),b8=bk.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:bk.getEnumType(bH)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:b6,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:b7,oneof:"content_header"}],{localName:"DataStream_Header"}),b9=bk.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"}),ca=bk.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"}),cb=bk.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),cc=bk.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),cd=bk.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),ce=bk.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:co,oneof:"message"},{no:2,name:"answer",kind:"message",T:co,oneof:"message"},{no:3,name:"trickle",kind:"message",T:ci,oneof:"message"},{no:4,name:"add_track",kind:"message",T:ch,oneof:"message"},{no:5,name:"mute",kind:"message",T:cj,oneof:"message"},{no:6,name:"subscription",kind:"message",T:cq,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:cr,oneof:"message"},{no:8,name:"leave",kind:"message",T:cu,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:cw,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:cJ,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:cM,oneof:"message"},{no:13,name:"simulate",kind:"message",T:cP,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:cx,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:cQ,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:cs,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:ct,oneof:"message"}]),cf=bk.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:ck,oneof:"message"},{no:2,name:"answer",kind:"message",T:co,oneof:"message"},{no:3,name:"offer",kind:"message",T:co,oneof:"message"},{no:4,name:"trickle",kind:"message",T:ci,oneof:"message"},{no:5,name:"update",kind:"message",T:cp,oneof:"message"},{no:6,name:"track_published",kind:"message",T:cm,oneof:"message"},{no:8,name:"leave",kind:"message",T:cu,oneof:"message"},{no:9,name:"mute",kind:"message",T:cj,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:cz,oneof:"message"},{no:11,name:"room_update",kind:"message",T:cA,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:cC,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:cE,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:cH,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:cK,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:cn,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:cl,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:cR,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:cU,oneof:"message"},{no:22,name:"request_response",kind:"message",T:cV,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:cX,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:cL,oneof:"message"}]),cg=bk.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9}]),ch=bk.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:bk.getEnumType(br)},{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:bk.getEnumType(bs)},{no:9,name:"layers",kind:"message",T:bK,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:cg,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:bk.getEnumType(bH)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:bk.getEnumType(bq)},{no:17,name:"audio_features",kind:"enum",T:bk.getEnumType(bz),repeated:!0}]),ci=bk.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:bk.getEnumType(cb)},{no:3,name:"final",kind:"scalar",T:8}]),cj=bk.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),ck=bk.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:bA},{no:2,name:"participant",kind:"message",T:bD},{no:3,name:"other_participants",kind:"message",T:bD,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:cy,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:b1},{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:bZ},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:bB,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),cl=bk.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:cy,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:b1},{no:3,name:"server_info",kind:"message",T:bZ},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),cm=bk.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:bJ}]),cn=bk.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),co=bk.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}]),cp=bk.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:bD,repeated:!0}]),cq=bk.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:bY,repeated:!0}]),cr=bk.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:bk.getEnumType(bt)},{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}]),cs=bk.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:bk.getEnumType(bz),repeated:!0}]),ct=bk.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}]),cu=bk.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:bk.getEnumType(bw)},{no:3,name:"action",kind:"enum",T:bk.getEnumType(cv)},{no:4,name:"regions",kind:"message",T:cS}]),cv=bk.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),cw=bk.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:bK,repeated:!0}]),cx=bk.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}]),cy=bk.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}]),cz=bk.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:bO,repeated:!0}]),cA=bk.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:bA}]),cB=bk.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:bk.getEnumType(bu)},{no:3,name:"score",kind:"scalar",T:2}]),cC=bk.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:cB,repeated:!0}]),cD=bk.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:bk.getEnumType(cc)}]),cE=bk.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:cD,repeated:!0}]),cF=bk.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:bk.getEnumType(bt)},{no:2,name:"enabled",kind:"scalar",T:8}]),cG=bk.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:cF,repeated:!0}]),cH=bk.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:cF,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:cG,repeated:!0}]),cI=bk.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}]),cJ=bk.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:cI,repeated:!0}]),cK=bk.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}]),cL=bk.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:bA},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:bD},{no:4,name:"other_participants",kind:"message",T:bD,repeated:!0}]),cM=bk.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:co},{no:2,name:"subscription",kind:"message",T:cq},{no:3,name:"publish_tracks",kind:"message",T:cm,repeated:!0},{no:4,name:"data_channels",kind:"message",T:cO,repeated:!0},{no:5,name:"offer",kind:"message",T:co},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:cN,repeated:!0}]),cN=bk.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),cO=bk.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:bk.getEnumType(cb)}]),cP=bk.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:bk.getEnumType(cd),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"}]),cQ=bk.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),cR=bk.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),cS=bk.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:cT,repeated:!0}]),cT=bk.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}]),cU=bk.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:bk.getEnumType(by)}]),cV=bk.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:bk.getEnumType(cW)},{no:3,name:"message",kind:"scalar",T:9}]),cW=bk.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"}]),cX=bk.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]);var cY={exports:{}},cZ=cY.exports,c$=function(){var a;return k?cY.exports:(k=1,a=function(){var a=function(){},b="undefined",c=typeof window!==b&&typeof window.navigator!==b&&/Trident\/|MSIE /.test(window.navigator.userAgent),d=["trace","debug","info","warn","error"],e={},f=null;function g(a,b){var c=a[b];if("function"==typeof c.bind)return c.bind(a);try{return Function.prototype.bind.call(c,a)}catch(b){return function(){return Function.prototype.apply.apply(c,[a,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function i(){for(var c=this.getLevel(),e=0;e<d.length;e++){var f=d[e];this[f]=e<c?a:this.methodFactory(f,c,this.name)}if(this.log=this.debug,typeof console===b&&c<this.levels.SILENT)return"No console available for logging"}function j(a){return function(){typeof console!==b&&(i.call(this),this[a].apply(this,arguments))}}function k(d,e,f){var i;return"debug"===(i=d)&&(i="log"),typeof console!==b&&("trace"===i&&c?h:void 0!==console[i]?g(console,i):void 0!==console.log?g(console,"log"):a)||j.apply(this,arguments)}function l(a,c){var g,h,j,l=this,m="loglevel";function n(){var a;if(typeof window!==b&&m){try{a=window.localStorage[m]}catch(a){}if(typeof a===b)try{var c=window.document.cookie,d=encodeURIComponent(m),e=c.indexOf(d+"=");-1!==e&&(a=/^([^;]+)/.exec(c.slice(e+d.length+1))[1])}catch(a){}return void 0===l.levels[a]&&(a=void 0),a}}function o(a){var b=a;if("string"==typeof b&&void 0!==l.levels[b.toUpperCase()]&&(b=l.levels[b.toUpperCase()]),"number"==typeof b&&b>=0&&b<=l.levels.SILENT)return b;throw TypeError("log.setLevel() called with invalid level: "+a)}"string"==typeof a?m+=":"+a:"symbol"==typeof a&&(m=void 0),l.name=a,l.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},l.methodFactory=c||k,l.getLevel=function(){return null!=j?j:null!=h?h:g},l.setLevel=function(a,c){return j=o(a),!1!==c&&function(a){var c=(d[a]||"silent").toUpperCase();if(typeof window!==b&&m){try{window.localStorage[m]=c;return}catch(a){}try{window.document.cookie=encodeURIComponent(m)+"="+c+";"}catch(a){}}}(j),i.call(l)},l.setDefaultLevel=function(a){h=o(a),n()||l.setLevel(a,!1)},l.resetLevel=function(){if(j=null,typeof window!==b&&m){try{window.localStorage.removeItem(m)}catch(a){}try{window.document.cookie=encodeURIComponent(m)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(a){}}i.call(l)},l.enableAll=function(a){l.setLevel(l.levels.TRACE,a)},l.disableAll=function(a){l.setLevel(l.levels.SILENT,a)},l.rebuild=function(){if(f!==l&&(g=o(f.getLevel())),i.call(l),f===l)for(var a in e)e[a].rebuild()},g=o(f?f.getLevel():"WARN");var p=n();null!=p&&(j=o(p)),i.call(l)}(f=new l).getLogger=function(a){if("symbol"!=typeof a&&"string"!=typeof a||""===a)throw TypeError("You must supply a name when creating a logger.");var b=e[a];return b||(b=e[a]=new l(a,f.methodFactory)),b};var m=typeof window!==b?window.log:void 0;return f.noConflict=function(){return typeof window!==b&&window.log===f&&(window.log=m),f},f.getLoggers=function(){return e},f.default=f,f},cY.exports?cY.exports=a():cZ.log=a(),cY.exports)}();!function(a){a[a.trace=0]="trace",a[a.debug=1]="debug",a[a.info=2]="info",a[a.warn=3]="warn",a[a.error=4]="error",a[a.silent=5]="silent"}(l||(l={})),function(a){a.Default="livekit",a.Room="livekit-room",a.Participant="livekit-participant",a.Track="livekit-track",a.Publication="livekit-track-publication",a.Engine="livekit-engine",a.Signal="livekit-signal",a.PCManager="livekit-pc-manager",a.PCTransport="livekit-pc-transport",a.E2EE="lk-e2ee"}(m||(m={}));let c_=c$.getLogger("livekit");function c0(a){let b=c$.getLogger(a);return b.setDefaultLevel(c_.getLevel()),b}Object.values(m).map(a=>c$.getLogger(a)),c_.setDefaultLevel(l.info);let c1=c$.getLogger("lk-e2ee"),c2=[0,300,1200,2700,4800,7e3,7e3,7e3,7e3,7e3];class c3{constructor(a){this._retryDelays=void 0!==a?[...a]:c2}nextRetryDelayInMs(a){if(a.retryCount>=this._retryDelays.length)return null;let b=this._retryDelays[a.retryCount];return a.retryCount<=1?b:b+1e3*Math.random()}}function c4(a,b,c,d){return new(c||(c=Promise))(function(e,f){function g(a){try{i(d.next(a))}catch(a){f(a)}}function h(a){try{i(d.throw(a))}catch(a){f(a)}}function i(a){var b;a.done?e(a.value):((b=a.value)instanceof c?b:new c(function(a){a(b)})).then(g,h)}i((d=d.apply(a,b||[])).next())})}function c5(a){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var b,c=a[Symbol.asyncIterator];return c?c.call(a):(a=function(a){var b="function"==typeof Symbol&&Symbol.iterator,c=b&&a[b],d=0;if(c)return c.call(a);if(a&&"number"==typeof a.length)return{next:function(){return a&&d>=a.length&&(a=void 0),{value:a&&a[d++],done:!a}}};throw TypeError(b?"Object is not iterable.":"Symbol.iterator is not defined.")}(a),b={},d("next"),d("throw"),d("return"),b[Symbol.asyncIterator]=function(){return this},b);function d(c){b[c]=a[c]&&function(b){return new Promise(function(d,e){var f,g,h;f=d,g=e,h=(b=a[c](b)).done,Promise.resolve(b.value).then(function(a){f({value:a,done:h})},g)})}}}"function"==typeof SuppressedError&&SuppressedError;var c6={exports:{}},c7=function(){if(n)return c6.exports;n=1;var a,b="object"==typeof Reflect?Reflect:null,c=b&&"function"==typeof b.apply?b.apply:function(a,b,c){return Function.prototype.apply.call(a,b,c)};a=b&&"function"==typeof b.ownKeys?b.ownKeys:Object.getOwnPropertySymbols?function(a){return Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))}:function(a){return Object.getOwnPropertyNames(a)};var d=Number.isNaN||function(a){return a!=a};function e(){e.init.call(this)}c6.exports=e,c6.exports.once=function(a,b){return new Promise(function(c,d){var e,f,g;function h(c){a.removeListener(b,i),d(c)}function i(){"function"==typeof a.removeListener&&a.removeListener("error",h),c([].slice.call(arguments))}p(a,b,i,{once:!0}),"error"!==b&&(e=a,f=h,g={once:!0},"function"==typeof e.on&&p(e,"error",f,g))})},e.EventEmitter=e,e.prototype._events=void 0,e.prototype._eventsCount=0,e.prototype._maxListeners=void 0;var f=10;function g(a){if("function"!=typeof a)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof a)}function h(a){return void 0===a._maxListeners?e.defaultMaxListeners:a._maxListeners}function i(a,b,c,d){if(g(c),void 0===(f=a._events)?(f=a._events=Object.create(null),a._eventsCount=0):(void 0!==f.newListener&&(a.emit("newListener",b,c.listener?c.listener:c),f=a._events),i=f[b]),void 0===i)i=f[b]=c,++a._eventsCount;else if("function"==typeof i?i=f[b]=d?[c,i]:[i,c]:d?i.unshift(c):i.push(c),(e=h(a))>0&&i.length>e&&!i.warned){i.warned=!0;var e,f,i,j=Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(b)+" listeners added. Use emitter.setMaxListeners() to increase limit");j.name="MaxListenersExceededWarning",j.emitter=a,j.type=b,j.count=i.length,console&&console.warn&&console.warn(j)}return a}function j(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function k(a,b,c){var d={fired:!1,wrapFn:void 0,target:a,type:b,listener:c},e=j.bind(d);return e.listener=c,d.wrapFn=e,e}function l(a,b,c){var d=a._events;if(void 0===d)return[];var e=d[b];return void 0===e?[]:"function"==typeof e?c?[e.listener||e]:[e]:c?function(a){for(var b=Array(a.length),c=0;c<b.length;++c)b[c]=a[c].listener||a[c];return b}(e):o(e,e.length)}function m(a){var b=this._events;if(void 0!==b){var c=b[a];if("function"==typeof c)return 1;if(void 0!==c)return c.length}return 0}function o(a,b){for(var c=Array(b),d=0;d<b;++d)c[d]=a[d];return c}function p(a,b,c,d){if("function"==typeof a.on)d.once?a.once(b,c):a.on(b,c);else if("function"==typeof a.addEventListener)a.addEventListener(b,function e(f){d.once&&a.removeEventListener(b,e),c(f)});else throw TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof a)}return Object.defineProperty(e,"defaultMaxListeners",{enumerable:!0,get:function(){return f},set:function(a){if("number"!=typeof a||a<0||d(a))throw RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+a+".");f=a}}),e.init=function(){(void 0===this._events||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},e.prototype.setMaxListeners=function(a){if("number"!=typeof a||a<0||d(a))throw RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+a+".");return this._maxListeners=a,this},e.prototype.getMaxListeners=function(){return h(this)},e.prototype.emit=function(a){for(var b=[],d=1;d<arguments.length;d++)b.push(arguments[d]);var e="error"===a,f=this._events;if(void 0!==f)e=e&&void 0===f.error;else if(!e)return!1;if(e){if(b.length>0&&(g=b[0]),g instanceof Error)throw g;var g,h=Error("Unhandled error."+(g?" ("+g.message+")":""));throw h.context=g,h}var i=f[a];if(void 0===i)return!1;if("function"==typeof i)c(i,this,b);else for(var j=i.length,k=o(i,j),d=0;d<j;++d)c(k[d],this,b);return!0},e.prototype.addListener=function(a,b){return i(this,a,b,!1)},e.prototype.on=e.prototype.addListener,e.prototype.prependListener=function(a,b){return i(this,a,b,!0)},e.prototype.once=function(a,b){return g(b),this.on(a,k(this,a,b)),this},e.prototype.prependOnceListener=function(a,b){return g(b),this.prependListener(a,k(this,a,b)),this},e.prototype.removeListener=function(a,b){var c,d,e,f,h;if(g(b),void 0===(d=this._events)||void 0===(c=d[a]))return this;if(c===b||c.listener===b)0==--this._eventsCount?this._events=Object.create(null):(delete d[a],d.removeListener&&this.emit("removeListener",a,c.listener||b));else if("function"!=typeof c){for(e=-1,f=c.length-1;f>=0;f--)if(c[f]===b||c[f].listener===b){h=c[f].listener,e=f;break}if(e<0)return this;0===e?c.shift():function(a,b){for(;b+1<a.length;b++)a[b]=a[b+1];a.pop()}(c,e),1===c.length&&(d[a]=c[0]),void 0!==d.removeListener&&this.emit("removeListener",a,h||b)}return this},e.prototype.off=e.prototype.removeListener,e.prototype.removeAllListeners=function(a){var b,c,d;if(void 0===(c=this._events))return this;if(void 0===c.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==c[a]&&(0==--this._eventsCount?this._events=Object.create(null):delete c[a]),this;if(0==arguments.length){var e,f=Object.keys(c);for(d=0;d<f.length;++d)"removeListener"!==(e=f[d])&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(b=c[a]))this.removeListener(a,b);else if(void 0!==b)for(d=b.length-1;d>=0;d--)this.removeListener(a,b[d]);return this},e.prototype.listeners=function(a){return l(this,a,!0)},e.prototype.rawListeners=function(a){return l(this,a,!1)},e.listenerCount=function(a,b){return"function"==typeof a.listenerCount?a.listenerCount(b):m.call(a,b)},e.prototype.listenerCount=m,e.prototype.eventNames=function(){return this._eventsCount>0?a(this._events):[]},c6.exports}();let c8=!0,c9=!0;function da(a,b,c){let d=a.match(b);return d&&d.length>=c&&parseFloat(d[c],10)}function db(a,b,c){if(!a.RTCPeerConnection)return;let d=a.RTCPeerConnection.prototype,e=d.addEventListener;d.addEventListener=function(a,d){if(a!==b)return e.apply(this,arguments);let f=a=>{let b=c(a);b&&(d.handleEvent?d.handleEvent(b):d(b))};return this._eventMap=this._eventMap||{},this._eventMap[b]||(this._eventMap[b]=new Map),this._eventMap[b].set(d,f),e.apply(this,[a,f])};let f=d.removeEventListener;d.removeEventListener=function(a,c){if(a!==b||!this._eventMap||!this._eventMap[b]||!this._eventMap[b].has(c))return f.apply(this,arguments);let d=this._eventMap[b].get(c);return this._eventMap[b].delete(c),0===this._eventMap[b].size&&delete this._eventMap[b],0===Object.keys(this._eventMap).length&&delete this._eventMap,f.apply(this,[a,d])},Object.defineProperty(d,"on"+b,{get(){return this["_on"+b]},set(a){this["_on"+b]&&(this.removeEventListener(b,this["_on"+b]),delete this["_on"+b]),a&&this.addEventListener(b,this["_on"+b]=a)},enumerable:!0,configurable:!0})}function dc(a){return"boolean"!=typeof a?Error("Argument type: "+typeof a+". Please use a boolean."):(c8=a,a?"adapter.js logging disabled":"adapter.js logging enabled")}function dd(a){return"boolean"!=typeof a?Error("Argument type: "+typeof a+". Please use a boolean."):(c9=!a,"adapter.js deprecation warnings "+(a?"disabled":"enabled"))}function de(){"object"==typeof window&&(c8||"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments))}function df(a,b){c9&&console.warn(a+" is deprecated, please use "+b+" instead.")}function dg(a){return"[object Object]"===Object.prototype.toString.call(a)}function dh(a,b,c){let d=c?"outbound-rtp":"inbound-rtp",e=new Map;if(null===b)return e;let f=[];return a.forEach(a=>{"track"===a.type&&a.trackIdentifier===b.id&&f.push(a)}),f.forEach(b=>{a.forEach(c=>{c.type===d&&c.trackId===b.id&&function a(b,c,d){!c||d.has(c.id)||(d.set(c.id,c),Object.keys(c).forEach(e=>{e.endsWith("Id")?a(b,b.get(c[e]),d):e.endsWith("Ids")&&c[e].forEach(c=>{a(b,b.get(c),d)})}))}(a,c,e)})}),e}function di(a,b){let c=a&&a.navigator;if(!c.mediaDevices)return;let d=function(a){if("object"!=typeof a||a.mandatory||a.optional)return a;let b={};return Object.keys(a).forEach(c=>{if("require"===c||"advanced"===c||"mediaSource"===c)return;let d="object"==typeof a[c]?a[c]:{ideal:a[c]};void 0!==d.exact&&"number"==typeof d.exact&&(d.min=d.max=d.exact);let e=function(a,b){return a?a+b.charAt(0).toUpperCase()+b.slice(1):"deviceId"===b?"sourceId":b};if(void 0!==d.ideal){b.optional=b.optional||[];let a={};"number"==typeof d.ideal?(a[e("min",c)]=d.ideal,b.optional.push(a),(a={})[e("max",c)]=d.ideal):a[e("",c)]=d.ideal,b.optional.push(a)}void 0!==d.exact&&"number"!=typeof d.exact?(b.mandatory=b.mandatory||{},b.mandatory[e("",c)]=d.exact):["min","max"].forEach(a=>{void 0!==d[a]&&(b.mandatory=b.mandatory||{},b.mandatory[e(a,c)]=d[a])})}),a.advanced&&(b.optional=(b.optional||[]).concat(a.advanced)),b},e=function(a,e){if(b.version>=61)return e(a);if((a=JSON.parse(JSON.stringify(a)))&&"object"==typeof a.audio){let b=function(a,b,c){b in a&&!(c in a)&&(a[c]=a[b],delete a[b])};b((a=JSON.parse(JSON.stringify(a))).audio,"autoGainControl","googAutoGainControl"),b(a.audio,"noiseSuppression","googNoiseSuppression"),a.audio=d(a.audio)}if(a&&"object"==typeof a.video){let f=a.video.facingMode;f=f&&("object"==typeof f?f:{ideal:f});let g=b.version<66;if(f&&("user"===f.exact||"environment"===f.exact||"user"===f.ideal||"environment"===f.ideal)&&!(c.mediaDevices.getSupportedConstraints&&c.mediaDevices.getSupportedConstraints().facingMode&&!g)){let b;if(delete a.video.facingMode,"environment"===f.exact||"environment"===f.ideal?b=["back","rear"]:("user"===f.exact||"user"===f.ideal)&&(b=["front"]),b)return c.mediaDevices.enumerateDevices().then(c=>{let g=(c=c.filter(a=>"videoinput"===a.kind)).find(a=>b.some(b=>a.label.toLowerCase().includes(b)));return!g&&c.length&&b.includes("back")&&(g=c[c.length-1]),g&&(a.video.deviceId=f.exact?{exact:g.deviceId}:{ideal:g.deviceId}),a.video=d(a.video),de("chrome: "+JSON.stringify(a)),e(a)})}a.video=d(a.video)}return de("chrome: "+JSON.stringify(a)),e(a)},f=function(a){return b.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}}};if(c.getUserMedia=(function(a,b,d){e(a,a=>{c.webkitGetUserMedia(a,b,a=>{d&&d(f(a))})})}).bind(c),c.mediaDevices.getUserMedia){let a=c.mediaDevices.getUserMedia.bind(c.mediaDevices);c.mediaDevices.getUserMedia=function(b){return e(b,b=>a(b).then(a=>{if(b.audio&&!a.getAudioTracks().length||b.video&&!a.getVideoTracks().length)throw a.getTracks().forEach(a=>{a.stop()}),new DOMException("","NotFoundError");return a},a=>Promise.reject(f(a))))}}}function dj(a){a.MediaStream=a.MediaStream||a.webkitMediaStream}function dk(a){if("object"!=typeof a||!a.RTCPeerConnection||"ontrack"in a.RTCPeerConnection.prototype)db(a,"track",a=>(a.transceiver||Object.defineProperty(a,"transceiver",{value:{receiver:a.receiver}}),a));else{Object.defineProperty(a.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(a){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=a)},enumerable:!0,configurable:!0});let b=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=b=>{b.stream.addEventListener("addtrack",c=>{let d;d=a.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(a=>a.track&&a.track.id===c.track.id):{track:c.track};let e=new Event("track");e.track=c.track,e.receiver=d,e.transceiver={receiver:d},e.streams=[b.stream],this.dispatchEvent(e)}),b.stream.getTracks().forEach(c=>{let d;d=a.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(a=>a.track&&a.track.id===c.id):{track:c};let e=new Event("track");e.track=c,e.receiver=d,e.transceiver={receiver:d},e.streams=[b.stream],this.dispatchEvent(e)})},this.addEventListener("addstream",this._ontrackpoly)),b.apply(this,arguments)}}}function dl(a){if("object"==typeof a&&a.RTCPeerConnection&&!("getSenders"in a.RTCPeerConnection.prototype)&&"createDTMFSender"in a.RTCPeerConnection.prototype){let b=function(a,b){return{track:b,get dtmf(){return void 0===this._dtmf&&("audio"===b.kind?this._dtmf=a.createDTMFSender(b):this._dtmf=null),this._dtmf},_pc:a}};if(!a.RTCPeerConnection.prototype.getSenders){a.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let c=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addTrack=function(a,d){let e=c.apply(this,arguments);return e||(e=b(this,a),this._senders.push(e)),e};let d=a.RTCPeerConnection.prototype.removeTrack;a.RTCPeerConnection.prototype.removeTrack=function(a){d.apply(this,arguments);let b=this._senders.indexOf(a);-1!==b&&this._senders.splice(b,1)}}let c=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(a){this._senders=this._senders||[],c.apply(this,[a]),a.getTracks().forEach(a=>{this._senders.push(b(this,a))})};let d=a.RTCPeerConnection.prototype.removeStream;a.RTCPeerConnection.prototype.removeStream=function(a){this._senders=this._senders||[],d.apply(this,[a]),a.getTracks().forEach(a=>{let b=this._senders.find(b=>b.track===a);b&&this._senders.splice(this._senders.indexOf(b),1)})}}else if("object"==typeof a&&a.RTCPeerConnection&&"getSenders"in a.RTCPeerConnection.prototype&&"createDTMFSender"in a.RTCPeerConnection.prototype&&a.RTCRtpSender&&!("dtmf"in a.RTCRtpSender.prototype)){let b=a.RTCPeerConnection.prototype.getSenders;a.RTCPeerConnection.prototype.getSenders=function(){let a=b.apply(this,[]);return a.forEach(a=>a._pc=this),a},Object.defineProperty(a.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function dm(a){if(!("object"==typeof a&&a.RTCPeerConnection&&a.RTCRtpSender&&a.RTCRtpReceiver))return;if(!("getStats"in a.RTCRtpSender.prototype)){let b=a.RTCPeerConnection.prototype.getSenders;b&&(a.RTCPeerConnection.prototype.getSenders=function(){let a=b.apply(this,[]);return a.forEach(a=>a._pc=this),a});let c=a.RTCPeerConnection.prototype.addTrack;c&&(a.RTCPeerConnection.prototype.addTrack=function(){let a=c.apply(this,arguments);return a._pc=this,a}),a.RTCRtpSender.prototype.getStats=function(){let a=this;return this._pc.getStats().then(b=>dh(b,a.track,!0))}}if(!("getStats"in a.RTCRtpReceiver.prototype)){let b=a.RTCPeerConnection.prototype.getReceivers;b&&(a.RTCPeerConnection.prototype.getReceivers=function(){let a=b.apply(this,[]);return a.forEach(a=>a._pc=this),a}),db(a,"track",a=>(a.receiver._pc=a.srcElement,a)),a.RTCRtpReceiver.prototype.getStats=function(){let a=this;return this._pc.getStats().then(b=>dh(b,a.track,!1))}}if(!("getStats"in a.RTCRtpSender.prototype&&"getStats"in a.RTCRtpReceiver.prototype))return;let b=a.RTCPeerConnection.prototype.getStats;a.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof a.MediaStreamTrack){let a,b,c,d=arguments[0];return(this.getSenders().forEach(b=>{b.track===d&&(a?c=!0:a=b)}),this.getReceivers().forEach(a=>(a.track===d&&(b?c=!0:b=a),a.track===d)),c||a&&b)?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):a?a.getStats():b?b.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return b.apply(this,arguments)}}function dn(a){a.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(a=>this._shimmedLocalStreams[a][0])};let b=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addTrack=function(a,c){if(!c)return b.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let d=b.apply(this,arguments);return this._shimmedLocalStreams[c.id]?-1===this._shimmedLocalStreams[c.id].indexOf(d)&&this._shimmedLocalStreams[c.id].push(d):this._shimmedLocalStreams[c.id]=[c,d],d};let c=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(a){this._shimmedLocalStreams=this._shimmedLocalStreams||{},a.getTracks().forEach(a=>{if(this.getSenders().find(b=>b.track===a))throw new DOMException("Track already exists.","InvalidAccessError")});let b=this.getSenders();c.apply(this,arguments);let d=this.getSenders().filter(a=>-1===b.indexOf(a));this._shimmedLocalStreams[a.id]=[a].concat(d)};let d=a.RTCPeerConnection.prototype.removeStream;a.RTCPeerConnection.prototype.removeStream=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[a.id],d.apply(this,arguments)};let e=a.RTCPeerConnection.prototype.removeTrack;a.RTCPeerConnection.prototype.removeTrack=function(a){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},a&&Object.keys(this._shimmedLocalStreams).forEach(b=>{let c=this._shimmedLocalStreams[b].indexOf(a);-1!==c&&this._shimmedLocalStreams[b].splice(c,1),1===this._shimmedLocalStreams[b].length&&delete this._shimmedLocalStreams[b]}),e.apply(this,arguments)}}function dp(a,b){if(!a.RTCPeerConnection)return;if(a.RTCPeerConnection.prototype.addTrack&&b.version>=65)return dn(a);let c=a.RTCPeerConnection.prototype.getLocalStreams;a.RTCPeerConnection.prototype.getLocalStreams=function(){let a=c.apply(this);return this._reverseStreams=this._reverseStreams||{},a.map(a=>this._reverseStreams[a.id])};let d=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(b){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},b.getTracks().forEach(a=>{if(this.getSenders().find(b=>b.track===a))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[b.id]){let c=new a.MediaStream(b.getTracks());this._streams[b.id]=c,this._reverseStreams[c.id]=b,b=c}d.apply(this,[b])};let e=a.RTCPeerConnection.prototype.removeStream;function f(a,b){let c=b.sdp;return Object.keys(a._reverseStreams||[]).forEach(b=>{let d=a._reverseStreams[b],e=a._streams[d.id];c=c.replace(RegExp(e.id,"g"),d.id)}),new RTCSessionDescription({type:b.type,sdp:c})}a.RTCPeerConnection.prototype.removeStream=function(a){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},e.apply(this,[this._streams[a.id]||a]),delete this._reverseStreams[this._streams[a.id]?this._streams[a.id].id:a.id],delete this._streams[a.id]},a.RTCPeerConnection.prototype.addTrack=function(b,c){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");let d=[].slice.call(arguments,1);if(1!==d.length||!d[0].getTracks().find(a=>a===b))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(a=>a.track===b))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};let e=this._streams[c.id];if(e)e.addTrack(b),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{let d=new a.MediaStream([b]);this._streams[c.id]=d,this._reverseStreams[d.id]=c,this.addStream(d)}return this.getSenders().find(a=>a.track===b)},["createOffer","createAnswer"].forEach(function(b){let c=a.RTCPeerConnection.prototype[b];a.RTCPeerConnection.prototype[b]=({[b](){let a=arguments,b=arguments.length&&"function"==typeof arguments[0];return b?c.apply(this,[b=>{let c=f(this,b);a[0].apply(null,[c])},b=>{a[1]&&a[1].apply(null,b)},arguments[2]]):c.apply(this,arguments).then(a=>f(this,a))}})[b]});let g=a.RTCPeerConnection.prototype.setLocalDescription;a.RTCPeerConnection.prototype.setLocalDescription=function(){var a,b;let c;return arguments.length&&arguments[0].type?(arguments[0]=(a=this,b=arguments[0],c=b.sdp,Object.keys(a._reverseStreams||[]).forEach(b=>{let d=a._reverseStreams[b],e=a._streams[d.id];c=c.replace(RegExp(d.id,"g"),e.id)}),new RTCSessionDescription({type:b.type,sdp:c})),g.apply(this,arguments)):g.apply(this,arguments)};let h=Object.getOwnPropertyDescriptor(a.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(a.RTCPeerConnection.prototype,"localDescription",{get(){let a=h.get.apply(this);return""===a.type?a:f(this,a)}}),a.RTCPeerConnection.prototype.removeTrack=function(a){let b;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!a._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(a._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{},Object.keys(this._streams).forEach(c=>{this._streams[c].getTracks().find(b=>a.track===b)&&(b=this._streams[c])}),b&&(1===b.getTracks().length?this.removeStream(this._reverseStreams[b.id]):b.removeTrack(a.track),this.dispatchEvent(new Event("negotiationneeded")))}}function dq(a,b){!a.RTCPeerConnection&&a.webkitRTCPeerConnection&&(a.RTCPeerConnection=a.webkitRTCPeerConnection),a.RTCPeerConnection&&b.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(b){let c=a.RTCPeerConnection.prototype[b];a.RTCPeerConnection.prototype[b]=({[b](){return arguments[0]=new("addIceCandidate"===b?a.RTCIceCandidate:a.RTCSessionDescription)(arguments[0]),c.apply(this,arguments)}})[b]})}function dr(a,b){db(a,"negotiationneeded",a=>{let c=a.target;if(!(b.version<72)&&(!c.getConfiguration||"plan-b"!==c.getConfiguration().sdpSemantics)||"stable"===c.signalingState)return a})}var ds=Object.freeze({__proto__:null,fixNegotiationNeeded:dr,shimAddTrackRemoveTrack:dp,shimAddTrackRemoveTrackWithNative:dn,shimGetSendersWithDtmf:dl,shimGetUserMedia:di,shimMediaStream:dj,shimOnTrack:dk,shimPeerConnection:dq,shimSenderReceiverGetStats:dm});function dt(a,b){let c=a&&a.navigator,d=a&&a.MediaStreamTrack;if(c.getUserMedia=function(a,b,d){df("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),c.mediaDevices.getUserMedia(a).then(b,d)},!(b.version>55&&"autoGainControl"in c.mediaDevices.getSupportedConstraints())){let a=function(a,b,c){b in a&&!(c in a)&&(a[c]=a[b],delete a[b])},b=c.mediaDevices.getUserMedia.bind(c.mediaDevices);if(c.mediaDevices.getUserMedia=function(c){return"object"==typeof c&&"object"==typeof c.audio&&(a((c=JSON.parse(JSON.stringify(c))).audio,"autoGainControl","mozAutoGainControl"),a(c.audio,"noiseSuppression","mozNoiseSuppression")),b(c)},d&&d.prototype.getSettings){let b=d.prototype.getSettings;d.prototype.getSettings=function(){let c=b.apply(this,arguments);return a(c,"mozAutoGainControl","autoGainControl"),a(c,"mozNoiseSuppression","noiseSuppression"),c}}if(d&&d.prototype.applyConstraints){let b=d.prototype.applyConstraints;d.prototype.applyConstraints=function(c){return"audio"===this.kind&&"object"==typeof c&&(a(c=JSON.parse(JSON.stringify(c)),"autoGainControl","mozAutoGainControl"),a(c,"noiseSuppression","mozNoiseSuppression")),b.apply(this,[c])}}}}function du(a){"object"==typeof a&&a.RTCTrackEvent&&"receiver"in a.RTCTrackEvent.prototype&&!("transceiver"in a.RTCTrackEvent.prototype)&&Object.defineProperty(a.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function dv(a,b){if("object"!=typeof a||!(a.RTCPeerConnection||a.mozRTCPeerConnection))return;!a.RTCPeerConnection&&a.mozRTCPeerConnection&&(a.RTCPeerConnection=a.mozRTCPeerConnection),b.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(b){let c=a.RTCPeerConnection.prototype[b];a.RTCPeerConnection.prototype[b]=({[b](){return arguments[0]=new("addIceCandidate"===b?a.RTCIceCandidate:a.RTCSessionDescription)(arguments[0]),c.apply(this,arguments)}})[b]});let c={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},d=a.RTCPeerConnection.prototype.getStats;a.RTCPeerConnection.prototype.getStats=function(){let[a,e,f]=arguments;return d.apply(this,[a||null]).then(a=>{if(b.version<53&&!e)try{a.forEach(a=>{a.type=c[a.type]||a.type})}catch(b){if("TypeError"!==b.name)throw b;a.forEach((b,d)=>{a.set(d,Object.assign({},b,{type:c[b.type]||b.type}))})}return a}).then(e,f)}}function dw(a){if(!("object"==typeof a&&a.RTCPeerConnection&&a.RTCRtpSender)||a.RTCRtpSender&&"getStats"in a.RTCRtpSender.prototype)return;let b=a.RTCPeerConnection.prototype.getSenders;b&&(a.RTCPeerConnection.prototype.getSenders=function(){let a=b.apply(this,[]);return a.forEach(a=>a._pc=this),a});let c=a.RTCPeerConnection.prototype.addTrack;c&&(a.RTCPeerConnection.prototype.addTrack=function(){let a=c.apply(this,arguments);return a._pc=this,a}),a.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function dx(a){if(!("object"==typeof a&&a.RTCPeerConnection&&a.RTCRtpSender)||a.RTCRtpSender&&"getStats"in a.RTCRtpReceiver.prototype)return;let b=a.RTCPeerConnection.prototype.getReceivers;b&&(a.RTCPeerConnection.prototype.getReceivers=function(){let a=b.apply(this,[]);return a.forEach(a=>a._pc=this),a}),db(a,"track",a=>(a.receiver._pc=a.srcElement,a)),a.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function dy(a){!a.RTCPeerConnection||"removeStream"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.removeStream=function(a){df("removeStream","removeTrack"),this.getSenders().forEach(b=>{b.track&&a.getTracks().includes(b.track)&&this.removeTrack(b)})})}function dz(a){a.DataChannel&&!a.RTCDataChannel&&(a.RTCDataChannel=a.DataChannel)}function dA(a){if(!("object"==typeof a&&a.RTCPeerConnection))return;let b=a.RTCPeerConnection.prototype.addTransceiver;b&&(a.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let a=arguments[1]&&arguments[1].sendEncodings;void 0===a&&(a=[]);let c=(a=[...a]).length>0;c&&a.forEach(a=>{if("rid"in a&&!/^[a-z0-9]{0,16}$/i.test(a.rid))throw TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in a&&!(parseFloat(a.scaleResolutionDownBy)>=1))throw RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in a&&!(parseFloat(a.maxFramerate)>=0))throw RangeError("max_framerate must be >= 0.0")});let d=b.apply(this,arguments);if(c){let{sender:b}=d,c=b.getParameters();"encodings"in c&&(1!==c.encodings.length||0!==Object.keys(c.encodings[0]).length)||(c.encodings=a,b.sendEncodings=a,this.setParametersPromises.push(b.setParameters(c).then(()=>{delete b.sendEncodings}).catch(()=>{delete b.sendEncodings})))}return d})}function dB(a){if(!("object"==typeof a&&a.RTCRtpSender))return;let b=a.RTCRtpSender.prototype.getParameters;b&&(a.RTCRtpSender.prototype.getParameters=function(){let a=b.apply(this,arguments);return"encodings"in a||(a.encodings=[].concat(this.sendEncodings||[{}])),a})}function dC(a){if(!("object"==typeof a&&a.RTCPeerConnection))return;let b=a.RTCPeerConnection.prototype.createOffer;a.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>b.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):b.apply(this,arguments)}}function dD(a){if(!("object"==typeof a&&a.RTCPeerConnection))return;let b=a.RTCPeerConnection.prototype.createAnswer;a.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>b.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):b.apply(this,arguments)}}var dE=Object.freeze({__proto__:null,shimAddTransceiver:dA,shimCreateAnswer:dD,shimCreateOffer:dC,shimGetDisplayMedia:function(a,b){a.navigator.mediaDevices&&"getDisplayMedia"in a.navigator.mediaDevices||a.navigator.mediaDevices&&(a.navigator.mediaDevices.getDisplayMedia=function(c){if(!(c&&c.video)){let a=new DOMException("getDisplayMedia without video constraints is undefined");return a.name="NotFoundError",a.code=8,Promise.reject(a)}return!0===c.video?c.video={mediaSource:b}:c.video.mediaSource=b,a.navigator.mediaDevices.getUserMedia(c)})},shimGetParameters:dB,shimGetUserMedia:dt,shimOnTrack:du,shimPeerConnection:dv,shimRTCDataChannel:dz,shimReceiverGetStats:dx,shimRemoveStream:dy,shimSenderGetStats:dw});function dF(a){if("object"==typeof a&&a.RTCPeerConnection){if("getLocalStreams"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in a.RTCPeerConnection.prototype)){let b=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addStream=function(a){this._localStreams||(this._localStreams=[]),this._localStreams.includes(a)||this._localStreams.push(a),a.getAudioTracks().forEach(c=>b.call(this,c,a)),a.getVideoTracks().forEach(c=>b.call(this,c,a))},a.RTCPeerConnection.prototype.addTrack=function(a){for(var c=arguments.length,d=Array(c>1?c-1:0),e=1;e<c;e++)d[e-1]=arguments[e];return d&&d.forEach(a=>{this._localStreams?this._localStreams.includes(a)||this._localStreams.push(a):this._localStreams=[a]}),b.apply(this,arguments)}}"removeStream"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.removeStream=function(a){this._localStreams||(this._localStreams=[]);let b=this._localStreams.indexOf(a);if(-1===b)return;this._localStreams.splice(b,1);let c=a.getTracks();this.getSenders().forEach(a=>{c.includes(a.track)&&this.removeTrack(a)})})}}function dG(a){if("object"==typeof a&&a.RTCPeerConnection&&("getRemoteStreams"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in a.RTCPeerConnection.prototype))){Object.defineProperty(a.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(a){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=a),this.addEventListener("track",this._onaddstreampoly=a=>{a.streams.forEach(a=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(a))return;this._remoteStreams.push(a);let b=new Event("addstream");b.stream=a,this.dispatchEvent(b)})})}});let b=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(){let a=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(b){b.streams.forEach(b=>{if(a._remoteStreams||(a._remoteStreams=[]),a._remoteStreams.indexOf(b)>=0)return;a._remoteStreams.push(b);let c=new Event("addstream");c.stream=b,a.dispatchEvent(c)})}),b.apply(a,arguments)}}}function dH(a){if("object"!=typeof a||!a.RTCPeerConnection)return;let b=a.RTCPeerConnection.prototype,c=b.createOffer,d=b.createAnswer,e=b.setLocalDescription,f=b.setRemoteDescription,g=b.addIceCandidate;b.createOffer=function(a,b){let d=arguments.length>=2?arguments[2]:arguments[0],e=c.apply(this,[d]);return b?(e.then(a,b),Promise.resolve()):e},b.createAnswer=function(a,b){let c=arguments.length>=2?arguments[2]:arguments[0],e=d.apply(this,[c]);return b?(e.then(a,b),Promise.resolve()):e};let h=function(a,b,c){let d=e.apply(this,[a]);return c?(d.then(b,c),Promise.resolve()):d};b.setLocalDescription=h,b.setRemoteDescription=h=function(a,b,c){let d=f.apply(this,[a]);return c?(d.then(b,c),Promise.resolve()):d},b.addIceCandidate=function(a,b,c){let d=g.apply(this,[a]);return c?(d.then(b,c),Promise.resolve()):d}}function dI(a){let b=a&&a.navigator;if(b.mediaDevices&&b.mediaDevices.getUserMedia){let a=b.mediaDevices,c=a.getUserMedia.bind(a);b.mediaDevices.getUserMedia=a=>c(dJ(a))}!b.getUserMedia&&b.mediaDevices&&b.mediaDevices.getUserMedia&&(b.getUserMedia=(function(a,c,d){b.mediaDevices.getUserMedia(a).then(c,d)}).bind(b))}function dJ(a){return a&&void 0!==a.video?Object.assign({},a,{video:function a(b){return dg(b)?Object.keys(b).reduce(function(c,d){let e=dg(b[d]),f=e?a(b[d]):b[d],g=e&&!Object.keys(f).length;return void 0===f||g?c:Object.assign(c,{[d]:f})},{}):b}(a.video)}):a}function dK(a){if(!a.RTCPeerConnection)return;let b=a.RTCPeerConnection;a.RTCPeerConnection=function(a,c){if(a&&a.iceServers){let b=[];for(let c=0;c<a.iceServers.length;c++){let d=a.iceServers[c];void 0===d.urls&&d.url?(df("RTCIceServer.url","RTCIceServer.urls"),(d=JSON.parse(JSON.stringify(d))).urls=d.url,delete d.url,b.push(d)):b.push(a.iceServers[c])}a.iceServers=b}return new b(a,c)},a.RTCPeerConnection.prototype=b.prototype,"generateCertificate"in b&&Object.defineProperty(a.RTCPeerConnection,"generateCertificate",{get:()=>b.generateCertificate})}function dL(a){"object"==typeof a&&a.RTCTrackEvent&&"receiver"in a.RTCTrackEvent.prototype&&!("transceiver"in a.RTCTrackEvent.prototype)&&Object.defineProperty(a.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function dM(a){let b=a.RTCPeerConnection.prototype.createOffer;a.RTCPeerConnection.prototype.createOffer=function(a){if(a){void 0!==a.offerToReceiveAudio&&(a.offerToReceiveAudio=!!a.offerToReceiveAudio);let b=this.getTransceivers().find(a=>"audio"===a.receiver.track.kind);!1===a.offerToReceiveAudio&&b?"sendrecv"===b.direction?b.setDirection?b.setDirection("sendonly"):b.direction="sendonly":"recvonly"===b.direction&&(b.setDirection?b.setDirection("inactive"):b.direction="inactive"):!0!==a.offerToReceiveAudio||b||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==a.offerToReceiveVideo&&(a.offerToReceiveVideo=!!a.offerToReceiveVideo);let c=this.getTransceivers().find(a=>"video"===a.receiver.track.kind);!1===a.offerToReceiveVideo&&c?"sendrecv"===c.direction?c.setDirection?c.setDirection("sendonly"):c.direction="sendonly":"recvonly"===c.direction&&(c.setDirection?c.setDirection("inactive"):c.direction="inactive"):!0!==a.offerToReceiveVideo||c||this.addTransceiver("video",{direction:"recvonly"})}return b.apply(this,arguments)}}function dN(a){"object"!=typeof a||a.AudioContext||(a.AudioContext=a.webkitAudioContext)}var dO=Object.freeze({__proto__:null,shimAudioContext:dN,shimCallbacksAPI:dH,shimConstraints:dJ,shimCreateOfferLegacy:dM,shimGetUserMedia:dI,shimLocalStreamsAPI:dF,shimRTCIceServerUrls:dK,shimRemoteStreamsAPI:dG,shimTrackEventTransceiver:dL}),dP={exports:{}},dQ=function(){if(o)return dP.exports;o=1;let a={};return a.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},a.localCName=a.generateIdentifier(),a.splitLines=function(a){return a.trim().split("\n").map(a=>a.trim())},a.splitSections=function(a){return a.split("\nm=").map((a,b)=>(b>0?"m="+a:a).trim()+"\r\n")},a.getDescription=function(b){let c=a.splitSections(b);return c&&c[0]},a.getMediaSections=function(b){let c=a.splitSections(b);return c.shift(),c},a.matchPrefix=function(b,c){return a.splitLines(b).filter(a=>0===a.indexOf(c))},a.parseCandidate=function(a){let b,c={foundation:(b=0===a.indexOf("a=candidate:")?a.substring(12).split(" "):a.substring(10).split(" "))[0],component:{1:"rtp",2:"rtcp"}[b[1]]||b[1],protocol:b[2].toLowerCase(),priority:parseInt(b[3],10),ip:b[4],address:b[4],port:parseInt(b[5],10),type:b[7]};for(let a=8;a<b.length;a+=2)switch(b[a]){case"raddr":c.relatedAddress=b[a+1];break;case"rport":c.relatedPort=parseInt(b[a+1],10);break;case"tcptype":c.tcpType=b[a+1];break;case"ufrag":c.ufrag=b[a+1],c.usernameFragment=b[a+1];break;default:void 0===c[b[a]]&&(c[b[a]]=b[a+1])}return c},a.writeCandidate=function(a){let b=[];b.push(a.foundation);let c=a.component;"rtp"===c?b.push(1):"rtcp"===c?b.push(2):b.push(c),b.push(a.protocol.toUpperCase()),b.push(a.priority),b.push(a.address||a.ip),b.push(a.port);let d=a.type;return b.push("typ"),b.push(d),"host"!==d&&a.relatedAddress&&a.relatedPort&&(b.push("raddr"),b.push(a.relatedAddress),b.push("rport"),b.push(a.relatedPort)),a.tcpType&&"tcp"===a.protocol.toLowerCase()&&(b.push("tcptype"),b.push(a.tcpType)),(a.usernameFragment||a.ufrag)&&(b.push("ufrag"),b.push(a.usernameFragment||a.ufrag)),"candidate:"+b.join(" ")},a.parseIceOptions=function(a){return a.substring(14).split(" ")},a.parseRtpMap=function(a){let b=a.substring(9).split(" "),c={payloadType:parseInt(b.shift(),10)};return c.name=(b=b[0].split("/"))[0],c.clockRate=parseInt(b[1],10),c.channels=3===b.length?parseInt(b[2],10):1,c.numChannels=c.channels,c},a.writeRtpMap=function(a){let b=a.payloadType;void 0!==a.preferredPayloadType&&(b=a.preferredPayloadType);let c=a.channels||a.numChannels||1;return"a=rtpmap:"+b+" "+a.name+"/"+a.clockRate+(1!==c?"/"+c:"")+"\r\n"},a.parseExtmap=function(a){let b=a.substring(9).split(" ");return{id:parseInt(b[0],10),direction:b[0].indexOf("/")>0?b[0].split("/")[1]:"sendrecv",uri:b[1],attributes:b.slice(2).join(" ")}},a.writeExtmap=function(a){return"a=extmap:"+(a.id||a.preferredId)+(a.direction&&"sendrecv"!==a.direction?"/"+a.direction:"")+" "+a.uri+(a.attributes?" "+a.attributes:"")+"\r\n"},a.parseFmtp=function(a){let b,c={},d=a.substring(a.indexOf(" ")+1).split(";");for(let a=0;a<d.length;a++)c[(b=d[a].trim().split("="))[0].trim()]=b[1];return c},a.writeFmtp=function(a){let b="",c=a.payloadType;if(void 0!==a.preferredPayloadType&&(c=a.preferredPayloadType),a.parameters&&Object.keys(a.parameters).length){let d=[];Object.keys(a.parameters).forEach(b=>{void 0!==a.parameters[b]?d.push(b+"="+a.parameters[b]):d.push(b)}),b+="a=fmtp:"+c+" "+d.join(";")+"\r\n"}return b},a.parseRtcpFb=function(a){let b=a.substring(a.indexOf(" ")+1).split(" ");return{type:b.shift(),parameter:b.join(" ")}},a.writeRtcpFb=function(a){let b="",c=a.payloadType;return void 0!==a.preferredPayloadType&&(c=a.preferredPayloadType),a.rtcpFeedback&&a.rtcpFeedback.length&&a.rtcpFeedback.forEach(a=>{b+="a=rtcp-fb:"+c+" "+a.type+(a.parameter&&a.parameter.length?" "+a.parameter:"")+"\r\n"}),b},a.parseSsrcMedia=function(a){let b=a.indexOf(" "),c={ssrc:parseInt(a.substring(7,b),10)},d=a.indexOf(":",b);return d>-1?(c.attribute=a.substring(b+1,d),c.value=a.substring(d+1)):c.attribute=a.substring(b+1),c},a.parseSsrcGroup=function(a){let b=a.substring(13).split(" ");return{semantics:b.shift(),ssrcs:b.map(a=>parseInt(a,10))}},a.getMid=function(b){let c=a.matchPrefix(b,"a=mid:")[0];if(c)return c.substring(6)},a.parseFingerprint=function(a){let b=a.substring(14).split(" ");return{algorithm:b[0].toLowerCase(),value:b[1].toUpperCase()}},a.getDtlsParameters=function(b,c){return{role:"auto",fingerprints:a.matchPrefix(b+c,"a=fingerprint:").map(a.parseFingerprint)}},a.writeDtlsParameters=function(a,b){let c="a=setup:"+b+"\r\n";return a.fingerprints.forEach(a=>{c+="a=fingerprint:"+a.algorithm+" "+a.value+"\r\n"}),c},a.parseCryptoLine=function(a){let b=a.substring(9).split(" ");return{tag:parseInt(b[0],10),cryptoSuite:b[1],keyParams:b[2],sessionParams:b.slice(3)}},a.writeCryptoLine=function(b){return"a=crypto:"+b.tag+" "+b.cryptoSuite+" "+("object"==typeof b.keyParams?a.writeCryptoKeyParams(b.keyParams):b.keyParams)+(b.sessionParams?" "+b.sessionParams.join(" "):"")+"\r\n"},a.parseCryptoKeyParams=function(a){if(0!==a.indexOf("inline:"))return null;let b=a.substring(7).split("|");return{keyMethod:"inline",keySalt:b[0],lifeTime:b[1],mkiValue:b[2]?b[2].split(":")[0]:void 0,mkiLength:b[2]?b[2].split(":")[1]:void 0}},a.writeCryptoKeyParams=function(a){return a.keyMethod+":"+a.keySalt+(a.lifeTime?"|"+a.lifeTime:"")+(a.mkiValue&&a.mkiLength?"|"+a.mkiValue+":"+a.mkiLength:"")},a.getCryptoParameters=function(b,c){return a.matchPrefix(b+c,"a=crypto:").map(a.parseCryptoLine)},a.getIceParameters=function(b,c){let d=a.matchPrefix(b+c,"a=ice-ufrag:")[0],e=a.matchPrefix(b+c,"a=ice-pwd:")[0];return d&&e?{usernameFragment:d.substring(12),password:e.substring(10)}:null},a.writeIceParameters=function(a){let b="a=ice-ufrag:"+a.usernameFragment+"\r\na=ice-pwd:"+a.password+"\r\n";return a.iceLite&&(b+="a=ice-lite\r\n"),b},a.parseRtpParameters=function(b){let c={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},d=a.splitLines(b)[0].split(" ");c.profile=d[2];for(let e=3;e<d.length;e++){let f=d[e],g=a.matchPrefix(b,"a=rtpmap:"+f+" ")[0];if(g){let d=a.parseRtpMap(g),e=a.matchPrefix(b,"a=fmtp:"+f+" ");switch(d.parameters=e.length?a.parseFmtp(e[0]):{},d.rtcpFeedback=a.matchPrefix(b,"a=rtcp-fb:"+f+" ").map(a.parseRtcpFb),c.codecs.push(d),d.name.toUpperCase()){case"RED":case"ULPFEC":c.fecMechanisms.push(d.name.toUpperCase())}}}a.matchPrefix(b,"a=extmap:").forEach(b=>{c.headerExtensions.push(a.parseExtmap(b))});let e=a.matchPrefix(b,"a=rtcp-fb:* ").map(a.parseRtcpFb);return c.codecs.forEach(a=>{e.forEach(b=>{a.rtcpFeedback.find(a=>a.type===b.type&&a.parameter===b.parameter)||a.rtcpFeedback.push(b)})}),c},a.writeRtpDescription=function(b,c){let d="";d+="m="+b+" ",d+=c.codecs.length>0?"9":"0",d+=" "+(c.profile||"UDP/TLS/RTP/SAVPF")+" ",d+=c.codecs.map(a=>void 0!==a.preferredPayloadType?a.preferredPayloadType:a.payloadType).join(" ")+"\r\n",d+="c=IN IP4 0.0.0.0\r\n",d+="a=rtcp:9 IN IP4 0.0.0.0\r\n",c.codecs.forEach(b=>{d+=a.writeRtpMap(b),d+=a.writeFmtp(b),d+=a.writeRtcpFb(b)});let e=0;return c.codecs.forEach(a=>{a.maxptime>e&&(e=a.maxptime)}),e>0&&(d+="a=maxptime:"+e+"\r\n"),c.headerExtensions&&c.headerExtensions.forEach(b=>{d+=a.writeExtmap(b)}),d},a.parseRtpEncodingParameters=function(b){let c,d=[],e=a.parseRtpParameters(b),f=-1!==e.fecMechanisms.indexOf("RED"),g=-1!==e.fecMechanisms.indexOf("ULPFEC"),h=a.matchPrefix(b,"a=ssrc:").map(b=>a.parseSsrcMedia(b)).filter(a=>"cname"===a.attribute),i=h.length>0&&h[0].ssrc,j=a.matchPrefix(b,"a=ssrc-group:FID").map(a=>a.substring(17).split(" ").map(a=>parseInt(a,10)));j.length>0&&j[0].length>1&&j[0][0]===i&&(c=j[0][1]),e.codecs.forEach(a=>{if("RTX"===a.name.toUpperCase()&&a.parameters.apt){let b={ssrc:i,codecPayloadType:parseInt(a.parameters.apt,10)};i&&c&&(b.rtx={ssrc:c}),d.push(b),f&&((b=JSON.parse(JSON.stringify(b))).fec={ssrc:i,mechanism:g?"red+ulpfec":"red"},d.push(b))}}),0===d.length&&i&&d.push({ssrc:i});let k=a.matchPrefix(b,"b=");return k.length&&(k=0===k[0].indexOf("b=TIAS:")?parseInt(k[0].substring(7),10):0===k[0].indexOf("b=AS:")?1e3*parseInt(k[0].substring(5),10)*.95-16e3:void 0,d.forEach(a=>{a.maxBitrate=k})),d},a.parseRtcpParameters=function(b){let c={},d=a.matchPrefix(b,"a=ssrc:").map(b=>a.parseSsrcMedia(b)).filter(a=>"cname"===a.attribute)[0];d&&(c.cname=d.value,c.ssrc=d.ssrc);let e=a.matchPrefix(b,"a=rtcp-rsize");return c.reducedSize=e.length>0,c.compound=0===e.length,c.mux=a.matchPrefix(b,"a=rtcp-mux").length>0,c},a.writeRtcpParameters=function(a){let b="";return a.reducedSize&&(b+="a=rtcp-rsize\r\n"),a.mux&&(b+="a=rtcp-mux\r\n"),void 0!==a.ssrc&&a.cname&&(b+="a=ssrc:"+a.ssrc+" cname:"+a.cname+"\r\n"),b},a.parseMsid=function(b){let c,d=a.matchPrefix(b,"a=msid:");if(1===d.length)return{stream:(c=d[0].substring(7).split(" "))[0],track:c[1]};let e=a.matchPrefix(b,"a=ssrc:").map(b=>a.parseSsrcMedia(b)).filter(a=>"msid"===a.attribute);if(e.length>0)return{stream:(c=e[0].value.split(" "))[0],track:c[1]}},a.parseSctpDescription=function(b){let c,d=a.parseMLine(b),e=a.matchPrefix(b,"a=max-message-size:");e.length>0&&(c=parseInt(e[0].substring(19),10)),isNaN(c)&&(c=65536);let f=a.matchPrefix(b,"a=sctp-port:");if(f.length>0)return{port:parseInt(f[0].substring(12),10),protocol:d.fmt,maxMessageSize:c};let g=a.matchPrefix(b,"a=sctpmap:");if(g.length>0){let a=g[0].substring(10).split(" ");return{port:parseInt(a[0],10),protocol:a[1],maxMessageSize:c}}},a.writeSctpDescription=function(a,b){let c=[];return c="DTLS/SCTP"!==a.protocol?["m="+a.kind+" 9 "+a.protocol+" "+b.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+b.port+"\r\n"]:["m="+a.kind+" 9 "+a.protocol+" "+b.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+b.port+" "+b.protocol+" 65535\r\n"],void 0!==b.maxMessageSize&&c.push("a=max-message-size:"+b.maxMessageSize+"\r\n"),c.join("")},a.generateSessionId=function(){return Math.random().toString().substr(2,22)},a.writeSessionBoilerplate=function(b,c,d){return"v=0\r\no="+(d||"thisisadapterortc")+" "+(b||a.generateSessionId())+" "+(void 0!==c?c:2)+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},a.getDirection=function(b,c){let d=a.splitLines(b);for(let a=0;a<d.length;a++)switch(d[a]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return d[a].substring(2)}return c?a.getDirection(c):"sendrecv"},a.getKind=function(b){return a.splitLines(b)[0].split(" ")[0].substring(2)},a.isRejected=function(a){return"0"===a.split(" ",2)[1]},a.parseMLine=function(b){let c=a.splitLines(b)[0].substring(2).split(" ");return{kind:c[0],port:parseInt(c[1],10),protocol:c[2],fmt:c.slice(3).join(" ")}},a.parseOLine=function(b){let c=a.matchPrefix(b,"o=")[0].substring(2).split(" ");return{username:c[0],sessionId:c[1],sessionVersion:parseInt(c[2],10),netType:c[3],addressType:c[4],address:c[5]}},a.isValidSDP=function(b){if("string"!=typeof b||0===b.length)return!1;let c=a.splitLines(b);for(let a=0;a<c.length;a++)if(c[a].length<2||"="!==c[a].charAt(1))return!1;return!0},dP.exports=a,dP.exports}(),dR=function(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}(dQ),dS=function(a,b){return b.forEach(function(b){b&&"string"!=typeof b&&!Array.isArray(b)&&Object.keys(b).forEach(function(c){if("default"!==c&&!(c in a)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d.get?d:{enumerable:!0,get:function(){return b[c]}})}})}),Object.freeze(a)}({__proto__:null,default:dR},[dQ]);function dT(a){if(!a.RTCIceCandidate||a.RTCIceCandidate&&"foundation"in a.RTCIceCandidate.prototype)return;let b=a.RTCIceCandidate;a.RTCIceCandidate=function(a){if("object"==typeof a&&a.candidate&&0===a.candidate.indexOf("a=")&&((a=JSON.parse(JSON.stringify(a))).candidate=a.candidate.substring(2)),a.candidate&&a.candidate.length){let c=new b(a),d=dR.parseCandidate(a.candidate);for(let a in d)a in c||Object.defineProperty(c,a,{value:d[a]});return c.toJSON=function(){return{candidate:c.candidate,sdpMid:c.sdpMid,sdpMLineIndex:c.sdpMLineIndex,usernameFragment:c.usernameFragment}},c}return new b(a)},a.RTCIceCandidate.prototype=b.prototype,db(a,"icecandidate",b=>(b.candidate&&Object.defineProperty(b,"candidate",{value:new a.RTCIceCandidate(b.candidate),writable:"false"}),b))}function dU(a){!a.RTCIceCandidate||a.RTCIceCandidate&&"relayProtocol"in a.RTCIceCandidate.prototype||db(a,"icecandidate",a=>{if(a.candidate){let b=dR.parseCandidate(a.candidate.candidate);"relay"===b.type&&(a.candidate.relayProtocol=({0:"tls",1:"tcp",2:"udp"})[b.priority>>24])}return a})}function dV(a,b){if(!a.RTCPeerConnection)return;"sctp"in a.RTCPeerConnection.prototype||Object.defineProperty(a.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});let c=function(a){if(!a||!a.sdp)return!1;let b=dR.splitSections(a.sdp);return b.shift(),b.some(a=>{let b=dR.parseMLine(a);return b&&"application"===b.kind&&-1!==b.protocol.indexOf("SCTP")})},d=function(a){let b=a.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===b||b.length<2)return -1;let c=parseInt(b[1],10);return c!=c?-1:c},e=function(a){let c=65536;return"firefox"===b.browser&&(c=b.version<57?-1===a?16384:0x7ffffff5:b.version<60?57===b.version?65535:65536:0x7ffffff5),c},f=function(a,c){let d=65536;"firefox"===b.browser&&57===b.version&&(d=65535);let e=dR.matchPrefix(a.sdp,"a=max-message-size:");return e.length>0?d=parseInt(e[0].substring(19),10):"firefox"===b.browser&&-1!==c&&(d=0x7ffffff5),d},g=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===b.browser&&b.version>=76){let{sdpSemantics:a}=this.getConfiguration();"plan-b"===a&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(c(arguments[0])){let a,b=d(arguments[0]),c=e(b),g=f(arguments[0],b);a=0===c&&0===g?1/0:0===c||0===g?Math.max(c,g):Math.min(c,g);let h={};Object.defineProperty(h,"maxMessageSize",{get:()=>a}),this._sctp=h}return g.apply(this,arguments)}}function dW(a){if(!(a.RTCPeerConnection&&"createDataChannel"in a.RTCPeerConnection.prototype))return;function b(a,b){let c=a.send;a.send=function(){let d=arguments[0],e=d.length||d.size||d.byteLength;if("open"===a.readyState&&b.sctp&&e>b.sctp.maxMessageSize)throw TypeError("Message too large (can send a maximum of "+b.sctp.maxMessageSize+" bytes)");return c.apply(a,arguments)}}let c=a.RTCPeerConnection.prototype.createDataChannel;a.RTCPeerConnection.prototype.createDataChannel=function(){let a=c.apply(this,arguments);return b(a,this),a},db(a,"datachannel",a=>(b(a.channel,a.target),a))}function dX(a){if(!a.RTCPeerConnection||"connectionState"in a.RTCPeerConnection.prototype)return;let b=a.RTCPeerConnection.prototype;Object.defineProperty(b,"connectionState",{get(){return({completed:"connected",checking:"connecting"})[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(b,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(a){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),a&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=a)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(a=>{let c=b[a];b[a]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=a=>{let b=a.target;if(b._lastConnectionState!==b.connectionState){b._lastConnectionState=b.connectionState;let c=new Event("connectionstatechange",a);b.dispatchEvent(c)}return a},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),c.apply(this,arguments)}})}function dY(a,b){if(!a.RTCPeerConnection||"chrome"===b.browser&&b.version>=71||"safari"===b.browser&&b._safariVersion>=13.1)return;let c=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(b){if(b&&b.sdp&&-1!==b.sdp.indexOf("\na=extmap-allow-mixed")){let c=b.sdp.split("\n").filter(a=>"a=extmap-allow-mixed"!==a.trim()).join("\n");a.RTCSessionDescription&&b instanceof a.RTCSessionDescription?arguments[0]=new a.RTCSessionDescription({type:b.type,sdp:c}):b.sdp=c}return c.apply(this,arguments)}}function dZ(a,b){if(!(a.RTCPeerConnection&&a.RTCPeerConnection.prototype))return;let c=a.RTCPeerConnection.prototype.addIceCandidate;c&&0!==c.length&&(a.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===b.browser&&b.version<78||"firefox"===b.browser&&b.version<68||"safari"===b.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():c.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function d$(a,b){if(!(a.RTCPeerConnection&&a.RTCPeerConnection.prototype))return;let c=a.RTCPeerConnection.prototype.setLocalDescription;c&&0!==c.length&&(a.RTCPeerConnection.prototype.setLocalDescription=function(){let a=arguments[0]||{};if("object"!=typeof a||a.type&&a.sdp)return c.apply(this,arguments);if(!(a={type:a.type,sdp:a.sdp}).type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":a.type="offer";break;default:a.type="answer"}return a.sdp||"offer"!==a.type&&"answer"!==a.type?c.apply(this,[a]):("offer"===a.type?this.createOffer:this.createAnswer).apply(this).then(a=>c.apply(this,[a]))})}var d_=Object.freeze({__proto__:null,removeExtmapAllowMixed:dY,shimAddIceCandidateNullOrEmpty:dZ,shimConnectionState:dX,shimMaxMessageSize:dV,shimParameterlessSetLocalDescription:d$,shimRTCIceCandidate:dT,shimRTCIceCandidateRelayProtocol:dU,shimSendThrowTypeError:dW});!function(){let{window:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0},c=function(a){let b={browser:null,version:null};if(void 0===a||!a.navigator||!a.navigator.userAgent)return b.browser="Not a browser.",b;let{navigator:c}=a;if(c.userAgentData&&c.userAgentData.brands){let a=c.userAgentData.brands.find(a=>"Chromium"===a.brand);if(a)return{browser:"chrome",version:parseInt(a.version,10)}}return c.mozGetUserMedia?(b.browser="firefox",b.version=parseInt(da(c.userAgent,/Firefox\/(\d+)\./,1))):c.webkitGetUserMedia||!1===a.isSecureContext&&a.webkitRTCPeerConnection?(b.browser="chrome",b.version=parseInt(da(c.userAgent,/Chrom(e|ium)\/(\d+)\./,2))):a.RTCPeerConnection&&c.userAgent.match(/AppleWebKit\/(\d+)\./)?(b.browser="safari",b.version=parseInt(da(c.userAgent,/AppleWebKit\/(\d+)\./,1)),b.supportsUnifiedPlan=a.RTCRtpTransceiver&&"currentDirection"in a.RTCRtpTransceiver.prototype,b._safariVersion=da(c.userAgent,/Version\/(\d+(\.?\d+))/,1)):b.browser="Not a supported browser.",b}(a),d={browserDetails:c,commonShim:d_,extractVersion:da,disableLog:dc,disableWarnings:dd,sdp:dS};switch(c.browser){case"chrome":if(!ds||!dq||!b.shimChrome){de("Chrome shim is not included in this adapter release.");break}if(null===c.version){de("Chrome shim can not determine version, not shimming.");break}de("adapter.js shimming chrome."),d.browserShim=ds,dZ(a,c),d$(a),di(a,c),dj(a),dq(a,c),dk(a),dp(a,c),dl(a),dm(a),dr(a,c),dT(a),dU(a),dX(a),dV(a,c),dW(a),dY(a,c);break;case"firefox":if(!dE||!dv||!b.shimFirefox){de("Firefox shim is not included in this adapter release.");break}de("adapter.js shimming firefox."),d.browserShim=dE,dZ(a,c),d$(a),dt(a,c),dv(a,c),du(a),dy(a),dw(a),dx(a),dz(a),dA(a),dB(a),dC(a),dD(a),dT(a),dX(a),dV(a,c),dW(a);break;case"safari":if(!dO||!b.shimSafari){de("Safari shim is not included in this adapter release.");break}de("adapter.js shimming safari."),d.browserShim=dO,dZ(a,c),d$(a),dK(a),dM(a),dH(a),dF(a),dG(a),dL(a),dI(a),dN(a),dT(a),dU(a),dV(a,c),dW(a),dY(a,c);break;default:de("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});let d0="lk_e2ee";function d1(){return void 0!==window.RTCRtpScriptTransform}!function(a){a.SetKey="setKey",a.RatchetRequest="ratchetRequest",a.KeyRatcheted="keyRatcheted"}(p||(p={})),(q||(q={})).KeyRatcheted="keyRatcheted",function(a){a.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",a.EncryptionError="encryptionError"}(r||(r={})),(s||(s={})).Error="cryptorError",c7.EventEmitter;class d2 extends Error{constructor(a,b){super(b||"an error has occured"),this.name="LiveKitError",this.code=a}}!function(a){a[a.NotAllowed=0]="NotAllowed",a[a.ServerUnreachable=1]="ServerUnreachable",a[a.InternalError=2]="InternalError",a[a.Cancelled=3]="Cancelled",a[a.LeaveRequest=4]="LeaveRequest",a[a.Timeout=5]="Timeout"}(t||(t={}));class d3 extends d2{constructor(a,b,c,d){super(1,a),this.name="ConnectionError",this.status=c,this.reason=b,this.context=d,this.reasonName=t[b]}}class d4 extends d2{constructor(a){super(21,null!=a?a:"device is unsupported"),this.name="DeviceUnsupportedError"}}class d5 extends d2{constructor(a){super(20,null!=a?a:"track is invalid"),this.name="TrackInvalidError"}}class d6 extends d2{constructor(a){super(10,null!=a?a:"unsupported server"),this.name="UnsupportedServer"}}class d7 extends d2{constructor(a){super(12,null!=a?a:"unexpected connection state"),this.name="UnexpectedConnectionState"}}class d8 extends d2{constructor(a){super(13,null!=a?a:"unable to negotiate"),this.name="NegotiationError"}}class d9 extends d2{constructor(a,b){super(15,a),this.name="PublishTrackError",this.status=b}}class ea extends d2{constructor(a,b){super(15,a),this.reason=b,this.reasonName="string"==typeof b?b:cW[b]}}!function(a){a[a.AlreadyOpened=0]="AlreadyOpened",a[a.AbnormalEnd=1]="AbnormalEnd",a[a.DecodeFailed=2]="DecodeFailed",a[a.LengthExceeded=3]="LengthExceeded",a[a.Incomplete=4]="Incomplete",a[a.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered"}(u||(u={}));class eb extends d2{constructor(a,b){super(16,a),this.name="DataStreamError",this.reason=b,this.reasonName=u[b]}}!function(a){a.PermissionDenied="PermissionDenied",a.NotFound="NotFound",a.DeviceInUse="DeviceInUse",a.Other="Other"}(v||(v={})),function(a){a.getFailure=function(b){if(b&&"name"in b)return"NotFoundError"===b.name||"DevicesNotFoundError"===b.name?a.NotFound:"NotAllowedError"===b.name||"PermissionDeniedError"===b.name?a.PermissionDenied:"NotReadableError"===b.name||"TrackStartError"===b.name?a.DeviceInUse:a.Other}}(v||(v={})),function(a){a[a.InvalidKey=0]="InvalidKey",a[a.MissingKey=1]="MissingKey",a[a.InternalError=2]="InternalError"}(w||(w={})),function(a){a.Connected="connected",a.Reconnecting="reconnecting",a.SignalReconnecting="signalReconnecting",a.Reconnected="reconnected",a.Disconnected="disconnected",a.ConnectionStateChanged="connectionStateChanged",a.Moved="moved",a.MediaDevicesChanged="mediaDevicesChanged",a.ParticipantConnected="participantConnected",a.ParticipantDisconnected="participantDisconnected",a.TrackPublished="trackPublished",a.TrackSubscribed="trackSubscribed",a.TrackSubscriptionFailed="trackSubscriptionFailed",a.TrackUnpublished="trackUnpublished",a.TrackUnsubscribed="trackUnsubscribed",a.TrackMuted="trackMuted",a.TrackUnmuted="trackUnmuted",a.LocalTrackPublished="localTrackPublished",a.LocalTrackUnpublished="localTrackUnpublished",a.LocalAudioSilenceDetected="localAudioSilenceDetected",a.ActiveSpeakersChanged="activeSpeakersChanged",a.ParticipantMetadataChanged="participantMetadataChanged",a.ParticipantNameChanged="participantNameChanged",a.ParticipantAttributesChanged="participantAttributesChanged",a.ParticipantActive="participantActive",a.RoomMetadataChanged="roomMetadataChanged",a.DataReceived="dataReceived",a.SipDTMFReceived="sipDTMFReceived",a.TranscriptionReceived="transcriptionReceived",a.ConnectionQualityChanged="connectionQualityChanged",a.TrackStreamStateChanged="trackStreamStateChanged",a.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",a.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",a.AudioPlaybackStatusChanged="audioPlaybackChanged",a.VideoPlaybackStatusChanged="videoPlaybackChanged",a.MediaDevicesError="mediaDevicesError",a.ParticipantPermissionsChanged="participantPermissionsChanged",a.SignalConnected="signalConnected",a.RecordingStatusChanged="recordingStatusChanged",a.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",a.EncryptionError="encryptionError",a.DCBufferStatusChanged="dcBufferStatusChanged",a.ActiveDeviceChanged="activeDeviceChanged",a.ChatMessage="chatMessage",a.LocalTrackSubscribed="localTrackSubscribed",a.MetricsReceived="metricsReceived"}(x||(x={})),function(a){a.TrackPublished="trackPublished",a.TrackSubscribed="trackSubscribed",a.TrackSubscriptionFailed="trackSubscriptionFailed",a.TrackUnpublished="trackUnpublished",a.TrackUnsubscribed="trackUnsubscribed",a.TrackMuted="trackMuted",a.TrackUnmuted="trackUnmuted",a.LocalTrackPublished="localTrackPublished",a.LocalTrackUnpublished="localTrackUnpublished",a.LocalTrackCpuConstrained="localTrackCpuConstrained",a.LocalSenderCreated="localSenderCreated",a.ParticipantMetadataChanged="participantMetadataChanged",a.ParticipantNameChanged="participantNameChanged",a.DataReceived="dataReceived",a.SipDTMFReceived="sipDTMFReceived",a.TranscriptionReceived="transcriptionReceived",a.IsSpeakingChanged="isSpeakingChanged",a.ConnectionQualityChanged="connectionQualityChanged",a.TrackStreamStateChanged="trackStreamStateChanged",a.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",a.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",a.TrackCpuConstrained="trackCpuConstrained",a.MediaDevicesError="mediaDevicesError",a.AudioStreamAcquired="audioStreamAcquired",a.ParticipantPermissionsChanged="participantPermissionsChanged",a.PCTrackAdded="pcTrackAdded",a.AttributesChanged="attributesChanged",a.LocalTrackSubscribed="localTrackSubscribed",a.ChatMessage="chatMessage",a.Active="active"}(y||(y={})),function(a){a.TransportsCreated="transportsCreated",a.Connected="connected",a.Disconnected="disconnected",a.Resuming="resuming",a.Resumed="resumed",a.Restarting="restarting",a.Restarted="restarted",a.SignalResumed="signalResumed",a.SignalRestarted="signalRestarted",a.Closing="closing",a.MediaTrackAdded="mediaTrackAdded",a.ActiveSpeakersUpdate="activeSpeakersUpdate",a.DataPacketReceived="dataPacketReceived",a.RTPVideoMapUpdate="rtpVideoMapUpdate",a.DCBufferStatusChanged="dcBufferStatusChanged",a.ParticipantUpdate="participantUpdate",a.RoomUpdate="roomUpdate",a.SpeakersChanged="speakersChanged",a.StreamStateChanged="streamStateChanged",a.ConnectionQualityUpdate="connectionQualityUpdate",a.SubscriptionError="subscriptionError",a.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",a.RemoteMute="remoteMute",a.SubscribedQualityUpdate="subscribedQualityUpdate",a.LocalTrackUnpublished="localTrackUnpublished",a.LocalTrackSubscribed="localTrackSubscribed",a.Offline="offline",a.SignalRequestResponse="signalRequestResponse",a.SignalConnected="signalConnected",a.RoomMoved="roomMoved"}(z||(z={})),function(a){a.Message="message",a.Muted="muted",a.Unmuted="unmuted",a.Restarted="restarted",a.Ended="ended",a.Subscribed="subscribed",a.Unsubscribed="unsubscribed",a.CpuConstrained="cpuConstrained",a.UpdateSettings="updateSettings",a.UpdateSubscription="updateSubscription",a.AudioPlaybackStarted="audioPlaybackStarted",a.AudioPlaybackFailed="audioPlaybackFailed",a.AudioSilenceDetected="audioSilenceDetected",a.VisibilityChanged="visibilityChanged",a.VideoDimensionsChanged="videoDimensionsChanged",a.VideoPlaybackStarted="videoPlaybackStarted",a.VideoPlaybackFailed="videoPlaybackFailed",a.ElementAttached="elementAttached",a.ElementDetached="elementDetached",a.UpstreamPaused="upstreamPaused",a.UpstreamResumed="upstreamResumed",a.SubscriptionPermissionChanged="subscriptionPermissionChanged",a.SubscriptionStatusChanged="subscriptionStatusChanged",a.SubscriptionFailed="subscriptionFailed",a.TrackProcessorUpdate="trackProcessorUpdate",a.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",a.TranscriptionReceived="transcriptionReceived",a.TimeSyncUpdate="timeSyncUpdate",a.PreConnectBufferFlushed="preConnectBufferFlushed"}(A||(A={}));let ec=/version\/(\d+(\.?_?\d+)+)/i;function ed(a){let b=!(arguments.length>1)||void 0===arguments[1]||arguments[1];if(void 0===a&&"undefined"==typeof navigator)return;let c=(null!=a?a:navigator.userAgent).toLowerCase();if(void 0===d||b){let a=ee.find(a=>{let{test:b}=a;return b.test(c)});d=null==a?void 0:a.describe(c)}return d}let ee=[{test:/firefox|iceweasel|fxios/i,describe:a=>({name:"Firefox",version:ef(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,a),os:a.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:eg(a)})},{test:/chrom|crios|crmo/i,describe:a=>({name:"Chrome",version:ef(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,a),os:a.toLowerCase().includes("crios")?"iOS":void 0,osVersion:eg(a)})},{test:/safari|applewebkit/i,describe:a=>({name:"Safari",version:ef(ec,a),os:a.includes("mobile/")?"iOS":"macOS",osVersion:eg(a)})}];function ef(a,b){let c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,d=b.match(a);return d&&d.length>=c&&d[c]||""}function eg(a){return a.includes("mac os")?ef(/\(.+?(\d+_\d+(:?_\d+)?)/,a,1).replace(/_/g,"."):void 0}class eh{}eh.setTimeout=function(){return setTimeout(...arguments)},eh.setInterval=function(){return setInterval(...arguments)},eh.clearTimeout=function(){return clearTimeout(...arguments)},eh.clearInterval=function(){return clearInterval(...arguments)};let ei=[];!function(a){a[a.LOW=0]="LOW",a[a.MEDIUM=1]="MEDIUM",a[a.HIGH=2]="HIGH"}(B||(B={}));class ej extends c7.EventEmitter{get streamState(){return this._streamState}setStreamState(a){this._streamState=a}constructor(a,b){var c;let d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super(),this.attachedElements=[],this.isMuted=!1,this._streamState=ej.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=c_,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),"hidden"===document.visibilityState?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),5e3):this.handleAppVisibilityChanged()},this.log=c0(null!=(c=d.loggerName)?c:m.Track),this.loggerContextCb=d.loggerContextCb,this.setMaxListeners(100),this.kind=b,this._mediaStreamTrack=a,this._mediaStreamID=a.id,this.source=ej.Source.Unknown}get logContext(){var a;return Object.assign(Object.assign({},null==(a=this.loggerContextCb)?void 0:a.call(this)),e9(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(a){let b="audio";this.kind===ej.Kind.Video&&(b="video"),0===this.attachedElements.length&&this.kind===ej.Kind.Video&&this.addAppVisibilityListener(),!a&&("audio"===b&&(ei.forEach(b=>{null!==b.parentElement||a||(a=b)}),a&&ei.splice(ei.indexOf(a),1)),a||(a=document.createElement(b))),this.attachedElements.includes(a)||this.attachedElements.push(a),ek(this.mediaStreamTrack,a);let c=a.srcObject.getTracks(),d=c.some(a=>"audio"===a.kind);return a.play().then(()=>{this.emit(d?A.AudioPlaybackStarted:A.VideoPlaybackStarted)}).catch(b=>{"NotAllowedError"===b.name?this.emit(d?A.AudioPlaybackFailed:A.VideoPlaybackFailed,b):"AbortError"===b.name?c_.debug("".concat(d?"audio":"video"," playback aborted, likely due to new play request")):c_.warn("could not playback ".concat(d?"audio":"video"),b),d&&a&&c.some(a=>"video"===a.kind)&&"NotAllowedError"===b.name&&(a.muted=!0,a.play().catch(()=>{}))}),this.emit(A.ElementAttached,a),a}detach(a){try{if(a){el(this.mediaStreamTrack,a);let b=this.attachedElements.indexOf(a);return b>=0&&(this.attachedElements.splice(b,1),this.recycleElement(a),this.emit(A.ElementDetached,a)),a}let b=[];return this.attachedElements.forEach(a=>{el(this.mediaStreamTrack,a),b.push(a),this.recycleElement(a),this.emit(A.ElementDetached,a)}),this.attachedElements=[],b}finally{0===this.attachedElements.length&&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(a){a.loggerName&&(this.log=c0(a.loggerName)),a.loggerContextCb&&(this.loggerContextCb=a.loggerContextCb)}recycleElement(a){if(a instanceof HTMLAudioElement){let b=!0;a.pause(),ei.forEach(a=>{a.parentElement||(b=!1)}),b&&ei.push(a)}}handleAppVisibilityChanged(){return c4(this,void 0,void 0,function*(){this.isInBackground="hidden"===document.visibilityState,this.isInBackground||this.kind!==ej.Kind.Video||setTimeout(()=>this.attachedElements.forEach(a=>a.play().catch(()=>{})),0)})}addAppVisibilityListener(){eC()?(this.isInBackground="hidden"===document.visibilityState,document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){eC()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function ek(a,b){let c,d;c=b.srcObject instanceof MediaStream?b.srcObject:new MediaStream,(d="audio"===a.kind?c.getAudioTracks():c.getVideoTracks()).includes(a)||(d.forEach(a=>{c.removeTrack(a)}),c.addTrack(a)),ez()&&b instanceof HTMLVideoElement||(b.autoplay=!0),b.muted=0===c.getAudioTracks().length,b instanceof HTMLVideoElement&&(b.playsInline=!0),b.srcObject!==c&&(b.srcObject=c,(ez()||ey())&&b instanceof HTMLVideoElement&&setTimeout(()=>{b.srcObject=c,b.play().catch(()=>{})},0))}function el(a,b){if(b.srcObject instanceof MediaStream){let c=b.srcObject;c.removeTrack(a),c.getTracks().length>0?b.srcObject=c:b.srcObject=null}}!function(a){var b,c,d;let e,f,g;(b=e=a.Kind||(a.Kind={})).Audio="audio",b.Video="video",b.Unknown="unknown",(c=f=a.Source||(a.Source={})).Camera="camera",c.Microphone="microphone",c.ScreenShare="screen_share",c.ScreenShareAudio="screen_share_audio",c.Unknown="unknown",(d=g=a.StreamState||(a.StreamState={})).Active="active",d.Paused="paused",d.Unknown="unknown",a.kindToProto=function(a){switch(a){case e.Audio:return br.AUDIO;case e.Video:return br.VIDEO;default:return br.DATA}},a.kindFromProto=function(a){switch(a){case br.AUDIO:return e.Audio;case br.VIDEO:return e.Video;default:return e.Unknown}},a.sourceToProto=function(a){switch(a){case f.Camera:return bs.CAMERA;case f.Microphone:return bs.MICROPHONE;case f.ScreenShare:return bs.SCREEN_SHARE;case f.ScreenShareAudio:return bs.SCREEN_SHARE_AUDIO;default:return bs.UNKNOWN}},a.sourceFromProto=function(a){switch(a){case bs.CAMERA:return f.Camera;case bs.MICROPHONE:return f.Microphone;case bs.SCREEN_SHARE:return f.ScreenShare;case bs.SCREEN_SHARE_AUDIO:return f.ScreenShareAudio;default:return f.Unknown}},a.streamStateFromProto=function(a){switch(a){case cc.ACTIVE:return g.Active;case cc.PAUSED:return g.Paused;default:return g.Unknown}}}(ej||(ej={}));class em{constructor(a,b,c,d,e){if("object"==typeof a)this.width=a.width,this.height=a.height,this.aspectRatio=a.aspectRatio,this.encoding={maxBitrate:a.maxBitrate,maxFramerate:a.maxFramerate,priority:a.priority};else if(void 0!==b&&void 0!==c)this.width=a,this.height=b,this.aspectRatio=a/b,this.encoding={maxBitrate:c,maxFramerate:d,priority:e};else throw 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}}}let en=["vp8","h264"],eo=["vp8","h264","vp9","av1","h265"];!function(a){a[a.PREFER_REGRESSION=0]="PREFER_REGRESSION",a[a.SIMULCAST=1]="SIMULCAST",a[a.REGRESSION=2]="REGRESSION"}(C||(C={})),function(a){a.telephone={maxBitrate:12e3},a.speech={maxBitrate:24e3},a.music={maxBitrate:48e3},a.musicStereo={maxBitrate:64e3},a.musicHighQuality={maxBitrate:96e3},a.musicHighQualityStereo={maxBitrate:128e3}}(D||(D={}));let ep={h90:new em(160,90,9e4,20),h180:new em(320,180,16e4,20),h216:new em(384,216,18e4,20),h360:new em(640,360,45e4,20),h540:new em(960,540,8e5,25),h720:new em(1280,720,17e5,30),h1080:new em(1920,1080,3e6,30),h1440:new em(2560,1440,5e6,30),h2160:new em(3840,2160,8e6,30)},eq={h120:new em(160,120,7e4,20),h180:new em(240,180,125e3,20),h240:new em(320,240,14e4,20),h360:new em(480,360,33e4,20),h480:new em(640,480,5e5,20),h540:new em(720,540,6e5,25),h720:new em(960,720,13e5,30),h1080:new em(1440,1080,23e5,30),h1440:new em(1920,1440,38e5,30)},er={h360fps3:new em(640,360,2e5,3,"medium"),h360fps15:new em(640,360,4e5,15,"medium"),h720fps5:new em(1280,720,8e5,5,"medium"),h720fps15:new em(1280,720,15e5,15,"medium"),h720fps30:new em(1280,720,2e6,30,"medium"),h1080fps15:new em(1920,1080,25e5,15,"medium"),h1080fps30:new em(1920,1080,5e6,30,"medium"),original:new em(0,0,7e6,30,"medium")},es="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function et(a){return c4(this,void 0,void 0,function*(){return new Promise(b=>eh.setTimeout(b,a))})}function eu(){return"addTransceiver"in RTCPeerConnection.prototype}function ev(){return"addTrack"in RTCPeerConnection.prototype}function ew(a){return"av1"===a||"vp9"===a}function ex(a){return!(!document||eA())&&(a||(a=document.createElement("audio")),"setSinkId"in a)}function ey(){var a;return(null==(a=ed())?void 0:a.name)==="Firefox"}function ez(){var a;return(null==(a=ed())?void 0:a.name)==="Safari"}function eA(){let a=ed();return(null==a?void 0:a.name)==="Safari"||(null==a?void 0:a.os)==="iOS"}function eB(){var a,b;return!!eC()&&(null!=(b=null==(a=navigator.userAgentData)?void 0:a.mobile)?b:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent))}function eC(){return"undefined"!=typeof document}function eD(){return"ReactNative"==navigator.product}function eE(a){return a.hostname.endsWith(".livekit.cloud")||a.hostname.endsWith(".livekit.run")}function eF(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function eG(){if(!eD())return;let a=eF();if(a)return a.platform}function eH(){if(eC())return window.devicePixelRatio;if(eD()){let a=eF();if(a)return a.devicePixelRatio}return 1}function eI(a,b){let c=a.split("."),d=b.split("."),e=Math.min(c.length,d.length);for(let a=0;a<e;++a){let b=parseInt(c[a],10),f=parseInt(d[a],10);if(b>f)return 1;if(b<f)return -1;if(a===e-1&&b===f)return 0}return""===a&&""!==b?-1:""===b?1:c.length==d.length?0:c.length<d.length?-1:1}function eJ(a){for(let b of a)b.target.handleResize(b)}function eK(a){for(let b of a)b.target.handleVisibilityChanged(b)}let eL=null,eM=()=>(eL||(eL=new ResizeObserver(eJ)),eL),eN=null,eO=()=>(eN||(eN=new IntersectionObserver(eK,{root:null,rootMargin:"0px"})),eN);function eP(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16,c=arguments.length>2&&void 0!==arguments[2]&&arguments[2],d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=document.createElement("canvas");e.width=a,e.height=b;let f=e.getContext("2d");null==f||f.fillRect(0,0,e.width,e.height),d&&f&&(f.beginPath(),f.arc(a/2,b/2,50,0,2*Math.PI,!0),f.closePath(),f.fillStyle="grey",f.fill());let[g]=e.captureStream().getTracks();if(!g)throw Error("Could not get empty media stream video track");return g.enabled=c,g}function eQ(){if(!e){let a=new AudioContext,b=a.createOscillator(),c=a.createGain();c.gain.setValueAtTime(0,0);let d=a.createMediaStreamDestination();if(b.connect(c),c.connect(d),b.start(),[e]=d.stream.getAudioTracks(),!e)throw Error("Could not get empty media stream audio track");e.enabled=!1}return e.clone()}class eR{get isResolved(){return this._isResolved}constructor(a,b){this._isResolved=!1,this.onFinally=b,this.promise=new Promise((b,c)=>c4(this,void 0,void 0,function*(){this.resolve=b,this.reject=c,a&&(yield a(b,c))})).finally(()=>{var a;this._isResolved=!0,null==(a=this.onFinally)||a.call(this)})}}function eS(a){if("string"==typeof a||"number"==typeof a)return a;if(Array.isArray(a))return a[0];if(void 0!==a.exact)return Array.isArray(a.exact)?a.exact[0]:a.exact;if(void 0!==a.ideal)return Array.isArray(a.ideal)?a.ideal[0]:a.ideal;throw Error("could not unwrap constraint")}function eT(a){return a.startsWith("ws")?a.replace(/^(ws)/,"http"):a}function eU(a){switch(a.reason){case t.LeaveRequest:return a.context;case t.Cancelled:return bw.CLIENT_INITIATED;case t.NotAllowed:return bw.USER_REJECTED;case t.ServerUnreachable:return bw.JOIN_FAILURE;default:return bw.UNKNOWN_REASON}}function eV(a){return void 0!==a?Number(a):void 0}function eW(a){return void 0!==a?BigInt(a):void 0}function eX(a){return!!a&&!(a instanceof MediaStreamTrack)&&a.isLocal}function eY(a){return!!a&&a.kind==ej.Kind.Audio}function eZ(a){return!!a&&a.kind==ej.Kind.Video}function e$(a){return eX(a)&&eZ(a)}function e_(a){return eX(a)&&eY(a)}function e0(a){return!!a&&!a.isLocal}function e1(a){return e0(a)&&eZ(a)}function e2(a,b,c){var d,e;let{optionsWithoutProcessor:f,audioProcessor:g,videoProcessor:h}=fa(null!=a?a:{}),i=null==b?void 0:b.processor,j=null==c?void 0:c.processor,k=null!=f?f:{};return!0===k.audio&&(k.audio={}),!0===k.video&&(k.video={}),k.audio&&(e3(k.audio,b),null!=(d=k.audio).deviceId||(d.deviceId={ideal:"default"}),(g||i)&&(k.audio.processor=null!=g?g:i)),k.video&&(e3(k.video,c),null!=(e=k.video).deviceId||(e.deviceId={ideal:"default"}),(h||j)&&(k.video.processor=null!=h?h:j)),k}function e3(a,b){return Object.keys(b).forEach(c=>{void 0===a[c]&&(a[c]=b[c])}),a}function e4(a){var b,c;let d={};if(a.video)if("object"==typeof a.video){let c={},e=a.video;Object.keys(e).forEach(a=>{"resolution"===a?e3(c,e.resolution):c[a]=e[a]}),d.video=c,null!=(b=d.video).deviceId||(b.deviceId={ideal:"default"})}else d.video=!!a.video&&{deviceId:{ideal:"default"}};else d.video=!1;return a.audio?"object"==typeof a.audio?(d.audio=a.audio,null!=(c=d.audio).deviceId||(c.deviceId={ideal:"default"})):d.audio={deviceId:{ideal:"default"}}:d.audio=!1,d}function e5(a){return c4(this,arguments,void 0,function(a){let b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return function*(){let c=e6();if(c){let d=c.createAnalyser();d.fftSize=2048;let e=new Uint8Array(d.frequencyBinCount);c.createMediaStreamSource(new MediaStream([a.mediaStreamTrack])).connect(d),yield et(b),d.getByteTimeDomainData(e);let f=e.some(a=>128!==a&&0!==a);return c.close(),!f}return!1}()})}function e6(){var a;let b="undefined"!=typeof window&&(window.AudioContext||window.webkitAudioContext);if(b){let c=new b({latencyHint:"interactive"});if("suspended"===c.state&&"undefined"!=typeof window&&(null==(a=window.document)?void 0:a.body)){let a=()=>c4(this,void 0,void 0,function*(){var b;try{"suspended"===c.state&&(yield c.resume())}catch(a){console.warn("Error trying to auto-resume audio context",a)}null==(b=window.document.body)||b.removeEventListener("click",a)});window.document.body.addEventListener("click",a)}return c}}function e7(a){return a===ej.Source.Microphone?"audioinput":a===ej.Source.Camera?"videoinput":void 0}function e8(a){return a.split("/")[1].toLowerCase()}function e9(a){return"mediaStreamTrack"in a?{trackID:a.sid,source:a.source,muted:a.isMuted,enabled:a.mediaStreamTrack.enabled,kind:a.kind,streamID:a.mediaStreamID,streamTrackID:a.mediaStreamTrack.id}:{trackID:a.trackSid,enabled:a.isEnabled,muted:a.isMuted,trackInfo:Object.assign({mimeType:a.mimeType,name:a.trackName,encrypted:a.isEncrypted,kind:a.kind,source:a.source},a.track?e9(a.track):{})}}function fa(a){let b,c,d=Object.assign({},a);return"object"==typeof d.audio&&d.audio.processor&&(b=d.audio.processor,d.audio=Object.assign(Object.assign({},d.audio),{processor:void 0})),"object"==typeof d.video&&d.video.processor&&(c=d.video.processor,d.video=Object.assign(Object.assign({},d.video),{processor:void 0})),{audioProcessor:b,videoProcessor:c,optionsWithoutProcessor:void 0===d?d:"function"!=typeof structuredClone?JSON.parse(JSON.stringify(d)):"object"==typeof d&&null!==d?structuredClone(Object.assign({},d)):structuredClone(d)}}function fb(a,b){return a.width*a.height<b.width*b.height}class fc extends c7.EventEmitter{constructor(a){super(),this.onWorkerMessage=a=>{var b,c;let{kind:d,data:e}=a.data;switch(d){case"error":c_.error(e.error.message),this.emit(r.EncryptionError,e.error);break;case"initAck":e.enabled&&this.keyProvider.getKeys().forEach(a=>{this.postKey(a)});break;case"enable":if(e.enabled&&this.keyProvider.getKeys().forEach(a=>{this.postKey(a)}),this.encryptionEnabled!==e.enabled&&e.participantIdentity===(null==(b=this.room)?void 0:b.localParticipant.identity))this.emit(r.ParticipantEncryptionStatusChanged,e.enabled,this.room.localParticipant),this.encryptionEnabled=e.enabled;else if(e.participantIdentity){let a=null==(c=this.room)?void 0:c.getParticipantByIdentity(e.participantIdentity);if(!a)throw TypeError("couldn't set encryption status, participant not found".concat(e.participantIdentity));this.emit(r.ParticipantEncryptionStatusChanged,e.enabled,a)}break;case"ratchetKey":this.keyProvider.emit(p.KeyRatcheted,e.ratchetResult,e.participantIdentity,e.keyIndex)}},this.onWorkerError=a=>{c_.error("e2ee worker encountered an error:",{error:a.error}),this.emit(r.EncryptionError,a.error)},this.keyProvider=a.keyProvider,this.worker=a.worker,this.encryptionEnabled=!1}setup(a){if(!(void 0!==window.RTCRtpSender&&void 0!==window.RTCRtpSender.prototype.createEncodedStreams||d1()))throw new d4("tried to setup end-to-end encryption on an unsupported browser");if(c_.info("setting up e2ee"),a!==this.room){this.room=a,this.setupEventListeners(a,this.keyProvider);let b={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:c1.getLevel()}};this.worker&&(c_.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(b))}}setParticipantCryptorEnabled(a,b){c_.debug("set e2ee to ".concat(a," for participant ").concat(b)),this.postEnable(a,b)}setSifTrailer(a){a&&0!==a.length?this.postSifTrailer(a):c_.warn("ignoring server sent trailer as it's empty")}setupEngine(a){a.on(z.RTPVideoMapUpdate,a=>{this.postRTPMap(a)})}setupEventListeners(a,b){a.on(x.TrackPublished,(a,b)=>this.setParticipantCryptorEnabled(a.trackInfo.encryption!==bH.NONE,b.identity)),a.on(x.ConnectionStateChanged,b=>{b===O.Connected&&a.remoteParticipants.forEach(a=>{a.trackPublications.forEach(b=>{this.setParticipantCryptorEnabled(b.trackInfo.encryption!==bH.NONE,a.identity)})})}).on(x.TrackUnsubscribed,(a,b,c)=>{var d;let e={kind:"removeTransform",data:{participantIdentity:c.identity,trackId:a.mediaStreamID}};null==(d=this.worker)||d.postMessage(e)}).on(x.TrackSubscribed,(a,b,c)=>{this.setupE2EEReceiver(a,c.identity,b.trackInfo)}).on(x.SignalConnected,()=>{if(!this.room)throw TypeError("expected room to be present on signal connect");b.getKeys().forEach(a=>{this.postKey(a)}),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)}),a.localParticipant.on(y.LocalSenderCreated,(a,b)=>c4(this,void 0,void 0,function*(){this.setupE2EESender(b,a)})),a.localParticipant.on(y.LocalTrackPublished,a=>{if(!eZ(a.track)||!eA())return;let b={kind:"updateCodec",data:{trackId:a.track.mediaStreamID,codec:e8(a.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(b)}),b.on(p.SetKey,a=>this.postKey(a)).on(p.RatchetRequest,(a,b)=>this.postRatchetRequest(a,b))}postRatchetRequest(a,b){if(!this.worker)throw Error("could not ratchet key, worker is missing");this.worker.postMessage({kind:"ratchetRequest",data:{participantIdentity:a,keyIndex:b}})}postKey(a){var b;let{key:c,participantIdentity:d,keyIndex:e}=a;if(!this.worker)throw Error("could not set key, worker is missing");let f={kind:"setKey",data:{participantIdentity:d,isPublisher:d===(null==(b=this.room)?void 0:b.localParticipant.identity),key:c,keyIndex:e}};this.worker.postMessage(f)}postEnable(a,b){if(this.worker)this.worker.postMessage({kind:"enable",data:{enabled:a,participantIdentity:b}});else throw ReferenceError("failed to enable e2ee, worker is not ready")}postRTPMap(a){var b;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!(null==(b=this.room)?void 0:b.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");let c={kind:"setRTPMap",data:{map:a,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(c)}postSifTrailer(a){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");this.worker.postMessage({kind:"setSifTrailer",data:{trailer:a}})}setupE2EEReceiver(a,b,c){if(a.receiver){if(!(null==c?void 0:c.mimeType)||""===c.mimeType)throw TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");this.handleReceiver(a.receiver,a.mediaStreamID,b,"video"===a.kind?e8(c.mimeType):void 0)}}setupE2EESender(a,b){if(!eX(a)||!b){b||c_.warn("early return because sender is not ready");return}this.handleSender(b,a.mediaStreamID,void 0)}handleReceiver(a,b,c,d){return c4(this,void 0,void 0,function*(){if(this.worker){if(d1())a.transform=new RTCRtpScriptTransform(this.worker,{kind:"decode",participantIdentity:c,trackId:b,codec:d});else{if(d0 in a&&d)return void this.worker.postMessage({kind:"updateCodec",data:{trackId:b,codec:d,participantIdentity:c}});let e=a.writableStream,f=a.readableStream;if(!e||!f){let b=a.createEncodedStreams();a.writableStream=b.writable,e=b.writable,a.readableStream=b.readable,f=b.readable}let g={kind:"decode",data:{readableStream:f,writableStream:e,trackId:b,codec:d,participantIdentity:c,isReuse:d0 in a}};this.worker.postMessage(g,[f,e])}a[d0]=!0}})}handleSender(a,b,c){var d;if(!(d0 in a)&&this.worker){if(!(null==(d=this.room)?void 0:d.localParticipant.identity)||""===this.room.localParticipant.identity)throw TypeError("local identity needs to be known in order to set up encrypted sender");if(d1()){c_.info("initialize script transform");let d={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:b,codec:c};a.transform=new RTCRtpScriptTransform(this.worker,d)}else{c_.info("initialize encoded streams");let d=a.createEncodedStreams(),e={kind:"encode",data:{readableStream:d.readable,writableStream:d.writable,codec:c,trackId:b,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(e,[d.readable,d.writable])}a[d0]=!0}}}let fd="default";class fe{constructor(){this._previousDevices=[]}static getInstance(){return void 0===this.instance&&(this.instance=new fe),this.instance}get previousDevices(){return this._previousDevices}getDevices(a){return c4(this,arguments,void 0,function(a){var b=this;let c=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return function*(){var d;if((null==(d=fe.userMediaPromiseMap)?void 0:d.size)>0){c_.debug("awaiting getUserMedia promise");try{a?yield fe.userMediaPromiseMap.get(a):yield Promise.all(fe.userMediaPromiseMap.values())}catch(a){c_.warn("error waiting for media permissons")}}let e=yield navigator.mediaDevices.enumerateDevices();if(c&&!(ez()&&b.hasDeviceInUse(a))&&(0===e.filter(b=>b.kind===a).length||e.some(b=>{let c=""===b.label,d=!a||b.kind===a;return c&&d}))){let b=yield navigator.mediaDevices.getUserMedia({video:"audioinput"!==a&&"audiooutput"!==a,audio:"videoinput"!==a&&{deviceId:{ideal:"default"}}});e=yield navigator.mediaDevices.enumerateDevices(),b.getTracks().forEach(a=>{a.stop()})}return b._previousDevices=e,a&&(e=e.filter(b=>b.kind===a)),e}()})}normalizeDeviceId(a,b,c){return c4(this,void 0,void 0,function*(){if(b!==fd)return b;let d=yield this.getDevices(a),e=d.find(a=>a.deviceId===fd);if(!e)return void c_.warn("could not reliably determine default device");let f=d.find(a=>a.deviceId!==fd&&a.groupId===(null!=c?c:e.groupId));return f?null==f?void 0:f.deviceId:void c_.warn("could not reliably determine default device")})}hasDeviceInUse(a){return a?fe.userMediaPromiseMap.has(a):fe.userMediaPromiseMap.size>0}}fe.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],fe.userMediaPromiseMap=new Map,function(a){a[a.WAITING=0]="WAITING",a[a.RUNNING=1]="RUNNING",a[a.COMPLETED=2]="COMPLETED"}(E||(E={}));class ff{constructor(){this.pendingTasks=new Map,this.taskMutex=new af,this.nextTaskIndex=0}run(a){return c4(this,void 0,void 0,function*(){let b={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:E.WAITING};this.pendingTasks.set(b.id,b);let c=yield this.taskMutex.lock();try{return b.executedAt=Date.now(),b.status=E.RUNNING,yield a()}finally{b.status=E.COMPLETED,this.pendingTasks.delete(b.id),c()}})}flush(){return c4(this,void 0,void 0,function*(){return this.run(()=>c4(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}function fg(a,b){var c;return a.pathname="".concat((c=a.pathname).endsWith("/")?c:"".concat(c,"/")).concat(b),a.toString()}let fh=["syncState","trickle","offer","answer","simulate","leave"];!function(a){a[a.CONNECTING=0]="CONNECTING",a[a.CONNECTED=1]="CONNECTED",a[a.RECONNECTING=2]="RECONNECTING",a[a.DISCONNECTING=3]="DISCONNECTING",a[a.DISCONNECTED=4]="DISCONNECTED"}(F||(F={}));class fi{get currentState(){return this.state}get isDisconnected(){return this.state===F.DISCONNECTING||this.state===F.DISCONNECTED}get isEstablishingConnection(){return this.state===F.CONNECTING||this.state===F.RECONNECTING}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){var a;let b=arguments.length>0&&void 0!==arguments[0]&&arguments[0],c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.rtt=0,this.state=F.DISCONNECTED,this.log=c_,this._requestId=0,this.resetCallbacks=()=>{this.onAnswer=void 0,this.onLeave=void 0,this.onLocalTrackPublished=void 0,this.onLocalTrackUnpublished=void 0,this.onNegotiateRequested=void 0,this.onOffer=void 0,this.onRemoteMuteChanged=void 0,this.onSubscribedQualityUpdate=void 0,this.onTokenRefresh=void 0,this.onTrickle=void 0,this.onClose=void 0},this.log=c0(null!=(a=c.loggerName)?a:m.Signal),this.loggerContextCb=c.loggerContextCb,this.useJSON=b,this.requestQueue=new ff,this.queuedRequests=[],this.closingLock=new af,this.connectionLock=new af,this.state=F.DISCONNECTED}get logContext(){var a,b;return null!=(b=null==(a=this.loggerContextCb)?void 0:a.call(this))?b:{}}join(a,b,c,d){return c4(this,void 0,void 0,function*(){return this.state=F.CONNECTING,this.options=c,yield this.connect(a,b,c,d)})}reconnect(a,b,c,d){return c4(this,void 0,void 0,function*(){return this.options?(this.state=F.RECONNECTING,this.clearPingInterval(),yield this.connect(a,b,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:c,reconnectReason:d}))):void this.log.warn("attempted to reconnect without signal options being set, ignoring",this.logContext)})}connect(a,b,c,d){this.connectOptions=c;let e=function(a,b){let c=new URL(a.startsWith("http")?a.replace(/^(http)/,"ws"):a);return b.forEach((a,b)=>{c.searchParams.set(b,a)}),fg(c,"rtc")}(a,function(a,b,c){var d;let e=new URLSearchParams;return e.set("access_token",a),c.reconnect&&(e.set("reconnect","1"),c.sid&&e.set("sid",c.sid)),e.set("auto_subscribe",c.autoSubscribe?"1":"0"),e.set("sdk",eD()?"reactnative":"js"),e.set("version",b.version),e.set("protocol",b.protocol.toString()),b.deviceModel&&e.set("device_model",b.deviceModel),b.os&&e.set("os",b.os),b.osVersion&&e.set("os_version",b.osVersion),b.browser&&e.set("browser",b.browser),b.browserVersion&&e.set("browser_version",b.browserVersion),c.adaptiveStream&&e.set("adaptive_stream","1"),c.reconnectReason&&e.set("reconnect_reason",c.reconnectReason.toString()),(null==(d=navigator.connection)?void 0:d.type)&&e.set("network",navigator.connection.type),e}(b,function(){var a;let b=new b_({sdk:b0.JS,protocol:16,version:"2.15.7"});return eD()&&(b.os=null!=(a=eG())?a:""),b}(),c)),f=fg(new URL(eT(e)),"validate");return new Promise((a,b)=>c4(this,void 0,void 0,function*(){let g=yield this.connectionLock.lock();try{let g=()=>c4(this,void 0,void 0,function*(){this.close(),clearTimeout(h),b(new d3("room connection has been cancelled (signal)",t.Cancelled))}),h=setTimeout(()=>{this.close(),b(new d3("room connection has timed out (signal)",t.ServerUnreachable))},c.websocketTimeout);(null==d?void 0:d.aborted)&&g(),null==d||d.addEventListener("abort",g);let i=new URL(e);i.searchParams.has("access_token")&&i.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(i),Object.assign({reconnect:c.reconnect,reconnectReason:c.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new WebSocket(e),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{clearTimeout(h)},this.ws.onerror=a=>c4(this,void 0,void 0,function*(){if(this.state!==F.CONNECTED){this.state=F.DISCONNECTED,clearTimeout(h);try{let c=yield fetch(f);if(c.status.toFixed(0).startsWith("4")){let a=yield c.text();b(new d3(a,t.NotAllowed,c.status))}else b(new d3("Encountered unknown websocket error during connection: ".concat(a.toString()),t.InternalError,c.status))}catch(a){b(new d3(a instanceof Error?a.message:"server was not reachable",t.ServerUnreachable))}return}this.handleWSError(a)}),this.ws.onmessage=e=>c4(this,void 0,void 0,function*(){var f,h,i;let j;if("string"==typeof e.data){let a=JSON.parse(e.data);j=cf.fromJson(a,{ignoreUnknownFields:!0})}else{if(!(e.data instanceof ArrayBuffer))return void this.log.error("could not decode websocket message: ".concat(typeof e.data),this.logContext);j=cf.fromBinary(new Uint8Array(e.data))}if(this.state!==F.CONNECTED){let e=!1;if((null==(f=j.message)?void 0:f.case)==="join"?(this.state=F.CONNECTED,null==d||d.removeEventListener("abort",g),this.pingTimeoutDuration=j.message.value.pingTimeout,this.pingIntervalDuration=j.message.value.pingInterval,this.pingTimeoutDuration&&this.pingTimeoutDuration>0&&(this.log.debug("ping config",Object.assign(Object.assign({},this.logContext),{timeout:this.pingTimeoutDuration,interval:this.pingIntervalDuration})),this.startPingInterval()),a(j.message.value)):this.state===F.RECONNECTING&&"leave"!==j.message.case?(this.state=F.CONNECTED,null==d||d.removeEventListener("abort",g),this.startPingInterval(),(null==(h=j.message)?void 0:h.case)==="reconnect"?a(j.message.value):(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),a(void 0),e=!0)):this.isEstablishingConnection&&"leave"===j.message.case?b(new d3("Received leave request while trying to (re)connect",t.LeaveRequest,void 0,j.message.value.reason)):c.reconnect||b(new d3("did not receive join response, got ".concat(null==(i=j.message)?void 0:i.case," instead"),t.InternalError)),!e)return}this.signalLatency&&(yield et(this.signalLatency)),this.handleSignalResponse(j)}),this.ws.onclose=a=>{this.isEstablishingConnection&&b(new d3("Websocket got closed during a (re)connection attempt",t.InternalError)),this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:a.reason,code:a.code,wasClean:a.wasClean,state:this.state})),this.handleOnClose(a.reason)}}finally{g()}}))}close(){return c4(this,arguments,void 0,function(){var a=this;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return function*(){let c=yield a.closingLock.lock();try{if(a.clearPingInterval(),b&&(a.state=F.DISCONNECTING),a.ws){a.ws.onmessage=null,a.ws.onopen=null,a.ws.onclose=null;let b=new Promise(b=>{a.ws?a.ws.onclose=()=>{b()}:b()});a.ws.readyState<a.ws.CLOSING&&(a.ws.close(),yield Promise.race([b,et(250)])),a.ws=void 0}}finally{b&&(a.state=F.DISCONNECTED),c()}}()})}sendOffer(a,b){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:a.sdp})),this.sendRequest({case:"offer",value:fk(a,b)})}sendAnswer(a,b){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:a.sdp})),this.sendRequest({case:"answer",value:fk(a,b)})}sendIceCandidate(a,b){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:a})),this.sendRequest({case:"trickle",value:new ci({candidateInit:JSON.stringify(a),target:b})})}sendMuteTrack(a,b){return this.sendRequest({case:"mute",value:new cj({sid:a,muted:b})})}sendAddTrack(a){return this.sendRequest({case:"addTrack",value:a})}sendUpdateLocalMetadata(a,b){return c4(this,arguments,void 0,function(a,b){var c=this;let d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){let e=c.getNextRequestId();return yield c.sendRequest({case:"updateMetadata",value:new cx({requestId:e,metadata:a,name:b,attributes:d})}),e}()})}sendUpdateTrackSettings(a){this.sendRequest({case:"trackSetting",value:a})}sendUpdateSubscription(a){return this.sendRequest({case:"subscription",value:a})}sendSyncState(a){return this.sendRequest({case:"syncState",value:a})}sendUpdateVideoLayers(a,b){return this.sendRequest({case:"updateLayers",value:new cw({trackSid:a,layers:b})})}sendUpdateSubscriptionPermissions(a,b){return this.sendRequest({case:"subscriptionPermission",value:new cJ({allParticipants:a,trackPermissions:b})})}sendSimulateScenario(a){return this.sendRequest({case:"simulate",value:a})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:ay.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new cQ({timestamp:ay.parse(Date.now()),rtt:ay.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(a,b){return this.sendRequest({case:"updateAudioTrack",value:new cs({trackSid:a,features:b})})}sendLeave(){return this.sendRequest({case:"leave",value:new cu({reason:bw.CLIENT_INITIATED,action:cv.DISCONNECT})})}sendRequest(a){return c4(this,arguments,void 0,function(a){var b=this;let c=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function*(){if(!c&&!function(a){let b=fh.indexOf(a.case)>=0;return c_.trace("request allowed to bypass queue:",{canPass:b,req:a}),b}(a)&&b.state===F.RECONNECTING)return void b.queuedRequests.push(()=>c4(b,void 0,void 0,function*(){yield this.sendRequest(a,!0)}));if(c||(yield b.requestQueue.flush()),b.signalLatency&&(yield et(b.signalLatency)),b.isDisconnected)return void b.log.debug("skipping signal request (type: ".concat(a.case,") - SignalClient disconnected"));if(!b.ws||b.ws.readyState!==b.ws.OPEN)return void b.log.error("cannot send signal request before connected, type: ".concat(null==a?void 0:a.case),b.logContext);let d=new ce({message:a});try{b.useJSON?b.ws.send(d.toJsonString()):b.ws.send(d.toBinary())}catch(a){b.log.error("error sending signal message",Object.assign(Object.assign({},b.logContext),{error:a}))}}()})}handleSignalResponse(a){var b,c;let d=a.message;if(void 0==d)return void this.log.debug("received unsupported message",this.logContext);let e=!1;if("answer"===d.case){let a=fj(d.value);this.onAnswer&&this.onAnswer(a,d.value.id)}else if("offer"===d.case){let a=fj(d.value);this.onOffer&&this.onOffer(a,d.value.id)}else if("trickle"===d.case){let a=JSON.parse(d.value.candidateInit);this.onTrickle&&this.onTrickle(a,d.value.target)}else"update"===d.case?this.onParticipantUpdate&&this.onParticipantUpdate(null!=(b=d.value.participants)?b:[]):"trackPublished"===d.case?this.onLocalTrackPublished&&this.onLocalTrackPublished(d.value):"speakersChanged"===d.case?this.onSpeakersChanged&&this.onSpeakersChanged(null!=(c=d.value.speakers)?c:[]):"leave"===d.case?this.onLeave&&this.onLeave(d.value):"mute"===d.case?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(d.value.sid,d.value.muted):"roomUpdate"===d.case?this.onRoomUpdate&&d.value.room&&this.onRoomUpdate(d.value.room):"connectionQuality"===d.case?this.onConnectionQuality&&this.onConnectionQuality(d.value):"streamStateUpdate"===d.case?this.onStreamStateUpdate&&this.onStreamStateUpdate(d.value):"subscribedQualityUpdate"===d.case?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(d.value):"subscriptionPermissionUpdate"===d.case?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(d.value):"refreshToken"===d.case?this.onTokenRefresh&&this.onTokenRefresh(d.value):"trackUnpublished"===d.case?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(d.value):"subscriptionResponse"===d.case?this.onSubscriptionError&&this.onSubscriptionError(d.value):"pong"===d.case||("pongResp"===d.case?(this.rtt=Date.now()-Number.parseInt(d.value.lastPingTimestamp.toString()),this.resetPingTimeout(),e=!0):"requestResponse"===d.case?this.onRequestResponse&&this.onRequestResponse(d.value):"trackSubscribed"===d.case?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(d.value.trackSid):"roomMoved"===d.case?(this.onTokenRefresh&&this.onTokenRefresh(d.value.token),this.onRoomMoved&&this.onRoomMoved(d.value)):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:d.case})));e||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){let a=this.queuedRequests.shift();a&&this.requestQueue.run(a)}}handleOnClose(a){return c4(this,void 0,void 0,function*(){if(this.state===F.DISCONNECTED)return;let b=this.onClose;yield this.close(),this.log.debug("websocket connection closed: ".concat(a),Object.assign(Object.assign({},this.logContext),{reason:a})),b&&b(a)})}handleWSError(a){this.log.error("websocket error",Object.assign(Object.assign({},this.logContext),{error:a}))}resetPingTimeout(){if(this.clearPingTimeout(),!this.pingTimeoutDuration)return void this.log.warn("ping timeout duration not set",this.logContext);this.pingTimeout=eh.setTimeout(()=>{this.log.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now()-1e3*this.pingTimeoutDuration).toUTCString()),this.logContext),this.handleOnClose("ping timeout")},1e3*this.pingTimeoutDuration)}clearPingTimeout(){this.pingTimeout&&eh.clearTimeout(this.pingTimeout)}startPingInterval(){if(this.clearPingInterval(),this.resetPingTimeout(),!this.pingIntervalDuration)return void this.log.warn("ping interval duration not set",this.logContext);this.log.debug("start ping interval",this.logContext),this.pingInterval=eh.setInterval(()=>{this.sendPing()},1e3*this.pingIntervalDuration)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&eh.clearInterval(this.pingInterval)}}function fj(a){let b={type:"offer",sdp:a.sdp};switch(a.type){case"answer":case"offer":case"pranswer":case"rollback":b.type=a.type}return b}function fk(a,b){return new co({sdp:a.sdp,type:a.type,id:b})}class fl{constructor(){this.buffer=[],this._totalSize=0}push(a){this.buffer.push(a),this._totalSize+=a.data.byteLength}pop(){let a=this.buffer.shift();return a&&(this._totalSize-=a.data.byteLength),a}getAll(){return this.buffer.slice()}popToSequence(a){for(;this.buffer.length>0;)if(this.buffer[0].sequence<=a)this.pop();else break}alignBufferedAmount(a){for(;this.buffer.length>0;){let b=this.buffer[0];if(this._totalSize-b.data.byteLength<=a)break;this.pop()}}get length(){return this.buffer.length}}class fm{constructor(a){this._map=new Map,this._lastCleanup=0,this.ttl=a}set(a,b){let c=Date.now();c-this._lastCleanup>this.ttl/2&&this.cleanup();let d=c+this.ttl;return this._map.set(a,{value:b,expiresAt:d}),this}get(a){let b=this._map.get(a);if(b)return b.expiresAt<Date.now()?void this._map.delete(a):b.value}has(a){let b=this._map.get(a);return!!b&&(!(b.expiresAt<Date.now())||(this._map.delete(a),!1))}delete(a){return this._map.delete(a)}clear(){this._map.clear()}cleanup(){let a=Date.now();for(let[b,c]of this._map.entries())c.expiresAt<a&&this._map.delete(b);this._lastCleanup=a}get size(){return this.cleanup(),this._map.size}forEach(a){for(let[b,c]of(this.cleanup(),this._map.entries()))c.expiresAt>=Date.now()&&a(c.value,b,this.asValueMap())}map(a){this.cleanup();let b=[],c=this.asValueMap();for(let[d,e]of c.entries())b.push(a(e,d,c));return b}asValueMap(){let a=new Map;for(let[b,c]of this._map.entries())c.expiresAt>=Date.now()&&a.set(b,c.value);return a}}var fn={},fo={},fp={exports:{}};function fq(){if(G)return fp.exports;G=1;var a=fp.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(a){return a.encoding?"rtpmap:%d %s/%s/%s":a.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(a){return null!=a.address?"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(a){return null!=a.subtype?"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(a){return"extmap:%d"+(a.direction?"/%s":"%v")+(a["encrypt-uri"]?" %s":"%v")+" %s"+(a.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(a){return null!=a.sessionConfig?"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(a){var b="candidate:%s %d %s %d %s %d typ %s";return b+=(null!=a.raddr?" raddr %s rport %d":"%v%v")+(null!=a.tcptype?" tcptype %s":"%v"),null!=a.generation&&(b+=" generation %d"),b+=(null!=a["network-id"]?" network-id %d":"%v")+(null!=a["network-cost"]?" network-cost %d":"%v")}},{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(a){var b="ssrc:%d";return null!=a.attribute&&(b+=" %s",null!=a.value&&(b+=":%s")),b}},{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(a){return null!=a.maxMessageSize?"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(a){return a.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg: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(a){return"imageattr:%s %s %s"+(a.dir2?" %s %s":"")}},{name:"simulcast",reg:RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(a){return"simulcast:%s %s"+(a.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(a){return"ts-refclk:%s"+(null!=a.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(a){var b="mediaclk:";return b+((null!=a.id?"id=%s %s":"%v%s")+(null!=a.mediaClockValue?"=%s":"")+(null!=a.rateNumerator?" rate=%s":"")+(null!=a.rateDenominator?"/%s":""))}},{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(a).forEach(function(b){a[b].forEach(function(a){a.reg||(a.reg=/(.*)/),a.format||(a.format="%s")})}),fp.exports}var fr=function(){if(K)return fn;K=1;var a=function(){var a,b,c,d,e,f;return H?fo:(H=1,a=function(a){return String(Number(a))===a?Number(a):a},b=function(b,c,d,e){if(e&&!d)c[e]=a(b[1]);else for(var f=0;f<d.length;f+=1)null!=b[f+1]&&(c[d[f]]=a(b[f+1]))},c=function(a,c,d){var e=a.name&&a.names;a.push&&!c[a.push]?c[a.push]=[]:e&&!c[a.name]&&(c[a.name]={});var f=a.push?{}:e?c[a.name]:c;b(d.match(a.reg),f,a.names,a.name),a.push&&c[a.push].push(f)},d=fq(),e=RegExp.prototype.test.bind(/^([a-z])=(.*)/),fo.parse=function(a){var b={},f=[],g=b;return a.split(/(\r\n|\r|\n)/).filter(e).forEach(function(a){var b=a[0],e=a.slice(2);"m"===b&&(f.push({rtp:[],fmtp:[]}),g=f[f.length-1]);for(var h=0;h<(d[b]||[]).length;h+=1){var i=d[b][h];if(i.reg.test(e))return c(i,g,e)}}),b.media=f,b},f=function(b,c){var d=c.split(/=(.+)/,2);return 2===d.length?b[d[0]]=a(d[1]):1===d.length&&c.length>1&&(b[d[0]]=void 0),b},fo.parseParams=function(a){return a.split(/;\s?/).reduce(f,{})},fo.parseFmtpConfig=fo.parseParams,fo.parsePayloads=function(a){return a.toString().split(" ").map(Number)},fo.parseRemoteCandidates=function(b){for(var c=[],d=b.split(" ").map(a),e=0;e<d.length;e+=3)c.push({component:d[e],ip:d[e+1],port:d[e+2]});return c},fo.parseImageAttributes=function(a){return a.split(" ").map(function(a){return a.substring(1,a.length-1).split(",").reduce(f,{})})},fo.parseSimulcastStreamList=function(b){return b.split(";").map(function(b){return b.split(",").map(function(b){var c,d=!1;return"~"!==b[0]?c=a(b):(c=a(b.substring(1,b.length)),d=!0),{scid:c,paused:d}})})},fo)}(),b=function(){if(J)return I;J=1;var a=fq(),b=/%[sdv%]/g,c=function(a){var c=1,d=arguments,e=d.length;return a.replace(b,function(a){if(c>=e)return a;var b=d[c];switch(c+=1,a){case"%%":return"%";case"%s":return String(b);case"%d":return Number(b);case"%v":return""}})},d=function(a,b,d){var e=[a+"="+(b.format instanceof Function?b.format(b.push?d:d[b.name]):b.format)];if(b.names)for(var f=0;f<b.names.length;f+=1){var g=b.names[f];b.name?e.push(d[b.name][g]):e.push(d[b.names[f]])}else e.push(d[b.name]);return c.apply(null,e)},e=["v","o","s","i","u","e","p","c","b","t","r","z","a"],f=["i","c","b","a"];return I=function(b,c){c=c||{},null==b.version&&(b.version=0),null==b.name&&(b.name=" "),b.media.forEach(function(a){null==a.payloads&&(a.payloads="")});var g=c.outerOrder||e,h=c.innerOrder||f,i=[];return g.forEach(function(c){a[c].forEach(function(a){a.name in b&&null!=b[a.name]?i.push(d(c,a,b)):a.push in b&&null!=b[a.push]&&b[a.push].forEach(function(b){i.push(d(c,a,b))})})}),b.media.forEach(function(b){i.push(d("m",a.m[0],b)),h.forEach(function(c){a[c].forEach(function(a){a.name in b&&null!=b[a.name]?i.push(d(c,a,b)):a.push in b&&null!=b[a.push]&&b[a.push].forEach(function(b){i.push(d(c,a,b))})})})}),i.join("\r\n")+"\r\n"}}();return fn.grammar=fq(),fn.write=b,fn.parse=a.parse,fn.parseParams=a.parseParams,fn.parseFmtpConfig=a.parseFmtpConfig,fn.parsePayloads=a.parsePayloads,fn.parseRemoteCandidates=a.parseRemoteCandidates,fn.parseImageAttributes=a.parseImageAttributes,fn.parseSimulcastStreamList=a.parseSimulcastStreamList,fn}();function fs(a,b,c){void 0===b&&(b=50),void 0===c&&(c={});var d,e,f,g=null!=(d=c.isImmediate)&&d,h=null!=(e=c.callback)&&e,i=c.maxWait,j=Date.now(),k=[],l=function(){var c=[].slice.call(arguments),d=this;return new Promise(function(e,l){var m=g&&void 0===f;if(void 0!==f&&clearTimeout(f),f=setTimeout(function(){if(f=void 0,j=Date.now(),!g){var b=a.apply(d,c);h&&h(b),k.forEach(function(a){return(0,a.resolve)(b)}),k=[]}},function(){if(void 0!==i){var a=Date.now()-j;if(a+b>=i)return i-a}return b}()),m){var n=a.apply(d,c);return h&&h(n),e(n)}k.push({resolve:e,reject:l})})};return l.cancel=function(a){void 0!==f&&clearTimeout(f),k.forEach(function(b){return(0,b.reject)(a)}),k=[]},l}let ft={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class fu extends c7.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(a){var b;let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.log=c_,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=fs(a=>c4(this,void 0,void 0,function*(){this.emit(ft.NegotiationStarted);try{yield this.createAndSendOffer()}catch(b){if(a)a(b);else throw b}}),20),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=c0(null!=(b=c.loggerName)?b:m.PCTransport),this.loggerOptions=c,this.config=a,this._pc=this.createPC(),this.offerLock=new af}createPC(){let a=new RTCPeerConnection(this.config);return a.onicecandidate=a=>{var b;a.candidate&&(null==(b=this.onIceCandidate)||b.call(this,a.candidate))},a.onicecandidateerror=a=>{var b;null==(b=this.onIceCandidateError)||b.call(this,a)},a.oniceconnectionstatechange=()=>{var b;null==(b=this.onIceConnectionStateChange)||b.call(this,a.iceConnectionState)},a.onsignalingstatechange=()=>{var b;null==(b=this.onSignalingStatechange)||b.call(this,a.signalingState)},a.onconnectionstatechange=()=>{var b;null==(b=this.onConnectionStateChange)||b.call(this,a.connectionState)},a.ondatachannel=a=>{var b;null==(b=this.onDataChannel)||b.call(this,a)},a.ontrack=a=>{var b;null==(b=this.onTrack)||b.call(this,a)},a}get logContext(){var a,b;return Object.assign({},null==(b=(a=this.loggerOptions).loggerContextCb)?void 0:b.call(a))}get isICEConnected(){return null!==this._pc&&("connected"===this.pc.iceConnectionState||"completed"===this.pc.iceConnectionState)}addIceCandidate(a){return c4(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(a);this.pendingCandidates.push(a)})}setRemoteDescription(a,b){return c4(this,void 0,void 0,function*(){var c;let d;if("answer"===a.type&&this.latestOfferId>0&&b>0&&b!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",Object.assign(Object.assign({},this.logContext),{offerId:b,latestOfferId:this.latestOfferId})),!1;if("offer"===a.type){let{stereoMids:b,nackMids:c}=function(a){var b;let c=[],d=[],e=fr.parse(null!=(b=a.sdp)?b:""),f=0;return e.media.forEach(a=>{var b;let e=fx(a.mid);"audio"===a.type&&(a.rtp.some(a=>"opus"===a.codec&&(f=a.payload,!0)),(null==(b=a.rtcpFb)?void 0:b.some(a=>a.payload===f&&"nack"===a.type))&&d.push(e),a.fmtp.some(a=>a.payload===f&&(a.config.includes("sprop-stereo=1")&&c.push(e),!0)))}),{stereoMids:c,nackMids:d}}(a);this.remoteStereoMids=b,this.remoteNackMids=c}else if("answer"===a.type){let b=fr.parse(null!=(c=a.sdp)?c:"");b.media.forEach(a=>{let b=fx(a.mid);"audio"===a.type&&this.trackBitrates.some(c=>{if(!c.transceiver||b!=c.transceiver.mid)return!1;let d=0;if(a.rtp.some(a=>a.codec.toUpperCase()===c.codec.toUpperCase()&&(d=a.payload,!0)),0===d)return!0;let e=!1;for(let b of a.fmtp)if(b.payload===d){b.config=b.config.split(";").filter(a=>!a.includes("maxaveragebitrate")).join(";"),c.maxbr>0&&(b.config+=";maxaveragebitrate=".concat(1e3*c.maxbr)),e=!0;break}return!e&&c.maxbr>0&&a.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(1e3*c.maxbr)}),!0})}),d=fr.write(b)}return yield this.setMungedSDP(a,d,!0),this.pendingCandidates.forEach(a=>{this.pc.addIceCandidate(a)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):"answer"===a.type&&(this.emit(ft.NegotiationComplete),a.sdp&&fr.parse(a.sdp).media.forEach(a=>{"video"===a.type&&this.emit(ft.RTPVideoPayloadTypes,a.rtp)})),!0})}createAndSendOffer(a){return c4(this,void 0,void 0,function*(){var b;let c=yield this.offerLock.lock();try{if(void 0===this.onOffer)return;if((null==a?void 0:a.iceRestart)&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&"have-local-offer"===this._pc.signalingState){let b=this._pc.remoteDescription;if((null==a?void 0:a.iceRestart)&&b)yield this._pc.setRemoteDescription(b);else{this.renegotiate=!0;return}}else if(!this._pc||"closed"===this._pc.signalingState)return void this.log.warn("could not createOffer with closed peer connection",this.logContext);this.log.debug("starting to negotiate",this.logContext);let c=this.latestOfferId+1;this.latestOfferId=c;let d=yield this.pc.createOffer(a);this.log.debug("original offer",Object.assign({sdp:d.sdp},this.logContext));let e=fr.parse(null!=(b=d.sdp)?b:"");if(e.media.forEach(a=>{fw(a),"audio"===a.type?fv(a,[],[]):"video"===a.type&&this.trackBitrates.some(b=>{if(!a.msid||!b.cid||!a.msid.includes(b.cid))return!1;let c=0;if(a.rtp.some(a=>a.codec.toUpperCase()===b.codec.toUpperCase()&&(c=a.payload,!0)),0===c||(ew(b.codec)&&!ez()&&this.ensureVideoDDExtensionForSVC(a,e),"av1"!==b.codec))return!0;let d=Math.round(.7*b.maxbr);for(let b of a.fmtp)if(b.payload===c){b.config.includes("x-google-start-bitrate")||(b.config+=";x-google-start-bitrate=".concat(d));break}return!0})}),this.latestOfferId>c)return void this.log.warn("latestOfferId mismatch",Object.assign(Object.assign({},this.logContext),{latestOfferId:this.latestOfferId,offerId:c}));yield this.setMungedSDP(d,fr.write(e)),this.onOffer(d,this.latestOfferId)}finally{c()}})}createAndSetAnswer(){return c4(this,void 0,void 0,function*(){var a;let b=yield this.pc.createAnswer(),c=fr.parse(null!=(a=b.sdp)?a:"");return c.media.forEach(a=>{fw(a),"audio"===a.type&&fv(a,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(b,fr.write(c)),b})}createDataChannel(a,b){return this.pc.createDataChannel(a,b)}addTransceiver(a,b){return this.pc.addTransceiver(a,b)}addTrack(a){if(!this._pc)throw new d7("PC closed, cannot add track");return this._pc.addTrack(a)}setTrackCodecBitrate(a){this.trackBitrates.push(a)}setConfiguration(a){var b;if(!this._pc)throw new d7("PC closed, cannot configure");return null==(b=this._pc)?void 0:b.setConfiguration(a)}canRemoveTrack(){var a;return!!(null==(a=this._pc)?void 0:a.removeTrack)}removeTrack(a){var b;return null==(b=this._pc)?void 0:b.removeTrack(a)}getConnectionState(){var a,b;return null!=(b=null==(a=this._pc)?void 0:a.connectionState)?b:"closed"}getICEConnectionState(){var a,b;return null!=(b=null==(a=this._pc)?void 0:a.iceConnectionState)?b:"closed"}getSignallingState(){var a,b;return null!=(b=null==(a=this._pc)?void 0:a.signalingState)?b:"closed"}getTransceivers(){var a,b;return null!=(b=null==(a=this._pc)?void 0:a.getTransceivers())?b:[]}getSenders(){var a,b;return null!=(b=null==(a=this._pc)?void 0:a.getSenders())?b:[]}getLocalDescription(){var a;return null==(a=this._pc)?void 0:a.localDescription}getRemoteDescription(){var a;return null==(a=this.pc)?void 0:a.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return c4(this,void 0,void 0,function*(){var a;if(!this._pc)return;let b="",c=new Map,d=new Map;if((yield this._pc.getStats()).forEach(a=>{switch(a.type){case"transport":b=a.selectedCandidatePairId;break;case"candidate-pair":""===b&&a.selected&&(b=a.id),c.set(a.id,a);break;case"remote-candidate":d.set(a.id,"".concat(a.address,":").concat(a.port))}}),""===b)return;let e=null==(a=c.get(b))?void 0:a.remoteCandidateId;if(void 0!==e)return d.get(e)})}setMungedSDP(a,b,c){return c4(this,void 0,void 0,function*(){if(b){let d=a.sdp;a.sdp=b;try{this.log.debug("setting munged ".concat(c?"remote":"local"," description"),this.logContext),c?yield this.pc.setRemoteDescription(a):yield this.pc.setLocalDescription(a);return}catch(c){this.log.warn("not able to set ".concat(a.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:c,sdp:b})),a.sdp=d}}try{c?yield this.pc.setRemoteDescription(a):yield this.pc.setLocalDescription(a)}catch(e){let b="unknown error";e instanceof Error?b=e.message:"string"==typeof e&&(b=e);let d={error:b,sdp:a.sdp};throw!c&&this.pc.remoteDescription&&(d.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(a.type),Object.assign(Object.assign({},this.logContext),{fields:d})),new d8(b)}})}ensureVideoDDExtensionForSVC(a,b){var c,d;if(!(null==(c=a.ext)?void 0:c.some(a=>a.uri===es))){if(0===this.ddExtID){let a=0;b.media.forEach(b=>{var c;"video"===b.type&&(null==(c=b.ext)||c.forEach(b=>{b.value>a&&(a=b.value)}))}),this.ddExtID=a+1}null==(d=a.ext)||d.push({value:this.ddExtID,uri:es})}}}function fv(a,b,c){let d=fx(a.mid),e=0;a.rtp.some(a=>"opus"===a.codec&&(e=a.payload,!0)),e>0&&(a.rtcpFb||(a.rtcpFb=[]),c.includes(d)&&!a.rtcpFb.some(a=>a.payload===e&&"nack"===a.type)&&a.rtcpFb.push({payload:e,type:"nack"}),b.includes(d)&&a.fmtp.some(a=>a.payload===e&&(a.config.includes("stereo=1")||(a.config+=";stereo=1"),!0)))}function fw(a){if(a.connection){let b=a.connection.ip.indexOf(":")>=0;(4===a.connection.version&&b||6===a.connection.version&&!b)&&(a.connection.ip="0.0.0.0",a.connection.version=4)}}function fx(a){return"number"==typeof a?a.toFixed(0):a}let fy={audioPreset:D.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:er.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:"vp8",backupCodec:!0,preConnectBuffer:!1},fz={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},fA={deviceId:{ideal:"default"},resolution:ep.h720.resolution},fB={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new c3,disconnectOnPageLeave:!0,webAudioMix:!1},fC={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};!function(a){a[a.NEW=0]="NEW",a[a.CONNECTING=1]="CONNECTING",a[a.CONNECTED=2]="CONNECTED",a[a.FAILED=3]="FAILED",a[a.CLOSING=4]="CLOSING",a[a.CLOSED=5]="CLOSED"}(L||(L={}));class fD{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(a,b,c){var d;this.peerConnectionTimeout=fC.peerConnectionTimeout,this.log=c_,this.updateState=()=>{var a;let b=this.state,c=this.requiredTransports.map(a=>a.getConnectionState());c.every(a=>"connected"===a)?this.state=L.CONNECTED:c.some(a=>"failed"===a)?this.state=L.FAILED:c.some(a=>"connecting"===a)?this.state=L.CONNECTING:c.every(a=>"closed"===a)?this.state=L.CLOSED:c.some(a=>"closed"===a)?this.state=L.CLOSING:c.every(a=>"new"===a)&&(this.state=L.NEW),b!==this.state&&(this.log.debug("pc state change: from ".concat(L[b]," to ").concat(L[this.state]),this.logContext),null==(a=this.onStateChange)||a.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=c0(null!=(d=c.loggerName)?d:m.PCManager),this.loggerOptions=c,this.isPublisherConnectionRequired=!b,this.isSubscriberConnectionRequired=b,this.publisher=new fu(a,c),this.subscriber=new fu(a,c),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=a=>{var b;null==(b=this.onIceCandidate)||b.call(this,a,cb.PUBLISHER)},this.subscriber.onIceCandidate=a=>{var b;null==(b=this.onIceCandidate)||b.call(this,a,cb.SUBSCRIBER)},this.subscriber.onDataChannel=a=>{var b;null==(b=this.onDataChannel)||b.call(this,a)},this.subscriber.onTrack=a=>{var b;null==(b=this.onTrack)||b.call(this,a)},this.publisher.onOffer=(a,b)=>{var c;null==(c=this.onPublisherOffer)||c.call(this,a,b)},this.state=L.NEW,this.connectionLock=new af,this.remoteOfferLock=new af}get logContext(){var a,b;return Object.assign({},null==(b=(a=this.loggerOptions).loggerContextCb)?void 0:b.call(a))}requirePublisher(){let a=!(arguments.length>0)||void 0===arguments[0]||arguments[0];this.isPublisherConnectionRequired=a,this.updateState()}requireSubscriber(){let a=!(arguments.length>0)||void 0===arguments[0]||arguments[0];this.isSubscriberConnectionRequired=a,this.updateState()}createAndSendPublisherOffer(a){return this.publisher.createAndSendOffer(a)}setPublisherAnswer(a,b){return this.publisher.setRemoteDescription(a,b)}removeTrack(a){return this.publisher.removeTrack(a)}close(){return c4(this,void 0,void 0,function*(){if(this.publisher&&"closed"!==this.publisher.getSignallingState()){let a=this.publisher;for(let b of a.getSenders())try{a.canRemoveTrack()&&a.removeTrack(b)}catch(a){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:a}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return c4(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(a,b){return c4(this,void 0,void 0,function*(){b===cb.PUBLISHER?yield this.publisher.addIceCandidate(a):yield this.subscriber.addIceCandidate(a)})}createSubscriberAnswerFromOffer(a,b){return c4(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:a.type,sdp:a.sdp,signalingState:this.subscriber.getSignallingState().toString()}));let c=yield this.remoteOfferLock.lock();try{if(!(yield this.subscriber.setRemoteDescription(a,b)))return;return yield this.subscriber.createAndSetAnswer()}finally{c()}})}updateConfiguration(a,b){this.publisher.setConfiguration(a),this.subscriber.setConfiguration(a),b&&this.triggerIceRestart()}ensurePCTransportConnection(a,b){return c4(this,void 0,void 0,function*(){var c;let d=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&"connected"!==this.publisher.getConnectionState()&&"connecting"!==this.publisher.getConnectionState()&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all(null==(c=this.requiredTransports)?void 0:c.map(c=>this.ensureTransportConnected(c,a,b)))}finally{d()}})}negotiate(a){return c4(this,void 0,void 0,function*(){return new Promise((b,c)=>c4(this,void 0,void 0,function*(){let d=setTimeout(()=>{c("negotiation timed out")},this.peerConnectionTimeout);a.signal.addEventListener("abort",()=>{clearTimeout(d),c("negotiation aborted")}),this.publisher.once(ft.NegotiationStarted,()=>{a.signal.aborted||this.publisher.once(ft.NegotiationComplete,()=>{clearTimeout(d),b()})}),yield this.publisher.negotiate(a=>{clearTimeout(d),c(a)})}))})}addPublisherTransceiver(a,b){return this.publisher.addTransceiver(a,b)}addPublisherTrack(a){return this.publisher.addTrack(a)}createPublisherDataChannel(a,b){return this.publisher.createDataChannel(a,b)}getConnectedAddress(a){return a===cb.PUBLISHER||a===cb.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){let a=[];return this.isPublisherConnectionRequired&&a.push(this.publisher),this.isSubscriberConnectionRequired&&a.push(this.subscriber),a}ensureTransportConnected(a,b){return c4(this,arguments,void 0,function(a,b){var c=this;let d=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.peerConnectionTimeout;return function*(){if("connected"!==a.getConnectionState())return new Promise((a,e)=>c4(c,void 0,void 0,function*(){let c=()=>{this.log.warn("abort transport connection",this.logContext),eh.clearTimeout(f),e(new d3("room connection has been cancelled",t.Cancelled))};(null==b?void 0:b.signal.aborted)&&c(),null==b||b.signal.addEventListener("abort",c);let f=eh.setTimeout(()=>{null==b||b.signal.removeEventListener("abort",c),e(new d3("could not establish pc connection",t.InternalError))},d);for(;this.state!==L.CONNECTED;)if(yield et(50),null==b?void 0:b.signal.aborted)return void e(new d3("room connection has been cancelled",t.Cancelled));eh.clearTimeout(f),null==b||b.signal.removeEventListener("abort",c),a()}))}()})}}class fE extends Error{constructor(a,b,c){super(b),this.code=a,this.message=fG(b,fE.MAX_MESSAGE_BYTES),this.data=c?fG(c,fE.MAX_DATA_BYTES):void 0}static fromProto(a){return new fE(a.code,a.message,a.data)}toProto(){return new bX({code:this.code,message:this.message,data:this.data})}static builtIn(a,b){return new fE(fE.ErrorCode[a],fE.ErrorMessage[a],b)}}function fF(a){return new TextEncoder().encode(a).length}function fG(a,b){if(fF(a)<=b)return a;let c=0,d=a.length,e=new TextEncoder;for(;c<d;){let f=Math.floor((c+d+1)/2);e.encode(a.slice(0,f)).length<=b?c=f:d=f-1}return a.slice(0,c)}function fH(a,b){let c,d;return b?("bytesReceived"in a?(c=a.bytesReceived,d=b.bytesReceived):"bytesSent"in a&&(c=a.bytesSent,d=b.bytesSent),void 0===c||void 0===d||void 0===a.timestamp||void 0===b.timestamp)?0:(c-d)*8e3/(a.timestamp-b.timestamp):0}fE.MAX_MESSAGE_BYTES=256,fE.MAX_DATA_BYTES=15360,fE.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},fE.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"};let fI="undefined"!=typeof MediaRecorder;class fJ{constructor(){throw Error("MediaRecorder is not available in this environment")}}let fK=fI?MediaRecorder:fJ;class fL extends fK{constructor(a,b){let c,d;if(!fI)throw Error("MediaRecorder is not available in this environment");super(new MediaStream([a.mediaStreamTrack]),b);let e=()=>{this.removeEventListener("dataavailable",c),this.removeEventListener("stop",e),this.removeEventListener("error",f),null==d||d.close(),d=void 0},f=a=>{null==d||d.error(a),this.removeEventListener("dataavailable",c),this.removeEventListener("stop",e),this.removeEventListener("error",f),d=void 0};this.byteStream=new ReadableStream({start:a=>{d=a,c=b=>c4(this,void 0,void 0,function*(){let c;if(b.data.arrayBuffer)c=new Uint8Array((yield b.data.arrayBuffer()));else if(b.data.byteArray)c=b.data.byteArray;else throw Error("no data available!");void 0!==d&&a.enqueue(c)}),this.addEventListener("dataavailable",c)},cancel:()=>{e()}}),this.addEventListener("stop",e),this.addEventListener("error",f)}}class fM extends ej{get sender(){return this._sender}set sender(a){this._sender=a}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(a,b,c){let d=arguments.length>3&&void 0!==arguments[3]&&arguments[3],e=arguments.length>4?arguments[4]:void 0;super(a,b,e),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=fs(()=>c4(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>c4(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(A.Ended,this)},this.reacquireTrack=!1,this.providedByUser=d,this.muteLock=new af,this.pauseUpstreamLock=new af,this.trackChangeLock=new af,this.trackChangeLock.lock().then(b=>c4(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(a,!0)}finally{b()}})),this._constraints=a.getConstraints(),c&&(this._constraints=c)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==ej.Kind.Video)return;let{width:a,height:b}=this._mediaStreamTrack.getSettings();if(a&&b)return{width:a,height:b}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var a,b;return null!=(b=null==(a=this.processor)?void 0:a.processedTrack)?b:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(a,b){return c4(this,void 0,void 0,function*(){var c;let d;if(a!==this._mediaStreamTrack||b){if(this._mediaStreamTrack&&(this.attachedElements.forEach(a=>{el(this._mediaStreamTrack,a)}),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([a]),a&&(a.addEventListener("ended",this.handleEnded),a.addEventListener("mute",this.handleTrackMuteEvent),a.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=a.getConstraints()),this.processor&&a){if(this.log.debug("restarting processor",this.logContext),"unknown"===this.kind)throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(ek(a,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:a,kind:this.kind,element:this.processorElement}),d=this.processor.processedTrack}this.sender&&(null==(c=this.sender.transport)?void 0:c.state)!=="closed"&&(yield this.sender.replaceTrack(null!=d?d:a)),this.providedByUser||this._mediaStreamTrack===a||this._mediaStreamTrack.stop(),this._mediaStreamTrack=a,a&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(b=>{ek(null!=d?d:a,b)}))}})}waitForDimensions(){return c4(this,arguments,void 0,function(){var a=this;let b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;return function*(){var c;if(a.kind===ej.Kind.Audio)throw Error("cannot get dimensions for audio tracks");(null==(c=ed())?void 0:c.os)==="iOS"&&(yield et(10));let d=Date.now();for(;Date.now()-d<b;){let b=a.dimensions;if(b)return b;yield et(50)}throw new d5("unable to get track dimensions after timeout")}()})}setDeviceId(a){return c4(this,void 0,void 0,function*(){return this._constraints.deviceId===a&&this._mediaStreamTrack.getSettings().deviceId===eS(a)||(this._constraints.deviceId=a,!!this.isMuted||(yield this.restartTrack(),eS(a)===this._mediaStreamTrack.getSettings().deviceId))})}getDeviceId(){return c4(this,arguments,void 0,function(){var a=this;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return function*(){if(a.source===ej.Source.ScreenShare)return;let{deviceId:c,groupId:d}=a._mediaStreamTrack.getSettings(),e=a.kind===ej.Kind.Audio?"audioinput":"videoinput";return b?fe.getInstance().normalizeDeviceId(e,c,d):c}()})}mute(){return c4(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return c4(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(a,b){return c4(this,void 0,void 0,function*(){let c=yield this.trackChangeLock.lock();try{let c,d;if(!this.sender)throw new d5("unable to replace an unpublished track");return"boolean"==typeof b?c=b:void 0!==b&&(c=b.userProvidedTrack,d=b.stopProcessor),this.providedByUser=null==c||c,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(a),d&&this.processor&&(yield this.internalStopProcessor()),this}finally{c()}})}restart(a){return c4(this,void 0,void 0,function*(){this.manuallyStopped=!1;let b=yield this.trackChangeLock.lock();try{a||(a=this._constraints);let{deviceId:b,facingMode:c}=a,d=function(a,b){var c={};for(var d in a)Object.prototype.hasOwnProperty.call(a,d)&&0>b.indexOf(d)&&(c[d]=a[d]);if(null!=a&&"function"==typeof Object.getOwnPropertySymbols)for(var e=0,d=Object.getOwnPropertySymbols(a);e<d.length;e++)0>b.indexOf(d[e])&&Object.prototype.propertyIsEnumerable.call(a,d[e])&&(c[d[e]]=a[d[e]]);return c}(a,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:a}));let e={audio:!1,video:!1};this.kind===ej.Kind.Video?e.video=!b&&!c||{deviceId:b,facingMode:c}:e.audio=!b||Object.assign({deviceId:b},d),this.attachedElements.forEach(a=>{el(this.mediaStreamTrack,a)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();let f=(yield navigator.mediaDevices.getUserMedia(e)).getTracks()[0];return this.kind===ej.Kind.Video&&(yield f.applyConstraints(d)),f.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(f),this._constraints=a,this.emit(A.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{b()}})}setTrackMuted(a){this.log.debug("setting ".concat(this.kind," track ").concat(a?"muted":"unmuted"),this.logContext),(this.isMuted!==a||this._mediaStreamTrack.enabled===a)&&(this.isMuted=a,this._mediaStreamTrack.enabled=!a,this.emit(a?A.Muted:A.Unmuted,this))}get needsReAcquisition(){return"live"!==this._mediaStreamTrack.readyState||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){let a=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return c4(this,void 0,void 0,function*(){yield a.handleAppVisibilityChanged.call(this),eB()&&(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 a;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),null==(a=this.processor)||a.destroy(),this.processor=void 0}pauseUpstream(){return c4(this,void 0,void 0,function*(){var a;let b=yield this.pauseUpstreamLock.lock();try{if(!0===this._isUpstreamPaused)return;if(!this.sender)return void this.log.warn("unable to pause upstream for an unpublished track",this.logContext);this._isUpstreamPaused=!0,this.emit(A.UpstreamPaused,this);let b=ed();if((null==b?void 0:b.name)==="Safari"&&0>eI(b.version,"12.0"))throw new d4("pauseUpstream is not supported on Safari < 12.");(null==(a=this.sender.transport)?void 0:a.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{b()}})}resumeUpstream(){return c4(this,void 0,void 0,function*(){var a;let b=yield this.pauseUpstreamLock.lock();try{if(!1===this._isUpstreamPaused)return;if(!this.sender)return void this.log.warn("unable to resume upstream for an unpublished track",this.logContext);this._isUpstreamPaused=!1,this.emit(A.UpstreamResumed,this),(null==(a=this.sender.transport)?void 0:a.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{b()}})}getRTCStatsReport(){return c4(this,void 0,void 0,function*(){var a;if(null==(a=this.sender)?void 0:a.getStats)return yield this.sender.getStats()})}setProcessor(a){return c4(this,arguments,void 0,function(a){var b=this;let c=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return function*(){var d;let e=yield b.trackChangeLock.lock();try{b.log.debug("setting up processor",b.logContext);let e=document.createElement(b.kind),f={kind:b.kind,track:b._mediaStreamTrack,element:e,audioContext:b.audioContext};if(yield a.init(f),b.log.debug("processor initialized",b.logContext),b.processor&&(yield b.internalStopProcessor()),"unknown"===b.kind)throw TypeError("cannot set processor on track of unknown kind");if(ek(b._mediaStreamTrack,e),e.muted=!0,e.play().catch(a=>{a instanceof DOMException&&"AbortError"===a.name?(b.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},b.logContext),{error:a})),setTimeout(()=>{e.play().catch(a=>{b.log.error("failed to play processor element",Object.assign(Object.assign({},b.logContext),{err:a}))})},100)):b.log.error("failed to play processor element",Object.assign(Object.assign({},b.logContext),{error:a}))}),b.processor=a,b.processorElement=e,b.processor.processedTrack){for(let a of b.attachedElements)a!==b.processorElement&&c&&(el(b._mediaStreamTrack,a),ek(b.processor.processedTrack,a));yield null==(d=b.sender)?void 0:d.replaceTrack(b.processor.processedTrack)}b.emit(A.TrackProcessorUpdate,b.processor)}finally{e()}}()})}getProcessor(){return this.processor}stopProcessor(){return c4(this,arguments,void 0,function(){var a=this;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return function*(){let c=yield a.trackChangeLock.lock();try{yield a.internalStopProcessor(b)}finally{c()}}()})}internalStopProcessor(){return c4(this,arguments,void 0,function(){var a=this;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return function*(){var c,d;a.processor&&(a.log.debug("stopping processor",a.logContext),null==(c=a.processor.processedTrack)||c.stop(),yield a.processor.destroy(),a.processor=void 0,b||(null==(d=a.processorElement)||d.remove(),a.processorElement=void 0),yield a._mediaStreamTrack.applyConstraints(a._constraints),yield a.setMediaStreamTrack(a._mediaStreamTrack,!0),a.emit(A.TrackProcessorUpdate))}()})}startPreConnectBuffer(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;if(!fI)return void this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);if(this.localTrackRecorder)return void this.log.warn("preconnect buffer already started");{let a="audio/webm;codecs=opus";MediaRecorder.isTypeSupported(a)||(a="video/mp4"),this.localTrackRecorder=new fL(this,{mimeType:a})}this.localTrackRecorder.start(a),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},1e4)}stopPreConnectBuffer(){clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder&&(this.localTrackRecorder.stop(),this.localTrackRecorder=void 0)}getPreConnectBuffer(){var a;return null==(a=this.localTrackRecorder)?void 0:a.byteStream}getPreConnectBufferMimeType(){var a;return null==(a=this.localTrackRecorder)?void 0:a.mimeType}}class fN extends fM{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(a,b){let c=!(arguments.length>2)||void 0===arguments[2]||arguments[2],d=arguments.length>3?arguments[3]:void 0,e=arguments.length>4?arguments[4]:void 0;super(a,ej.Kind.Audio,b,c,e),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>c4(this,void 0,void 0,function*(){let a;if(!this.sender){this._currentBitrate=0;return}try{a=yield this.getSenderStats()}catch(a){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:a}));return}a&&this.prevStats&&(this._currentBitrate=fH(a,this.prevStats)),this.prevStats=a}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(A.AudioTrackFeatureUpdate,this,bz.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(A.AudioTrackFeatureUpdate,this,bz.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=d,this.checkForSilence()}mute(){let a=Object.create(null,{mute:{get:()=>super.mute}});return c4(this,void 0,void 0,function*(){let b=yield this.muteLock.lock();try{if(this.isMuted)return this.log.debug("Track already muted",this.logContext),this;return this.source===ej.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield a.mute.call(this),this}finally{b()}})}unmute(){let a=Object.create(null,{unmute:{get:()=>super.unmute}});return c4(this,void 0,void 0,function*(){let b=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;let b=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==eS(this._constraints.deviceId);return this.source===ej.Source.Microphone&&(this.stopOnMute||"ended"===this._mediaStreamTrack.readyState||b)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield a.unmute.call(this),this}finally{b()}})}restartTrack(a){return c4(this,void 0,void 0,function*(){let b;if(a){let c=e4({audio:a});"boolean"!=typeof c.audio&&(b=c.audio)}yield this.restart(b)})}restart(a){let b=Object.create(null,{restart:{get:()=>super.restart}});return c4(this,void 0,void 0,function*(){let c=yield b.restart.call(this,a);return this.checkForSilence(),c})}startMonitor(){eC()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},2e3)))}setProcessor(a){return c4(this,void 0,void 0,function*(){var b;let c=yield this.trackChangeLock.lock();try{if(!eD()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.internalStopProcessor());let c={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(a.name),this.logContext),yield a.init(c),this.processor=a,this.processor.processedTrack&&(yield null==(b=this.sender)?void 0:b.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(A.TrackProcessorUpdate,this.processor)}finally{c()}})}setAudioContext(a){this.audioContext=a}getSenderStats(){return c4(this,void 0,void 0,function*(){var a;let b;if(null==(a=this.sender)?void 0:a.getStats)return(yield this.sender.getStats()).forEach(a=>{"outbound-rtp"===a.type&&(b={type:"audio",streamId:a.id,packetsSent:a.packetsSent,packetsLost:a.packetsLost,bytesSent:a.bytesSent,timestamp:a.timestamp,roundTripTime:a.roundTripTime,jitter:a.jitter})}),b})}checkForSilence(){return c4(this,void 0,void 0,function*(){let a=yield e5(this);return a&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(A.AudioSilenceDetected)),a})}}let fO=Object.values(ep),fP=Object.values(eq),fQ=Object.values(er),fR=[ep.h180,ep.h360],fS=[eq.h180,eq.h360],fT=["q","h","f"];function fU(a,b,c,d){var e,f,g;let h,i=null==d?void 0:d.videoEncoding;a&&(i=null==d?void 0:d.screenShareEncoding);let j=null==d?void 0:d.simulcast,k=null==d?void 0:d.scalabilityMode,l=null==d?void 0:d.videoCodec;if(!i&&!j&&!k||!b||!c)return[{}];i||(i=function(a,b,c,d){let e=function(a,b,c){if(a)return fQ;let d=b>c?b/c:c/b;return Math.abs(d-16/9)<Math.abs(d-4/3)?fO:fP}(a,b,c),{encoding:f}=e[0],g=Math.max(b,c);for(let a=0;a<e.length;a+=1){let b=e[a];if(f=b.encoding,b.width>=g)break}if(d)switch(d){case"av1":case"h265":(f=Object.assign({},f)).maxBitrate=.7*f.maxBitrate;break;case"vp9":(f=Object.assign({},f)).maxBitrate=.85*f.maxBitrate}return f}(a,b,c,l),c_.debug("using video encoding",i));let m=i.maxFramerate,n=new em(b,c,i.maxBitrate,i.maxFramerate,i.priority);if(k&&ew(l)){let a=new fY(k),b=[];if(a.spatial>3)throw Error("unsupported scalabilityMode: ".concat(k));let c=ed();if(eA()||eD()||(null==c?void 0:c.name)==="Chrome"&&0>eI(null==c?void 0:c.version,"113")){let d="h"==a.suffix?2:3,e=((g=c)||(g=ed()),(null==g?void 0:g.name)==="Safari"&&eI(g.version,"18.3")>0||(null==g?void 0:g.os)==="iOS"&&!!(null==g?void 0:g.osVersion)&&eI(g.osVersion,"18.3")>0);for(let c=0;c<a.spatial;c+=1)b.push({rid:fT[2-c],maxBitrate:i.maxBitrate/Math.pow(d,c),maxFramerate:n.encoding.maxFramerate,scaleResolutionDownBy:e?Math.pow(2,c):void 0});b[0].scalabilityMode=k}else b.push({maxBitrate:i.maxBitrate,maxFramerate:n.encoding.maxFramerate,scalabilityMode:k});return n.encoding.priority&&(b[0].priority=n.encoding.priority,b[0].networkPriority=n.encoding.priority),c_.debug("using svc encoding",{encodings:b}),b}if(!j)return[i];let o=[];if((o=a?null!=(e=fX(null==d?void 0:d.screenShareSimulcastLayers))?e:fV(a,n):null!=(f=fX(null==d?void 0:d.videoSimulcastLayers))?f:fV(a,n)).length>0){let a=o[0];o.length>1&&([,h]=o);let d=Math.max(b,c);if(d>=960&&h)return fW(b,c,[a,h,n],m);if(d>=480)return fW(b,c,[a,n],m)}return fW(b,c,[n])}function fV(a,b){if(a)return[{scaleResolutionDownBy:2,fps:b.encoding.maxFramerate}].map(a=>{var c,d;return new em(Math.floor(b.width/a.scaleResolutionDownBy),Math.floor(b.height/a.scaleResolutionDownBy),Math.max(15e4,Math.floor(b.encoding.maxBitrate/(Math.pow(a.scaleResolutionDownBy,2)*((null!=(c=b.encoding.maxFramerate)?c:30)/(null!=(d=a.fps)?d:30))))),a.fps,b.encoding.priority)});let{width:c,height:d}=b,e=c>d?c/d:d/c;return Math.abs(e-16/9)<Math.abs(e-4/3)?fR:fS}function fW(a,b,c,d){let e=[];if(c.forEach((c,f)=>{if(f>=fT.length)return;let g=Math.min(a,b),h={rid:fT[f],scaleResolutionDownBy:Math.max(1,g/Math.min(c.width,c.height)),maxBitrate:c.encoding.maxBitrate},i=d&&c.encoding.maxFramerate?Math.min(d,c.encoding.maxFramerate):c.encoding.maxFramerate;i&&(h.maxFramerate=i);let j=ey()||0===f;c.encoding.priority&&j&&(h.priority=c.encoding.priority,h.networkPriority=c.encoding.priority),e.push(h)}),eD()&&"ios"===eG()){let a;e.forEach(b=>{a?b.maxFramerate&&b.maxFramerate>a&&(a=b.maxFramerate):a=b.maxFramerate});let b=!0;e.forEach(c=>{var d;c.maxFramerate!=a&&(b&&(b=!1,c_.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),c_.info('Setting framerate of encoding "'.concat(null!=(d=c.rid)?d:"",'" to ').concat(a)),c.maxFramerate=a)})}return e}function fX(a){if(a)return a.sort((a,b)=>{let{encoding:c}=a,{encoding:d}=b;return c.maxBitrate>d.maxBitrate?1:c.maxBitrate<d.maxBitrate?-1:c.maxBitrate===d.maxBitrate&&c.maxFramerate&&d.maxFramerate?c.maxFramerate>d.maxFramerate?1:-1:0})}class fY{constructor(a){let b=a.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!b)throw Error("invalid scalability mode");if(this.spatial=parseInt(b[1]),this.temporal=parseInt(b[2]),b.length>3)switch(b[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=b[3]}}toString(){var a;return"L".concat(this.spatial,"T").concat(this.temporal).concat(null!=(a=this.suffix)?a:"")}}class fZ extends fM{get sender(){return this._sender}set sender(a){this._sender=a,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(a,b){let c=!(arguments.length>2)||void 0===arguments[2]||arguments[2],d=arguments.length>3?arguments[3]:void 0;super(a,ej.Kind.Video,b,c,d),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>c4(this,void 0,void 0,function*(){let a;if(!this.sender){this._currentBitrate=0;return}try{a=yield this.getSenderStats()}catch(a){this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:a}));return}let b=new Map(a.map(a=>[a.rid,a])),c=a.some(a=>"cpu"===a.qualityLimitationReason);if(c!==this.isCpuConstrained&&(this.isCpuConstrained=c,this.isCpuConstrained&&this.emit(A.CpuConstrained)),this.prevStats){let a=0;b.forEach((b,c)=>{var d;let e=null==(d=this.prevStats)?void 0:d.get(c);a+=fH(b,e)}),this._currentBitrate=a}this.prevStats=b}),this.senderLock=new af}get isSimulcast(){return!!this.sender&&!!(this.sender.getParameters().encodings.length>1)}startMonitor(a){var b;if(this.signalClient=a,!eC())return;let c=null==(b=this.sender)?void 0:b.getParameters();c&&(this.encodings=c.encodings),this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},2e3))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(a=>{a.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){let a=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return c4(this,void 0,void 0,function*(){yield a.pauseUpstream.call(this);try{for(var b,c,d,e,f,g,h=!0,i=c5(this.simulcastCodecs.values());!(b=(g=yield i.next()).done);h=!0)e=g.value,h=!1,yield null==(f=e.sender)?void 0:f.replaceTrack(null)}catch(a){c={error:a}}finally{try{!h&&!b&&(d=i.return)&&(yield d.call(i))}finally{if(c)throw c.error}}})}resumeUpstream(){let a=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return c4(this,void 0,void 0,function*(){yield a.resumeUpstream.call(this);try{for(var b,c,d,e,f,g,h=!0,i=c5(this.simulcastCodecs.values());!(b=(g=yield i.next()).done);h=!0)e=g.value,h=!1,yield null==(f=e.sender)?void 0:f.replaceTrack(e.mediaStreamTrack)}catch(a){c={error:a}}finally{try{!h&&!b&&(d=i.return)&&(yield d.call(i))}finally{if(c)throw c.error}}})}mute(){let a=Object.create(null,{mute:{get:()=>super.mute}});return c4(this,void 0,void 0,function*(){let b=yield this.muteLock.lock();try{if(this.isMuted)return this.log.debug("Track already muted",this.logContext),this;return this.source!==ej.Source.Camera||this.isUserProvided||(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield a.mute.call(this),this}finally{b()}})}unmute(){let a=Object.create(null,{unmute:{get:()=>super.unmute}});return c4(this,void 0,void 0,function*(){let b=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;return this.source!==ej.Source.Camera||this.isUserProvided||(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield a.unmute.call(this),this}finally{b()}})}setTrackMuted(a){for(let b of(super.setTrackMuted(a),this.simulcastCodecs.values()))b.mediaStreamTrack.enabled=!a}getSenderStats(){return c4(this,void 0,void 0,function*(){var a;if(!(null==(a=this.sender)?void 0:a.getStats))return[];let b=[],c=yield this.sender.getStats();return c.forEach(a=>{var d;if("outbound-rtp"===a.type){let e={type:"video",streamId:a.id,frameHeight:a.frameHeight,frameWidth:a.frameWidth,framesPerSecond:a.framesPerSecond,framesSent:a.framesSent,firCount:a.firCount,pliCount:a.pliCount,nackCount:a.nackCount,packetsSent:a.packetsSent,bytesSent:a.bytesSent,qualityLimitationReason:a.qualityLimitationReason,qualityLimitationDurations:a.qualityLimitationDurations,qualityLimitationResolutionChanges:a.qualityLimitationResolutionChanges,rid:null!=(d=a.rid)?d:a.id,retransmittedPacketsSent:a.retransmittedPacketsSent,targetBitrate:a.targetBitrate,timestamp:a.timestamp},f=c.get(a.remoteId);f&&(e.jitter=f.jitter,e.packetsLost=f.packetsLost,e.roundTripTime=f.roundTripTime),b.push(e)}}),b.sort((a,b)=>{var c,d;return(null!=(c=b.frameWidth)?c:0)-(null!=(d=a.frameWidth)?d:0)}),b})}setPublishingQuality(a){let b=[];for(let c=B.LOW;c<=B.HIGH;c+=1)b.push(new cF({quality:c,enabled:c<=a}));this.log.debug("setting publishing quality. max quality ".concat(a),this.logContext),this.setPublishingLayers(ew(this.codec),b)}restartTrack(a){return c4(this,void 0,void 0,function*(){let b;if(a){let c=e4({video:a});"boolean"!=typeof c.video&&(b=c.video)}yield this.restart(b),this.isCpuConstrained=!1;try{for(var c,d,e,f,g,h,i=!0,j=c5(this.simulcastCodecs.values());!(c=(h=yield j.next()).done);i=!0)f=h.value,i=!1,f.sender&&(null==(g=f.sender.transport)?void 0:g.state)!=="closed"&&(f.mediaStreamTrack=this.mediaStreamTrack.clone(),yield f.sender.replaceTrack(f.mediaStreamTrack))}catch(a){d={error:a}}finally{try{!i&&!c&&(e=j.return)&&(yield e.call(j))}finally{if(d)throw d.error}}})}setProcessor(a){let b=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return c4(this,arguments,void 0,function(a){var c=this;let d=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return function*(){if(yield b.setProcessor.call(c,a,d),null==(i=c.processor)?void 0:i.processedTrack)try{for(var e,f,g,h,i,j,k,l=!0,m=c5(c.simulcastCodecs.values());!(e=(k=yield m.next()).done);l=!0)h=k.value,l=!1,yield null==(j=h.sender)?void 0:j.replaceTrack(c.processor.processedTrack)}catch(a){f={error:a}}finally{try{!l&&!e&&(g=m.return)&&(yield g.call(m))}finally{if(f)throw f.error}}}()})}setDegradationPreference(a){return c4(this,void 0,void 0,function*(){if(this.degradationPreference=a,this.sender)try{this.log.debug("setting degradationPreference to ".concat(a),this.logContext);let b=this.sender.getParameters();b.degradationPreference=a,this.sender.setParameters(b)}catch(a){this.log.warn("failed to set degradationPreference",Object.assign({error:a},this.logContext))}})}addSimulcastTrack(a,b){if(this.simulcastCodecs.has(a))return void this.log.error("".concat(a," already added, skipping adding simulcast codec"),this.logContext);let c={codec:a,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:b};return this.simulcastCodecs.set(a,c),c}setSimulcastTrackSender(a,b){let c=this.simulcastCodecs.get(a);c&&(c.sender=b,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},5e3))}setPublishingCodecs(a){return c4(this,void 0,void 0,function*(){var b,c,d,e,f,g,h;if(this.log.debug("setting publishing codecs",Object.assign(Object.assign({},this.logContext),{codecs:a,currentCodec:this.codec})),!this.codec&&a.length>0)return yield this.setPublishingLayers(ew(a[0].codec),a[0].qualities),[];this.subscribedCodecs=a;let i=[];try{for(b=!0,c=c5(a);!(e=(d=yield c.next()).done);b=!0)if(h=d.value,b=!1,this.codec&&this.codec!==h.codec){let a=this.simulcastCodecs.get(h.codec);if(this.log.debug("try setPublishingCodec for ".concat(h.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:a})),a&&a.sender)a.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(h.codec),this.logContext),yield f$(a.sender,a.encodings,h.qualities,this.senderLock,ew(h.codec),this.log,this.logContext));else for(let a of h.qualities)if(a.enabled){i.push(h.codec);break}}else yield this.setPublishingLayers(ew(h.codec),h.qualities)}catch(a){f={error:a}}finally{try{!b&&!e&&(g=c.return)&&(yield g.call(c))}finally{if(f)throw f.error}}return i})}setPublishingLayers(a,b){return c4(this,void 0,void 0,function*(){if(this.optimizeForPerformance)return void this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:b}));this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:b})),this.sender&&this.encodings&&(yield f$(this.sender,this.encodings,b,this.senderLock,a,this.log,this.logContext))})}prioritizePerformance(){return c4(this,void 0,void 0,function*(){if(!this.sender)throw Error("sender not found");let a=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;let a=this.sender.getParameters();a.encodings=a.encodings.map((a,b)=>{var c;return Object.assign(Object.assign({},a),{active:0===b,scaleResolutionDownBy:Math.max(1,Math.ceil((null!=(c=this.mediaStreamTrack.getSettings().height)?c:360)/360)),scalabilityMode:0===b&&ew(this.codec)?"L1T3":void 0,maxFramerate:15*(0===b),maxBitrate:0===b?a.maxBitrate:0})}),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:a.encodings})),this.encodings=a.encodings,yield this.sender.setParameters(a)}catch(a){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:a})),this.optimizeForPerformance=!1}finally{a()}})}handleAppVisibilityChanged(){let a=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return c4(this,void 0,void 0,function*(){yield a.handleAppVisibilityChanged.call(this),eB()&&this.isInBackground&&this.source===ej.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function f$(a,b,c,d,e,f,g){return c4(this,void 0,void 0,function*(){let h=yield d.lock();f.debug("setPublishingLayersForSender",Object.assign(Object.assign({},g),{sender:a,qualities:c,senderEncodings:b}));try{let d=a.getParameters(),{encodings:h}=d;if(!h)return;if(h.length!==b.length)return void f.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},g),{encodings:h,senderEncodings:b}));let i=!1;e&&c.some(a=>a.enabled)&&c.forEach(a=>a.enabled=!0),h.forEach((a,d)=>{var e;let h=null!=(e=a.rid)?e:"";""===h&&(h="q");let j=f_(h),k=c.find(a=>a.quality===j);k&&a.active!==k.enabled&&(i=!0,a.active=k.enabled,f.debug("setting layer ".concat(k.quality," to ").concat(a.active?"enabled":"disabled"),g),ey()&&(k.enabled?(a.scaleResolutionDownBy=b[d].scaleResolutionDownBy,a.maxBitrate=b[d].maxBitrate,a.maxFrameRate=b[d].maxFrameRate):(a.scaleResolutionDownBy=4,a.maxBitrate=10,a.maxFrameRate=2)))}),i&&(d.encodings=h,f.debug("setting encodings",Object.assign(Object.assign({},g),{encodings:d.encodings})),yield a.setParameters(d))}finally{h()}})}function f_(a){switch(a){case"f":default:return B.HIGH;case"h":return B.MEDIUM;case"q":return B.LOW}}function f0(a,b,c,d){if(!c)return[new bK({quality:B.HIGH,width:a,height:b,bitrate:0,ssrc:0})];if(d){let d=new fY(c[0].scalabilityMode),e=[],f="h"==d.suffix?1.5:2,g="h"==d.suffix?2:3;for(let h=0;h<d.spatial;h+=1)e.push(new bK({quality:Math.min(B.HIGH,d.spatial-1)-h,width:Math.ceil(a/Math.pow(f,h)),height:Math.ceil(b/Math.pow(f,h)),bitrate:c[0].maxBitrate?Math.ceil(c[0].maxBitrate/Math.pow(g,h)):0,ssrc:0}));return e}return c.map(c=>{var d,e,f;let g=null!=(d=c.scaleResolutionDownBy)?d:1;return new bK({quality:f_(null!=(e=c.rid)?e:""),width:Math.ceil(a/g),height:Math.ceil(b/g),bitrate:null!=(f=c.maxBitrate)?f:0,ssrc:0})})}let f1="_lossy",f2="_reliable",f3="leave-reconnect";!function(a){a[a.New=0]="New",a[a.Connected=1]="Connected",a[a.Disconnected=2]="Disconnected",a[a.Reconnecting=3]="Reconnecting",a[a.Closed=4]="Closed"}(M||(M={}));class f4 extends c7.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(a){var b;super(),this.options=a,this.rtcConfig={},this.peerConnectionTimeout=fC.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=M.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=c_,this.reliableDataSequence=1,this.reliableMessageBuffer=new fl,this.reliableReceivedState=new fm(3e4),this.handleDataChannel=a=>c4(this,[a],void 0,function(a){var b=this;let{channel:c}=a;return function*(){if(c){if(c.label===f2)b.reliableDCSub=c;else{if(c.label!==f1)return;b.lossyDCSub=c}b.log.debug("on data channel ".concat(c.id,", ").concat(c.label),b.logContext),c.onmessage=b.handleDataMessage}}()}),this.handleDataMessage=a=>c4(this,void 0,void 0,function*(){var b,c;let d=yield this.dataProcessLock.lock();try{let d;if(a.data instanceof ArrayBuffer)d=a.data;else{if(!(a.data instanceof Blob))return void this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:a.data}));d=yield a.data.arrayBuffer()}let e=bL.fromBinary(new Uint8Array(d));if(e.sequence>0&&""!==e.participantSid){let a=this.reliableReceivedState.get(e.participantSid);if(a&&e.sequence<=a)return;this.reliableReceivedState.set(e.participantSid,e.sequence)}(null==(b=e.value)?void 0:b.case)==="speaker"?this.emit(z.ActiveSpeakersUpdate,e.value.value.speakers):((null==(c=e.value)?void 0:c.case)==="user"&&function(a,b){let c=a.participantIdentity?a.participantIdentity:b.participantIdentity;a.participantIdentity=c,b.participantIdentity=c;let d=0!==a.destinationIdentities.length?a.destinationIdentities:b.destinationIdentities;a.destinationIdentities=d,b.destinationIdentities=d}(e,e.value.value),this.emit(z.DataPacketReceived,e))}finally{d()}}),this.handleDataError=a=>{let b=0===a.currentTarget.maxRetransmits?"lossy":"reliable";if(a instanceof ErrorEvent&&a.error){let{error:c}=a.error;this.log.error("DataChannel error on ".concat(b,": ").concat(a.message),Object.assign(Object.assign({},this.logContext),{error:c}))}else this.log.error("Unknown DataChannel error on ".concat(b),Object.assign(Object.assign({},this.logContext),{event:a}))},this.handleBufferedAmountLow=a=>{let b=0===a.currentTarget.maxRetransmits?bM.LOSSY:bM.RELIABLE;this.updateAndEmitDCBufferStatus(b)},this.handleDisconnect=(a,b)=>{if(this._isClosed)return;this.log.warn("".concat(a," disconnected"),this.logContext),0===this.reconnectAttempts&&(this.reconnectStart=Date.now());let c=a=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(a,"ms. giving up"),this.logContext),this.emit(z.Disconnected),this.close()},d=Date.now()-this.reconnectStart,e=this.getNextRetryDelay({elapsedMs:d,retryCount:this.reconnectAttempts});if(null===e)return void c(d);a===f3&&(e=0),this.log.debug("reconnecting in ".concat(e,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=eh.setTimeout(()=>this.attemptReconnect(b).finally(()=>this.reconnectTimeout=void 0),e)},this.waitForRestarted=()=>new Promise((a,b)=>{this.pcState===M.Connected&&a();let c=()=>{this.off(z.Disconnected,d),a()},d=()=>{this.off(z.Restarted,c),b()};this.once(z.Restarted,c),this.once(z.Disconnected,d)}),this.updateAndEmitDCBufferStatus=a=>{let b=this.isBufferStatusLow(a);void 0!==b&&b!==this.dcBufferStatus.get(a)&&(this.dcBufferStatus.set(a,b),this.emit(z.DCBufferStatusChanged,b,a))},this.isBufferStatusLow=a=>{let b=this.dataChannelForKind(a);if(b)return a===bM.RELIABLE&&this.reliableMessageBuffer.alignBufferedAmount(b.bufferedAmount),b.bufferedAmount<=b.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===F.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(bx.RR_SIGNAL_DISCONNECTED))},this.log=c0(null!=(b=a.loggerName)?b:m.Engine),this.loggerOptions={loggerName:a.loggerName,loggerContextCb:()=>this.logContext},this.client=new fi(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new af,this.dataProcessLock=new af,this.dcBufferStatus=new Map([[bM.LOSSY,!0],[bM.RELIABLE,!0]]),this.client.onParticipantUpdate=a=>this.emit(z.ParticipantUpdate,a),this.client.onConnectionQuality=a=>this.emit(z.ConnectionQualityUpdate,a),this.client.onRoomUpdate=a=>this.emit(z.RoomUpdate,a),this.client.onSubscriptionError=a=>this.emit(z.SubscriptionError,a),this.client.onSubscriptionPermissionUpdate=a=>this.emit(z.SubscriptionPermissionUpdate,a),this.client.onSpeakersChanged=a=>this.emit(z.SpeakersChanged,a),this.client.onStreamStateUpdate=a=>this.emit(z.StreamStateChanged,a),this.client.onRequestResponse=a=>this.emit(z.SignalRequestResponse,a)}get logContext(){var a,b,c,d,e,f;return{room:null==(b=null==(a=this.latestJoinResponse)?void 0:a.room)?void 0:b.name,roomID:null==(d=null==(c=this.latestJoinResponse)?void 0:c.room)?void 0:d.sid,participant:null==(f=null==(e=this.latestJoinResponse)?void 0:e.participant)?void 0:f.identity,pID:this.participantSid}}join(a,b,c,d){return c4(this,void 0,void 0,function*(){this.url=a,this.token=b,this.signalOpts=c,this.maxJoinAttempts=c.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();let e=yield this.client.join(a,b,c,d);return this._isClosed=!1,this.latestJoinResponse=e,this.subscriberPrimary=e.subscriberPrimary,this.pcManager||(yield this.configure(e)),(!this.subscriberPrimary||e.fastPublish)&&this.negotiate(),this.clientConfiguration=e.clientConfiguration,this.emit(z.SignalConnected,e),e}catch(e){if(e instanceof d3&&e.reason===t.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts<this.maxJoinAttempts))return this.join(a,b,c,d);throw e}})}close(){return c4(this,void 0,void 0,function*(){let a=yield this.closingLock.lock();if(this.isClosed)return void a();try{this._isClosed=!0,this.joinAttempts=0,this.emit(z.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{a()}})}cleanupPeerConnections(){return c4(this,void 0,void 0,function*(){var a;yield null==(a=this.pcManager)?void 0:a.close(),this.pcManager=void 0;let b=a=>{a&&(a.close(),a.onbufferedamountlow=null,a.onclose=null,a.onclosing=null,a.onerror=null,a.onmessage=null,a.onopen=null)};b(this.lossyDC),b(this.lossyDCSub),b(this.reliableDC),b(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0,this.reliableMessageBuffer=new fl,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupClient(){return c4(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(a){if(this.pendingTrackResolvers[a.cid])throw new d5("a track with the same ID has already been published");return new Promise((b,c)=>{let d=setTimeout(()=>{delete this.pendingTrackResolvers[a.cid],c(new d3("publication of local track timed out, no response from server",t.Timeout))},1e4);this.pendingTrackResolvers[a.cid]={resolve:a=>{clearTimeout(d),b(a)},reject:()=>{clearTimeout(d),c(Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(a)})}removeTrack(a){if(a.track&&this.pendingTrackResolvers[a.track.id]){let{reject:b}=this.pendingTrackResolvers[a.track.id];b&&b(),delete this.pendingTrackResolvers[a.track.id]}try{return this.pcManager.removeTrack(a),!0}catch(a){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:a}))}return!1}updateMuteStatus(a,b){this.client.sendMuteTrack(a,b)}get dataSubscriberReadyState(){var a;return null==(a=this.reliableDCSub)?void 0:a.readyState}getConnectedServerAddress(){return c4(this,void 0,void 0,function*(){var a;return null==(a=this.pcManager)?void 0:a.getConnectedAddress()})}setRegionUrlProvider(a){this.regionUrlProvider=a}configure(a){return c4(this,void 0,void 0,function*(){var b,c,d;if(this.pcManager&&this.pcManager.currentState!==L.NEW)return;this.participantSid=null==(b=a.participant)?void 0:b.sid;let e=this.makeRTCConfiguration(a);this.pcManager=new fD(e,a.subscriberPrimary,this.loggerOptions),this.emit(z.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(a,b)=>{this.client.sendIceCandidate(a,b)},this.pcManager.onPublisherOffer=(a,b)=>{this.client.sendOffer(a,b)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(b,c,d)=>c4(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(b),this.logContext),["closed","disconnected","failed"].includes(c)&&(this.publisherConnectionPromise=void 0),b===L.CONNECTED){let b=this.pcState===M.New;this.pcState=M.Connected,b&&this.emit(z.Connected,a)}else b===L.FAILED&&this.pcState===M.Connected&&(this.pcState=M.Disconnected,this.handleDisconnect("peerconnection failed","failed"===d?bx.RR_SUBSCRIBER_FAILED:bx.RR_PUBLISHER_FAILED));let e=this.client.isDisconnected||this.client.currentState===F.RECONNECTING,f=[L.FAILED,L.CLOSING,L.CLOSED].includes(b);e&&f&&!this._isClosed&&this.emit(z.Offline)}),this.pcManager.onTrack=a=>{this.emit(z.MediaTrackAdded,a.track,a.streams[0],a.receiver)},void 0!==(d=null==(c=a.serverInfo)?void 0:c.protocol)&&d>13||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(a,b)=>c4(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:a.type})),yield this.pcManager.setPublisherAnswer(a,b))}),this.client.onTrickle=(a,b)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:a,target:b})),this.pcManager.addIceCandidate(a,b))},this.client.onOffer=(a,b)=>c4(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=b,!this.pcManager)return;let c=yield this.pcManager.createSubscriberAnswerFromOffer(a,b);c&&this.client.sendAnswer(c,b)}),this.client.onLocalTrackPublished=a=>{var b;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:a.cid,track:null==(b=a.track)?void 0:b.sid})),!this.pendingTrackResolvers[a.cid])return void this.log.error("missing track resolver for ".concat(a.cid),Object.assign(Object.assign({},this.logContext),{cid:a.cid}));let{resolve:c}=this.pendingTrackResolvers[a.cid];delete this.pendingTrackResolvers[a.cid],c(a.track)},this.client.onLocalTrackUnpublished=a=>{this.emit(z.LocalTrackUnpublished,a)},this.client.onLocalTrackSubscribed=a=>{this.emit(z.LocalTrackSubscribed,a)},this.client.onTokenRefresh=a=>{this.token=a},this.client.onRemoteMuteChanged=(a,b)=>{this.emit(z.RemoteMute,a,b)},this.client.onSubscribedQualityUpdate=a=>{this.emit(z.SubscribedQualityUpdate,a)},this.client.onRoomMoved=a=>{var b;this.participantSid=null==(b=a.participant)?void 0:b.sid,this.latestJoinResponse&&(this.latestJoinResponse.room=a.room),this.emit(z.RoomMoved,a)},this.client.onClose=()=>{this.handleDisconnect("signal",bx.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=a=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:null==a?void 0:a.reason})),a.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(a.regions)),a.action){case cv.DISCONNECT:this.emit(z.Disconnected,null==a?void 0:a.reason),this.close();break;case cv.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(f3);break;case cv.RESUME:this.handleDisconnect(f3)}}}makeRTCConfiguration(a){var b;let c=Object.assign({},this.rtcConfig);if((null==(b=this.signalOpts)?void 0:b.e2eeEnabled)&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),c.encodedInsertableStreams=!0),a.iceServers&&!c.iceServers){let b=[];a.iceServers.forEach(a=>{let c={urls:a.urls};a.username&&(c.username=a.username),a.credential&&(c.credential=a.credential),b.push(c)}),c.iceServers=b}return a.clientConfiguration&&a.clientConfiguration.forceRelay===bv.ENABLED&&(c.iceTransportPolicy="relay"),c.sdpSemantics="unified-plan",c.continualGatheringPolicy="gather_continually",c}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(f1,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(f2,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(a,b,c){return c4(this,void 0,void 0,function*(){if(eu())return yield this.createTransceiverRTCRtpSender(a,b,c);if(ev())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(a.mediaStreamTrack);throw new d7("Required webRTC APIs not supported on this device")})}createSimulcastSender(a,b,c,d){return c4(this,void 0,void 0,function*(){if(eu())return this.createSimulcastTransceiverSender(a,b,c,d);if(ev())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(a.mediaStreamTrack);throw new d7("Cannot stream on this device")})}createTransceiverRTCRtpSender(a,b,c){return c4(this,void 0,void 0,function*(){if(!this.pcManager)throw new d7("publisher is closed");let d=[];a.mediaStream&&d.push(a.mediaStream),eZ(a)&&(a.codec=b.videoCodec);let e={direction:"sendonly",streams:d};return c&&(e.sendEncodings=c),(yield this.pcManager.addPublisherTransceiver(a.mediaStreamTrack,e)).sender})}createSimulcastTransceiverSender(a,b,c,d){return c4(this,void 0,void 0,function*(){if(!this.pcManager)throw new d7("publisher is closed");let e={direction:"sendonly"};d&&(e.sendEncodings=d);let f=yield this.pcManager.addPublisherTransceiver(b.mediaStreamTrack,e);if(c.videoCodec)return a.setSimulcastTrackSender(c.videoCodec,f.sender),f.sender})}createRTCRtpSender(a){return c4(this,void 0,void 0,function*(){if(!this.pcManager)throw new d7("publisher is closed");return this.pcManager.addPublisherTrack(a)})}attemptReconnect(a){return c4(this,void 0,void 0,function*(){var b,c,d;if(!this._isClosed){if(this.attemptingReconnect)return void c_.warn("already attempting reconnect, returning early",this.logContext);((null==(b=this.clientConfiguration)?void 0:b.resumeConnection)===bv.DISABLED||(null!=(d=null==(c=this.pcManager)?void 0:c.currentState)?d:L.NEW)===L.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(a),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(b){this.reconnectAttempts+=1;let a=!0;b instanceof d7?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:b})),a=!1):b instanceof f5||(this.fullReconnectOnNext=!0),a?this.handleDisconnect("reconnect",bx.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(z.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(a){try{return this.reconnectPolicy.nextRetryDelayInMs(a)}catch(a){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:a}))}return null}restartConnection(a){return c4(this,void 0,void 0,function*(){var b,c,d;try{let c;if(!this.url||!this.token)throw new d7("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(z.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new f5;c=yield this.join(null!=a?a:this.url,this.token,this.signalOpts)}catch(a){if(a instanceof d3&&a.reason===t.NotAllowed)throw new d7("could not reconnect, token might be expired");throw new f5}if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(this.client.setReconnected(),this.emit(z.SignalRestarted,c),yield this.waitForPCReconnected(),this.client.currentState!==F.CONNECTED)throw new f5("Signal connection got severed during reconnect");null==(b=this.regionUrlProvider)||b.resetAttempts(),this.emit(z.Restarted)}catch(b){let a=yield null==(c=this.regionUrlProvider)?void 0:c.getNextBestRegionUrl();if(a)return void(yield this.restartConnection(a));throw null==(d=this.regionUrlProvider)||d.resetAttempts(),b}})}resumeConnection(a){return c4(this,void 0,void 0,function*(){var b;let c;if(!this.url||!this.token)throw new d7("could not reconnect, url or token not saved");if(!this.pcManager)throw new d7("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(z.Resuming);try{this.setupSignalClientCallbacks(),c=yield this.client.reconnect(this.url,this.token,this.participantSid,a)}catch(b){let a="";if(b instanceof Error&&(a=b.message,this.log.error(b.message,Object.assign(Object.assign({},this.logContext),{error:b}))),b instanceof d3&&b.reason===t.NotAllowed)throw new d7("could not reconnect, token might be expired");if(b instanceof d3&&b.reason===t.LeaveRequest)throw b;throw new f5(a)}if(this.emit(z.SignalResumed),c){let a=this.makeRTCConfiguration(c);this.pcManager.updateConfiguration(a),this.latestJoinResponse&&(this.latestJoinResponse.serverInfo=c.serverInfo)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==F.CONNECTED)throw new f5("Signal connection got severed during reconnect");this.client.setReconnected(),(null==(b=this.reliableDC)?void 0:b.readyState)==="open"&&null===this.reliableDC.id&&this.createDataChannels(),(null==c?void 0:c.lastMessageSeq)&&this.resendReliableMessagesForResume(c.lastMessageSeq),this.emit(z.Resumed)})}waitForPCInitialConnection(a,b){return c4(this,void 0,void 0,function*(){if(!this.pcManager)throw new d7("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(b,a)})}waitForPCReconnected(){return c4(this,void 0,void 0,function*(){this.pcState=M.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield et(2e3),!this.pcManager)throw new d7("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=M.Connected}catch(a){throw this.pcState=M.Disconnected,new d3("could not establish PC connection, ".concat(a.message),t.InternalError)}})}publishRpcResponse(a,b,c,d){return c4(this,void 0,void 0,function*(){let e=new bL({destinationIdentities:[a],kind:bM.RELIABLE,value:{case:"rpcResponse",value:new bW({requestId:b,value:d?{case:"error",value:d.toProto()}:{case:"payload",value:null!=c?c:""}})}});yield this.sendDataPacket(e,bM.RELIABLE)})}publishRpcAck(a,b){return c4(this,void 0,void 0,function*(){let c=new bL({destinationIdentities:[a],kind:bM.RELIABLE,value:{case:"rpcAck",value:new bV({requestId:b})}});yield this.sendDataPacket(c,bM.RELIABLE)})}sendDataPacket(a,b){return c4(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(b),b===bM.RELIABLE&&(a.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);let c=a.toBinary(),d=this.dataChannelForKind(b);if(d){if(b===bM.RELIABLE&&this.reliableMessageBuffer.push({data:c,sequence:a.sequence}),this.attemptingReconnect)return;d.send(c)}this.updateAndEmitDCBufferStatus(b)})}resendReliableMessagesForResume(a){return c4(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(bM.RELIABLE);let b=this.dataChannelForKind(bM.RELIABLE);b&&(this.reliableMessageBuffer.popToSequence(a),this.reliableMessageBuffer.getAll().forEach(a=>{b.send(a.data)})),this.updateAndEmitDCBufferStatus(bM.RELIABLE)})}waitForBufferStatusLow(a){return new Promise((b,c)=>c4(this,void 0,void 0,function*(){if(this.isBufferStatusLow(a))b();else{let d=()=>c("Engine closed");for(this.once(z.Closing,d);!this.dcBufferStatus.get(a);)yield et(10);this.off(z.Closing,d),b()}}))}ensureDataTransportConnected(a){return c4(this,arguments,void 0,function(a){var b=this;let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.subscriberPrimary;return function*(){var d;if(!b.pcManager)throw new d7("PC manager is closed");let e=c?b.pcManager.subscriber:b.pcManager.publisher,f=c?"Subscriber":"Publisher";if(!e)throw new d3("".concat(f," connection not set"),t.InternalError);let g=!1;c||b.dataChannelForKind(a,c)||(b.createDataChannels(),g=!0),g||c||b.pcManager.publisher.isICEConnected||"checking"===b.pcManager.publisher.getICEConnectionState()||(g=!0),g&&b.negotiate();let h=b.dataChannelForKind(a,c);if((null==h?void 0:h.readyState)==="open")return;let i=new Date().getTime()+b.peerConnectionTimeout;for(;new Date().getTime()<i;){if(e.isICEConnected&&(null==(d=b.dataChannelForKind(a,c))?void 0:d.readyState)==="open")return;yield et(50)}throw new d3("could not establish ".concat(f," connection, state: ").concat(e.getICEConnectionState()),t.InternalError)}()})}ensurePublisherConnected(a){return c4(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(a,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!!this.pcManager&&this.pcManager.currentState===L.CONNECTED&&!!this.client.ws&&this.client.ws.readyState!==WebSocket.CLOSED}negotiate(){return c4(this,void 0,void 0,function*(){return new Promise((a,b)=>c4(this,void 0,void 0,function*(){if(!this.pcManager)return void b(new d8("PC manager is closed"));this.pcManager.requirePublisher(),0!=this.pcManager.publisher.getTransceivers().length||this.lossyDC||this.reliableDC||this.createDataChannels();let c=new AbortController,d=()=>{c.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),a()};this.isClosed&&b("cannot negotiate on closed engine"),this.on(z.Closing,d),this.pcManager.publisher.once(ft.RTPVideoPayloadTypes,a=>{let b=new Map;a.forEach(a=>{let c=a.codec.toLowerCase();eo.includes(c)&&b.set(a.payload,c)}),this.emit(z.RTPVideoMapUpdate,b)});try{yield this.pcManager.negotiate(c),a()}catch(a){a instanceof d8&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",bx.RR_UNKNOWN),b(a)}finally{this.off(z.Closing,d)}}))})}dataChannelForKind(a,b){if(b){if(a===bM.LOSSY)return this.lossyDCSub;if(a===bM.RELIABLE)return this.reliableDCSub}else{if(a===bM.LOSSY)return this.lossyDC;if(a===bM.RELIABLE)return this.reliableDC}}sendSyncState(a,b){var c,d;if(!this.pcManager)return void this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);let e=this.pcManager.subscriber.getLocalDescription(),f=this.pcManager.subscriber.getRemoteDescription(),g=null==(d=null==(c=this.signalOpts)?void 0:c.autoSubscribe)||d,h=[],i=[];a.forEach(a=>{a.isDesired!==g&&h.push(a.trackSid),a.isEnabled||i.push(a.trackSid)}),this.client.sendSyncState(new cM({answer:e?fk({sdp:e.sdp,type:e.type}):void 0,offer:f?fk({sdp:f.sdp,type:f.type}):void 0,subscription:new cq({trackSids:h,subscribe:!g,participantTracks:[]}),publishTracks:function(a){let b=[];return a.forEach(a=>{void 0!==a.track&&b.push(new cm({cid:a.track.mediaStreamID,track:a.trackInfo}))}),b}(b),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:i,datachannelReceiveStates:this.reliableReceivedState.map((a,b)=>new cN({publisherSid:b,lastSeq:a}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){let a=[],b=(b,c)=>{(null==b?void 0:b.id)!==void 0&&null!==b.id&&a.push(new cO({label:b.label,id:b.id,target:c}))};return b(this.dataChannelForKind(bM.LOSSY),cb.PUBLISHER),b(this.dataChannelForKind(bM.RELIABLE),cb.PUBLISHER),b(this.dataChannelForKind(bM.LOSSY,!0),cb.SUBSCRIBER),b(this.dataChannelForKind(bM.RELIABLE,!0),cb.SUBSCRIBER),a}clearReconnectTimeout(){this.reconnectTimeout&&eh.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){eC()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){eC()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class f5 extends Error{}class f6{constructor(a,b){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(a),this.token=b}updateToken(a){this.token=a}isCloud(){return eE(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(a){return c4(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(a));let b=this.regionSettings.regions.filter(a=>!this.attemptedRegions.find(b=>b.url===a.url));if(!(b.length>0))return null;{let a=b[0];return this.attemptedRegions.push(a),c_.debug("next region: ".concat(a.region)),a.url}})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(a){return c4(this,void 0,void 0,function*(){var b;let c=yield fetch("".concat((b=this.serverUrl,"".concat(b.protocol.replace("ws","http"),"//").concat(b.host,"/settings")),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:a});if(c.ok){let a=yield c.json();return this.lastUpdateAt=Date.now(),a}throw new d3("Could not fetch region settings: ".concat(c.statusText),401===c.status?t.NotAllowed:t.InternalError,c.status)})}setServerReportedRegions(a){this.regionSettings=a,this.lastUpdateAt=Date.now()}}class f7{get info(){return this._info}validateBytesReceived(){let a=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if("number"==typeof this.totalByteSize&&0!==this.totalByteSize){if(a&&this.bytesReceived<this.totalByteSize)throw new eb("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),u.Incomplete);else if(this.bytesReceived>this.totalByteSize)throw new eb("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),u.LengthExceeded)}}constructor(a,b,c,d){this.reader=b,this.totalByteSize=c,this._info=a,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=d}}class f8 extends f7{handleChunkReceived(a){var b;this.bytesReceived+=a.content.byteLength,this.validateBytesReceived();let c=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;null==(b=this.onProgress)||b.call(this,c)}[Symbol.asyncIterator](){let a=this.reader.getReader(),b=new eR,c=null,d=null;if(this.signal){let a=this.signal;d=()=>{var c;null==(c=b.reject)||c.call(b,a.reason)},a.addEventListener("abort",d),c=a}let e=()=>{a.releaseLock(),c&&d&&c.removeEventListener("abort",d),this.signal=void 0};return{next:()=>c4(this,void 0,void 0,function*(){var c,d;try{let{done:e,value:f}=yield Promise.race([a.read(),b.promise,null!=(d=null==(c=this.outOfBandFailureRejectingFuture)?void 0:c.promise)?d:new Promise(()=>{})]);if(e)return this.validateBytesReceived(!0),{done:!0,value:void 0};return this.handleChunkReceived(f),{done:!1,value:f.content}}catch(a){throw e(),a}}),return(){return c4(this,void 0,void 0,function*(){return e(),{done:!0,value:void 0}})}}}withAbortSignal(a){return this.signal=a,this}readAll(){return c4(this,arguments,void 0,function(){var a=this;let b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var c,d,e,f;let g=new Set,h=b.signal?a.withAbortSignal(b.signal):a;try{for(var i,j=!0,k=c5(h);!(c=(i=yield k.next()).done);j=!0)f=i.value,j=!1,g.add(f)}catch(a){d={error:a}}finally{try{!j&&!c&&(e=k.return)&&(yield e.call(k))}finally{if(d)throw d.error}}return Array.from(g)}()})}}class f9 extends f7{constructor(a,b,c,d){super(a,b,c,d),this.receivedChunks=new Map}handleChunkReceived(a){var b;let c=eV(a.chunkIndex),d=this.receivedChunks.get(c);if(d&&d.version>a.version)return;this.receivedChunks.set(c,a),this.bytesReceived+=a.content.byteLength,this.validateBytesReceived();let e=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;null==(b=this.onProgress)||b.call(this,e)}[Symbol.asyncIterator](){let a=this.reader.getReader(),b=new TextDecoder("utf-8",{fatal:!0}),c=new eR,d=null,e=null;if(this.signal){let a=this.signal;e=()=>{var b;null==(b=c.reject)||b.call(c,a.reason)},a.addEventListener("abort",e),d=a}let f=()=>{a.releaseLock(),d&&e&&d.removeEventListener("abort",e),this.signal=void 0};return{next:()=>c4(this,void 0,void 0,function*(){var d,e;try{let{done:f,value:g}=yield Promise.race([a.read(),c.promise,null!=(e=null==(d=this.outOfBandFailureRejectingFuture)?void 0:d.promise)?e:new Promise(()=>{})]);if(f)return this.validateBytesReceived(!0),{done:!0,value:void 0};{let a;this.handleChunkReceived(g);try{a=b.decode(g.content)}catch(a){throw new eb("Cannot decode datastream chunk ".concat(g.chunkIndex," as text: ").concat(a),u.DecodeFailed)}return{done:!1,value:a}}}catch(a){throw f(),a}}),return(){return c4(this,void 0,void 0,function*(){return f(),{done:!0,value:void 0}})}}}withAbortSignal(a){return this.signal=a,this}readAll(){return c4(this,arguments,void 0,function(){var a=this;let b=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var c,d,e,f;let g="",h=b.signal?a.withAbortSignal(b.signal):a;try{for(var i,j=!0,k=c5(h);!(c=(i=yield k.next()).done);j=!0)f=i.value,j=!1,g+=f}catch(a){d={error:a}}finally{try{!j&&!c&&(e=k.return)&&(yield e.call(k))}finally{if(d)throw d.error}}return g}()})}}class ga{constructor(){this.log=c_,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map}registerTextStreamHandler(a,b){if(this.textStreamHandlers.has(a))throw new eb('A text stream handler for topic "'.concat(a,'" has already been set.'),u.HandlerAlreadyRegistered);this.textStreamHandlers.set(a,b)}unregisterTextStreamHandler(a){this.textStreamHandlers.delete(a)}registerByteStreamHandler(a,b){if(this.byteStreamHandlers.has(a))throw new eb('A byte stream handler for topic "'.concat(a,'" has already been set.'),u.HandlerAlreadyRegistered);this.byteStreamHandlers.set(a,b)}unregisterByteStreamHandler(a){this.byteStreamHandlers.delete(a)}clearHandlersAndControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear(),this.byteStreamHandlers.clear(),this.textStreamHandlers.clear()}validateParticipantHasNoActiveDataStreams(a){var b,c,d,e;let f=Array.from(this.textStreamControllers.entries()).filter(b=>b[1].sendingParticipantIdentity===a),g=Array.from(this.byteStreamControllers.entries()).filter(b=>b[1].sendingParticipantIdentity===a);if(f.length>0||g.length>0){let h=new eb("Participant ".concat(a," unexpectedly disconnected in the middle of sending data"),u.AbnormalEnd);for(let[a,d]of g)null==(c=(b=d.outOfBandFailureRejectingFuture).reject)||c.call(b,h),this.byteStreamControllers.delete(a);for(let[a,b]of f)null==(e=(d=b.outOfBandFailureRejectingFuture).reject)||e.call(d,h),this.textStreamControllers.delete(a)}}handleDataStreamPacket(a){return c4(this,void 0,void 0,function*(){switch(a.value.case){case"streamHeader":return this.handleStreamHeader(a.value.value,a.participantIdentity);case"streamChunk":return this.handleStreamChunk(a.value.value);case"streamTrailer":return this.handleStreamTrailer(a.value.value);default:throw Error('DataPacket of value "'.concat(a.value.case,'" is not data stream related!'))}})}handleStreamHeader(a,b){return c4(this,void 0,void 0,function*(){var c;if("byteHeader"===a.contentHeader.case){let d,e=this.byteStreamHandlers.get(a.topic);if(!e)return void this.log.debug("ignoring incoming byte stream due to no handler for topic",a.topic);let f=new eR,g={id:a.streamId,name:null!=(c=a.contentHeader.value.name)?c:"unknown",mimeType:a.mimeType,size:a.totalLength?Number(a.totalLength):void 0,topic:a.topic,timestamp:eV(a.timestamp),attributes:a.attributes},h=new ReadableStream({start:c=>{if(d=c,this.textStreamControllers.has(a.streamId))throw new eb("A data stream read is already in progress for a stream with id ".concat(a.streamId,"."),u.AlreadyOpened);this.byteStreamControllers.set(a.streamId,{info:g,controller:d,startTime:Date.now(),sendingParticipantIdentity:b,outOfBandFailureRejectingFuture:f})}});e(new f8(g,h,eV(a.totalLength),f),{identity:b})}else if("textHeader"===a.contentHeader.case){let c,d=this.textStreamHandlers.get(a.topic);if(!d)return void this.log.debug("ignoring incoming text stream due to no handler for topic",a.topic);let e=new eR,f={id:a.streamId,mimeType:a.mimeType,size:a.totalLength?Number(a.totalLength):void 0,topic:a.topic,timestamp:Number(a.timestamp),attributes:a.attributes},g=new ReadableStream({start:d=>{if(c=d,this.textStreamControllers.has(a.streamId))throw new eb("A data stream read is already in progress for a stream with id ".concat(a.streamId,"."),u.AlreadyOpened);this.textStreamControllers.set(a.streamId,{info:f,controller:c,startTime:Date.now(),sendingParticipantIdentity:b,outOfBandFailureRejectingFuture:e})}});d(new f9(f,g,eV(a.totalLength),e),{identity:b})}})}handleStreamChunk(a){let b=this.byteStreamControllers.get(a.streamId);b&&a.content.length>0&&b.controller.enqueue(a);let c=this.textStreamControllers.get(a.streamId);c&&a.content.length>0&&c.controller.enqueue(a)}handleStreamTrailer(a){let b=this.textStreamControllers.get(a.streamId);b&&(b.info.attributes=Object.assign(Object.assign({},b.info.attributes),a.attributes),b.controller.close(),this.textStreamControllers.delete(a.streamId));let c=this.byteStreamControllers.get(a.streamId);c&&(c.info.attributes=Object.assign(Object.assign({},c.info.attributes),a.attributes),c.controller.close(),this.byteStreamControllers.delete(a.streamId))}}class gb{constructor(a,b,c){this.writableStream=a,this.defaultWriter=a.getWriter(),this.onClose=c,this.info=b}write(a){return this.defaultWriter.write(a)}close(){return c4(this,void 0,void 0,function*(){var a;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),null==(a=this.onClose)||a.call(this)})}}class gc extends gb{}class gd extends gb{}class ge{constructor(a,b){this.engine=a,this.log=b}setupEngine(a){this.engine=a}sendText(a,b){return c4(this,void 0,void 0,function*(){var c;let d=crypto.randomUUID(),e=new TextEncoder().encode(a).byteLength,f=null==(c=null==b?void 0:b.attachments)?void 0:c.map(()=>crypto.randomUUID()),g=Array(f?f.length+1:1).fill(0),h=(a,c)=>{var d;g[c]=a;let e=g.reduce((a,b)=>a+b,0);null==(d=null==b?void 0:b.onProgress)||d.call(b,e)},i=yield this.streamText({streamId:d,totalSize:e,destinationIdentities:null==b?void 0:b.destinationIdentities,topic:null==b?void 0:b.topic,attachedStreamIds:f,attributes:null==b?void 0:b.attributes});return yield i.write(a),h(1,0),yield i.close(),(null==b?void 0:b.attachments)&&f&&(yield Promise.all(b.attachments.map((a,c)=>c4(this,void 0,void 0,function*(){return this._sendFile(f[c],a,{topic:b.topic,mimeType:a.type,onProgress:a=>{h(a,c+1)}})})))),i.info})}streamText(a){return c4(this,void 0,void 0,function*(){var b,c;let d=null!=(b=null==a?void 0:a.streamId)?b:crypto.randomUUID(),e={id:d,mimeType:"text/plain",timestamp:Date.now(),topic:null!=(c=null==a?void 0:a.topic)?c:"",size:null==a?void 0:a.totalSize,attributes:null==a?void 0:a.attributes},f=new b8({streamId:d,mimeType:e.mimeType,topic:e.topic,timestamp:eW(e.timestamp),totalLength:eW(null==a?void 0:a.totalSize),attributes:e.attributes,contentHeader:{case:"textHeader",value:new b6({version:null==a?void 0:a.version,attachedStreamIds:null==a?void 0:a.attachedStreamIds,replyToStreamId:null==a?void 0:a.replyToStreamId,operationType:(null==a?void 0:a.type)==="update"?b5.UPDATE:b5.CREATE})}}),g=null==a?void 0:a.destinationIdentities,h=new bL({destinationIdentities:g,value:{case:"streamHeader",value:f}});yield this.engine.sendDataPacket(h,bM.RELIABLE);let i=0,j=this.engine,k=new WritableStream({write(a){return c4(this,void 0,void 0,function*(){for(let b of function(a,b){let c=[],d=new TextEncoder().encode(a);for(;d.length>15e3;){let a=15e3;for(;a>0;){let b=d[a];if(void 0!==b&&(192&b)!=128)break;a--}c.push(d.slice(0,a)),d=d.slice(a)}return d.length>0&&c.push(d),c}(a,15e3)){yield j.waitForBufferStatusLow(bM.RELIABLE);let a=new bL({destinationIdentities:g,value:{case:"streamChunk",value:new b9({content:b,streamId:d,chunkIndex:eW(i)})}});yield j.sendDataPacket(a,bM.RELIABLE),i+=1}})},close(){return c4(this,void 0,void 0,function*(){let a=new bL({destinationIdentities:g,value:{case:"streamTrailer",value:new ca({streamId:d})}});yield j.sendDataPacket(a,bM.RELIABLE)})},abort(a){console.log("Sink error:",a)}}),l=()=>c4(this,void 0,void 0,function*(){yield m.close()});j.once(z.Closing,l);let m=new gc(k,e,()=>this.engine.off(z.Closing,l));return m})}sendFile(a,b){return c4(this,void 0,void 0,function*(){let c=crypto.randomUUID();return yield this._sendFile(c,a,b),{id:c}})}_sendFile(a,b,c){return c4(this,void 0,void 0,function*(){var d;let e=yield this.streamBytes({streamId:a,totalSize:b.size,name:b.name,mimeType:null!=(d=null==c?void 0:c.mimeType)?d:b.type,topic:null==c?void 0:c.topic,destinationIdentities:null==c?void 0:c.destinationIdentities}),f=b.stream().getReader();for(;;){let{done:a,value:b}=yield f.read();if(a)break;yield e.write(b)}return yield e.close(),e.info})}streamBytes(a){return c4(this,void 0,void 0,function*(){var b,c,d,e,f;let g=null!=(b=null==a?void 0:a.streamId)?b:crypto.randomUUID(),h=null==a?void 0:a.destinationIdentities,i={id:g,mimeType:null!=(c=null==a?void 0:a.mimeType)?c:"application/octet-stream",topic:null!=(d=null==a?void 0:a.topic)?d:"",timestamp:Date.now(),attributes:null==a?void 0:a.attributes,size:null==a?void 0:a.totalSize,name:null!=(e=null==a?void 0:a.name)?e:"unknown"},j=new bL({destinationIdentities:h,value:{case:"streamHeader",value:new b8({totalLength:eW(null!=(f=i.size)?f:0),mimeType:i.mimeType,streamId:g,topic:i.topic,timestamp:eW(Date.now()),attributes:i.attributes,contentHeader:{case:"byteHeader",value:new b7({name:i.name})}})}});yield this.engine.sendDataPacket(j,bM.RELIABLE);let k=0,l=new af,m=this.engine,n=this.log;return new gd(new WritableStream({write(a){return c4(this,void 0,void 0,function*(){let b=yield l.lock(),c=0;try{for(;c<a.byteLength;){let b=a.slice(c,c+15e3);yield m.waitForBufferStatusLow(bM.RELIABLE);let d=new bL({destinationIdentities:h,value:{case:"streamChunk",value:new b9({content:b,streamId:g,chunkIndex:eW(k)})}});yield m.sendDataPacket(d,bM.RELIABLE),k+=1,c+=b.byteLength}}finally{b()}})},close(){return c4(this,void 0,void 0,function*(){let a=new bL({destinationIdentities:h,value:{case:"streamTrailer",value:new ca({streamId:g})}});yield m.sendDataPacket(a,bM.RELIABLE)})},abort(a){n.error("Sink error:",a)}}),i)})}}class gf extends ej{constructor(a,b,c,d,e){super(a,c,e),this.sid=b,this.receiver=d}get isLocal(){return!1}setMuted(a){this.isMuted!==a&&(this.isMuted=a,this._mediaStreamTrack.enabled=!a,this.emit(a?A.Muted:A.Unmuted,this))}setMediaStream(a){this.mediaStream=a;let b=c=>{c.track===this._mediaStreamTrack&&(a.removeEventListener("removetrack",b),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(A.Ended,this))};a.addEventListener("removetrack",b)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return c4(this,void 0,void 0,function*(){var a;if(null==(a=this.receiver)?void 0:a.getStats)return yield this.receiver.getStats()})}setPlayoutDelay(a){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=a: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;else 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(),2e3)),"undefined"!=typeof RTCRtpReceiver&&"getSynchronizationSources"in RTCRtpReceiver&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){let a=()=>{var b;this.timeSyncHandle=requestAnimationFrame(()=>a());let c=null==(b=this.receiver)?void 0:b.getSynchronizationSources()[0];if(c){let{timestamp:a,rtpTimestamp:b}=c;b&&this.rtpTimestamp!==b&&(this.emit(A.TimeSyncUpdate,{timestamp:a,rtpTimestamp:b}),this.rtpTimestamp=b)}};a()}}class gg extends gf{constructor(a,b,c,d,e,f){super(a,b,ej.Kind.Audio,c,f),this.monitorReceiver=()=>c4(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}let a=yield this.getReceiverStats();a&&this.prevStats&&this.receiver&&(this._currentBitrate=fH(a,this.prevStats)),this.prevStats=a}),this.audioContext=d,this.webAudioPluginNodes=[],e&&(this.sinkId=e.deviceId)}setVolume(a){var b;for(let c of this.attachedElements)this.audioContext?null==(b=this.gainNode)||b.gain.setTargetAtTime(a,0,.1):c.volume=a;eD()&&this._mediaStreamTrack._setVolume(a),this.elementVolume=a}getVolume(){if(this.elementVolume)return this.elementVolume;if(eD())return 1;let a=0;return this.attachedElements.forEach(b=>{b.volume>a&&(a=b.volume)}),a}setSinkId(a){return c4(this,void 0,void 0,function*(){this.sinkId=a,yield Promise.all(this.attachedElements.map(b=>{if(ex(b))return b.setSinkId(a)}))})}attach(a){let b=0===this.attachedElements.length;return a?super.attach(a):a=super.attach(),this.sinkId&&ex(a)&&a.setSinkId(this.sinkId).catch(a=>{this.log.error("Failed to set sink id on remote audio track",a,this.logContext)}),this.audioContext&&b&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,a),a.volume=0,a.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),a}detach(a){let b;return a?(b=super.detach(a),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(b=super.detach(),this.disconnectWebAudio()),b}setAudioContext(a){this.audioContext=a,a&&this.attachedElements.length>0?this.connectWebAudio(a,this.attachedElements[0]):a||this.disconnectWebAudio()}setWebAudioPlugins(a){this.webAudioPluginNodes=a,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(a,b){this.disconnectWebAudio(),this.sourceNode=a.createMediaStreamSource(b.srcObject);let c=this.sourceNode;this.webAudioPluginNodes.forEach(a=>{c.connect(a),c=a}),this.gainNode=a.createGain(),c.connect(this.gainNode),this.gainNode.connect(a.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),"running"!==a.state&&a.resume().then(()=>{"running"!==a.state&&this.emit(A.AudioPlaybackFailed,Error("Audio Context couldn't be started automatically"))}).catch(a=>{this.emit(A.AudioPlaybackFailed,a)})}disconnectWebAudio(){var a,b;null==(a=this.gainNode)||a.disconnect(),null==(b=this.sourceNode)||b.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return c4(this,void 0,void 0,function*(){let a;if(this.receiver&&this.receiver.getStats)return(yield this.receiver.getStats()).forEach(b=>{"inbound-rtp"===b.type&&(a={type:"audio",streamId:b.id,timestamp:b.timestamp,jitter:b.jitter,bytesReceived:b.bytesReceived,concealedSamples:b.concealedSamples,concealmentEvents:b.concealmentEvents,silentConcealedSamples:b.silentConcealedSamples,silentConcealmentEvents:b.silentConcealmentEvents,totalAudioEnergy:b.totalAudioEnergy,totalSamplesDuration:b.totalSamplesDuration})}),a})}}class gh extends gf{constructor(a,b,c,d,e){super(a,b,ej.Kind.Video,c,e),this.elementInfos=[],this.monitorReceiver=()=>c4(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}let a=yield this.getReceiverStats();a&&this.prevStats&&this.receiver&&(this._currentBitrate=fH(a,this.prevStats)),this.prevStats=a}),this.debouncedHandleResize=fs(()=>{this.updateDimensions()},100),this.adaptiveStreamSettings=d}get isAdaptiveStream(){return void 0!==this.adaptiveStreamSettings}setStreamState(a){super.setStreamState(a),console.log("setStreamState",a),a===ej.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(a){super.setMuted(a),this.attachedElements.forEach(b=>{a?el(this._mediaStreamTrack,b):ek(this._mediaStreamTrack,b)})}attach(a){if(a?super.attach(a):a=super.attach(),this.adaptiveStreamSettings&&void 0===this.elementInfos.find(b=>b.element===a)){let b=new gi(a);this.observeElementInfo(b)}return a}observeElementInfo(a){this.adaptiveStreamSettings&&void 0===this.elementInfos.find(b=>b===a)?(a.handleResize=()=>{this.debouncedHandleResize()},a.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(a),a.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(a){if(!this.isAdaptiveStream)return void this.log.warn("stopObservingElementInfo ignored",this.logContext);for(let b of this.elementInfos.filter(b=>b===a))b.stopObserving();this.elementInfos=this.elementInfos.filter(b=>b!==a),this.updateVisibility(),this.debouncedHandleResize()}detach(a){let b=[];if(a)return this.stopObservingElement(a),super.detach(a);for(let a of b=super.detach())this.stopObservingElement(a);return b}getDecoderImplementation(){var a;return null==(a=this.prevStats)?void 0:a.decoderImplementation}getReceiverStats(){return c4(this,void 0,void 0,function*(){let a;if(!this.receiver||!this.receiver.getStats)return;let b=yield this.receiver.getStats(),c="",d=new Map;return b.forEach(b=>{"inbound-rtp"===b.type?(c=b.codecId,a={type:"video",streamId:b.id,framesDecoded:b.framesDecoded,framesDropped:b.framesDropped,framesReceived:b.framesReceived,packetsReceived:b.packetsReceived,packetsLost:b.packetsLost,frameWidth:b.frameWidth,frameHeight:b.frameHeight,pliCount:b.pliCount,firCount:b.firCount,nackCount:b.nackCount,jitter:b.jitter,timestamp:b.timestamp,bytesReceived:b.bytesReceived,decoderImplementation:b.decoderImplementation}):"codec"===b.type&&d.set(b.id,b)}),a&&""!==c&&d.get(c)&&(a.mimeType=d.get(c).mimeType),a})}stopObservingElement(a){for(let b of this.elementInfos.filter(b=>b.element===a))this.stopObservingElementInfo(b)}handleAppVisibilityChanged(){let a=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return c4(this,void 0,void 0,function*(){yield a.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(a){var b,c;let d=this.elementInfos.reduce((a,b)=>Math.max(a,b.visibilityChangedAt||0),0),e=(null==(c=null==(b=this.adaptiveStreamSettings)?void 0:b.pauseVideoInBackground)||!!c)&&this.isInBackground,f=this.elementInfos.some(a=>a.pictureInPicture),g=this.elementInfos.some(a=>a.visible)&&!e||f;if(this.lastVisible!==g||a){if(!g&&Date.now()-d<100)return void eh.setTimeout(()=>{this.updateVisibility()},100);this.lastVisible=g,this.emit(A.VisibilityChanged,g,this)}}updateDimensions(){var a,b;let c=0,d=0,e=this.getPixelDensity();for(let a of this.elementInfos){let b=a.width()*e,f=a.height()*e;b+f>c+d&&(c=b,d=f)}((null==(a=this.lastDimensions)?void 0:a.width)!==c||(null==(b=this.lastDimensions)?void 0:b.height)!==d)&&(this.lastDimensions={width:c,height:d},this.emit(A.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var a;let b=null==(a=this.adaptiveStreamSettings)?void 0:a.pixelDensity;return"screen"===b?eH():b?b:eH()>2?2:1}}class gi{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(a,b){this.onVisibilityChanged=a=>{var b;let{target:c,isIntersecting:d}=a;c===this.element&&(this.isIntersecting=d,this.isPiP=gj(this.element),this.visibilityChangedAt=Date.now(),null==(b=this.handleVisibilityChanged)||b.call(this))},this.onEnterPiP=()=>{var a,b,c;null==(b=null==(a=window.documentPictureInPicture)?void 0:a.window)||b.addEventListener("pagehide",this.onLeavePiP),this.isPiP=gj(this.element),null==(c=this.handleVisibilityChanged)||c.call(this)},this.onLeavePiP=()=>{var a;this.isPiP=gj(this.element),null==(a=this.handleVisibilityChanged)||a.call(this)},this.element=a,this.isIntersecting=null!=b?b:gk(a),this.isPiP=eC()&&gj(a),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var a,b,c;this.isIntersecting=gk(this.element),this.isPiP=gj(this.element),this.element.handleResize=()=>{var a;null==(a=this.handleResize)||a.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,eO().observe(this.element),eM().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),null==(a=window.documentPictureInPicture)||a.addEventListener("enter",this.onEnterPiP),null==(c=null==(b=window.documentPictureInPicture)?void 0:b.window)||c.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var a,b,c,d,e;null==(a=eO())||a.unobserve(this.element),null==(b=eM())||b.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),null==(c=window.documentPictureInPicture)||c.removeEventListener("enter",this.onEnterPiP),null==(e=null==(d=window.documentPictureInPicture)?void 0:d.window)||e.removeEventListener("pagehide",this.onLeavePiP)}}function gj(a){var b,c;return document.pictureInPictureElement===a||null!=(b=window.documentPictureInPicture)&&!!b.window&&gk(a,null==(c=window.documentPictureInPicture)?void 0:c.window)}function gk(a,b){let c=b||window,d=a.offsetTop,e=a.offsetLeft,f=a.offsetWidth,g=a.offsetHeight,{hidden:h}=a,{display:i}=getComputedStyle(a);for(;a.offsetParent;)d+=(a=a.offsetParent).offsetTop,e+=a.offsetLeft;return d<c.pageYOffset+c.innerHeight&&e<c.pageXOffset+c.innerWidth&&d+g>c.pageYOffset&&e+f>c.pageXOffset&&!h&&"none"!==i}class gl extends c7.EventEmitter{constructor(a,b,c,d){var e;super(),this.metadataMuted=!1,this.encryption=bH.NONE,this.log=c_,this.handleMuted=()=>{this.emit(A.Muted)},this.handleUnmuted=()=>{this.emit(A.Unmuted)},this.log=c0(null!=(e=null==d?void 0:d.loggerName)?e:m.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=a,this.trackSid=b,this.trackName=c,this.source=ej.Source.Unknown}setTrack(a){this.track&&(this.track.off(A.Muted,this.handleMuted),this.track.off(A.Unmuted,this.handleUnmuted)),this.track=a,a&&(a.on(A.Muted,this.handleMuted),a.on(A.Unmuted,this.handleUnmuted))}get logContext(){var a;return Object.assign(Object.assign({},null==(a=this.loggerContextCb)?void 0:a.call(this)),e9(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return void 0!==this.track}get isEncrypted(){return this.encryption!==bH.NONE}get audioTrack(){if(eY(this.track))return this.track}get videoTrack(){if(eZ(this.track))return this.track}updateInfo(a){this.trackSid=a.sid,this.trackName=a.name,this.source=ej.sourceFromProto(a.source),this.mimeType=a.mimeType,this.kind===ej.Kind.Video&&a.width>0&&(this.dimensions={width:a.width,height:a.height},this.simulcasted=a.simulcast),this.encryption=a.encryption,this.trackInfo=a,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:a}))}}!function(a){var b,c;(b=a.SubscriptionStatus||(a.SubscriptionStatus={})).Desired="desired",b.Subscribed="subscribed",b.Unsubscribed="unsubscribed",(c=a.PermissionStatus||(a.PermissionStatus={})).Allowed="allowed",c.NotAllowed="not_allowed"}(gl||(gl={}));class gm extends gl{get isUpstreamPaused(){var a;return null==(a=this.track)?void 0:a.isUpstreamPaused}constructor(a,b,c,d){super(a,b.sid,b.name,d),this.track=void 0,this.handleTrackEnded=()=>{this.emit(A.Ended)},this.handleCpuConstrained=()=>{this.track&&eZ(this.track)&&this.emit(A.CpuConstrained,this.track)},this.updateInfo(b),this.setTrack(c)}setTrack(a){this.track&&(this.track.off(A.Ended,this.handleTrackEnded),this.track.off(A.CpuConstrained,this.handleCpuConstrained)),super.setTrack(a),a&&(a.on(A.Ended,this.handleTrackEnded),a.on(A.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 c4(this,void 0,void 0,function*(){var a;return null==(a=this.track)?void 0:a.mute()})}unmute(){return c4(this,void 0,void 0,function*(){var a;return null==(a=this.track)?void 0:a.unmute()})}pauseUpstream(){return c4(this,void 0,void 0,function*(){var a;yield null==(a=this.track)?void 0:a.pauseUpstream()})}resumeUpstream(){return c4(this,void 0,void 0,function*(){var a;yield null==(a=this.track)?void 0:a.resumeUpstream()})}getTrackFeatures(){var a;if(!eY(this.track))return[];{let b=this.track.getSourceTrackSettings(),c=new Set;return b.autoGainControl&&c.add(bz.TF_AUTO_GAIN_CONTROL),b.echoCancellation&&c.add(bz.TF_ECHO_CANCELLATION),b.noiseSuppression&&c.add(bz.TF_NOISE_SUPPRESSION),b.channelCount&&b.channelCount>1&&c.add(bz.TF_STEREO),(null==(a=this.options)?void 0:a.dtx)||c.add(bz.TF_NO_DTX),this.track.enhancedNoiseCancellation&&c.add(bz.TF_ENHANCED_NOISE_CANCELLATION),Array.from(c.values())}}}function gn(a,b){return c4(this,void 0,void 0,function*(){null!=a||(a={});let c=!1,{audioProcessor:d,videoProcessor:e,optionsWithoutProcessor:f}=fa(a),g=f.audio,h=f.video;if(d&&"object"==typeof f.audio&&(f.audio.processor=d),e&&"object"==typeof f.video&&(f.video.processor=e),a.audio&&"object"==typeof f.audio&&"string"==typeof f.audio.deviceId){let a=f.audio.deviceId;f.audio.deviceId={exact:a},c=!0,g=Object.assign(Object.assign({},f.audio),{deviceId:{ideal:a}})}if(f.video&&"object"==typeof f.video&&"string"==typeof f.video.deviceId){let a=f.video.deviceId;f.video.deviceId={exact:a},c=!0,h=Object.assign(Object.assign({},f.video),{deviceId:{ideal:a}})}!0!==f.audio&&("object"!=typeof f.audio||f.audio.deviceId)||(f.audio={deviceId:"default"}),!0===f.video?f.video={deviceId:"default"}:"object"!=typeof f.video||f.video.deviceId||(f.video.deviceId="default");let i=e2(f,fz,fA),j=e4(i),k=navigator.mediaDevices.getUserMedia(j);f.audio&&(fe.userMediaPromiseMap.set("audioinput",k),k.catch(()=>fe.userMediaPromiseMap.delete("audioinput"))),f.video&&(fe.userMediaPromiseMap.set("videoinput",k),k.catch(()=>fe.userMediaPromiseMap.delete("videoinput")));try{let a=yield k;return yield Promise.all(a.getTracks().map(c=>c4(this,void 0,void 0,function*(){let f,g="audio"===c.kind,h=g?i.audio:i.video;"boolean"!=typeof h&&h||(h={});let k=g?j.audio:j.video;"boolean"!=typeof k&&(f=k);let l=c.getSettings().deviceId;(null==f?void 0:f.deviceId)&&eS(f.deviceId)!==l?f.deviceId=l:f||(f={deviceId:l});let m=function(a,b,c){switch(a.kind){case"audio":return new fN(a,b,!1,void 0,c);case"video":return new fZ(a,b,!1,c);default:throw new d5("unsupported track type: ".concat(a.kind))}}(c,f,b);return m.kind===ej.Kind.Video?m.source=ej.Source.Camera:m.kind===ej.Kind.Audio&&(m.source=ej.Source.Microphone),m.mediaStream=a,eY(m)&&d?yield m.setProcessor(d):eZ(m)&&e&&(yield m.setProcessor(e)),m})))}catch(d){if(!c)throw d;return gn(Object.assign(Object.assign({},a),{audio:g,video:h}),b)}})}function go(a){return c4(this,void 0,void 0,function*(){return(yield gn({audio:null==a||a,video:!1}))[0]})}!function(a){a.Excellent="excellent",a.Good="good",a.Poor="poor",a.Lost="lost",a.Unknown="unknown"}(N||(N={}));class gp extends c7.EventEmitter{get logContext(){var a,b;return Object.assign({},null==(b=null==(a=this.loggerOptions)?void 0:a.loggerContextCb)?void 0:b.call(a))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(a=>a.isEncrypted)}get isAgent(){var a;return(null==(a=this.permissions)?void 0:a.agent)||this.kind===bF.AGENT}get isActive(){var a;return(null==(a=this.participantInfo)?void 0:a.state)===bE.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(a,b,c,d,e,f){var g;let h=arguments.length>6&&void 0!==arguments[6]?arguments[6]:bF.STANDARD;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=N.Unknown,this.log=c_,this.log=c0(null!=(g=null==f?void 0:f.loggerName)?g:m.Participant),this.loggerOptions=f,this.setMaxListeners(100),this.sid=a,this.identity=b,this.name=c,this.metadata=d,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=h,this._attributes=null!=e?e:{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(a){for(let[,b]of this.trackPublications)if(b.source===a)return b}getTrackPublicationByName(a){for(let[,b]of this.trackPublications)if(b.trackName===a)return b}waitUntilActive(){return this.isActive?Promise.resolve():(this.activeFuture||(this.activeFuture=new eR,this.once(y.Active,()=>{var a,b;null==(b=null==(a=this.activeFuture)?void 0:a.resolve)||b.call(a),this.activeFuture=void 0})),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var a;let b=this.getTrackPublication(ej.Source.Camera);return!(null==(a=null==b?void 0:b.isMuted)||a)}get isMicrophoneEnabled(){var a;let b=this.getTrackPublication(ej.Source.Microphone);return!(null==(a=null==b?void 0:b.isMuted)||a)}get isScreenShareEnabled(){return!!this.getTrackPublication(ej.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(1e3*Number.parseInt(this.participantInfo.joinedAt.toString())):new Date}updateInfo(a){var b;return(!this.participantInfo||this.participantInfo.sid!==a.sid||!(this.participantInfo.version>a.version))&&(this.identity=a.identity,this.sid=a.sid,this._setName(a.name),this._setMetadata(a.metadata),this._setAttributes(a.attributes),a.state===bE.ACTIVE&&(null==(b=this.participantInfo)?void 0:b.state)!==bE.ACTIVE&&this.emit(y.Active),a.permission&&this.setPermissions(a.permission),this.participantInfo=a,!0)}_setMetadata(a){let b=this.metadata!==a,c=this.metadata;this.metadata=a,b&&this.emit(y.ParticipantMetadataChanged,c)}_setName(a){let b=this.name!==a;this.name=a,b&&this.emit(y.ParticipantNameChanged,a)}_setAttributes(a){let b=function(a,b){var c;void 0===a&&(a={}),void 0===b&&(b={});let d=[...Object.keys(b),...Object.keys(a)],e={};for(let f of d)a[f]!==b[f]&&(e[f]=null!=(c=b[f])?c:"");return e}(this.attributes,a);this._attributes=a,Object.keys(b).length>0&&this.emit(y.AttributesChanged,b)}setPermissions(a){var b,c,d,e,f,g;let h=this.permissions,i=a.canPublish!==(null==(b=this.permissions)?void 0:b.canPublish)||a.canSubscribe!==(null==(c=this.permissions)?void 0:c.canSubscribe)||a.canPublishData!==(null==(d=this.permissions)?void 0:d.canPublishData)||a.hidden!==(null==(e=this.permissions)?void 0:e.hidden)||a.recorder!==(null==(f=this.permissions)?void 0:f.recorder)||a.canPublishSources.length!==this.permissions.canPublishSources.length||a.canPublishSources.some((a,b)=>{var c;return a!==(null==(c=this.permissions)?void 0:c.canPublishSources[b])})||a.canSubscribeMetrics!==(null==(g=this.permissions)?void 0:g.canSubscribeMetrics);return this.permissions=a,i&&this.emit(y.ParticipantPermissionsChanged,h),i}setIsSpeaking(a){a!==this.isSpeaking&&(this.isSpeaking=a,a&&(this.lastSpokeAt=new Date),this.emit(y.IsSpeakingChanged,a))}setConnectionQuality(a){let b=this._connectionQuality;this._connectionQuality=function(a){switch(a){case bu.EXCELLENT:return N.Excellent;case bu.GOOD:return N.Good;case bu.POOR:return N.Poor;case bu.LOST:return N.Lost;default:return N.Unknown}}(a),b!==this._connectionQuality&&this.emit(y.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var a,b;this.activeFuture&&(null==(b=(a=this.activeFuture).reject)||b.call(a,Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(a){this.audioContext=a,this.audioTrackPublications.forEach(b=>eY(b.track)&&b.track.setAudioContext(a))}addTrackPublication(a){switch(a.on(A.Muted,()=>{this.emit(y.TrackMuted,a)}),a.on(A.Unmuted,()=>{this.emit(y.TrackUnmuted,a)}),a.track&&(a.track.sid=a.trackSid),this.trackPublications.set(a.trackSid,a),a.kind){case ej.Kind.Audio:this.audioTrackPublications.set(a.trackSid,a);break;case ej.Kind.Video:this.videoTrackPublications.set(a.trackSid,a)}}}class gq extends gp{constructor(a,b,c,d,e,f){super(a,b,void 0,void 0,void 0,{loggerName:d.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=bH.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new eR)},this.handleReconnected=()=>{var a,b;null==(b=null==(a=this.reconnectFuture)?void 0:a.resolve)||b.call(a),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var a,b,c,d,e,f;this.reconnectFuture&&(this.reconnectFuture.promise.catch(a=>this.log.warn(a.message,this.logContext)),null==(b=null==(a=this.reconnectFuture)?void 0:a.reject)||b.call(a,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0),this.signalConnectedFuture&&(null==(d=(c=this.signalConnectedFuture).reject)||d.call(c,"Got disconnected without signal connected"),this.signalConnectedFuture=void 0),null==(f=null==(e=this.activeAgentFuture)?void 0:e.reject)||f.call(e,"Got disconnected without active agent present"),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=a=>{var b,c;a.participant&&this.updateInfo(a.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new eR),null==(c=(b=this.signalConnectedFuture).resolve)||c.call(b)},this.handleSignalRequestResponse=a=>{let{requestId:b,reason:c,message:d}=a,e=this.pendingSignalRequests.get(b);e&&(c!==cW.OK&&e.reject(new ea(d,c)),this.pendingSignalRequests.delete(b))},this.handleDataPacket=a=>{switch(a.value.case){case"rpcResponse":let b=a.value.value,c=null,d=null;"payload"===b.value.case?c=b.value.value:"error"===b.value.case&&(d=fE.fromProto(b.value.value)),this.handleIncomingRpcResponse(b.requestId,c,d);break;case"rpcAck":let e=a.value.value;this.handleIncomingRpcAck(e.requestId)}},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=>(function(a){var b,c,d;if(!a.participantSid&&!a.participantIdentity)throw Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new cI({participantIdentity:null!=(b=a.participantIdentity)?b:"",participantSid:null!=(c=a.participantSid)?c:"",allTracks:null!=(d=a.allowAll)&&d,trackSids:a.allowedTrackSids||[]})})(a)))},this.onTrackUnmuted=a=>{this.onTrackMuted(a,a.isUpstreamPaused)},this.onTrackMuted=(a,b)=>{if(void 0===b&&(b=!0),!a.sid)return void this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),e9(a)));this.engine.updateMuteStatus(a.sid,b)},this.onTrackUpstreamPaused=a=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),e9(a))),this.onTrackMuted(a,!0)},this.onTrackUpstreamResumed=a=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),e9(a))),this.onTrackMuted(a,a.isMuted)},this.onTrackFeatureUpdate=a=>{let b=this.audioTrackPublications.get(a.sid);if(!b)return void this.log.warn("Could not update local audio track settings, missing publication for track ".concat(a.sid),this.logContext);this.engine.client.sendUpdateLocalAudioTrack(b.trackSid,b.getTrackFeatures())},this.onTrackCpuConstrained=(a,b)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),e9(b))),this.emit(y.LocalTrackCpuConstrained,a,b)},this.handleSubscribedQualityUpdate=a=>c4(this,void 0,void 0,function*(){if(!(null==(h=this.roomOptions)?void 0:h.dynacast))return;let b=this.videoTrackPublications.get(a.trackSid);if(!b)return void this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));if(!b.videoTrack)return;let c=yield b.videoTrack.setPublishingCodecs(a.subscribedCodecs);try{for(var d,e,f,g,h,i,j=!0,k=c5(c);!(d=(i=yield k.next()).done);j=!0)g=i.value,j=!1,function(a){return!!en.find(b=>b===a)}(g)&&(this.log.debug("publish ".concat(g," for ").concat(b.videoTrack.sid),Object.assign(Object.assign({},this.logContext),e9(b))),yield this.publishAdditionalCodecForTrack(b.videoTrack,g,b.options))}catch(a){e={error:a}}finally{try{!j&&!d&&(f=k.return)&&(yield f.call(k))}finally{if(e)throw e.error}}}),this.handleLocalTrackUnpublished=a=>{let b=this.trackPublications.get(a.trackSid);if(!b)return void this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));this.unpublishTrack(b.track)},this.handleTrackEnded=a=>c4(this,void 0,void 0,function*(){if(a.source===ej.Source.ScreenShare||a.source===ej.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),e9(a))),this.unpublishTrack(a);else if(a.isUserProvided)yield a.mute();else if(e_(a)||e$(a))try{if(eC())try{let b=yield null==navigator?void 0:navigator.permissions.query({name:a.source===ej.Source.Camera?"camera":"microphone"});if(b&&"denied"===b.state)throw this.log.warn("user has revoked access to ".concat(a.source),Object.assign(Object.assign({},this.logContext),e9(a))),b.onchange=()=>{"denied"!==b.state&&(a.isMuted||a.restartTrack(),b.onchange=null)},Error("GetUserMedia Permission denied")}catch(a){}a.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),e9(a))),e_(a)?yield a.restartTrack({deviceId:"default"}):yield a.restartTrack())}catch(b){this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),e9(a))),yield a.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=c,this.roomOptions=d,this.setupEngine(c),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=e,this.roomOutgoingDataStreamManager=f}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==bH.NONE}getTrackPublication(a){let b=super.getTrackPublication(a);if(b)return b}getTrackPublicationByName(a){let b=super.getTrackPublicationByName(a);if(b)return b}setupEngine(a){var b;this.engine=a,this.engine.on(z.RemoteMute,(a,b)=>{let c=this.trackPublications.get(a);c&&c.track&&(b?c.mute():c.unmute())}),(null==(b=this.signalConnectedFuture)?void 0:b.isResolved)&&(this.signalConnectedFuture=void 0),this.engine.on(z.Connected,this.handleReconnected).on(z.SignalConnected,this.handleSignalConnected).on(z.SignalRestarted,this.handleReconnected).on(z.SignalResumed,this.handleReconnected).on(z.Restarting,this.handleReconnecting).on(z.Resuming,this.handleReconnecting).on(z.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(z.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(z.Closing,this.handleClosing).on(z.SignalRequestResponse,this.handleSignalRequestResponse).on(z.DataPacketReceived,this.handleDataPacket)}setMetadata(a){return c4(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:a})})}setName(a){return c4(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:a})})}setAttributes(a){return c4(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:a})})}requestMetadataUpdate(a){return c4(this,arguments,void 0,function(a){var b=this;let{metadata:c,name:d,attributes:e}=a;return function*(){return new Promise((a,f)=>c4(b,void 0,void 0,function*(){var b,g;try{let h=!1,i=yield this.engine.client.sendUpdateLocalMetadata(null!=(b=null!=c?c:this.metadata)?b:"",null!=(g=null!=d?d:this.name)?g:"",e),j=performance.now();for(this.pendingSignalRequests.set(i,{resolve:a,reject:a=>{f(a),h=!0},values:{name:d,metadata:c,attributes:e}});performance.now()-j<5e3&&!h;){if((!d||this.name===d)&&(!c||this.metadata===c)&&(!e||Object.entries(e).every(a=>{let[b,c]=a;return this.attributes[b]===c||""===c&&!this.attributes[b]}))){this.pendingSignalRequests.delete(i),a();return}yield et(50)}f(new ea("Request to update local metadata timed out","TimeoutError"))}catch(a){a instanceof Error&&f(a)}}))}()})}setCameraEnabled(a,b,c){return this.setTrackEnabled(ej.Source.Camera,a,b,c)}setMicrophoneEnabled(a,b,c){return this.setTrackEnabled(ej.Source.Microphone,a,b,c)}setScreenShareEnabled(a,b,c){return this.setTrackEnabled(ej.Source.ScreenShare,a,b,c)}setE2EEEnabled(a){return c4(this,void 0,void 0,function*(){this.encryptionType=a?bH.GCM:bH.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(a,b,c,d){return c4(this,void 0,void 0,function*(){this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:a,enabled:b})),this.republishPromise&&(yield this.republishPromise);let e=this.getTrackPublication(a);if(b)if(e)yield e.unmute();else{let b;if(this.pendingPublishing.has(a)){let b=yield this.waitForPendingPublicationOfSource(a);return b||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:a})),yield null==b?void 0:b.unmute(),b}this.pendingPublishing.add(a);try{switch(a){case ej.Source.Camera:b=yield this.createTracks({video:null==c||c});break;case ej.Source.Microphone:b=yield this.createTracks({audio:null==c||c});break;case ej.Source.ScreenShare:b=yield this.createScreenTracks(Object.assign({},c));break;default:throw new d5(a)}}catch(c){throw null==b||b.forEach(a=>{a.stop()}),c instanceof Error&&this.emit(y.MediaDevicesError,c,e7(a)),this.pendingPublishing.delete(a),c}for(let d of b){let b=Object.assign(Object.assign({},this.roomOptions.publishDefaults),c);a===ej.Source.Microphone&&eY(d)&&b.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),d.startPreConnectBuffer())}try{let a=[];for(let c of b)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),e9(c))),a.push(this.publishTrack(c,d));let c=yield Promise.all(a);[e]=c}catch(a){throw null==b||b.forEach(a=>{a.stop()}),a}finally{this.pendingPublishing.delete(a)}}else if(!(null==e?void 0:e.track)&&this.pendingPublishing.has(a)&&((e=yield this.waitForPendingPublicationOfSource(a))||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:a}))),e&&e.track)if(a===ej.Source.ScreenShare){e=yield this.unpublishTrack(e.track);let a=this.getTrackPublication(ej.Source.ScreenShareAudio);a&&a.track&&this.unpublishTrack(a.track)}else yield e.mute();return e})}enableCameraAndMicrophone(){return c4(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(ej.Source.Camera)||this.pendingPublishing.has(ej.Source.Microphone))){this.pendingPublishing.add(ej.Source.Camera),this.pendingPublishing.add(ej.Source.Microphone);try{let a=yield this.createTracks({audio:!0,video:!0});yield Promise.all(a.map(a=>this.publishTrack(a)))}finally{this.pendingPublishing.delete(ej.Source.Camera),this.pendingPublishing.delete(ej.Source.Microphone)}}})}createTracks(a){return c4(this,void 0,void 0,function*(){var b,c;null!=a||(a={});let d=e2(a,null==(b=this.roomOptions)?void 0:b.audioCaptureDefaults,null==(c=this.roomOptions)?void 0:c.videoCaptureDefaults);try{return(yield gn(d,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(a=>(eY(a)&&(this.microphoneError=void 0,a.setAudioContext(this.audioContext),a.source=ej.Source.Microphone,this.emit(y.AudioStreamAcquired)),eZ(a)&&(this.cameraError=void 0,a.source=ej.Source.Camera),a))}catch(b){throw b instanceof Error&&(a.audio&&(this.microphoneError=b),a.video&&(this.cameraError=b)),b}})}createScreenTracks(a){return c4(this,void 0,void 0,function*(){var b,c,d;let e;if(void 0===a&&(a={}),void 0===navigator.mediaDevices.getDisplayMedia)throw new d4("getDisplayMedia not supported");void 0===a.resolution&&!function(){let a=ed();return(null==a?void 0:a.name)==="Safari"&&a.version.startsWith("17.")||(null==a?void 0:a.os)==="iOS"&&!!(null==a?void 0:a.osVersion)&&eI(a.osVersion,"17")>=0}()&&(a.resolution=er.h1080fps30.resolution);let f=(e=null==(c=(b=a).video)||c,b.resolution&&b.resolution.width>0&&b.resolution.height>0&&(e="boolean"==typeof e?{}:e,e=ez()?Object.assign(Object.assign({},e),{width:{max:b.resolution.width},height:{max:b.resolution.height},frameRate:b.resolution.frameRate}):Object.assign(Object.assign({},e),{width:{ideal:b.resolution.width},height:{ideal:b.resolution.height},frameRate:b.resolution.frameRate})),{audio:null!=(d=b.audio)&&d,video:e,controller:b.controller,selfBrowserSurface:b.selfBrowserSurface,surfaceSwitching:b.surfaceSwitching,systemAudio:b.systemAudio,preferCurrentTab:b.preferCurrentTab}),g=yield navigator.mediaDevices.getDisplayMedia(f),h=g.getVideoTracks();if(0===h.length)throw new d5("no video track found");let i=new fZ(h[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});i.source=ej.Source.ScreenShare,a.contentHint&&(i.mediaStreamTrack.contentHint=a.contentHint);let j=[i];if(g.getAudioTracks().length>0){this.emit(y.AudioStreamAcquired);let a=new fN(g.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});a.source=ej.Source.ScreenShareAudio,j.push(a)}return j})}publishTrack(a,b){return c4(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(a,b)})}publishOrRepublishTrack(a,b){return c4(this,arguments,void 0,function(a,b){var c=this;let d=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function*(){var e,f;let g,h;if(e_(a)&&a.setAudioContext(c.audioContext),yield null==(e=c.reconnectFuture)?void 0:e.promise,c.republishPromise&&!d&&(yield c.republishPromise),eX(a)&&c.pendingPublishPromises.has(a)&&(yield c.pendingPublishPromises.get(a)),a instanceof MediaStreamTrack)g=a.getConstraints();else{let b;switch(g=a.constraints,a.source){case ej.Source.Microphone:b="audioinput";break;case ej.Source.Camera:b="videoinput"}b&&c.activeDeviceMap.has(b)&&(g=Object.assign(Object.assign({},g),{deviceId:c.activeDeviceMap.get(b)}))}if(a instanceof MediaStreamTrack)switch(a.kind){case"audio":a=new fN(a,g,!0,c.audioContext,{loggerName:c.roomOptions.loggerName,loggerContextCb:()=>c.logContext});break;case"video":a=new fZ(a,g,!0,{loggerName:c.roomOptions.loggerName,loggerContextCb:()=>c.logContext});break;default:throw new d5("unsupported MediaStreamTrack kind ".concat(a.kind))}else a.updateLoggerOptions({loggerName:c.roomOptions.loggerName,loggerContextCb:()=>c.logContext});if(c.trackPublications.forEach(b=>{b.track&&b.track===a&&(h=b)}),h)return c.log.warn("track has already been published, skipping",Object.assign(Object.assign({},c.logContext),e9(h))),h;let i=Object.assign(Object.assign({},c.roomOptions.publishDefaults),b),j="channelCount"in a.mediaStreamTrack.getSettings()&&2===a.mediaStreamTrack.getSettings().channelCount||2===a.mediaStreamTrack.getConstraints().channelCount,k=null!=(f=i.forceStereo)?f:j;k&&(void 0===i.dtx&&c.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},c.logContext),e9(a))),void 0===i.red&&c.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),null!=i.dtx||(i.dtx=!1),null!=i.red||(i.red=!1)),!function(){let a=ed(),b="17.2";if(a)if("Safari"!==a.name&&"iOS"!==a.os)return!0;else if("iOS"===a.os&&a.osVersion&&eI(a.osVersion,b)>=0)return!0;else if("Safari"===a.name&&eI(a.version,b)>=0)return!0;else return!1}()&&c.roomOptions.e2ee&&(c.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({},c.logContext)),i.simulcast=!1),i.source&&(a.source=i.source);let l=new Promise((b,d)=>c4(c,void 0,void 0,function*(){try{if(this.engine.client.currentState!==F.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:e9(a)}));let c=setTimeout(()=>{d(new d9("publishing rejected as engine not connected within timeout",408))},15e3);yield this.waitUntilEngineConnected(),clearTimeout(c);let e=yield this.publish(a,i,k);b(e)}else try{let c=yield this.publish(a,i,k);b(c)}catch(a){d(a)}}catch(a){d(a)}}));c.pendingPublishPromises.set(a,l);try{return yield l}catch(a){throw a}finally{c.pendingPublishPromises.delete(a)}}()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new eR),this.signalConnectedFuture.promise}hasPermissionsToPublish(a){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),e9(a))),!1;let{canPublish:b,canPublishSources:c}=this.permissions;return!!(b&&(0===c.length||c.map(a=>(function(a){switch(a){case bs.CAMERA:return ej.Source.Camera;case bs.MICROPHONE:return ej.Source.Microphone;case bs.SCREEN_SHARE:return ej.Source.ScreenShare;case bs.SCREEN_SHARE_AUDIO:return ej.Source.ScreenShareAudio;default:return ej.Source.Unknown}})(a)).includes(a.source)))||(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),e9(a))),!1)}publish(a,b,c){return c4(this,void 0,void 0,function*(){var d,e,f,g,h,i,j,k,l,m;let n,o;if(!this.hasPermissionsToPublish(a))throw new d9("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(b=>eX(a)&&b.source===a.source)&&a.source!==ej.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(a.source),Object.assign(Object.assign({},this.logContext),e9(a))),b.stopMicTrackOnMute&&eY(a)&&(a.stopOnMute=!0),a.source===ej.Source.ScreenShare&&ey()&&(b.simulcast=!1),"av1"===b.videoCodec&&!function(){if(!("getCapabilities"in RTCRtpSender)||ez()||ey())return!1;let a=RTCRtpSender.getCapabilities("video"),b=!1;if(a){for(let c of a.codecs)if("video/AV1"===c.mimeType){b=!0;break}}return b}()&&(b.videoCodec=void 0),"vp9"===b.videoCodec&&!function(){if(!("getCapabilities"in RTCRtpSender)||ey())return!1;if(ez()){let a=ed();if((null==a?void 0:a.version)&&0>eI(a.version,"16")||(null==a?void 0:a.os)==="iOS"&&(null==a?void 0:a.osVersion)&&0>eI(a.osVersion,"16"))return!1}let a=RTCRtpSender.getCapabilities("video"),b=!1;if(a){for(let c of a.codecs)if("video/VP9"===c.mimeType){b=!0;break}}return b}()&&(b.videoCodec=void 0),void 0===b.videoCodec&&(b.videoCodec="vp8"),this.enabledPublishVideoCodecs.length>0&&!this.enabledPublishVideoCodecs.some(a=>b.videoCodec===e8(a.mime))&&(b.videoCodec=e8(this.enabledPublishVideoCodecs[0].mime));let p=b.videoCodec;a.on(A.Muted,this.onTrackMuted),a.on(A.Unmuted,this.onTrackUnmuted),a.on(A.Ended,this.handleTrackEnded),a.on(A.UpstreamPaused,this.onTrackUpstreamPaused),a.on(A.UpstreamResumed,this.onTrackUpstreamResumed),a.on(A.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);let q=[],r=!(null==(d=b.dtx)||d),s=a.getSourceTrackSettings();s.autoGainControl&&q.push(bz.TF_AUTO_GAIN_CONTROL),s.echoCancellation&&q.push(bz.TF_ECHO_CANCELLATION),s.noiseSuppression&&q.push(bz.TF_NOISE_SUPPRESSION),s.channelCount&&s.channelCount>1&&q.push(bz.TF_STEREO),r&&q.push(bz.TF_NO_DTX),e_(a)&&a.hasPreConnectBuffer&&q.push(bz.TF_PRECONNECT_BUFFER);let t=new ch({cid:a.mediaStreamTrack.id,name:b.name,type:ej.kindToProto(a.kind),muted:a.isMuted,source:ej.sourceToProto(a.source),disableDtx:r,encryption:this.encryptionType,stereo:c,disableRed:this.isE2EEEnabled||!(null==(e=b.red)||e),stream:null==b?void 0:b.stream,backupCodecPolicy:null==b?void 0:b.backupCodecPolicy,audioFeatures:q});if(a.kind===ej.Kind.Video){let c={width:0,height:0};try{c=yield a.waitForDimensions()}catch(d){let b=null!=(g=null==(f=this.roomOptions.videoCaptureDefaults)?void 0:f.resolution)?g:ep.h720.resolution;c={width:b.width,height:b.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),e9(a)),{dims:c}))}t.width=c.width,t.height=c.height,e$(a)&&(ew(p)&&(a.source===ej.Source.ScreenShare&&(b.scalabilityMode="L1T3","contentHint"in a.mediaStreamTrack&&(a.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),e9(a))))),b.scalabilityMode=null!=(h=b.scalabilityMode)?h:"L3T3_KEY"),t.simulcastCodecs=[new cg({codec:p,cid:a.mediaStreamTrack.id})],!0===b.backupCodec&&(b.backupCodec={codec:"vp8"}),b.backupCodec&&p!==b.backupCodec.codec&&t.encryption===bH.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),t.simulcastCodecs.push(new cg({codec:b.backupCodec.codec,cid:""})))),n=fU(a.source===ej.Source.ScreenShare,t.width,t.height,b),t.layers=f0(t.width,t.height,n,ew(b.videoCodec))}else a.kind===ej.Kind.Audio&&(n=[{maxBitrate:null==(i=b.audioPreset)?void 0:i.maxBitrate,priority:null!=(k=null==(j=b.audioPreset)?void 0:j.priority)?k:"high",networkPriority:null!=(m=null==(l=b.audioPreset)?void 0:l.priority)?m:"high"}]);if(!this.engine||this.engine.isClosed)throw new d7("cannot publish track when not connected");let u=()=>c4(this,void 0,void 0,function*(){var c,d;if(!this.engine.pcManager)throw new d7("pcManager is not ready");if(a.sender=yield this.engine.createSender(a,b,n),this.emit(y.LocalSenderCreated,a.sender,a),e$(a)&&(null!=b.degradationPreference||(b.degradationPreference=a.source===ej.Source.ScreenShare||a.constraints.height&&eS(a.constraints.height)>=1080?"maintain-resolution":"balanced"),a.setDegradationPreference(b.degradationPreference)),n)if(ey()&&a.kind===ej.Kind.Audio){let b;for(let c of this.engine.pcManager.publisher.getTransceivers())if(c.sender===a.sender){b=c;break}b&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:b,codec:"opus",maxbr:(null==(c=n[0])?void 0:c.maxBitrate)?n[0].maxBitrate/1e3:0})}else a.codec&&ew(a.codec)&&(null==(d=n[0])?void 0:d.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:t.cid,codec:a.codec,maxbr:n[0].maxBitrate/1e3});yield this.engine.negotiate()}),v=new Promise((b,c)=>c4(this,void 0,void 0,function*(){var d;try{o=yield this.engine.addTrack(t),b(o)}catch(b){a.sender&&(null==(d=this.engine.pcManager)?void 0:d.publisher)&&(this.engine.pcManager.publisher.removeTrack(a.sender),yield this.engine.negotiate().catch(b=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),e9(a)),{error:b}))})),c(b)}}));if(this.enabledPublishVideoCodecs.length>0)o=(yield Promise.all([v,u()]))[0];else{let c;if((o=yield v).codecs.forEach(a=>{void 0===c&&(c=a.mimeType)}),c&&a.kind===ej.Kind.Video){let d=e8(c);d!==p&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),e9(a)),{codec:d})),b.videoCodec=d,n=fU(a.source===ej.Source.ScreenShare,t.width,t.height,b))}yield u()}let w=new gm(a.kind,o,a,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(w.on(A.CpuConstrained,a=>this.onTrackCpuConstrained(a,w)),w.options=b,a.sid=o.sid,this.log.debug("publishing ".concat(a.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:n,trackInfo:o})),e$(a)?a.startMonitor(this.engine.client):e_(a)&&a.startMonitor(),this.addTrackPublication(w),this.emit(y.LocalTrackPublished,w),e_(a)&&o.audioFeatures.includes(bz.TF_PRECONNECT_BUFFER)){let b=a.getPreConnectBuffer(),c=a.getPreConnectBufferMimeType();this.on(y.LocalTrackSubscribed,b=>{if(b.trackSid===o.sid){if(!a.hasPreConnectBuffer)return void this.log.warn("subscribe event came to late, buffer already closed",this.logContext);this.log.debug("finished recording preconnect buffer",Object.assign(Object.assign({},this.logContext),e9(a))),a.stopPreConnectBuffer()}}),b&&new Promise((d,e)=>c4(this,void 0,void 0,function*(){try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),e9(a)));let o=setTimeout(()=>{e(Error("agent not active within 10 seconds"))},1e4),p=yield this.waitUntilActiveAgentPresent();clearTimeout(o),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),e9(a)));let q=yield this.streamBytes({name:"preconnect-buffer",mimeType:c,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[p.identity],attributes:{trackId:w.trackSid,sampleRate:String(null!=(j=s.sampleRate)?j:"48000"),channels:String(null!=(k=s.channelCount)?k:"1")}});try{for(var f,g,h,i,j,k,l,m=!0,n=c5(b);!(f=(l=yield n.next()).done);m=!0)i=l.value,m=!1,yield q.write(i)}catch(a){g={error:a}}finally{try{!m&&!f&&(h=n.return)&&(yield h.call(n))}finally{if(g)throw g.error}}yield q.close(),d()}catch(a){e(a)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),e9(a)))}).catch(b=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),e9(a)),{error:b}))})}return w})}get isLocal(){return!0}publishAdditionalCodecForTrack(a,b,c){return c4(this,void 0,void 0,function*(){var d;let e;if(this.encryptionType!==bH.NONE)return;if(this.trackPublications.forEach(b=>{b.track&&b.track===a&&(e=b)}),!e)throw new d5("track is not published");if(!e$(a))throw new d5("track is not a video track");let f=Object.assign(Object.assign({},null==(d=this.roomOptions)?void 0:d.publishDefaults),c),g=function(a,b,c){var d,e,f,g;if(!c.backupCodec||!0===c.backupCodec||c.backupCodec.codec===c.videoCodec)return;b!==c.backupCodec.codec&&c_.warn("requested a different codec than specified as backup",{serverRequested:b,backup:c.backupCodec.codec}),c.videoCodec=b,c.videoEncoding=c.backupCodec.encoding;let h=a.mediaStreamTrack.getSettings(),i=null!=(d=h.width)?d:null==(e=a.dimensions)?void 0:e.width,j=null!=(f=h.height)?f:null==(g=a.dimensions)?void 0:g.height;return a.source===ej.Source.ScreenShare&&c.simulcast&&(c.simulcast=!1),fU(a.source===ej.Source.ScreenShare,i,j,c)}(a,b,f);if(!g)return void this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),e9(a)));let h=a.addSimulcastTrack(b,g);if(!h)return;let i=new ch({cid:h.mediaStreamTrack.id,type:ej.kindToProto(a.kind),muted:a.isMuted,source:ej.sourceToProto(a.source),sid:a.sid,simulcastCodecs:[{codec:f.videoCodec,cid:h.mediaStreamTrack.id}]});if(i.layers=f0(i.width,i.height,g),!this.engine||this.engine.isClosed)throw new d7("cannot publish track when not connected");let j=()=>c4(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(a,h,f,g),yield this.engine.negotiate()}),k=(yield Promise.all([this.engine.addTrack(i),j()]))[0];this.log.debug("published ".concat(b," for track ").concat(a.sid),Object.assign(Object.assign({},this.logContext),{encodings:g,trackInfo:k}))})}unpublishTrack(a,b){return c4(this,void 0,void 0,function*(){var c,d;if(eX(a)){let b=this.pendingPublishPromises.get(a);b&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),e9(a))),yield b)}let e=this.getPublicationForTrack(a),f=e?e9(e):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),f)),!e||!e.track)return void this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),f));(a=e.track).off(A.Muted,this.onTrackMuted),a.off(A.Unmuted,this.onTrackUnmuted),a.off(A.Ended,this.handleTrackEnded),a.off(A.UpstreamPaused,this.onTrackUpstreamPaused),a.off(A.UpstreamResumed,this.onTrackUpstreamResumed),a.off(A.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),void 0===b&&(b=null==(d=null==(c=this.roomOptions)?void 0:c.stopLocalTrackOnUnpublish)||d),b?a.stop():a.stopMonitor();let g=!1,h=a.sender;if(a.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<L.FAILED&&h)try{for(let a of this.engine.pcManager.publisher.getTransceivers())a.sender===h&&(a.direction="inactive",g=!0);if(this.engine.removeTrack(h)&&(g=!0),e$(a)){for(let[,b]of a.simulcastCodecs)b.sender&&(this.engine.removeTrack(b.sender)&&(g=!0),b.sender=void 0);a.simulcastCodecs.clear()}}catch(a){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),f),{error:a}))}switch(this.trackPublications.delete(e.trackSid),e.kind){case ej.Kind.Audio:this.audioTrackPublications.delete(e.trackSid);break;case ej.Kind.Video:this.videoTrackPublications.delete(e.trackSid)}return this.emit(y.LocalTrackUnpublished,e),e.setTrack(void 0),g&&(yield this.engine.negotiate()),e})}unpublishTracks(a){return c4(this,void 0,void 0,function*(){return(yield Promise.all(a.map(a=>this.unpublishTrack(a)))).filter(a=>!!a)})}republishAllTracks(a){return c4(this,arguments,void 0,function(a){var b=this;let c=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return function*(){b.republishPromise&&(yield b.republishPromise),b.republishPromise=new Promise((d,e)=>c4(b,void 0,void 0,function*(){try{let b=[];this.trackPublications.forEach(c=>{c.track&&(a&&(c.options=Object.assign(Object.assign({},c.options),a)),b.push(c))}),yield Promise.all(b.map(a=>c4(this,void 0,void 0,function*(){let b=a.track;yield this.unpublishTrack(b,!1),c&&!b.isMuted&&b.source!==ej.Source.ScreenShare&&b.source!==ej.Source.ScreenShareAudio&&(e_(b)||e$(b))&&!b.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:a.trackSid})),yield b.restartTrack()),yield this.publishOrRepublishTrack(b,a.options,!0)}))),d()}catch(a){e(a)}finally{this.republishPromise=void 0}})),yield b.republishPromise}()})}publishData(a){return c4(this,arguments,void 0,function(a){var b=this;let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){let d=c.reliable?bM.RELIABLE:bM.LOSSY,e=c.destinationIdentities,f=c.topic,g=new bL({kind:d,value:{case:"user",value:new bP({participantIdentity:b.identity,payload:a,destinationIdentities:e,topic:f})}});yield b.engine.sendDataPacket(g,d)}()})}publishDtmf(a,b){return c4(this,void 0,void 0,function*(){let c=new bL({kind:bM.RELIABLE,value:{case:"sipDtmf",value:new bQ({code:a,digit:b})}});yield this.engine.sendDataPacket(c,bM.RELIABLE)})}sendChatMessage(a,b){return c4(this,void 0,void 0,function*(){let c={id:crypto.randomUUID(),message:a,timestamp:Date.now(),attachedFiles:null==b?void 0:b.attachments},d=new bL({value:{case:"chatMessage",value:new bT(Object.assign(Object.assign({},c),{timestamp:ay.parse(c.timestamp)}))}});return yield this.engine.sendDataPacket(d,bM.RELIABLE),this.emit(y.ChatMessage,c),c})}editChatMessage(a,b){return c4(this,void 0,void 0,function*(){let c=Object.assign(Object.assign({},b),{message:a,editTimestamp:Date.now()}),d=new bL({value:{case:"chatMessage",value:new bT(Object.assign(Object.assign({},c),{timestamp:ay.parse(c.timestamp),editTimestamp:ay.parse(c.editTimestamp)}))}});return yield this.engine.sendDataPacket(d,bM.RELIABLE),this.emit(y.ChatMessage,c),c})}sendText(a,b){return c4(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendText(a,b)})}streamText(a){return c4(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamText(a)})}sendFile(a,b){return c4(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendFile(a,b)})}streamBytes(a){return c4(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamBytes(a)})}performRpc(a){return c4(this,arguments,void 0,function(a){var b=this;let{destinationIdentity:c,method:d,payload:e,responseTimeout:f=1e4}=a;return function*(){return new Promise((a,g)=>c4(b,void 0,void 0,function*(){var b,h,i,j;if(fF(e)>15360)return void g(fE.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));if((null==(h=null==(b=this.engine.latestJoinResponse)?void 0:b.serverInfo)?void 0:h.version)&&0>eI(null==(j=null==(i=this.engine.latestJoinResponse)?void 0:i.serverInfo)?void 0:j.version,"1.8.0"))return void g(fE.builtIn("UNSUPPORTED_SERVER"));let k=crypto.randomUUID();yield this.publishRpcRequest(c,k,d,e,f-2e3);let l=setTimeout(()=>{this.pendingAcks.delete(k),g(fE.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(k),clearTimeout(m)},2e3);this.pendingAcks.set(k,{resolve:()=>{clearTimeout(l)},participantIdentity:c});let m=setTimeout(()=>{this.pendingResponses.delete(k),g(fE.builtIn("RESPONSE_TIMEOUT"))},f);this.pendingResponses.set(k,{resolve:(b,c)=>{clearTimeout(m),this.pendingAcks.has(k)&&(console.warn("RPC response received before ack",k),this.pendingAcks.delete(k),clearTimeout(l)),c?g(c):a(null!=b?b:"")},participantIdentity:c})}))}()})}registerRpcMethod(a,b){this.rpcHandlers.has(a)&&this.log.warn("you're overriding the RPC handler for method ".concat(a,", in the future this will throw an error")),this.rpcHandlers.set(a,b)}unregisterRpcMethod(a){this.rpcHandlers.delete(a)}setTrackSubscriptionPermissions(a){let b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];this.participantTrackPermissions=b,this.allParticipantsAllowedToSubscribe=a,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(a){let b=this.pendingAcks.get(a);b?(b.resolve(),this.pendingAcks.delete(a)):console.error("Ack received for unexpected RPC request",a)}handleIncomingRpcResponse(a,b,c){let d=this.pendingResponses.get(a);d?(d.resolve(b,c),this.pendingResponses.delete(a)):console.error("Response received for unexpected RPC request",a)}publishRpcRequest(a,b,c,d,e){return c4(this,void 0,void 0,function*(){let f=new bL({destinationIdentities:[a],kind:bM.RELIABLE,value:{case:"rpcRequest",value:new bU({id:b,method:c,payload:d,responseTimeoutMs:e,version:1})}});yield this.engine.sendDataPacket(f,bM.RELIABLE)})}handleParticipantDisconnected(a){for(let[b,{participantIdentity:c}]of this.pendingAcks)c===a&&this.pendingAcks.delete(b);for(let[b,{participantIdentity:c,resolve:d}]of this.pendingResponses)c===a&&(d(null,fE.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(b))}setEnabledPublishCodecs(a){this.enabledPublishVideoCodecs=a.filter(a=>"video"===a.mime.split("/")[0].toLowerCase())}updateInfo(a){return!!super.updateInfo(a)&&(a.tracks.forEach(a=>{var b,c;let d=this.trackPublications.get(a.sid);if(d){let e=d.isMuted||null!=(c=null==(b=d.track)?void 0:b.isUpstreamPaused)&&c;e!==a.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),e9(d)),{mutedOnServer:e})),this.engine.client.sendMuteTrack(a.sid,e))}}),!0)}setActiveAgent(a){var b,c,d,e;this.firstActiveAgent=a,a&&!this.firstActiveAgent&&(this.firstActiveAgent=a),a?null==(c=null==(b=this.activeAgentFuture)?void 0:b.resolve)||c.call(b,a):null==(e=null==(d=this.activeAgentFuture)?void 0:d.reject)||e.call(d,"Agent disconnected"),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new eR),this.activeAgentFuture.promise)}getPublicationForTrack(a){let b;return this.trackPublications.forEach(c=>{let d=c.track;d&&(a instanceof MediaStreamTrack?(e_(d)||e$(d))&&d.mediaStreamTrack===a&&(b=c):a===d&&(b=c))}),b}waitForPendingPublicationOfSource(a){return c4(this,void 0,void 0,function*(){let b=Date.now();for(;Date.now()<b+1e4;){let b=Array.from(this.pendingPublishPromises.entries()).find(b=>{let[c]=b;return c.source===a});if(b)return b[1];yield et(20)}})}}class gr extends gl{constructor(a,b,c,d){super(a,b.sid,b.name,d),this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=a=>{this.setTrack(void 0),this.emit(A.Ended,a)},this.handleVisibilityChange=a=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(a),this.logContext),this.visible=a,this.emitTrackUpdate()},this.handleVideoDimensionsChange=a=>{this.log.debug("adaptivestream video dimensions ".concat(a.width,"x").concat(a.height),this.logContext),this.videoDimensionsAdaptiveStream=a,this.emitTrackUpdate()},this.subscribed=c,this.updateInfo(b)}setSubscribed(a){let b=this.subscriptionStatus,c=this.permissionStatus;this.subscribed=a,a&&(this.allowed=!0);let d=new cq({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new bY({participantSid:"",trackSids:[this.trackSid]})]});this.emit(A.UpdateSubscription,d),this.emitSubscriptionUpdateIfChanged(b),this.emitPermissionUpdateIfChanged(c)}get subscriptionStatus(){return!1===this.subscribed?gl.SubscriptionStatus.Unsubscribed:super.isSubscribed?gl.SubscriptionStatus.Subscribed:gl.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?gl.PermissionStatus.Allowed:gl.PermissionStatus.NotAllowed}get isSubscribed(){return!1!==this.subscribed&&super.isSubscribed}get isDesired(){return!1!==this.subscribed}get isEnabled(){return void 0!==this.requestedDisabled?!this.requestedDisabled:!this.isAdaptiveStream||this.visible}get isLocal(){return!1}setEnabled(a){this.isManualOperationAllowed()&&!a!==this.requestedDisabled&&(this.requestedDisabled=!a,this.emitTrackUpdate())}setVideoQuality(a){this.isManualOperationAllowed()&&this.requestedMaxQuality!==a&&(this.requestedMaxQuality=a,this.requestedVideoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(a){var b,c;this.isManualOperationAllowed()&&((null==(b=this.requestedVideoDimensions)?void 0:b.width)!==a.width||(null==(c=this.requestedVideoDimensions)?void 0:c.height)!==a.height)&&(e1(this.track)&&(this.requestedVideoDimensions=a),this.requestedMaxQuality=void 0,this.emitTrackUpdate())}setVideoFPS(a){this.isManualOperationAllowed()&&e1(this.track)&&this.fps!==a&&(this.fps=a,this.emitTrackUpdate())}get videoQuality(){var a;return null!=(a=this.requestedMaxQuality)?a:B.HIGH}setTrack(a){let b=this.subscriptionStatus,c=this.permissionStatus,d=this.track;d!==a&&(d&&(d.off(A.VideoDimensionsChanged,this.handleVideoDimensionsChange),d.off(A.VisibilityChanged,this.handleVisibilityChange),d.off(A.Ended,this.handleEnded),d.detach(),d.stopMonitor(),this.emit(A.Unsubscribed,d)),super.setTrack(a),a&&(a.sid=this.trackSid,a.on(A.VideoDimensionsChanged,this.handleVideoDimensionsChange),a.on(A.VisibilityChanged,this.handleVisibilityChange),a.on(A.Ended,this.handleEnded),this.emit(A.Subscribed,a)),this.emitPermissionUpdateIfChanged(c),this.emitSubscriptionUpdateIfChanged(b))}setAllowed(a){let b=this.subscriptionStatus,c=this.permissionStatus;this.allowed=a,this.emitPermissionUpdateIfChanged(c),this.emitSubscriptionUpdateIfChanged(b)}setSubscriptionError(a){this.emit(A.SubscriptionFailed,a)}updateInfo(a){super.updateInfo(a);let b=this.metadataMuted;this.metadataMuted=a.muted,this.track?this.track.setMuted(a.muted):b!==a.muted&&this.emit(a.muted?A.Muted:A.Unmuted)}emitSubscriptionUpdateIfChanged(a){let b=this.subscriptionStatus;a!==b&&this.emit(A.SubscriptionStatusChanged,b,a)}emitPermissionUpdateIfChanged(a){this.permissionStatus!==a&&this.emit(A.SubscriptionPermissionChanged,this.permissionStatus,a)}isManualOperationAllowed(){return!!this.isDesired||(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return e1(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){let a=new cr({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===ej.Kind.Video){let e=this.requestedVideoDimensions;if(void 0!==this.videoDimensionsAdaptiveStream)if(e)fb(this.videoDimensionsAdaptiveStream,e)&&(this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream);else if(void 0!==this.requestedMaxQuality&&this.trackInfo){var b,c,d;let a=(b=this.trackInfo,c=this.requestedMaxQuality,null==(d=b.layers)?void 0:d.find(a=>a.quality===c));a&&fb(this.videoDimensionsAdaptiveStream,a)&&(this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream)}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream;e?(a.width=Math.ceil(e.width),a.height=Math.ceil(e.height)):void 0!==this.requestedMaxQuality?(this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),a.quality=this.requestedMaxQuality):(this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:B.HIGH})),a.quality=B.HIGH)}this.emit(A.UpdateSettings,a)}}class gs extends gp{static fromParticipantInfo(a,b,c){return new gs(a,b.sid,b.identity,b.name,b.metadata,b.attributes,c,b.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(a,b,c,d,e,f,g){let h=arguments.length>7&&void 0!==arguments[7]?arguments[7]:bF.STANDARD;super(b,c||"",d,e,f,g,h),this.signalClient=a,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(a){super.addTrackPublication(a),a.on(A.UpdateSettings,b=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),e9(a)),{settings:b})),this.signalClient.sendUpdateTrackSettings(b)}),a.on(A.UpdateSubscription,a=>{a.participantTracks.forEach(a=>{a.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(a)}),a.on(A.SubscriptionPermissionChanged,b=>{this.emit(y.TrackSubscriptionPermissionChanged,a,b)}),a.on(A.SubscriptionStatusChanged,b=>{this.emit(y.TrackSubscriptionStatusChanged,a,b)}),a.on(A.Subscribed,b=>{this.emit(y.TrackSubscribed,b,a)}),a.on(A.Unsubscribed,b=>{this.emit(y.TrackUnsubscribed,b,a)}),a.on(A.SubscriptionFailed,b=>{this.emit(y.TrackSubscriptionFailed,a.trackSid,b)})}getTrackPublication(a){let b=super.getTrackPublication(a);if(b)return b}getTrackPublicationByName(a){let b=super.getTrackPublicationByName(a);if(b)return b}setVolume(a){let b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ej.Source.Microphone;this.volumeMap.set(b,a);let c=this.getTrackPublication(b);c&&c.track&&c.track.setVolume(a)}getVolume(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ej.Source.Microphone,b=this.getTrackPublication(a);return b&&b.track?b.track.getVolume():this.volumeMap.get(a)}addSubscribedMediaTrack(a,b,c,d,e,f){let g,h=this.getTrackPublicationBySid(b);if(h||b.startsWith("TR")||this.trackPublications.forEach(b=>{h||a.kind!==b.kind.toString()||(h=b)}),!h){if(0===f){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:b})),this.emit(y.TrackSubscriptionFailed,b);return}void 0===f&&(f=20),setTimeout(()=>{this.addSubscribedMediaTrack(a,b,c,d,e,f-1)},150);return}if("ended"===a.readyState){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),e9(h))),this.emit(y.TrackSubscriptionFailed,b);return}return(g="video"===a.kind?new gh(a,b,d,e):new gg(a,b,d,this.audioContext,this.audioOutput)).source=h.source,g.isMuted=h.isMuted,g.setMediaStream(c),g.start(),h.setTrack(g),this.volumeMap.has(h.source)&&e0(g)&&eY(g)&&g.setVolume(this.volumeMap.get(h.source)),h}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(a){return this.trackPublications.get(a)}updateInfo(a){if(!super.updateInfo(a))return!1;let b=new Map,c=new Map;return a.tracks.forEach(a=>{var d,e;let f=this.getTrackPublicationBySid(a.sid);if(f)f.updateInfo(a);else{let b=ej.kindFromProto(a.type);if(!b)return;(f=new gr(b,a,null==(d=this.signalClient.connectOptions)?void 0:d.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:null==(e=this.loggerOptions)?void 0:e.loggerName})).updateInfo(a),c.set(a.sid,f);let g=Array.from(this.trackPublications.values()).find(a=>a.source===(null==f?void 0:f.source));g&&f.source!==ej.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(f.source),Object.assign(Object.assign({},this.logContext),{oldTrack:e9(g),newTrack:e9(f)})),this.addTrackPublication(f)}b.set(a.sid,f)}),this.trackPublications.forEach(a=>{b.has(a.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),e9(a))),this.unpublishTrack(a.trackSid,!0))}),c.forEach(a=>{this.emit(y.TrackPublished,a)}),!0}unpublishTrack(a,b){let c=this.trackPublications.get(a);if(!c)return;let{track:d}=c;switch(d&&(d.stop(),c.setTrack(void 0)),this.trackPublications.delete(a),c.kind){case ej.Kind.Audio:this.audioTrackPublications.delete(a);break;case ej.Kind.Video:this.videoTrackPublications.delete(a)}b&&this.emit(y.TrackUnpublished,c)}setAudioOutput(a){return c4(this,void 0,void 0,function*(){this.audioOutput=a;let b=[];this.audioTrackPublications.forEach(c=>{var d;eY(c.track)&&e0(c.track)&&b.push(c.track.setSinkId(null!=(d=a.deviceId)?d:"default"))}),yield Promise.all(b)})}emit(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:a,args:c})),super.emit(a,...c)}}!function(a){a.Disconnected="disconnected",a.Connecting="connecting",a.Connected="connected",a.Reconnecting="reconnecting",a.SignalReconnecting="signalReconnecting"}(O||(O={}));class gt extends c7.EventEmitter{constructor(a){var b,c,d,e;if(super(),b=this,this.state=O.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=c_,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(a,b,c)=>c4(this,void 0,void 0,function*(){var d;if(!("undefined"!=typeof RTCPeerConnection&&(eu()||ev())))if(eD())throw Error("WebRTC isn't detected, have you called registerGlobals?");else throw 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.");let e=yield this.disconnectLock.lock();if(this.state===O.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),e(),Promise.resolve();if(this.connectFuture)return e(),this.connectFuture.promise;this.setAndEmitConnectionState(O.Connecting),(null==(d=this.regionUrlProvider)?void 0:d.getServerUrl().toString())!==a&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),eE(new URL(a))&&(void 0===this.regionUrlProvider?this.regionUrlProvider=new f6(a,b):this.regionUrlProvider.updateToken(b),this.regionUrlProvider.fetchRegionSettings().then(a=>{var b;null==(b=this.regionUrlProvider)||b.setServerReportedRegions(a)}).catch(a=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:a}))}));let f=(d,g,h)=>c4(this,void 0,void 0,function*(){var i,j;this.abortController&&this.abortController.abort();let k=new AbortController;this.abortController=k,null==e||e();try{yield this.attemptConnection(null!=h?h:a,b,c,k),this.abortController=void 0,d()}catch(a){if(this.regionUrlProvider&&a instanceof d3&&a.reason!==t.Cancelled&&a.reason!==t.NotAllowed){let b=null;try{b=yield this.regionUrlProvider.getNextBestRegionUrl(null==(i=this.abortController)?void 0:i.signal)}catch(a){if(a instanceof d3&&(401===a.status||a.reason===t.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),g(a);return}}!b||(null==(j=this.abortController)?void 0:j.signal.aborted)?(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,eU(a)),g(a)):(this.log.info("Initial connection failed with ConnectionError: ".concat(a.message,". Retrying with another region: ").concat(b),this.logContext),this.recreateEngine(),yield f(d,g,b))}else{let b=bw.UNKNOWN_REASON;a instanceof d3&&(b=eU(a)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,b),g(a)}}}),g=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new eR((a,b)=>{f(a,b,g)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,b,c,d,e,f)=>c4(this,void 0,void 0,function*(){var g,h,i;let j=yield c.join(a,b,{autoSubscribe:d.autoSubscribe,adaptiveStream:"object"==typeof e.adaptiveStream||e.adaptiveStream,maxRetries:d.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:d.websocketTimeout},f.signal),k=j.serverInfo;if(k||(k={version:j.serverVersion,region:j.serverRegion}),this.serverInfo=k,this.log.debug("connected to Livekit Server ".concat(Object.entries(k).map(a=>{let[b,c]=a;return"".concat(b,": ").concat(c)}).join(", ")),{room:null==(g=j.room)?void 0:g.name,roomSid:null==(h=j.room)?void 0:h.sid,identity:null==(i=j.participant)?void 0:i.identity}),!k.version)throw new d6("unknown server version");return"0.15.1"===k.version&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),e.dynacast=!1),j}),this.applyJoinResponse=a=>{let b=a.participant;if(this.localParticipant.sid=b.sid,this.localParticipant.identity=b.identity,this.localParticipant.setEnabledPublishCodecs(a.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(a.sifTrailer)}catch(a){this.log.error(a instanceof Error?a.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:a}))}this.handleParticipantUpdates([b,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,b,c,d)=>c4(this,void 0,void 0,function*(){var e,f;this.state===O.Reconnecting||this.isResuming||(null==(e=this.engine)?void 0:e.pendingReconnect)?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),(null==(f=this.regionUrlProvider)?void 0:f.isCloud())&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},fC),c),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{let c=yield this.connectSignal(a,b,this.engine,this.connOptions,this.options,d);this.applyJoinResponse(c),this.setupLocalParticipantEvents(),this.emit(x.SignalConnected)}catch(b){yield this.engine.close(),this.recreateEngine();let a=new d3("could not establish signal connection",t.ServerUnreachable);throw b instanceof Error&&(a.message="".concat(a.message,": ").concat(b.message)),b instanceof d3&&(a.reason=b.reason,a.status=b.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:b})),a}if(d.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new d3("Connection attempt aborted",t.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,d)}catch(a){throw yield this.engine.close(),this.recreateEngine(),a}eC()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),eC()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(O.Connected),this.emit(x.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var a=arguments.length,c=Array(a),d=0;d<a;d++)c[d]=arguments[d];return c4(b,[...c],void 0,function(){var a=this;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return function*(){var c,d,e,f;let g=yield a.disconnectLock.lock();try{if(a.state===O.Disconnected)return void a.log.debug("already disconnected",a.logContext);a.log.info("disconnect from room",Object.assign({},a.logContext)),(a.state===O.Connecting||a.state===O.Reconnecting||a.isResuming)&&(a.log.warn("abort connection attempt",a.logContext),null==(c=a.abortController)||c.abort(),null==(e=null==(d=a.connectFuture)?void 0:d.reject)||e.call(d,new d3("Client initiated disconnect",t.Cancelled)),a.connectFuture=void 0),(null==(f=a.engine)?void 0:f.client.isDisconnected)||(yield a.engine.client.sendLeave()),a.engine&&(yield a.engine.close()),a.handleDisconnect(b,bw.CLIENT_INITIATED),a.engine=void 0}finally{g()}}()})},this.onPageLeave=()=>c4(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>c4(this,void 0,void 0,function*(){let a=[],b=ed();if(b&&"iOS"===b.os){let b="livekit-dummy-audio-el",c=document.getElementById(b);if(!c){(c=document.createElement("audio")).id=b,c.autoplay=!0,c.hidden=!0;let a=eQ();a.enabled=!0;let d=new MediaStream([a]);c.srcObject=d,document.addEventListener("visibilitychange",()=>{c&&(c.srcObject=document.hidden?null:d,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(c),this.once(x.Disconnected,()=>{null==c||c.remove(),c=null})}a.push(c)}this.remoteParticipants.forEach(b=>{b.audioTrackPublications.forEach(b=>{b.track&&b.track.attachedElements.forEach(b=>{a.push(b)})})});try{yield Promise.all([this.acquireAudioContext(),...a.map(a=>(a.muted=!1,a.play()))]),this.handleAudioPlaybackStarted()}catch(a){throw this.handleAudioPlaybackFailed(a),a}}),this.startVideo=()=>c4(this,void 0,void 0,function*(){let a=[];for(let b of this.remoteParticipants.values())b.videoTrackPublications.forEach(b=>{var c;null==(c=b.track)||c.attachedElements.forEach(b=>{a.includes(b)||a.push(b)})});yield Promise.all(a.map(a=>a.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(a=>{"NotAllowedError"===a.name?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{for(let a of(this.clearConnectionReconcile(),this.isResuming=!1,this.remoteParticipants.values()))this.handleParticipantDisconnected(a.identity,a);this.setAndEmitConnectionState(O.Reconnecting)&&this.emit(x.Reconnecting)},this.handleSignalRestarted=a=>c4(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(a){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:a}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:a.serverRegion}))}catch(a){return}this.setAndEmitConnectionState(O.Connected),this.emit(x.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(a=>{var b;if(a.identity===this.localParticipant.identity)return void this.localParticipant.updateInfo(a);""===a.identity&&(a.identity=null!=(b=this.sidToIdentity.get(a.sid))?b:"");let c=this.remoteParticipants.get(a.identity);a.state===bE.DISCONNECTED?this.handleParticipantDisconnected(a.identity,c):c=this.getOrCreateParticipant(a.identity,a)})},this.handleActiveSpeakersUpdate=a=>{let b=[],c={};a.forEach(a=>{if(c[a.sid]=!0,a.sid===this.localParticipant.sid)this.localParticipant.audioLevel=a.level,this.localParticipant.setIsSpeaking(!0),b.push(this.localParticipant);else{let c=this.getRemoteParticipantBySid(a.sid);c&&(c.audioLevel=a.level,c.setIsSpeaking(!0),b.push(c))}}),c[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(a=>{c[a.sid]||(a.audioLevel=0,a.setIsSpeaking(!1))}),this.activeSpeakers=b,this.emitWhenConnected(x.ActiveSpeakersChanged,b)},this.handleSpeakersChanged=a=>{let b=new Map;this.activeSpeakers.forEach(a=>{let c=this.remoteParticipants.get(a.identity);c&&c.sid!==a.sid||b.set(a.sid,a)}),a.forEach(a=>{let c=this.getRemoteParticipantBySid(a.sid);a.sid===this.localParticipant.sid&&(c=this.localParticipant),c&&(c.audioLevel=a.level,c.setIsSpeaking(a.active),a.active?b.set(a.sid,c):b.delete(a.sid))});let c=Array.from(b.values());c.sort((a,b)=>b.audioLevel-a.audioLevel),this.activeSpeakers=c,this.emitWhenConnected(x.ActiveSpeakersChanged,c)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(a=>{let b=this.getRemoteParticipantBySid(a.participantSid);if(!b)return;let c=b.getTrackPublicationBySid(a.trackSid);if(!c||!c.track)return;let d=ej.streamStateFromProto(a.state);c.track.setStreamState(d),d!==c.track.streamState&&(b.emit(y.TrackStreamStateChanged,c,c.track.streamState),this.emitWhenConnected(x.TrackStreamStateChanged,c,c.track.streamState,b))})},this.handleSubscriptionPermissionUpdate=a=>{let b=this.getRemoteParticipantBySid(a.participantSid);if(!b)return;let c=b.getTrackPublicationBySid(a.trackSid);c&&c.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{let b=Array.from(this.remoteParticipants.values()).find(b=>b.trackPublications.has(a.trackSid));if(!b)return;let c=b.getTrackPublicationBySid(a.trackSid);c&&c.setSubscriptionError(a.err)},this.handleDataPacket=a=>{let b=this.remoteParticipants.get(a.participantIdentity);if("user"===a.value.case)this.handleUserPacket(b,a.value.value,a.kind);else if("transcription"===a.value.case)this.handleTranscription(b,a.value.value);else if("sipDtmf"===a.value.case)this.handleSipDtmf(b,a.value.value);else if("chatMessage"===a.value.case)this.handleChatMessage(b,a.value.value);else if("metrics"===a.value.case)this.handleMetrics(a.value.value,b);else if("streamHeader"===a.value.case||"streamChunk"===a.value.case||"streamTrailer"===a.value.case)this.handleDataStream(a);else if("rpcRequest"===a.value.case){let b=a.value.value;this.handleIncomingRpcRequest(a.participantIdentity,b.id,b.method,b.payload,b.responseTimeoutMs,b.version)}},this.handleUserPacket=(a,b,c)=>{this.emit(x.DataReceived,b.payload,a,c,b.topic),null==a||a.emit(y.DataReceived,b.payload,c)},this.handleSipDtmf=(a,b)=>{this.emit(x.SipDTMFReceived,b,a),null==a||a.emit(y.SipDTMFReceived,b)},this.handleTranscription=(a,b)=>{let c=b.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(b.transcribedParticipantIdentity),d=null==c?void 0:c.trackPublications.get(b.trackId),e=function(a,b){return a.segments.map(a=>{var c;let{id:d,text:e,language:f,startTime:g,endTime:h,final:i}=a,j=null!=(c=b.get(d))?c:Date.now(),k=Date.now();return i?b.delete(d):b.set(d,j),{id:d,text:e,startTime:Number.parseInt(g.toString()),endTime:Number.parseInt(h.toString()),final:i,language:f,firstReceivedTime:j,lastReceivedTime:k}})}(b,this.transcriptionReceivedTimes);null==d||d.emit(A.TranscriptionReceived,e),null==c||c.emit(y.TranscriptionReceived,e,d),this.emit(x.TranscriptionReceived,e,c,d)},this.handleChatMessage=(a,b)=>{let c=function(a){let{id:b,timestamp:c,message:d,editTimestamp:e}=a;return{id:b,timestamp:Number.parseInt(c.toString()),editTimestamp:e?Number.parseInt(e.toString()):void 0,message:d}}(b);this.emit(x.ChatMessage,c,a)},this.handleMetrics=(a,b)=>{this.emit(x.MetricsReceived,a,b)},this.handleDataStream=a=>{this.incomingDataStreamManager.handleDataStreamPacket(a)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(x.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(x.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(x.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(x.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>c4(this,void 0,void 0,function*(){var a;(null==(a=ed())?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(x.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{let b=this.roomInfo;this.roomInfo=a,b&&b.metadata!==a.metadata&&this.emitWhenConnected(x.RoomMetadataChanged,a.metadata),(null==b?void 0:b.activeRecording)!==a.activeRecording&&this.emitWhenConnected(x.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(a=>{if(a.participantSid===this.localParticipant.sid)return void this.localParticipant.setConnectionQuality(a.quality);let b=this.getRemoteParticipantBySid(a.participantSid);b&&b.setConnectionQuality(a.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(x.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(x.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(x.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(x.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(x.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var b;null==(b=null==a?void 0:a.onPublish)||b.call(a,this)},this.onLocalTrackPublished=a=>c4(this,void 0,void 0,function*(){var b,c,d,e,f,g;null==(b=a.track)||b.on(A.TrackProcessorUpdate,this.onTrackProcessorUpdate),null==(c=a.track)||c.on(A.Restarted,this.onLocalTrackRestarted),null==(f=null==(e=null==(d=a.track)?void 0:d.getProcessor())?void 0:e.onPublish)||f.call(e,this),this.emit(x.LocalTrackPublished,a,this.localParticipant),e_(a.track)&&(yield a.track.checkForSilence())&&this.emit(x.LocalAudioSilenceDetected,a);let h=yield null==(g=a.track)?void 0:g.getDeviceId(!1),i=e7(a.source);i&&h&&h!==this.localParticipant.activeDeviceMap.get(i)&&(this.localParticipant.activeDeviceMap.set(i,h),this.emit(x.ActiveDeviceChanged,i,h))}),this.onLocalTrackUnpublished=a=>{var b,c;null==(b=a.track)||b.off(A.TrackProcessorUpdate,this.onTrackProcessorUpdate),null==(c=a.track)||c.off(A.Restarted,this.onLocalTrackRestarted),this.emit(x.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>c4(this,void 0,void 0,function*(){let b=yield a.getDeviceId(!1),c=e7(a.source);c&&b&&b!==this.localParticipant.activeDeviceMap.get(c)&&(this.log.debug("local track restarted, setting ".concat(c," ").concat(b," active"),this.logContext),this.localParticipant.activeDeviceMap.set(c,b),this.emit(x.ActiveDeviceChanged,c,b))}),this.onLocalConnectionQualityChanged=a=>{this.emit(x.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,b)=>{this.emit(x.MediaDevicesError,a,b)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(x.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(x.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},fB),a),this.log=c0(null!=(c=this.options.loggerName)?c:m.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},fz),null==a?void 0:a.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},fA),null==a?void 0:a.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},fy),null==a?void 0:a.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new ga,this.outgoingDataStreamManager=new ge(this.engine,this.log),this.disconnectLock=new af,this.localParticipant=new gq("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",eS(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",eS(this.options.audioCaptureDefaults.deviceId)),(null==(d=this.options.audioOutput)?void 0:d.deviceId)&&this.switchActiveDevice("audiooutput",eS(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),eC()){let a=new AbortController;null==(e=navigator.mediaDevices)||e.addEventListener("devicechange",this.handleDeviceChange,{signal:a.signal}),gt.cleanupRegistry&>.cleanupRegistry.register(this,()=>{a.abort()})}}registerTextStreamHandler(a,b){return this.incomingDataStreamManager.registerTextStreamHandler(a,b)}unregisterTextStreamHandler(a){return this.incomingDataStreamManager.unregisterTextStreamHandler(a)}registerByteStreamHandler(a,b){return this.incomingDataStreamManager.registerByteStreamHandler(a,b)}unregisterByteStreamHandler(a){return this.incomingDataStreamManager.unregisterByteStreamHandler(a)}registerRpcMethod(a,b){if(this.rpcHandlers.has(a))throw Error("RPC handler already registered for method ".concat(a,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(a,b)}unregisterRpcMethod(a){this.rpcHandlers.delete(a)}setE2EEEnabled(a){return c4(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(a)]),""!==this.localParticipant.identity&&this.e2eeManager.setParticipantCryptorEnabled(a,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var a;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new fc(this.options.e2ee),this.e2eeManager.on(r.ParticipantEncryptionStatusChanged,(a,b)=>{b.isLocal&&(this.isE2EEEnabled=a),this.emit(x.ParticipantEncryptionStatusChanged,a,b)}),this.e2eeManager.on(r.EncryptionError,a=>this.emit(x.EncryptionError,a)),null==(a=this.e2eeManager)||a.setup(this))}get logContext(){var a;return{room:this.name,roomID:null==(a=this.roomInfo)?void 0:a.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var a,b;return null!=(b=null==(a=this.roomInfo)?void 0:a.activeRecording)&&b}getSid(){return c4(this,void 0,void 0,function*(){return this.state===O.Disconnected?"":this.roomInfo&&""!==this.roomInfo.sid?this.roomInfo.sid:new Promise((a,b)=>{let c=b=>{""!==b.sid&&(this.engine.off(z.RoomUpdate,c),a(b.sid))};this.engine.on(z.RoomUpdate,c),this.once(x.Disconnected,()=>{this.engine.off(z.RoomUpdate,c),b("Room disconnected before room server id was available")})})})}get name(){var a,b;return null!=(b=null==(a=this.roomInfo)?void 0:a.name)?b:""}get metadata(){var a;return null==(a=this.roomInfo)?void 0:a.metadata}get numParticipants(){var a,b;return null!=(b=null==(a=this.roomInfo)?void 0:a.numParticipants)?b:0}get numPublishers(){var a,b;return null!=(b=null==(a=this.roomInfo)?void 0:a.numPublishers)?b:0}maybeCreateEngine(){(!this.engine||this.engine.isClosed)&&(this.engine=new f4(this.options),this.engine.on(z.ParticipantUpdate,this.handleParticipantUpdates).on(z.RoomUpdate,this.handleRoomUpdate).on(z.SpeakersChanged,this.handleSpeakersChanged).on(z.StreamStateChanged,this.handleStreamStateUpdate).on(z.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(z.SubscriptionError,this.handleSubscriptionError).on(z.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(z.MediaTrackAdded,(a,b,c)=>{this.onTrackAdded(a,b,c)}).on(z.Disconnected,a=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,a)}).on(z.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(z.DataPacketReceived,this.handleDataPacket).on(z.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(O.SignalReconnecting)&&this.emit(x.SignalReconnecting)}).on(z.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(O.Connected)&&this.emit(x.Reconnected)}).on(z.SignalResumed,()=>{this.bufferedEvents=[],(this.state===O.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(z.Restarting,this.handleRestarting).on(z.SignalRestarted,this.handleSignalRestarted).on(z.Offline,()=>{this.setAndEmitConnectionState(O.Reconnecting)&&this.emit(x.Reconnecting)}).on(z.DCBufferStatusChanged,(a,b)=>{this.emit(x.DCBufferStatusChanged,a,b)}).on(z.LocalTrackSubscribed,a=>{let b=this.localParticipant.getTrackPublications().find(b=>{let{trackSid:c}=b;return c===a});if(!b)return void this.log.warn("could not find local track subscription for subscribed event",this.logContext);this.localParticipant.emit(y.LocalTrackSubscribed,b),this.emitWhenConnected(x.LocalTrackSubscribed,b,this.localParticipant)}).on(z.RoomMoved,a=>{this.log.debug("room moved",a),a.room&&this.handleRoomUpdate(a.room),this.remoteParticipants.forEach((a,b)=>{this.handleParticipantDisconnected(b,a)}),this.emit(x.Moved,a.room.name),a.participant?this.handleParticipantUpdates([a.participant,...a.otherParticipants]):this.handleParticipantUpdates(a.otherParticipants)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine),this.outgoingDataStreamManager&&this.outgoingDataStreamManager.setupEngine(this.engine))}static getLocalDevices(a){let b=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return fe.getInstance().getDevices(a,b)}prepareConnection(a,b){return c4(this,void 0,void 0,function*(){if(this.state===O.Disconnected){this.log.debug("prepareConnection to ".concat(a),this.logContext);try{if(eE(new URL(a))&&b){this.regionUrlProvider=new f6(a,b);let c=yield this.regionUrlProvider.getNextBestRegionUrl();c&&this.state===O.Disconnected&&(this.regionUrl=c,yield fetch(eT(c),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(c),this.logContext))}else yield fetch(eT(a),{method:"HEAD"})}catch(a){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:a}))}}})}getParticipantByIdentity(a){return this.localParticipant.identity===a?this.localParticipant:this.remoteParticipants.get(a)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(a,b){return c4(this,void 0,void 0,function*(){let c,d=()=>c4(this,void 0,void 0,function*(){});switch(a){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":c=new cP({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":c=new cP({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":c=new cP({scenario:{case:"serverLeave",value:!0}});break;case"migration":c=new cP({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":d=()=>c4(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),c=new cP({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":d=()=>c4(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),c=new cP({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":c=new cP({scenario:{case:"switchCandidateProtocol",value:"force-tls"===a?2:1}}),d=()=>c4(this,void 0,void 0,function*(){let a=this.engine.client.onLeave;a&&a(new cu({reason:bw.CLIENT_INITIATED,action:cv.RECONNECT}))});break;case"subscriber-bandwidth":if(void 0===b||"number"!=typeof b)throw Error("subscriber-bandwidth requires a number as argument");c=new cP({scenario:{case:"subscriberBandwidth",value:eW(b)}});break;case"leave-full-reconnect":c=new cP({scenario:{case:"leaveRequestFullReconnect",value:!0}})}c&&(yield this.engine.client.sendSimulateScenario(c),yield d())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(a){return this.localParticipant.activeDeviceMap.get(a)}switchActiveDevice(a,b){return c4(this,arguments,void 0,function(a,b){var c=this;let d=!(arguments.length>2)||void 0===arguments[2]||arguments[2];return function*(){var e,f,g,h,i,j;let k=!0,l=!1,m=d?{exact:b}:b;if("audioinput"===a){l=0===c.localParticipant.audioTrackPublications.size;let b=null!=(e=c.getActiveDevice(a))?e:c.options.audioCaptureDefaults.deviceId;c.options.audioCaptureDefaults.deviceId=m;let d=Array.from(c.localParticipant.audioTrackPublications.values()).filter(a=>a.source===ej.Source.Microphone);try{k=(yield Promise.all(d.map(a=>{var b;return null==(b=a.audioTrack)?void 0:b.setDeviceId(m)}))).every(a=>!0===a)}catch(a){throw c.options.audioCaptureDefaults.deviceId=b,a}let f=d.some(a=>{var b,c;return null!=(c=null==(b=a.track)?void 0:b.isMuted)&&c});k&&f&&(l=!0)}else if("videoinput"===a){l=0===c.localParticipant.videoTrackPublications.size;let b=null!=(f=c.getActiveDevice(a))?f:c.options.videoCaptureDefaults.deviceId;c.options.videoCaptureDefaults.deviceId=m;let d=Array.from(c.localParticipant.videoTrackPublications.values()).filter(a=>a.source===ej.Source.Camera);try{k=(yield Promise.all(d.map(a=>{var b;return null==(b=a.videoTrack)?void 0:b.setDeviceId(m)}))).every(a=>!0===a)}catch(a){throw c.options.videoCaptureDefaults.deviceId=b,a}let e=d.some(a=>{var b,c;return null!=(c=null==(b=a.track)?void 0:b.isMuted)&&c});k&&e&&(l=!0)}else if("audiooutput"===a){if(l=!0,!ex()&&!c.options.webAudioMix||c.options.webAudioMix&&c.audioContext&&!("setSinkId"in c.audioContext))throw Error("cannot switch audio output, the current browser does not support it");c.options.webAudioMix&&(b=null!=(g=yield fe.getInstance().normalizeDeviceId("audiooutput",b))?g:""),null!=(j=c.options).audioOutput||(j.audioOutput={});let d=null!=(h=c.getActiveDevice(a))?h:c.options.audioOutput.deviceId;c.options.audioOutput.deviceId=b;try{c.options.webAudioMix&&(null==(i=c.audioContext)||i.setSinkId(b)),yield Promise.all(Array.from(c.remoteParticipants.values()).map(a=>a.setAudioOutput({deviceId:b})))}catch(a){throw c.options.audioOutput.deviceId=d,a}}return l&&(c.localParticipant.activeDeviceMap.set(a,b),c.emit(x.ActiveDeviceChanged,a,b)),k}()})}setupLocalParticipantEvents(){this.localParticipant.on(y.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(y.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(y.AttributesChanged,this.onLocalAttributesChanged).on(y.TrackMuted,this.onLocalTrackMuted).on(y.TrackUnmuted,this.onLocalTrackUnmuted).on(y.LocalTrackPublished,this.onLocalTrackPublished).on(y.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(y.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(y.MediaDevicesError,this.onMediaDevicesError).on(y.AudioStreamAcquired,this.startAudio).on(y.ChatMessage,this.onLocalChatMessageSent).on(y.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var a;null==(a=this.engine)||a.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(a,b,c){let d;if(this.state===O.Connecting||this.state===O.Reconnecting){let d=()=>{this.onTrackAdded(a,b,c),e()},e=()=>{this.off(x.Reconnected,d),this.off(x.Connected,d),this.off(x.Disconnected,e)};this.once(x.Reconnected,d),this.once(x.Connected,d),this.once(x.Disconnected,e);return}if(this.state===O.Disconnected)return void this.log.warn("skipping incoming track after Room disconnected",this.logContext);if("ended"===a.readyState)return void this.log.info("skipping incoming track as it already ended",this.logContext);let e=function(a){let b=a.split("|");return b.length>1?[b[0],a.substr(b[0].length+1)]:[a,""]}(b.id),f=e[0],g=e[1],h=a.id;if(g&&g.startsWith("TR")&&(h=g),f===this.localParticipant.sid)return void this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);let i=Array.from(this.remoteParticipants.values()).find(a=>a.sid===f);if(!i)return void this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(f),this.logContext);this.options.adaptiveStream&&(d="object"==typeof this.options.adaptiveStream?this.options.adaptiveStream:{});let j=i.addSubscribedMediaTrack(a,h,b,c,d);(null==j?void 0:j.isEncrypted)&&!this.e2eeManager&&this.emit(x.EncryptionError,Error("Encrypted ".concat(j.source," track received from participant ").concat(i.sid,", but room does not have encryption enabled!")))}handleDisconnect(){var a;let b=!(arguments.length>0)||void 0===arguments[0]||arguments[0],c=arguments.length>1?arguments[1]:void 0;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearHandlersAndControllers(),this.state!==O.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(a=>{a.trackPublications.forEach(b=>{a.unpublishTrack(b.trackSid)})}),this.localParticipant.trackPublications.forEach(a=>{var c,d,e;a.track&&this.localParticipant.unpublishTrack(a.track,b),b?(null==(c=a.track)||c.detach(),null==(d=a.track)||d.stop()):null==(e=a.track)||e.stopMonitor()}),this.localParticipant.off(y.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(y.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(y.AttributesChanged,this.onLocalAttributesChanged).off(y.TrackMuted,this.onLocalTrackMuted).off(y.TrackUnmuted,this.onLocalTrackUnmuted).off(y.LocalTrackPublished,this.onLocalTrackPublished).off(y.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(y.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(y.MediaDevicesError,this.onMediaDevicesError).off(y.AudioStreamAcquired,this.startAudio).off(y.ChatMessage,this.onLocalChatMessageSent).off(y.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&&"boolean"==typeof this.options.webAudioMix&&(this.audioContext.close(),this.audioContext=void 0),eC()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),null==(a=navigator.mediaDevices)||a.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(O.Disconnected),this.emit(x.Disconnected,c)}}}handleParticipantDisconnected(a,b){var c;this.remoteParticipants.delete(a),b&&(this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(a),b.trackPublications.forEach(a=>{b.unpublishTrack(a.trackSid,!0)}),this.emit(x.ParticipantDisconnected,b),b.setDisconnected(),null==(c=this.localParticipant)||c.handleParticipantDisconnected(b.identity))}handleIncomingRpcRequest(a,b,c,d,e,f){return c4(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(a,b),1!==f)return void(yield this.engine.publishRpcResponse(a,b,null,fE.builtIn("UNSUPPORTED_VERSION")));let g=this.rpcHandlers.get(c);if(!g)return void(yield this.engine.publishRpcResponse(a,b,null,fE.builtIn("UNSUPPORTED_METHOD")));let h=null,i=null;try{let f=yield g({requestId:b,callerIdentity:a,payload:d,responseTimeout:e});fF(f)>15360?(h=fE.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(c))):i=f}catch(a){a instanceof fE?h=a:(console.warn("Uncaught error returned by RPC handler for ".concat(c,". Returning APPLICATION_ERROR instead."),a),h=fE.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(a,b,i,h)})}selectDefaultDevices(){return c4(this,void 0,void 0,function*(){var a,b,c;let d=fe.getInstance().previousDevices,e=yield fe.getInstance().getDevices(void 0,!1),f=ed();if((null==f?void 0:f.name)==="Chrome"&&"iOS"!==f.os)for(let a of e){let b=d.find(b=>b.deviceId===a.deviceId);b&&""!==b.label&&b.kind===a.kind&&b.label!==a.label&&"default"===this.getActiveDevice(a.kind)&&this.emit(x.ActiveDeviceChanged,a.kind,a.deviceId)}for(let f of["audiooutput","audioinput","videoinput"]){let g="audioinput"===f?ej.Source.Microphone:"videoinput"===f?ej.Source.Camera:ej.Source.Unknown,h=this.localParticipant.getTrackPublication(g);if(h&&(null==(a=h.track)?void 0:a.isUserProvided))continue;let i=e.filter(a=>a.kind===f),j=this.getActiveDevice(f);if(j===(null==(b=d.filter(a=>a.kind===f)[0])?void 0:b.deviceId)&&i.length>0&&(null==(c=i[0])?void 0:c.deviceId)!==j){yield this.switchActiveDevice(f,i[0].deviceId);continue}("audioinput"!==f||eA())&&"videoinput"!==f&&(!(i.length>0)||i.find(a=>a.deviceId===this.getActiveDevice(f))||"audiooutput"===f&&eA()||(yield this.switchActiveDevice(f,i[0].deviceId)))}})}acquireAudioContext(){return c4(this,void 0,void 0,function*(){var a,b;if("boolean"!=typeof this.options.webAudioMix&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:this.audioContext&&"closed"!==this.audioContext.state||(this.audioContext=null!=(a=e6())?a:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(a=>a.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&"suspended"===this.audioContext.state)try{yield Promise.race([this.audioContext.resume(),et(200)])}catch(a){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:a}))}let c=(null==(b=this.audioContext)?void 0:b.state)==="running";c!==this.canPlaybackAudio&&(this.audioEnabled=c,this.emit(x.AudioPlaybackStatusChanged,c))})}createParticipant(a,b){var c;let d;return d=b?gs.fromParticipantInfo(this.engine.client,b,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):new gs(this.engine.client,"",a,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&d.setAudioContext(this.audioContext),(null==(c=this.options.audioOutput)?void 0:c.deviceId)&&d.setAudioOutput(this.options.audioOutput).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),d}getOrCreateParticipant(a,b){if(this.remoteParticipants.has(a)){let c=this.remoteParticipants.get(a);return b&&c.updateInfo(b)&&this.sidToIdentity.set(b.sid,b.identity),c}let c=this.createParticipant(a,b);return this.remoteParticipants.set(a,c),this.sidToIdentity.set(b.sid,b.identity),this.emitWhenConnected(x.ParticipantConnected,c),c.on(y.TrackPublished,a=>{this.emitWhenConnected(x.TrackPublished,a,c)}).on(y.TrackSubscribed,(a,b)=>{a.kind===ej.Kind.Audio?(a.on(A.AudioPlaybackStarted,this.handleAudioPlaybackStarted),a.on(A.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):a.kind===ej.Kind.Video&&(a.on(A.VideoPlaybackFailed,this.handleVideoPlaybackFailed),a.on(A.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(x.TrackSubscribed,a,b,c)}).on(y.TrackUnpublished,a=>{this.emit(x.TrackUnpublished,a,c)}).on(y.TrackUnsubscribed,(a,b)=>{this.emit(x.TrackUnsubscribed,a,b,c)}).on(y.TrackMuted,a=>{this.emitWhenConnected(x.TrackMuted,a,c)}).on(y.TrackUnmuted,a=>{this.emitWhenConnected(x.TrackUnmuted,a,c)}).on(y.ParticipantMetadataChanged,a=>{this.emitWhenConnected(x.ParticipantMetadataChanged,a,c)}).on(y.ParticipantNameChanged,a=>{this.emitWhenConnected(x.ParticipantNameChanged,a,c)}).on(y.AttributesChanged,a=>{this.emitWhenConnected(x.ParticipantAttributesChanged,a,c)}).on(y.ConnectionQualityChanged,a=>{this.emitWhenConnected(x.ConnectionQualityChanged,a,c)}).on(y.ParticipantPermissionsChanged,a=>{this.emitWhenConnected(x.ParticipantPermissionsChanged,a,c)}).on(y.TrackSubscriptionStatusChanged,(a,b)=>{this.emitWhenConnected(x.TrackSubscriptionStatusChanged,a,b,c)}).on(y.TrackSubscriptionFailed,(a,b)=>{this.emit(x.TrackSubscriptionFailed,a,c,b)}).on(y.TrackSubscriptionPermissionChanged,(a,b)=>{this.emitWhenConnected(x.TrackSubscriptionPermissionChanged,a,b,c)}).on(y.Active,()=>{this.emitWhenConnected(x.ParticipantActive,c),c.kind===bF.AGENT&&this.localParticipant.setActiveAgent(c)}),b&&c.updateInfo(b),c}sendSyncState(){let a=Array.from(this.remoteParticipants.values()).reduce((a,b)=>(a.push(...b.getTrackPublications()),a),[]),b=this.localParticipant.getTrackPublications();this.engine.sendSyncState(a,b)}updateSubscriptions(){for(let b of this.remoteParticipants.values())for(let c of b.videoTrackPublications.values()){var a;c.isSubscribed&&(a=c)&&!a.isLocal&&c.emitTrackUpdate()}}getRemoteParticipantBySid(a){let b=this.sidToIdentity.get(a);if(b)return this.remoteParticipants.get(b)}registerConnectionReconcile(){this.clearConnectionReconcile();let a=0;this.connectionReconcileInterval=eh.setInterval(()=>{this.engine&&!this.engine.isClosed&&this.engine.verifyTransport()?a=0:(a++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:a,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),a>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,bw.STATE_MISMATCH)))},4e3)}clearConnectionReconcile(){this.connectionReconcileInterval&&eh.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(a){return a!==this.state&&(this.state=a,this.emit(x.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(a=>{let[b,c]=a;this.emit(b,...c)}),this.bufferedEvents=[]}emitWhenConnected(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];if(this.state===O.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([a,c]);else if(this.state===O.Connected)return this.emit(a,...c);return!1}simulateParticipants(a){return c4(this,void 0,void 0,function*(){var b,c;let d=Object.assign({audio:!0,video:!0,useRealTracks:!1},a.publish),e=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},a.participants);if(this.handleDisconnect(),this.roomInfo=new bA({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:ay.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new bD({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(x.SignalConnected),this.emit(x.Connected),this.setAndEmitConnectionState(O.Connected),d.video){let a=new gm(ej.Kind.Video,new bJ({source:bs.CAMERA,sid:Math.floor(1e4*Math.random()).toString(),type:br.AUDIO,name:"video-dummy"}),new fZ(d.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:eP(160*(null!=(b=e.aspectRatios[0])?b:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(y.LocalTrackPublished,a)}if(d.audio){let a=new gm(ej.Kind.Audio,new bJ({source:bs.MICROPHONE,sid:Math.floor(1e4*Math.random()).toString(),type:br.AUDIO}),new fN(d.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:eQ(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(y.LocalTrackPublished,a)}for(let a=0;a<e.count-1;a+=1){let b=new bD({sid:Math.floor(1e4*Math.random()).toString(),identity:"simulated-".concat(a),state:bE.ACTIVE,tracks:[],joinedAt:ay.parse(Date.now())}),d=this.getOrCreateParticipant(b.identity,b);if(e.video){let f=eP(160*(null!=(c=e.aspectRatios[a%e.aspectRatios.length])?c:1),160,!1,!0),g=new bJ({source:bs.CAMERA,sid:Math.floor(1e4*Math.random()).toString(),type:br.AUDIO});d.addSubscribedMediaTrack(f,g.sid,new MediaStream([f]),new RTCRtpReceiver),b.tracks=[...b.tracks,g]}if(e.audio){let a=eQ(),c=new bJ({source:bs.MICROPHONE,sid:Math.floor(1e4*Math.random()).toString(),type:br.AUDIO});d.addSubscribedMediaTrack(a,c.sid,new MediaStream([a]),new RTCRtpReceiver),b.tracks=[...b.tracks,c]}d.updateInfo(b)}})}emit(a){for(var b=arguments.length,c=Array(b>1?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];if(a!==x.ActiveSpeakersChanged&&a!==x.TranscriptionReceived){let b=(function a(b){return b.map(b=>{if(b)return Array.isArray(b)?a(b):"object"==typeof b?"logContext"in b?b.logContext:void 0:b})})(c).filter(a=>void 0!==a);this.log.debug("room event ".concat(a),Object.assign(Object.assign({},this.logContext),{event:a,args:b}))}return super.emit(a,...c)}}gt.cleanupRegistry="undefined"!=typeof FinalizationRegistry&&new FinalizationRegistry(a=>{a()}),!function(a){a[a.IDLE=0]="IDLE",a[a.RUNNING=1]="RUNNING",a[a.SKIPPED=2]="SKIPPED",a[a.SUCCESS=3]="SUCCESS",a[a.FAILED=4]="FAILED"}(P||(P={}));class gu extends c7.EventEmitter{constructor(a,b){let c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super(),this.status=P.IDLE,this.logs=[],this.options={},this.url=a,this.token=b,this.name=this.constructor.name,this.room=new gt(c.roomOptions),this.connectOptions=c.connectOptions,this.options=c}run(a){return c4(this,void 0,void 0,function*(){if(this.status!==P.IDLE)throw Error("check is running already");this.setStatus(P.RUNNING);try{yield this.perform()}catch(a){a instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(a.message):this.appendError(a.message))}return yield this.disconnect(),yield new Promise(a=>setTimeout(a,500)),this.status!==P.SKIPPED&&this.setStatus(this.isSuccess()?P.SUCCESS:P.FAILED),a&&a(),this.getInfo()})}isSuccess(){return!this.logs.some(a=>"error"===a.level)}connect(a){return c4(this,void 0,void 0,function*(){return this.room.state===O.Connected||(a||(a=this.url),yield this.room.connect(a,this.token,this.connectOptions)),this.room})}disconnect(){return c4(this,void 0,void 0,function*(){this.room&&this.room.state!==O.Disconnected&&(yield this.room.disconnect(),yield new Promise(a=>setTimeout(a,500)))})}skip(){this.setStatus(P.SKIPPED)}switchProtocol(a){return c4(this,void 0,void 0,function*(){let b=!1,c=!1;if(this.room.on(x.Reconnecting,()=>{b=!0}),this.room.once(x.Reconnected,()=>{c=!0}),this.room.simulateScenario("force-".concat(a)),yield new Promise(a=>setTimeout(a,1e3)),!b)return;let d=Date.now()+1e4;for(;Date.now()<d;){if(c)return;yield et(100)}throw Error("Could not reconnect using ".concat(a," protocol after 10 seconds"))})}appendMessage(a){this.logs.push({level:"info",message:a}),this.emit("update",this.getInfo())}appendWarning(a){this.logs.push({level:"warning",message:a}),this.emit("update",this.getInfo())}appendError(a){this.logs.push({level:"error",message:a}),this.emit("update",this.getInfo())}setStatus(a){this.status=a,this.emit("update",this.getInfo())}get engine(){var a;return null==(a=this.room)?void 0:a.engine}getInfo(){return{logs:this.logs,name:this.name,status:this.status,description:this.description}}}c7.EventEmitter;let gv=require("events");function gw(){}function gx(){gx.init.call(this)}function gy(a){return void 0===a._maxListeners?gx.defaultMaxListeners:a._maxListeners}function gz(a,b,c,d){var e,f,g;if("function"!=typeof c)throw TypeError('"listener" argument must be a function');if((f=a._events)?(f.newListener&&(a.emit("newListener",b,c.listener?c.listener:c),f=a._events),g=f[b]):(f=a._events=new gw,a._eventsCount=0),g){if("function"==typeof g?g=f[b]=d?[c,g]:[g,c]:d?g.unshift(c):g.push(c),!g.warned&&(e=gy(a))&&e>0&&g.length>e){g.warned=!0;var h=Error("Possible EventEmitter memory leak detected. "+g.length+" "+b+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=a,h.type=b,h.count=g.length,"function"==typeof console.warn?console.warn(h):console.log(h)}}else g=f[b]=c,++a._eventsCount;return a}function gA(a,b,c){var d=!1;function e(){a.removeListener(b,e),d||(d=!0,c.apply(a,arguments))}return e.listener=c,e}function gB(a){var b=this._events;if(b){var c=b[a];if("function"==typeof c)return 1;if(c)return c.length}return 0}function gC(a,b){for(var c=Array(b);b--;)c[b]=a[b];return c}gw.prototype=Object.create(null),gx.EventEmitter=gx,gx.usingDomains=!1,gx.prototype.domain=void 0,gx.prototype._events=void 0,gx.prototype._maxListeners=void 0,gx.defaultMaxListeners=10,gx.init=function(){this.domain=null,gx.usingDomains&&(void 0).active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new gw,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},gx.prototype.setMaxListeners=function(a){if("number"!=typeof a||a<0||isNaN(a))throw TypeError('"n" argument must be a positive number');return this._maxListeners=a,this},gx.prototype.getMaxListeners=function(){return gy(this)},gx.prototype.emit=function(a){var b,c,d,e,f,g,h,i="error"===a;if(g=this._events)i=i&&null==g.error;else if(!i)return!1;if(h=this.domain,i){if(b=arguments[1],!h){if(b instanceof Error)throw b;var j=Error('Uncaught, unspecified "error" event. ('+b+")");throw j.context=b,j}return b||(b=Error('Uncaught, unspecified "error" event')),b.domainEmitter=this,b.domain=h,b.domainThrown=!1,h.emit("error",b),!1}if(!(c=g[a]))return!1;var k="function"==typeof c;switch(d=arguments.length){case 1:!function(a,b,c){if(b)a.call(c);else for(var d=a.length,e=gC(a,d),f=0;f<d;++f)e[f].call(c)}(c,k,this);break;case 2:!function(a,b,c,d){if(b)a.call(c,d);else for(var e=a.length,f=gC(a,e),g=0;g<e;++g)f[g].call(c,d)}(c,k,this,arguments[1]);break;case 3:!function(a,b,c,d,e){if(b)a.call(c,d,e);else for(var f=a.length,g=gC(a,f),h=0;h<f;++h)g[h].call(c,d,e)}(c,k,this,arguments[1],arguments[2]);break;case 4:!function(a,b,c,d,e,f){if(b)a.call(c,d,e,f);else for(var g=a.length,h=gC(a,g),i=0;i<g;++i)h[i].call(c,d,e,f)}(c,k,this,arguments[1],arguments[2],arguments[3]);break;default:for(e=Array(d-1),f=1;f<d;f++)e[f-1]=arguments[f];!function(a,b,c,d){if(b)a.apply(c,d);else for(var e=a.length,f=gC(a,e),g=0;g<e;++g)f[g].apply(c,d)}(c,k,this,e)}return!0},gx.prototype.addListener=function(a,b){return gz(this,a,b,!1)},gx.prototype.on=gx.prototype.addListener,gx.prototype.prependListener=function(a,b){return gz(this,a,b,!0)},gx.prototype.once=function(a,b){if("function"!=typeof b)throw TypeError('"listener" argument must be a function');return this.on(a,gA(this,a,b)),this},gx.prototype.prependOnceListener=function(a,b){if("function"!=typeof b)throw TypeError('"listener" argument must be a function');return this.prependListener(a,gA(this,a,b)),this},gx.prototype.removeListener=function(a,b){var c,d,e,f,g;if("function"!=typeof b)throw TypeError('"listener" argument must be a function');if(!(d=this._events)||!(c=d[a]))return this;if(c===b||c.listener&&c.listener===b)0==--this._eventsCount?this._events=new gw:(delete d[a],d.removeListener&&this.emit("removeListener",a,c.listener||b));else if("function"!=typeof c){for(e=-1,f=c.length;f-- >0;)if(c[f]===b||c[f].listener&&c[f].listener===b){g=c[f].listener,e=f;break}if(e<0)return this;if(1===c.length){if(c[0]=void 0,0==--this._eventsCount)return this._events=new gw,this;delete d[a]}else{for(var h=c,i=e,j=i,k=j+1,l=h.length;k<l;j+=1,k+=1)h[j]=h[k];h.pop()}d.removeListener&&this.emit("removeListener",a,g||b)}return this},gx.prototype.off=function(a,b){return this.removeListener(a,b)},gx.prototype.removeAllListeners=function(a){var b,c;if(!(c=this._events))return this;if(!c.removeListener)return 0==arguments.length?(this._events=new gw,this._eventsCount=0):c[a]&&(0==--this._eventsCount?this._events=new gw:delete c[a]),this;if(0==arguments.length){for(var d,e=Object.keys(c),f=0;f<e.length;++f)"removeListener"!==(d=e[f])&&this.removeAllListeners(d);return this.removeAllListeners("removeListener"),this._events=new gw,this._eventsCount=0,this}if("function"==typeof(b=c[a]))this.removeListener(a,b);else if(b)do this.removeListener(a,b[b.length-1]);while(b[0]);return this},gx.prototype.listeners=function(a){var b,c=this._events;return c&&(b=c[a])?"function"==typeof b?[b.listener||b]:function(a){for(var b=Array(a.length),c=0;c<b.length;++c)b[c]=a[c].listener||a[c];return b}(b):[]},gx.listenerCount=function(a,b){return"function"==typeof a.listenerCount?a.listenerCount(b):gB.call(a,b)},gx.prototype.listenerCount=gB,gx.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};class gD extends gx{}!function(a){a.Issue="issue",a.NetworkScoresUpdated="network-scores-updated",a.StatsParsingFinished="stats-parsing-finished"}(Q||(Q={})),function(a){a.Network="network",a.CPU="cpu",a.Server="server",a.Stream="stream"}(R||(R={})),function(a){a.OutboundNetworkQuality="outbound-network-quality",a.InboundNetworkQuality="inbound-network-quality",a.OutboundNetworkMediaLatency="outbound-network-media-latency",a.InboundNetworkMediaLatency="inbound-network-media-latency",a.NetworkMediaSyncFailure="network-media-sync-failure",a.OutboundNetworkThroughput="outbound-network-throughput",a.InboundNetworkThroughput="inbound-network-throughput",a.EncoderCPUThrottling="encoder-cpu-throttling",a.DecoderCPUThrottling="decoder-cpu-throttling",a.ServerIssue="server-issue",a.UnknownVideoDecoderIssue="unknown-video-decoder",a.LowInboundMOS="low-inbound-mean-opinion-score",a.LowOutboundMOS="low-outbound-mean-opinion-score",a.FrozenVideoTrack="frozen-video-track",a.MissingVideoStreamData="missing-video-stream-data",a.MissingAudioStreamData="missing-audio-stream-data"}(S||(S={})),function(a){a[a.BAD=2.1]="BAD",a[a.POOR=2.6]="POOR",a[a.FAIR=3.1]="FAIR",a[a.GOOD=3.8]="GOOD",a[a.EXCELLENT=4.3]="EXCELLENT"}(T||(T={}));class gE extends gx{static STATS_REPORT_READY_EVENT="stats-report-ready";static STATS_REPORTS_PARSED="stats-reports-parsed";isStopped=!1;reportTimer;getStatsInterval;compositeStatsParser;constructor(a){super(),this.compositeStatsParser=a.compositeStatsParser,this.getStatsInterval=a.getStatsInterval??1e4}get isRunning(){return!!this.reportTimer&&!this.isStopped}startReporting(){if(this.reportTimer)return;let a=()=>setTimeout(()=>{this.isStopped?this.reportTimer=void 0:this.parseReports().finally(()=>{this.reportTimer=a()})},this.getStatsInterval);this.isStopped=!1,this.reportTimer=a()}stopReporting(){this.isStopped=!0,this.reportTimer&&(clearTimeout(this.reportTimer),this.reportTimer=void 0)}async parseReports(){let a=Date.now(),b=await this.compositeStatsParser.parse(),c=Date.now()-a;this.emit(gE.STATS_REPORTS_PARSED,{timeTaken:c,reportItems:b}),b.forEach(a=>{this.emit(gE.STATS_REPORT_READY_EVENT,a)})}}let gF=(()=>{let a=new Map;return b=>{let{taskId:c,delayMs:d,maxJitterMs:e,callback:f}=b,g=Math.ceil(Math.random()*(e||0)),h=a.get(c);h&&clearTimeout(h);let i=setTimeout(()=>{f(),a.delete(c)},d+g);a.set(c,i)}})();class gG{#a={};calculate(a){let{connection:{id:b}}=a,{mos:c,stats:d}=this.calculateOutboundScore(a)||{},{mos:e,stats:f}=this.calculateInboundScore(a)||{};return this.#a[b]=a,gF({taskId:b,delayMs:35e3,callback:()=>delete this.#a[b]}),{outbound:c,inbound:e,connectionId:b,statsSamples:{inboundStatsSample:f,outboundStatsSample:d}}}calculateOutboundScore(a){let b=[...a.remote?.audio.inbound||[],...a.remote?.video.inbound||[]];if(!b.length)return;let c=this.#a[a.connection.id];if(!c)return;let d=[...c.remote?.audio.inbound||[],...c.remote?.video.inbound||[]],{packetsSent:e}=a.connection,f=c.connection.packetsSent,g=b.reduce((a,b)=>{let c=d.find(a=>a.ssrc===b.ssrc);return{sumJitter:a.sumJitter+b.jitter,packetsLost:a.packetsLost+b.packetsLost,lastPacketsLost:a.lastPacketsLost+(c?.packetsLost||0)}},{sumJitter:0,packetsLost:0,lastPacketsLost:0}),h=1e3*a.connection.currentRoundTripTime||0,{sumJitter:i}=g,j=i/b.length,k=e-f,l=g.packetsLost-g.lastPacketsLost,m=k&&l?Math.round(100*l/(k+l)):0;return{mos:this.calculateMOS({avgJitter:j,rtt:h,packetsLoss:m}),stats:{avgJitter:j,rtt:h,packetsLoss:m}}}calculateInboundScore(a){let b=[...a.audio?.inbound,...a.video?.inbound];if(!b.length)return;let c=this.#a[a.connection.id];if(!c)return;let d=[...c.video?.inbound,...c.audio?.inbound],{packetsReceived:e}=a.connection,f=c.connection.packetsReceived,g=b.reduce((a,b)=>{let c=d.find(a=>a.ssrc===b.ssrc);return{sumJitter:a.sumJitter+b.jitter,packetsLost:a.packetsLost+b.packetsLost,lastPacketsLost:a.lastPacketsLost+(c?.packetsLost||0)}},{sumJitter:0,packetsLost:0,lastPacketsLost:0}),h=1e3*a.connection.currentRoundTripTime||0,{sumJitter:i}=g,j=i/b.length,k=e-f,l=g.packetsLost-g.lastPacketsLost,m=k&&l?Math.round(100*l/(k+l)):0;return{mos:this.calculateMOS({avgJitter:j,rtt:h,packetsLoss:m}),stats:{avgJitter:j,rtt:h,packetsLoss:m}}}calculateMOS({avgJitter:a,rtt:b,packetsLoss:c}){let d=b+2*a+10,e=d<160?93.2-d/40:93.2-d/120-10;return 1+.035*(e-=2.5*c)+7e-6*e*(e-60)*(100-e)}}class gH{#b=new Map;#c;#d;constructor(a={}){this.#c=a.statsCleanupTtlMs??35e3,this.#d=a.maxParsedStatsStorageSize??5}detect(a,b){let c={...a,networkScores:{...b,statsSamples:b?.statsSamples||{}}},d=this.performDetection(c);return this.setLastProcessedStats(a.connection.id,c),this.performPrevStatsCleanup({connectionId:a.connection.id}),d}performPrevStatsCleanup(a){let{connectionId:b,cleanupCallback:c}=a;this.#b.has(b)&&gF({taskId:b,delayMs:this.#c,callback:()=>{this.deleteLastProcessedStats(b),"function"==typeof c&&c()}})}setLastProcessedStats(a,b){if(!a||b.connection.id!==a)return;let c=this.#b.get(a)??[];c.push(b),c.length>this.#d&&c.shift(),this.#b.set(a,c)}getLastProcessedStats(a){let b=this.#b.get(a);return b?.[b.length-1]}getAllLastProcessedStats(a){return this.#b.get(a)??[]}deleteLastProcessedStats(a){this.#b.delete(a)}}class gI extends gH{#e;constructor(a={}){super(a),this.#e=a.availableOutgoingBitrateThreshold??1e5}performDetection(a){let b=[],{availableOutgoingBitrate:c}=a.connection;if(void 0===c)return b;let d=a.audio.outbound.reduce((a,b)=>a+b.targetBitrate,0),e=a.video.outbound.reduce((a,b)=>a+b.bitrate,0);return(d||e)&&(d>c||e>0&&c<this.#e)&&b.push({statsSample:{availableOutgoingBitrate:c,videoStreamsTotalBitrate:e,audioStreamsTotalTargetBitrate:d},type:R.Network,reason:S.OutboundNetworkThroughput}),b}}class gJ extends gH{#f;#g;#h;#i;constructor(a={}){super(),this.#f=a.highPacketLossThresholdPct??5,this.#g=a.highJitterThreshold??200,this.#h=a.highJitterBufferDelayThresholdMs??500,this.#i=a.highRttThresholdMs??250}performDetection(a){return this.processData(a)}processData(a){let b=[],c=[...a.audio?.inbound,...a.video?.inbound];if(!c.length)return b;let d=this.getLastProcessedStats(a.connection.id);if(!d)return b;let e=[...d.video?.inbound,...d.audio?.inbound],{packetsReceived:f}=a.connection,g=d.connection.packetsReceived,h=c.reduce((a,b)=>{let c=e.find(a=>a.ssrc===b.ssrc),d=c?.jitterBufferDelay||0,f=c?.jitterBufferEmittedCount||0,g=b.jitterBufferDelay-d,h=b.jitterBufferEmittedCount-f;return{sumJitter:a.sumJitter+b.jitter,sumJitterBufferDelayMs:a.sumJitterBufferDelayMs+(g&&h?1e3*g/h:0),packetsLost:a.packetsLost+b.packetsLost,lastPacketsLost:a.lastPacketsLost+(c?.packetsLost||0)}},{sumJitter:0,sumJitterBufferDelayMs:0,packetsLost:0,lastPacketsLost:0}),i=1e3*a.connection.currentRoundTripTime||0,{sumJitter:j,sumJitterBufferDelayMs:k}=h,l=j/c.length,m=k/c.length,n=f-g,o=h.packetsLost-h.lastPacketsLost,p=n&&o?Math.round(100*o/(n+o)):0,q=p>this.#f,r=l>=this.#g,s=i>=this.#i,t=m>this.#h,u={rtt:i,packetLossPct:p,avgJitter:l,avgJitterBufferDelay:m};return(r||q)&&b.push({statsSample:u,type:R.Network,reason:S.InboundNetworkQuality,iceCandidate:a.connection.local.id}),!s||r||q||b.push({statsSample:u,type:R.Server,reason:S.ServerIssue,iceCandidate:a.connection.remote.id}),q&&r&&b.push({statsSample:u,type:R.Network,reason:S.InboundNetworkMediaLatency,iceCandidate:a.connection.local.id}),r&&t&&b.push({statsSample:u,type:R.Network,reason:S.NetworkMediaSyncFailure,iceCandidate:a.connection.local.id}),b}}class gK extends gH{#j;constructor(a={}){super(),this.#j=a.correctedSamplesThresholdPct??5}performDetection(a){return this.processData(a)}processData(a){let b=a.audio.inbound,c=[],d=this.getLastProcessedStats(a.connection.id)?.audio.inbound;return d&&b.forEach(a=>{let b=d.find(b=>b.ssrc===a.ssrc);if(!b)return;let e=a.track.insertedSamplesForDeceleration+a.track.removedSamplesForAcceleration,f=b.track.insertedSamplesForDeceleration+b.track.removedSamplesForAcceleration;if(e===f)return;let g=Math.round(100*(e-f)/(a.track.totalSamplesReceived-b.track.totalSamplesReceived));g>this.#j&&c.push({statsSample:{correctedSamplesPct:g},type:R.Network,reason:S.NetworkMediaSyncFailure,ssrc:a.ssrc})}),c}}class gL extends gH{#f;#g;constructor(a={}){super(),this.#f=a.highPacketLossThresholdPct??5,this.#g=a.highJitterThreshold??200}performDetection(a){return this.processData(a)}processData(a){let b=[],c=[...a.remote?.audio.inbound||[],...a.remote?.video.inbound||[]];if(!c.length)return b;let d=this.getLastProcessedStats(a.connection.id);if(!d)return b;let e=[...d.remote?.audio.inbound||[],...d.remote?.video.inbound||[]],{packetsSent:f}=a.connection,g=d.connection.packetsSent,h=c.reduce((a,b)=>{let c=e.find(a=>a.ssrc===b.ssrc);return{sumJitter:a.sumJitter+b.jitter,packetsLost:a.packetsLost+b.packetsLost,lastPacketsLost:a.lastPacketsLost+(c?.packetsLost||0)}},{sumJitter:0,packetsLost:0,lastPacketsLost:0}),i=1e3*a.connection.currentRoundTripTime||0,{sumJitter:j}=h,k=j/c.length,l=f-g,m=h.packetsLost-h.lastPacketsLost,n=l&&m?Math.round(100*m/(l+m)):0,o=n>this.#f,p=k>=this.#g,q={rtt:i,avgJitter:k,packetLossPct:n};return o&&p&&b.push({statsSample:q,type:R.Network,reason:S.OutboundNetworkMediaLatency,iceCandidate:a.connection.local.id}),(!o&&p||p||o)&&b.push({statsSample:q,type:R.Network,reason:S.OutboundNetworkQuality,iceCandidate:a.connection.local.id}),b}}class gM extends gH{performDetection(a){return this.processData(a)}processData(a){let b=a.video.outbound.filter(a=>"none"!==a.qualityLimitationReason),c=[],d=this.getLastProcessedStats(a.connection.id)?.video.outbound;return d&&b.forEach(a=>{let b=d.find(b=>b.ssrc===a.ssrc);if(!b)return;let e={qualityLimitationReason:a.qualityLimitationReason};a.framesSent>b.framesSent||("cpu"===a.qualityLimitationReason&&c.push({statsSample:e,type:R.CPU,reason:S.EncoderCPUThrottling,ssrc:a.ssrc}),"bandwidth"===a.qualityLimitationReason&&c.push({statsSample:e,type:R.Network,reason:S.OutboundNetworkThroughput,ssrc:a.ssrc}))}),c}}class gN extends gH{UNKNOWN_DECODER="unknown";#k={};performDetection(a){return this.processData(a)}performPrevStatsCleanup(a){let{connectionId:b,cleanupCallback:c}=a;super.performPrevStatsCleanup({...a,cleanupCallback:()=>{delete this.#k[b],"function"==typeof c&&c()}})}processData(a){let b=[],{id:c}=a.connection,d=this.getLastProcessedStats(c)?.video.inbound;return a.video.inbound.forEach(a=>{let{decoderImplementation:e,ssrc:f}=a;if(d?.find(a=>a.ssrc===f))if(e===this.UNKNOWN_DECODER){if(!this.hadLastDecoderWithIssue(c,f)){this.setLastDecoderWithIssue(c,f,this.UNKNOWN_DECODER);let d={mimeType:a.mimeType,decoderImplementation:e};b.push({ssrc:f,statsSample:d,type:R.Stream,reason:S.UnknownVideoDecoderIssue,trackIdentifier:a.track.trackIdentifier})}}else this.setLastDecoderWithIssue(c,f,void 0)}),b}setLastDecoderWithIssue(a,b,c){let d=this.#k[a]??{};void 0===c?delete d[b]:d[b]=c,this.#k[a]=d}hadLastDecoderWithIssue(a,b){let c=this.#k[a];return(c&&c[b])===this.UNKNOWN_DECODER}}let gO=a=>a.reduce((a,b)=>a+b,0)/a.length,gP=(a,b,c=30)=>{let d=[];for(let c=1;c<b.length-1;c+=1){let e=b[c]?.video?.inbound.find(b=>b.ssrc===a);if(!e)continue;let f=b[c-1]?.video?.inbound?.find(b=>b.ssrc===a);if(!e||!f)continue;let g=e.timestamp-f.timestamp,h=e.framesDecoded-f.framesDecoded;if(h>0){let a=g/h;d.push(a)}}return!(d.length<=1)&&(a=>Math.sqrt(((a,b)=>b.reduce((b,c)=>b+(c-a)**2,0)/b.length)(gO(a),a)))(d)>c},gQ=(a,b)=>{for(let c=1;c<b.length;c+=1){let d=b[c].video.inbound.find(b=>b.ssrc===a);if(!d)continue;let e=b[c-1].video.inbound.find(b=>b.ssrc===a),f=d.frameWidth!==e?.frameWidth,g=d.frameHeight!==e?.frameHeight;if(f||g)return!0}return!1};class gR extends gH{#l;#m;#n;constructor(a={}){super(),this.#l=a.avgFreezeDurationThresholdMs??1e3,this.#m=a.frozenDurationThresholdPct??30,this.#n=a.minMosQuality??T.BAD}performDetection(a){let b=a.networkScores.inbound;return void 0!==b&&b<=this.#n?[]:this.processData(a)}processData(a){let b=[],c=this.getAllLastProcessedStats(a.connection.id);if(0===c.length)return[];let d=a.video.inbound.map(b=>{let d=c[c.length-1].video.inbound.find(a=>a.ssrc===b.ssrc);if(!d||gQ(b.ssrc,[c[c.length-1],a])||gP(b.ssrc,c))return;let e=b.freezeCount-(d.freezeCount??0),f=1e3*(b.totalFreezesDuration-(d.totalFreezesDuration??0)),g=e>0?f/e:0,h=f/(b.timestamp-d.timestamp)*100;return h>this.#m||g>this.#l?{ssrc:b.ssrc,avgFreezeDurationMs:g,frozenDurationPct:h}:void 0}).filter(a=>void 0!==a);return d.length>0&&(b.push({type:R.Stream,reason:S.FrozenVideoTrack,statsSample:{ssrcs:d.map(a=>a.ssrc)}}),this.deleteLastProcessedStats(a.connection.id)),b}}class gS extends gH{#o;#p;#n;constructor(a={}){super(a),this.#o=a.volatilityThreshold??8,this.#p=a.affectedStreamsPercentThreshold??30,this.#n=a.minMosQuality??T.BAD}performDetection(a){return[...this.getAllLastProcessedStats(a.connection.id),a].find(a=>void 0!==a.networkScores.inbound&&a.networkScores.inbound<=this.#n)?[]:this.processData(a)}processData(a){let b=[],c=[...this.getAllLastProcessedStats(a.connection.id),a],d=a.video.inbound.map(a=>{if(c.length<5||gQ(a.ssrc,c))return;let b=[];for(let d=0;d<c.length-1;d+=1){let e=c[d].video.inbound.find(b=>b.ssrc===a.ssrc);void 0!==e?.framesPerSecond&&b.push(e.framesPerSecond)}if(b.length<5||gP(a.ssrc,c))return;let d=(a=>{if(0===a.length)throw Error("Cannot calculate volatility for empty array");let b=gO(a);return a.reduce((a,c)=>a+Math.abs(c-b),0)/a.length*100/b})(b);return d>this.#o?{ssrc:a.ssrc,allFps:b,volatility:d}:void 0}).filter(a=>!!a);if(0===d.length)return b;let e=d.length/(a.video.inbound.length/100);return e>this.#p&&(b.push({type:R.CPU,reason:S.DecoderCPUThrottling,statsSample:{affectedStreamsPercent:e,throtthedStreams:d}}),this.deleteLastProcessedStats(a.connection.id)),b}}let gT=a=>"closed"===a.iceConnectionState||"closed"===a.connectionState,gU=(a,b,c)=>8*((a,b,c)=>{if(!b)return 0;let d=a[c],e=b[c];if(null==d||null==e)return 0;let f=Math.floor(a.timestamp)-Math.floor(b.timestamp);return 0===f?0:(Number(d)-Number(e))/f*1e3})(a,b,c);class gV{connections=[];statsParser;constructor(a){this.statsParser=a.statsParser}listConnections(){return[...this.connections]}addPeerConnection(a){this.connections.push({id:a.id??String(Date.now()+Math.random().toString(32)),pc:a.pc})}removePeerConnection(a){let b=this.connections.findIndex(({pc:b})=>b===a.pc);b>=0&&this.removeConnectionsByIndexes([b])}async parse(){let a=[],b=this.connections.map(async(b,c)=>{if(!gT(b.pc))return this.statsParser.parse(b);a.unshift(c)});return a.length&&this.removeConnectionsByIndexes(a),(await Promise.all(b)).filter(a=>void 0!==a)}removeConnectionsByIndexes(a){a.forEach(a=>{this.connections.splice(a,1)})}}class gW{prevStats=new Map;allowedReportTypes=new Set(["candidate-pair","inbound-rtp","outbound-rtp","remote-outbound-rtp","remote-inbound-rtp","track","transport"]);ignoreSSRCList;logger;constructor(a){this.ignoreSSRCList=a.ignoreSSRCList??[],this.logger=a.logger}get previouslyParsedStatsConnectionsIds(){return[...this.prevStats.keys()]}async parse(a){if(!gT(a.pc))return this.getConnectionStats(a);this.logger.debug("Skip stats parsing. Connection is closed.",{connection:a})}async getConnectionStats(a){let{pc:b,id:c}=a;try{let d=Date.now(),e=b.getReceivers().filter(a=>a.track?.enabled),f=b.getSenders().filter(a=>a.track?.enabled),g=await Promise.all(e.map(a=>a.getStats())),h=await Promise.all(f.map(a=>a.getStats()));return{id:c,stats:this.mapReportsStats([...g,...h],a),timeTaken:Date.now()-d}}catch(a){return void this.logger.error("Failed to get stats for PC",{id:c,pc:b,error:a})}}mapReportsStats(a,b){let c={audio:{inbound:[],outbound:[]},video:{inbound:[],outbound:[]},connection:{},remote:{video:{inbound:[],outbound:[]},audio:{inbound:[],outbound:[]}}};a.forEach(a=>{a.forEach(b=>{this.allowedReportTypes.has(b.type)&&this.updateMappedStatsWithReportItemData(b,c,a)})});let{id:d}=b,e=this.prevStats.get(d);return e&&this.propagateStatsWithRateValues(c,e.stats),this.prevStats.set(d,{stats:c,ts:Date.now()}),gF({taskId:d,delayMs:35e3,callback:()=>this.prevStats.delete(d)}),c}updateMappedStatsWithReportItemData(a,b,c){let d=a.type;if("candidate-pair"===d&&"succeeded"===a.state&&a.nominated)return void(b.connection=this.prepareConnectionStats(a,c));let e=this.getMediaType(a);if(!e)return;let f=a.ssrc;if(!f||!this.ignoreSSRCList.includes(f))if("outbound-rtp"!==d)if("inbound-rtp"!==d)"remote-outbound-rtp"!==d?"remote-inbound-rtp"===d&&(this.mapConnectionStatsIfNecessary(b,a,c),b.remote[e].inbound.push({...a})):b.remote[e].outbound.push({...a});else{let d=c.get(a.trackId)||c.get(a.mediaSourceId)||{};this.mapConnectionStatsIfNecessary(b,a,c);let f={...a,track:{...d}};b[e].inbound.push(f)}else{let d=c.get(a.trackId)||c.get(a.mediaSourceId)||{},f={...a,track:{...d}};b[e].outbound.push(f)}}getMediaType(a){let b=a.mediaType||a.kind;if(!["audio","video"].includes(b)){let{id:b}=a;if(!b)return;return String(b).includes("Video")?"video":String(b).includes("Audio")?"audio":void 0}return b}propagateStatsWithRateValues(a,b){a.audio.inbound.forEach(a=>{let c=b.audio.inbound.find(({id:b})=>b===a.id);a.bitrate=gU(a,c,"bytesReceived"),a.packetRate=gU(a,c,"packetsReceived")}),a.audio.outbound.forEach(a=>{let c=b.audio.outbound.find(({id:b})=>b===a.id);a.bitrate=gU(a,c,"bytesSent"),a.packetRate=gU(a,c,"packetsSent")}),a.video.inbound.forEach(a=>{let c=b.video.inbound.find(({id:b})=>b===a.id);a.bitrate=gU(a,c,"bytesReceived"),a.packetRate=gU(a,c,"packetsReceived")}),a.video.outbound.forEach(a=>{let c=b.video.outbound.find(({id:b})=>b===a.id);a.bitrate=gU(a,c,"bytesSent"),a.packetRate=gU(a,c,"packetsSent")})}mapConnectionStatsIfNecessary(a,b,c){if(a.connection.id||!b.transportId)return;let d=c.get(b.transportId);if(d&&d.selectedCandidatePairId){let b=c.get(d.selectedCandidatePairId);a.connection=this.prepareConnectionStats(b,c)}}prepareConnectionStats(a,b){if(!a||!b)return{};let c={...a};if(c.remoteCandidateId){let a=b.get(c.remoteCandidateId);c.remote={...a}}if(c.localCandidateId){let a=b.get(c.localCandidateId);c.local={...a}}return c}}class gX extends gH{#q=new Map;#r;#s;constructor(a={}){super(),this.#r=a.timeoutMs??15e3,this.#s=a.steps??3}performDetection(a){return this.processData(a)}processData(a){let b=[],c=[...this.getAllLastProcessedStats(a.connection.id),a];if(c.length<this.#s)return b;let d=c.slice(-this.#s),e=d.map(a=>a.video.inbound),f=d.map(a=>a.audio.inbound);return b.push(...this.detectMissingData(f,R.Stream,S.MissingAudioStreamData)),b.push(...this.detectMissingData(e,R.Stream,S.MissingVideoStreamData)),new Set(this.#q.keys()).forEach(a=>{let b=this.#q.get(a);b&&Date.now()-b>this.#r&&this.removeMarkedIssue(a)}),b}detectMissingData(a,b,c){let d=[],e=a.pop(),f=gX.mapStatsByTrackId(a);return e.forEach(a=>{let e=a.track.trackIdentifier,g=f.get(e);if(!Array.isArray(g)||0===g.length||a.track.detached||a.track.ended)return;if(!gX.isAllBytesReceivedDidntChange(a.bytesReceived,g))return void this.removeMarkedIssue(e);if(!this.markIssue(e))return;let h={bytesReceived:a.bytesReceived};d.push({type:b,reason:c,statsSample:h,trackIdentifier:e})}),d}static mapStatsByTrackId(a){let b=new Map;return a.forEach(a=>{a.forEach(a=>{let c=b.get(a.track.trackIdentifier)||[];c.push(a),b.set(a.track.trackIdentifier,c)})}),b}static isAllBytesReceivedDidntChange(a,b){for(let c=0;c<b.length;c+=1)if(b[c].bytesReceived!==a)return!1;return!0}markIssue(a){let b=Date.now(),c=this.#q.get(a);return(!c||b-c>this.#r)&&(this.#q.set(a,b),!0)}removeMarkedIssue(a){this.#q.delete(a)}}class gY{eventEmitter;#t=!1;detectors=[];networkScoresCalculator;statsReporter;compositeStatsParser;logger;autoAddPeerConnections;constructor(a){this.logger=a.logger??{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},this.eventEmitter=a.issueEmitter??new gD,a.onIssues&&this.eventEmitter.on(Q.Issue,a.onIssues),a.onNetworkScoresUpdated&&this.eventEmitter.on(Q.NetworkScoresUpdated,a.onNetworkScoresUpdated),this.detectors=a.detectors??[new gM,new gJ,new gL,new gK,new gI,new gN,new gR,new gS,new gX],this.networkScoresCalculator=a.networkScoresCalculator??new gG,this.compositeStatsParser=a.compositeStatsParser??new gV({statsParser:new gW({ignoreSSRCList:a.ignoreSSRCList,logger:this.logger})}),this.statsReporter=a.statsReporter??new gE({compositeStatsParser:this.compositeStatsParser,getStatsInterval:a.getStatsInterval??5e3}),window.wid=this,this.autoAddPeerConnections=a.autoAddPeerConnections??!0,this.autoAddPeerConnections&&this.wrapRTCPeerConnection(),this.statsReporter.on(gE.STATS_REPORT_READY_EVENT,a=>{let b=this.calculateNetworkScores(a.stats);this.detectIssues({data:a.stats},b)}),this.statsReporter.on(gE.STATS_REPORTS_PARSED,b=>{let c={timeTaken:b.timeTaken,ts:Date.now()};a.onStats&&a.onStats(b.reportItems),this.eventEmitter.emit(Q.StatsParsingFinished,c)})}watchNewPeerConnections(){if(!this.autoAddPeerConnections)throw Error("Auto add peer connections was disabled in the constructor.");this.#t?this.logger.warn("WebRTCIssueDetector is already started. Skip processing"):(this.logger.info("Start watching peer connections"),this.#t=!0,this.statsReporter.startReporting())}stopWatchingNewPeerConnections(){this.#t?(this.logger.info("Stop watching peer connections"),this.#t=!1,this.statsReporter.stopReporting()):this.logger.warn("WebRTCIssueDetector is already stopped. Skip processing")}handleNewPeerConnection(a,b){this.#t||!this.autoAddPeerConnections?(this.#t||!1!==this.autoAddPeerConnections||(this.logger.info("Starting stats reporting for new peer connection"),this.#t=!0,this.statsReporter.startReporting()),this.logger.debug("Handling new peer connection",a),this.compositeStatsParser.addPeerConnection({pc:a,id:b})):this.logger.debug("Skip handling new peer connection. Detector is not running",a)}emitIssues(a){this.eventEmitter.emit(Q.Issue,a)}detectIssues({data:a},b){let c=this.detectors.reduce((c,d)=>[...c,...d.detect(a,b)],[]);c.length>0&&this.emitIssues(c)}calculateNetworkScores(a){let b=this.networkScoresCalculator.calculate(a);return this.eventEmitter.emit(Q.NetworkScoresUpdated,b),b}wrapRTCPeerConnection(){if(!window.RTCPeerConnection)return void this.logger.warn("No RTCPeerConnection found in browser window. Skipping");let a=window.RTCPeerConnection,b=a=>this.handleNewPeerConnection(a);function c(c){let d=new a(c);return b(d),d}c.prototype=a.prototype,window.RTCPeerConnection=c}}function gZ(a,b,c,d){return new(c||(c=Promise))(function(e,f){function g(a){try{i(d.next(a))}catch(a){f(a)}}function h(a){try{i(d.throw(a))}catch(a){f(a)}}function i(a){var b;a.done?e(a.value):((b=a.value)instanceof c?b:new c(function(a){a(b)})).then(g,h)}i((d=d.apply(a,b||[])).next())})}"function"==typeof SuppressedError&&SuppressedError,function(a){a.SESSION_STATE_CHANGED="session.state_changed",a.SESSION_STREAM_READY="session.stream_ready",a.SESSION_CONNECTION_QUALITY_CHANGED="session.connection_quality_changed",a.SESSION_DISCONNECTED="session.disconnected"}(U||(U={})),function(a){a.SESSION_UPDATED="session.updated",a.SESSION_STATE_UPDATED="session.state_updated",a.USER_SPEAK_STARTED="user.speak_started",a.USER_SPEAK_ENDED="user.speak_ended",a.USER_TRANSCRIPTION="user.transcription",a.AVATAR_TRANSCRIPTION="avatar.transcription",a.AVATAR_SPEAK_STARTED="avatar.speak_started",a.AVATAR_SPEAK_ENDED="avatar.speak_ended"}(V||(V={})),!function(a){a.SESSION_UPDATE="session.update",a.SESSION_STOP="session.stop",a.AVATAR_INTERRUPT="avatar.interrupt",a.AVATAR_SPEAK_TEXT="avatar.speak_text",a.AVATAR_SPEAK_RESPONSE="avatar.speak_response",a.AVATAR_SPEAK_AUDIO="avatar.speak_audio",a.AVATAR_START_LISTENING="avatar.start_listening",a.AVATAR_STOP_LISTENING="avatar.stop_listening"}(W||(W={})),function(a){a.INACTIVE="INACTIVE",a.CONNECTING="CONNECTING",a.CONNECTED="CONNECTED",a.DISCONNECTING="DISCONNECTING",a.DISCONNECTED="DISCONNECTED"}(X||(X={})),function(a){a.UNKNOWN_REASON="UNKNOWN_REASON",a.CLIENT_INITIATED="CLIENT_INITIATED",a.SESSION_START_FAILED="SESSION_START_FAILED"}(Y||(Y={})),function(a){a.af="af",a.sq="sq",a.am="am",a.ar="ar",a.hy="hy",a.as="as",a.ast="ast",a.az="az",a.ba="ba",a.eu="eu",a.be="be",a.bn="bn",a.bs="bs",a.br="br",a.bg="bg",a.my="my",a.ca="ca",a.ceb="ceb",a.zh="zh",a.hr="hr",a.cs="cs",a.da="da",a.nl="nl",a.en="en",a.et="et",a.fo="fo",a.fi="fi",a.fr="fr",a.fy="fy",a.ff="ff",a.gd="gd",a.gl="gl",a.lg="lg",a.ka="ka",a.de="de",a.el="el",a.gu="gu",a.ht="ht",a.ha="ha",a.haw="haw",a.he="he",a.hi="hi",a.hu="hu",a.is="is",a.ig="ig",a.ilo="ilo",a.id="id",a.ga="ga",a.it="it",a.ja="ja",a.jv="jv",a.kn="kn",a.kk="kk",a.km="km",a.ko="ko",a.lo="lo",a.la="la",a.lv="lv",a.lb="lb",a.ln="ln",a.lt="lt",a.mk="mk",a.mg="mg",a.ms="ms",a.ml="ml",a.mt="mt",a.mi="mi",a.mr="mr",a.mo="mo",a.mn="mn",a.ne="ne",a.no="no",a.nn="nn",a.oc="oc",a.or="or",a.pa="pa",a.ps="ps",a.fa="fa",a.pl="pl",a.pt="pt",a.ro="ro",a.ru="ru",a.sa="sa",a.sr="sr",a.sn="sn",a.sd="sd",a.si="si",a.sk="sk",a.sl="sl",a.so="so",a.es="es",a.su="su",a.sw="sw",a.ss="ss",a.sv="sv",a.tl="tl",a.tg="tg",a.ta="ta",a.tt="tt",a.te="te",a.th="th",a.bo="bo",a.tn="tn",a.tr="tr",a.tk="tk",a.uk="uk",a.ur="ur",a.uz="uz",a.vi="vi",a.cy="cy",a.wo="wo",a.xh="xh",a.yi="yi",a.yo="yo",a.zu="zu"}(Z||(Z={})),function(a){a.UNKNOWN="UNKNOWN",a.GOOD="GOOD",a.BAD="BAD"}($||($={}));class g${constructor(a){this._connectionQuality=$.UNKNOWN,this.onConnectionQualityChanged=a}get connectionQuality(){return this._connectionQuality}handleStatsChanged(){let a=this.calculateConnectionQuality();a!==this._connectionQuality&&(this._connectionQuality=a,this.onConnectionQualityChanged(a))}start(a){this.stop(!0),this._start(a)}stop(a=!1){this._stop(),this._connectionQuality=$.UNKNOWN,a||this.onConnectionQualityChanged($.UNKNOWN)}}class g_ extends g${constructor(){super(...arguments),this.room=null,this.liveKitConnectionQuality=N.Unknown,this.liveKitConnectionState=null,this.handleConnectionQualityChanged=a=>{this.liveKitConnectionQuality=a,this.handleStatsChanged()},this.handleConnectionStateChanged=a=>{this.liveKitConnectionState=a,this.handleStatsChanged()}}_start(a){this.room=a,this.room.localParticipant.on(y.ConnectionQualityChanged,this.handleConnectionQualityChanged),this.room.on(x.ConnectionStateChanged,this.handleConnectionStateChanged)}_stop(){this.room&&(this.room.localParticipant.off(y.ConnectionQualityChanged,this.handleConnectionQualityChanged),this.room.off(x.ConnectionStateChanged,this.handleConnectionStateChanged))}calculateConnectionQuality(){return[N.Lost,N.Poor].includes(this.liveKitConnectionQuality)||this.liveKitConnectionState&&[O.Disconnected,O.Reconnecting,O.SignalReconnecting].includes(this.liveKitConnectionState)?$.BAD:$.GOOD}}class g0 extends g${constructor(){super(...arguments),this.issueDetector=null,this.mosScores=null}_start(a){this.issueDetector=new gY({autoAddPeerConnections:!1,getStatsInterval:3e3,onNetworkScoresUpdated:a=>{this.mosScores=a,this.handleStatsChanged()}}),this.issueDetector.handleNewPeerConnection(a)}_stop(){this.issueDetector&&(this.issueDetector.stopWatchingNewPeerConnections(),this.issueDetector=null),this.mosScores=null}calculateConnectionQuality(){return this.mosScores&&(this.mosScores.inbound||this.mosScores.outbound)?this.mosScores.inbound&&this.mosScores.inbound<3||this.mosScores.outbound&&this.mosScores.outbound<3?$.BAD:$.GOOD:$.UNKNOWN}}let g1=function(...a){class b extends g${constructor(b){super(b),this.childTrackers=a.map(({getParams:a,TrackerClass:b})=>({tracker:new b(()=>this.handleStatsChanged()),getParams:a}))}calculateConnectionQuality(){let a=this.childTrackers.map(({tracker:a})=>a.connectionQuality);return a.some(a=>a===$.BAD)?$.BAD:a.every(a=>a===$.UNKNOWN)?$.UNKNOWN:$.GOOD}_start(a){this.childTrackers.forEach(({tracker:b,getParams:c})=>b.start(c(a)))}_stop(){this.childTrackers.forEach(({tracker:a})=>a.stop(!0))}}return b}({TrackerClass:g_,getParams:a=>a},{TrackerClass:g0,getParams:a=>{var b;return(null==(b=a.engine.pcManager)?void 0:b.subscriber)._pc}});!function(a){a.MUTED="MUTED",a.UNMUTED="UNMUTED",a.STATE_CHANGED="STATE_CHANGED"}(_||(_={})),function(a){a.INACTIVE="INACTIVE",a.STARTING="STARTING",a.ACTIVE="ACTIVE"}(aa||(aa={}));class g2 extends gv.EventEmitter{constructor(a){super(),this._state=aa.INACTIVE,this.track=null,this.room=a}get isConnected(){return this.room.state!==O.Disconnected&&this.room.state!==O.Connecting}get state(){return this._state}get isMuted(){var a,b;return null==(b=null==(a=this.track)?void 0:a.isMuted)||b}start(){return gZ(this,arguments,void 0,function*(a={}){if(!this.isConnected)return void console.warn("Voice chat can only be started when session is active");if(this._state!==aa.INACTIVE)return void console.warn("Voice chat is already started");this.state=aa.STARTING;let{defaultMuted:b,deviceId:c}=a;this.track=yield go({echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,deviceId:c}),b?(yield this.track.mute(),this.emit(_.MUTED)):this.emit(_.UNMUTED),yield this.room.localParticipant.publishTrack(this.track),this.track.on(A.Muted,()=>{this.emit(_.MUTED)}),this.track.on(A.Unmuted,()=>{this.emit(_.UNMUTED)}),this.state=aa.ACTIVE})}stop(){this.room.localParticipant.getTrackPublications().forEach(a=>{a.track&&a.track.kind===ej.Kind.Audio&&a.track.stop()}),this.track&&(this.track.removeAllListeners(),this.track.stop(),this.track=null),this.state=aa.INACTIVE}mute(){return gZ(this,void 0,void 0,function*(){if(this.state!==aa.ACTIVE)return void console.warn("Voice chat can only be muted when active");this.track&&this.track.mute()})}unmute(){return gZ(this,void 0,void 0,function*(){if(this.state!==aa.ACTIVE)return void console.warn("Voice chat can only be unmuted when active");this.track&&this.track.unmute()})}setDevice(a){return gZ(this,void 0,void 0,function*(){return this.state!==aa.ACTIVE?(console.warn("Voice chat device can only be set when active"),!1):!!this.track&&this.track.setDeviceId(a)})}set state(a){this._state!==a&&(this._state=a,this.emit(_.STATE_CHANGED,a))}}let g3="https://api.liveavatar.com";class g4 extends Error{constructor(a,b,c){super(a),this.status=null,this.errorCode=null!=b?b:500,this.status=null!=c?c:null}}class g5{constructor(a,b=g3){this.sessionToken=a,this.apiUrl=null!=b?b:g3}request(a,b){return gZ(this,void 0,void 0,function*(){try{let c=yield fetch(`${this.apiUrl}${a}`,Object.assign(Object.assign({},b),{credentials:"include",headers:Object.assign({Authorization:`Bearer ${this.sessionToken}`,"Content-Type":"application/json"},b.headers)}));if(!c.ok){let a=yield c.json();throw new g4(a.message||`API request failed with status ${c.status}`,a.code,c.status)}let d=yield c.json();if(1e3!==d.code)throw new g4(d.message||"API request failed");return d.data}catch(a){if(a instanceof g4)throw a;throw new g4("API request failed")}})}startSession(){return gZ(this,void 0,void 0,function*(){return yield this.request("/v1/sessions/start",{method:"POST"})})}stopSession(){return gZ(this,void 0,void 0,function*(){return yield this.request("/v1/sessions/stop",{method:"POST"})})}keepAlive(){return gZ(this,void 0,void 0,function*(){return yield this.request("/v1/sessions/keep-alive",{method:"POST"})})}}class g6 extends gv.EventEmitter{constructor(a,b){super(),this.connectionQualityIndicator=new g1(a=>this.emit(U.SESSION_CONNECTION_QUALITY_CHANGED,a)),this._sessionInfo=null,this._sessionEventSocket=null,this._state=X.INACTIVE,this._remoteAudioTrack=null,this._remoteVideoTrack=null,this.config=null!=b?b:{},this.sessionClient=new g5(a,this.config.apiUrl),this.room=new gt({adaptiveStream:{pauseVideoInBackground:!1},dynacast:eu(),videoCaptureDefaults:{resolution:ep.h720.resolution}}),this._voiceChat=new g2(this.room)}get state(){return this._state}get connectionQuality(){return this.connectionQualityIndicator.connectionQuality}get voiceChat(){return this._voiceChat}get maxSessionDuration(){var a,b;return null!=(b=null==(a=this._sessionInfo)?void 0:a.max_session_duration)?b:null}start(){return gZ(this,void 0,void 0,function*(){if(this.state!==X.INACTIVE)return void console.warn("Session is already started");try{this.state=X.CONNECTING,this._sessionInfo=yield this.sessionClient.startSession();let a=this._sessionInfo.livekit_url,b=this._sessionInfo.livekit_client_token,c=this._sessionInfo.ws_url;a&&b&&(this.trackEvents(),yield this.room.connect(a,b),this.connectionQualityIndicator.start(this.room)),c&&(yield this.connectWebSocket(c),this.setupWebSocketManagement()),yield this.configureSession(),this.state=X.CONNECTED}catch(a){throw console.error("Session start failed:",a),this.cleanup(),this.postStop(Y.SESSION_START_FAILED),a}})}stop(){return gZ(this,void 0,void 0,function*(){this.assertConnected()&&(this.state=X.DISCONNECTING,this.cleanup(),this.postStop(Y.CLIENT_INITIATED))})}keepAlive(){return gZ(this,void 0,void 0,function*(){if(this.assertConnected())try{this.sessionClient.keepAlive()}catch(a){throw console.error("Session keep alive error on server:",a),a}})}attach(a){if(!this._remoteVideoTrack||!this._remoteAudioTrack)return void console.warn("Stream is not yet ready");this._remoteVideoTrack.attach(a),this._remoteAudioTrack.attach(a)}message(a){if(!this.assertConnected())return;let b={event_type:W.AVATAR_SPEAK_RESPONSE,text:a};this.sendCommandEvent(b)}repeat(a){if(!this.assertConnected())return;let b={event_type:W.AVATAR_SPEAK_TEXT,text:a};this.sendCommandEvent(b)}repeatAudio(a){if(!this.assertConnected())return;if(!this._sessionEventSocket)return void console.warn("Cannot repeat audio. Please check you're using a supported mode.");let b={event_type:W.AVATAR_SPEAK_AUDIO,audio:a};this.sendCommandEvent(b)}startListening(){if(!this.assertConnected())return;let a={event_type:W.AVATAR_START_LISTENING};this.sendCommandEvent(a)}stopListening(){if(!this.assertConnected())return;let a={event_type:W.AVATAR_STOP_LISTENING};this.sendCommandEvent(a)}interrupt(){if(!this.assertConnected())return;let a={event_type:W.AVATAR_INTERRUPT};this.sendCommandEvent(a)}trackEvents(){let a=new MediaStream;this.room.on(x.TrackSubscribed,(b,c,d)=>{if("heygen"===d.identity&&("video"===b.kind||"audio"===b.kind)){"video"===b.kind?this._remoteVideoTrack=b:this._remoteAudioTrack=b,a.addTrack(b.mediaStreamTrack);let c=a.getVideoTracks().length>0,d=a.getAudioTracks().length>0;c&&d&&this.emit(U.SESSION_STREAM_READY)}}),this.room.on(x.DataReceived,(a,b,c,d)=>{if("agent-response"!==d)return;let e=null;try{let b=new TextDecoder().decode(a);e=JSON.parse(b)}catch(a){console.error(a)}if(!e)return;let f=(a=>{if("event_type"in a)switch(a.event_type){case V.USER_SPEAK_STARTED:{let b={event_id:a.event_id,event_type:a.event_type};return[V.USER_SPEAK_STARTED,b]}case V.USER_SPEAK_ENDED:{let b={event_id:a.event_id,event_type:a.event_type};return[V.USER_SPEAK_ENDED,b]}case V.USER_TRANSCRIPTION:{let b={event_id:a.event_id,event_type:a.event_type,text:a.text};return[V.USER_TRANSCRIPTION,b]}case V.AVATAR_SPEAK_STARTED:{let b={event_id:a.event_id,event_type:a.event_type};return[V.AVATAR_SPEAK_STARTED,b]}case V.AVATAR_SPEAK_ENDED:{let b={event_id:a.event_id,event_type:a.event_type};return[V.AVATAR_SPEAK_ENDED,b]}case V.AVATAR_TRANSCRIPTION:{let b={event_id:a.event_id,event_type:a.event_type,text:a.text};return[V.AVATAR_TRANSCRIPTION,b]}default:console.warn("New unsupported event type")}return null})(e);if(f){let[a,...b]=f;this.emit(a,...b)}}),this.room.on(x.ParticipantConnected,a=>{console.warn("participantConnected",a)}),this.room.on(x.TrackUnsubscribed,b=>{console.warn("trackUnsubscribed",b);let c=b.mediaStreamTrack;c&&a.removeTrack(c)}),this.room.on(x.Disconnected,()=>{this.handleRoomDisconnect()})}connectWebSocket(a){return gZ(this,void 0,void 0,function*(){return new Promise((b,c)=>{this._sessionEventSocket=new WebSocket(a),this._sessionEventSocket.onopen=()=>{b()}})})}setupWebSocketManagement(){this._sessionEventSocket&&(this._sessionEventSocket.onmessage=a=>{this.handleWebSocketMessage(a)},this._sessionEventSocket.onerror=a=>{console.error("WebSocket error:",a)},this._sessionEventSocket.onclose=a=>{console.warn("WebSocket closed - code:",a.code,"reason:",a.reason,"wasClean:",a.wasClean),this.handleWebSocketDisconnect()})}handleWebSocketMessage(a){let b=null;try{b=JSON.parse(a.data)}catch(a){console.error("Failed to parse WebSocket message:",a);return}if(!b)return;let{type:c,event_id:d}=b;"agent.speak_started"===c?this.emit(V.AVATAR_SPEAK_STARTED,{event_type:V.AVATAR_SPEAK_STARTED,event_id:d}):"agent.speak_ended"===c&&this.emit(V.AVATAR_SPEAK_ENDED,{event_type:V.AVATAR_SPEAK_ENDED,event_id:d})}handleWebSocketDisconnect(){this.state!==X.DISCONNECTING&&this.state!==X.DISCONNECTED&&(this._sessionEventSocket&&this._sessionEventSocket.readyState===WebSocket.OPEN&&this._sessionEventSocket.close(),this._sessionEventSocket=null,this.cleanup(),this.postStop(Y.UNKNOWN_REASON))}configureSession(){return gZ(this,void 0,void 0,function*(){this.config.voiceChat&&(yield this.voiceChat.start("boolean"==typeof this.config.voiceChat?{}:this.config.voiceChat))})}set state(a){this._state!==a&&(this._state=a,this.emit(U.SESSION_STATE_CHANGED,a))}cleanup(){return gZ(this,void 0,void 0,function*(){this.connectionQualityIndicator.stop(),this.voiceChat.stop(),this._remoteAudioTrack&&this._remoteAudioTrack.stop(),this._remoteVideoTrack&&this._remoteVideoTrack.stop(),this._remoteAudioTrack=null,this._remoteVideoTrack=null,this.room.localParticipant.removeAllListeners(),this.room.removeAllListeners(),this._sessionEventSocket&&(this._sessionEventSocket.onopen=null,this._sessionEventSocket.onmessage=null,this._sessionEventSocket.onerror=null,this._sessionEventSocket.onclose=null,(this._sessionEventSocket.readyState===WebSocket.OPEN||this._sessionEventSocket.readyState===WebSocket.CONNECTING)&&this._sessionEventSocket.close(),this._sessionEventSocket=null),"connected"===this.room.state&&this.room.disconnect(),yield this.sessionClient.stopSession()})}postStop(a){this.state=X.DISCONNECTED,this.emit(U.SESSION_DISCONNECTED,a)}handleRoomDisconnect(){this.cleanup(),this.postStop(Y.UNKNOWN_REASON)}sendCommandEvent(a){if(this._sessionEventSocket&&this._sessionEventSocket.readyState===WebSocket.OPEN)this.sendCommandEventToWebSocket(a);else if("connected"===this.room.state){let b=new TextEncoder().encode(JSON.stringify(a));this.room.localParticipant.publishData(b,{reliable:!0,topic:"agent-control"})}else console.warn("No active connection to send command event")}generateEventId(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,a=>{let b=16*Math.random()|0;return("x"===a?b:3&b|8).toString(16)})}sendCommandEventToWebSocket(a){if(!this._sessionEventSocket||this._sessionEventSocket.readyState!==WebSocket.OPEN)return void console.warn("WebSocket not open to send command event");let b=a.event_type,c=this.generateEventId();switch(b){case W.AVATAR_SPEAK_AUDIO:for(let b of function(a){let b=a.length,c=[];for(let d=0;d<b;d+=960)c.push(a.slice(d,d+960));return c}(a.audio))this._sessionEventSocket.send(JSON.stringify({type:"agent.speak",event_id:c,audio:b}));this._sessionEventSocket.send(JSON.stringify({type:"agent.speak_end",event_id:c}));return;case W.AVATAR_INTERRUPT:this._sessionEventSocket.send(JSON.stringify({type:"agent.interrupt",event_id:c}));return;case W.AVATAR_START_LISTENING:this._sessionEventSocket.send(JSON.stringify({type:"agent.start_listening",event_id:c}));return;case W.AVATAR_STOP_LISTENING:this._sessionEventSocket.send(JSON.stringify({type:"agent.stop_listening",event_id:c}));return;default:console.warn("Unsupported command event type:",b)}}assertConnected(){return this.state===X.CONNECTED||(console.warn("Session is not connected"),!1)}}var g7=function(a){return a.USER="user",a.AVATAR="avatar",a}({});process.env.LIVEAVATAR_API_KEY,process.env.OPENCLAW_GATEWAY_URL,process.env.OPENCLAW_GATEWAY_TOKEN;class g8{constructor(a,b){this.ws=null,this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=1e3,this.messageId=0,this.pendingRequests=new Map,this.connectionState="disconnected",this.conversationId=null,this.sessionKey=null,this.onMessageHandlers=[],this.onConnectionStateHandlers=[],this.onAgentEventHandlers=[],this.url=a,this.token=b||""}get state(){return this.connectionState}setConnectionState(a){this.connectionState=a,this.onConnectionStateHandlers.forEach(b=>b(a))}async connect(){return new Promise((a,b)=>{try{this.setConnectionState("connecting");let c=this.url;if(this.token){let a=c.includes("?")?"&":"?";c=`${c}${a}token=${encodeURIComponent(this.token)}`}this.ws=new WebSocket(c),this.ws.onopen=()=>{console.log("[Gateway] WebSocket connected"),this.reconnectAttempts=0,this.performHandshake().then(()=>{this.setConnectionState("connected"),a()}).catch(a=>{this.setConnectionState("error"),b(a)})},this.ws.onclose=a=>{console.log("[Gateway] WebSocket closed:",a.code,a.reason),this.setConnectionState("disconnected"),this.handleReconnect()},this.ws.onerror=a=>{console.error("[Gateway] WebSocket error:",a),this.setConnectionState("error"),b(Error("WebSocket connection failed"))},this.ws.onmessage=a=>{this.handleMessage(a.data)}}catch(a){this.setConnectionState("error"),b(a)}})}async performHandshake(){let a={minProtocol:3,maxProtocol:3,client:{id:"webchat",version:"0.1.0",platform:"web",mode:"webchat",displayName:"OpenClaw LiveAvatar"}};this.token&&(a.auth={token:this.token});let b=await this.sendRequest("connect",a);b.snapshot?.sessionDefaults?.mainSessionKey&&(this.sessionKey=b.snapshot.sessionDefaults.mainSessionKey,console.log("[Gateway] Session key captured:",this.sessionKey)),console.log("[Gateway] Handshake complete:",b)}handleMessage(a){try{let b=JSON.parse(a);if(this.onMessageHandlers.forEach(a=>a(b)),"res"===b.type){let a=this.pendingRequests.get(b.id);a&&(this.pendingRequests.delete(b.id),b.ok?a.resolve(b.payload):a.reject(Error(b.error?.message||"Request failed")))}else"event"===b.type&&this.handleEvent(b)}catch(a){console.error("[Gateway] Failed to parse message:",a)}}handleEvent(a){if(console.log("[Gateway] Event:",a.event,JSON.stringify(a.payload)),"agent"===a.event){let b=a.payload;console.log("[Gateway] Agent event received:",b.runId,b.stream,b.data),this.onAgentEventHandlers.forEach(a=>a(b))}}onAgentEvent(a){this.onAgentEventHandlers.push(a)}offAgentEvent(a){let b=this.onAgentEventHandlers.indexOf(a);b>-1&&this.onAgentEventHandlers.splice(b,1)}handleReconnect(){if(this.reconnectAttempts>=this.maxReconnectAttempts)return void console.log("[Gateway] Max reconnect attempts reached");this.reconnectAttempts++;let a=this.reconnectDelay*Math.pow(2,this.reconnectAttempts-1);console.log(`[Gateway] Reconnecting in ${a}ms (attempt ${this.reconnectAttempts})`),setTimeout(()=>{this.connect().catch(a=>{console.error("[Gateway] Reconnect failed:",a)})},a)}async sendRequest(a,b){return new Promise((c,d)=>{if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return void d(Error("WebSocket not connected"));let e=`${++this.messageId}`;this.pendingRequests.set(e,{resolve:c,reject:d}),setTimeout(()=>{this.pendingRequests.has(e)&&(this.pendingRequests.delete(e),d(Error("Request timeout")))},3e4),this.ws.send(JSON.stringify({type:"req",id:e,method:a,params:b}))})}async sendToAgent(a){let b,c,d={message:`${a}
|
|
6
|
+
|
|
7
|
+
[RESPONSE FORMAT: Start with a 3-5 sentence spoken summary wrapped in [TTS]...[/TTS] tags that captures the key points of your response, then provide your full detailed response. The TTS summary should be informative and conversational, giving the user the gist while they read the full text. Example:
|
|
8
|
+
[TTS]Here's what I found. The main issue is X, which can be solved by Y. I'd recommend starting with Z approach because it's the most straightforward.[/TTS]
|
|
9
|
+
Full detailed response here with all the specifics...]`,idempotencyKey:`liveavatar-${Date.now()}-${Math.random().toString(36).substring(2,9)}`};this.sessionKey&&(d.sessionKey=this.sessionKey),this.conversationId&&(d.conversationId=this.conversationId);let e=null,f="",g=!1,h=[],i=new Promise((a,d)=>{b=a,c=d}),j=setTimeout(()=>{this.offAgentEvent(m),c(Error("Agent response timeout"))},6e4),k=new Set,l=a=>{!g&&(void 0!==a.seq&&k.has(a.seq)||(void 0!==a.seq&&k.add(a.seq),console.log("[Gateway] Agent event:",a.stream,a.seq,a.data?.delta?.substring(0,20)),"assistant"===a.stream&&a.data?.delta&&(f+=a.data.delta),"lifecycle"===a.stream&&a.data?.phase==="end"&&(g=!0,clearTimeout(j),this.offAgentEvent(m),b({runId:e,status:"completed",text:f||void 0})),"lifecycle"===a.stream&&a.data?.phase==="error"&&(g=!0,clearTimeout(j),this.offAgentEvent(m),b({runId:e,status:"failed",text:a.data?.error||"Agent encountered an error"}))))},m=a=>{if(!e)return void h.push(a);a.runId===e&&l(a)};this.onAgentEvent(m);try{let a=await this.sendRequest("agent",d);for(let b of(console.log("[Gateway] Agent request accepted:",a),e=a.runId,a.conversationId&&(this.conversationId=a.conversationId),h))b.runId===e&&l(b)}catch(a){throw clearTimeout(j),this.offAgentEvent(m),a}return i}async getStatus(){return this.sendRequest("status")}parseResponse(a){let b=a.match(/\[TTS\]([\s\S]*?)\[\/TTS\]/i);if(b){let c=b[1].trim(),d=a.replace(/\[TTS\][\s\S]*?\[\/TTS\]\n?/i,"").trim();return console.log("[Gateway] Parsed TTS summary:",c.length,"chars"),{tts:c,full:d||a}}console.log("[Gateway] No [TTS] block found, extracting first sentences");let c=a.match(/[^.!?]+[.!?]+/g)||[],d="";for(let a=0;a<Math.min(5,c.length);a++){let b=c[a].trim();if(d.length+b.length>400&&d.length>0)break;d+=(d?" ":"")+b}return{tts:d||this.truncateToSentences(a,300),full:a}}truncateToSentences(a,b){if(a.length<=b)return a;let c=a.substring(0,b),d=Math.max(c.lastIndexOf(". "),c.lastIndexOf("! "),c.lastIndexOf("? "),c.lastIndexOf(".\n"),c.lastIndexOf("!\n"),c.lastIndexOf("?\n"));if(d>.5*b)return c.substring(0,d+1).trim();let e=c.lastIndexOf(" ");return e>.7*b?c.substring(0,e).trim()+"...":c.trim()+"..."}disconnect(){this.ws&&(this.ws.close(),this.ws=null),this.setConnectionState("disconnected")}onMessage(a){this.onMessageHandlers.push(a)}offMessage(a){let b=this.onMessageHandlers.indexOf(a);b>-1&&this.onMessageHandlers.splice(b,1)}onConnectionState(a){this.onConnectionStateHandlers.push(a)}offConnectionState(a){let b=this.onConnectionStateHandlers.indexOf(a);b>-1&&this.onConnectionStateHandlers.splice(b,1)}}let g9=null;function ha(){return g9||(g9=new g8("ws://127.0.0.1:18789","")),g9}let hb=(a,b=200)=>{if(a.length<=b)return a;let c=a.substring(0,b),d=Math.max(c.lastIndexOf(". "),c.lastIndexOf("! "),c.lastIndexOf("? "),c.lastIndexOf(".\n"),c.lastIndexOf("!\n"),c.lastIndexOf("?\n"));if(d>.5*b)return c.substring(0,d+1).trim();let e=c.lastIndexOf(" ");return e>.7*b?c.substring(0,e).trim()+"...":c.trim()+"..."},hc=["Let me think about that...","One moment please...","Let me check on that...","Give me a second...","Looking into that...","Hmm, let me see..."],hd=()=>hc[Math.floor(Math.random()*hc.length)],he=["Hey there! I'm ready to help. What can I do for you today?","Hi! Good to see you. What would you like to work on?","Hello! I'm all set. What's on your mind?","Hey! Ready when you are. What can I help you with?","Hi there! Let's get started. What do you need?","Hello! I'm here to assist. What are you working on today?"],hf=["Hi there! Welcome to the OpenClaw demo. Feel free to ask me anything, or say 'help' to learn more!","Hello! This is the OpenClaw LiveAvatar demo. Try asking me what I can do!","Hey! Welcome to the demo. I'm here to show you how this works. What would you like to know?"],hg=(0,ac.createContext)({sessionRef:{current:null},connectionQuality:$.UNKNOWN,isMuted:!0,voiceChatState:aa.INACTIVE,sessionState:X.DISCONNECTED,isStreamReady:!1,isUserTalking:!1,isAvatarTalking:!1,messages:[],addMessage:()=>{},addTypedMessage:()=>{},gatewayState:"disconnected",isProcessingAgent:!1,isDemoMode:!0}),hh=a=>{let b=a.toLowerCase().trim();return b.match(/^(hi|hello|hey|greetings|good morning|good afternoon|good evening)\.?$/)?"Hello! Welcome to the OpenClaw LiveAvatar integration demo. I'm here to show you how this works. Try asking me 'what is this?' or 'how does it work?' to learn more!":b.includes("what is this")||b.includes("what are you")||b.includes("who are you")?"I'm a LiveAvatar - a real-time AI video avatar that serves as your voice and video interface to OpenClaw agents. Think of me as a friendly face for your AI assistant. When connected to OpenClaw, I'll speak your agent's responses and listen to your voice commands!":b.includes("how does it work")||b.includes("how do you work")||b.includes("explain")?"Here's how it works: You speak to me or type a message. Your input goes to your OpenClaw agent, which processes it and generates a response. Then I speak that response back to you with natural lip-sync and expressions. It's like having a video call with your AI agent!":b.includes("openclaw")&&(b.includes("what")||b.includes("tell me about"))?"OpenClaw is an AI agent platform that lets you build and deploy intelligent assistants. These agents can handle tasks, answer questions, and integrate with your tools. This LiveAvatar integration adds a human-like video interface to make interactions more engaging and natural.":b.includes("liveavatar")&&(b.includes("what")||b.includes("tell me about"))?"LiveAvatar is powered by HeyGen's streaming avatar technology. It creates real-time, photorealistic AI avatars that can speak any text with natural expressions and lip-sync. Combined with OpenClaw, it transforms text-based AI interactions into face-to-face conversations.":"help"===b||b.includes("what can i ask")||b.includes("what can you do")||b.includes("commands")?"In demo mode, you can ask me about: 'What is this?', 'How does it work?', 'What is OpenClaw?', 'What is LiveAvatar?', 'How do I connect?', 'Features', 'Requirements', 'Pricing', or 'Get started'. Once connected to OpenClaw, I'll respond with your actual agent's intelligence!":b.includes("connect")||b.includes("setup")||b.includes("get started")||b.includes("install")?"To connect to your OpenClaw agent: First, make sure OpenClaw is running on your computer with the Gateway enabled on port 18789. Then refresh this page - I'll automatically detect the connection and switch from demo mode to live mode. You'll see the status change from 'Demo Mode' to 'OpenClaw Connected'.":b.includes("feature")?"Key features include: Voice-to-voice conversations with your AI agent, real-time video avatar with natural expressions, text chat as an alternative to voice, multiple avatar options to choose from, and seamless integration with your OpenClaw workflows. It's like giving your AI a face!":b.includes("requirement")||b.includes("need")||b.includes("prerequisite")?"To use this integration you'll need: An OpenClaw account with an active agent, the OpenClaw Gateway running locally, a LiveAvatar API key from HeyGen, a modern browser with microphone access, and a stable internet connection for the video stream.":b.includes("price")||b.includes("cost")||b.includes("free")||b.includes("pricing")?"LiveAvatar sessions consume HeyGen credits based on session duration. OpenClaw has its own pricing for agent usage. Check openclaw.ai and heygen.com for current pricing. This demo mode is free to try and shows you exactly how the integration works!":b.includes("demo mode")||b.includes("demo")?"You're currently in demo mode because no OpenClaw Gateway connection was detected. In this mode, I respond with pre-set information about the integration. Once you connect to OpenClaw, I'll relay your messages to your actual AI agent and speak its responses!":b.includes("voice")||b.includes("microphone")||b.includes("speak")||b.includes("talk")?"You can talk to me using your microphone! Click the green microphone button to unmute, then just speak naturally. I'll transcribe what you say, process it, and respond verbally. You can also type in the chat box if you prefer text input.":b.includes("avatar")||b.includes("change")||b.includes("appearance")?"You can change my appearance by clicking the person icon in the bottom right of the video. This opens the avatar selector where you can choose from different available avatars. Each avatar has its own look and voice!":b.includes("bye")||b.includes("goodbye")||b.includes("see you")||b.includes("thanks")?"Thank you for trying the OpenClaw LiveAvatar demo! When you're ready to use it with your actual OpenClaw agent, just start the Gateway and refresh this page. Have a great day!":`I heard: "${a}". I'm currently in demo mode, showing you how this integration works. Try asking me about 'what is this?', 'how does it work?', or type 'help' for more options. Once connected to OpenClaw, your agent will provide intelligent responses to any question!`},hi=({children:a,sessionAccessToken:b})=>{let c=(0,ac.useRef)(new g6(b,{voiceChat:{defaultMuted:!1},apiUrl:"https://api.liveavatar.com"})),[d,e]=(0,ac.useState)([]),f=(0,ac.useRef)(new Set),g=(0,ac.useRef)(new Set),h=(0,ac.useCallback)(a=>{e(b=>[...b,a])},[]),{sessionState:i,isStreamReady:j,connectionQuality:k}=(a=>{let[b,c]=(0,ac.useState)(a.current?.state||X.INACTIVE),[d,e]=(0,ac.useState)(a.current?.connectionQuality||$.UNKNOWN),[f,g]=(0,ac.useState)(!1);return(0,ac.useEffect)(()=>{a.current&&(a.current.on(U.SESSION_STATE_CHANGED,b=>{c(b),b===X.DISCONNECTED&&(a.current.removeAllListeners(),a.current.voiceChat.removeAllListeners(),g(!1))}),a.current.on(U.SESSION_STREAM_READY,()=>{g(!0)}),a.current.on(U.SESSION_CONNECTION_QUALITY_CHANGED,e))},[a]),{sessionState:b,isStreamReady:f,connectionQuality:d}})(c),{isMuted:l,voiceChatState:m}=(a=>{let[b,c]=(0,ac.useState)(!0),[d,e]=(0,ac.useState)(a.current?.voiceChat.state||aa.INACTIVE);return(0,ac.useEffect)(()=>{a.current&&(a.current.voiceChat.on(_.MUTED,()=>{c(!0)}),a.current.voiceChat.on(_.UNMUTED,()=>{c(!1)}),a.current.voiceChat.on(_.STATE_CHANGED,e))},[a]),{isMuted:b,voiceChatState:d}})(c),{isUserTalking:n,isAvatarTalking:o}=(a=>{let[b,c]=(0,ac.useState)(!1),[d,e]=(0,ac.useState)(!1);return(0,ac.useEffect)(()=>{a.current&&(a.current.on(V.USER_SPEAK_STARTED,()=>{c(!0)}),a.current.on(V.USER_SPEAK_ENDED,()=>{c(!1)}),a.current.on(V.AVATAR_SPEAK_STARTED,()=>{e(!0)}),a.current.on(V.AVATAR_SPEAK_ENDED,()=>{e(!1)}))},[a]),{isUserTalking:b,isAvatarTalking:d}})(c),p=(0,ac.useRef)(!1);(0,ac.useEffect)(()=>{p.current=o},[o]);let{gatewayState:q,isProcessingAgent:r,isDemoMode:s}=((a,b,c,d,e)=>{let[f,g]=(0,ac.useState)("disconnected"),[h,i]=(0,ac.useState)(!1),[j,k]=(0,ac.useState)(!0),l=(0,ac.useRef)(null);return(0,ac.useEffect)(()=>{let a=ha();return l.current=a,a.onConnectionState(a=>{g(a),"connected"===a&&(console.log("[OpenClaw] Gateway connected - switching to live mode"),k(!1)),("disconnected"===a||"error"===a)&&(console.log("[OpenClaw] Gateway disconnected - falling back to demo mode"),k(!0))}),a.connect().catch(a=>{console.log("[OpenClaw] Gateway not available, staying in demo mode:",a.message),k(!0)}),()=>{a.disconnect()}},[]),(0,ac.useEffect)(()=>{let f=a.current;if(!f)return;let g=async a=>{let g=a.text||a.transcript||"";if(!g.trim())return;if(e.current)return void console.log("[Voice] Ignoring transcription while avatar is speaking:",g.substring(0,30));if(c.current?.has(g.trim()))return void c.current.delete(g.trim());let h=`user:${g.trim()}`;if(!d.current?.has(h)){d.current?.add(h),setTimeout(()=>d.current?.delete(h),3e3),b({sender:g7.USER,message:g,timestamp:Date.now()});try{let a;i(!0);let c=!1;if(j)console.log("[Demo] Processing voice message locally:",g),a=hh(g);else{let b=l.current;if(b&&"connected"===b.state){console.log("[OpenClaw] Sending to agent:",g);let d=null;f&&f.state===X.CONNECTED&&(d=setTimeout(async()=>{let a=hd();console.log("[Avatar] Speaking placeholder (slow response):",a),c=!0;try{await f.repeat(a)}catch(a){console.error("[Avatar] Failed to speak placeholder:",a)}},2e3));let e=await b.sendToAgent(g);d&&clearTimeout(d),console.log("[OpenClaw] Agent response:",e),a="completed"===e.status&&e.text?e.text:"Sorry, I didn't get a response from the agent."}else console.warn("[OpenClaw] Gateway not connected, cannot send message"),a="I'm not connected to the agent. Please check the Gateway connection."}let d=l.current,e=a,h=a;if(!j&&d){let b=d.parseResponse(a);e=b.tts,h=b.full}else e=hb(a);if(b({sender:g7.AVATAR,message:h,timestamp:Date.now()}),f&&f.state===X.CONNECTED)try{c&&await new Promise(a=>setTimeout(a,500)),console.log("[Avatar] Speaking TTS summary:",e),await f.repeat(e)}catch(a){console.error("[Avatar] Failed to make avatar speak:",a)}}catch(a){console.error("[Chat] Failed to process voice message:",a),b({sender:g7.AVATAR,message:"Sorry, I couldn't process that. Please try again.",timestamp:Date.now()})}finally{i(!1)}}};return f.on(V.USER_TRANSCRIPTION,g),()=>{f.off(V.USER_TRANSCRIPTION,g)}},[a,b,c,d,j]),{gatewayState:f,isProcessingAgent:h,isDemoMode:j}})(c,h,f,g,p),[t,u]=(0,ac.useState)(!1),v=(0,ac.useRef)(null),w=(0,ac.useRef)(!1);(0,ac.useEffect)(()=>{v.current=ha()},[]),(0,ac.useEffect)(()=>{if(console.log("[Intro] Effect triggered - isStreamReady:",j,"hasPlayed:",w.current),!j||w.current)return;let a=c.current;if(!a)return void console.log("[Intro] No session ref");console.log("[Intro] Session state:",a.state),w.current=!0,setTimeout(async()=>{let b=(a=>{let b=a?hf:he;return b[Math.floor(Math.random()*b.length)]})(s);h({sender:g7.AVATAR,message:b,timestamp:Date.now()});try{console.log("[Intro] Playing intro:",b),await a.repeat(b),console.log("[Intro] Intro played successfully")}catch(a){console.error("[Intro] Failed to play intro:",a)}},1e3)},[j,s,h,c]);let x=(0,ac.useCallback)(async a=>{f.current.add(a),setTimeout(()=>{f.current.delete(a)},2e3),h({sender:g7.USER,message:a,timestamp:Date.now()});try{let b;u(!0);let d=!1,e=c.current;if(s)console.log("[Demo] Processing typed message locally:",a),b=hh(a);else{let c=v.current;if(c&&"connected"===c.state){console.log("[OpenClaw] Sending typed message to agent:",a);let f=null;e&&e.state===X.CONNECTED&&(f=setTimeout(async()=>{let a=hd();console.log("[Avatar] Speaking placeholder (slow response):",a),d=!0;try{await e.repeat(a)}catch(a){console.error("[Avatar] Failed to speak placeholder:",a)}},2e3));let g=await c.sendToAgent(a);f&&clearTimeout(f),console.log("[OpenClaw] Agent response:",g),b="completed"===g.status&&g.text?g.text:"Sorry, I didn't get a response from the agent."}else console.warn("[OpenClaw] Gateway not connected, cannot send typed message"),b="I'm not connected to the OpenClaw agent yet. Please make sure the Gateway is running."}let f=v.current,g=b,i=b;if(!s&&f){let a=f.parseResponse(b);g=a.tts,i=a.full}else g=hb(b);if(h({sender:g7.AVATAR,message:i,timestamp:Date.now()}),e&&e.state===X.CONNECTED)try{d&&await new Promise(a=>setTimeout(a,500)),console.log("[Avatar] Speaking TTS summary:",g),await e.repeat(g)}catch(a){console.error("[Avatar] Failed to make avatar speak:",a)}}catch(a){console.error("[Chat] Failed to process message:",a),h({sender:g7.AVATAR,message:"Sorry, I couldn't process that. Please try again.",timestamp:Date.now()})}finally{u(!1)}},[h,c,s]);return(0,ab.jsx)(hg.Provider,{value:{sessionRef:c,sessionState:i,isStreamReady:j,connectionQuality:k,isMuted:l,voiceChatState:m,isUserTalking:n,isAvatarTalking:o,messages:d,addMessage:h,addTypedMessage:x,gatewayState:q,isProcessingAgent:r||t,isDemoMode:s},children:a})},hj=()=>(0,ac.useContext)(hg),hk=({deviceId:a,isActive:b})=>{let[c,d]=(0,ac.useState)(0),e=(0,ac.useRef)(null),f=(0,ac.useRef)(null),g=(0,ac.useRef)(null),h=(0,ac.useRef)(!0);(0,ac.useEffect)(()=>(h.current=!0,b&&a&&"default"!==a)?((async()=>{if(await new Promise(a=>setTimeout(a,500)),h.current)try{let b=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{ideal:a}}});if(!h.current)return void b.getTracks().forEach(a=>a.stop());f.current=b;let c=new AudioContext;e.current=c;let i=c.createMediaStreamSource(b),j=c.createAnalyser();j.fftSize=256,j.smoothingTimeConstant=.3,i.connect(j);let k=new Uint8Array(j.frequencyBinCount),l=()=>{if(!h.current)return;j.getByteFrequencyData(k);let a=0;for(let b=0;b<k.length;b++)a+=k[b];let b=a/k.length,c=Math.min(100,b/128*100);d(c),g.current=requestAnimationFrame(l)};l()}catch(a){console.error("Failed to start audio analyser:",a),d(0)}})(),()=>{h.current=!1,g.current&&(cancelAnimationFrame(g.current),g.current=null),f.current&&(f.current.getTracks().forEach(a=>a.stop()),f.current=null),e.current&&(e.current.close().catch(()=>{}),e.current=null)}):void d(0),[a,b]);let i=Array.from({length:5},(a,b)=>{let d=20*(b+1);return c>=d?100:c/d*100});return(0,ab.jsx)("div",{className:"flex items-end gap-0.5 h-6",children:i.map((a,b)=>(0,ab.jsx)("div",{className:"w-1 bg-green-500 rounded-full transition-all duration-75",style:{height:`${Math.max(4,.24*a)}px`,opacity:c>5?1:.3}},b))})},hl=({selectedDeviceId:a,onDeviceChange:b,disabled:c,showAudioLevel:d})=>{let[e,f]=(0,ac.useState)([]),[g,h]=(0,ac.useState)(!1);(0,ac.useEffect)(()=>{let c=async()=>{try{await navigator.mediaDevices.getUserMedia({audio:!0});let c=(await navigator.mediaDevices.enumerateDevices()).filter(a=>"audioinput"===a.kind);f(c),c.length>0&&"default"===a&&b(c[0].deviceId)}catch(a){console.error("Failed to get audio devices:",a)}};return c(),navigator.mediaDevices.addEventListener("devicechange",c),()=>{navigator.mediaDevices.removeEventListener("devicechange",c)}},[a,b]);let i=e.find(b=>b.deviceId===a),j=i?.label||"Select microphone";return(0,ab.jsxs)("div",{className:"relative",children:[(0,ab.jsxs)("button",{onClick:()=>!c&&h(!g),disabled:c,className:`flex items-center gap-2 bg-white/10 hover:bg-white/20 text-white px-3 py-2 rounded-lg text-sm transition-colors ${c?"opacity-50 cursor-not-allowed":""}`,children:[(0,ab.jsx)("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z"})}),(0,ab.jsx)("span",{className:"max-w-[180px] truncate",children:j}),d&&"default"!==a&&(0,ab.jsx)(hk,{deviceId:a,isActive:!0},a),(0,ab.jsx)("svg",{className:`w-4 h-4 transition-transform ${g?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),g&&(0,ab.jsxs)("div",{className:"absolute bottom-full left-0 mb-2 w-80 bg-white rounded-lg shadow-xl overflow-hidden z-50",children:[(0,ab.jsx)("div",{className:"px-4 py-2 bg-gray-100 text-gray-600 text-sm font-medium border-b",children:"Select microphone"}),(0,ab.jsx)("div",{className:"max-h-64 overflow-y-auto",children:e.map(c=>(0,ab.jsx)("button",{onClick:()=>{b(c.deviceId),h(!1)},className:`w-full px-4 py-3 text-left text-sm hover:bg-gray-50 transition-colors ${c.deviceId===a?"bg-blue-50 text-blue-700":"text-gray-800"}`,children:c.label||`Microphone ${c.deviceId.slice(0,8)}`},c.deviceId))})]})]})},hm=({state:a,isProcessing:b,isDemoMode:c})=>(0,ab.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 bg-black/30 rounded-full",children:[(0,ab.jsx)("span",{className:`w-2 h-2 rounded-full ${(()=>{if(b)return"bg-yellow-500";if(c)return"bg-blue-500";switch(a){case"connected":return"bg-green-500";case"connecting":return"bg-yellow-500";case"error":return"bg-red-500";default:return"bg-gray-500"}})()} ${b?"animate-pulse":""}`}),(0,ab.jsx)("span",{className:"text-xs text-white/80",children:(()=>{if(b)return"Processing...";if(c)return"Demo Mode";switch(a){case"connected":return"OpenClaw Connected";case"connecting":return"Connecting...";case"error":return"Connection Error";default:return"Disconnected"}})()})]}),hn=()=>{let{messages:a,gatewayState:b,isProcessingAgent:c,addTypedMessage:d,isDemoMode:e}=hj(),f=(0,ac.useRef)(null),[g,h]=(0,ac.useState)(""),i=e||"connected"===b;(0,ac.useEffect)(()=>{f.current?.scrollIntoView({behavior:"smooth"})},[a]);let j=()=>{let a=g.trim();a&&(d(a),h(""))};return(0,ab.jsxs)("div",{className:"flex flex-col h-full overflow-hidden bg-gray-900/50 rounded-2xl border border-white/10",children:[(0,ab.jsxs)("div",{className:"flex-shrink-0 px-4 py-3 border-b border-white/10 flex items-center justify-between",children:[(0,ab.jsx)("h3",{className:"text-white font-medium",children:"Conversation"}),(0,ab.jsx)(hm,{state:b,isProcessing:c,isDemoMode:e})]}),(0,ab.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto p-4 space-y-3",children:[0===a.length?(0,ab.jsx)("div",{className:"text-gray-500 text-sm text-center py-8",children:e?(0,ab.jsx)(ab.Fragment,{children:'Demo mode active. Type "help" to learn about this integration!'}):"connected"===b?(0,ab.jsx)(ab.Fragment,{children:"Start speaking or type below to chat with your OpenClaw agent"}):(0,ab.jsx)(ab.Fragment,{children:"Connecting to OpenClaw Gateway..."})}):a.map((a,b)=>(0,ab.jsx)("div",{className:`flex ${a.sender===g7.USER?"justify-end":"justify-start"}`,children:(0,ab.jsxs)("div",{className:`max-w-[90%] px-4 py-3 rounded-xl text-sm leading-relaxed ${a.sender===g7.USER?"bg-blue-600 text-white":"bg-gray-700 text-gray-100"}`,children:[(0,ab.jsx)("div",{className:"text-xs opacity-70 mb-1.5 font-medium",children:a.sender===g7.USER?"You":"OpenClaw Agent"}),(0,ab.jsx)("div",{className:"whitespace-pre-wrap",children:a.message})]})},b)),c&&(0,ab.jsx)("div",{className:"flex justify-start",children:(0,ab.jsx)("div",{className:"bg-gray-700 text-gray-100 px-3 py-2 rounded-lg text-sm",children:(0,ab.jsxs)("div",{className:"flex items-center gap-2",children:[(0,ab.jsx)("div",{className:"w-2 h-2 bg-blue-400 rounded-full animate-bounce"}),(0,ab.jsx)("div",{className:"w-2 h-2 bg-blue-400 rounded-full animate-bounce",style:{animationDelay:"0.1s"}}),(0,ab.jsx)("div",{className:"w-2 h-2 bg-blue-400 rounded-full animate-bounce",style:{animationDelay:"0.2s"}})]})})}),(0,ab.jsx)("div",{ref:f})]}),(0,ab.jsx)("div",{className:"flex-shrink-0 p-3 border-t border-white/10",children:(0,ab.jsxs)("div",{className:"flex gap-2",children:[(0,ab.jsx)("input",{type:"text",value:g,onChange:a=>h(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.shiftKey||(a.preventDefault(),j())},placeholder:i?"Type a message...":"Waiting for connection...",disabled:!i||c,className:"flex-1 bg-gray-800 text-white text-sm px-3 py-2 rounded-lg border border-white/10 focus:border-orange-500/50 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed placeholder-gray-500"}),(0,ab.jsx)("button",{onClick:j,disabled:!g.trim()||!i||c,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-600 disabled:cursor-not-allowed text-white px-4 py-2 rounded-lg transition-colors",children:(0,ab.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 19l9 2-9-18-9 18 9-2zm0 0v-8"})})})]})})]})},ho=({onSessionStopped:a})=>{let[b,c]=(0,ac.useState)("default"),{sessionState:d,isStreamReady:e,startSession:f,stopSession:g,connectionQuality:h,attachElement:i,sessionRef:j}=(()=>{let{sessionRef:a,sessionState:b,isStreamReady:c,connectionQuality:d}=hj(),e=(0,ac.useCallback)(async()=>await a.current.start(),[a]),f=(0,ac.useCallback)(async()=>await a.current.stop(),[a]);return{sessionState:b,isStreamReady:c,connectionQuality:d,startSession:e,stopSession:f,keepAlive:(0,ac.useCallback)(async()=>await a.current.keepAlive(),[a]),attachElement:(0,ac.useCallback)(b=>a.current.attach(b),[a]),sessionRef:a}})(),{isAvatarTalking:k,isUserTalking:l,isMuted:m,isActive:n,mute:o,unmute:p,restartWithDevice:q}=(()=>{let{sessionRef:a,isMuted:b,voiceChatState:c,isUserTalking:d,isAvatarTalking:e}=hj(),f=(0,ac.useCallback)(async()=>await a.current.voiceChat.mute(),[a]),g=(0,ac.useCallback)(async()=>await a.current.voiceChat.unmute(),[a]),h=(0,ac.useCallback)(async b=>await a.current.voiceChat.start(b?{deviceId:b,defaultMuted:!1}:{defaultMuted:!1}),[a]),i=(0,ac.useCallback)(()=>a.current.voiceChat.stop(),[a]),j=(0,ac.useCallback)(async b=>{console.log("Restarting voice chat with device:",b);try{return a.current.voiceChat.stop(),await new Promise(a=>setTimeout(a,100)),await a.current.voiceChat.start({deviceId:b,defaultMuted:!1}),console.log("Voice chat restarted successfully"),!0}catch(a){return console.error("Failed to restart voice chat:",a),!1}},[a]);return{mute:f,unmute:g,start:h,stop:i,restartWithDevice:j,isLoading:(0,ac.useMemo)(()=>c===aa.STARTING,[c]),isActive:(0,ac.useMemo)(()=>c===aa.ACTIVE,[c]),isMuted:b,isUserTalking:d,isAvatarTalking:e}})(),{interrupt:r}=(a=>{let{sessionRef:b}=hj(),c=(0,ac.useCallback)(()=>b.current.interrupt(),[b]),d=(0,ac.useCallback)(async c=>{if("FULL"===a)return b.current.repeat(c);if("CUSTOM"===a){let a=await fetch("/api/elevenlabs-text-to-speech",{method:"POST",body:JSON.stringify({text:c})}),{audio:d}=await a.json();return b.current.repeatAudio(d)}},[b,a]);return{interrupt:c,repeat:d,startListening:(0,ac.useCallback)(()=>b.current.startListening(),[b]),stopListening:(0,ac.useCallback)(()=>b.current.stopListening(),[b])}})("FULL"),{gatewayState:s,isProcessingAgent:t}=hj(),u=(0,ac.useRef)(null);(0,ac.useEffect)(()=>{d===X.DISCONNECTED&&a()},[d,a]),(0,ac.useEffect)(()=>{e&&u.current&&i(u.current)},[i,e]),(0,ac.useEffect)(()=>{d===X.INACTIVE&&f()},[f,d]);let v=(0,ac.useCallback)(async a=>{console.log("Changing microphone to:",a),c(a);try{let b=j.current?.voiceChat;b&&!await b.setDevice(a)&&n&&await q(a)}catch(b){console.error("Failed to set microphone device:",b),n&&await q(a)}},[j,n,q]),w=(0,ac.useCallback)(async()=>{m?await p():await o()},[m,o,p]),x=(0,ac.useRef)(null),[y,z]=(0,ac.useState)(0);return(0,ac.useEffect)(()=>{let a=()=>{if(x.current){let a=x.current.parentElement;a&&z(a.offsetHeight)}};return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[e]),(0,ab.jsxs)("div",{className:"w-full max-w-6xl flex gap-4 py-4 px-4",children:[(0,ab.jsxs)("div",{className:"flex-1 flex flex-col gap-4",children:[(0,ab.jsxs)("div",{ref:x,className:"relative w-full aspect-video overflow-hidden rounded-2xl bg-gray-800 flex flex-col items-center justify-center",children:[(0,ab.jsx)("video",{ref:u,autoPlay:!0,playsInline:!0,className:"w-full h-full object-contain"}),d!==X.CONNECTED&&(0,ab.jsx)("div",{className:"absolute inset-0 flex items-center justify-center bg-black/50",children:(0,ab.jsxs)("div",{className:"text-white text-lg",children:[d===X.CONNECTING&&"Connecting...",d===X.INACTIVE&&"Starting...",d===X.DISCONNECTING&&"Disconnecting..."]})}),(0,ab.jsx)("div",{className:"absolute bottom-4 right-4 flex items-center gap-2",children:(0,ab.jsx)("button",{className:"bg-red-500 hover:bg-red-600 text-white p-3 rounded-full transition-colors",onClick:()=>g(),title:"End conversation",children:(0,ab.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})}),(0,ab.jsxs)("div",{className:"absolute top-4 left-4 flex flex-col gap-2",children:[l&&(0,ab.jsxs)("div",{className:"bg-green-500/80 text-white text-xs px-2 py-1 rounded-full flex items-center gap-1",children:[(0,ab.jsx)("span",{className:"w-2 h-2 bg-white rounded-full animate-pulse"}),"You're speaking"]}),k&&(0,ab.jsxs)("div",{className:"bg-blue-500/80 text-white text-xs px-2 py-1 rounded-full flex items-center gap-1",children:[(0,ab.jsx)("span",{className:"w-2 h-2 bg-white rounded-full animate-pulse"}),"Agent speaking"]}),t&&(0,ab.jsxs)("div",{className:"bg-yellow-500/80 text-white text-xs px-2 py-1 rounded-full flex items-center gap-1",children:[(0,ab.jsx)("span",{className:"w-2 h-2 bg-white rounded-full animate-pulse"}),"Thinking..."]})]}),(0,ab.jsx)("div",{className:"absolute top-4 right-4 px-3 py-1.5 rounded-full text-xs bg-black/50 text-white",children:h})]}),(0,ab.jsxs)("div",{className:"w-full flex items-center justify-center gap-3",children:[(0,ab.jsx)(hl,{selectedDeviceId:b,onDeviceChange:v,showAudioLevel:!m}),(0,ab.jsx)("button",{onClick:w,className:`p-4 rounded-full transition-colors ${m?"bg-red-500 hover:bg-red-600":"bg-green-500 hover:bg-green-600"}`,title:m?"Click to unmute":"Click to mute",children:m?(0,ab.jsxs)("svg",{className:"w-6 h-6 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z"}),(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 3l18 18"})]}):(0,ab.jsx)("svg",{className:"w-6 h-6 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z"})})}),(0,ab.jsx)("button",{onClick:()=>r(),className:"bg-orange-500 hover:bg-orange-600 text-white p-3 rounded-full transition-colors",title:"Interrupt avatar",children:(0,ab.jsxs)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}),(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z"})]})})]}),(0,ab.jsx)("div",{className:"text-sm text-gray-400 text-center",children:"connected"!==s?(0,ab.jsx)("span",{className:"text-yellow-400",children:"Waiting for OpenClaw Gateway connection..."}):m?"Microphone is muted - click to speak":"Speak to chat with your OpenClaw agent"})]}),(0,ab.jsx)("div",{className:"w-[420px] flex flex-col overflow-hidden",style:{height:y>0?`${y}px`:"500px"},children:(0,ab.jsx)(hn,{})})]})},hp=({sessionAccessToken:a,onSessionStopped:b,onAvatarChange:c})=>(0,ab.jsx)(hi,{sessionAccessToken:a,children:(0,ab.jsx)(ho,{onSessionStopped:b,onAvatarChange:c})}),hq=({title:a,avatars:b,isExpanded:c,onToggle:d,onSelectAvatar:e,badge:f,showExpiredBadge:g=!0})=>{let h=b.filter(a=>!0===a.is_expired).length,i=b.length-h;return(0,ab.jsxs)("div",{className:"w-full",children:[(0,ab.jsxs)("button",{onClick:d,className:"w-full flex items-center justify-between px-3 py-2 bg-gray-800/50 hover:bg-gray-800/70 rounded-lg transition-colors",children:[(0,ab.jsxs)("div",{className:"flex items-center gap-2",children:[(0,ab.jsx)("svg",{className:`w-4 h-4 text-gray-400 transition-transform ${c?"rotate-90":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),(0,ab.jsx)("span",{className:"text-sm font-medium text-white",children:a}),f&&(0,ab.jsx)("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${f.color}`,children:f.text})]}),(0,ab.jsx)("span",{className:"text-xs text-gray-500",children:h>0?`${i} active / ${b.length} total`:`${b.length} available`})]}),c&&b.length>0&&(0,ab.jsx)("div",{className:"grid grid-cols-4 sm:grid-cols-5 md:grid-cols-6 gap-3 mt-3 px-1",children:b.map(a=>{let b=!0===a.is_expired;return(0,ab.jsxs)("button",{onClick:()=>e(a.id),disabled:b,className:`relative aspect-square rounded-lg overflow-hidden border-2 transition-all group ${b?"border-red-500/30 opacity-50 cursor-not-allowed":"border-white/10 hover:border-orange-500/50 hover:scale-105"}`,children:[a.preview_url?(0,ab.jsx)("img",{src:a.preview_url,alt:a.name,className:"w-full h-full object-cover"}):(0,ab.jsx)("div",{className:"w-full h-full bg-gray-700 flex items-center justify-center",children:(0,ab.jsx)("span",{className:"text-gray-400 text-xs text-center px-1",children:a.name.slice(0,10)})}),(0,ab.jsx)("div",{className:"absolute inset-0 bg-black/0 group-hover:bg-black/40 transition-colors flex items-end",children:(0,ab.jsx)("div",{className:"w-full p-2 bg-gradient-to-t from-black/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity",children:(0,ab.jsx)("span",{className:"text-white text-xs truncate block",children:a.name})})}),g&&b&&(0,ab.jsx)("div",{className:"absolute top-1 left-1 bg-red-500 text-white text-[10px] px-1.5 py-0.5 rounded",children:"Expired"})]},a.id)})}),c&&0===b.length&&(0,ab.jsxs)("div",{className:"text-center py-6 text-gray-500 text-sm",children:["No ",a.toLowerCase()," available"]})]})},hr=()=>{let[a,b]=(0,ac.useState)(""),[c,d]=(0,ac.useState)(null),[e,f]=(0,ac.useState)("connecting"),[g,h]=(0,ac.useState)([]),[i,j]=(0,ac.useState)([]),[k,l]=(0,ac.useState)(!0),[m,n]=(0,ac.useState)("disconnected"),[o,p]=(0,ac.useState)(!1),[q,r]=(0,ac.useState)(!0),s=(0,ac.useRef)(!1),t=(0,ac.useCallback)(async a=>{d(null),f("connecting");try{let c=await fetch("/api/start-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a?{avatarId:a}:{})});if(!c.ok){let a=await c.json();throw Error(a.error||"Failed to start session")}let{session_token:d}=await c.json();b(d),f("session")}catch(a){d(a.message),f("error")}},[]);(0,ac.useEffect)(()=>{(async()=>{l(!0);try{let a=await fetch("/api/get-avatars");if(a.ok){let b=await a.json(),c=b.customAvatars||[],d=b.publicAvatars||[];if(h(c),j(d),!s.current){s.current=!0;let a=c.find(a=>!a.is_expired),b=d[0],e=a||b;e?(console.log("[AutoStart] Starting session with avatar:",e.name),t(e.id)):f("ended")}}else f("error"),d("Failed to fetch avatars")}catch(a){console.error("Failed to fetch avatars:",a),f("error"),d("Failed to connect to avatar service")}finally{l(!1)}})();let a=ha();return a.onConnectionState(n),a.connect().catch(a=>{console.log("[OpenClaw] Gateway not available:",a.message)}),()=>{a.offConnectionState(n)}},[t]);let u=(0,ac.useCallback)(()=>{b(""),f("ended")},[]);return"connecting"===e?(0,ab.jsx)("div",{className:"w-full h-full flex flex-col items-center justify-center gap-6 p-4",children:(0,ab.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,ab.jsxs)("div",{className:"relative",children:[(0,ab.jsx)("div",{className:"w-16 h-16 border-4 border-orange-500/30 rounded-full"}),(0,ab.jsx)("div",{className:"absolute top-0 left-0 w-16 h-16 border-4 border-orange-500 rounded-full border-t-transparent animate-spin"})]}),(0,ab.jsxs)("div",{className:"text-center",children:[(0,ab.jsxs)("div",{className:"flex items-center justify-center gap-3 mb-4",children:[(0,ab.jsx)("div",{className:"w-10 h-10 bg-gradient-to-br from-orange-500 to-red-600 rounded-xl flex items-center justify-center",children:(0,ab.jsx)("span",{className:"text-xl",children:"\uD83E\uDD9E"})}),(0,ab.jsx)("h1",{className:"text-2xl font-bold text-white",children:"OpenClaw LiveAvatar"})]}),(0,ab.jsx)("p",{className:"text-gray-400 text-sm",children:"Connecting to your AI avatar..."})]})]})}):"error"===e?(0,ab.jsx)("div",{className:"w-full h-full flex flex-col items-center justify-center gap-6 p-4",children:(0,ab.jsxs)("div",{className:"w-full max-w-md flex flex-col items-center gap-6",children:[(0,ab.jsxs)("div",{className:"text-center",children:[(0,ab.jsx)("div",{className:"w-16 h-16 bg-red-500/20 rounded-full flex items-center justify-center mx-auto mb-4",children:(0,ab.jsx)("svg",{className:"w-8 h-8 text-red-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,ab.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),(0,ab.jsx)("h1",{className:"text-2xl font-bold text-white mb-2",children:"Connection Failed"}),(0,ab.jsx)("p",{className:"text-gray-400 mb-4",children:"Could not connect to the LiveAvatar service."}),c&&(0,ab.jsx)("div",{className:"text-red-400 bg-red-900/30 px-4 py-3 rounded-lg text-sm mb-4",children:c})]}),(0,ab.jsx)("button",{onClick:()=>f("idle"),className:"px-6 py-2 bg-gradient-to-r from-orange-500 to-red-600 hover:from-orange-600 hover:to-red-700 text-white rounded-lg transition-all",children:"Back to Avatar Selection"}),(0,ab.jsx)("p",{className:"text-xs text-gray-500 text-center",children:"Make sure your LIVEAVATAR_API_KEY is configured in .env.local"})]})}):"ended"===e?(0,ab.jsx)("div",{className:"w-full h-full flex flex-col items-center justify-center gap-6 p-4",children:(0,ab.jsxs)("div",{className:"w-full max-w-2xl flex flex-col items-center gap-6",children:[(0,ab.jsxs)("div",{className:"text-center",children:[(0,ab.jsxs)("div",{className:"flex items-center justify-center gap-3 mb-4",children:[(0,ab.jsx)("div",{className:"w-10 h-10 bg-gradient-to-br from-orange-500 to-red-600 rounded-xl flex items-center justify-center",children:(0,ab.jsx)("span",{className:"text-xl",children:"\uD83E\uDD9E"})}),(0,ab.jsx)("h1",{className:"text-2xl font-bold text-white",children:"OpenClaw LiveAvatar"})]}),(0,ab.jsx)("p",{className:"text-gray-400 mb-2",children:"Session ended. Select an avatar to start a new conversation."})]}),(0,ab.jsxs)("div",{className:"flex items-center gap-2 px-4 py-2 bg-gray-800/50 rounded-lg",children:[(0,ab.jsx)("div",{className:`w-2 h-2 rounded-full ${"connected"===m?"bg-green-500":"connecting"===m?"bg-yellow-500 animate-pulse":"bg-gray-500"}`}),(0,ab.jsx)("span",{className:"text-sm text-gray-300",children:"connected"===m?"OpenClaw Connected":"connecting"===m?"Connecting to OpenClaw...":"OpenClaw Disconnected"})]}),(0,ab.jsxs)("div",{className:"w-full space-y-4",children:[(0,ab.jsx)("h2",{className:"text-lg font-medium text-white",children:"Select an Avatar"}),k?(0,ab.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,ab.jsx)("div",{className:"w-8 h-8 border-2 border-orange-500/30 border-t-orange-500 rounded-full animate-spin"})}):0===g.length&&0===i.length?(0,ab.jsx)("div",{className:"text-center py-12 text-gray-400",children:"No avatars available. Check your LiveAvatar API key."}):(0,ab.jsxs)("div",{className:"space-y-4",children:[g.length>0&&(0,ab.jsx)(hq,{title:"Custom Avatars",avatars:g,isExpanded:o,onToggle:()=>p(!o),onSelectAvatar:t}),i.length>0&&(0,ab.jsx)(hq,{title:"Public Avatars",avatars:i,isExpanded:q,onToggle:()=>r(!q),onSelectAvatar:t,showExpiredBadge:!1})]})]}),(0,ab.jsxs)("p",{className:"text-xs text-gray-500 text-center",children:["Powered by"," ",(0,ab.jsx)("a",{href:"https://liveavatar.com",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:underline",children:"LiveAvatar"})," ","+"," ",(0,ab.jsx)("a",{href:"https://openclaw.ai",target:"_blank",rel:"noopener noreferrer",className:"text-orange-400 hover:underline",children:"OpenClaw"})]})]})}):(0,ab.jsx)(hp,{sessionAccessToken:a,onSessionStopped:u})}},9902:a=>{"use strict";a.exports=require("path")}};var b=require("../webpack-runtime.js");b.C(a);var c=b.X(0,[873,361],()=>b(b.s=8059));module.exports=c})();
|