diff --git a/docs/requirements/handoff-HEL-878.json b/docs/requirements/handoff-HEL-878.json new file mode 100644 index 0000000..56609f1 --- /dev/null +++ b/docs/requirements/handoff-HEL-878.json @@ -0,0 +1,43 @@ +{ + "baseline_version": "1.11", + "read_commit": "bf234570c0b6595a72f8dbc79e42c63685e08e01", + "task": "HEL-878(R5 前端接线,视觉总监本人设计并编码):在已认可的交谈界面上由用户主动开启/结束连续语音;按 HEL-877 后台契约(aba2aeb docs/runbook-hel877-voice.md §3)接 GET /api/voice/status、POST/DELETE /api/voice/session 与 cg.subtitle 字幕,复用 .12 :8090 既有 livekit-client 2.22.4 浏览器客户端;文字与语音同一位她、同一聊天记录,轮次从 /api/messages 回读不串台;所有退出路径立即停麦并清理;零真实模型/嵌入/合成/识别/采集/部署", + "requirement_ids": [ + "CG-006", "CG-010", "CG-011", "CG-018", "CG-020", + "VIS-001", "VIS-002", "VIS-003", "VIS-004", "VIS-005", "VIS-006", "VIS-007", "VIS-008", "VIS-009", "VIS-010", "VIS-011", "VIS-012", "VIS-013", + "UX-001", "UX-002", "UX-005", "UX-006", + "AM-001", + "GOV-001", "GOV-002", "GOV-003", "GOV-004", "GOV-005", "GOV-006", + "DEL-001" + ], + "deliverable": "自前端原稿 hel-875-proactive-wiring @ bf23457 起的补丁(仅 web/ 与本交接):1) web/src/voice/session.ts——VoiceController 生命周期(代次计数:任何迟到的 token/房间/麦克风/房间事件只清理不显示);顺序为诚实状态(只 GET status,不建房不采麦)→ 加载客户端 → 采麦(拒绝则服务端什么都不开)→ POST session(结束时已在途的请求等其返回并 DELETE,不留孤儿房)→ 加入并发布麦克风 → 等 worker 加入(20 s 未加入如实失败);状态取 worker 的 lk.agent.state,缺属性时按字幕保守推断;interim 为草稿、user_final 取消在途文字回复并触发回读、assistant_final 触发回读、error(φ) 只显示「未记入聊天」不入记录;文字盖过她的语音时静音残余音频直到她回到聆听;结束顺序为停麦→关房间与音频→DELETE;断网时本地立即停采,远端 DELETE 记入本浏览器 cg.voice.owed,恢复网络/再次进入/再次开启时补发(404 视为已清);页面卸载用 keepalive DELETE;mergeTurns/recentRows 只合并非主动留言的服务器行(主动留言仍走原 inbox 轮询),按 turn_id 与已有文字轮去重,pending 行回读至落定。2) web/src/voice/livekit.ts——同源懒加载 /vendor/livekit-client-2.22.4.umd.min.js(来源 .12:8090/static,SHA-256 见 web/VENDOR.md,未改 package.json/锁文件),回声消除采集、她的音频集中在隐藏容器(结束即暂停/清空/移除)、自动播放受阻时提供「点一下听她的声音」、加入可被结束即时中止。3) ChatPanel.tsx——真实模式麦克风按钮按状态诚实标注(不可用时淡化并说明原因),确认框说明麦克风、去向、同一份记忆、如何打断与停止、未经真机验收;沿用原演示 voice-row 位置与视觉语言做成玻璃单行(连接/等待为呼吸、聆听用你的颜色、她说话用她的光色,文字始终写明状态);文字流在无 final 时先查服务器行:被新轮取消即按已取消处理,不报连接中断、不回填草稿;离开交谈/Esc/结束交谈/导航卸载面板即结束语音;在途语音轮期间她的主动留言照原规则排队。4) RealApp.tsx——语音进行中顶栏写「语音(未经真机验收)」。5) components.css 新增 .voice-row.real 等样式(含手机)。6) 测试:web/tests/voice.test.ts 26 项;web/tests/hel878_mock.mjs(HEL-877 路由契约 mock)+ fake-livekit.js(脚本化替身,浏览器假音频设备)+ hel878_shots.mjs 浏览器检查 45 项与截图;web/VENDOR.md、README 语音段落。", + "acceptance": [ + "到达交谈页只发一次 GET /api/voice/status:不建房、不申请麦克风、不加载 LiveKit 客户端;configured=false / tts_ok=false / 无路由各有诚实说明,按钮淡化且不弹确认;voice=false 不被当作已接通(浏览器 1–2、单测 honest switch)", + "用户确认后:一个会话、一个麦克风、发布到该房间;等待 worker 时显示等待而非已接通;聆听/思考/说话随 lk.agent.state 切换;字幕草稿、φ 原句(标未记入聊天且不入记录)均按契约(浏览器 4–6)", + "语音轮只从 /api/messages 进入舞台与完整记录,各一次,与文字同一段记录(浏览器 5);前端从不 POST /api/chat 或 /api/chat/received(单测)", + "双通道:文字盖过她说话时残余音频静音、回到聆听再恢复;语音打断在途文字回复时该轮按已取消处理,无“连接中断/重试”、不回填草稿,记录显示已取消(浏览器 7–8)", + "结束语音/导航离开/Esc/结束交谈/房间掉线/麦克风被撤销/服务端拒绝/重复开关后:本地麦克风 track 全部 ended、她的音频与容器移除、服务端房间删除;迟到事件不复活旧会话(浏览器 10–14,单测 lifecycle 15 项)", + "断网:本地立即停麦停音频,远端房间如实记为欠删(不冒充已删);恢复网络后补发 DELETE 并清除记录;页面卸载 keepalive DELETE 到达(浏览器 14);欠删跨页面保留、404 视为已清(单测)", + "电脑 1440×900 与手机 390×844(2x)、月光/雾光两主题截图;手机语音行不出屏(浏览器 15)", + "真实 livekit-client 2.22.4 构建中,适配器用到的全部名称存在(RoomEvent 七项、Track.Source.Microphone、ParticipantKind.AGENT、createLocalAudioTrack、Room 方法/属性);仅 API 面核对,未连接", + "演示入口零语音请求;工程:tsc 0 错,eslint 0 错(1 条既有警告),vitest 7 文件 81/81,vite build 通过" + ], + "deferred": [ + "真实通话全部未测(R5 真机验收交 HEL-879 统一审核):连续 3 轮、开口打断约 1 s 停声、结束停麦无残音、回声、首包延迟、移动端 Safari/Chrome 麦克风与自动播放、自签 HTTPS 信任;浏览器检查用的是脚本化 LiveKit 替身与 Chromium 假音频设备,不是 WebRTC 通话", + "lk.agent.state 属性名按 livekit-agents 1.x 惯例接入,并在缺失时用字幕推断;worker 实际是否发布该属性须真机确认", + "断网时服务端房间的即时删除在物理上做不到:依赖 worker 在浏览器参与者离开后结束任务与会话登记过期(runbook §3.4/3.5,后台行为未在本卡实测),本页恢复网络或下次进入时补发 DELETE", + "CG-011 语音内主动开口:worker._maybe_open_proactive 仍是空操作,前端未虚构;后台最小需求见 runbook §3.6(会话内取已落库 proactive 行 session.say 原文、可打断、无新回执通道),呈现节奏待总管/视觉总监另定;目前语音开启时她的主动留言仍以文字进入并在她思考/说话时排队", + "她说话时没有逐字字幕(契约只在播放完成后发 assistant_final);舞台在落库后呈现全文。若要边说边显示需后台发增量字幕,属契约变更", + "D1 音色、D3 设备信任、测试额度由总管与白栖知沟通;本卡未接触任何服务、凭据或部署", + "原版 Python 需求检查未在本运行时执行(无 Python、无 git),须总管/总工对实际目标分支与 origin/main 含/不含本交接复跑;需与 HEL-882 最新母线同步后再审", + "R6 天气/素材/备份、R7 视觉观察、CG-028/029 口型与真实视频仍由主卡 HEL-797 承接;整体沉浸体验由白栖知验收" + ], + "requirement_changes": [], + "verification": [ + "读取:前端 bf234570(总管输入包 frontend/,HEL-875/880 原作者原稿);后台契约 aba2aeb(输入包 voice-backend/:runbook-hel877-voice.md、voice/router.py、session.py、worker.py、handoff-HEL-877.json、requirements v1.11 含 comment-evidence-full-experience-20261026.json);已读 AGENTS.md、README/current(CG-006/010/011/018/020、UX-005/006、VIS-013)/coverage/changes、integration-plan-v1 R5 与 D1/D3、voice-r5-readiness-HEL876.md", + "web:tsc --noEmit 0;eslint src 0 错;vitest run 7 文件 81/81(原 55 + 语音 26,含变异检查:去掉迟到授权回收或代次判定各使对应用例失败);vite build 通过(node_modules 沿用 HEL-875 同一锁文件离线树,无新增依赖、无下载)", + "浏览器:node tests/hel878_mock.mjs 8878 + node tests/hel878_shots.mjs 8878,45/45(无头 Edge,--use-fake-device-for-media-stream;脚本化 LiveKit 替身;本机回环);中断前一轮为 39/43,失败的 4 项(语音打断文字误报、断网远端清理、卸载检查受其连带)经本轮修复后通过", + "唯一外部读取:一次只读 GET .12:8090 页面及其 /static/livekit-client.umd.min.js 以复用既有客户端;无模型、嵌入、合成、识别请求,无真实麦克风/摄像头,无部署或服务改动", + "需求结构检查:本运行时无 Python/git,未执行原版脚本,不声称通过;仅用 HEL-875 留下的 Node 移植版辅助:以 bf23457 为基含本交接通过(60 项);以后台 aba2aeb 的需求文件为基失败「历史来源必须保留」,原因是该线已追加 comment-evidence-full-experience-20261026.json 而前端原稿尚未包含,与本补丁无关,合入母线前须先同步该需求目录" + ] +} diff --git a/web/README.md b/web/README.md index 484f123..e10d8c4 100644 --- a/web/README.md +++ b/web/README.md @@ -32,4 +32,6 @@ python3 -m pytest -q # 现有 Python 核心,仓库根目录 脚本在随机 loopback 端口同步测试静态产物,结束关闭浏览器和服务;截图写入 `docs/frontend/screenshots/`(不进入前端产物)。没有持续预览服务或部署。真实手机、Safari、真实麦克风/摄像头、ASR/TTS、后台生活和口型均未测试。 +语音(HEL-878,R5 前端接线):交谈页麦克风按钮按 `GET /api/voice/status` 诚实显示;用户确认后才申请麦克风、`POST /api/voice/session` 取短时 token,用 `public/vendor/` 下既有 livekit-client 加入房间(来源见 `VENDOR.md`)。状态、字幕、结束与清理逻辑在 `src/voice/`。离线检查:`npm test`(含 `tests/voice.test.ts`),构建后 `node tests/hel878_mock.mjs 8878` + `node tests/hel878_shots.mjs 8878`(假 LiveKit + 浏览器假音频设备,不是真实通话)。真实通话、真机、Safari、回声与打断时延均未测。 + 接线边界、交付与测试记录见 `docs/frontend/IMPLEMENTATION.md`。 diff --git a/web/VENDOR.md b/web/VENDOR.md new file mode 100644 index 0000000..928b465 --- /dev/null +++ b/web/VENDOR.md @@ -0,0 +1,9 @@ +Vendored browser client (HEL-878) + +`public/vendor/livekit-client-2.22.4.umd.min.js` + +- What: livekit-client 2.22.4, UMD build (global `LivekitClient`), Apache-2.0. The file header names its origin: jsdelivr `/npm/livekit-client@2.22.4/dist/livekit-client.umd.js`. +- Where it came from: the existing .12 call page, `https://192.168.200.12:8090/static/livekit-client.umd.min.js` (the page that verified LAN microphone calls), read once with a plain GET on 2026-10-26. Not downloaded from npm or a CDN, nothing installed. +- SHA-256: `040DB4C0DB72E7F7599CD0E06B0F58F95E0082A395CDDE410CA26224A79A0626` (598 796 bytes). +- Loaded only when the user switches voice on (`src/voice/livekit.ts`, same origin, no CDN at run time). Text and demo paths never fetch it. +- Not an npm dependency: package.json and the lock file are unchanged. Upgrading means replacing this file and the name in `LIVEKIT_SRC`. diff --git a/web/public/vendor/livekit-client-2.22.4.umd.min.js b/web/public/vendor/livekit-client-2.22.4.umd.min.js new file mode 100644 index 0000000..e31357a --- /dev/null +++ b/web/public/vendor/livekit-client-2.22.4.umd.min.js @@ -0,0 +1,8 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/livekit-client@2.22.4/dist/livekit-client.umd.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).LivekitClient={})}(this,(function(e){"use strict";function t(e,t){return t.forEach((function(t){t&&"string"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(n){if("default"!==n&&!(n in e)){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}}))})),Object.freeze(e)}var n=Object.defineProperty,i=(e,t,i)=>((e,t,i)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class r{constructor(){i(this,"_locking"),i(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){let e;this._locks+=1;const t=new Promise((t=>e=()=>{this._locks-=1,t()})),n=this._locking.then((()=>e));return this._locking=this._locking.then((()=>t)),n}}function s(e,t){if(!e)throw new Error(t)}function a(e){if("number"!=typeof e)throw new Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>2147483647||e<-2147483648)throw new Error("invalid int 32: "+e)}function o(e){if("number"!=typeof e)throw new Error("invalid uint 32: "+typeof e);if(!Number.isInteger(e)||e>4294967295||e<0)throw new Error("invalid uint 32: "+e)}function c(e){if("number"!=typeof e)throw new Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>34028234663852886e22||e<-34028234663852886e22))throw new Error("invalid float 32: "+e)}const d=Symbol("@bufbuild/protobuf/enum-type");function l(e){const t=e[d];return s(t,"missing enum type on enum object"),t}function u(e,t,n,i){e[d]=h(t,n.map((t=>({no:t.no,name:t.name,localName:e[t.no]}))))}function h(e,t,n){const i=Object.create(null),r=Object.create(null),s=[];for(const a of t){const e=m(a);s.push(e),i[a.name]=e,r[a.no]=e}return{typeName:e,values:s,findName:e=>i[e],findNumber:e=>r[e]}}function p(e,t,n){const i={};for(const r of t){const e=m(r);i[e.localName]=e.no,i[e.no]=e.localName}return u(i,e,t),i}function m(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}class g{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,t){const n=this.getType().runtime.bin,i=n.makeReadOptions(t);return n.readMessage(this,i.readerFactory(e),e.byteLength,i),this}fromJson(e,t){const n=this.getType(),i=n.runtime.json,r=i.makeReadOptions(t);return i.readMessage(n,e,r,this),this}fromJsonString(e,t){let i;try{i=JSON.parse(e)}catch(n){throw new Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(n instanceof Error?n.message:String(n)))}return this.fromJson(i,t)}toBinary(e){const t=this.getType().runtime.bin,n=t.makeWriteOptions(e),i=n.writerFactory();return t.writeMessage(this,i,n),i.finish()}toJson(e){const t=this.getType().runtime.json,n=t.makeWriteOptions(e);return t.writeMessage(this,n)}toJsonString(e){var t;const n=this.toJson(e);return JSON.stringify(n,null,null!==(t=null==e?void 0:e.prettySpaces)&&void 0!==t?t:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function v(){let e=0,t=0;for(let i=0;i<28;i+=7){let n=this.buf[this.pos++];if(e|=(127&n)<>4,!(128&n))return this.assertBounds(),[e,t];for(let i=3;i<=31;i+=7){let n=this.buf[this.pos++];if(t|=(127&n)<>>s,r=!(i>>>7==0&&0==t),a=255&(r?128|i:i);if(n.push(a),!r)return}const i=e>>>28&15|(7&t)<<4,r=!!(t>>3);if(n.push(255&(r?128|i:i)),r){for(let e=3;e<31;e+=7){const i=t>>>e,r=!(i>>>7==0),s=255&(r?128|i:i);if(n.push(s),!r)return}n.push(t>>>31&1)}}const k=4294967296;function y(e){const t="-"===e[0];t&&(e=e.slice(1));const n=1e6;let i=0,r=0;function s(t,s){const a=Number(e.slice(t,s));r*=n,i=i*n+a,i>=k&&(r+=i/k|0,i%=k)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),t?S(i,r):T(i,r)}function b(e,t){var n=function(e,t){return{lo:e>>>0,hi:t>>>0}}(e,t);if(e=n.lo,(t=n.hi)<=2097151)return String(k*t+e);const i=16777215&(e>>>24|t<<8),r=t>>16&65535;let s=(16777215&e)+6777216*i+6710656*r,a=i+8147497*r,o=2*r;const c=1e7;return s>=c&&(a+=Math.floor(s/c),s%=c),a>=c&&(o+=Math.floor(a/c),a%=c),o.toString()+E(a)+E(s)}function T(e,t){return{lo:0|e,hi:0|t}}function S(e,t){return t=~t,e?e=1+~e:t+=1,T(e,t)}const E=e=>{const t=String(e);return"0000000".slice(t.length)+t};function C(e,t){if(e>=0){for(;e>127;)t.push(127&e|128),e>>>=7;t.push(e)}else{for(let n=0;n<9;n++)t.push(127&e|128),e>>=7;t.push(1)}}function w(){let e=this.buf[this.pos++],t=127&e;if(!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<7,!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<14,!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<21,!(128&e))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(15&e)<<28;for(let n=5;128&e&&n<10;n++)e=this.buf[this.pos++];if(128&e)throw new Error("invalid varint");return this.assertBounds(),t>>>0}const R=function(){const e=new DataView(new ArrayBuffer(8));if("function"==typeof BigInt&&"function"==typeof e.getBigInt64&&"function"==typeof e.getBigUint64&&"function"==typeof e.setBigInt64&&"function"==typeof e.setBigUint64&&("object"!=typeof process||"object"!=typeof process.env||"1"!==process.env.BUF_BIGINT_DISABLE)){const t=BigInt("-9223372036854775808"),n=BigInt("9223372036854775807"),i=BigInt("0"),r=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(e){const i="bigint"==typeof e?e:BigInt(e);if(i>n||ir||t(e.setInt32(0,t,!0),e.setInt32(4,n,!0),e.getBigInt64(0,!0)),uDec:(t,n)=>(e.setInt32(0,t,!0),e.setInt32(4,n,!0),e.getBigUint64(0,!0))}}const t=e=>s(/^-?[0-9]+$/.test(e),"int64 invalid: ".concat(e)),n=e=>s(/^[0-9]+$/.test(e),"uint64 invalid: ".concat(e));return{zero:"0",supported:!1,parse:e=>("string"!=typeof e&&(e=e.toString()),t(e),e),uParse:e=>("string"!=typeof e&&(e=e.toString()),n(e),e),enc:e=>("string"!=typeof e&&(e=e.toString()),t(e),y(e)),uEnc:e=>("string"!=typeof e&&(e=e.toString()),n(e),y(e)),dec:(e,t)=>function(e,t){let n=T(e,t);const i=2147483648&n.hi;i&&(n=S(n.lo,n.hi));const r=b(n.lo,n.hi);return i?"-"+r:r}(e,t),uDec:(e,t)=>b(e,t)}}();var P,I,_;function M(e,t,n){if(t===n)return!0;if(e==P.BYTES){if(!(t instanceof Uint8Array&&n instanceof Uint8Array))return!1;if(t.length!==n.length)return!1;for(let e=0;ee.length)&&(t=e.length);for(var n=0,i=Array(t);n>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(o(e);e>127;)this.buf.push(127&e|128),e>>>=7;return this.buf.push(e),this}int32(e){return a(e),C(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.textEncoder.encode(e);return this.uint32(t.byteLength),this.raw(t)}float(e){c(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){o(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){a(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return a(e),C(e=(e<<1^e>>31)>>>0,this.buf),this}sfixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),i=R.enc(e);return n.setInt32(0,i.lo,!0),n.setInt32(4,i.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),i=R.uEnc(e);return n.setInt32(0,i.lo,!0),n.setInt32(4,i.hi,!0),this.raw(t)}int64(e){let t=R.enc(e);return f(t.lo,t.hi,this.buf),this}sint64(e){let t=R.enc(e),n=t.hi>>31;return f(t.lo<<1^n,(t.hi<<1|t.lo>>>31)^n,this.buf),this}uint64(e){let t=R.uEnc(e);return f(t.lo,t.hi,this.buf),this}}class H{constructor(e,t){this.varint64=v,this.uint32=w,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=null!=t?t:new TextDecoder}tag(){let e=this.uint32(),t=e>>>3,n=7&e;if(t<=0||n<0||n>5)throw new Error("illegal tag: field no "+t+" wire type "+n);return[t,n]}skip(e,t){let n=this.pos;switch(e){case _.Varint:for(;128&this.buf[this.pos++];);break;case _.Bit64:this.pos+=4;case _.Bit32:this.pos+=4;break;case _.LengthDelimited:let n=this.uint32();this.pos+=n;break;case _.StartGroup:for(;;){const e=B(this.tag(),2),n=e[0],i=e[1];if(i===_.EndGroup){if(void 0!==t&&n!==t)throw new Error("invalid end group tag");break}this.skip(i,n)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return 0|this.uint32()}sint32(){let e=this.uint32();return e>>>1^-(1&e)}int64(){return R.dec(...this.varint64())}uint64(){return R.uDec(...this.varint64())}sint64(){let e=B(this.varint64(),2),t=e[0],n=e[1],i=-(1&t);return t=(t>>>1|(1&n)<<31)^i,n=n>>>1^i,R.dec(t,n)}bool(){let e=B(this.varint64(),2),t=e[0],n=e[1];return 0!==t||0!==n}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return R.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return R.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.textDecoder.decode(this.bytes())}}function K(e){const t=e.field.localName,n=Object.create(null);return n[t]=function(e){const t=e.field;if(t.repeated)return[];if(void 0!==t.default)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return D(t.T,t.L);case"message":const e=t.T,n=new e;return e.fieldWrapper?e.fieldWrapper.unwrapField(n):n;case"map":throw"map fields are not allowed to be extensions"}}(e),[n,()=>n[t]]}let z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),G=[];for(let rp=0;rp>4,a=n,s=2;break;case 2:i[r++]=(15&a)<<4|(60&n)>>2,a=n,s=3;break;case 3:i[r++]=(3&a)<<6|n,s=0}}if(1==s)throw Error("invalid base64 string.");return i.subarray(0,r)},enc(e){let t,n="",i=0,r=0;for(let s=0;s>2],r=(3&t)<<4,i=1;break;case 1:n+=z[r|t>>4],r=(15&t)<<2,i=2;break;case 2:n+=z[r|t>>6],n+=z[63&t],i=0}return i&&(n+=z[r],n+="=",1==i&&(n+="=")),n}};function Q(e,t,n){Z(t,e);const i=t.runtime.bin.makeReadOptions(n),r=function(e,t){if(!t.repeated&&("enum"==t.kind||"scalar"==t.kind)){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter((e=>e.no===t.no))}(e.getType().runtime.bin.listUnknownFields(e),t.field),s=B(K(t),2),a=s[0],o=s[1];for(const c of r)t.runtime.bin.readField(a,i.readerFactory(c.data),t.field,c.wireType,i);return o()}function Y(e,t,n,i){Z(t,e);const r=t.runtime.bin.makeReadOptions(i),s=t.runtime.bin.makeWriteOptions(i);if(X(e,t)){const n=e.getType().runtime.bin.listUnknownFields(e).filter((e=>e.no!=t.field.no));e.getType().runtime.bin.discardUnknownFields(e);for(const t of n)e.getType().runtime.bin.onUnknownField(e,t.no,t.wireType,t.data)}const a=s.writerFactory();let o=t.field;o.opt||o.repeated||"enum"!=o.kind&&"scalar"!=o.kind||(o=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(o,n,a,s);const c=r.readerFactory(a.finish());for(;c.pose.no==t.field.no))}function Z(e,t){s(e.extendee.typeName==t.getType().typeName,"extension ".concat(e.typeName," can only be applied to message ").concat(e.extendee.typeName))}function $(e,t){const n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?void 0!==t[n]:"enum"==e.kind?t[n]!==e.T.values[0].no:!O(e.T,t[n]);case"message":return void 0!==t[n];case"map":return Object.keys(t[n]).length>0}}function ee(e,t){const n=e.localName,i=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=i?e.T.values[0].no:void 0;break;case"scalar":t[n]=i?D(e.T,e.L):void 0;break;case"message":t[n]=void 0}}function te(e,t){if(null===e||"object"!=typeof e)return!1;if(!Object.getOwnPropertyNames(g.prototype).every((t=>t in e&&"function"==typeof e[t])))return!1;const n=e.getType();return null!==n&&"function"==typeof n&&"typeName"in n&&"string"==typeof n.typeName&&(void 0===t||n.typeName==t.typeName)}function ne(e,t){return te(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}P.DOUBLE,P.FLOAT,P.INT64,P.UINT64,P.INT32,P.UINT32,P.BOOL,P.STRING,P.BYTES;const ie={ignoreUnknownFields:!1},re={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function se(e){return e?Object.assign(Object.assign({},ie),e):ie}function ae(e){return e?Object.assign(Object.assign({},re),e):re}const oe=Symbol(),ce=Symbol();function de(e){if(null===e)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":'"'.concat(e.split('"').join('\\"'),'"');default:return String(e)}}function le(e,t,i,r,a){let o=i.localName;if(i.repeated){if(s("map"!=i.kind),null===t)return;if(!Array.isArray(t))throw new Error("cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(t)));const c=e[o];for(const e of t){if(null===e)throw new Error("cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(e)));switch(i.kind){case"message":c.push(i.T.fromJson(e,r));break;case"enum":const t=pe(i.T,e,r.ignoreUnknownFields,!0);t!==ce&&c.push(t);break;case"scalar":try{c.push(he(i.T,e,i.L,!0))}catch(n){let r="cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(e));throw n instanceof Error&&n.message.length>0&&(r+=": ".concat(n.message)),new Error(r)}}}}else if("map"==i.kind){if(null===t)return;if("object"!=typeof t||Array.isArray(t))throw new Error("cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(t)));const s=e[o];for(const e of Object.entries(t)){var c=B(e,2);const o=c[0],d=c[1];if(null===d)throw new Error("cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: map value null"));let l;try{l=ue(i.K,o)}catch(n){let r="cannot decode map key for field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(t));throw n instanceof Error&&n.message.length>0&&(r+=": ".concat(n.message)),new Error(r)}switch(i.V.kind){case"message":s[l]=i.V.T.fromJson(d,r);break;case"enum":const e=pe(i.V.T,d,r.ignoreUnknownFields,!0);e!==ce&&(s[l]=e);break;case"scalar":try{s[l]=he(i.V.T,d,I.BIGINT,!0)}catch(n){let r="cannot decode map value for field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(t));throw n instanceof Error&&n.message.length>0&&(r+=": ".concat(n.message)),new Error(r)}}}}else switch(i.oneof&&(e=e[i.oneof.localName]={case:o},o="value"),i.kind){case"message":const s=i.T;if(null===t&&"google.protobuf.Value"!=s.typeName)return;let c=e[o];te(c)?c.fromJson(t,r):(e[o]=c=s.fromJson(t,r),s.fieldWrapper&&!i.oneof&&(e[o]=s.fieldWrapper.unwrapField(c)));break;case"enum":const d=pe(i.T,t,r.ignoreUnknownFields,!1);switch(d){case oe:ee(i,e);break;case ce:break;default:e[o]=d}break;case"scalar":try{const n=he(i.T,t,i.L,!1);if(n===oe)ee(i,e);else e[o]=n}catch(n){let r="cannot decode field ".concat(a.typeName,".").concat(i.name," from JSON: ").concat(de(t));throw n instanceof Error&&n.message.length>0&&(r+=": ".concat(n.message)),new Error(r)}}}function ue(e,t){if(e===P.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1}return he(e,t,I.BIGINT,!0).toString()}function he(e,t,i,r){if(null===t)return r?D(e,i):oe;switch(e){case P.DOUBLE:case P.FLOAT:if("NaN"===t)return Number.NaN;if("Infinity"===t)return Number.POSITIVE_INFINITY;if("-Infinity"===t)return Number.NEGATIVE_INFINITY;if(""===t)break;if("string"==typeof t&&t.trim().length!==t.length)break;if("string"!=typeof t&&"number"!=typeof t)break;const r=Number(t);if(Number.isNaN(r))break;if(!Number.isFinite(r))break;return e==P.FLOAT&&c(r),r;case P.INT32:case P.FIXED32:case P.SFIXED32:case P.SINT32:case P.UINT32:let s;if("number"==typeof t?s=t:"string"==typeof t&&t.length>0&&t.trim().length===t.length&&(s=Number(t)),void 0===s)break;return e==P.UINT32||e==P.FIXED32?o(s):a(s),s;case P.INT64:case P.SFIXED64:case P.SINT64:if("number"!=typeof t&&"string"!=typeof t)break;const d=R.parse(t);return i?d.toString():d;case P.FIXED64:case P.UINT64:if("number"!=typeof t&&"string"!=typeof t)break;const l=R.uParse(t);return i?l.toString():l;case P.BOOL:if("boolean"!=typeof t)break;return t;case P.STRING:if("string"!=typeof t)break;try{encodeURIComponent(t)}catch(n){throw new Error("invalid UTF8")}return t;case P.BYTES:if(""===t)return new Uint8Array(0);if("string"!=typeof t)break;return J.dec(t)}throw new Error}function pe(e,t,n,i){if(null===t)return"google.protobuf.NullValue"==e.typeName?0:i?e.values[0].no:oe;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":const i=e.findName(t);if(void 0!==i)return i.no;if(n)return ce}throw new Error("cannot decode enum ".concat(e.typeName," from JSON: ").concat(de(t)))}function me(e){return!(!e.repeated&&"map"!=e.kind)||!e.oneof&&("message"!=e.kind&&(!e.opt&&!e.req))}function ge(e,t,n){if("map"==e.kind){s("object"==typeof t&&null!=t);const o={},c=Object.entries(t);switch(e.V.kind){case"scalar":for(const n of c){var i=B(n,2);const t=i[0],r=i[1];o[t.toString()]=fe(e.V.T,r)}break;case"message":for(const e of c){var r=B(e,2);const t=r[0],i=r[1];o[t.toString()]=i.toJson(n)}break;case"enum":const t=e.V.T;for(const e of c){var a=B(e,2);const i=a[0],r=a[1];o[i.toString()]=ve(t,r,n.enumAsInteger)}}return n.emitDefaultValues||c.length>0?o:void 0}if(e.repeated){s(Array.isArray(t));const i=[];switch(e.kind){case"scalar":for(let n=0;n0?i:void 0}switch(e.kind){case"scalar":return fe(e.T,t);case"enum":return ve(e.T,t,n.enumAsInteger);case"message":return ne(e.T,t).toJson(n)}}function ve(e,t,n){var i;if(s("number"==typeof t),"google.protobuf.NullValue"==e.typeName)return null;if(n)return t;const r=e.findNumber(t);return null!==(i=null==r?void 0:r.name)&&void 0!==i?i:t}function fe(e,t){switch(e){case P.INT32:case P.SFIXED32:case P.SINT32:case P.FIXED32:case P.UINT32:return s("number"==typeof t),t;case P.FLOAT:case P.DOUBLE:return s("number"==typeof t),Number.isNaN(t)?"NaN":t===Number.POSITIVE_INFINITY?"Infinity":t===Number.NEGATIVE_INFINITY?"-Infinity":t;case P.STRING:return s("string"==typeof t),t;case P.BOOL:return s("boolean"==typeof t),t;case P.UINT64:case P.FIXED64:case P.INT64:case P.SFIXED64:case P.SINT64:return s("bigint"==typeof t||"string"==typeof t||"number"==typeof t),t.toString();case P.BYTES:return s(t instanceof Uint8Array),J.enc(t)}}const ke=Symbol("@bufbuild/protobuf/unknown-fields"),ye={readUnknownFields:!0,readerFactory:e=>new H(e)},be={writeUnknownFields:!0,writerFactory:()=>new W};function Te(e){return e?Object.assign(Object.assign({},ye),e):ye}function Se(e){return e?Object.assign(Object.assign({},be),e):be}function Ee(e,t,n,i,r){let s=n.repeated,a=n.localName;switch(n.oneof&&((e=e[n.oneof.localName]).case!=a&&delete e.value,e.case=a,a="value"),n.kind){case"scalar":case"enum":const o="enum"==n.kind?P.INT32:n.T;let c=Re;if("scalar"==n.kind&&n.L>0&&(c=we),s){let n=e[a];if(i==_.LengthDelimited&&o!=P.STRING&&o!=P.BYTES){let e=t.uint32()+t.pos;for(;t.pose.no-t.no))),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let t;for(const n of this.list())n.oneof?n.oneof!==t&&(t=n.oneof,e.push(t)):e.push(n)}return this.members}}function Ne(e,t){const n=Ue(e);return t?n:Ve(qe(n))}const xe=Ue;function Ue(e){let t=!1;const n=[];for(let i=0;i"".concat(e,"$"),qe=e=>Be.has(e)?je(e):e,Ve=e=>Fe.has(e)?je(e):e;class We{constructor(e){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=e,this.localName=Ne(e,!1)}addField(e){s(e.oneof===this,"field ".concat(e.name," not one of ").concat(this.name)),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let e=0;enew Le(e,(e=>function(e){var t,n,i,r,s,a;const o=[];let c;for(const d of"function"==typeof e?e():e){const e=d;if(e.localName=Ne(d.name,void 0!==d.oneof),e.jsonName=null!==(t=d.jsonName)&&void 0!==t?t:xe(d.name),e.repeated=null!==(n=d.repeated)&&void 0!==n&&n,"scalar"==d.kind&&(e.L=null!==(i=d.L)&&void 0!==i?i:I.BIGINT),e.delimited=null!==(r=d.delimited)&&void 0!==r&&r,e.req=null!==(s=d.req)&&void 0!==s&&s,e.opt=null!==(a=d.opt)&&void 0!==a&&a,void 0===d.packed&&(e.packed="enum"==d.kind||"scalar"==d.kind&&d.T!=P.BYTES&&d.T!=P.STRING),void 0!==d.oneof){const t="string"==typeof d.oneof?d.oneof:d.oneof.name;c&&c.name==t||(c=new We(t)),e.oneof=c,c.addField(e)}o.push(e)}return o}(e))),ze=e=>{for(const t of e.getType().fields.byMember()){if(t.opt)continue;const n=t.localName,i=e;if(t.repeated)i[n]=[];else switch(t.kind){case"oneof":i[n]={case:void 0};break;case"enum":i[n]=0;break;case"map":i[n]={};break;case"scalar":i[n]=D(t.T,t.L)}}},{syntax:"proto3",json:{makeReadOptions:se,makeWriteOptions:ae,readMessage(e,t,n,i){if(null==t||Array.isArray(t)||"object"!=typeof t)throw new Error("cannot decode message ".concat(e.typeName," from JSON: ").concat(de(t)));i=null!=i?i:new e;const r=new Map,s=n.typeRegistry;for(const o of Object.entries(t)){var a=B(o,2);const t=a[0],c=a[1],d=e.fields.findJsonName(t);if(d){if(d.oneof){if(null===c&&"scalar"==d.kind)continue;const n=r.get(d.oneof);if(void 0!==n)throw new Error("cannot decode message ".concat(e.typeName,' from JSON: multiple keys for oneof "').concat(d.oneof.name,'" present: "').concat(n,'", "').concat(t,'"'));r.set(d.oneof,t)}le(i,c,d,n,e)}else{let r=!1;if((null==s?void 0:s.findExtension)&&t.startsWith("[")&&t.endsWith("]")){const a=s.findExtension(t.substring(1,t.length-1));if(a&&a.extendee.typeName==e.typeName){r=!0;const e=B(K(a),2),t=e[0],s=e[1];le(t,c,a.field,n,a),Y(i,a,s(),n)}}if(!r&&!n.ignoreUnknownFields)throw new Error("cannot decode message ".concat(e.typeName,' from JSON: key "').concat(t,'" is unknown'))}}return i},writeMessage(e,t){const i=e.getType(),r={};let s;try{for(s of i.fields.byNumber()){if(!$(s,e)){if(s.req)throw"required field not set";if(!t.emitDefaultValues)continue;if(!me(s))continue}const n=ge(s,s.oneof?e[s.oneof.localName].value:e[s.localName],t);void 0!==n&&(r[t.useProtoFieldName?s.name:s.jsonName]=n)}const n=t.typeRegistry;if(null==n?void 0:n.findExtensionFor)for(const s of i.runtime.bin.listUnknownFields(e)){const a=n.findExtensionFor(i.typeName,s.no);if(a&&X(e,a)){const n=Q(e,a,t),i=ge(a.field,n,t);void 0!==i&&(r[a.field.jsonName]=i)}}}catch(n){const t=s?"cannot encode field ".concat(i.typeName,".").concat(s.name," to JSON"):"cannot encode message ".concat(i.typeName," to JSON"),r=n instanceof Error?n.message:String(n);throw new Error(t+(r.length>0?": ".concat(r):""))}return r},readScalar:(e,t,n)=>he(e,t,null!=n?n:I.BIGINT,!0),writeScalar(e,t,n){if(void 0!==t)return n||O(e,t)?fe(e,t):void 0},debug:de},bin:{makeReadOptions:Te,makeWriteOptions:Se,listUnknownFields(e){var t;return null!==(t=e[ke])&&void 0!==t?t:[]},discardUnknownFields(e){delete e[ke]},writeUnknownFields(e,t){const n=e[ke];if(n)for(const i of n)t.tag(i.no,i.wireType).raw(i.data)},onUnknownField(e,t,n,i){const r=e;Array.isArray(r[ke])||(r[ke]=[]),r[ke].push({no:t,wireType:n,data:i})},readMessage(e,t,n,i,r){const s=e.getType(),a=r?t.len:t.pos+n;let o,c;for(;t.poste(e,d)?e:new d(e)));else{const e=a[n];d.fieldWrapper?"google.protobuf.BytesValue"===d.typeName?s[n]=Ae(e):s[n]=e:s[n]=te(e,d)?e:new d(e)}}}},equals:(e,t,n)=>t===n||!(!t||!n)&&e.fields.byMember().every((e=>{const i=t[e.localName],r=n[e.localName];if(e.repeated){if(i.length!==r.length)return!1;switch(e.kind){case"message":return i.every(((t,n)=>e.T.equals(t,r[n])));case"scalar":return i.every(((t,n)=>M(e.T,t,r[n])));case"enum":return i.every(((e,t)=>M(P.INT32,e,r[t])))}throw new Error("repeated cannot contain ".concat(e.kind))}switch(e.kind){case"message":let t=i,n=r;return e.T.fieldWrapper&&(void 0===t||te(t)||(t=e.T.fieldWrapper.wrapField(t)),void 0===n||te(n)||(n=e.T.fieldWrapper.wrapField(n))),e.T.equals(t,n);case"enum":return M(P.INT32,i,r);case"scalar":return M(e.T,i,r);case"oneof":if(i.case!==r.case)return!1;const s=e.findField(i.case);if(void 0===s)return!0;switch(s.kind){case"message":return s.T.equals(i.value,r.value);case"enum":return M(P.INT32,i.value,r.value);case"scalar":return M(s.T,i.value,r.value)}throw new Error("oneof cannot contain ".concat(s.kind));case"map":const a=Object.keys(i).concat(Object.keys(r));switch(e.V.kind){case"message":const t=e.V.T;return a.every((e=>t.equals(i[e],r[e])));case"enum":return a.every((e=>M(P.INT32,i[e],r[e])));case"scalar":const n=e.V.T;return a.every((e=>M(n,i[e],r[e])))}}})),clone(e){const t=e.getType(),n=new t,i=n;for(const s of t.fields.byMember()){const t=e[s.localName];let n;if(s.repeated)n=t.map(Oe);else if("map"==s.kind){n=i[s.localName];for(const e of Object.entries(t)){var r=B(e,2);const t=r[0],i=r[1];n[t]=Oe(i)}}else n="oneof"==s.kind?s.findField(t.case)?{case:t.case,value:Oe(t.value)}:{case:void 0}:Oe(t);i[s.localName]=n}for(const s of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(i,s.no,s.wireType,s.data);return n}}),{newFieldList:Ke,initFields:ze}),makeMessageType(e,t,n){return function(e,t,n,i){var r;const s=null!==(r=null==i?void 0:i.localName)&&void 0!==r?r:t.substring(t.lastIndexOf(".")+1),a={[s]:function(t){e.util.initFields(this),e.util.initPartial(t,this)}}[s];return Object.setPrototypeOf(a.prototype,new g),Object.assign(a,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary:(e,t)=>(new a).fromBinary(e,t),fromJson:(e,t)=>(new a).fromJson(e,t),fromJsonString:(e,t)=>(new a).fromJsonString(e,t),equals:(t,n)=>e.util.equals(a,t,n)}),a}(this,e,t,n)},makeEnum:p,makeEnumType:h,getEnumType:l,makeExtension(e,t,n){return function(e,t,n,i){let r;return{typeName:t,extendee:n,get field(){if(!r){const n="function"==typeof i?i():i;n.name=t.split(".").pop(),n.jsonName="[".concat(t,"]"),r=e.util.newFieldList([n]).list()[0]}return r},runtime:e}}(this,e,t,n)}});var Ke,ze;class Ge extends g{constructor(e){super(),this.seconds=R.zero,this.nanos=0,He.util.initPartial(e,this)}fromJson(e,t){if("string"!=typeof e)throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(He.json.debug(e)));const n=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!n)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const i=Date.parse(n[1]+"-"+n[2]+"-"+n[3]+"T"+n[4]+":"+n[5]+":"+n[6]+(n[8]?n[8]:"Z"));if(Number.isNaN(i))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(iDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=R.parse(i/1e3),this.nanos=0,n[7]&&(this.nanos=parseInt("1"+n[7]+"0".repeat(9-n[7].length))-1e9),this}toJson(e){const t=1e3*Number(this.seconds);if(tDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw new Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let n="Z";if(this.nanos>0){const e=(this.nanos+1e9).toString().substring(1);n="000000"===e.substring(3)?"."+e.substring(0,3)+"Z":"000"===e.substring(6)?"."+e.substring(0,6)+"Z":"."+e+"Z"}return new Date(t).toISOString().replace(".000Z",n)}toDate(){return new Date(1e3*Number(this.seconds)+Math.ceil(this.nanos/1e6))}static now(){return Ge.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new Ge({seconds:R.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return(new Ge).fromBinary(e,t)}static fromJson(e,t){return(new Ge).fromJson(e,t)}static fromJsonString(e,t){return(new Ge).fromJsonString(e,t)}static equals(e,t){return He.util.equals(Ge,e,t)}}Ge.runtime=He,Ge.typeName="google.protobuf.Timestamp",Ge.fields=He.util.newFieldList((()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]));const Je=He.makeMessageType("livekit.MetricsBatch",(()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ge},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:Qe,repeated:!0},{no:5,name:"events",kind:"message",T:Xe,repeated:!0}])),Qe=He.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:Ye,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}])),Ye=He.makeMessageType("livekit.MetricSample",(()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ge},{no:3,name:"value",kind:"scalar",T:2}])),Xe=He.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:Ge},{no:7,name:"normalized_end_timestamp",kind:"message",T:Ge,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}])),Ze=He.makeEnum("livekit.AudioCodec",[{no:0,name:"DEFAULT_AC"},{no:1,name:"OPUS"},{no:2,name:"AAC"},{no:3,name:"AC_MP3"}]),$e=He.makeEnum("livekit.VideoCodec",[{no:0,name:"DEFAULT_VC"},{no:1,name:"H264_BASELINE"},{no:2,name:"H264_MAIN"},{no:3,name:"H264_HIGH"},{no:4,name:"VP8"}]),et=He.makeEnum("livekit.ImageCodec",[{no:0,name:"IC_DEFAULT"},{no:1,name:"IC_JPEG"}]),tt=He.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),nt=He.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),it=He.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"}]),rt=He.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),st=He.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),at=He.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),ot=He.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"},{no:16,name:"AGENT_ERROR"}]),ct=He.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"}]),dt=He.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),lt=He.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"}]),ut=He.makeEnum("livekit.PacketTrailerFeature",[{no:0,name:"PTF_USER_TIMESTAMP"},{no:1,name:"PTF_FRAME_ID"},{no:2,name:"PTF_USER_DATA"}]),ht=He.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:pt,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:rn}])),pt=He.makeMessageType("livekit.Codec",(()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}])),mt=He.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:He.getEnumType(it),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},{no:13,name:"can_manage_agent_session",kind:"scalar",T:8}])),gt=He.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:He.getEnumType(vt)},{no:4,name:"tracks",kind:"message",T:Tt,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:mt},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:He.getEnumType(ft)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:He.getEnumType(ot)},{no:18,name:"kind_details",kind:"enum",T:He.getEnumType(kt),repeated:!0},{no:19,name:"data_tracks",kind:"message",T:St,repeated:!0},{no:20,name:"client_protocol",kind:"scalar",T:5},{no:21,name:"capabilities",kind:"enum",T:He.getEnumType($t),repeated:!0}])),vt=He.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),ft=He.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"},{no:7,name:"CONNECTOR"},{no:8,name:"BRIDGE"}]),kt=He.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"},{no:2,name:"CONNECTOR_WHATSAPP"},{no:3,name:"CONNECTOR_TWILIO"},{no:4,name:"BRIDGE_RTSP"},{no:5,name:"SIMULATION"}]),yt=He.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),bt=He.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:Dt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:He.getEnumType(Ot)},{no:6,name:"sdp_cid",kind:"scalar",T:9}])),Tt=He.makeMessageType("livekit.TrackInfo",(()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:He.getEnumType(nt)},{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:He.getEnumType(it)},{no:10,name:"layers",kind:"message",T:Dt,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:bt,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:He.getEnumType(yt)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:rn},{no:19,name:"audio_features",kind:"enum",T:He.getEnumType(lt),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:He.getEnumType(tt)},{no:21,name:"packet_trailer_features",kind:"enum",T:He.getEnumType(ut),repeated:!0}])),St=He.makeMessageType("livekit.DataTrackInfo",(()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"sid",kind:"scalar",T:9},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"encryption",kind:"enum",T:He.getEnumType(yt)},{no:5,name:"frame_encoding",kind:"message",T:Et,opt:!0},{no:6,name:"schema",kind:"message",T:Pt,opt:!0}])),Et=He.makeMessageType("livekit.DataTrackFrameEncoding",(()=>[{no:1,name:"well_known",kind:"enum",T:He.getEnumType(Ct),oneof:"value"},{no:2,name:"custom",kind:"scalar",T:9,oneof:"value"}])),Ct=He.makeEnum("livekit.DataTrackFrameEncoding.WellKnownFrameEncoding",[{no:0,name:"WELL_KNOWN_FRAME_ENCODING_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"WELL_KNOWN_FRAME_ENCODING_ROS1",localName:"ROS1"},{no:2,name:"WELL_KNOWN_FRAME_ENCODING_CDR",localName:"CDR"},{no:3,name:"WELL_KNOWN_FRAME_ENCODING_PROTOBUF",localName:"PROTOBUF"},{no:4,name:"WELL_KNOWN_FRAME_ENCODING_FLATBUFFER",localName:"FLATBUFFER"},{no:5,name:"WELL_KNOWN_FRAME_ENCODING_CBOR",localName:"CBOR"},{no:6,name:"WELL_KNOWN_FRAME_ENCODING_MSGPACK",localName:"MSGPACK"},{no:7,name:"WELL_KNOWN_FRAME_ENCODING_JSON",localName:"JSON"}]),wt=He.makeMessageType("livekit.DataTrackSchemaEncoding",(()=>[{no:1,name:"well_known",kind:"enum",T:He.getEnumType(Rt),oneof:"value"},{no:2,name:"custom",kind:"scalar",T:9,oneof:"value"}])),Rt=He.makeEnum("livekit.DataTrackSchemaEncoding.WellKnownSchemaEncoding",[{no:0,name:"WELL_KNOWN_SCHEMA_ENCODING_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"WELL_KNOWN_SCHEMA_ENCODING_PROTOBUF",localName:"PROTOBUF"},{no:2,name:"WELL_KNOWN_SCHEMA_ENCODING_FLATBUFFER",localName:"FLATBUFFER"},{no:3,name:"WELL_KNOWN_SCHEMA_ENCODING_ROS1_MSG",localName:"ROS1_MSG"},{no:4,name:"WELL_KNOWN_SCHEMA_ENCODING_ROS2_MSG",localName:"ROS2_MSG"},{no:5,name:"WELL_KNOWN_SCHEMA_ENCODING_ROS2_IDL",localName:"ROS2_IDL"},{no:6,name:"WELL_KNOWN_SCHEMA_ENCODING_OMG_IDL",localName:"OMG_IDL"},{no:7,name:"WELL_KNOWN_SCHEMA_ENCODING_JSON_SCHEMA",localName:"JSON_SCHEMA"}]),Pt=He.makeMessageType("livekit.DataTrackSchemaId",(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"encoding",kind:"message",T:wt}])),It=He.makeMessageType("livekit.DataTrackSubscriptionOptions",(()=>[{no:1,name:"target_fps",kind:"scalar",T:13,opt:!0}])),_t=He.makeMessageType("livekit.DataBlobKey",(()=>[{no:1,name:"generic",kind:"scalar",T:9,oneof:"key"},{no:2,name:"schema_id",kind:"message",T:Pt,oneof:"key"}])),Mt=He.makeMessageType("livekit.DataBlob",(()=>[{no:1,name:"key",kind:"message",T:_t},{no:2,name:"contents",kind:"scalar",T:12}])),Dt=He.makeMessageType("livekit.VideoLayer",(()=>[{no:1,name:"quality",kind:"enum",T:He.getEnumType(rt)},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13},{no:4,name:"bitrate",kind:"scalar",T:13},{no:5,name:"ssrc",kind:"scalar",T:13},{no:6,name:"spatial_layer",kind:"scalar",T:5},{no:7,name:"rid",kind:"scalar",T:9},{no:8,name:"repair_ssrc",kind:"scalar",T:13}])),Ot=He.makeEnum("livekit.VideoLayer.Mode",[{no:0,name:"MODE_UNUSED"},{no:1,name:"ONE_SPATIAL_LAYER_PER_STREAM"},{no:2,name:"MULTIPLE_SPATIAL_LAYERS_PER_STREAM"},{no:3,name:"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR"}]),At=He.makeMessageType("livekit.DataPacket",(()=>[{no:1,name:"kind",kind:"enum",T:He.getEnumType(Lt)},{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:Bt,oneof:"value"},{no:3,name:"speaker",kind:"message",T:Ut,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:jt,oneof:"value"},{no:7,name:"transcription",kind:"message",T:qt,oneof:"value"},{no:8,name:"metrics",kind:"message",T:Je,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:Wt,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:Ht,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:Kt,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:zt,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:dn,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:ln,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:un,oneof:"value"},{no:18,name:"encrypted_packet",kind:"message",T:Nt,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}])),Lt=He.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),Nt=He.makeMessageType("livekit.EncryptedPacket",(()=>[{no:1,name:"encryption_type",kind:"enum",T:He.getEnumType(yt)},{no:2,name:"iv",kind:"scalar",T:12},{no:3,name:"key_index",kind:"scalar",T:13},{no:4,name:"encrypted_value",kind:"scalar",T:12}])),xt=He.makeMessageType("livekit.EncryptedPacketPayload",(()=>[{no:1,name:"user",kind:"message",T:Bt,oneof:"value"},{no:3,name:"chat_message",kind:"message",T:Wt,oneof:"value"},{no:4,name:"rpc_request",kind:"message",T:Ht,oneof:"value"},{no:5,name:"rpc_ack",kind:"message",T:Kt,oneof:"value"},{no:6,name:"rpc_response",kind:"message",T:zt,oneof:"value"},{no:7,name:"stream_header",kind:"message",T:dn,oneof:"value"},{no:8,name:"stream_chunk",kind:"message",T:ln,oneof:"value"},{no:9,name:"stream_trailer",kind:"message",T:un,oneof:"value"}])),Ut=He.makeMessageType("livekit.ActiveSpeakerUpdate",(()=>[{no:1,name:"speakers",kind:"message",T:Ft,repeated:!0}])),Ft=He.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}])),Bt=He.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}])),jt=He.makeMessageType("livekit.SipDTMF",(()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}])),qt=He.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:Vt,repeated:!0}])),Vt=He.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}])),Wt=He.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}])),Ht=He.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},{no:6,name:"compressed_payload",kind:"scalar",T:12}])),Kt=He.makeMessageType("livekit.RpcAck",(()=>[{no:1,name:"request_id",kind:"scalar",T:9}])),zt=He.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:Gt,oneof:"value"},{no:4,name:"compressed_payload",kind:"scalar",T:12,oneof:"value"}])),Gt=He.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}])),Jt=He.makeMessageType("livekit.ParticipantTracks",(()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}])),Qt=He.makeMessageType("livekit.ServerInfo",(()=>[{no:1,name:"edition",kind:"enum",T:He.getEnumType(Yt)},{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}])),Yt=He.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),Xt=He.makeMessageType("livekit.ClientInfo",(()=>[{no:1,name:"sdk",kind:"enum",T:He.getEnumType(Zt)},{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},{no:12,name:"client_protocol",kind:"scalar",T:5},{no:13,name:"capabilities",kind:"enum",T:He.getEnumType($t),repeated:!0}])),Zt=He.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"},{no:15,name:"DOTNET"}]),$t=He.makeEnum("livekit.ClientInfo.Capability",[{no:0,name:"CAP_UNUSED"},{no:1,name:"CAP_PACKET_TRAILER"},{no:2,name:"CAP_COMPRESSION_DEFLATE_RAW"}]),en=He.makeMessageType("livekit.ClientConfiguration",(()=>[{no:1,name:"video",kind:"message",T:tn},{no:2,name:"screen",kind:"message",T:tn},{no:3,name:"resume_connection",kind:"enum",T:He.getEnumType(at)},{no:4,name:"disabled_codecs",kind:"message",T:nn},{no:5,name:"force_relay",kind:"enum",T:He.getEnumType(at)}])),tn=He.makeMessageType("livekit.VideoConfiguration",(()=>[{no:1,name:"hardware_encoder",kind:"enum",T:He.getEnumType(at)}])),nn=He.makeMessageType("livekit.DisabledCodecs",(()=>[{no:1,name:"codecs",kind:"message",T:pt,repeated:!0},{no:2,name:"publish",kind:"message",T:pt,repeated:!0}])),rn=He.makeMessageType("livekit.TimedVersion",(()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}])),sn=He.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),an=He.makeEnum("livekit.DataStream.CompressionType",[{no:0,name:"NONE"},{no:1,name:"DEFLATE_RAW"}]),on=He.makeMessageType("livekit.DataStream.TextHeader",(()=>[{no:1,name:"operation_type",kind:"enum",T:He.getEnumType(sn)},{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"}),cn=He.makeMessageType("livekit.DataStream.ByteHeader",(()=>[{no:1,name:"name",kind:"scalar",T:9}]),{localName:"DataStream_ByteHeader"}),dn=He.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:He.getEnumType(yt)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:on,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:cn,oneof:"content_header"},{no:11,name:"inline_content",kind:"scalar",T:12,opt:!0},{no:12,name:"compression",kind:"enum",T:He.getEnumType(an)}]),{localName:"DataStream_Header"}),ln=He.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"}),un=He.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"}),hn=He.makeMessageType("livekit.FilterParams",(()=>[{no:1,name:"include_events",kind:"scalar",T:9,repeated:!0},{no:2,name:"exclude_events",kind:"scalar",T:9,repeated:!0}])),pn=He.makeMessageType("livekit.WebhookConfig",(()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"signing_key",kind:"scalar",T:9},{no:3,name:"filter_params",kind:"message",T:hn}])),mn=He.makeMessageType("livekit.SubscribedAudioCodec",(()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"enabled",kind:"scalar",T:8}])),gn=He.makeEnum("livekit.JobRestartPolicy",[{no:0,name:"JRP_ON_FAILURE"},{no:1,name:"JRP_NEVER"}]),vn=He.makeMessageType("livekit.RoomAgentDispatch",(()=>[{no:1,name:"agent_name",kind:"scalar",T:9},{no:2,name:"metadata",kind:"scalar",T:9},{no:3,name:"restart_policy",kind:"enum",T:He.getEnumType(gn)},{no:4,name:"deployment",kind:"scalar",T:9},{no:5,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}}])),fn=He.makeEnum("livekit.EncodingOptionsPreset",[{no:0,name:"H264_720P_30"},{no:1,name:"H264_720P_60"},{no:2,name:"H264_1080P_30"},{no:3,name:"H264_1080P_60"},{no:4,name:"PORTRAIT_H264_720P_30"},{no:5,name:"PORTRAIT_H264_720P_60"},{no:6,name:"PORTRAIT_H264_1080P_30"},{no:7,name:"PORTRAIT_H264_1080P_60"},{no:8,name:"PASSTHROUGH"}]),kn=He.makeEnum("livekit.EncodedFileType",[{no:0,name:"DEFAULT_FILETYPE"},{no:1,name:"MP4"},{no:2,name:"OGG"},{no:3,name:"MP3"}]),yn=He.makeEnum("livekit.StreamProtocol",[{no:0,name:"DEFAULT_PROTOCOL"},{no:1,name:"RTMP"},{no:2,name:"SRT"},{no:3,name:"WEBSOCKET"}]),bn=He.makeEnum("livekit.SegmentedFileProtocol",[{no:0,name:"DEFAULT_SEGMENTED_FILE_PROTOCOL"},{no:1,name:"HLS_PROTOCOL"}]),Tn=He.makeEnum("livekit.SegmentedFileSuffix",[{no:0,name:"INDEX"},{no:1,name:"TIMESTAMP"}]),Sn=He.makeEnum("livekit.ImageFileSuffix",[{no:0,name:"IMAGE_SUFFIX_INDEX"},{no:1,name:"IMAGE_SUFFIX_TIMESTAMP"},{no:2,name:"IMAGE_SUFFIX_NONE_OVERWRITE"}]),En=He.makeEnum("livekit.AudioMixing",[{no:0,name:"DEFAULT_MIXING"},{no:1,name:"DUAL_CHANNEL_AGENT"},{no:2,name:"DUAL_CHANNEL_ALTERNATE"}]),Cn=He.makeMessageType("livekit.EncodingOptions",(()=>[{no:1,name:"width",kind:"scalar",T:5},{no:2,name:"height",kind:"scalar",T:5},{no:3,name:"depth",kind:"scalar",T:5},{no:4,name:"framerate",kind:"scalar",T:5},{no:5,name:"audio_codec",kind:"enum",T:He.getEnumType(Ze)},{no:6,name:"audio_bitrate",kind:"scalar",T:5},{no:7,name:"audio_frequency",kind:"scalar",T:5},{no:8,name:"video_codec",kind:"enum",T:He.getEnumType($e)},{no:9,name:"video_bitrate",kind:"scalar",T:5},{no:10,name:"key_frame_interval",kind:"scalar",T:1},{no:11,name:"audio_quality",kind:"scalar",T:5},{no:12,name:"video_quality",kind:"scalar",T:5}])),wn=He.makeMessageType("livekit.StreamOutput",(()=>[{no:1,name:"protocol",kind:"enum",T:He.getEnumType(yn)},{no:2,name:"urls",kind:"scalar",T:9,repeated:!0}])),Rn=He.makeMessageType("livekit.SegmentedFileOutput",(()=>[{no:1,name:"protocol",kind:"enum",T:He.getEnumType(bn)},{no:2,name:"filename_prefix",kind:"scalar",T:9},{no:3,name:"playlist_name",kind:"scalar",T:9},{no:11,name:"live_playlist_name",kind:"scalar",T:9},{no:4,name:"segment_duration",kind:"scalar",T:13},{no:10,name:"filename_suffix",kind:"enum",T:He.getEnumType(Tn)},{no:8,name:"disable_manifest",kind:"scalar",T:8},{no:5,name:"s3",kind:"message",T:In,oneof:"output"},{no:6,name:"gcp",kind:"message",T:_n,oneof:"output"},{no:7,name:"azure",kind:"message",T:Mn,oneof:"output"},{no:9,name:"aliOSS",kind:"message",T:Dn,oneof:"output"}])),Pn=He.makeMessageType("livekit.ImageOutput",(()=>[{no:1,name:"capture_interval",kind:"scalar",T:13},{no:2,name:"width",kind:"scalar",T:5},{no:3,name:"height",kind:"scalar",T:5},{no:4,name:"filename_prefix",kind:"scalar",T:9},{no:5,name:"filename_suffix",kind:"enum",T:He.getEnumType(Sn)},{no:6,name:"image_codec",kind:"enum",T:He.getEnumType(et)},{no:7,name:"disable_manifest",kind:"scalar",T:8},{no:8,name:"s3",kind:"message",T:In,oneof:"output"},{no:9,name:"gcp",kind:"message",T:_n,oneof:"output"},{no:10,name:"azure",kind:"message",T:Mn,oneof:"output"},{no:11,name:"aliOSS",kind:"message",T:Dn,oneof:"output"}])),In=He.makeMessageType("livekit.S3Upload",(()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:11,name:"session_token",kind:"scalar",T:9},{no:12,name:"assume_role_arn",kind:"scalar",T:9},{no:13,name:"assume_role_external_id",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9},{no:6,name:"force_path_style",kind:"scalar",T:8},{no:7,name:"metadata",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:8,name:"tagging",kind:"scalar",T:9},{no:9,name:"content_disposition",kind:"scalar",T:9},{no:10,name:"proxy",kind:"message",T:On}])),_n=He.makeMessageType("livekit.GCPUpload",(()=>[{no:1,name:"credentials",kind:"scalar",T:9},{no:2,name:"bucket",kind:"scalar",T:9},{no:3,name:"proxy",kind:"message",T:On}])),Mn=He.makeMessageType("livekit.AzureBlobUpload",(()=>[{no:1,name:"account_name",kind:"scalar",T:9},{no:2,name:"account_key",kind:"scalar",T:9},{no:3,name:"container_name",kind:"scalar",T:9}])),Dn=He.makeMessageType("livekit.AliOSSUpload",(()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9}])),On=He.makeMessageType("livekit.ProxyConfig",(()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"password",kind:"scalar",T:9}])),An=He.makeMessageType("livekit.AutoParticipantEgress",(()=>[{no:1,name:"preset",kind:"enum",T:He.getEnumType(fn),oneof:"options"},{no:2,name:"advanced",kind:"message",T:Cn,oneof:"options"},{no:3,name:"file_outputs",kind:"message",T:xn,repeated:!0},{no:4,name:"segment_outputs",kind:"message",T:Rn,repeated:!0}])),Ln=He.makeMessageType("livekit.AutoTrackEgress",(()=>[{no:1,name:"filepath",kind:"scalar",T:9},{no:5,name:"disable_manifest",kind:"scalar",T:8},{no:2,name:"s3",kind:"message",T:In,oneof:"output"},{no:3,name:"gcp",kind:"message",T:_n,oneof:"output"},{no:4,name:"azure",kind:"message",T:Mn,oneof:"output"},{no:6,name:"aliOSS",kind:"message",T:Dn,oneof:"output"}])),Nn=He.makeMessageType("livekit.RoomCompositeEgressRequest",(()=>[{no:1,name:"room_name",kind:"scalar",T:9},{no:2,name:"layout",kind:"scalar",T:9},{no:3,name:"audio_only",kind:"scalar",T:8},{no:15,name:"audio_mixing",kind:"enum",T:He.getEnumType(En)},{no:4,name:"video_only",kind:"scalar",T:8},{no:5,name:"custom_base_url",kind:"scalar",T:9},{no:6,name:"file",kind:"message",T:xn,oneof:"output"},{no:7,name:"stream",kind:"message",T:wn,oneof:"output"},{no:10,name:"segments",kind:"message",T:Rn,oneof:"output"},{no:8,name:"preset",kind:"enum",T:He.getEnumType(fn),oneof:"options"},{no:9,name:"advanced",kind:"message",T:Cn,oneof:"options"},{no:11,name:"file_outputs",kind:"message",T:xn,repeated:!0},{no:12,name:"stream_outputs",kind:"message",T:wn,repeated:!0},{no:13,name:"segment_outputs",kind:"message",T:Rn,repeated:!0},{no:14,name:"image_outputs",kind:"message",T:Pn,repeated:!0},{no:16,name:"webhooks",kind:"message",T:pn,repeated:!0}])),xn=He.makeMessageType("livekit.EncodedFileOutput",(()=>[{no:1,name:"file_type",kind:"enum",T:He.getEnumType(kn)},{no:2,name:"filepath",kind:"scalar",T:9},{no:6,name:"disable_manifest",kind:"scalar",T:8},{no:3,name:"s3",kind:"message",T:In,oneof:"output"},{no:4,name:"gcp",kind:"message",T:_n,oneof:"output"},{no:5,name:"azure",kind:"message",T:Mn,oneof:"output"},{no:7,name:"aliOSS",kind:"message",T:Dn,oneof:"output"}])),Un=He.makeMessageType("livekit.RoomEgress",(()=>[{no:1,name:"room",kind:"message",T:Nn},{no:3,name:"participant",kind:"message",T:An},{no:2,name:"tracks",kind:"message",T:Ln}])),Fn=He.makeMessageType("livekit.RoomConfiguration",(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"empty_timeout",kind:"scalar",T:13},{no:3,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:11,name:"metadata",kind:"scalar",T:9},{no:5,name:"egress",kind:"message",T:Un},{no:7,name:"min_playout_delay",kind:"scalar",T:13},{no:8,name:"max_playout_delay",kind:"scalar",T:13},{no:9,name:"sync_streams",kind:"scalar",T:8},{no:10,name:"agents",kind:"message",T:vn,repeated:!0},{no:12,name:"tags",kind:"map",K:9,V:{kind:"scalar",T:9}}])),Bn=He.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),jn=He.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),qn=He.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),Vn=He.makeMessageType("livekit.SignalRequest",(()=>[{no:1,name:"offer",kind:"message",T:ri,oneof:"message"},{no:2,name:"answer",kind:"message",T:ri,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Zn,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Kn,oneof:"message"},{no:5,name:"mute",kind:"message",T:$n,oneof:"message"},{no:6,name:"subscription",kind:"message",T:ai,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:pi,oneof:"message"},{no:8,name:"leave",kind:"message",T:vi,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:ki,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:Oi,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:Ni,oneof:"message"},{no:13,name:"simulate",kind:"message",T:Fi,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:yi,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:Bi,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:mi,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:gi,oneof:"message"},{no:19,name:"publish_data_track_request",kind:"message",T:zn,oneof:"message"},{no:20,name:"unpublish_data_track_request",kind:"message",T:Jn,oneof:"message"},{no:21,name:"update_data_subscription",kind:"message",T:oi,oneof:"message"},{no:22,name:"store_data_blob_request",kind:"message",T:di,oneof:"message"},{no:23,name:"get_data_blob_request",kind:"message",T:ui,oneof:"message"}])),Wn=He.makeMessageType("livekit.SignalResponse",(()=>[{no:1,name:"join",kind:"message",T:ei,oneof:"message"},{no:2,name:"answer",kind:"message",T:ri,oneof:"message"},{no:3,name:"offer",kind:"message",T:ri,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Zn,oneof:"message"},{no:5,name:"update",kind:"message",T:si,oneof:"message"},{no:6,name:"track_published",kind:"message",T:ni,oneof:"message"},{no:8,name:"leave",kind:"message",T:vi,oneof:"message"},{no:9,name:"mute",kind:"message",T:$n,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:Ti,oneof:"message"},{no:11,name:"room_update",kind:"message",T:Si,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:Ci,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:Ri,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:_i,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Ai,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:ii,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:ti,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:ji,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:Wi,oneof:"message"},{no:22,name:"request_response",kind:"message",T:Hi,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:zi,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:Li,oneof:"message"},{no:25,name:"media_sections_requirement",kind:"message",T:Xi,oneof:"message"},{no:26,name:"subscribed_audio_codec_update",kind:"message",T:Mi,oneof:"message"},{no:27,name:"publish_data_track_response",kind:"message",T:Gn,oneof:"message"},{no:28,name:"unpublish_data_track_response",kind:"message",T:Qn,oneof:"message"},{no:29,name:"data_track_subscriber_handles",kind:"message",T:Yn,oneof:"message"},{no:30,name:"store_data_blob_response",kind:"message",T:li,oneof:"message"},{no:31,name:"get_data_blob_response",kind:"message",T:hi,oneof:"message"}])),Hn=He.makeMessageType("livekit.SimulcastCodec",(()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:Dt,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:He.getEnumType(Ot)}])),Kn=He.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:He.getEnumType(nt)},{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:He.getEnumType(it)},{no:9,name:"layers",kind:"message",T:Dt,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:Hn,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:He.getEnumType(yt)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:He.getEnumType(tt)},{no:17,name:"audio_features",kind:"enum",T:He.getEnumType(lt),repeated:!0},{no:18,name:"packet_trailer_features",kind:"enum",T:He.getEnumType(ut),repeated:!0}])),zn=He.makeMessageType("livekit.PublishDataTrackRequest",(()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"encryption",kind:"enum",T:He.getEnumType(yt)},{no:4,name:"frame_encoding",kind:"message",T:Et,opt:!0},{no:5,name:"schema",kind:"message",T:Pt,opt:!0}])),Gn=He.makeMessageType("livekit.PublishDataTrackResponse",(()=>[{no:1,name:"info",kind:"message",T:St}])),Jn=He.makeMessageType("livekit.UnpublishDataTrackRequest",(()=>[{no:1,name:"pub_handle",kind:"scalar",T:13}])),Qn=He.makeMessageType("livekit.UnpublishDataTrackResponse",(()=>[{no:1,name:"info",kind:"message",T:St}])),Yn=He.makeMessageType("livekit.DataTrackSubscriberHandles",(()=>[{no:1,name:"sub_handles",kind:"map",K:13,V:{kind:"message",T:Xn}}])),Xn=He.makeMessageType("livekit.DataTrackSubscriberHandles.PublishedDataTrack",(()=>[{no:1,name:"publisher_identity",kind:"scalar",T:9},{no:2,name:"publisher_sid",kind:"scalar",T:9},{no:3,name:"track_sid",kind:"scalar",T:9}]),{localName:"DataTrackSubscriberHandles_PublishedDataTrack"}),Zn=He.makeMessageType("livekit.TrickleRequest",(()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:He.getEnumType(Bn)},{no:3,name:"final",kind:"scalar",T:8}])),$n=He.makeMessageType("livekit.MuteTrackRequest",(()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}])),ei=He.makeMessageType("livekit.JoinResponse",(()=>[{no:1,name:"room",kind:"message",T:ht},{no:2,name:"participant",kind:"message",T:gt},{no:3,name:"other_participants",kind:"message",T:gt,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:bi,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:en},{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:Qt},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:pt,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}])),ti=He.makeMessageType("livekit.ReconnectResponse",(()=>[{no:1,name:"ice_servers",kind:"message",T:bi,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:en},{no:3,name:"server_info",kind:"message",T:Qt},{no:4,name:"last_message_seq",kind:"scalar",T:13}])),ni=He.makeMessageType("livekit.TrackPublishedResponse",(()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:Tt}])),ii=He.makeMessageType("livekit.TrackUnpublishedResponse",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9}])),ri=He.makeMessageType("livekit.SessionDescription",(()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9},{no:3,name:"id",kind:"scalar",T:13},{no:4,name:"mid_to_track_id",kind:"map",K:9,V:{kind:"scalar",T:9}}])),si=He.makeMessageType("livekit.ParticipantUpdate",(()=>[{no:1,name:"participants",kind:"message",T:gt,repeated:!0}])),ai=He.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:Jt,repeated:!0}])),oi=He.makeMessageType("livekit.UpdateDataSubscription",(()=>[{no:1,name:"updates",kind:"message",T:ci,repeated:!0}])),ci=He.makeMessageType("livekit.UpdateDataSubscription.Update",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"options",kind:"message",T:It}]),{localName:"UpdateDataSubscription_Update"}),di=He.makeMessageType("livekit.StoreDataBlobRequest",(()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"blob",kind:"message",T:Mt}])),li=He.makeMessageType("livekit.StoreDataBlobResponse",(()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"key",kind:"message",T:_t}])),ui=He.makeMessageType("livekit.GetDataBlobRequest",(()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:9},{no:3,name:"key",kind:"message",T:_t}])),hi=He.makeMessageType("livekit.GetDataBlobResponse",(()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"blob",kind:"message",T:Mt}])),pi=He.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:He.getEnumType(rt)},{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}])),mi=He.makeMessageType("livekit.UpdateLocalAudioTrack",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:He.getEnumType(lt),repeated:!0}])),gi=He.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}])),vi=He.makeMessageType("livekit.LeaveRequest",(()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:He.getEnumType(ot)},{no:3,name:"action",kind:"enum",T:He.getEnumType(fi)},{no:4,name:"regions",kind:"message",T:qi}])),fi=He.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),ki=He.makeMessageType("livekit.UpdateVideoLayers",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:Dt,repeated:!0}])),yi=He.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}])),bi=He.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}])),Ti=He.makeMessageType("livekit.SpeakersChanged",(()=>[{no:1,name:"speakers",kind:"message",T:Ft,repeated:!0}])),Si=He.makeMessageType("livekit.RoomUpdate",(()=>[{no:1,name:"room",kind:"message",T:ht}])),Ei=He.makeMessageType("livekit.ConnectionQualityInfo",(()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:He.getEnumType(st)},{no:3,name:"score",kind:"scalar",T:2}])),Ci=He.makeMessageType("livekit.ConnectionQualityUpdate",(()=>[{no:1,name:"updates",kind:"message",T:Ei,repeated:!0}])),wi=He.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:He.getEnumType(jn)}])),Ri=He.makeMessageType("livekit.StreamStateUpdate",(()=>[{no:1,name:"stream_states",kind:"message",T:wi,repeated:!0}])),Pi=He.makeMessageType("livekit.SubscribedQuality",(()=>[{no:1,name:"quality",kind:"enum",T:He.getEnumType(rt)},{no:2,name:"enabled",kind:"scalar",T:8}])),Ii=He.makeMessageType("livekit.SubscribedCodec",(()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:Pi,repeated:!0}])),_i=He.makeMessageType("livekit.SubscribedQualityUpdate",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:Pi,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:Ii,repeated:!0}])),Mi=He.makeMessageType("livekit.SubscribedAudioCodecUpdate",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_audio_codecs",kind:"message",T:mn,repeated:!0}])),Di=He.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}])),Oi=He.makeMessageType("livekit.SubscriptionPermission",(()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:Di,repeated:!0}])),Ai=He.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}])),Li=He.makeMessageType("livekit.RoomMovedResponse",(()=>[{no:1,name:"room",kind:"message",T:ht},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:gt},{no:4,name:"other_participants",kind:"message",T:gt,repeated:!0}])),Ni=He.makeMessageType("livekit.SyncState",(()=>[{no:1,name:"answer",kind:"message",T:ri},{no:2,name:"subscription",kind:"message",T:ai},{no:3,name:"publish_tracks",kind:"message",T:ni,repeated:!0},{no:4,name:"data_channels",kind:"message",T:Ui,repeated:!0},{no:5,name:"offer",kind:"message",T:ri},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:xi,repeated:!0},{no:8,name:"publish_data_tracks",kind:"message",T:Gn,repeated:!0},{no:9,name:"data_subscription",kind:"message",T:oi}])),xi=He.makeMessageType("livekit.DataChannelReceiveState",(()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}])),Ui=He.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:He.getEnumType(Bn)}])),Fi=He.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:He.getEnumType(qn),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"}])),Bi=He.makeMessageType("livekit.Ping",(()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}])),ji=He.makeMessageType("livekit.Pong",(()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}])),qi=He.makeMessageType("livekit.RegionSettings",(()=>[{no:1,name:"regions",kind:"message",T:Vi,repeated:!0}])),Vi=He.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}])),Wi=He.makeMessageType("livekit.SubscriptionResponse",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:He.getEnumType(dt)}])),Hi=He.makeMessageType("livekit.RequestResponse",(()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:He.getEnumType(Ki)},{no:3,name:"message",kind:"scalar",T:9},{no:4,name:"trickle",kind:"message",T:Zn,oneof:"request"},{no:5,name:"add_track",kind:"message",T:Kn,oneof:"request"},{no:6,name:"mute",kind:"message",T:$n,oneof:"request"},{no:7,name:"update_metadata",kind:"message",T:yi,oneof:"request"},{no:8,name:"update_audio_track",kind:"message",T:mi,oneof:"request"},{no:9,name:"update_video_track",kind:"message",T:gi,oneof:"request"},{no:10,name:"publish_data_track",kind:"message",T:zn,oneof:"request"},{no:11,name:"unpublish_data_track",kind:"message",T:Jn,oneof:"request"}])),Ki=He.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"},{no:4,name:"QUEUED"},{no:5,name:"UNSUPPORTED_TYPE"},{no:6,name:"UNCLASSIFIED_ERROR"},{no:7,name:"INVALID_HANDLE"},{no:8,name:"INVALID_NAME"},{no:9,name:"DUPLICATE_HANDLE"},{no:10,name:"DUPLICATE_NAME"},{no:11,name:"INVALID_REQUEST"}]),zi=He.makeMessageType("livekit.TrackSubscribed",(()=>[{no:1,name:"track_sid",kind:"scalar",T:9}])),Gi=He.makeMessageType("livekit.ConnectionSettings",(()=>[{no:1,name:"auto_subscribe",kind:"scalar",T:8},{no:2,name:"adaptive_stream",kind:"scalar",T:8},{no:3,name:"subscriber_allow_pause",kind:"scalar",T:8,opt:!0},{no:4,name:"disable_ice_lite",kind:"scalar",T:8},{no:5,name:"auto_subscribe_data_track",kind:"scalar",T:8,opt:!0}])),Ji=He.makeMessageType("livekit.JoinRequest",(()=>[{no:1,name:"client_info",kind:"message",T:Xt},{no:2,name:"connection_settings",kind:"message",T:Gi},{no:3,name:"metadata",kind:"scalar",T:9},{no:4,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:5,name:"add_track_requests",kind:"message",T:Kn,repeated:!0},{no:6,name:"publisher_offer",kind:"message",T:ri},{no:7,name:"reconnect",kind:"scalar",T:8},{no:8,name:"reconnect_reason",kind:"enum",T:He.getEnumType(ct)},{no:9,name:"participant_sid",kind:"scalar",T:9},{no:10,name:"sync_state",kind:"message",T:Ni}])),Qi=He.makeMessageType("livekit.WrappedJoinRequest",(()=>[{no:1,name:"compression",kind:"enum",T:He.getEnumType(Yi)},{no:2,name:"join_request",kind:"scalar",T:12}])),Yi=He.makeEnum("livekit.WrappedJoinRequest.Compression",[{no:0,name:"NONE"},{no:1,name:"GZIP"}]),Xi=He.makeMessageType("livekit.MediaSectionsRequirement",(()=>[{no:1,name:"num_audios",kind:"scalar",T:13},{no:2,name:"num_videos",kind:"scalar",T:13}])),Zi=He.makeMessageType("livekit.TokenSourceRequest",(()=>[{no:1,name:"room_name",kind:"scalar",T:9,opt:!0},{no:2,name:"participant_name",kind:"scalar",T:9,opt:!0},{no:3,name:"participant_identity",kind:"scalar",T:9,opt:!0},{no:4,name:"participant_metadata",kind:"scalar",T:9,opt:!0},{no:5,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:6,name:"room_config",kind:"message",T:Fn,opt:!0}])),$i=He.makeMessageType("livekit.TokenSourceResponse",(()=>[{no:1,name:"server_url",kind:"scalar",T:9},{no:2,name:"participant_token",kind:"scalar",T:9}]));function er(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var tr,nr={exports:{}},ir=nr.exports;var rr,sr,ar=(tr||(tr=1,function(e){var t,i;t=ir,i=function(){var e=function(){},t="undefined",i=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],s={},a=null;function o(e,t){var i=e[t];if("function"==typeof i.bind)return i.bind(e);try{return Function.prototype.bind.call(i,e)}catch(n){return function(){return Function.prototype.apply.apply(i,[e,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function d(){for(var n=this.getLevel(),i=0;i=0&&t<=l.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),l.name=e,l.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},l.methodFactory=n||u,l.getLevel=function(){return null!=c?c:null!=o?o:i},l.setLevel=function(e,n){return c=m(e),!1!==n&&function(e){var n=(r[e]||"silent").toUpperCase();if(typeof window!==t&&h){try{return void(window.localStorage[h]=n)}catch(i){}try{window.document.cookie=encodeURIComponent(h)+"="+n+";"}catch(i){}}}(c),d.call(l)},l.setDefaultLevel=function(e){o=m(e),p()||l.setLevel(e,!1)},l.resetLevel=function(){c=null,function(){if(typeof window!==t&&h){try{window.localStorage.removeItem(h)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}(),d.call(l)},l.enableAll=function(e){l.setLevel(l.levels.TRACE,e)},l.disableAll=function(e){l.setLevel(l.levels.SILENT,e)},l.rebuild=function(){if(a!==l&&(i=m(a.getLevel())),d.call(l),a===l)for(var e in s)s[e].rebuild()},i=m(a?a.getLevel():"WARN");var g=p();null!=g&&(c=m(g)),d.call(l)}(a=new h).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=s[e];return t||(t=s[e]=new h(e,a.methodFactory)),t};var p=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=p),a},a.getLoggers=function(){return s},a.default=a,a},e.exports?e.exports=i():t.log=i()}(nr)),nr.exports);e.LogLevel=void 0,(rr=e.LogLevel||(e.LogLevel={}))[rr.trace=0]="trace",rr[rr.debug=1]="debug",rr[rr.info=2]="info",rr[rr.warn=3]="warn",rr[rr.error=4]="error",rr[rr.silent=5]="silent",e.LoggerNames=void 0,(sr=e.LoggerNames||(e.LoggerNames={})).Default="livekit",sr.Room="livekit-room",sr.TokenSource="livekit-token-source",sr.Participant="livekit-participant",sr.Track="livekit-track",sr.Publication="livekit-track-publication",sr.Engine="livekit-engine",sr.Signal="livekit-signal",sr.PCManager="livekit-pc-manager",sr.PCTransport="livekit-pc-transport",sr.E2EE="lk-e2ee",sr.DataTracks="livekit-data-tracks",sr.Region="livekit-region",sr.ICE="livekit-ice",sr.Stats="livekit-stats";let or=ar.getLogger(e.LoggerNames.Default);const cr=Object.values(e.LoggerNames).map((e=>ar.getLogger(e)));function dr(e,t){const n=ar.getLogger(e);return n.setDefaultLevel(or.getLevel()),t?function(e,t){const n=n=>(i,r)=>{const s=t(),a=s||r?Object.assign(Object.assign({},s),r):void 0;e[n](i,a)},i=Object.create(e);return i.trace=n("trace"),i.debug=n("debug"),i.info=n("info"),i.warn=n("warn"),i.error=n("error"),i}(n,t):n}or.setDefaultLevel(e.LogLevel.info);const lr=ar.getLogger(e.LoggerNames.E2EE),ur=new Set,hr=lr.setLevel.bind(lr);function pr(e){return ur.add(e),()=>{ur.delete(e)}}lr.setLevel=(e,t)=>{hr(e,t);const n=lr.getLevel();ur.forEach((e=>e(n)))};const mr=7e3,gr=[0,300,1200,2700,4800,mr,mr,mr,mr,mr];class vr{constructor(e){this._retryDelays=void 0!==e?[...e]:gr}nextRetryDelayInMs(e){if(e.retryCount>=this._retryDelays.length)return null;const t=this._retryDelays[e.retryCount];return e.retryCount<=1?t:t+1e3*Math.random()}}function fr(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function br(e){return this instanceof br?(this.v=e,this):new br(e)}function Tr(e,t,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,s=i.apply(e,t||[]),a=[];return r=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),o("next"),o("throw"),o("return",(function(e){return function(t){return Promise.resolve(t).then(e,l)}})),r[Symbol.asyncIterator]=function(){return this},r;function o(e,t){s[e]&&(r[e]=function(t){return new Promise((function(n,i){a.push([e,t,n,i])>1||c(e,t)}))},t&&(r[e]=t(r[e])))}function c(e,t){try{(i=s[e](t)).value instanceof br?Promise.resolve(i.value.v).then(d,l):u(a[0][2],i)}catch(n){u(a[0][3],n)}var i}function d(e){c("next",e)}function l(e){c("throw",e)}function u(e,t){e(t),a.shift(),a.length&&c(a[0][0],a[0][1])}}function Sr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=yr(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise((function(i,r){(function(e,t,n,i){Promise.resolve(i).then((function(t){e({value:t,done:n})}),t)})(i,r,(t=e[n](t)).done,t.value)}))}}}"function"==typeof SuppressedError&&SuppressedError;var Er,Cr={exports:{}};var wr=function(){if(Er)return Cr.exports;Er=1;var e,t="object"==typeof Reflect?Reflect:null,n=t&&"function"==typeof t.apply?t.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function r(){r.init.call(this)}Cr.exports=r,Cr.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,s),i(n)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,r,{once:!0})}))},r.EventEmitter=r,r.prototype._events=void 0,r.prototype._eventsCount=0,r.prototype._maxListeners=void 0;var s=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function o(e){return void 0===e._maxListeners?r.defaultMaxListeners:e._maxListeners}function c(e,t,n,i){var r,s,c,d;if(a(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),c=s[t]),void 0===c)c=s[t]=n,++e._eventsCount;else if("function"==typeof c?c=s[t]=i?[n,c]:[c,n]:i?c.unshift(n):c.push(n),(r=o(e))>0&&c.length>r&&!c.warned){c.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=c.length,d=l,console&&console.warn&&console.warn(d)}return e}function d(){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 l(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=d.bind(i);return r.listener=n,i.wrapFn=r,r}function u(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=s[e];if(void 0===c)return!1;if("function"==typeof c)n(c,this,t);else{var d=c.length,l=p(c,d);for(i=0;i=0;s--)if(n[s]===t||n[s].listener===t){o=n[s].listener,r=s;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},r.prototype.listeners=function(e){return u(this,e,!0)},r.prototype.rawListeners=function(e){return u(this,e,!1)},r.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},r.prototype.listenerCount=h,r.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},Cr.exports}();let Rr=!0,Pr=!0;function Ir(e,t,n){const i=e.match(t);return i&&i.length>=n&&parseFloat(i[n],10)}function _r(e,t,n){if(!e.RTCPeerConnection)return;if(!Object.getOwnPropertyDescriptor(EventTarget.prototype,"addEventListener").writable)return void Or("Unable to polyfill events");const i=e.RTCPeerConnection.prototype,r=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return r.apply(this,arguments);const s=e=>{const t=n(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,s),r.apply(this,[e,s])};const s=i.removeEventListener;i.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return s.apply(this,arguments);if(!this._eventMap[t].has(n))return s.apply(this,arguments);const i=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,s.apply(this,[e,i])},Object.defineProperty(i,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function Mr(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Rr=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function Dr(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(Pr=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function Or(){if("object"==typeof window){if(Rr)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function Ar(e,t){Pr&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Lr(e){return"[object Object]"===Object.prototype.toString.call(e)}function Nr(e){return Lr(e)?Object.keys(e).reduce((function(t,n){const i=Lr(e[n]),r=i?Nr(e[n]):e[n],s=i&&!Object.keys(r).length;return void 0===r||s?t:Object.assign(t,{[n]:r})}),{}):e}function xr(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach((i=>{i.endsWith("Id")?xr(e,e.get(t[i]),n):i.endsWith("Ids")&&t[i].forEach((t=>{xr(e,e.get(t),n)}))})))}function Ur(e,t,n){const i=n?"outbound-rtp":"inbound-rtp",r=new Map;if(null===t)return r;const s=[];return e.forEach((e=>{"track"===e.type&&e.trackIdentifier===t.id&&s.push(e)})),s.forEach((t=>{e.forEach((n=>{n.type===i&&n.trackId===t.id&&xr(e,n,r)}))})),r}const Fr=Or;function Br(e,t){if(t.version>=64)return;const n=e&&e.navigator;if(!n.mediaDevices)return;const i=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach((n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const i="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);const r=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[r("min",n)]=i.ideal,t.optional.push(e),e={},e[r("max",n)]=i.ideal,t.optional.push(e)):(e[r("",n)]=i.ideal,t.optional.push(e))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[r("",n)]=i.exact):["min","max"].forEach((e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[r(e,n)]=i[e])}))})),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},r=function(e,r){if(t.version>=61)return r(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=i(e.audio)}if(e&&"object"==typeof e.video){let s=e.video.facingMode;s=s&&("object"==typeof s?s:{ideal:s});const a=t.version<66;if(s&&("user"===s.exact||"environment"===s.exact||"user"===s.ideal||"environment"===s.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||a)){let t;if(delete e.video.facingMode,"environment"===s.exact||"environment"===s.ideal?t=["back","rear"]:"user"!==s.exact&&"user"!==s.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then((n=>{let a=(n=n.filter((e=>"videoinput"===e.kind))).find((e=>t.some((t=>e.label.toLowerCase().includes(t)))));return!a&&n.length&&t.includes("back")&&(a=n[n.length-1]),a&&(e.video.deviceId=s.exact?{exact:a.deviceId}:{ideal:a.deviceId}),e.video=i(e.video),Fr("chrome: "+JSON.stringify(e)),r(e)}))}e.video=i(e.video)}return Fr("chrome: "+JSON.stringify(e)),r(e)},s=function(e){return t.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(n.getUserMedia=function(e,t,i){r(e,(e=>{n.webkitGetUserMedia(e,t,(e=>{i&&i(s(e))}))}))}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return r(t,(t=>e(t).then((e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach((e=>{e.stop()})),new DOMException("","NotFoundError");return e}),(e=>Promise.reject(s(e))))))}}}function jr(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function qr(e,t){if(!(t.version>102))if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",(n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.track.id)):{track:n.track};const r=new Event("track");r.track=n.track,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)})),t.stream.getTracks().forEach((n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find((e=>e.track&&e.track.id===n.id)):{track:n};const r=new Event("track");r.track=n,r.receiver=i,r.transceiver={receiver:i},r.streams=[t.stream],this.dispatchEvent(r)}))},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else _r(e,"track",(e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e)))}function Vr(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,i){let r=n.apply(this,arguments);return r||(r=t(this,e),this._senders.push(r)),r};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach((e=>{this._senders.push(t(this,e))}))};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.apply(this,[e]),e.getTracks().forEach((e=>{const t=this._senders.find((t=>t.track===e));t&&this._senders.splice(this._senders.indexOf(t),1)}))}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e},Object.defineProperty(e.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 Wr(e,t){if(t.version>=67)return;if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ur(t,e.track,!0)))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),_r(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then((t=>Ur(t,e.track,!1)))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const n=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,i;return this.getSenders().forEach((n=>{n.track===e&&(t?i=!0:t=n)})),this.getReceivers().forEach((t=>(t.track===e&&(n?i=!0:n=t),t.track===e))),i||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return n.apply(this,arguments)}}function Hr(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((e=>this._shimmedLocalStreams[e][0]))};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(i)&&this._shimmedLocalStreams[n.id].push(i):this._shimmedLocalStreams[n.id]=[n,i],i};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")}));const t=this.getSenders();n.apply(this,arguments);const i=this.getSenders().filter((e=>-1===t.indexOf(e)));this._shimmedLocalStreams[e.id]=[e].concat(i)};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach((t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]})),r.apply(this,arguments)}}function Kr(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return Hr(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map((e=>this._reverseStreams[e.id]))};const i=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach((e=>{if(this.getSenders().find((t=>t.track===e)))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}i.apply(this,[t])};const r=e.RTCPeerConnection.prototype.removeStream;function s(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(r.id,"g"),i.id)})),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const i=[].slice.call(arguments,1);if(1!==i.length||!i[0].getTracks().find((e=>e===t)))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((e=>e.track===t)))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const r=this._streams[n.id];if(r)r.addTrack(t),Promise.resolve().then((()=>{this.dispatchEvent(new Event("negotiationneeded"))}));else{const i=new e.MediaStream([t]);this._streams[n.id]=i,this._reverseStreams[i.id]=n,this.addStream(i)}return this.getSenders().find((e=>e.track===t))},["createOffer","createAnswer"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=s(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then((e=>s(this,e)))}};e.RTCPeerConnection.prototype[t]=i[t]}));const a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach((t=>{const i=e._reverseStreams[t],r=e._streams[i.id];n=n.replace(new RegExp(i.id,"g"),r.id)})),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),a.apply(this,arguments)):a.apply(this,arguments)};const o=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=o.get.apply(this);return""===e.type?e:s(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach((n=>{this._streams[n].getTracks().find((t=>e.track===t))&&(t=this._streams[n])})),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function zr(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]}))}function Gr(e,t){t.version>102||_r(e,"negotiationneeded",(e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e}))}var Jr=Object.freeze({__proto__:null,fixNegotiationNeeded:Gr,shimAddTrackRemoveTrack:Kr,shimAddTrackRemoveTrackWithNative:Hr,shimGetSendersWithDtmf:Vr,shimGetUserMedia:Br,shimMediaStream:jr,shimOnTrack:qr,shimPeerConnection:zr,shimSenderReceiverGetStats:Wr});function Qr(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const i=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,i){Ar("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,i)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},i&&i.prototype.getSettings){const t=i.prototype.getSettings;i.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(i&&i.prototype.applyConstraints){const t=i.prototype.applyConstraints;i.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function Yr(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Xr(e,t){"object"==typeof e&&(e.RTCPeerConnection||e.mozRTCPeerConnection)&&(!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]})))}function Zr(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;if(t.version>=151)return;const i={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const e=Array.prototype.slice.call(arguments),s=e[0],a=e[1],o=e[2];return"closed"===this.signalingState?Promise.resolve(new Map):r.apply(this,[s||null]).then((e=>{if(t.version<53&&!a)try{e.forEach((e=>{e.type=i[e.type]||e.type}))}catch(n){if("TypeError"!==n.name)throw n;e.forEach(((t,n)=>{e.set(n,Object.assign({},t,{type:i[t.type]||t.type}))}))}return e})).then(a,o)}}function $r(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function es(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach((e=>e._pc=this)),e}),_r(e,"track",(e=>(e.receiver._pc=e.srcElement,e))),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function ts(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){Ar("removeStream","removeTrack"),this.getSenders().forEach((t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)}))})}function ns(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function is(e,t){if("object"!=typeof e||!e.RTCPeerConnection)return;if(t.version>=110)return;const n=e.RTCPeerConnection.prototype.addTransceiver;n&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1]&&arguments[1].sendEncodings;void 0===e&&(e=[]),e=[...e];const t=e.length>0;t&&e.forEach((e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));const i=n.apply(this,arguments);if(t){const t=i.sender,n=t.getParameters();(!("encodings"in n)||1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e,t.sendEncodings=e,this.setParametersPromises.push(t.setParameters(n).then((()=>{delete t.sendEncodings})).catch((()=>{delete t.sendEncodings}))))}return i})}function rs(e,t){if("object"!=typeof e||!e.RTCRtpSender)return;if(t.version>=110)return;const n=e.RTCRtpSender.prototype.getParameters;n&&(e.RTCRtpSender.prototype.getParameters=function(){const e=n.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function ss(e,t){if("object"!=typeof e||!e.RTCPeerConnection)return;if(t.version>=110)return;const n=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>n.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):n.apply(this,arguments)}}function as(e,t){if("object"!=typeof e||!e.RTCPeerConnection)return;if(t.version>=110)return;const n=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((()=>n.apply(this,arguments))).finally((()=>{this.setParametersPromises=[]})):n.apply(this,arguments)}}var os=Object.freeze({__proto__:null,shimAddTransceiver:is,shimCreateAnswer:as,shimCreateOffer:ss,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&(e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)}))},shimGetParameters:rs,shimGetStats:Zr,shimGetUserMedia:Qr,shimOnTrack:Yr,shimPeerConnection:Xr,shimRTCDataChannel:ns,shimReceiverGetStats:es,shimRemoveStream:ts,shimSenderGetStats:$r});function cs(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach((n=>t.call(this,n,e))),e.getVideoTracks().forEach((n=>t.call(this,n,e)))},e.RTCPeerConnection.prototype.addTrack=function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]})),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach((e=>{n.includes(e.track)&&this.removeTrack(e)}))})}}function ds(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach((e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)}))})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach((t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)}))}),t.apply(e,arguments)}}}function ls(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,i=t.createAnswer,r=t.setLocalDescription,s=t.setRemoteDescription,a=t.addIceCandidate;t.createOffer=function(e,t){const i=arguments.length>=2?arguments[2]:arguments[0],r=n.apply(this,[i]);return t?(r.then(e,t),Promise.resolve()):r},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],r=i.apply(this,[n]);return t?(r.then(e,t),Promise.resolve()):r};let o=function(e,t,n){const i=r.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i};t.setLocalDescription=o,o=function(e,t,n){const i=s.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.setRemoteDescription=o,o=function(e,t,n){const i=a.apply(this,[e]);return n?(i.then(t,n),Promise.resolve()):i},t.addIceCandidate=o}function us(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(hs(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,i){t.mediaDevices.getUserMedia(e).then(n,i)}.bind(t))}function hs(e){return e&&void 0!==e.video?Object.assign({},e,{video:Nr(e.video)}):e}function ps(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;nt.generateCertificate})}function ms(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function gs(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find((e=>"audio"===e.receiver.track.kind));!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find((e=>"video"===e.receiver.track.kind));!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function vs(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var fs,ks=Object.freeze({__proto__:null,shimAudioContext:vs,shimCallbacksAPI:ls,shimConstraints:hs,shimCreateOfferLegacy:gs,shimGetUserMedia:us,shimLocalStreamsAPI:cs,shimRTCIceServerUrls:ps,shimRemoteStreamsAPI:ds,shimTrackEventTransceiver:ms}),ys={exports:{}};var bs=(fs||(fs=1,function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){const n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter((e=>0===e.indexOf(n)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const n={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let i=8;i0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let n;const i=e.substring(e.indexOf(" ")+1).split(";");for(let r=0;r{void 0!==e.parameters[t]?i.push(t+"="+e.parameters[t]):i.push(t)})),t+="a=fmtp:"+n+" "+i.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),n={ssrc:parseInt(e.substring(7,t),10)},i=e.indexOf(":",t);return i>-1?(n.attribute=e.substring(t+1,i),n.value=e.substring(i+1)):n.attribute=e.substring(t+1),n},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const n=t.matchPrefix(e,"a=mid:")[0];if(n)return n.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let n="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),n},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,n){return t.matchPrefix(e+n,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,n){const i=t.matchPrefix(e+n,"a=ice-ufrag:")[0],r=t.matchPrefix(e+n,"a=ice-pwd:")[0];return i&&r?{usernameFragment:i.substring(12),password:r.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");n.profile=i[2];for(let s=3;s{n.headerExtensions.push(t.parseExtmap(e))}));const r=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return n.codecs.forEach((e=>{r.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),n},t.writeRtpDescription=function(e,n){let i="";i+="m="+e+" ",i+=n.codecs.length>0?"9":"0",i+=" "+(n.profile||"UDP/TLS/RTP/SAVPF")+" ",i+=n.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",i+="c=IN IP4 0.0.0.0\r\n",i+="a=rtcp:9 IN IP4 0.0.0.0\r\n",n.codecs.forEach((e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)}));let r=0;return n.codecs.forEach((e=>{e.maxptime>r&&(r=e.maxptime)})),r>0&&(i+="a=maxptime:"+r+"\r\n"),n.headerExtensions&&n.headerExtensions.forEach((e=>{i+=t.writeExtmap(e)})),i},t.parseRtpEncodingParameters=function(e){const n=[],i=t.parseRtpParameters(e),r=-1!==i.fecMechanisms.indexOf("RED"),s=-1!==i.fecMechanisms.indexOf("ULPFEC"),a=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),o=a.length>0&&a[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));d.length>0&&d[0].length>1&&d[0][0]===o&&(c=d[0][1]),i.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:o,codecPayloadType:parseInt(e.parameters.apt,10)};o&&c&&(t.rtx={ssrc:c}),n.push(t),r&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:o,mechanism:s?"red+ulpfec":"red"},n.push(t))}})),0===n.length&&o&&n.push({ssrc:o});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substring(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substring(5),10)*.95-16e3:void 0,n.forEach((e=>{e.maxBitrate=l}))),n},t.parseRtcpParameters=function(e){const n={},i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];i&&(n.cname=i.value,n.ssrc=i.ssrc);const r=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=r.length>0,n.compound=0===r.length;const s=t.matchPrefix(e,"a=rtcp-mux");return n.mux=s.length>0,n},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let n;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return n=i[0].substring(7).split(" "),{stream:n[0],track:n[1]};const r=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return r.length>0?(n=r[0].value.split(" "),{stream:n[0],track:n[1]}):void 0},t.parseSctpDescription=function(e){const n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let r;i.length>0&&(r=parseInt(i[0].substring(19),10)),isNaN(r)&&(r=65536);const s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:n.fmt,maxMessageSize:r};const a=t.matchPrefix(e,"a=sctpmap:");if(a.length>0){const e=a[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:r}}},t.writeSctpDescription=function(e,t){let n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),n.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,n,i){let r;const s=void 0!==n?n:2;return r=e||t.generateSessionId(),"v=0\r\no="+(i||"thisisadapterortc")+" "+r+" "+s+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,n){const i=t.splitLines(e);for(let t=0;t(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t)))}function Cs(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||_r(e,"icecandidate",(e=>{if(e.candidate){const t=Ts.parseCandidate(e.candidate.candidate);"relay"===t.type&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[t.priority>>24])}return e}))}function ws(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>102)return;if("firefox"===t.browser&&t.version>=113)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){"plan-b"===this.getConfiguration().sdpSemantics&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=Ts.splitSections(e.sdp);return t.shift(),t.some((e=>{const t=Ts.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")}))}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n}(arguments[0]),n=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n}(e),i=function(e,n){let i=65536;"firefox"===t.browser&&57===t.version&&(i=65535);const r=Ts.matchPrefix(e.sdp,"a=max-message-size:");return r.length>0?i=parseInt(r[0].substring(19),10):"firefox"===t.browser&&-1!==n&&(i=2147483637),i}(arguments[0],e);let r;r=0===n&&0===i?Number.POSITIVE_INFINITY:0===n||0===i?Math.max(n,i):Math.min(n,i);const s={};Object.defineProperty(s,"maxMessageSize",{get:()=>r}),this._sctp=s}return n.apply(this,arguments)}}function Rs(e,t){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;if("chrome"===t.browser&&t.version>=149)return;if("firefox"===t.browser&&t.version>60)return;function n(e,t){const n=e.send;e.send=function(){const i=arguments[0],r=i.length||i.size||i.byteLength;if("open"===e.readyState&&t.sctp&&r>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const i=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=i.apply(this,arguments);return n(e,this),e},_r(e,"datachannel",(e=>(n(e.channel,e.target),e)))}function Ps(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}}))}function Is(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t._safariVersion>=13.1)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const n=t.sdp.split("\n").filter((e=>"a=extmap-allow-mixed"!==e.trim())).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function _s(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.addIceCandidate;n&&0!==n.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Ms(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.setLocalDescription;n&&0!==n.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return n.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}if(e.sdp||"offer"!==e.type&&"answer"!==e.type)return n.apply(this,[e]);return("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then((e=>n.apply(this,[e])))})}var Ds,Os,As=Object.freeze({__proto__:null,removeExtmapAllowMixed:Is,shimAddIceCandidateNullOrEmpty:_s,shimConnectionState:Ps,shimMaxMessageSize:ws,shimParameterlessSetLocalDescription:Ms,shimRTCIceCandidate:Es,shimRTCIceCandidateRelayProtocol:Cs,shimSendThrowTypeError:Rs});!function(){let e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).window,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const n=Or,i=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator||!e.navigator.userAgent)return t.browser="Not a browser.",t;const n=e.navigator;if(n.userAgentData&&n.userAgentData.brands){const e=n.userAgentData.brands.find((e=>"Chromium"===e.brand));if(e){const t=parseInt(e.version,10);if(t>=90)return{browser:"chrome",version:t}}}if(n.mozGetUserMedia)t.browser="firefox",t.version=parseInt(Ir(n.userAgent,/Firefox\/(\d+)\./,1));else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection)t.browser="chrome",t.version=parseInt(Ir(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2))||null;else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=parseInt(Ir(n.userAgent,/AppleWebKit\/(\d+)\./,1)),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype,t._safariVersion=Ir(n.userAgent,/Version\/(\d+(\.?\d+))/,1)}return t}(e),r={browserDetails:i,commonShim:As,extractVersion:Ir,disableLog:Mr,disableWarnings:Dr,sdp:Ss};switch(i.browser){case"chrome":if(!Jr||!zr||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),r;if(null===i.version)return n("Chrome shim can not determine version, not shimming."),r;n("adapter.js shimming chrome."),r.browserShim=Jr,_s(e,i),Ms(e),Br(e,i),jr(e),zr(e,i),qr(e,i),Kr(e,i),Vr(e),Wr(e,i),Gr(e,i),Es(e),Cs(e),Ps(e),ws(e,i),Rs(e,i),Is(e,i);break;case"firefox":if(!os||!Xr||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),r;n("adapter.js shimming firefox."),r.browserShim=os,_s(e,i),Ms(e),Qr(e,i),Xr(e,i),Zr(e,i),Yr(e),ts(e),$r(e),es(e),ns(e),is(e,i),rs(e,i),ss(e,i),as(e,i),Es(e),Ps(e),ws(e,i),Rs(e,i);break;case"safari":if(!ks||!t.shimSafari)return n("Safari shim is not included in this adapter release."),r;n("adapter.js shimming safari."),r.browserShim=ks,_s(e,i),Ms(e),ps(e),gs(e),ls(e),cs(e),ds(e),ms(e),us(e),vs(e),Es(e),Cs(e),ws(e,i),Rs(e,i),Is(e,i);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});class Ls extends(Os=Promise){constructor(e){super(e)}catch(e){return super.catch(e)}static reject(e){return super.reject(e)}static all(e){return super.all(e)}static race(e){return super.race(e)}}Ds=Ls,Ls.resolve=e=>Reflect.get(Os,"resolve",Ds).call(Ds,e);const Ns=/version\/(\d+(\.?_?\d+)+)/i;let xs;function Us(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e&&"undefined"==typeof navigator)return;const n=(null!=e?e:navigator.userAgent).toLowerCase();if(void 0===xs||t){const e=Fs.find((e=>e.test.test(n)));xs=null==e?void 0:e.describe(n)}return xs}const Fs=[{test:/firefox|iceweasel|fxios/i,describe:e=>({name:"Firefox",version:Bs(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e),os:e.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:js(e)})},{test:/chrom|crios|crmo/i,describe:e=>({name:"Chrome",version:Bs(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e),os:e.toLowerCase().includes("crios")?"iOS":void 0,osVersion:js(e)})},{test:/safari|applewebkit/i,describe:e=>({name:"Safari",version:Bs(Ns,e),os:e.includes("mobile/")?"iOS":"macOS",osVersion:js(e)})}];function Bs(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const i=t.match(e);return i&&i.length>=n&&i[n]||""}function js(e){return e.includes("mac os")?Bs(/\(.+?(\d+_\d+(:?_\d+)?)/,e,1).replace(/_/g,"."):void 0}const qs="2.22.4";class Vs extends Error{constructor(e,t,n){super(t||"an error has occurred"),this.name="LiveKitError",this.code=e,void 0!==(null==n?void 0:n.cause)&&(this.cause=null==n?void 0:n.cause)}}class Ws extends Vs{}var Hs,Ks,zs,Gs,Js,Qs,Ys;e.ConnectionErrorReason=void 0,(Hs=e.ConnectionErrorReason||(e.ConnectionErrorReason={}))[Hs.NotAllowed=0]="NotAllowed",Hs[Hs.ServerUnreachable=1]="ServerUnreachable",Hs[Hs.InternalError=2]="InternalError",Hs[Hs.Cancelled=3]="Cancelled",Hs[Hs.LeaveRequest=4]="LeaveRequest",Hs[Hs.Timeout=5]="Timeout",Hs[Hs.WebSocket=6]="WebSocket",Hs[Hs.ServiceNotFound=7]="ServiceNotFound";class Xs extends Ws{constructor(t,n,i,r){super(1,t),this.name="ConnectionError",this.status=i,this.reason=n,this.context=r,this.reasonName=e.ConnectionErrorReason[n]}static notAllowed(t,n,i){return new Xs(t,e.ConnectionErrorReason.NotAllowed,n,i)}static timeout(t){return new Xs(t,e.ConnectionErrorReason.Timeout)}static leaveRequest(t,n){return new Xs(t,e.ConnectionErrorReason.LeaveRequest,void 0,n)}static internal(t,n){return new Xs(t,e.ConnectionErrorReason.InternalError,void 0,n)}static cancelled(t){return new Xs(t,e.ConnectionErrorReason.Cancelled)}static serverUnreachable(t,n){return new Xs(t,e.ConnectionErrorReason.ServerUnreachable,n)}static websocket(t,n,i){return new Xs(t,e.ConnectionErrorReason.WebSocket,n,i)}static serviceNotFound(t,n){return new Xs(t,e.ConnectionErrorReason.ServiceNotFound,void 0,n)}}function Zs(t){return t.reason!==e.ConnectionErrorReason.Cancelled&&(t.reason!==e.ConnectionErrorReason.NotAllowed||403===t.status)}class $s extends Vs{constructor(e){super(21,null!=e?e:"device is unsupported"),this.name="DeviceUnsupportedError"}}class ea extends Vs{constructor(e){super(20,null!=e?e:"track is invalid"),this.name="TrackInvalidError"}}class ta extends Vs{constructor(e){super(10,e||"unsupported server"),this.name="UnsupportedServer"}}class na extends Vs{constructor(e){super(12,e||"unexpected connection state"),this.name="UnexpectedConnectionState"}}class ia extends Vs{constructor(e){super(13,e||"unable to negotiate"),this.name="NegotiationError"}}class ra extends Vs{constructor(e){super(14,e||"unable to publish data"),this.name="PublishDataError"}}class sa extends Vs{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class aa extends Ws{constructor(e,t){super(15,e),this.name="SignalRequestError",this.reason=t,this.reasonName="string"==typeof t?t:Ki[t]}}e.DataStreamErrorReason=void 0,(Ks=e.DataStreamErrorReason||(e.DataStreamErrorReason={}))[Ks.AlreadyOpened=0]="AlreadyOpened",Ks[Ks.AbnormalEnd=1]="AbnormalEnd",Ks[Ks.DecodeFailed=2]="DecodeFailed",Ks[Ks.LengthExceeded=3]="LengthExceeded",Ks[Ks.Incomplete=4]="Incomplete",Ks[Ks.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered",Ks[Ks.EncryptionTypeMismatch=8]="EncryptionTypeMismatch",Ks[Ks.HeaderTooLarge=9]="HeaderTooLarge",Ks[Ks.PayloadTooLarge=10]="PayloadTooLarge";class oa extends Ws{constructor(t,n){super(16,t),this.name="DataStreamError",this.reason=n,this.reasonName=e.DataStreamErrorReason[n]}}class ca extends Vs{constructor(e){super(18,e),this.name="SignalReconnectError"}}e.MediaDeviceFailure=void 0,(zs=e.MediaDeviceFailure||(e.MediaDeviceFailure={})).PermissionDenied="PermissionDenied",zs.NotFound="NotFound",zs.DeviceInUse="DeviceInUse",zs.Other="Other",function(e){e.getFailure=function(t){if(t&&"name"in t)return"NotFoundError"===t.name||"DevicesNotFoundError"===t.name?e.NotFound:"NotAllowedError"===t.name||"PermissionDeniedError"===t.name?e.PermissionDenied:"NotReadableError"===t.name||"TrackStartError"===t.name?e.DeviceInUse:e.Other}}(e.MediaDeviceFailure||(e.MediaDeviceFailure={}));class da{}function la(e){const t={};for(const i of Object.entries(e)){var n=B(i,2);const e=n[0],r=n[1];void 0!==r&&(t[e]=r)}return t}function ua(e,t){return e&&t?"".concat(e,"x").concat(t):void 0}function ha(e){return Math.round(1e4*e)/1e4}function pa(e){const t=e.jitterBufferDelay,n=e.jitterBufferEmittedCount;return void 0!==t&&n?ha(t/n):void 0}function ma(e,t){if(void 0!==e.playoutDelay)return ha(e.playoutDelay);const n=null==t?void 0:t.totalPlayoutDelay,i=null==t?void 0:t.totalSamplesCount;return void 0!==n&&i?ha(n/i):void 0}function ga(e){var t,n;const i=new Map,r=[],s=[],a=[];let o;e.forEach((e=>i.set(e.id,e)));const c=e=>{var t;return e.codecId?null===(t=i.get(e.codecId))||void 0===t?void 0:t.mimeType:void 0},d=(e,t)=>e[t]?i.get(e[t]):void 0;e.forEach((e=>{switch(e.type){case"inbound-rtp":{const t=d(e,"playoutId");s.push(la({kind:e.kind,ssrc:e.ssrc,mid:e.mid,trackId:e.trackIdentifier,codec:c(e),decoder:e.decoderImplementation,resolution:ua(e.frameWidth,e.frameHeight),fps:e.framesPerSecond,bytesReceived:e.bytesReceived,packetsReceived:e.packetsReceived,packetsLost:e.packetsLost,packetsDiscarded:e.packetsDiscarded,framesReceived:e.framesReceived,framesDecoded:e.framesDecoded,framesDropped:e.framesDropped,keyFramesDecoded:e.keyFramesDecoded,freezeCount:e.freezeCount,totalFreezesDuration:e.totalFreezesDuration,pauseCount:e.pauseCount,nackCount:e.nackCount,pliCount:e.pliCount,firCount:e.firCount,jitter:e.jitter,jitterBuffer:pa(e),playoutDelay:ma(e,t),audioLevel:e.audioLevel,totalSamplesReceived:e.totalSamplesReceived,concealedSamples:e.concealedSamples}));break}case"outbound-rtp":{const t=d(e,"remoteId"),n=d(e,"mediaSourceId");a.push(la({kind:e.kind,ssrc:e.ssrc,mid:e.mid,rid:e.rid,trackId:null==n?void 0:n.trackIdentifier,active:e.active,codec:c(e),encoder:e.encoderImplementation,resolution:ua(e.frameWidth,e.frameHeight),fps:e.framesPerSecond,captureResolution:ua(null==n?void 0:n.width,null==n?void 0:n.height),captureFps:null==n?void 0:n.framesPerSecond,audioLevel:null==n?void 0:n.audioLevel,targetBitrate:e.targetBitrate,bytesSent:e.bytesSent,packetsSent:e.packetsSent,retransmittedPacketsSent:e.retransmittedPacketsSent,framesEncoded:e.framesEncoded,keyFramesEncoded:e.keyFramesEncoded,limitedBy:"none"===e.qualityLimitationReason?void 0:e.qualityLimitationReason,nackCount:e.nackCount,pliCount:e.pliCount,firCount:e.firCount,remotePacketsLost:null==t?void 0:t.packetsLost,remoteFractionLost:null==t?void 0:t.fractionLost,remoteJitter:null==t?void 0:t.jitter,remoteRoundTripTime:null==t?void 0:t.roundTripTime}));break}case"transport":o=e;break;case"candidate-pair":r.push(e)}}));const l=null==o?void 0:o.selectedCandidatePairId,u=null!==(n=null!==(t=l?i.get(l):void 0)&&void 0!==t?t:r.find((e=>e.selected)))&&void 0!==n?n:r.find((e=>e.nominated)),h=(null==u?void 0:u.localCandidateId)?i.get(u.localCandidateId):void 0,p=(null==u?void 0:u.remoteCandidateId)?i.get(u.remoteCandidateId):void 0,m=la({ice:null==o?void 0:o.iceState,dtls:null==o?void 0:o.dtlsState,route:h&&p?"".concat(h.candidateType,"/").concat(h.protocol," -> ").concat(p.candidateType):void 0,network:null==h?void 0:h.networkType,currentRoundTripTime:null==u?void 0:u.currentRoundTripTime,availableOutgoingBitrate:null==u?void 0:u.availableOutgoingBitrate,availableIncomingBitrate:null==u?void 0:u.availableIncomingBitrate,bytesSent:null==u?void 0:u.bytesSent,bytesReceived:null==u?void 0:u.bytesReceived,candidatePairChanges:null==o?void 0:o.selectedCandidatePairChanges});return{connection:Object.keys(m).length>0?m:void 0,outbound:a.length>0?a:void 0,inbound:s.length>0?s:void 0}}da.setTimeout=function(){return setTimeout(...arguments)},da.setInterval=function(){return setInterval(...arguments)},da.clearTimeout=function(){return clearTimeout(...arguments)},da.clearInterval=function(){return clearInterval(...arguments)},e.RoomEvent=void 0,(Gs=e.RoomEvent||(e.RoomEvent={})).Connected="connected",Gs.Reconnecting="reconnecting",Gs.SignalReconnecting="signalReconnecting",Gs.Reconnected="reconnected",Gs.Disconnected="disconnected",Gs.ConnectionStateChanged="connectionStateChanged",Gs.Moved="moved",Gs.MediaDevicesChanged="mediaDevicesChanged",Gs.ParticipantConnected="participantConnected",Gs.ParticipantDisconnected="participantDisconnected",Gs.TrackPublished="trackPublished",Gs.TrackSubscribed="trackSubscribed",Gs.TrackSubscriptionFailed="trackSubscriptionFailed",Gs.TrackUnpublished="trackUnpublished",Gs.TrackUnsubscribed="trackUnsubscribed",Gs.TrackMuted="trackMuted",Gs.TrackUnmuted="trackUnmuted",Gs.LocalTrackPublished="localTrackPublished",Gs.LocalTrackUnpublished="localTrackUnpublished",Gs.LocalAudioSilenceDetected="localAudioSilenceDetected",Gs.ActiveSpeakersChanged="activeSpeakersChanged",Gs.ParticipantMetadataChanged="participantMetadataChanged",Gs.ParticipantNameChanged="participantNameChanged",Gs.ParticipantAttributesChanged="participantAttributesChanged",Gs.ParticipantActive="participantActive",Gs.RoomMetadataChanged="roomMetadataChanged",Gs.DataReceived="dataReceived",Gs.SipDTMFReceived="sipDTMFReceived",Gs.TranscriptionReceived="transcriptionReceived",Gs.ConnectionQualityChanged="connectionQualityChanged",Gs.TrackStreamStateChanged="trackStreamStateChanged",Gs.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",Gs.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",Gs.AudioPlaybackStatusChanged="audioPlaybackChanged",Gs.VideoPlaybackStatusChanged="videoPlaybackChanged",Gs.MediaDevicesError="mediaDevicesError",Gs.ParticipantPermissionsChanged="participantPermissionsChanged",Gs.SignalConnected="signalConnected",Gs.RecordingStatusChanged="recordingStatusChanged",Gs.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",Gs.EncryptionError="encryptionError",Gs.DCBufferStatusChanged="dcBufferStatusChanged",Gs.ActiveDeviceChanged="activeDeviceChanged",Gs.ChatMessage="chatMessage",Gs.LocalTrackSubscribed="localTrackSubscribed",Gs.MetricsReceived="metricsReceived",Gs.DataTrackPublished="dataTrackPublished",Gs.DataTrackUnpublished="dataTrackUnpublished",Gs.LocalDataTrackPublished="localDataTrackPublished",Gs.LocalDataTrackUnpublished="localDataTrackUnpublished",e.ParticipantEvent=void 0,(Js=e.ParticipantEvent||(e.ParticipantEvent={})).TrackPublished="trackPublished",Js.TrackSubscribed="trackSubscribed",Js.TrackSubscriptionFailed="trackSubscriptionFailed",Js.TrackUnpublished="trackUnpublished",Js.TrackUnsubscribed="trackUnsubscribed",Js.TrackMuted="trackMuted",Js.TrackUnmuted="trackUnmuted",Js.LocalTrackPublished="localTrackPublished",Js.LocalTrackUnpublished="localTrackUnpublished",Js.LocalTrackCpuConstrained="localTrackCpuConstrained",Js.LocalSenderCreated="localSenderCreated",Js.ParticipantMetadataChanged="participantMetadataChanged",Js.ParticipantNameChanged="participantNameChanged",Js.DataReceived="dataReceived",Js.SipDTMFReceived="sipDTMFReceived",Js.TranscriptionReceived="transcriptionReceived",Js.IsSpeakingChanged="isSpeakingChanged",Js.ConnectionQualityChanged="connectionQualityChanged",Js.TrackStreamStateChanged="trackStreamStateChanged",Js.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",Js.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",Js.TrackCpuConstrained="trackCpuConstrained",Js.MediaDevicesError="mediaDevicesError",Js.AudioStreamAcquired="audioStreamAcquired",Js.ParticipantPermissionsChanged="participantPermissionsChanged",Js.PCTrackAdded="pcTrackAdded",Js.AttributesChanged="attributesChanged",Js.LocalTrackSubscribed="localTrackSubscribed",Js.ChatMessage="chatMessage",Js.Active="active",e.EngineEvent=void 0,(Qs=e.EngineEvent||(e.EngineEvent={})).TransportsCreated="transportsCreated",Qs.Connected="connected",Qs.Disconnected="disconnected",Qs.Resuming="resuming",Qs.Resumed="resumed",Qs.Restarting="restarting",Qs.Restarted="restarted",Qs.SignalResumed="signalResumed",Qs.SignalRestarted="signalRestarted",Qs.Closing="closing",Qs.MediaTrackAdded="mediaTrackAdded",Qs.ActiveSpeakersUpdate="activeSpeakersUpdate",Qs.DataPacketReceived="dataPacketReceived",Qs.RTPVideoMapUpdate="rtpVideoMapUpdate",Qs.DCBufferStatusChanged="dcBufferStatusChanged",Qs.ParticipantUpdate="participantUpdate",Qs.RoomUpdate="roomUpdate",Qs.SpeakersChanged="speakersChanged",Qs.StreamStateChanged="streamStateChanged",Qs.ConnectionQualityUpdate="connectionQualityUpdate",Qs.SubscriptionError="subscriptionError",Qs.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",Qs.RemoteMute="remoteMute",Qs.SubscribedQualityUpdate="subscribedQualityUpdate",Qs.LocalTrackUnpublished="localTrackUnpublished",Qs.LocalTrackSubscribed="localTrackSubscribed",Qs.Offline="offline",Qs.SignalRequestResponse="signalRequestResponse",Qs.SignalConnected="signalConnected",Qs.RoomMoved="roomMoved",Qs.PublishDataTrackResponse="publishDataTrackResponse",Qs.UnPublishDataTrackResponse="unPublishDataTrackResponse",Qs.DataTrackSubscriberHandles="dataTrackSubscriberHandles",Qs.DataTrackPacketReceived="dataTrackPacketReceived",Qs.Joined="joined",Qs.TokenRefreshed="tokenRefreshed",Qs.ServerRegionsReported="serverRegionsReported",Qs.RequestSubscribedCodecRefresh="requestSubscribedCodecRefresh",e.TrackEvent=void 0,(Ys=e.TrackEvent||(e.TrackEvent={})).Message="message",Ys.Muted="muted",Ys.Unmuted="unmuted",Ys.Restarted="restarted",Ys.Ended="ended",Ys.Subscribed="subscribed",Ys.Unsubscribed="unsubscribed",Ys.CpuConstrained="cpuConstrained",Ys.UpdateSettings="updateSettings",Ys.UpdateSubscription="updateSubscription",Ys.AudioPlaybackStarted="audioPlaybackStarted",Ys.AudioPlaybackFailed="audioPlaybackFailed",Ys.AudioSilenceDetected="audioSilenceDetected",Ys.VisibilityChanged="visibilityChanged",Ys.VideoDimensionsChanged="videoDimensionsChanged",Ys.VideoPlaybackStarted="videoPlaybackStarted",Ys.VideoPlaybackFailed="videoPlaybackFailed",Ys.ElementAttached="elementAttached",Ys.ElementDetached="elementDetached",Ys.UpstreamPaused="upstreamPaused",Ys.UpstreamResumed="upstreamResumed",Ys.SubscriptionPermissionChanged="subscriptionPermissionChanged",Ys.SubscriptionStatusChanged="subscriptionStatusChanged",Ys.SubscriptionFailed="subscriptionFailed",Ys.TrackProcessorUpdate="trackProcessorUpdate",Ys.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",Ys.TranscriptionReceived="transcriptionReceived",Ys.TimeSyncUpdate="timeSyncUpdate",Ys.PreConnectBufferFlushed="preConnectBufferFlushed";class va{constructor(e,t,n,i,r){if("object"==typeof e)this.width=e.width,this.height=e.height,this.aspectRatio=e.aspectRatio,this.encoding={maxBitrate:e.maxBitrate,maxFramerate:e.maxFramerate,priority:e.priority};else{if(void 0===t||void 0===n)throw new TypeError("Unsupported options: provide at least width, height and maxBitrate");this.width=e,this.height=t,this.aspectRatio=e/t,this.encoding={maxBitrate:n,maxFramerate:i,priority:r}}}get resolution(){return{width:this.width,height:this.height,frameRate:this.encoding.maxFramerate,aspectRatio:this.aspectRatio}}}const fa=["opus","red"],ka=["vp8","h264"],ya=["vp8","h264","vp9","av1","h265"];function ba(e){return!!ka.find((t=>t===e))}const Ta=ba;var Sa,Ea;e.BackupCodecPolicy=void 0,(Sa=e.BackupCodecPolicy||(e.BackupCodecPolicy={}))[Sa.PREFER_REGRESSION=0]="PREFER_REGRESSION",Sa[Sa.SIMULCAST=1]="SIMULCAST",Sa[Sa.REGRESSION=2]="REGRESSION",e.AudioPresets=void 0,(Ea=e.AudioPresets||(e.AudioPresets={})).telephone={maxBitrate:12e3},Ea.speech={maxBitrate:24e3},Ea.music={maxBitrate:48e3},Ea.musicStereo={maxBitrate:64e3},Ea.musicHighQuality={maxBitrate:96e3},Ea.musicHighQualityStereo={maxBitrate:128e3};const Ca={h90:new va(160,90,9e4,20),h180:new va(320,180,16e4,20),h216:new va(384,216,18e4,20),h360:new va(640,360,45e4,20),h540:new va(960,540,8e5,25),h720:new va(1280,720,17e5,30),h1080:new va(1920,1080,3e6,30),h1440:new va(2560,1440,5e6,30),h2160:new va(3840,2160,8e6,30)},wa={h120:new va(160,120,7e4,20),h180:new va(240,180,125e3,20),h240:new va(320,240,14e4,20),h360:new va(480,360,33e4,20),h480:new va(640,480,5e5,20),h540:new va(720,540,6e5,25),h720:new va(960,720,13e5,30),h1080:new va(1440,1080,23e5,30),h1440:new va(1920,1440,38e5,30)},Ra={h360fps3:new va(640,360,2e5,3,"medium"),h360fps15:new va(640,360,4e5,15,"medium"),h720fps5:new va(1280,720,8e5,5,"medium"),h720fps15:new va(1280,720,15e5,15,"medium"),h720fps30:new va(1280,720,2e6,30,"medium"),h1080fps15:new va(1920,1080,25e5,15,"medium"),h1080fps30:new va(1920,1080,5e6,30,"medium"),original:new va(0,0,7e6,30,"medium")};function Pa(e,t,n){var i,r,s,a;const o=Fa(null!=e?e:{}),c=o.optionsWithoutProcessor,d=o.audioProcessor,l=o.videoProcessor,u=null==t?void 0:t.processor,h=null==n?void 0:n.processor,p=null!=c?c:{};return!0===p.audio&&(p.audio={}),!0===p.video&&(p.video={}),p.audio&&(Ia(p.audio,t),null!==(i=(s=p.audio).deviceId)&&void 0!==i||(s.deviceId={ideal:"default"}),(d||u)&&(p.audio.processor=null!=d?d:u)),p.video&&(Ia(p.video,n),null!==(r=(a=p.video).deviceId)&&void 0!==r||(a.deviceId={ideal:"default"}),(l||h)&&(p.video.processor=null!=l?l:h)),p}function Ia(e,t){return Object.keys(t).forEach((n=>{void 0===e[n]&&(e[n]=t[n])})),e}function _a(e){var t,n,i,r;const s={};if(e.video)if("object"==typeof e.video){const n={},r=n,a=e.video;Object.keys(a).forEach((e=>{if("resolution"===e)Ia(r,a.resolution);else r[e]=a[e]})),s.video=n,null!==(t=(i=s.video).deviceId)&&void 0!==t||(i.deviceId={ideal:"default"})}else s.video=!!e.video&&{deviceId:{ideal:"default"}};else s.video=!1;return e.audio?"object"==typeof e.audio?(s.audio=e.audio,null!==(n=(r=s.audio).deviceId)&&void 0!==n||(r.deviceId={ideal:"default"})):s.audio={deviceId:{ideal:"default"}}:s.audio=!1,s}function Ma(e){return kr(this,arguments,void 0,(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return function*(){const n=Da();if(n){const i=n.createAnalyser();i.fftSize=2048;const r=i.frequencyBinCount,s=new Uint8Array(r);n.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(i),yield Ga(t),i.getByteTimeDomainData(s);const a=s.some((e=>128!==e&&0!==e));return n.close(),!a}return!1}()}))}function Da(){var e;const t="undefined"!=typeof window&&(window.AudioContext||window.webkitAudioContext);if(t){const i=new t({latencyHint:"interactive"});if("suspended"===i.state&&"undefined"!=typeof window&&(null===(e=window.document)||void 0===e?void 0:e.body)){const e=()=>kr(this,void 0,void 0,(function*(){var t;try{"suspended"===i.state&&(yield i.resume())}catch(n){console.warn("Error trying to auto-resume audio context",n)}finally{null===(t=window.document.body)||void 0===t||t.removeEventListener("click",e)}}));i.addEventListener("statechange",(()=>{var t;"closed"===i.state&&(null===(t=window.document.body)||void 0===t||t.removeEventListener("click",e))})),window.document.body.addEventListener("click",e)}return i}}function Oa(e){return"audioinput"===e?Va.Source.Microphone:"videoinput"===e?Va.Source.Camera:Va.Source.Unknown}function Aa(e){return e===Va.Source.Microphone?"audioinput":e===Va.Source.Camera?"videoinput":void 0}function La(e){var t,n;let i=null===(t=e.video)||void 0===t||t;return e.resolution&&e.resolution.width>0&&e.resolution.height>0&&(i="boolean"==typeof i?{}:i,i=ao()?Object.assign(Object.assign({},i),{width:{max:e.resolution.width},height:{max:e.resolution.height},frameRate:e.resolution.frameRate}):Object.assign(Object.assign({},i),{width:{ideal:e.resolution.width},height:{ideal:e.resolution.height},frameRate:e.resolution.frameRate})),{audio:null!==(n=e.audio)&&void 0!==n&&n,video:i,controller:e.controller,selfBrowserSurface:e.selfBrowserSurface,surfaceSwitching:e.surfaceSwitching,systemAudio:e.systemAudio,preferCurrentTab:e.preferCurrentTab}}function Na(e){return e.split("/")[1].toLowerCase()}function xa(e){const t=[];return e.forEach((e=>{void 0!==e.track&&t.push(new ni({cid:e.track.mediaStreamID,track:e.trackInfo}))})),t}function Ua(e){return"mediaStreamTrack"in e?{trackID:e.sid,source:e.source,muted:e.isMuted,enabled:e.mediaStreamTrack.enabled,kind:e.kind,streamID:e.mediaStreamID,streamTrackID:e.mediaStreamTrack.id}:{trackID:e.trackSid,enabled:e.isEnabled,muted:e.isMuted,trackInfo:Object.assign({mimeType:e.mimeType,name:e.trackName,encrypted:e.isEncrypted,kind:e.kind,source:e.source},e.track?Ua(e.track):{})}}function Fa(e){const t=Object.assign({},e);let n,i;return"object"==typeof t.audio&&t.audio.processor&&(n=t.audio.processor,t.audio=Object.assign(Object.assign({},t.audio),{processor:void 0})),"object"==typeof t.video&&t.video.processor&&(i=t.video.processor,t.video=Object.assign(Object.assign({},t.video),{processor:void 0})),{audioProcessor:n,videoProcessor:i,optionsWithoutProcessor:(r=t,void 0===r?r:"function"==typeof structuredClone?"object"==typeof r&&null!==r?structuredClone(Object.assign({},r)):structuredClone(r):JSON.parse(JSON.stringify(r)))};var r}function Ba(e,t){return e.width*e.height ").concat(e)),this._streamState=e}constructor(t,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var r;super(),this.attachedElements=[],this.isMuted=!1,this._streamState=Va.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.finalStatsLogged=!1,this.log=or,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),"hidden"===document.visibilityState?this.backgroundTimeout=setTimeout((()=>this.handleAppVisibilityChanged()),5e3):this.handleAppVisibilityChanged()},this.loggerContextCb=i.loggerContextCb,this.log=dr(null!==(r=i.loggerName)&&void 0!==r?r:e.LoggerNames.Track,(()=>this.logContext)),this.setMaxListeners(100),this.kind=n,this._mediaStreamTrack=t,this._mediaStreamID=t.id,this.source=Va.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this)),Ua(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(t){let n="audio";this.kind===Va.Kind.Video&&(n="video"),0===this.attachedElements.length&&this.kind===Va.Kind.Video&&this.addAppVisibilityListener(),t||("audio"===n&&(ja.forEach((e=>{null!==e.parentElement||t||(t=e)})),t&&ja.splice(ja.indexOf(t),1)),t||(t=document.createElement(n))),this.attachedElements.includes(t)||this.attachedElements.push(t),Wa(this.mediaStreamTrack,t);const i=t.srcObject.getTracks(),r=i.some((e=>"audio"===e.kind));return t.play().then((()=>{this.emit(r?e.TrackEvent.AudioPlaybackStarted:e.TrackEvent.VideoPlaybackStarted)})).catch((n=>{"NotAllowedError"===n.name?this.emit(r?e.TrackEvent.AudioPlaybackFailed:e.TrackEvent.VideoPlaybackFailed,n):"AbortError"===n.name?this.log.debug("".concat(r?"audio":"video"," playback aborted, likely due to new play request")):this.log.warn("could not playback ".concat(r?"audio":"video"),{error:n}),r&&t&&i.some((e=>"video"===e.kind))&&"NotAllowedError"===n.name&&(t.muted=!0,t.play().catch((()=>{})))})),this.emit(e.TrackEvent.ElementAttached,t),t}detach(t){try{if(t){Ha(this.mediaStreamTrack,t);const n=this.attachedElements.indexOf(t);return n>=0&&(this.attachedElements.splice(n,1),this.recycleElement(t),this.emit(e.TrackEvent.ElementDetached,t)),t}const n=[];return this.attachedElements.forEach((t=>{Ha(this.mediaStreamTrack,t),n.push(t),this.recycleElement(t),this.emit(e.TrackEvent.ElementDetached,t)})),this.attachedElements=[],n}finally{0===this.attachedElements.length&&this.removeAppVisibilityListener()}}stop(){this.log.debug("stopping track"),this.stopMonitor(),this._mediaStreamTrack.stop()}enable(){this._mediaStreamTrack.enabled=!0}disable(){this._mediaStreamTrack.enabled=!1}stopMonitor(){this.monitorInterval&&clearInterval(this.monitorInterval),void 0!==this.timeSyncHandle&&(cancelAnimationFrame(this.timeSyncHandle),this.timeSyncHandle=void 0),this.logFinalStats()}logFinalStats(){this.finalStatsLogged||(this.finalStatsLogged=!0,this.getRTCStatsReport().then((e=>{e&&this.log.info("final track stats",ga(e))})).catch((e=>this.log.debug("could not collect final track stats",{error:e}))))}updateLoggerOptions(e){e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb),e.loggerName&&(this.log=dr(e.loggerName,(()=>this.logContext)))}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),ja.forEach((e=>{e.parentElement||(t=!1)})),t&&ja.push(e)}}handleAppVisibilityChanged(){return kr(this,void 0,void 0,(function*(){this.isInBackground="hidden"===document.visibilityState,this.isInBackground||this.kind!==Va.Kind.Video||setTimeout((()=>this.attachedElements.forEach((e=>e.play().catch((()=>{}))))),0)}))}addAppVisibilityListener(){ho()?(this.isInBackground="hidden"===document.visibilityState,document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){ho()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Wa(e,t){let n,i;n=t.srcObject instanceof MediaStream?t.srcObject:new MediaStream,i="audio"===e.kind?n.getAudioTracks():n.getVideoTracks(),i.includes(e)||(i.forEach((e=>{n.removeTrack(e)})),n.addTrack(e)),ao()&&t instanceof HTMLVideoElement||(t.autoplay=!0),t.muted=0===n.getAudioTracks().length,t instanceof HTMLVideoElement&&(t.playsInline=!0),t.srcObject!==n&&(t.srcObject=n,(ao()||ro())&&t instanceof HTMLVideoElement&&setTimeout((()=>{t.srcObject=n,t.play().catch((()=>{}))}),0))}function Ha(e,t){if(t.srcObject instanceof MediaStream){const n=t.srcObject;n.removeTrack(e),n.getTracks().length>0?t.srcObject=n:t.srcObject=null}}!function(e){let t,n,i;!function(e){e.Audio="audio",e.Video="video",e.Unknown="unknown"}(t=e.Kind||(e.Kind={})),function(e){e.Camera="camera",e.Microphone="microphone",e.ScreenShare="screen_share",e.ScreenShareAudio="screen_share_audio",e.Unknown="unknown"}(n=e.Source||(e.Source={})),function(e){e.Active="active",e.Paused="paused",e.Unknown="unknown"}(i=e.StreamState||(e.StreamState={})),e.kindToProto=function(e){switch(e){case t.Audio:return nt.AUDIO;case t.Video:return nt.VIDEO;default:return nt.DATA}},e.kindFromProto=function(e){switch(e){case nt.AUDIO:return t.Audio;case nt.VIDEO:return t.Video;default:return t.Unknown}},e.sourceToProto=function(e){switch(e){case n.Camera:return it.CAMERA;case n.Microphone:return it.MICROPHONE;case n.ScreenShare:return it.SCREEN_SHARE;case n.ScreenShareAudio:return it.SCREEN_SHARE_AUDIO;default:return it.UNKNOWN}},e.sourceFromProto=function(e){switch(e){case it.CAMERA:return n.Camera;case it.MICROPHONE:return n.Microphone;case it.SCREEN_SHARE:return n.ScreenShare;case it.SCREEN_SHARE_AUDIO:return n.ScreenShareAudio;default:return n.Unknown}},e.streamStateFromProto=function(e){switch(e){case jn.ACTIVE:return i.Active;case jn.PAUSED:return i.Paused;default:return i.Unknown}}}(Va||(Va={}));const Ka="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function za(e){const t=e.split("|");return t.length>1?[t[0],e.substr(t[0].length+1)]:[e,""]}function Ga(e){return new Ls((t=>da.setTimeout(t,e)))}function Ja(){return"addTransceiver"in RTCPeerConnection.prototype}function Qa(){return"addTrack"in RTCPeerConnection.prototype}function Ya(){if(!("getCapabilities"in RTCRtpSender))return!1;if(ao()||ro())return!1;const e=RTCRtpSender.getCapabilities("video");let t=!1;if(e)for(const n of e.codecs)if("video/av1"===n.mimeType.toLowerCase()){t=!0;break}return t}function Xa(){if(!("getCapabilities"in RTCRtpSender))return!1;if(ro())return!1;if(ao()){const e=Us();if((null==e?void 0:e.version)&&yo(e.version,"16")<0)return!1;if("iOS"===(null==e?void 0:e.os)&&(null==e?void 0:e.osVersion)&&yo(e.osVersion,"16")<0)return!1}const e=RTCRtpSender.getCapabilities("video");let t=!1;if(e)for(const n of e.codecs)if("video/vp9"===n.mimeType.toLowerCase()){t=!0;break}return t}function Za(e){return"av1"===e||"vp9"===e}function $a(e){var t;const i=null===(t=e.getHeaderExtensionsToNegotiate)||void 0===t?void 0:t.call(e);if(!i||!e.setHeaderExtensionsToNegotiate)return!1;const r=i.find((e=>e.uri===Ka));if(!r)return!1;if("stopped"!==r.direction)return!0;r.direction="sendrecv";try{return e.setHeaderExtensionsToNegotiate(i),!0}catch(n){return!1}}function eo(e,t){var n;return Za(e)&&!!(null==t?void 0:t.simulcast)&&!!(null===(n=t.scalabilityMode)||void 0===n?void 0:n.startsWith("L1T"))}function to(){const e=Us();return oo()||po()||"Chrome"===(null==e?void 0:e.name)&&yo(e.version,"113")<0}function no(e){return!(!document||oo())&&(e||(e=document.createElement("audio")),"setSinkId"in e)}function io(){return"undefined"!=typeof RTCPeerConnection&&(Ja()||Qa())}function ro(){var e;return"Firefox"===(null===(e=Us())||void 0===e?void 0:e.name)}function so(){return"undefined"!=typeof window&&void 0!==window.RTCRtpScriptTransform&&!function(){const e=Us();return!!e&&"Chrome"===e.name&&"iOS"!==e.os}()}function ao(){var e;return"Safari"===(null===(e=Us())||void 0===e?void 0:e.name)}function oo(){const e=Us();return"Safari"===(null==e?void 0:e.name)||"iOS"===(null==e?void 0:e.os)}function co(){var e;return"iOS"===(null===(e=Us())||void 0===e?void 0:e.os)||function(){if(!ho())return!1;const e=Us();return"Safari"===(null==e?void 0:e.name)&&"macOS"===(null==e?void 0:e.os)&&navigator.maxTouchPoints>1}()}function lo(){const e=Us();return"Safari"===(null==e?void 0:e.name)&&e.version.startsWith("17.")||"iOS"===(null==e?void 0:e.os)&&!!(null==e?void 0:e.osVersion)&&yo(e.osVersion,"17")>=0}function uo(){var e,t;return!!ho()&&(null!==(t=null===(e=navigator.userAgentData)||void 0===e?void 0:e.mobile)&&void 0!==t?t:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent))}function ho(){return"undefined"!=typeof document}function po(){return"ReactNative"==navigator.product}function mo(e){return e.hostname.endsWith(".livekit.cloud")||e.hostname.endsWith(".livekit.run")}function go(e){return mo(e)?e.hostname.split(".")[0]:null}function vo(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function fo(){if(!po())return;let e=vo();return e?e.platform:void 0}function ko(){if(ho())return window.devicePixelRatio;if(po()){let e=vo();if(e)return e.devicePixelRatio}return 1}function yo(e,t){const n=e.split("."),i=t.split("."),r=Math.min(n.length,i.length);for(let s=0;st)return 1;if(e(So||(So=new ResizeObserver(bo)),So);let Co=null;const wo=()=>(Co||(Co=new IntersectionObserver(To,{root:null,rootMargin:"0px"})),Co);let Ro,Po;function Io(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const r=document.createElement("canvas");r.width=e,r.height=t;const s=r.getContext("2d");null==s||s.fillRect(0,0,r.width,r.height),i&&s&&(s.beginPath(),s.arc(e/2,t/2,50,0,2*Math.PI,!0),s.closePath(),s.fillStyle="grey",s.fill());const a=B(r.captureStream().getTracks(),1)[0];if(!a)throw Error("Could not get empty media stream video track");return a.enabled=n,a}function _o(){if(!Po){const t=new AudioContext,n=t.createOscillator(),i=t.createGain();i.gain.setValueAtTime(0,0);const r=t.createMediaStreamDestination();n.connect(i),i.connect(r),n.start();var e=B(r.stream.getAudioTracks(),1);if(Po=e[0],!Po)throw Error("Could not get empty media stream audio track");Po.enabled=!1}return Po.clone()}class Mo{get isResolved(){return this._isResolved}constructor(e,t){this._isResolved=!1,this.onFinally=t,this.promise=new Promise(((t,n)=>kr(this,void 0,void 0,(function*(){this.resolve=t,this.reject=n,e&&(yield e(t,n))})))).finally((()=>{var e;this._isResolved=!0,null===(e=this.onFinally)||void 0===e||e.call(this)}))}}function Do(e){return ya.includes(e)}function Oo(e){if("string"==typeof e||"number"==typeof e)return e;if(Array.isArray(e))return e[0];if(void 0!==e.exact)return Array.isArray(e.exact)?e.exact[0]:e.exact;if(void 0!==e.ideal)return Array.isArray(e.ideal)?e.ideal[0]:e.ideal;throw Error("could not unwrap constraint")}function Ao(e){return e.startsWith("ws")?e.replace(/^(ws)/,"http"):e}function Lo(t){switch(t.reason){case e.ConnectionErrorReason.LeaveRequest:return t.context;case e.ConnectionErrorReason.Cancelled:return ot.CLIENT_INITIATED;case e.ConnectionErrorReason.NotAllowed:return ot.USER_REJECTED;case e.ConnectionErrorReason.ServerUnreachable:return ot.JOIN_FAILURE;default:return ot.UNKNOWN_REASON}}function No(e){return void 0!==e?Number(e):void 0}function xo(e){return void 0!==e?BigInt(e):void 0}function Uo(e){return!!e&&!(e instanceof MediaStreamTrack)&&e.isLocal}function Fo(e){return!!e&&e.kind==Va.Kind.Audio}function Bo(e){return!!e&&e.kind==Va.Kind.Video}function jo(e){return Uo(e)&&Bo(e)}function qo(e){return Uo(e)&&Fo(e)}function Vo(e){return!!e&&!e.isLocal}function Wo(e){return!!e&&!e.isLocal}function Ho(e){return Vo(e)&&Bo(e)}function Ko(e){return e.isLocal}function zo(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}function Go(){return"undefined"!=typeof CompressionStream}let Jo=null;function Qo(){return"boolean"!=typeof Jo&&(Jo=function(){if("undefined"==typeof CompressionStream||"undefined"==typeof DecompressionStream)return!1;try{return new CompressionStream("deflate-raw"),new DecompressionStream("deflate-raw"),!0}catch(Ds){return!1}}()),Jo}function Yo(e,t){const n=B(za(t.id),2)[1];return(null==n?void 0:n.startsWith("TR"))?n:e.id.startsWith("TR")?e.id:void 0}function Xo(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=function(e,t){const n=new URL(function(e){return e.startsWith("http")?e.replace(/^(http)/,"ws"):e}(e));return t.forEach(((e,t)=>{n.searchParams.set(t,e)})),$o(n,"rtc")}(e,t);return n?i:$o(i,"v1")}function Zo(e){return e.endsWith("/")?e:"".concat(e,"/")}function $o(e,t){return e.pathname="".concat(Zo(e.pathname)).concat(t),e}function ec(e){if("string"==typeof e)return Wn.fromJson(JSON.parse(e),{ignoreUnknownFields:!0});if(e instanceof ArrayBuffer)return Wn.fromBinary(new Uint8Array(e));throw new Error("could not decode websocket message: ".concat(typeof e))}const tc="AES-GCM",nc="lk_e2ee",ic="lk_e2ee_track_id",rc={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:10,keyringSize:16,keySize:128};var sc,ac;function oc(){return dc()||cc()}function cc(){return"undefined"!=typeof window&&void 0!==window.RTCRtpScriptTransform}function dc(){return"undefined"!=typeof window&&void 0!==window.RTCRtpSender&&void 0!==window.RTCRtpSender.prototype.createEncodedStreams}function lc(e){return kr(this,void 0,void 0,(function*(){let t=new TextEncoder;return yield crypto.subtle.importKey("raw",t.encode(e),{name:"PBKDF2"},!1,["deriveBits","deriveKey"])}))}function uc(e){return kr(this,void 0,void 0,(function*(){return yield crypto.subtle.importKey("raw",e,"HKDF",!1,["deriveBits","deriveKey"])}))}function hc(e,t){const n=(new TextEncoder).encode(t);switch(e){case"HKDF":return{name:"HKDF",salt:n,hash:"SHA-256",info:new ArrayBuffer(128)};case"PBKDF2":return{name:"PBKDF2",salt:n,hash:"SHA-256",iterations:1e5};default:throw new Error("algorithm ".concat(e," is currently unsupported"))}}e.KeyProviderEvent=void 0,(sc=e.KeyProviderEvent||(e.KeyProviderEvent={})).SetKey="setKey",sc.RatchetRequest="ratchetRequest",sc.KeyRatcheted="keyRatcheted",e.KeyHandlerEvent=void 0,(e.KeyHandlerEvent||(e.KeyHandlerEvent={})).KeyRatcheted="keyRatcheted",e.EncryptionEvent=void 0,(ac=e.EncryptionEvent||(e.EncryptionEvent={})).ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",ac.EncryptionError="encryptionError",e.CryptorEvent=void 0,(e.CryptorEvent||(e.CryptorEvent={})).Error="cryptorError";function pc(e){var t,n,i,r,s;if("sipDtmf"!==(null===(t=e.value)||void 0===t?void 0:t.case)&&"metrics"!==(null===(n=e.value)||void 0===n?void 0:n.case)&&"speaker"!==(null===(i=e.value)||void 0===i?void 0:i.case)&&"transcription"!==(null===(r=e.value)||void 0===r?void 0:r.case)&&"encryptedPacket"!==(null===(s=e.value)||void 0===s?void 0:s.case))return new xt({value:e.value})}class mc extends wr.EventEmitter{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.latestManuallySetKeyIndex=0,this.onKeyRatcheted=(e,t,n)=>{or.debug("key ratcheted event received",{ratchetResult:e,participantId:t,keyIndex:n})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},rc),t),this.on(e.KeyProviderEvent.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(t,n,i){const r={key:t,participantIdentity:n,keyIndex:i};if(!this.options.sharedKey&&!n)throw new Error("participant identity needs to be passed for encryption key if sharedKey option is false");this.keyInfoMap.set("".concat(null!=n?n:"shared","-").concat(null!=i?i:0),r),void 0!==i&&(this.latestManuallySetKeyIndex=i),this.emit(e.KeyProviderEvent.SetKey,r,void 0!==i)}getKeys(){return Array.from(this.keyInfoMap.values())}getLatestManuallySetKeyIndex(){return this.latestManuallySetKeyIndex}getOptions(){return this.options}ratchetKey(t,n){this.emit(e.KeyProviderEvent.RatchetRequest,t,n)}}var gc;e.CryptorErrorReason=void 0,(gc=e.CryptorErrorReason||(e.CryptorErrorReason={}))[gc.InvalidKey=0]="InvalidKey",gc[gc.MissingKey=1]="MissingKey",gc[gc.InternalError=2]="InternalError";class vc extends Vs{constructor(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.CryptorErrorReason.InternalError,i=arguments.length>2?arguments[2]:void 0;super(40,t),this.reason=n,this.participantIdentity=i}}function fc(){return so()}function kc(e){return!!(null==e?void 0:e.worker)&&(dc()||fc())}function yc(e){return!(!(null==e?void 0:e.timestamp)&&!(null==e?void 0:e.frameId))}function bc(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var i,r;let s;const a=null!==(i=n.isImmediate)&&void 0!==i&&i,o=null!==(r=n.callback)&&void 0!==r&&r,c=n.maxWait;let d=Date.now(),l=[];const u=function(){for(var n=arguments.length,i=new Array(n),r=0;r{const h=a&&void 0===s;if(void 0!==s&&da.clearTimeout(s),s=da.setTimeout((function(){if(s=void 0,d=Date.now(),!a){const t=e.apply(u,i);o&&o(t),l.forEach((e=>(0,e.resolve)(t))),l=[]}}),function(){if(void 0!==c){const e=Date.now()-d;if(e+t>=c)return c-e}return t}()),h){const t=e.apply(u,i);return o&&o(t),n(t)}l.push({resolve:n,reject:r})}))};return u.cancel=function(e){void 0!==s&&da.clearTimeout(s),l.forEach((t=>(0,t.reject)(e))),l=[]},u}const Tc=2e3;function Sc(e,t){if(!t)return 0;let n,i;return"bytesReceived"in e?(n=e.bytesReceived,i=t.bytesReceived):"bytesSent"in e&&(n=e.bytesSent,i=t.bytesSent),void 0===n||void 0===i||void 0===e.timestamp||void 0===t.timestamp?0:8*(n-i)*1e3/(e.timestamp-t.timestamp)}class Ec extends Va{constructor(t,n,i,r,s){super(t,i,s),this.timeSyncLoop=()=>{var t;if(0===this.listenerCount(e.TrackEvent.TimeSyncUpdate))return void(this.timeSyncHandle=void 0);this.timeSyncHandle=requestAnimationFrame(this.timeSyncLoop);const n=null===(t=this.receiver)||void 0===t?void 0:t.getSynchronizationSources()[0];if(n){const t=n.timestamp,i=n.rtpTimestamp;i&&this.rtpTimestamp!==i&&(this.emit(e.TrackEvent.TimeSyncUpdate,{timestamp:t,rtpTimestamp:i}),this.rtpTimestamp=i)}},this.onTimeSyncListenerAdded=t=>{t===e.TrackEvent.TimeSyncUpdate&&void 0===this.timeSyncHandle&&(this.timeSyncHandle=requestAnimationFrame(this.timeSyncLoop))},this.sid=n,this.receiver=r}get isLocal(){return!1}setMuted(t){this.isMuted!==t&&(this.isMuted=t,this._mediaStreamTrack.enabled=!t,this.emit(t?e.TrackEvent.Muted:e.TrackEvent.Unmuted,this))}setMediaStream(t){this.mediaStream=t;const n=i=>{i.track===this._mediaStreamTrack&&(t.removeEventListener("removetrack",n),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(e.TrackEvent.Ended,this))};t.addEventListener("removetrack",n)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return kr(this,void 0,void 0,(function*(){var e;if(!(null===(e=this.receiver)||void 0===e?void 0:e.getStats))return;return yield this.receiver.getStats()}))}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval((()=>this.monitorReceiver()),Tc)),"undefined"!=typeof RTCRtpReceiver&&"function"==typeof RTCRtpReceiver.prototype.getSynchronizationSources&&this.registerTimeSyncUpdate()}stopMonitor(){super.stopMonitor(),this.off("newListener",this.onTimeSyncListenerAdded)}registerTimeSyncUpdate(){this.off("newListener",this.onTimeSyncListenerAdded),this.on("newListener",this.onTimeSyncListenerAdded),void 0===this.timeSyncHandle&&this.timeSyncLoop()}}class Cc extends Ec{constructor(e,t,n,i,r){super(e,t,Va.Kind.Video,n,r),this.elementInfos=[],this.monitorReceiver=()=>kr(this,void 0,void 0,(function*(){if(!this.receiver)return void(this._currentBitrate=0);const e=yield this.getReceiverStats();e&&this.prevStats&&this.receiver&&(this._currentBitrate=Sc(e,this.prevStats)),this.prevStats=e})),this.debouncedHandleResize=bc((()=>{this.updateDimensions()}),100),this.adaptiveStreamSettings=i}get isAdaptiveStream(){return void 0!==this.adaptiveStreamSettings}lookupFrameMetadata(e){let t=e.rtpTimestamp;var n;return null===(n=this.frameMetadataExtractor)||void 0===n?void 0:n.lookupMetadata(t)}setStreamState(e){super.setStreamState(e),this.log.debug("setStreamState",e),this.isAdaptiveStream&&e===Va.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach((t=>{e?Ha(this._mediaStreamTrack,t):Wa(this._mediaStreamTrack,t)}))}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&void 0===this.elementInfos.find((t=>t.element===e))){const t=new wc(e);this.observeElementInfo(t)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&void 0===this.elementInfos.find((t=>t===e))?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream)return void this.log.warn("stopObservingElementInfo ignored",this.logContext);const t=this.elementInfos.filter((t=>t===e));for(const n of t)n.stopObserving();this.elementInfos=this.elementInfos.filter((t=>t!==e)),this.updateVisibility(),this.debouncedHandleResize()}detach(e){if(e)return this.stopObservingElement(e),super.detach(e);const t=super.detach();for(const n of t)this.stopObservingElement(n);return t}getDecoderImplementation(){var e;return null===(e=this.prevStats)||void 0===e?void 0:e.decoderImplementation}getReceiverStats(){return kr(this,void 0,void 0,(function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,n="",i=new Map;return e.forEach((e=>{"inbound-rtp"===e.type?(n=e.codecId,t={type:"video",streamId:e.id,framesDecoded:e.framesDecoded,framesDropped:e.framesDropped,framesReceived:e.framesReceived,packetsReceived:e.packetsReceived,packetsLost:e.packetsLost,frameWidth:e.frameWidth,frameHeight:e.frameHeight,pliCount:e.pliCount,firCount:e.firCount,nackCount:e.nackCount,jitter:e.jitter,timestamp:e.timestamp,bytesReceived:e.bytesReceived,decoderImplementation:e.decoderImplementation}):"codec"===e.type&&i.set(e.id,e)})),t&&""!==n&&i.get(n)&&(t.mimeType=i.get(n).mimeType),t}))}stopObservingElement(e){const t=this.elementInfos.filter((t=>t.element===e));for(const n of t)this.stopObservingElementInfo(n)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return kr(this,void 0,void 0,(function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()}))}updateVisibility(t){var n,i;const r=this.elementInfos.reduce(((e,t)=>Math.max(e,t.visibilityChangedAt||0)),0),s=!(null!==(i=null===(n=this.adaptiveStreamSettings)||void 0===n?void 0:n.pauseVideoInBackground)&&void 0!==i&&!i)&&this.isInBackground,a=this.elementInfos.some((e=>e.pictureInPicture)),o=this.elementInfos.some((e=>e.visible))&&!s||a;(this.lastVisible!==o||t)&&(!o&&Date.now()-r<100?da.setTimeout((()=>{this.updateVisibility()}),100):(this.lastVisible=o,this.emit(e.TrackEvent.VisibilityChanged,o,this)))}updateDimensions(){var t,n;let i=0,r=0;const s=this.getPixelDensity();for(const e of this.elementInfos){const t=e.width()*s,n=e.height()*s;t+n>i+r&&(i=t,r=n)}(null===(t=this.lastDimensions)||void 0===t?void 0:t.width)===i&&(null===(n=this.lastDimensions)||void 0===n?void 0:n.height)===r||(this.lastDimensions={width:i,height:r},this.emit(e.TrackEvent.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=null===(e=this.adaptiveStreamSettings)||void 0===e?void 0:e.pixelDensity;if("screen"===t)return ko();if(!t){return ko()>2?2:1}return t}}class wc{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=e=>{var t;const n=e.target,i=e.isIntersecting;n===this.element&&(this.isIntersecting=i,this.isPiP=Rc(this.element),this.visibilityChangedAt=Date.now(),null===(t=this.handleVisibilityChanged)||void 0===t||t.call(this))},this.onEnterPiP=()=>{var e,t;null===(t=null===(e=window.documentPictureInPicture)||void 0===e?void 0:e.window)||void 0===t||t.addEventListener("pagehide",this.onLeavePiP),queueMicrotask((()=>{requestAnimationFrame((()=>{var e;this.isPiP=Rc(this.element),null===(e=this.handleVisibilityChanged)||void 0===e||e.call(this)}))}))},this.onLeavePiP=()=>{var e;this.isPiP=Rc(this.element),null===(e=this.handleVisibilityChanged)||void 0===e||e.call(this)},this.element=e,this.isIntersecting=null!=t?t:Pc(e),this.isPiP=ho()&&Rc(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,n;this.isIntersecting=Pc(this.element),this.isPiP=Rc(this.element),this.element.handleResize=()=>{var e;null===(e=this.handleResize)||void 0===e||e.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,wo().observe(this.element),Eo().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),null===(e=window.documentPictureInPicture)||void 0===e||e.addEventListener("enter",this.onEnterPiP),null===(n=null===(t=window.documentPictureInPicture)||void 0===t?void 0:t.window)||void 0===n||n.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,t,n,i,r;null===(e=wo())||void 0===e||e.unobserve(this.element),null===(t=Eo())||void 0===t||t.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),null===(n=window.documentPictureInPicture)||void 0===n||n.removeEventListener("enter",this.onEnterPiP),null===(r=null===(i=window.documentPictureInPicture)||void 0===i?void 0:i.window)||void 0===r||r.removeEventListener("pagehide",this.onLeavePiP)}}function Rc(e){var t;if(document.pictureInPictureElement===e)return!0;const n=null===(t=window.documentPictureInPicture)||void 0===t?void 0:t.window;return!!n&&(function(e,t){var n,i,r;if((null===(n=e.defaultView)||void 0===n?void 0:n.top)===t)return!0;let s=e;for(;s;){if(s===t.document)return!0;try{s=null===(r=null===(i=s.defaultView)||void 0===i?void 0:i.frameElement)||void 0===r?void 0:r.ownerDocument}catch(a){return!1}}return!1}(e.ownerDocument,n)&&Pc(e,n))}function Pc(e,t){const n=t||window;let i=e.offsetTop,r=e.offsetLeft;const s=e.offsetWidth,a=e.offsetHeight,o=e.hidden,c=getComputedStyle(e).display;for(;e.offsetParent;)i+=(e=e.offsetParent).offsetTop,r+=e.offsetLeft;return in.pageYOffset&&r+s>n.pageXOffset&&!o&&"none"!==c}class Ic extends wr.EventEmitter{get logContext(){var e,t;return{room:null===(e=this.room)||void 0===e?void 0:e.name,participant:null===(t=this.room)||void 0===t?void 0:t.localParticipant.identity}}constructor(t,n){super(),this.decryptDataRequests=new Map,this.encryptDataRequests=new Map,this.log=dr(e.LoggerNames.E2EE,(()=>this.logContext)),this.onWorkerMessage=t=>{var n,i;const r=t.data,s=r.kind,a=r.data;switch(s){case"error":if(a.uuid){const e=this.decryptDataRequests.get(a.uuid);if(null==e?void 0:e.reject){e.reject(a.error);break}const t=this.encryptDataRequests.get(a.uuid);if(null==t?void 0:t.reject){t.reject(a.error);break}}this.log.error(a.error.message),this.emit(e.EncryptionEvent.EncryptionError,a.error,a.participantIdentity);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach((e=>{this.postKey(e,!1)}));break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach((e=>{this.postKey(e,!1)})),this.encryptionEnabled!==a.enabled&&a.participantIdentity===(null===(n=this.room)||void 0===n?void 0:n.localParticipant.identity))this.emit(e.EncryptionEvent.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const t=null===(i=this.room)||void 0===i?void 0:i.getParticipantByIdentity(a.participantIdentity);if(!t)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(e.EncryptionEvent.ParticipantEncryptionStatusChanged,a.enabled,t)}break;case"ratchetKey":this.keyProvider.emit(e.KeyProviderEvent.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break;case"decryptDataResponse":const t=this.decryptDataRequests.get(a.uuid);(null==t?void 0:t.resolve)&&t.resolve(a);break;case"encryptDataResponse":const r=this.encryptDataRequests.get(a.uuid);(null==r?void 0:r.resolve)&&r.resolve(a);break;case"packetTrailerMetadata":this.handleFrameMetadata(a.trackId,a.rtpTimestamp,a.ssrc,a.metadata);break;case"log":lr[a.level](a.msg,a.context)}},this.onWorkerError=t=>{this.log.error("e2ee worker encountered an error:",{error:t.error}),this.emit(e.EncryptionEvent.EncryptionError,t.error,void 0)},this.keyProvider=t.keyProvider,this.worker=t.worker,this.encryptionEnabled=!1,this.dataChannelEncryptionEnabled=n}get isEnabled(){return this.encryptionEnabled}get isDataChannelEncryptionEnabled(){return this.isEnabled&&this.dataChannelEncryptionEnabled}setup(e){if(!oc())throw new $s("tried to setup end-to-end encryption on an unsupported browser");if(this.log.info("setting up e2ee"),e!==this.room){this.room=e,this.setupEventListeners(e,this.keyProvider);const t={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:lr.getLevel()}};this.worker&&(this.log.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t),this.subscribeToLogLevelChanges())}}subscribeToLogLevelChanges(){var e;let t;if(null===(e=this.unsubscribeLogLevel)||void 0===e||e.call(this),Ic.disposeRegistry){const e=new WeakRef(this.worker);t=pr((n=>{const i=e.deref();i?i.postMessage({kind:"setLogLevel",data:{level:n}}):null==t||t()})),Ic.disposeRegistry.register(this,t,this)}else{const e=this.worker;t=pr((t=>{e.postMessage({kind:"setLogLevel",data:{level:t}})}))}this.unsubscribeLogLevel=t}dispose(){var t,n,i;null===(t=this.unsubscribeLogLevel)||void 0===t||t.call(this),this.unsubscribeLogLevel=void 0,Ic.disposeRegistry&&Ic.disposeRegistry.unregister(this);const r=new vc("E2EEManager disposed",e.CryptorErrorReason.InternalError);for(const e of[...this.encryptDataRequests.values()])null===(n=e.reject)||void 0===n||n.call(e,r);for(const e of[...this.decryptDataRequests.values()])null===(i=e.reject)||void 0===i||i.call(e,r);this.worker&&(this.worker.onmessage=null,this.worker.onerror=null),this.removeAllListeners()}setParticipantCryptorEnabled(e,t){this.log.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){e&&0!==e.length?this.postSifTrailer(e):this.log.warn("ignoring server sent trailer as it's empty")}handleFrameMetadata(e,t,n,i){if(this.room)for(const r of[this.room.localParticipant,...this.room.remoteParticipants.values()])for(const s of r.trackPublications.values())if(s.track&&s.track.mediaStreamID===e&&s.track instanceof Cc&&s.track.frameMetadataExtractor)return void s.track.frameMetadataExtractor.storeMetadata(t,n,i)}setupEngine(t){t.on(e.EngineEvent.RTPVideoMapUpdate,(e=>{this.postRTPMap(e)}))}setupEventListeners(t,n){t.on(e.RoomEvent.TrackPublished,((e,t)=>this.setParticipantCryptorEnabledForPublication(e,t.identity))),t.on(e.RoomEvent.ConnectionStateChanged,(n=>{n===e.ConnectionState.Connected&&t.remoteParticipants.forEach((e=>{e.trackPublications.forEach((t=>{this.setParticipantCryptorEnabledForPublication(t,e.identity)}))}))})).on(e.RoomEvent.TrackUnsubscribed,((e,t,n)=>{var i;const r={kind:"removeTransform",data:{participantIdentity:n.identity,trackId:e.mediaStreamID}};null===(i=this.worker)||void 0===i||i.postMessage(r)})).on(e.RoomEvent.TrackSubscribed,((e,t,n)=>{this.setupE2EEReceiver(e,n.identity,t.trackInfo)})).on(e.RoomEvent.SignalConnected,(()=>{if(!this.room)throw new TypeError("expected room to be present on signal connect");const e=n.getLatestManuallySetKeyIndex();n.getKeys().forEach((t=>{var n;this.postKey(t,e===(null!==(n=t.keyIndex)&&void 0!==n?n:0))})),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)})),t.localParticipant.on(e.ParticipantEvent.LocalSenderCreated,((e,t)=>kr(this,void 0,void 0,(function*(){this.setupE2EESender(t,e)})))),t.localParticipant.on(e.ParticipantEvent.LocalTrackPublished,(e=>{if(!Bo(e.track)||!oo())return;const t={kind:"updateCodec",data:{trackId:e.track.mediaStreamID,codec:Na(e.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity,hasPacketTrailer:!1}};this.worker.postMessage(t)})),n.on(e.KeyProviderEvent.SetKey,((e,t)=>this.postKey(e,null==t||t))).on(e.KeyProviderEvent.RatchetRequest,((e,t)=>this.postRatchetRequest(e,t)))}encryptData(e){return kr(this,void 0,void 0,(function*(){if(!this.worker)throw Error("could not encrypt data, worker is missing");const t=crypto.randomUUID(),n={kind:"encryptDataRequest",data:{uuid:t,payload:e,participantIdentity:this.room.localParticipant.identity}},i=new Mo;return i.onFinally=()=>{this.encryptDataRequests.delete(t)},this.encryptDataRequests.set(t,i),this.worker.postMessage(n),i.promise}))}handleEncryptedData(e,t,n,i){if(!this.worker)throw Error("could not handle encrypted data, worker is missing");const r=crypto.randomUUID(),s={kind:"decryptDataRequest",data:{uuid:r,payload:e,iv:t,participantIdentity:n,keyIndex:i}},a=new Mo;return a.onFinally=()=>{this.decryptDataRequests.delete(r)},this.decryptDataRequests.set(r,a),this.worker.postMessage(s),a.promise}postRatchetRequest(e,t){if(!this.worker)throw Error("could not ratchet key, worker is missing");const n={kind:"ratchetRequest",data:{participantIdentity:e,keyIndex:t}};this.worker.postMessage(n)}postKey(e,t){let n=e.key,i=e.participantIdentity,r=e.keyIndex;var s;if(!this.worker)throw Error("could not set key, worker is missing");const a={kind:"setKey",data:{participantIdentity:i,isPublisher:i===(null===(s=this.room)||void 0===s?void 0:s.localParticipant.identity),key:n,keyIndex:r,updateCurrentKeyIndex:t}};this.worker.postMessage(a)}postEnable(e,t){if(!this.worker)throw new ReferenceError("failed to enable e2ee, worker is not ready");{const n={kind:"enable",data:{enabled:e,participantIdentity:t}};this.worker.postMessage(n)}}postRTPMap(e){var t;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!(null===(t=this.room)||void 0===t?void 0:t.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");const n={kind:"setRTPMap",data:{map:e,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(n)}postSifTrailer(e){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");const t={kind:"setSifTrailer",data:{trailer:e}};this.worker.postMessage(t)}setParticipantCryptorEnabledForPublication(e,t){e.trackInfo?this.setParticipantCryptorEnabled(e.trackInfo.encryption!==yt.NONE,t):this.log.warn("skipping e2ee enabled update for publication without trackInfo",{trackSid:e.trackSid})}setupE2EEReceiver(e,t,n){if(!e.receiver)return;if(!(null==n?void 0:n.mimeType)||""===n.mimeType)throw new TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");const i="video"===e.kind&&!!n.packetTrailerFeatures&&n.packetTrailerFeatures.length>0;this.handleReceiver(e.receiver,e.mediaStreamID,t,"video"===e.kind?Na(n.mimeType):void 0,i)}setupE2EESender(e,t){var n,i,r;Uo(e)&&t?this.handleSender(t,e.mediaStreamID,void 0,Bo(e)?null!==(i=null===(n=e.publishOptions)||void 0===n?void 0:n.frameMetadata)&&void 0!==i?i:null===(r=e.publishOptions)||void 0===r?void 0:r.packetTrailer:void 0):t||this.log.warn("early return because sender is not ready")}handleReceiver(e,t,n,i,r){return kr(this,void 0,void 0,(function*(){if(this.worker){if(so()){const s={kind:"decode",participantIdentity:n,trackId:t,codec:i,hasPacketTrailer:r};e.transform=new RTCRtpScriptTransform(this.worker,s)}else{if(nc in e&&ic in e){const s={kind:"updateCodec",data:{trackId:t,previousTrackId:e[ic],codec:i,participantIdentity:n,hasPacketTrailer:r}};return this.worker.postMessage(s),void(e[ic]=t)}let s=e.writableStream,a=e.readableStream;if(!s||!a){const t=e.createEncodedStreams();e.writableStream=t.writable,s=t.writable,e.readableStream=t.readable,a=t.readable}const o={kind:"decode",data:{readableStream:a,writableStream:s,trackId:t,codec:i,participantIdentity:n,hasPacketTrailer:r}};this.worker.postMessage(o,[a,s])}e[nc]=!0,e[ic]=t}}))}handleSender(e,t,n,i){var r;if(!(nc in e)&&this.worker){if(!(null===(r=this.room)||void 0===r?void 0:r.localParticipant.identity)||""===this.room.localParticipant.identity)throw TypeError("local identity needs to be known in order to set up encrypted sender");if(so()){this.log.info("initialize script transform");const r={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:t,codec:n,hasPacketTrailer:yc(i),packetTrailer:i};e.transform=new RTCRtpScriptTransform(this.worker,r)}else{this.log.info("initialize encoded streams");const r=e.createEncodedStreams(),s={kind:"encode",data:{readableStream:r.readable,writableStream:r.writable,codec:n,trackId:t,participantIdentity:this.room.localParticipant.identity,hasPacketTrailer:yc(i),packetTrailer:i}};this.worker.postMessage(s,[r.readable,r.writable])}e[nc]=!0}}}Ic.disposeRegistry="undefined"!=typeof FinalizationRegistry&&"undefined"!=typeof WeakRef&&new FinalizationRegistry((e=>{e()}));class _c{constructor(){this.metadataMap=new Map,this.activeSsrc=0}storeMetadata(e,t,n){for(0!==this.activeSsrc&&this.activeSsrc!==t&&this.metadataMap.clear(),this.activeSsrc=t;this.metadataMap.size>=300;){const e=this.metadataMap.keys().next().value;this.metadataMap.delete(e)}this.metadataMap.set(e,n)}lookupMetadata(e){return this.metadataMap.get(e)}dispose(){this.metadataMap.clear(),this.activeSsrc=0}}class Mc{constructor(e){this.extractors=new Map,this.workerPipelines=new Map,this.onWorkerMessage=e=>{const t=e.data;if("metadata"===t.kind){const e=this.extractors.get(t.data.trackId);e&&e.storeMetadata(t.data.rtpTimestamp,t.data.ssrc,t.data.metadata)}},this.onWorkerError=e=>{or.error("frame metadata worker encountered an error:",{error:e.error})},this.worker=null==e?void 0:e.worker}setup(t){t!==this.room&&(this.room=t,this.worker&&(this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage({kind:"init"})),t.on(e.RoomEvent.TrackSubscribed,((e,t,n)=>{"video"===e.kind&&this.setupReceiver(e,t.trackInfo)})).on(e.RoomEvent.TrackUnsubscribed,(e=>{this.teardownTrack(e)})).on(e.RoomEvent.Disconnected,(()=>{this.cleanup()})))}setupReceiver(e,t){var n,i,r;const s=e.receiver;if(!s)return;if(!(!!(null==t?void 0:t.packetTrailerFeatures)&&t.packetTrailerFeatures.length>0))return void((null===(n=this.room)||void 0===n?void 0:n.hasE2EESetup)||this.setupPassthroughReceiver(s,e.mediaStreamID));if(!kc(this.worker?{worker:this.worker}:void 0)&&!(null===(i=this.room)||void 0===i?void 0:i.hasE2EESetup))return void or.warn("frame metadata transform not supported; skipping extraction");const a=new _c,o=e.mediaStreamID;this.extractors.set(o,a),e.frameMetadataExtractor=a,(null===(r=this.room)||void 0===r?void 0:r.hasE2EESetup)||this.setupWorkerReceiver(s,o,!0)}setupPassthroughReceiver(e,t){fc()?"transform"in e&&(e.transform=null):(this.worker&&kc({worker:this.worker})&&!this.workerPipelines.has(e)||this.worker&&this.workerPipelines.has(e))&&this.setupWorkerReceiver(e,t,!1)}setupWorkerReceiver(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=this.worker;if(!i)return;if(fc())return void(e.transform=new RTCRtpScriptTransform(i,{kind:"decode",trackId:t}));const r=this.workerPipelines.get(e);if(r){const s={kind:"updateTrackId",data:{oldTrackId:r,newTrackId:t,hasPacketTrailer:n}};return i.postMessage(s),void this.workerPipelines.set(e,t)}if(!("createEncodedStreams"in e))return void or.warn("createEncodedStreams not supported");let s;try{s=e.createEncodedStreams()}catch(o){return void or.warn("failed to create encoded streams",{error:o})}const a={kind:"decode",data:{readableStream:s.readable,writableStream:s.writable,trackId:t,hasPacketTrailer:n}};i.postMessage(a,[s.readable,s.writable]),this.workerPipelines.set(e,t)}teardownTrack(e){const t=e.mediaStreamID,n=this.extractors.get(t);n&&(n.dispose(),this.extractors.delete(t)),e instanceof Cc&&(e.frameMetadataExtractor=void 0)}cleanup(){var e;for(const t of this.extractors.values())t.dispose();this.extractors.clear(),this.workerPipelines.clear(),null===(e=this.worker)||void 0===e||e.terminate()}}const Dc=Mc;class Oc{constructor(){this.failedConnectionAttempts=new Map,this.backOffPromises=new Map}static getInstance(){return this._instance||(this._instance=new Oc),this._instance}addFailedConnectionAttempt(e){var t;const n=go(new URL(e));if(!n)return;let i=null!==(t=this.failedConnectionAttempts.get(n))&&void 0!==t?t:0;this.failedConnectionAttempts.set(n,i+1),this.backOffPromises.set(n,Ga(Math.min(500*Math.pow(2,i),15e3)))}getBackOffPromise(e){const t=new URL(e),n=t&&go(t);return n&&this.backOffPromises.get(n)||Promise.resolve()}resetFailedConnectionAttempts(e){const t=new URL(e),n=t&&go(t);n&&(this.failedConnectionAttempts.set(n,0),this.backOffPromises.set(n,Promise.resolve()))}resetAll(){this.backOffPromises.clear(),this.failedConnectionAttempts.clear()}}Oc._instance=null;const Ac="default";class Lc{constructor(){this._previousDevices=[]}static getInstance(){return void 0===this.instance&&(this.instance=new Lc),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return kr(this,arguments,void 0,(function(e){var t=this;let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function*(){var r;if((null===(r=Lc.userMediaPromiseMap)||void 0===r?void 0:r.size)>0){or.debug("awaiting getUserMedia promise");try{e?yield Lc.userMediaPromiseMap.get(e):yield Promise.all(Lc.userMediaPromiseMap.values())}catch(n){or.warn("error waiting for media permissons")}}let s=yield navigator.mediaDevices.enumerateDevices();if(i&&(!ao()||!t.hasDeviceInUse(e))){if(0===s.filter((t=>t.kind===e)).length||s.some((t=>{const n=""===t.label,i=!e||t.kind===e;return n&&i}))){const t={video:"audioinput"!==e&&"audiooutput"!==e,audio:"videoinput"!==e&&{deviceId:{ideal:"default"}}},n=yield navigator.mediaDevices.getUserMedia(t);s=yield navigator.mediaDevices.enumerateDevices(),n.getTracks().forEach((e=>{e.stop()}))}}return t._previousDevices=s,e&&(s=s.filter((t=>t.kind===e))),s}()}))}normalizeDeviceId(e,t,n){return kr(this,void 0,void 0,(function*(){if(t!==Ac)return t;const i=yield this.getDevices(e),r=i.find((e=>e.deviceId===Ac));if(!r)return void or.warn("could not reliably determine default device");const s=i.find((e=>e.deviceId!==Ac&&e.groupId===(null!=n?n:r.groupId)));if(s)return null==s?void 0:s.deviceId;or.warn("could not reliably determine default device")}))}hasDeviceInUse(e){return e?Lc.userMediaPromiseMap.has(e):Lc.userMediaPromiseMap.size>0}}Lc.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],Lc.userMediaPromiseMap=new Map;const Nc=65535,xc=4294967295;class Uc{static u16(e){return new Uc(e,Nc)}static u32(e){return new Uc(e,xc)}constructor(e,t){if(this.value=e,e<0)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0");if(t>Number.MAX_SAFE_INTEGER)throw new Error("WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.");this.maxSize=t,this.clamp()}clamp(){for(;this.value>this.maxSize;)this.value-=this.maxSize+1;for(;this.value<0;)this.value+=this.maxSize+1}clone(){return new Uc(this.value,this.maxSize)}update(e){this.value=e(this.value),this.clamp()}increment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.update((t=>t+e))}decrement(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.update((t=>t-e))}getThenIncrement(){const e=this.value;return this.increment(),new Uc(e,this.maxSize)}isBefore(e){const t=this.value>>>0,n=(e.value>>>0)-t>>>0;return 0!==n&&nNc)throw Vc.tooLarge();return e}};class Hc{constructor(){this.value=0}get(){return this.value+=1,this.value>Nc?null:this.value}reset(){this.value=0}}const Kc={from:e=>({sid:e.sid,pubHandle:e.pubHandle,name:e.name,usesE2ee:e.encryption!==yt.NONE}),toProtobuf:e=>new St({sid:e.sid,pubHandle:e.pubHandle,name:e.name,encryption:e.usesE2ee?yt.GCM:yt.NONE})};var zc;!function(e){e[e.WAITING=0]="WAITING",e[e.RUNNING=1]="RUNNING",e[e.COMPLETED=2]="COMPLETED"}(zc||(zc={}));class Gc{constructor(){this.pendingTasks=new Map,this.taskMutex=new r,this.nextTaskIndex=0}run(e){return kr(this,void 0,void 0,(function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:zc.WAITING};this.pendingTasks.set(t.id,t);const n=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=zc.RUNNING,yield e()}finally{t.status=zc.COMPLETED,this.pendingTasks.delete(t.id),n()}}))}flush(){return kr(this,void 0,void 0,(function*(){return this.run((()=>kr(this,void 0,void 0,(function*(){}))))}))}snapshot(){return Array.from(this.pendingTasks.values())}}const Jc=["client"];var Qc=class{constructor(){x(this,"listeners",new Map)}on(e,t){let n=this.listeners.get(e);return n||(n=new Set,this.listeners.set(e,n)),n.add(t),{off:()=>{n.delete(t)}}}emit(e,t){const n=this.listeners.get("*");if(n)for(const r of n)r(e,t);const i=this.listeners.get(e);if(i)for(const r of i)r(t)}clear(){this.listeners.clear()}},Yc=class extends Error{constructor(e,t){super("non-serializable value at ".concat(e," (").concat(t,")")),this.path=e,this.label=t}};const Xc=(e,t,n)=>{if(null===e)return null;switch(typeof e){case"string":case"boolean":return e;case"number":if(!Number.isFinite(e))throw new Yc(t,$c(e));return e;case"object":return Zc(e,t,n);default:throw new Yc(t,typeof e)}},Zc=(e,t,n)=>{var i,r;if(n.has(e))throw new Yc(t,"circular reference");if(Array.isArray(e)){if(e.length!==Object.keys(e).length)throw new Yc(t,"sparse array or array with non-index properties");n.add(e);const i=e.map(((e,i)=>Xc(e,"".concat(t,"[").concat(i,"]"),n)));return n.delete(e),i}const s=Object.getPrototypeOf(e);if(s!==Object.prototype&&null!==s)throw new Yc(t,null!==(i=null===(r=e.constructor)||void 0===r?void 0:r.name)&&void 0!==i?i:"object");n.add(e);const a={};for(const o of Object.keys(e)){const i=Xc(e[o],"".concat(t,".").concat(o),n);Object.defineProperty(a,o,{value:i,enumerable:!0,writable:!0,configurable:!0})}return n.delete(e),a},$c=e=>Number.isNaN(e)?"NaN":e>0?"Infinity":"-Infinity",ed=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;if(null===e||"object"!=typeof e)return e;if(t.has(e))return e;if(Array.isArray(e)){t.add(e);const n=e.map((e=>ed(e,t)));return t.delete(e),n}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&null!==n)return e;t.add(e);const i={};for(const r of Object.keys(e)){const n=ed(e[r],t);Object.defineProperty(i,r,{value:n,enumerable:!0,writable:!0,configurable:!0})}return t.delete(e),i},td=Symbol("machina.type");var nd=class{constructor(e){x(this,"id",void 0),x(this,"initialState",void 0),x(this,td,"BehavioralFsm"),x(this,"states",void 0),x(this,"emitter",new Qc),x(this,"clients",new WeakMap),x(this,"knownClients",new Set),x(this,"childSubscriptions",[]),x(this,"disposed",!1),x(this,"transitionDepth",0),this.id=e.id,this.initialState=e.initialState,this.states=e.states,this.wrapChildLinks(),this.setupChildSubscriptions()}handle(e,t){var n;if(this.disposed)return;const i=this.getOrCreateClientMeta(e);for(var r=arguments.length,s=new Array(r>2?r-2:0),a=2;a20)throw this.transitionDepth=0,new Error("Max transition depth (".concat(20,') exceeded in FSM "').concat(this.id,'". Likely an infinite _onEnter → transition loop.'));try{const r=this.states[i],s=this.states[t];if(null!=r&&r._onExit&&"function"==typeof r._onExit){const t=this.buildHandlerArgs(e,"",n);r._onExit(t)}n.state=t;const a={fromState:i,toState:t,client:e};let o;if(this.emitter.emit("transitioning",a),null!=s&&s._onEnter&&"function"==typeof s._onEnter){const t=this.buildHandlerArgs(e,"",n);o=s._onEnter(t)}this.emitter.emit("transitioned",a);const c=null==s?void 0:s._child;c&&c.reset(e),this.processQueue(e,n),"string"==typeof o&&n.state===t&&this.transition(e,o)}finally{this.transitionDepth--}}else this.emitter.emit("invalidstate",{stateName:t,client:e})}compositeState(e){var t;const n=this.clients.get(e);if(!n)return"";const i=null===(t=this.states[n.state])||void 0===t?void 0:t._child;if(i){const t=i.compositeState(e);if(t)return"".concat(n.state,".").concat(t)}return n.state}rehydrate(e,t){if(this.disposed)return;if("string"==typeof t)return void this.rehydrateCompositePath(e,t);const n=this.planSnapshotWrites(e,t);for(const i of n)i()}dehydrate(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=this.clients.get(e);if(!n)return;const i={state:n.state,deferred:n.deferredQueue.map((e=>this.snapshotDeferredInput(e)))},r=this.collectChildSnapshots(e,n.state,t);return r&&(i.children=r),i}planSnapshotWrites(e,t){if(this.disposed)return[];const n=t.state,i=t.deferred,r=t.children;if(!Object.hasOwn(this.states,n))throw new Error('rehydrate: unknown state "'.concat(n,'" in FSM "').concat(this.id,'". Valid states: ').concat(Object.keys(this.states).join(", ")));const s=[];if(r)for(const c of Object.keys(r)){var a;if(!Object.hasOwn(this.states,c))throw new Error('rehydrate: unknown state "'.concat(c,'" in FSM "').concat(this.id,'" referenced by snapshot.children.'));const t=null===(a=this.states[c])||void 0===a?void 0:a._child;if(!t)throw new Error('rehydrate: state "'.concat(c,'" in FSM "').concat(this.id,'" has no _child, but the snapshot has a children["').concat(c,'"] entry.'));s.push(...t.planRehydrate(e,r[c]))}const o=i.map((e=>function(e){for(var t=1;t{this.clients.has(e)||this.knownClients.add(new WeakRef(e)),this.clients.set(e,{state:n,deferredQueue:o})})),s}rehydrateCompositePath(e,t){const n=j(t.split(".")),i=n[0],r=L(n).slice(1);if(!Object.hasOwn(this.states,i))throw new Error('rehydrate: unknown state "'.concat(i,'" in FSM "').concat(this.id,'". Valid states: ').concat(Object.keys(this.states).join(", ")));if(r.length>0){var s;const n=r.join("."),a=null===(s=this.states[i])||void 0===s?void 0:s._child;if(!a)throw new Error('rehydrate: state "'.concat(i,'" in FSM "').concat(this.id,'" has no _child, but composite path "').concat(t,'" requires one.'));a.rehydrate(e,n)}this.clients.has(e)||this.knownClients.add(new WeakRef(e)),this.clients.set(e,{state:i,deferredQueue:[]})}collectChildSnapshots(e,t,n){const i=new Map;for(const a of Object.keys(this.states)){var r;const e=null===(r=this.states[a])||void 0===r?void 0:r._child;if(!e)continue;const t=i.get(e.instance);t?t.stateNames.push(a):i.set(e.instance,{childLink:e,stateNames:[a]})}let s;for(const a of i.values()){const i=a.childLink,r=a.stateNames,o=n&&r.includes(t);if("Fsm"===i.instance[td]&&!o)continue;const c=i.dehydrate(e,o);if(c){null!=s||(s={});for(const e of r)s[e]=c}}return s}snapshotDeferredInput(e){let t;try{n=e.args,t=Xc(n,"args",new Set)}catch(r){if(!(r instanceof Yc))throw r;const t=e.untilState?' (until "'.concat(e.untilState,'")'):"";throw new Error('dehydrate: deferred input "'.concat(e.inputName,'"').concat(t,' in FSM "').concat(this.id,'" has a non-serializable value at ').concat(r.path," (").concat(r.label,")"))}var n;const i={inputName:e.inputName,args:t};return void 0!==e.untilState&&(i.untilState=e.untilState),i}on(e,t){return this.disposed?{off(){}}:this.emitter.on(e,t)}emit(e,t){this.disposed||this.emitter.emit(e,t)}dispose(e){this.disposed=!0;for(const n of this.childSubscriptions)n.off();if(null==e||!e.preserveChildren){const e=new Set;for(const n of Object.keys(this.states)){var t;const i=null===(t=this.states[n])||void 0===t?void 0:t._child;i&&!e.has(i.instance)&&(e.add(i.instance),i.dispose())}}this.emitter.clear()}wrapChildLinks(){for(const e of Object.keys(this.states)){const t=this.states[e],n=null==t?void 0:t._child;if(n){if("object"!=typeof n)throw new Error('State "'.concat(e,'"._child: expected an Fsm or BehavioralFsm instance, got ').concat(String(n)));if(!(td in n))throw new Error('State "'.concat(e,'"._child: expected an Fsm or BehavioralFsm instance, got a plain object'));t._child=id(n)}}}setupChildSubscriptions(){const e=new Set;for(const n of Object.keys(this.states)){var t;const i=null===(t=this.states[n])||void 0===t?void 0:t._child;if(!i||e.has(i.instance))continue;e.add(i.instance);const r=i.onAny(((e,t)=>{if("nohandler"===e){var n;const e=t;if(void 0!==e.client)this.bubbleNohandler(e.client,i,e.inputName,null!==(n=e.args)&&void 0!==n?n:[]);else for(const t of this.knownClients){var r;const n=t.deref();void 0!==n?this.bubbleNohandler(n,i,e.inputName,null!==(r=e.args)&&void 0!==r?r:[]):this.knownClients.delete(t)}return}const s=t;if(s&&"object"==typeof s&&"client"in s)this.isChildActiveForClient(s.client,i)&&this.emitter.emit(e,t);else for(const a of this.knownClients){const n=a.deref();if(n){if(this.isChildActiveForClient(n,i)){this.emitter.emit(e,t);break}}else this.knownClients.delete(a)}}));this.childSubscriptions.push(r)}}bubbleNohandler(e,t,n,i){if(!this.isChildActiveForClient(e,t))return;const r=this.clients.get(e);r.currentActionArgs=i,this.handleLocally(e,n,i,r)}isChildActiveForClient(e,t){var n;const i=this.clients.get(e);return!!i&&(null===(n=this.states[i.state])||void 0===n||null===(n=n._child)||void 0===n?void 0:n.instance)===t.instance}handleLocally(e,t,n,i){var r;const s=this.states[i.state],a=null!==(r=null==s?void 0:s[t])&&void 0!==r?r:null==s?void 0:s["*"];if(!a)return this.emitter.emit("nohandler",{inputName:t,args:n,client:e}),void(i.currentActionArgs=void 0);try{this.emitter.emit("handling",{inputName:t,client:e});const r=this.buildHandlerArgs(e,t,i);let s;"string"==typeof a?s=a:"function"==typeof a&&(s=a(r,...n)),this.emitter.emit("handled",{inputName:t,client:e}),"string"==typeof s&&this.transition(e,s)}finally{i.currentActionArgs=void 0}}getOrCreateClientMeta(e){let t=this.clients.get(e);return t||(t={state:void 0,deferredQueue:[]},this.clients.set(e,t),this.knownClients.add(new WeakRef(e)),this.transition(e,this.initialState),t)}buildHandlerArgs(e,t,n){return{ctx:e,inputName:t,defer:i=>{if(!n.currentActionArgs)return;const r={inputName:t,args:[...n.currentActionArgs],untilState:null==i?void 0:i.until};n.deferredQueue.push(r),this.emitter.emit("deferred",{inputName:t,client:e})},emit:(e,t)=>{this.emitter.emit(e,t)}}}processQueue(e,t){const n=[],i=[];for(const r of t.deferredQueue)void 0===r.untilState||r.untilState===t.state?n.push(r):i.push(r);t.deferredQueue=i;for(const r of n)this.handle(e,r.inputName,...r.args)}};function id(e){if(!e||"object"!=typeof e)throw new Error("createChildLink: expected an Fsm or BehavioralFsm instance, got ".concat(String(e)));const t=e[td];if("BehavioralFsm"===t)return{instance:e,canHandle:(t,n)=>e.canHandle(t,n),handle(t,n){for(var i=arguments.length,r=new Array(i>2?i-2:0),s=2;se.on("*",t),compositeState:t=>e.compositeState(t),rehydrate(t,n){e.rehydrate(t,n)},dehydrate:(t,n)=>e.dehydrate(t,n),planRehydrate:(t,n)=>e.planSnapshotWrites(t,n),dispose(){e.dispose()}};if("Fsm"===t)return{instance:e,canHandle:(t,n)=>e.canHandle(n),handle(t,n){for(var i=arguments.length,r=new Array(i>2?i-2:0),s=2;se.on("*",t),compositeState:t=>e.compositeState(),rehydrate(e,t){throw new Error("rehydrate: cannot rehydrate an Fsm child. Fsm owns its own context; rehydrate is only valid for BehavioralFsm hierarchies.")},dehydrate(e,t){throw new Error("dehydrate: cannot dehydrate an Fsm child. Fsm owns its own context; dehydrate is only valid for BehavioralFsm hierarchies.")},planRehydrate(e,t){throw new Error("rehydrate: cannot rehydrate an Fsm child. Fsm owns its own context; rehydrate is only valid for BehavioralFsm hierarchies.")},dispose(){e.dispose()}};throw new Error("createChildLink: expected an Fsm or BehavioralFsm instance, got [MACHINA_TYPE] = ".concat(String(null!=t?t:"undefined")))}var rd=class{constructor(e){var t;x(this,"id",void 0),x(this,"initialState",void 0),x(this,td,"Fsm"),x(this,"states",void 0),x(this,"bfsm",void 0),x(this,"context",void 0),x(this,"emitter",new Qc),x(this,"disposed",!1),this.id=e.id,this.initialState=e.initialState,this.context=null!==(t=e.context)&&void 0!==t?t:{},this.bfsm=new nd(e),this.states=e.states,this.bfsm.on("*",((e,t)=>{if(t&&"object"==typeof t&&"client"in t){t.client;const n=function(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i1?t-1:0),i=1;i{if(sd(e.ctx,t))return"connected"},od=e=>{let t=e.ctx;return t.attemptId+=1,t.lastError=void 0,"connecting"},cd=e=>{let t=e.ctx;return t.attemptId+=1,t.lastError=void 0,"reconnecting"},dd=(e,t)=>(e.ctx.closeReason=t.reason,"disconnecting"),ld={new:{connect:od,close:dd},connecting:{connectComplete:ad,connectFailed:(e,t)=>(e.ctx.lastError=t.error,"closed"),close:dd},connected:{reconnect:cd,transportFailed:(e,t)=>{let n=e.ctx;if(sd(n,t))return n.lastError=t.reason,"offline"},close:dd},offline:{connect:od,reconnect:cd,close:dd},reconnecting:{reconnectComplete:ad,reconnectFailed:(e,t)=>(e.ctx.lastError=t.error,t.recoverable?"offline":"closed"),close:dd},disconnecting:{closeComplete:"closed"},closed:{connect:od,reconnect:cd}};function ud(){return new rd({id:"signal",initialState:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"new",context:{attemptId:0},states:ld})}class hd{get readyState(){return this.ws.readyState}constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n,i;if(null===(n=t.signal)||void 0===n?void 0:n.aborted)throw new DOMException("This operation was aborted","AbortError");this.url=e;const r=new WebSocket(e,null!==(i=t.protocols)&&void 0!==i?i:[]);r.binaryType="arraybuffer",this.ws=r;const s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.closeCode,n=e.reason;return r.close(t,n)};this.opened=new Ls(((e,t)=>{const n=()=>{t(Xs.websocket("Encountered websocket error during connection establishment"))};r.onopen=()=>{e({readable:new ReadableStream({start(e){r.onmessage=t=>{let n=t.data;return e.enqueue(n)},r.onerror=t=>{return e.error(Xs.websocket((i="websocket",(n=t)instanceof Error?n.name&&n.message?"".concat(n.name,": ").concat(n.message):n.name:"Encountered unknown ".concat(i," error: ").concat(String(n)))));var n,i},r.onclose=t=>{t.wasClean||1e3===t.code?e.close():e.error(Xs.websocket("WS closed unexpectedly with code ".concat(t.code)))}},cancel:s}),writable:new WritableStream({write(e){r.send(e)},abort(){r.close()},close:s}),protocol:r.protocol,extensions:r.extensions}),r.removeEventListener("error",n)},r.addEventListener("error",n)})),this.closed=new Ls(((e,t)=>{const n=()=>kr(this,void 0,void 0,(function*(){const n=new Ls((e=>{r.readyState!==WebSocket.CLOSED&&r.addEventListener("close",(t=>{e(t)}),{once:!0})})),i=yield Ls.race([Ga(250),n]);i?e(i):t(Xs.websocket("Encountered unspecified websocket error without a timely close event"))}));r.addEventListener("close",(t=>{let i=t.code,s=t.reason;e({closeCode:i,reason:s}),r.removeEventListener("error",n)})),r.addEventListener("error",n)})),t.signal&&(t.signal.onabort=()=>r.close()),this.close=s}}const pd=["syncState","trickle","offer","answer","simulate","leave"];var md;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTING=3]="DISCONNECTING",e[e.DISCONNECTED=4]="DISCONNECTED"}(md||(md={}));class gd{get currentState(){return function(e){switch(e){case"connected":return md.CONNECTED;case"connecting":return md.CONNECTING;case"reconnecting":return md.RECONNECTING;case"disconnecting":return md.DISCONNECTING;default:return md.DISCONNECTED}}(this.lifecycleState)}get isDisconnected(){const e=this.currentState;return e===md.DISCONNECTING||e===md.DISCONNECTED}get lifecycleState(){return this.machine.currentState()}get attemptId(){return this.machine.context.attemptId}sendLifecycleInput(e){const t=this.lifecycleState;return this.machine.handle(e.type,e),this.lifecycleState!==t}settleInFlightClose(){return kr(this,void 0,void 0,(function*(){this.log.debug("waiting for an in-flight close to settle before establishing a session"),(yield this.closingLock.lock())()}))}get isEstablishingConnection(){return"connecting"===this.lifecycleState||"reconnecting"===this.lifecycleState}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var i;this.rtt=0,this.log=or,this._requestId=0,this.useV0SignalPath=!1,this.resetCallbacks=()=>{this.onAnswer=void 0,this.onLeave=void 0,this.onLocalTrackPublished=void 0,this.onLocalTrackUnpublished=void 0,this.onNegotiateRequested=void 0,this.onOffer=void 0,this.onRemoteMuteChanged=void 0,this.onSubscribedQualityUpdate=void 0,this.onTokenRefresh=void 0,this.onTrickle=void 0,this.onClose=void 0,this.onMediaSectionsRequirement=void 0},this.loggerContextCb=n.loggerContextCb,this.log=dr(null!==(i=n.loggerName)&&void 0!==i?i:e.LoggerNames.Signal,(()=>this.logContext)),this.useJSON=t,this.requestQueue=new Gc,this.queuedRequests=[],this.closingLock=new r,this.connectionLock=new r,this.machine=ud(),this.machine.on("transitioned",(e=>{let t=e.fromState,n=e.toState;this.log.debug("signal lifecycle: ".concat(t," -> ").concat(n))})),this.machine.on("nohandler",(e=>{let t=e.inputName;this.log.debug("ignoring signal lifecycle input ".concat(t," in state ").concat(this.lifecycleState))})),this.machine}get logContext(){var e,t;return null!==(t=null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this))&&void 0!==t?t:{}}join(e,t,i,r){return kr(this,arguments,void 0,(function(e,t,i,r){var s=this;let a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5?arguments[5]:void 0;return function*(){if("disconnecting"===s.lifecycleState&&(yield s.settleInFlightClose()),!s.sendLifecycleInput({type:"connect"}))throw Xs.internal("cannot establish a signal session from '".concat(s.lifecycleState,"', close the current one first"));s.options=i;try{return yield s.connect(e,t,i,r,a,o)}catch(n){throw s.sendLifecycleInput({type:"connectFailed",error:n}),n}}()}))}reconnect(t,i,r,s){return kr(this,void 0,void 0,(function*(){if(this.options){if("disconnecting"===this.lifecycleState&&(yield this.settleInFlightClose()),!this.sendLifecycleInput({type:"reconnect"}))throw Xs.internal("cannot resume the signal session from '".concat(this.lifecycleState,"'"));this.clearPingInterval();try{return yield this.connect(t,i,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:r,reconnectReason:s}),void 0,this.useV0SignalPath)}catch(n){throw this.sendLifecycleInput({type:"reconnectFailed",error:n,recoverable:(a=n,!(a instanceof Xs)||a.reason!==e.ConnectionErrorReason.LeaveRequest&&a.reason!==e.ConnectionErrorReason.NotAllowed)}),n}var a}else this.log.warn("attempted to reconnect without signal options being set, ignoring")}))}connect(e,t,i,r){return kr(this,arguments,void 0,(function(e,t,i,r){var s=this;let a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5?arguments[5]:void 0;return function*(){const c=yield s.connectionLock.lock();s.connectOptions=i,s.useV0SignalPath=a;const d=function(e){var t;const n=new Xt({capabilities:e,sdk:Zt.JS,protocol:17,clientProtocol:2,version:qs});return po()&&(n.os=null!==(t=fo())&&void 0!==t?t:""),n}(i.clientInfoCapabilities),l=a?function(e,t,n){var i;const r=new URLSearchParams;r.set("access_token",e),n.reconnect&&(r.set("reconnect","1"),n.sid&&r.set("sid",n.sid));r.set("auto_subscribe",n.autoSubscribe?"1":"0"),r.set("sdk",po()?"reactnative":"js"),r.set("version",t.version),r.set("protocol",t.protocol.toString()),r.set("client_protocol",t.clientProtocol.toString()),t.deviceModel&&r.set("device_model",t.deviceModel);t.os&&r.set("os",t.os);t.osVersion&&r.set("os_version",t.osVersion);t.browser&&r.set("browser",t.browser);t.browserVersion&&r.set("browser_version",t.browserVersion);n.adaptiveStream&&r.set("adaptive_stream","1");n.disableIceLite&&r.set("disable_ice_lite","1");void 0!==n.subscriberAllowPause&&r.set("subscriber_allow_pause",n.subscriberAllowPause?"1":"0");n.reconnectReason&&r.set("reconnect_reason",n.reconnectReason.toString());(null===(i=navigator.connection)||void 0===i?void 0:i.type)&&r.set("network",navigator.connection.type);return r}(t,d,i):yield function(e,t,n,i){return kr(this,void 0,void 0,(function*(){const r=new URLSearchParams;r.set("access_token",e);const s=new Ji({clientInfo:t,connectionSettings:new Gi({autoSubscribe:!!n.autoSubscribe,adaptiveStream:!!n.adaptiveStream,disableIceLite:!!n.disableIceLite,subscriberAllowPause:n.subscriberAllowPause}),reconnect:!!n.reconnect,participantSid:n.sid?n.sid:void 0,publisherOffer:i});n.reconnectReason&&(s.reconnectReason=n.reconnectReason);const a=s.toBinary();let o,c;if(Go()){const e=new CompressionStream("gzip"),t=e.writable.getWriter();t.write(new Uint8Array(a)),t.close();const n=[],i=e.readable.getReader();for(;;){const e=yield i.read(),t=e.done,r=e.value;if(t)break;n.push(r)}const r=n.reduce(((e,t)=>e+t.length),0),s=new Uint8Array(r);let d=0;for(const a of n)s.set(a,d),d+=a.length;o=s,c=Yi.GZIP}else o=a,c=Yi.NONE;const d=new Qi({joinRequest:o,compression:c}).toBinary(),l=e=>{const t=Array.from(e,(e=>String.fromCodePoint(e))).join("");return btoa(t)};return r.set("join_request",l(d).replace(/\+/g,"-").replace(/\//g,"_")),r}))}(t,d,i,o),u=Xo(e,l,a).toString(),h=(p=u,$o(new URL(Ao(p)),"validate")).toString();var p;return new Promise(((e,t)=>kr(s,void 0,void 0,(function*(){var s,a,o,d,l;try{let c=!1;const p=e=>kr(this,void 0,void 0,(function*(){if(c)return;c=!0;const n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Unknown reason";if(e instanceof Error)return e.message;if(!(e instanceof AbortSignal))return t;const n=e.reason;switch(typeof n){case"string":return n;case"object":return n instanceof Error?n.message:t;default:return"toString"in n?n.toString():t}}(e instanceof Event?e.currentTarget:e,"Abort handler called");this.streamWriter&&!this.isDisconnected?this.sendLeave().then((()=>this.close(n))).catch((e=>{this.log.error(e),this.close()})):this.close(),m(),t(e instanceof Xs?e:Xs.cancelled(n))}));null==r||r.addEventListener("abort",p);const m=()=>{clearTimeout(g),null==r||r.removeEventListener("abort",p)},g=setTimeout((()=>{p(Xs.timeout("room connection has timed out (signal)"))}),i.websocketTimeout),v=new URL(u);if(v.searchParams.has("access_token")&&v.searchParams.set("access_token",""),this.ws){const e=performance.now();yield this.teardownTransport("replaced by a new connection attempt"),this.log.debug("closed previous ws connection in ".concat(performance.now()-e,"ms"))}const f=this.attemptId;this.log.info("signal connecting to ".concat(v),{reconnect:i.reconnect,reconnectReason:i.reconnectReason}),this.ws=new hd(u);let k=!1;this.ws.opened.catch((()=>{k=!0}));try{this.ws.closed.then((e=>{this.isEstablishingConnection&&!k&&t(Xs.internal("Websocket got closed during a (re)connection attempt: ".concat(e.reason))),this.log.debug("websocket closed",{reason:e.reason,code:e.closeCode,attemptId:f,state:this.lifecycleState}),this.handleOnClose(e.reason||(1e3===e.closeCode?"server closed the signal connection":"Unexpected WS error"),f)})).catch((e=>{this.isEstablishingConnection&&!k&&t(Xs.internal("Websocket error during a (re)connection attempt: ".concat(e)))}));const r=yield this.ws.opened.catch((e=>kr(this,void 0,void 0,(function*(){if("connected"===this.lifecycleState)this.handleWSError(e),t(e);else{clearTimeout(g);const n=yield this.handleConnectionError(e,h);t(n)}}))));if(clearTimeout(g),!r)return;const c=r.readable.getReader();let u;this.streamWriter=r.writable.getWriter();try{const e=Date.now()+5e3;for(;;){const t=e-Date.now();if(t<=0)throw Xs.timeout("signal connection timed out while waiting for the first message");let n;const i=yield Promise.race([c.read(),new Promise(((e,i)=>{n=setTimeout((()=>{i(Xs.timeout("signal connection timed out while waiting for the first message"))}),t)}))]);if(clearTimeout(n),!i.value)throw Xs.internal("no message received as first message");const r=ec(i.value);if("reconnecting"!==this.lifecycleState||"reconnect"===(null===(s=r.message)||void 0===s?void 0:s.case)||"leave"===(null===(a=r.message)||void 0===a?void 0:a.case)){u=r;break}this.log.warn("dropping signal message while awaiting reconnect response",{messageCase:null===(o=r.message)||void 0===o?void 0:o.case})}}catch(n){return c.releaseLock(),t(n),void this.close()}c.releaseLock();const p=this.validateFirstMessage(u,null!==(d=i.reconnect)&&void 0!==d&&d);if(!p.isValid)return void t(p.error);"join"===(null===(l=u.message)||void 0===l?void 0:l.case)&&(this.pingTimeoutDuration=u.message.value.pingTimeout,this.pingIntervalDuration=u.message.value.pingInterval,this.pingTimeoutDuration&&this.pingTimeoutDuration>0&&this.log.debug("ping config",{timeout:this.pingTimeoutDuration,interval:this.pingIntervalDuration}),this.onJoined&&this.onJoined(u.message.value)),this.handleSignalConnected(r,g,f),e(p.response)}catch(n){t(n)}finally{m()}}finally{c()}}))))}()}))}startReadingLoop(e){return kr(this,void 0,void 0,(function*(){const t=this.attemptId;for(;;){this.signalLatency&&(yield Ga(this.signalLatency));try{const t=yield e.read(),n=t.done,i=t.value;if(n)break;const r=ec(i);this.handleSignalResponse(r)}catch(n){this.log.error("error reading from signal stream",{error:n}),yield this.handleOnClose("error in reading loop",t);break}}}))}close(){return kr(this,arguments,void 0,(function(){var e=this;let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Close method called on signal client";return function*(){const i=t&&e.sendLifecycleInput({type:"close",reason:n}),r=yield e.closingLock.lock();try{yield e.teardownTransport(n)}finally{i&&e.sendLifecycleInput({type:"closeComplete"}),r()}}()}))}teardownTransport(e){return kr(this,void 0,void 0,(function*(){try{if(this.clearPingInterval(),this.ws){this.ws.close({closeCode:1e3,reason:e});const t=this.ws.closed;this.ws=void 0,this.streamWriter=void 0,yield Promise.race([t,Ga(250)])}}catch(n){this.log.debug("websocket error while closing",{error:n})}}))}sendOffer(e,t){this.log.debug("sending offer",{offerSdp:e.sdp}),this.sendRequest({case:"offer",value:fd(e,t)})}sendAnswer(e,t){return this.log.debug("sending answer",{answerSdp:e.sdp}),this.sendRequest({case:"answer",value:fd(e,t)})}sendIceCandidate(e,t){return this.log.debug("sending ice candidate",{candidate:e}),this.sendRequest({case:"trickle",value:new Zn({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new $n({sid:e,muted:t})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,t){return kr(this,arguments,void 0,(function(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){const r=n.getNextRequestId();return yield n.sendRequest({case:"updateMetadata",value:new yi({requestId:r,metadata:e,name:t,attributes:i})}),r}()}))}sendUpdateTrackSettings(e){this.sendRequest({case:"trackSetting",value:e})}sendUpdateSubscription(e){return this.sendRequest({case:"subscription",value:e})}sendSyncState(e){return this.sendRequest({case:"syncState",value:e})}sendUpdateVideoLayers(e,t){return this.sendRequest({case:"updateLayers",value:new ki({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new Oi({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:R.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new Bi({timestamp:R.parse(Date.now()),rtt:R.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new mi({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new vi({reason:ot.CLIENT_INITIATED,action:fi.DISCONNECT})})}sendPublishDataTrackRequest(e,t,n){return this.sendRequest({case:"publishDataTrackRequest",value:new zn({pubHandle:e,name:t,encryption:n?yt.GCM:yt.NONE})})}sendUnPublishDataTrackRequest(e){return this.sendRequest({case:"unpublishDataTrackRequest",value:new Jn({pubHandle:e})})}sendUpdateDataSubscription(e,t){return this.sendRequest({case:"updateDataSubscription",value:new oi({updates:[new ci({trackSid:e,subscribe:t})]})})}sendRequest(e){return kr(this,arguments,void 0,(function(e){var t=this;let i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function*(){const r=!i&&!function(e){const t=pd.indexOf(e.case)>=0;return or.trace("request allowed to bypass queue:",{canPass:t,req:e}),t}(e),s="reconnecting"===t.lifecycleState||t.queuedRequests.length>0;if(r&&s)return void t.queuedRequests.push((()=>kr(t,void 0,void 0,(function*(){yield this.sendRequest(e,!0)}))));i||(yield t.requestQueue.flush()),t.signalLatency&&(yield Ga(t.signalLatency));const a="leave"===e.case&&!!t.streamWriter;if(t.isDisconnected&&!a)return void t.log.debug("skipping signal request (type: ".concat(e.case,") - SignalClient disconnected"));if(!t.streamWriter)return void t.log.error("cannot send signal request before connected, type: ".concat(null==e?void 0:e.case));const o=new Vn({message:e});try{t.useJSON?yield t.streamWriter.write(o.toJsonString()):yield t.streamWriter.write(o.toBinary().buffer)}catch(n){t.log.error("error sending signal message",{error:n})}}()}))}handleSignalResponse(e){var t,n;const i=e.message;if(null==i)return void this.log.debug("received unsupported message");let r=!1;if("answer"===i.case){const e=vd(i.value);this.onAnswer&&this.onAnswer(e,i.value.id,i.value.midToTrackId)}else if("offer"===i.case){const e=vd(i.value);this.onOffer&&this.onOffer(e,i.value.id,i.value.midToTrackId)}else if("trickle"===i.case){const e=JSON.parse(i.value.candidateInit);this.onTrickle&&this.onTrickle(e,i.value.target)}else"update"===i.case?this.onParticipantUpdate&&this.onParticipantUpdate(null!==(t=i.value.participants)&&void 0!==t?t:[]):"trackPublished"===i.case?this.onLocalTrackPublished&&this.onLocalTrackPublished(i.value):"speakersChanged"===i.case?this.onSpeakersChanged&&this.onSpeakersChanged(null!==(n=i.value.speakers)&&void 0!==n?n:[]):"leave"===i.case?this.onLeave&&this.onLeave(i.value):"mute"===i.case?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(i.value.sid,i.value.muted):"roomUpdate"===i.case?this.onRoomUpdate&&i.value.room&&this.onRoomUpdate(i.value.room):"connectionQuality"===i.case?this.onConnectionQuality&&this.onConnectionQuality(i.value):"streamStateUpdate"===i.case?this.onStreamStateUpdate&&this.onStreamStateUpdate(i.value):"subscribedQualityUpdate"===i.case?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(i.value):"subscriptionPermissionUpdate"===i.case?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(i.value):"refreshToken"===i.case?this.onTokenRefresh&&this.onTokenRefresh(i.value):"trackUnpublished"===i.case?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(i.value):"subscriptionResponse"===i.case?this.onSubscriptionError&&this.onSubscriptionError(i.value):"pong"===i.case||("pongResp"===i.case?(this.rtt=Date.now()-Number.parseInt(i.value.lastPingTimestamp.toString()),this.resetPingTimeout(),r=!0):"requestResponse"===i.case?this.onRequestResponse&&this.onRequestResponse(i.value):"trackSubscribed"===i.case?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(i.value.trackSid):"roomMoved"===i.case?(this.onTokenRefresh&&this.onTokenRefresh(i.value.token),this.onRoomMoved&&this.onRoomMoved(i.value)):"mediaSectionsRequirement"===i.case?this.onMediaSectionsRequirement&&this.onMediaSectionsRequirement(i.value):"publishDataTrackResponse"===i.case?this.onPublishDataTrackResponse&&this.onPublishDataTrackResponse(i.value):"unpublishDataTrackResponse"===i.case?this.onUnPublishDataTrackResponse&&this.onUnPublishDataTrackResponse(i.value):"dataTrackSubscriberHandles"===i.case?this.onDataTrackSubscriberHandles&&this.onDataTrackSubscriberHandles(i.value):this.log.debug("unsupported message",{msgCase:i.case}));r||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return kr(this,arguments,void 0,(function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.attemptId,i=arguments.length>2?arguments[2]:void 0;return function*(){const r=t.onClose;t.sendLifecycleInput({type:"transportFailed",attemptId:n,reason:e})?(yield t.teardownTransport(e),t.log.info("websocket connection closed: ".concat(e),{reason:e}),i&&(t.log.info("waiting for ".concat(i,"ms until reconnecting signal")),yield Ga(i)),r&&r(e)):t.log.debug("ignoring transport close in state ".concat(t.lifecycleState),{reason:e,attemptId:n,currentAttemptId:t.attemptId})}()}))}handleWSError(e){this.log.error("websocket error",{error:e})}resetPingTimeout(){this.clearPingTimeout(),this.pingTimeoutDuration?this.pingTimeout=da.setTimeout((()=>{this.log.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now()-1e3*this.pingTimeoutDuration).toUTCString())),this.handleOnClose("ping timeout")}),1e3*this.pingTimeoutDuration):this.log.warn("ping timeout duration not set")}clearPingTimeout(){this.pingTimeout&&da.clearTimeout(this.pingTimeout)}startPingInterval(){this.clearPingInterval(),this.resetPingTimeout(),this.pingIntervalDuration?(this.log.debug("start ping interval"),this.pingInterval=da.setInterval((()=>{this.sendPing()}),1e3*this.pingIntervalDuration)):this.log.warn("ping interval duration not set")}clearPingInterval(){this.log.debug("clearing ping interval"),this.clearPingTimeout(),this.pingInterval&&da.clearInterval(this.pingInterval)}handleSignalConnected(e,t,n){clearTimeout(t);this.sendLifecycleInput("reconnecting"===this.lifecycleState?{type:"reconnectComplete",attemptId:n}:{type:"connectComplete",attemptId:n})?(this.log.info("signal connected"),this.startPingInterval(),this.startReadingLoop(e.readable.getReader())):this.log.debug("discarding a connection whose attempt no longer owns the session",{attemptId:n,currentAttemptId:this.attemptId,state:this.lifecycleState})}validateFirstMessage(e,t){var n,i,r,s;return"join"===(null===(n=e.message)||void 0===n?void 0:n.case)||"reconnecting"===this.lifecycleState&&"reconnect"===(null===(i=e.message)||void 0===i?void 0:i.case)?{isValid:!0,response:e.message.value}:this.isEstablishingConnection&&"leave"===(null===(r=e.message)||void 0===r?void 0:r.case)?{isValid:!1,error:Xs.leaveRequest("Received leave request while trying to (re)connect",e.message.value.reason)}:t?{isValid:!1,error:Xs.internal("Unexpected first message")}:{isValid:!1,error:Xs.internal("did not receive join response, got ".concat(null===(s=e.message)||void 0===s?void 0:s.case," instead"))}}handleConnectionError(e,t){return kr(this,void 0,void 0,(function*(){try{const n=yield fetch(t);switch(n.status){case 404:const e=yield n.text();return e.includes("requested room does not exist")?Xs.notAllowed(e,n.status):Xs.serviceNotFound("v1 RTC path not found. Consider upgrading your LiveKit server version","v0-rtc");case 401:case 403:const t=yield n.text();return Xs.notAllowed(t,n.status)}return e instanceof Xs?e:Xs.internal("Encountered unknown websocket error during connection: ".concat(e),{status:n.status,statusText:n.statusText})}catch(n){return n instanceof Xs?n:Xs.serverUnreachable(n instanceof Error?n.message:"server was not reachable")}}))}}function vd(e){const t={type:"offer",sdp:e.sdp};switch(e.type){case"answer":case"offer":case"pranswer":case"rollback":t.type=e.type}return t}function fd(e,t){return new ri({sdp:e.sdp,type:e.type,id:t})}class kd{constructor(e){this._map=new Map,this._lastCleanup=0,this.ttl=e}set(e,t){const n=Date.now();n-this._lastCleanup>this.ttl/2&&this.cleanup();const i=n+this.ttl;return this._map.set(e,{value:t,expiresAt:i}),this}get(e){const t=this._map.get(e);if(t){if(!(t.expiresAt=Date.now()&&e(r.value,i,this.asValueMap())}}map(e){this.cleanup();const t=[],n=this.asValueMap();for(const r of n.entries()){var i=B(r,2);const s=i[0],a=i[1];t.push(e(a,s,n))}return t}asValueMap(){const e=new Map;for(const n of this._map.entries()){var t=B(n,2);const i=t[0],r=t[1];r.expiresAt>=Date.now()&&e.set(i,r.value)}return e}}var yd,bd,Td,Sd,Ed,Cd={},wd={},Rd={exports:{}};function Pd(){if(yd)return Rd.exports;yd=1;var e=Rd.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.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(e){return null!=e.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(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.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(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["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(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.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(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.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(e).forEach((function(t){e[t].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))})),Rd.exports}function Id(){return bd||(bd=1,function(e){var t=function(e){return String(Number(e))===e?Number(e):e},n=function(e,n,i){var r=e.name&&e.names;e.push&&!n[e.push]?n[e.push]=[]:r&&!n[e.name]&&(n[e.name]={});var s=e.push?{}:r?n[e.name]:n;!function(e,n,i,r){if(r&&!i)n[r]=t(e[1]);else for(var s=0;s1&&(e[i[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(s,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var n=[],i=e.split(" ").map(t),r=0;r=r)return e;var t=i[n];switch(n+=1,e){case"%%":return"%";case"%s":return String(t);case"%d":return Number(t);case"%v":return""}}))},i=function(e,t,i){var r=[e+"="+(t.format instanceof Function?t.format(t.push?i:i[t.name]):t.format)];if(t.names)for(var s=0;se.codec.toUpperCase()===n.toUpperCase())))||void 0===r?void 0:r.payload)&&void 0!==s?s:0}function Od(e){if(e.maxbr<300)return;const t=Math.round(.9*e.maxbr);return e.isScreenShare?t:Math.min(t,1e3)}const Ad="negotiationStarted",Ld="negotiationComplete",Nd="offerAnswered",xd="rtpVideoPayloadTypes";class Ud extends wr.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var s;super(),this.log=or,this.iceLog=or,this.ddExtID=0,this.latestOfferId=0,this.answeredOfferId=0,this.latestAcknowledgedOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.hasAppliedVideoStartBitrate=!1,this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=bc((e=>kr(this,void 0,void 0,(function*(){this.emit(Ad);try{yield this.createAndSendOffer()}catch(n){if(!e)throw n;e(n)}}))),20),this.close=()=>{this._pc&&(this.log.debug("closing peer connection"),this.pendingInitialOffer=void 0,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.loggerOptions=i,this.log=dr(null!==(s=i.loggerName)&&void 0!==s?s:e.LoggerNames.PCTransport,(()=>this.logContext)),this.iceLog=dr(e.LoggerNames.ICE,(()=>this.logContext)),this.config=t,this._pc=this.createPC(),this.offerLock=new r}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=e=>{var t;e.candidate&&(this.iceLog.debug("local ICE candidate gathered",{candidate:e.candidate.candidate}),null===(t=this.onIceCandidate)||void 0===t||t.call(this,e.candidate))},e.onicecandidateerror=e=>{var t;this.iceLog.debug("ICE candidate error",{event:e}),null===(t=this.onIceCandidateError)||void 0===t||t.call(this,e)},e.oniceconnectionstatechange=()=>{var t;this.iceLog.debug("ICE connection state: ".concat(e.iceConnectionState)),null===(t=this.onIceConnectionStateChange)||void 0===t||t.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var t;this.log.debug("signaling state: ".concat(e.signalingState)),null===(t=this.onSignalingStatechange)||void 0===t||t.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var t;this.log.debug("connection state: ".concat(e.connectionState)),null===(t=this.onConnectionStateChange)||void 0===t||t.call(this,e.connectionState)},e.ondatachannel=e=>{var t;this.log.debug("data channel opened by peer",{label:e.channel.label,id:e.channel.id}),null===(t=this.onDataChannel)||void 0===t||t.call(this,e)},e.ontrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)},e}get logContext(){var e,t;return Object.assign({},null===(t=(e=this.loggerOptions).loggerContextCb)||void 0===t?void 0:t.call(e))}get isICEConnected(){return null!==this._pc&&("connected"===this.pc.iceConnectionState||"completed"===this.pc.iceConnectionState)}addIceCandidate(e){return kr(this,void 0,void 0,(function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.iceLog.debug("queuing remote ICE candidate until remote description applied",{pendingCount:this.pendingCandidates.length+1}),this.pendingCandidates.push(e)}))}setRemoteDescription(e,t){return kr(this,void 0,void 0,(function*(){var n;if("answer"===e.type&&this.latestOfferId>0&&t>0&&t!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",{offerId:t,latestOfferId:this.latestOfferId}),!1;if("answer"===e.type){if(function(e,t,n,i,r){return t===e||(e>0?e===n:"stable"===i&&!r)}(t,this.answerInFlight,this.answeredOfferId,null===(n=this._pc)||void 0===n?void 0:n.signalingState,void 0!==this.pendingInitialOffer))return this.log.warn("ignoring duplicate answer",{offerId:t}),!1;this.answerInFlight=t}try{return yield this.applyRemoteDescription(e,t)}finally{"answer"===e.type&&(this.answerInFlight=void 0)}}))}applyRemoteDescription(e,t){return kr(this,void 0,void 0,(function*(){var n,i;let r;if("offer"===e.type){let t=function(e){var t;const n=[],i=[],r=Md.parse(null!==(t=e.sdp)&&void 0!==t?t:"");let s=0;return r.media.forEach((e=>{var t;const r=Wd(e.mid);"audio"===e.type&&(e.rtp.some((e=>"opus"===e.codec.toLowerCase()&&(s=e.payload,!0))),(null===(t=e.rtcpFb)||void 0===t?void 0:t.some((e=>e.payload===s&&"nack"===e.type)))&&i.push(r),e.fmtp.some((e=>e.payload===s&&(Bd(e.config,"sprop-stereo=1")&&n.push(r),!0))))})),{stereoMids:n,nackMids:i}}(e),n=t.stereoMids,i=t.nackMids;this.remoteStereoMids=n,this.remoteNackMids=i}else if("answer"===e.type){if(this.pendingInitialOffer&&this._pc){const e=this.pendingInitialOffer;this.pendingInitialOffer=void 0;const t=Md.parse(null!==(n=e.sdp)&&void 0!==n?n:"");t.media.forEach((e=>{Vd(e)})),this.log.debug("setting pending initial offer before processing answer"),yield this.setMungedSDP(e,Md.write(t))}const t=Md.parse(null!==(i=e.sdp)&&void 0!==i?i:"");t.media.forEach((e=>{const t=Wd(e.mid);"audio"===e.type&&this.trackBitrates.some((n=>{if(!n.transceiver||t!=n.transceiver.mid)return!1;let i=0;if(e.rtp.some((e=>e.codec.toUpperCase()===n.codec.toUpperCase()&&(i=e.payload,!0))),0===i)return!0;let r=!1;for(const t of e.fmtp)if(t.payload===i){t.config=t.config.split(";").filter((e=>!e.includes("maxaveragebitrate"))).join(";"),n.maxbr>0&&(t.config+=";maxaveragebitrate=".concat(1e3*n.maxbr)),r=!0;break}return r||n.maxbr>0&&e.fmtp.push({payload:i,config:"maxaveragebitrate=".concat(1e3*n.maxbr)}),!0}))}));const s=this.getPlaceholderMids();s.size>0&&qd(t.media,(e=>s.has(Wd(e.mid)))),r=Md.write(t)}if(yield this.setMungedSDP(e,r,!0),"answer"===e.type&&t>0&&(this.answeredOfferId=t),this.pendingCandidates.length>0&&this.iceLog.debug("flushing queued ICE candidates",{count:this.pendingCandidates.length}),this.pendingCandidates.forEach((e=>{this.pc.addIceCandidate(e)})),this.pendingCandidates=[],this.restartingIce=!1,"answer"===e.type&&(this.latestAcknowledgedOfferId=t,this.emit(Nd,t)),this.renegotiate)this.renegotiate=!1,yield this.createAndSendOffer();else if("answer"===e.type&&(this.emit(Ld),e.sdp)){Md.parse(e.sdp).media.forEach((e=>{"video"===e.type&&this.emit(xd,e.rtp)}))}return!0}))}createInitialOffer(){return kr(this,void 0,void 0,(function*(){var e;const t=yield this.offerLock.lock();try{if("stable"!==this.pc.signalingState)return void this.log.warn("signaling state is not stable, cannot create initial offer");const t=this.latestOfferId+1;this.latestOfferId=t;const n=yield this.pc.createOffer();this.pendingInitialOffer={sdp:n.sdp,type:n.type};const i=Md.parse(null!==(e=n.sdp)&&void 0!==e?e:"");return i.media.forEach((e=>{Vd(e)})),n.sdp=Md.write(i),{offer:n,offerId:t}}finally{t()}}))}createAndSendOffer(e){return kr(this,void 0,void 0,(function*(){var t;const n=yield this.offerLock.lock();try{if(void 0===this.onOffer)return;if((null==e?void 0:e.iceRestart)&&(this.iceLog.debug("restarting ICE"),this.restartingIce=!0),this._pc&&("have-local-offer"===this._pc.signalingState||this.pendingInitialOffer)){const t=this._pc.remoteDescription;if(!(null==e?void 0:e.iceRestart)||!t){if(null==e?void 0:e.iceRestart)throw new ia("ICE restart requested without a remote description, peer connection must be recreated");return this.renegotiate=!0,void this.log.debug("requesting renegotiation")}yield this._pc.setRemoteDescription(t)}else if(!this._pc||"closed"===this._pc.signalingState)return void this.log.warn("could not createOffer with closed peer connection");this.log.debug("starting to negotiate");const n=this.latestOfferId+1;this.latestOfferId=n;const i=yield this.pc.createOffer(e);this.log.debug("original offer",{sdp:i.sdp});const r=Md.parse(null!==(t=i.sdp)&&void 0!==t?t:""),s=this.hasAppliedVideoStartBitrate?void 0:function(e,t){let n;for(const i of e)if("video"===i.type&&"recvonly"!==i.direction&&"inactive"!==i.direction)for(const e of t){if(!e.cid)continue;const t=Dd(i,e.cid,e.codec);if(void 0===t)continue;const r=t>0?Od(e):void 0;void 0!==r&&(void 0===n||r>n)&&(n=r);break}return n}(r.media,this.trackBitrates);let a=!1;r.media.forEach((e=>{Vd(e),"audio"===e.type?jd(e,["all"],[]):"video"===e.type&&this.trackBitrates.some((t=>{if(!t.cid)return!1;const n=Dd(e,t.cid,t.codec);return void 0!==n&&(n>0&&(void 0!==s&&(a=function(e,t,n){const i=e.fmtp.find((e=>e.payload===t));return i?i.config.includes("x-google-start-bitrate")||(i.config+=";x-google-start-bitrate=".concat(n)):e.fmtp.push({payload:t,config:"x-google-start-bitrate=".concat(n)}),!0}(e,n,s)||a),Za(t.codec)&&!ao()&&(this.ddExtID=function(e,t,n){var i,r;const s=function(e,t){const n=function(e,t){var n;for(const i of e.media){const e=null===(n=i.ext)||void 0===n?void 0:n.find((e=>e.uri===t));if(e)return e.value}return}(e,Ka);if(void 0!==n)return Fd(e,n,Ka)?void 0:n;if(0!==t&&!Fd(e,t,Ka))return t;return function(e){let t=0;return e.media.forEach((e=>{var n;null===(n=e.ext)||void 0===n||n.forEach((e=>{e.value>t&&(t=e.value)}))})),t+1===15?16:t+1}(e)}(t,n);if(void 0===s)return n;(null===(i=e.ext)||void 0===i?void 0:i.some((e=>e.uri===Ka)))||(null!==(r=e.ext)&&void 0!==r||(e.ext=[]),e.ext.push({value:s,uri:Ka}));return s}(e,r,this.ddExtID))),!0)}))}));const o=this.getPlaceholderMids();if(o.size>0&&qd(r.media,(e=>o.has(Wd(e.mid)))),this.latestOfferId>n)return void this.log.warn("latestOfferId mismatch",{latestOfferId:this.latestOfferId,offerId:n});const c=Md.write(r);yield this.setMungedSDP(i,c),a&&i.sdp===c&&(this.hasAppliedVideoStartBitrate=!0),this.onOffer(i,this.latestOfferId)}finally{n()}}))}createAndSetAnswer(){return kr(this,void 0,void 0,(function*(){var e;const t=yield this.pc.createAnswer(),n=Md.parse(null!==(e=t.sdp)&&void 0!==e?e:"");return n.media.forEach((e=>{Vd(e),"audio"===e.type&&jd(e,this.remoteStereoMids,this.remoteNackMids)})),yield this.setMungedSDP(t,Md.write(n)),t}))}getPlaceholderMids(){var e,t;return function(e){const t=new Set;for(const n of e)n.mid&&!n.sender.track&&t.add(n.mid);return t}(null!==(t=null===(e=this._pc)||void 0===e?void 0:e.getTransceivers())&&void 0!==t?t:[])}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTransceiverOfKind(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new na("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var t;if(!this._pc)throw new na("PC closed, cannot configure");return null===(t=this._pc)||void 0===t?void 0:t.setConfiguration(e)}canRemoveTrack(){var e;return!!(null===(e=this._pc)||void 0===e?void 0:e.removeTrack)}removeTrack(e){var t;return null===(t=this._pc)||void 0===t?void 0:t.removeTrack(e)}getConnectionState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.connectionState)&&void 0!==t?t:"closed"}getICEConnectionState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.iceConnectionState)&&void 0!==t?t:"closed"}getSignallingState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.signalingState)&&void 0!==t?t:"closed"}getTransceivers(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.getTransceivers())&&void 0!==t?t:[]}getSenders(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.getSenders())&&void 0!==t?t:[]}getLocalDescription(){var e;return null===(e=this._pc)||void 0===e?void 0:e.localDescription}getRemoteDescription(){var e;return null===(e=this.pc)||void 0===e?void 0:e.remoteDescription}getStats(){var e;return null===(e=this._pc)||void 0===e?void 0:e.getStats()}getMaxMessageSize(){var e,t;return null===(t=null===(e=this._pc)||void 0===e?void 0:e.sctp)||void 0===t?void 0:t.maxMessageSize}getConnectedAddress(){return kr(this,void 0,void 0,(function*(){var e;if(!this._pc)return;let t="";const n=new Map,i=new Map;if((yield this._pc.getStats()).forEach((e=>{switch(e.type){case"transport":t=e.selectedCandidatePairId;break;case"candidate-pair":""===t&&e.selected&&(t=e.id),n.set(e.id,e);break;case"remote-candidate":i.set(e.id,"".concat(e.address,":").concat(e.port))}})),""===t)return;const r=null===(e=n.get(t))||void 0===e?void 0:e.remoteCandidateId;return void 0!==r?i.get(r):void 0}))}setMungedSDP(e,t,i){return kr(this,void 0,void 0,(function*(){var r,s;const a=e.sdp;if(t){e.sdp=t;try{return this.log.debug("setting munged ".concat(i?"remote":"local"," description")),void(i?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e))}catch(n){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),{error:n,mungedSdp:t,originalSdp:a}),e.sdp=a}}try{i?yield null===(r=this._pc)||void 0===r?void 0:r.setRemoteDescription(e):yield null===(s=this._pc)||void 0===s?void 0:s.setLocalDescription(e)}catch(n){let s="unknown error";n instanceof Error?s=n.message:"string"==typeof n&&(s=n);const o={error:s,sdp:e.sdp};throw t&&t!==a&&(o.mungedSdp=t),!i&&this.pc.remoteDescription&&(o.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),{fields:o}),new ia(s)}}))}}function Fd(e,t,n){return e.media.some((e=>{var i;return null===(i=e.ext)||void 0===i?void 0:i.some((e=>e.value===t&&e.uri!==n))}))}function Bd(e,t){return e.split(";").some((e=>e.trim()===t))}function jd(e,t,n){const i=Wd(e.mid);let r=0;e.rtp.some((e=>"opus"===e.codec.toLowerCase()&&(r=e.payload,!0))),r>0&&(e.rtcpFb||(e.rtcpFb=[]),n.includes(i)&&!e.rtcpFb.some((e=>e.payload===r&&"nack"===e.type))&&e.rtcpFb.push({payload:r,type:"nack"}),(t.includes(i)||1===t.length&&"all"===t[0])&&e.fmtp.some((e=>e.payload===r&&(Bd(e.config,"stereo=1")||(e.config+=";stereo=1"),!0))))}function qd(e,t){var n,i;const r=new Map,s=new Set;for(const a of e){const e=t(a);for(const t of null!==(n=a.fmtp)&&void 0!==n?n:[])e?r.has(t.payload)||r.set(t.payload,t.config):(r.set(t.payload,t.config),s.add(t.payload))}if(0!==r.size)for(const a of e)if(t(a))for(const e of null!==(i=a.fmtp)&&void 0!==i?i:[]){const t=r.get(e.payload);void 0!==t&&e.config!==t&&(e.config=t)}}function Vd(e){if(e.connection){const t=e.connection.ip.indexOf(":")>=0;(4===e.connection.version&&t||6===e.connection.version&&!t)&&(e.connection.ip="0.0.0.0",e.connection.version=4)}}function Wd(e){return"number"==typeof e?e.toFixed(0):e}const Hd="vp8",Kd={audioPreset:e.AudioPresets.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Ra.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Hd,backupCodec:!0,preConnectBuffer:!1},zd={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Gd={deviceId:{ideal:"default"},resolution:Ca.h720.resolution},Jd={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new vr,disconnectOnPageLeave:!0,webAudioMix:!1,singlePeerConnection:!0},Qd={autoSubscribe:!0,disableIceLite:!1,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var Yd,Xd;!function(e){e[e.NEW=0]="NEW",e[e.CONNECTING=1]="CONNECTING",e[e.CONNECTED=2]="CONNECTED",e[e.FAILED=3]="FAILED",e[e.CLOSING=4]="CLOSING",e[e.CLOSED=5]="CLOSED"}(Yd||(Yd={}));class Zd{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}get mode(){return this._mode}constructor(t,n,i){var s;this.peerConnectionTimeout=Qd.peerConnectionTimeout,this.log=or,this.iceLog=or,this.updateState=()=>{var e,t;const n=this.state,i=this.requiredTransports.map((e=>e.getConnectionState()));i.every((e=>"connected"===e))?this.state=Yd.CONNECTED:i.some((e=>"failed"===e))?this.state=Yd.FAILED:i.some((e=>"connecting"===e))?this.state=Yd.CONNECTING:i.every((e=>"closed"===e))?this.state=Yd.CLOSED:i.some((e=>"closed"===e))?this.state=Yd.CLOSING:i.every((e=>"new"===e))&&(this.state=Yd.NEW),n!==this.state&&(this.log.debug("pc state change: from ".concat(Yd[n]," to ").concat(Yd[this.state])),null===(e=this.onStateChange)||void 0===e||e.call(this,this.state,this.publisher.getConnectionState(),null===(t=this.subscriber)||void 0===t?void 0:t.getConnectionState()))},this.loggerOptions=n,this.log=dr(null!==(s=n.loggerName)&&void 0!==s?s:e.LoggerNames.PCManager,(()=>this.logContext)),this.iceLog=dr(e.LoggerNames.ICE,(()=>this.logContext)),this.isPublisherConnectionRequired="subscriber-primary"!==t,this.isSubscriberConnectionRequired="subscriber-primary"===t,this.publisher=new Ud(i,n),this._mode=t,"publisher-only"!==t&&(this.subscriber=new Ud(i,n),this.subscriber.onConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.subscriber.onIceCandidate=e=>{var t;null===(t=this.onIceCandidate)||void 0===t||t.call(this,e,Bn.SUBSCRIBER)},this.subscriber.onDataChannel=e=>{var t;null===(t=this.onDataChannel)||void 0===t||t.call(this,e)},this.subscriber.onTrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)}),this.publisher.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=e=>{var t;null===(t=this.onIceCandidate)||void 0===t||t.call(this,e,Bn.PUBLISHER)},this.publisher.onTrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)},this.publisher.onOffer=(e,t)=>{var n;null===(n=this.onPublisherOffer)||void 0===n||n.call(this,e,t)},this.state=Yd.NEW,this.connectionLock=new r,this.remoteOfferLock=new r}get logContext(){var e,t;return Object.assign({},null===(t=(e=this.loggerOptions).loggerContextCb)||void 0===t?void 0:t.call(e))}requirePublisher(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.isPublisherConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e,t){return this.publisher.setRemoteDescription(e,t)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return kr(this,void 0,void 0,(function*(){var e;if(this.publisher&&"closed"!==this.publisher.getSignallingState()){const e=this.publisher;for(const t of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(t)}catch(n){this.log.warn("could not removeTrack",{error:n})}}yield Promise.all([this.publisher.close(),null===(e=this.subscriber)||void 0===e?void 0:e.close()]),this.updateState()}))}triggerIceRestart(){return kr(this,void 0,void 0,(function*(){this.iceLog.warn("triggering ICE restart"),this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))}))}addIceCandidate(e,t){return kr(this,void 0,void 0,(function*(){var n;this.iceLog.debug("adding remote ICE candidate",{target:t,candidate:e}),t===Bn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield null===(n=this.subscriber)||void 0===n?void 0:n.addIceCandidate(e)}))}createSubscriberAnswerFromOffer(e,t){return kr(this,void 0,void 0,(function*(){var n,i,r;this.log.debug("received server offer",{RTCSdpType:e.type,sdp:e.sdp,signalingState:null===(n=this.subscriber)||void 0===n?void 0:n.getSignallingState().toString()});const s=yield this.remoteOfferLock.lock();try{if(!(yield null===(i=this.subscriber)||void 0===i?void 0:i.setRemoteDescription(e,t)))return;return yield null===(r=this.subscriber)||void 0===r?void 0:r.createAndSetAnswer()}finally{s()}}))}updateConfiguration(e,t){var n;this.log.debug("updating rtc configuration",{iceRestart:t}),this.publisher.setConfiguration(e),null===(n=this.subscriber)||void 0===n||n.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return kr(this,void 0,void 0,(function*(){var n;const i=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&"connected"!==this.publisher.getConnectionState()&&"connecting"!==this.publisher.getConnectionState()&&(this.log.debug("negotiation required, start negotiating"),this.publisher.negotiate().catch((e=>{this.log.error(e)}))),yield Promise.all(null===(n=this.requiredTransports)||void 0===n?void 0:n.map((n=>this.ensureTransportConnected(n,e,t))))}finally{i()}}))}negotiate(e){return kr(this,void 0,void 0,(function*(){return new Ls(((t,n)=>{const i=this.publisher.latestOfferId;if(this.publisher.latestAcknowledgedOfferId>i)return this.log.debug("negotiation already handled in more recent acknowledged offer",this.logContext),void t();let r=!1;const s=()=>{r||(r=!0,clearTimeout(c),this.publisher.off(Nd,a),e.signal.removeEventListener("abort",o))},a=e=>{e>i&&(s(),t())},o=()=>{s(),n(new ia("negotiation aborted"))},c=setTimeout((()=>{s(),n(new ia("negotiation timed out"))}),this.peerConnectionTimeout);e.signal.addEventListener("abort",o),this.publisher.on(Nd,a),this.publisher.negotiate((e=>{s(),e instanceof Error?n(e):n(new Error(String(e)))}))}))}))}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTransceiverOfKind(e,t){return this.publisher.addTransceiverOfKind(e,t)}getMidForReceiver(e){const t=(this.subscriber?this.subscriber.getTransceivers():this.publisher.getTransceivers()).find((t=>t.receiver===e));return null==t?void 0:t.mid}getMaxPublisherMessageSize(){return this.publisher.getMaxMessageSize()}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===Bn.PUBLISHER||e===Bn.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&this.subscriber&&e.push(this.subscriber),e}ensureTransportConnected(e,t){return kr(this,arguments,void 0,(function(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.peerConnectionTimeout;return function*(){if("connected"!==e.getConnectionState())return new Promise(((e,r)=>kr(n,void 0,void 0,(function*(){const n=()=>{this.log.warn("abort transport connection"),da.clearTimeout(s),r(Xs.cancelled("room connection has been cancelled"))};(null==t?void 0:t.signal.aborted)&&n(),null==t||t.signal.addEventListener("abort",n);const s=da.setTimeout((()=>{null==t||t.signal.removeEventListener("abort",n),r(Xs.internal("could not establish pc connection"))}),i);for(;this.state!==Yd.CONNECTED;)if(yield Ga(50),null==t?void 0:t.signal.aborted)return void r(Xs.cancelled("room connection has been cancelled"));da.clearTimeout(s),null==t||t.signal.removeEventListener("abort",n),e()}))))}()}))}}class $d{constructor(e){this.bufferStatusLow=!0,this.headroomLock=new r,this.waiterAbortController=new AbortController,this.kind=e.kind,this.lowWaterMark=e.lowWaterMark,this.highWaterMark=e.highWaterMark,this.isEngineClosed=e.isEngineClosed,this.onBufferStatusChanged=e.onBufferStatusChanged}get channelHandle(){return this.handle}attach(e){this.handle&&this.handle!==e&&this.invalidateWaiters("data channel replaced"),this.handle=e}detach(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"data channel torn down";this.handle&&this.invalidateWaiters(e),this.handle=void 0}getChannel(){return this.handle}isBelowHighWaterMark(e){return e.bufferedAmount<=this.highWaterMark}isBelowLowWaterMark(e){return e.bufferedAmount<=e.bufferedAmountLowThreshold}lockHeadroom(){return this.headroomLock.lock()}waitForHeadroomWithLock(){return kr(this,void 0,void 0,(function*(){const e=yield this.lockHeadroom();try{yield this.waitForHeadroomWithoutLock()}finally{e()}}))}waitForHeadroomWithoutLock(){return kr(this,void 0,void 0,(function*(){if(this.isEngineClosed())throw new na("engine closed");const e=this.getChannel();if(!e)throw new na("DataChannel not found, kind: ".concat(this.kind));if(this.isBelowHighWaterMark(e))return;const t=this.waiterAbortController.signal;yield new Ls(((n,i)=>{const r=()=>{o(),n()},s=()=>{o(),i(new na("DataChannel ".concat(this.kind," closed while draining the buffer")))},a=()=>{o(),i(new na("DataChannel ".concat(this.kind," was replaced or torn down while waiting for headroom")))},o=()=>{e.removeEventListener("bufferedamountlow",r),e.removeEventListener("close",s),t.removeEventListener("abort",a)};t.aborted?a():(e.addEventListener("bufferedamountlow",r),e.addEventListener("close",s),t.addEventListener("abort",a))}))}))}invalidateWaiters(e){this.waiterAbortController.abort(e),this.waiterAbortController=new AbortController}refreshBufferStatus(){var e;const t=this.getChannel();if(!t)return;const n=this.isBelowLowWaterMark(t);n!==this.bufferStatusLow&&(this.bufferStatusLow=n,null===(e=this.onBufferStatusChanged)||void 0===e||e.call(this,n))}}class el extends $d{constructor(e){super(e),this.statCurrentBytes=0,this.statByterate=0,this.dropCount=0,this.bufferFullBehavior=e.bufferFullBehavior,this.shouldSkipSends=e.shouldSkipSends}send(e){return kr(this,void 0,void 0,(function*(){const t=this.getChannel();if(t){switch(this.bufferFullBehavior){case"wait":this.isBelowHighWaterMark(t)||(yield this.waitForHeadroomWithLock());break;case"drop":if(!this.isBelowLowWaterMark(t))return this.dropCount+=1,void(this.dropCount%100==0&&or.warn("dropping lossy data channel messages, total dropped: ".concat(this.dropCount)))}if(this.statCurrentBytes+=e.byteLength,!this.shouldSkipSends())try{t.send(e),this.refreshBufferStatus()}catch(n){if(!(n instanceof TypeError))throw n;or.error(n)}}}))}startThresholdTuning(){this.stopThresholdTuning(),this.statInterval=da.setInterval((()=>{this.statByterate=this.statCurrentBytes,this.statCurrentBytes=0;const e=this.getChannel();if(e){const t=this.statByterate/10;e.bufferedAmountLowThreshold=Math.min(Math.max(t,this.lowWaterMark),this.highWaterMark)}}),1e3)}stopThresholdTuning(){this.statByterate=0,this.statCurrentBytes=0,this.statInterval&&(da.clearInterval(this.statInterval),this.statInterval=void 0),this.dropCount=0}}class tl{constructor(){this.buffer=[],this._totalSize=0,this._sentSize=0}push(e){this.buffer.push(e),this._totalSize+=e.data.byteLength,e.sent&&(this._sentSize+=e.data.byteLength)}pop(){const e=this.buffer.shift();return e&&(this._totalSize-=e.data.byteLength,e.sent&&(this._sentSize-=e.data.byteLength)),e}getAll(){return this.buffer.slice()}getUnsent(){return this.buffer.filter((e=>!e.sent))}markSent(e){e.sent||(e.sent=!0,this._sentSize+=e.data.byteLength)}markAllUnsent(){for(const e of this.buffer)e.sent=!1;this._sentSize=0}popToSequence(e){for(;this.buffer.length>0;){if(!(this.buffer[0].sequence<=e))break;this.pop()}}alignBufferedAmount(e){for(;this.buffer.length>0;){const t=this.buffer[0];if(!t.sent)break;if(this._sentSize-t.data.byteLength<=e)break;this.pop()}}get length(){return this.buffer.length}}class nl extends $d{constructor(e){super(e),this.messageBuffer=new tl,this.sequence=1,this.isDeferringSends=e.isDeferringSends}nextSequence(){const e=this.sequence;return this.sequence+=1,e}send(e,t){return kr(this,void 0,void 0,(function*(){if(this.isDeferringSends())return void this.messageBuffer.push({data:e,sequence:t,sent:!1});const n=this.getChannel();if(n){try{yield this.waitForHeadroomWithLock()}catch(i){if(this.isEngineClosed())throw i;return void this.messageBuffer.push({data:e,sequence:t,sent:!1})}this.isDeferringSends()?this.messageBuffer.push({data:e,sequence:t,sent:!1}):(this.messageBuffer.push({data:e,sequence:t,sent:!0}),n.send(e),this.refreshBufferStatus())}}))}replay(e){return kr(this,void 0,void 0,(function*(){const t=this.getChannel();if(!t)return;this.messageBuffer.popToSequence(e);const n=yield this.lockHeadroom();try{this.messageBuffer.markAllUnsent();for(let e=this.messageBuffer.getUnsent();e.length>0;e=this.messageBuffer.getUnsent())for(const n of e)yield this.waitForHeadroomWithoutLock(),t.send(n.data),this.messageBuffer.markSent(n)}finally{n()}this.refreshBufferStatus()}))}refreshBufferStatus(){const e=this.channelHandle;e&&this.messageBuffer.alignBufferedAmount(e.bufferedAmount),super.refreshBufferStatus()}reset(){this.messageBuffer=new tl,this.sequence=1}}!function(e){e[e.RELIABLE=0]="RELIABLE",e[e.LOSSY=1]="LOSSY",e[e.DATA_TRACK_LOSSY=2]="DATA_TRACK_LOSSY"}(Xd||(Xd={}));function il(e){return e===Xd.RELIABLE?65536:8192}function rl(e){return e===Xd.RELIABLE?1048576:262144}const sl="_lossy",al="_reliable",ol="_data_track";class cl{constructor(e){this.opts=e;const t=t=>({kind:t,lowWaterMark:il(t),highWaterMark:rl(t),isEngineClosed:e.isEngineClosed,onBufferStatusChanged:n=>e.onBufferStatusChanged(t,n)});this.reliable=new nl(Object.assign(Object.assign({},t(Xd.RELIABLE)),{isDeferringSends:e.isReconnecting})),this.lossy=new el(Object.assign(Object.assign({},t(Xd.LOSSY)),{bufferFullBehavior:"drop",shouldSkipSends:e.isReconnecting})),this.dataTrack=new el(Object.assign(Object.assign({},t(Xd.DATA_TRACK_LOSSY)),{bufferFullBehavior:"wait",shouldSkipSends:e.isReconnecting}))}channelFor(e){switch(e){case Xd.RELIABLE:return this.reliable;case Xd.LOSSY:return this.lossy;case Xd.DATA_TRACK_LOSSY:return this.dataTrack}}getHandle(e){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1]))return this.channelFor(e).channelHandle;switch(e){case Xd.RELIABLE:return this.reliableSub;case Xd.LOSSY:return this.lossySub;case Xd.DATA_TRACK_LOSSY:return this.dataTrackSub}}get hasPublisherChannels(){return Boolean(this.reliable.channelHandle||this.lossy.channelHandle||this.dataTrack.channelHandle)}createPublisherChannels(e){for(const n of[this.lossy,this.reliable,this.dataTrack]){const e=n.channelHandle;e&&(e.onmessage=null,e.onerror=null,e.onclose=null)}const t=(e,t,n)=>{t.onmessage=n,t.onerror=this.opts.onDataError,t.onclose=()=>this.opts.onChannelClose(e.kind),t.bufferedAmountLowThreshold=e.lowWaterMark,t.onbufferedamountlow=()=>e.refreshBufferStatus(),e.attach(t)};t(this.lossy,e.createPublisherDataChannel(sl,{ordered:!1,maxRetransmits:0}),this.opts.onDataMessage),t(this.reliable,e.createPublisherDataChannel(al,{ordered:!0}),this.opts.onDataMessage),t(this.dataTrack,e.createPublisherDataChannel(ol,{ordered:!1,maxRetransmits:0}),this.opts.onDataTrackMessage),this.lossy.startThresholdTuning()}adoptSubscriberChannel(e){let t;if(e.label===al)this.reliableSub=e,t=this.opts.onDataMessage;else if(e.label===sl)this.lossySub=e,t=this.opts.onDataMessage;else{if(e.label!==ol)return!1;this.dataTrackSub=e,t=this.opts.onDataTrackMessage}return e.onmessage=t,!0}teardown(){const e=e=>{e&&(e.onbufferedamountlow=null,e.onclose=null,e.onclosing=null,e.onerror=null,e.onmessage=null,e.onopen=null,e.close())};for(const t of[this.lossy,this.reliable,this.dataTrack]){const n=t.channelHandle;t.detach("peer connections cleaned up"),e(n)}e(this.lossySub),e(this.reliableSub),e(this.dataTrackSub),this.lossySub=void 0,this.reliableSub=void 0,this.dataTrackSub=void 0,this.reliable.reset()}}const dl="undefined"!=typeof MediaRecorder;const ll=dl?MediaRecorder:class{constructor(){throw new Error("MediaRecorder is not available in this environment")}};class ul extends ll{constructor(e,t){if(!dl)throw new Error("MediaRecorder is not available in this environment");let n,i;super(new MediaStream([e.mediaStreamTrack]),t);const r=()=>{this.removeEventListener("dataavailable",n),this.removeEventListener("stop",r),this.removeEventListener("error",s),null==i||i.close(),i=void 0},s=e=>{null==i||i.error(e),this.removeEventListener("dataavailable",n),this.removeEventListener("stop",r),this.removeEventListener("error",s),i=void 0};this.byteStream=new ReadableStream({start:e=>{i=e,n=t=>kr(this,void 0,void 0,(function*(){let n;if(t.data.arrayBuffer){const e=yield t.data.arrayBuffer();n=new Uint8Array(e)}else{if(!t.data.byteArray)throw new Error("no data available!");n=t.data.byteArray}void 0!==i&&e.enqueue(n)})),this.addEventListener("dataavailable",n)},cancel:()=>{r()}}),this.addEventListener("stop",r),this.addEventListener("error",s)}}class hl extends Va{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(t,n,i){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];super(t,n,arguments.length>4?arguments[4]:void 0),this.manuallyStopped=!1,this.pendingDeviceChange=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch((()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext))),this.debouncedTrackMuteHandler=bc((()=>kr(this,void 0,void 0,(function*(){yield this.pauseUpstream()}))),5e3),this.handleTrackUnmuteEvent=()=>kr(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(e.TrackEvent.Ended,this)},this.reacquireTrack=!1,this.providedByUser=s,this.muteLock=new r,this.pauseUpstreamLock=new r,this.trackChangeLock=new r,this.trackChangeLock.lock().then((e=>kr(this,void 0,void 0,(function*(){try{yield this.setMediaStreamTrack(t,!0)}finally{e()}})))),this._constraints=t.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==Va.Kind.Video)return;const e=this._mediaStreamTrack.getSettings(),t=e.width,n=e.height;return t&&n?{width:t,height:n}:void 0}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,t;return null!==(t=null===(e=this.processor)||void 0===e?void 0:e.processedTrack)&&void 0!==t?t:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,t,n){return kr(this,void 0,void 0,(function*(){var i;if(e===this._mediaStreamTrack&&!t)return;let r;if(this._mediaStreamTrack&&(this.attachedElements.forEach((e=>{Ha(this._mediaStreamTrack,e)})),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints()),this.processor&&e){if(this.log.debug("restarting processor",this.logContext),"unknown"===this.kind)throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Wa(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement,localTrack:this}),r=this.processor.processedTrack}this.sender&&"closed"!==(null===(i=this.sender.transport)||void 0===i?void 0:i.state)&&(yield this.sender.replaceTrack(null!=r?r:e)),this.providedByUser||this._mediaStreamTrack===e||this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!!n||!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach((t=>{Wa(null!=r?r:e,t)})))}))}waitForDimensions(){return kr(this,arguments,void 0,(function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;return function*(){if(e.kind===Va.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");const n=Date.now();for(co()&&(yield function(e,t){return kr(this,arguments,void 0,(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return function*(){var i;if("undefined"==typeof document)return!1;if("ended"===e.readyState||e.muted||!e.enabled)return!1;const r="function"==typeof HTMLVideoElement.prototype.requestVideoFrameCallback,s=n.find((t=>t instanceof HTMLVideoElement&&t.srcObject instanceof MediaStream&&t.srcObject.getVideoTracks().includes(e)&&(r||t.readyState<2))),a=null!=s?s:document.createElement("video");let o,c,d;s||(a.playsInline=!0,a.muted=!0,a.srcObject=new MediaStream([e]),a.play().catch((e=>{or.debug("could not play element while waiting for the first video frame",{error:e})})));try{return yield new Promise((e=>{o=setTimeout((()=>e(!1)),t),r?c=a.requestVideoFrameCallback((()=>e(!0))):(d=()=>e(!0),a.addEventListener("loadeddata",d))}))}finally{clearTimeout(o),void 0!==c&&(null===(i=a.cancelVideoFrameCallback)||void 0===i||i.call(a,c)),d&&a.removeEventListener("loadeddata",d),s||(a.pause(),a.srcObject=null)}}()}))}(e._mediaStreamTrack,t,e.attachedElements));;){const i=e.dimensions;if(i)return i;if(Date.now()-n>=t)break;yield Ga(50)}throw new ea("unable to get track dimensions after timeout")}()}))}setDeviceId(e){return kr(this,void 0,void 0,(function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===Oo(e)||(this._constraints.deviceId=e,this.isMuted?(this.pendingDeviceChange=!0,!0):(yield this.restartTrack(),Oo(e)===this._mediaStreamTrack.getSettings().deviceId))}))}getDeviceId(){return kr(this,arguments,void 0,(function(){var e=this;let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return function*(){if(e.source===Va.Source.ScreenShare)return;const n=e._mediaStreamTrack.getSettings(),i=n.deviceId,r=n.groupId,s=e.kind===Va.Kind.Audio?"audioinput":"videoinput";return t?Lc.getInstance().normalizeDeviceId(s,i,r):i}()}))}mute(){return kr(this,void 0,void 0,(function*(){return this.setTrackMuted(!0),this}))}unmute(){return kr(this,void 0,void 0,(function*(){return this.setTrackMuted(!1),this}))}replaceTrack(e,t){return kr(this,void 0,void 0,(function*(){const n=yield this.trackChangeLock.lock();try{if(!this.sender)throw new ea("unable to replace an unpublished track");let n,i;"boolean"==typeof t?n=t:void 0!==t&&(n=t.userProvidedTrack,i=t.stopProcessor),this.providedByUser=null==n||n,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),i&&this.processor&&(yield this.internalStopProcessor())}finally{n()}return yield this.onSenderTrackSwapped(),this}))}onSenderTrackSwapped(){return kr(this,void 0,void 0,(function*(){}))}restart(t,n){return kr(this,void 0,void 0,(function*(){this.manuallyStopped=!1;const i=yield this.trackChangeLock.lock();try{t||(t=this._constraints);const i=t,r=i.deviceId,s=i.facingMode,a=fr(t,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:t}));const o={audio:!1,video:!1};this.kind===Va.Kind.Video?o.video=!r&&!s||{deviceId:r,facingMode:s}:o.audio=!r||Object.assign({deviceId:r},a),this.attachedElements.forEach((e=>{Ha(this.mediaStreamTrack,e)})),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(o)).getTracks()[0];return this.kind===Va.Kind.Video&&(yield c.applyConstraints(a)),c.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(c,!1,n),this._constraints=t,this.pendingDeviceChange=!1,this.emit(e.TrackEvent.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{i()}}))}setTrackMuted(t){this.log.debug("setting ".concat(this.kind," track ").concat(t?"muted":"unmuted"),this.logContext),this.isMuted===t&&this._mediaStreamTrack.enabled!==t||(this.isMuted=t,this._mediaStreamTrack.enabled=!t,this.emit(t?e.TrackEvent.Muted:e.TrackEvent.Unmuted,this))}get needsReAcquisition(){return"live"!==this._mediaStreamTrack.readyState||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return kr(this,void 0,void 0,(function*(){yield e.handleAppVisibilityChanged.call(this),uo()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),this.isInBackground||!this.needsReAcquisition||this.isUserProvided||this.isMuted||(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))}))}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),null===(e=this.processor)||void 0===e||e.destroy(),this.processor=void 0}pauseUpstream(){return kr(this,void 0,void 0,(function*(){var t;const n=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(e.TrackEvent.UpstreamPaused,this);const n=Us();if("Safari"===(null==n?void 0:n.name)&&yo(n.version,"12.0")<0)throw new $s("pauseUpstream is not supported on Safari < 12.");"closed"!==(null===(t=this.sender.transport)||void 0===t?void 0:t.state)&&(yield this.sender.replaceTrack(null))}finally{n()}}))}resumeUpstream(){return kr(this,void 0,void 0,(function*(){var t;const n=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(e.TrackEvent.UpstreamResumed,this),"closed"!==(null===(t=this.sender.transport)||void 0===t?void 0:t.state)&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{n()}}))}getRTCStatsReport(){return kr(this,void 0,void 0,(function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return;return yield this.sender.getStats()}))}setProcessor(t){return kr(this,arguments,void 0,(function(t){var n=this;let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function*(){var r;const s=yield n.trackChangeLock.lock();try{n.log.debug("setting up processor",n.logContext);const s=document.createElement(n.kind),a={kind:n.kind,track:n._mediaStreamTrack,element:s,audioContext:n.audioContext,localTrack:n};if(yield t.init(a),n.log.debug("processor initialized",n.logContext),n.processor&&(yield n.internalStopProcessor()),"unknown"===n.kind)throw TypeError("cannot set processor on track of unknown kind");if(Wa(n._mediaStreamTrack,s),s.muted=!0,s.play().catch((e=>{e instanceof DOMException&&"AbortError"===e.name?(n.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},n.logContext),{error:e})),setTimeout((()=>{s.play().catch((e=>{n.log.error("failed to play processor element",Object.assign(Object.assign({},n.logContext),{err:e}))}))}),100)):n.log.error("failed to play processor element",Object.assign(Object.assign({},n.logContext),{error:e}))})),n.processor=t,n.processorElement=s,n.processor.processedTrack){for(const e of n.attachedElements)e!==n.processorElement&&i&&(Ha(n._mediaStreamTrack,e),Wa(n.processor.processedTrack,e));yield null===(r=n.sender)||void 0===r?void 0:r.replaceTrack(n.processor.processedTrack)}n.emit(e.TrackEvent.TrackProcessorUpdate,n.processor)}finally{s()}yield n.onSenderTrackSwapped()}()}))}getProcessor(){return this.processor}stopProcessor(){return kr(this,arguments,void 0,(function(){var e=this;let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return function*(){const n=yield e.trackChangeLock.lock();try{yield e.internalStopProcessor(t)}finally{n()}yield e.onSenderTrackSwapped()}()}))}internalStopProcessor(){return kr(this,arguments,void 0,(function(){var t=this;let n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return function*(){var i,r;t.processor&&(t.log.debug("stopping processor",t.logContext),null===(i=t.processor.processedTrack)||void 0===i||i.stop(),yield t.processor.destroy(),t.processor=void 0,n||(null===(r=t.processorElement)||void 0===r||r.remove(),t.processorElement=void 0),yield t._mediaStreamTrack.applyConstraints(t._constraints),yield t.setMediaStreamTrack(t._mediaStreamTrack,!0),t.emit(e.TrackEvent.TrackProcessorUpdate))}()}))}startPreConnectBuffer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;if(dl)if(this.localTrackRecorder)this.log.warn("preconnect buffer already started");else{{let e="audio/webm;codecs=opus";MediaRecorder.isTypeSupported(e)||(e="video/mp4"),this.localTrackRecorder=new ul(this,{mimeType:e})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout((()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()}),1e4)}else this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext)}stopPreConnectBuffer(){clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder&&(this.localTrackRecorder.stop(),this.localTrackRecorder=void 0)}getPreConnectBuffer(){var e;return null===(e=this.localTrackRecorder)||void 0===e?void 0:e.byteStream}getPreConnectBufferMimeType(){var e;return null===(e=this.localTrackRecorder)||void 0===e?void 0:e.mimeType}}class pl extends hl{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(t,i){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;super(t,Va.Kind.Audio,i,r,a),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>kr(this,void 0,void 0,(function*(){if(!this.sender)return void(this._currentBitrate=0);let e;try{e=yield this.getSenderStats()}catch(n){return void this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:n}))}e&&this.prevStats&&(this._currentBitrate=Sc(e,this.prevStats)),this.prevStats=e})),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(e.TrackEvent.AudioTrackFeatureUpdate,this,lt.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(e.TrackEvent.AudioTrackFeatureUpdate,this,lt.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=s,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return kr(this,void 0,void 0,(function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Va.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}}))}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return kr(this,void 0,void 0,(function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source!==Va.Source.Microphone||!this.stopOnMute&&"ended"!==this._mediaStreamTrack.readyState&&!this.pendingDeviceChange||this.isUserProvided||(this.log.debug("reacquiring mic track",this.logContext),yield this.restart(void 0,!0)),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{t()}}))}restartTrack(e){return kr(this,void 0,void 0,(function*(){let t;if(e){const n=_a({audio:e});"boolean"!=typeof n.audio&&(t=n.audio)}yield this.restart(t)}))}applyConstraints(e){return kr(this,void 0,void 0,(function*(){const t=yield this.trackChangeLock.lock();try{const t=yield this._mediaStreamTrack.applyConstraints(e);return this._constraints=Object.assign(Object.assign({},this._constraints),e),t}finally{t()}}))}restart(e,t){const n=Object.create(null,{restart:{get:()=>super.restart}});return kr(this,void 0,void 0,(function*(){const i=yield n.restart.call(this,e,t);return this.checkForSilence(),i}))}startMonitor(){ho()&&(this.monitorInterval||(this.monitorInterval=setInterval((()=>{this.monitorSender()}),Tc)))}setProcessor(t){return kr(this,void 0,void 0,(function*(){var n;const i=yield this.trackChangeLock.lock();try{if(!po()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.internalStopProcessor());const i={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext,localTrack:this};this.log.debug("setting up audio processor ".concat(t.name),this.logContext),yield t.init(i),this.processor=t,this.processor.processedTrack&&(yield null===(n=this.sender)||void 0===n?void 0:n.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(e.TrackEvent.TrackProcessorUpdate,this.processor)}finally{i()}}))}setAudioContext(e){this.audioContext=e}getSenderStats(){return kr(this,void 0,void 0,(function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return;const t=yield this.sender.getStats();let n;return t.forEach((e=>{if("outbound-rtp"===e.type){n={type:"audio",streamId:e.id,packetsSent:e.packetsSent,bytesSent:e.bytesSent,timestamp:e.timestamp};const i=t.get(e.remoteId);i&&(n.packetsLost=i.packetsLost,n.jitter=i.jitter,n.roundTripTime=i.roundTripTime)}})),n}))}checkForSilence(){return kr(this,void 0,void 0,(function*(){const t=yield Ma(this);return t&&(this.isMuted||this.log.debug("silence detected on local audio track",this.logContext),this.emit(e.TrackEvent.AudioSilenceDetected)),t}))}}const ml=Object.values(Ca),gl=Object.values(wa),vl=Object.values(Ra),fl=[Ca.h180,Ca.h360],kl=[wa.h180,wa.h360],yl=["q","h","f"];function bl(e,t,n,i){var r,s;let a=null==i?void 0:i.videoEncoding;e&&(a=null==i?void 0:i.screenShareEncoding);const o=null==i?void 0:i.simulcast,c=null==i?void 0:i.scalabilityMode,d=null==i?void 0:i.videoCodec,l=eo(d,i);if(!a&&!o&&!c||!t||!n)return[{}];a||(a=function(e,t,n,i){const r=function(e,t,n){if(e)return vl;const i=t>n?t/n:n/t;if(Math.abs(i-16/9)=a)break}if(i)switch(i){case"av1":case"h265":s=Object.assign({},s),s.maxBitrate=.7*s.maxBitrate;break;case"vp9":s=Object.assign({},s),s.maxBitrate=.85*s.maxBitrate}return s}(e,t,n,d),or.debug("using video encoding",a));const u=a.maxFramerate,h=new va(t,n,a.maxBitrate,a.maxFramerate,a.priority);if(c&&Za(d)&&!l){const e=new wl(c),t=[];if(e.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const n=Us();if(to()){const i="h"==e.suffix?2:3,r=function(e){return e||(e=Us()),"Safari"===(null==e?void 0:e.name)&&yo(e.version,"18.3")>0||"iOS"===(null==e?void 0:e.os)&&!!(null==e?void 0:e.osVersion)&&yo(e.osVersion,"18.3")>0}(n);for(let n=0;n(l&&e.forEach((e=>{e.scalabilityMode=c})),e);let m,g;if(m=e?null!==(r=Cl(null==i?void 0:i.screenShareSimulcastLayers))&&void 0!==r?r:Sl(e,h):null!==(s=Cl(null==i?void 0:i.videoSimulcastLayers))&&void 0!==s?s:Sl(e,h),m.length>0){const e=m[0];if(m.length>1)g=B(m,2)[1];const i=Math.max(t,n);if(i>=960&&g)return p(El(t,n,[e,g,h],u));if(i>=480)return p(El(t,n,[e,h],u))}return p(El(t,n,[h]))}function Tl(e,t,n){var i,r,s,a;if(!n.backupCodec||!0===n.backupCodec||n.backupCodec.codec===n.videoCodec)return;t!==n.backupCodec.codec&&or.warn("requested a different codec than specified as backup",{serverRequested:t,backup:n.backupCodec.codec}),n.videoCodec=t,n.videoEncoding=n.backupCodec.encoding;const o=e.mediaStreamTrack.getSettings(),c=null!==(i=o.width)&&void 0!==i?i:null===(r=e.dimensions)||void 0===r?void 0:r.width,d=null!==(s=o.height)&&void 0!==s?s:null===(a=e.dimensions)||void 0===a?void 0:a.height;e.source===Va.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1);return bl(e.source===Va.Source.ScreenShare,c,d,n)}function Sl(e,t){if(e)return[{scaleResolutionDownBy:2,fps:(n=t).encoding.maxFramerate}].map((e=>{var t,i;return new va(Math.floor(n.width/e.scaleResolutionDownBy),Math.floor(n.height/e.scaleResolutionDownBy),Math.max(15e4,Math.floor(n.encoding.maxBitrate/(Math.pow(e.scaleResolutionDownBy,2)*((null!==(t=n.encoding.maxFramerate)&&void 0!==t?t:30)/(null!==(i=e.fps)&&void 0!==i?i:30))))),e.fps,n.encoding.priority)}));var n;const i=t.width,r=t.height,s=i>r?i/r:r/i;return Math.abs(s-16/9){if(s>=yl.length)return;const a=Math.min(e,t),o={rid:yl[s],scaleResolutionDownBy:Math.max(1,a/Math.min(n.width,n.height)),maxBitrate:n.encoding.maxBitrate},c=i&&n.encoding.maxFramerate?Math.min(i,n.encoding.maxFramerate):n.encoding.maxFramerate;c&&(o.maxFramerate=c);const d=Us(),l="Firefox"===(null==d?void 0:d.name)&&"iOS"!==d.os||0===s;n.encoding.priority&&l&&(o.priority=n.encoding.priority,o.networkPriority=n.encoding.priority),r.push(o)})),po()&&"ios"===fo()){let e;r.forEach((t=>{e?t.maxFramerate&&t.maxFramerate>e&&(e=t.maxFramerate):e=t.maxFramerate}));let t=!0;r.forEach((n=>{var i;n.maxFramerate!=e&&(t&&(t=!1,or.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),or.info('Setting framerate of encoding "'.concat(null!==(i=n.rid)&&void 0!==i?i:"",'" to ').concat(e)),n.maxFramerate=e)}))}return r}function Cl(e){if(e)return e.slice().sort(((e,t)=>{const n=e.encoding,i=t.encoding;return n.maxBitrate>i.maxBitrate?1:n.maxBitratei.maxFramerate?1:-1:0}))}class wl{constructor(e){const t=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!t)throw new Error("invalid scalability mode");if(this.spatial=parseInt(t[1]),this.temporal=parseInt(t[2]),t.length>3)switch(t[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=t[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat(null!==(e=this.suffix)&&void 0!==e?e:"")}}class Rl extends hl{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(t,i){let s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3?arguments[3]:void 0;super(t,Va.Kind.Video,i,s,a),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>kr(this,void 0,void 0,(function*(){if(!this.sender)return void(this._currentBitrate=0);let t;try{t=yield this.getSenderStats()}catch(n){return void this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:n}))}const i=new Map(t.map((e=>[e.rid,e]))),r=t.some((e=>"cpu"===e.qualityLimitationReason));if(r!==this.isCpuConstrained&&(this.isCpuConstrained=r,this.isCpuConstrained&&this.emit(e.TrackEvent.CpuConstrained)),this.prevStats){let e=0;i.forEach(((t,n)=>{var i;const r=null===(i=this.prevStats)||void 0===i?void 0:i.get(n);e+=Sc(t,r)})),this._currentBitrate=e}this.prevStats=i})),this.senderLock=new r}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!ho())return;const n=null===(t=this.sender)||void 0===t?void 0:t.getParameters();n&&(this.encodings=n.encodings),this.monitorInterval||(this.monitorInterval=setInterval((()=>{this.monitorSender()}),Tc))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach((e=>{e.mediaStreamTrack.stop()})),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return kr(this,void 0,void 0,(function*(){var t,n,i,r,s;yield e.pauseUpstream.call(this);try{for(var a,o=!0,c=Sr(this.simulcastCodecs.values());!(t=(a=yield c.next()).done);o=!0){r=a.value,o=!1;const e=r;yield null===(s=e.sender)||void 0===s?void 0:s.replaceTrack(null)}}catch(d){n={error:d}}finally{try{o||t||!(i=c.return)||(yield i.call(c))}finally{if(n)throw n.error}}}))}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return kr(this,void 0,void 0,(function*(){var t,n,i,r,s;yield e.resumeUpstream.call(this);try{for(var a,o=!0,c=Sr(this.simulcastCodecs.values());!(t=(a=yield c.next()).done);o=!0){r=a.value,o=!1;const e=r;yield null===(s=e.sender)||void 0===s?void 0:s.replaceTrack(e.mediaStreamTrack)}}catch(d){n={error:d}}finally{try{o||t||!(i=c.return)||(yield i.call(c))}finally{if(n)throw n.error}}}))}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return kr(this,void 0,void 0,(function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source!==Va.Source.Camera||this.isUserProvided||(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}}))}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return kr(this,void 0,void 0,(function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source!==Va.Source.Camera||this.isUserProvided||(this.log.debug("reacquiring camera track",this.logContext),yield this.restart(void 0,!0)),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{t()}}))}setTrackMuted(e){super.setTrackMuted(e);for(const t of this.simulcastCodecs.values())t.mediaStreamTrack.enabled=!e}getSenderStats(){return kr(this,void 0,void 0,(function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return[];const t=[],n=yield this.sender.getStats();return n.forEach((e=>{var i;if("outbound-rtp"===e.type){const r={type:"video",streamId:e.id,frameHeight:e.frameHeight,frameWidth:e.frameWidth,framesPerSecond:e.framesPerSecond,framesSent:e.framesSent,firCount:e.firCount,pliCount:e.pliCount,nackCount:e.nackCount,packetsSent:e.packetsSent,bytesSent:e.bytesSent,qualityLimitationReason:e.qualityLimitationReason,qualityLimitationDurations:e.qualityLimitationDurations,qualityLimitationResolutionChanges:e.qualityLimitationResolutionChanges,rid:null!==(i=e.rid)&&void 0!==i?i:e.id,retransmittedPacketsSent:e.retransmittedPacketsSent,targetBitrate:e.targetBitrate,timestamp:e.timestamp},s=n.get(e.remoteId);s&&(r.jitter=s.jitter,r.packetsLost=s.packetsLost,r.roundTripTime=s.roundTripTime),t.push(r)}})),t.sort(((e,t)=>{var n,i;return(null!==(n=t.frameWidth)&&void 0!==n?n:0)-(null!==(i=e.frameWidth)&&void 0!==i?i:0)})),t}))}isSvcPublish(e){return Za(e)&&!eo(e,this.publishOptions)}setPublishingQuality(t){const n=[];for(let i=e.VideoQuality.LOW;i<=e.VideoQuality.HIGH;i+=1)n.push(new Pi({quality:i,enabled:i<=t}));this.log.debug("setting publishing quality. max quality ".concat(t),this.logContext),this.setPublishingLayers(this.isSvcPublish(this.codec),n)}restartTrack(e){return kr(this,void 0,void 0,(function*(){var t,n,i,r,s;let a;if(e){const t=_a({video:e});"boolean"!=typeof t.video&&(a=t.video)}yield this.restart(a),this.isCpuConstrained=!1;try{for(var o,c=!0,d=Sr(this.simulcastCodecs.values());!(t=(o=yield d.next()).done);c=!0){r=o.value,c=!1;const e=r;e.sender&&"closed"!==(null===(s=e.sender.transport)||void 0===s?void 0:s.state)&&(e.mediaStreamTrack=this.mediaStreamTrack.clone(),yield e.sender.replaceTrack(e.mediaStreamTrack))}}catch(l){n={error:l}}finally{try{c||t||!(i=d.return)||(yield i.call(d))}finally{if(n)throw n.error}}yield this.onSenderTrackSwapped()}))}onSenderTrackSwapped(){return kr(this,void 0,void 0,(function*(){yield this.refreshSenderEncodings()}))}refreshSenderEncodings(){return kr(this,void 0,void 0,(function*(){var e;if(!this.sender||!this.publishOptions||this.optimizeForPerformance)return;const t=yield this.senderLock.lock();try{let t;try{t=yield this.waitForDimensions()}catch(n){return void this.log.warn("could not determine new track dimensions, skipping encoding recompute",Object.assign(Object.assign({},this.logContext),{error:n}))}if(this.lastEncodedDimensions&&this.lastEncodedDimensions.width===t.width&&this.lastEncodedDimensions.height===t.height)return;const r=bl(this.source===Va.Source.ScreenShare,t.width,t.height,Object.assign({},this.publishOptions));yield this.applyEncodingsToSender(this.sender,r),this.encodings=r,this.lastEncodedDimensions=t;for(const n of this.simulcastCodecs){var i=B(n,2);const t=i[0],r=i[1];if(!r.sender||"closed"===(null===(e=r.sender.transport)||void 0===e?void 0:e.state))continue;if(!ba(t))continue;const s=Tl(this,t,Object.assign({},this.publishOptions));s&&(yield this.applyEncodingsToSender(r.sender,s),r.encodings=s)}}catch(n){this.log.warn("failed to apply recomputed encodings",Object.assign(Object.assign({},this.logContext),{error:n}))}finally{t()}}))}applyEncodingsToSender(e,t){return kr(this,void 0,void 0,(function*(){const n=e.getParameters();n.encodings&&n.encodings.length===t.length&&(n.encodings.forEach(((e,n)=>{if(!1===e.active)return;const i=t[n];void 0!==i.scaleResolutionDownBy&&(e.scaleResolutionDownBy=i.scaleResolutionDownBy),void 0!==i.maxBitrate&&(e.maxBitrate=i.maxBitrate),void 0!==i.maxFramerate&&(e.maxFramerate=i.maxFramerate),void 0!==i.priority&&(e.priority=i.priority,e.networkPriority=i.priority)})),this.log.debug("updating sender encodings after track restart",Object.assign(Object.assign({},this.logContext),{encodings:n.encodings})),yield e.setParameters(n))}))}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return kr(this,arguments,void 0,(function(e){var n=this;let i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function*(){var r,s,a,o,c,d;if(yield t.setProcessor.call(n,e,i),null===(c=n.processor)||void 0===c?void 0:c.processedTrack)try{for(var l,u=!0,h=Sr(n.simulcastCodecs.values());!(r=(l=yield h.next()).done);u=!0){o=l.value,u=!1;const e=o;yield null===(d=e.sender)||void 0===d?void 0:d.replaceTrack(n.processor.processedTrack)}}catch(p){s={error:p}}finally{try{u||r||!(a=h.return)||(yield a.call(h))}finally{if(s)throw s.error}}}()}))}setDegradationPreference(e){return kr(this,void 0,void 0,(function*(){this.degradationPreference=e,yield this.applyDegradationPreference(this.sender);for(const e of this.simulcastCodecs.values())yield this.applyDegradationPreference(e.sender)}))}applyDegradationPreference(e){return kr(this,void 0,void 0,(function*(){if(e)try{this.log.debug("setting degradationPreference to ".concat(this.degradationPreference),this.logContext);const t=e.getParameters();t.degradationPreference=this.degradationPreference,yield e.setParameters(t)}catch(n){this.log.warn("failed to set degradationPreference",Object.assign({error:n},this.logContext))}}))}addSimulcastTrack(e,t){if(this.simulcastCodecs.has(e))return void this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);const n={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:t};return this.simulcastCodecs.set(e,n),n}setSimulcastTrackSender(e,t){return kr(this,void 0,void 0,(function*(){const n=this.simulcastCodecs.get(e);n&&(n.sender=t,yield this.applyDegradationPreference(t),setTimeout((()=>{this.refreshSubscribedCodecs()}),5e3))}))}refreshSubscribedCodecs(){return kr(this,void 0,void 0,(function*(){if(this.subscribedCodecs)return this.setPublishingCodecs(this.subscribedCodecs).catch((e=>this.log.warn("failed to refresh codec for track",Object.assign(Object.assign({},this.logContext),{error:e}))))}))}setPublishingCodecs(e){return kr(this,void 0,void 0,(function*(){var t,n,i,r,s,a,o;if(this.log.debug("setting publishing codecs",Object.assign(Object.assign({},this.logContext),{codecs:e,currentCodec:this.codec})),!this.codec&&e.length>0)return yield this.setPublishingLayers(this.isSvcPublish(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const c=[];try{for(t=!0,n=Sr(e);!(r=(i=yield n.next()).done);t=!0){o=i.value,t=!1;const e=o;if(this.codec&&this.codec!==e.codec){const t=this.simulcastCodecs.get(e.codec);if(this.log.debug("try setPublishingCodec for ".concat(e.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:t})),t&&t.sender)t.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(e.codec),this.logContext),yield Pl(t.sender,t.encodings,e.qualities,this.senderLock,this.isSvcPublish(e.codec),this.log,this.logContext));else for(const n of e.qualities)if(n.enabled){c.push(e.codec);break}}else yield this.setPublishingLayers(this.isSvcPublish(e.codec),e.qualities)}}catch(d){s={error:d}}finally{try{t||r||!(a=n.return)||(yield a.call(n))}finally{if(s)throw s.error}}return c}))}setPublishingLayers(e,t){return kr(this,void 0,void 0,(function*(){this.optimizeForPerformance?this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:t})):(this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),this.sender&&this.encodings&&(yield Pl(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext)))}))}prioritizePerformance(){return kr(this,void 0,void 0,(function*(){if(!this.sender)throw new Error("sender not found");const e=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;const e=this.sender.getParameters();e.encodings=e.encodings.map(((e,t)=>{var n;return Object.assign(Object.assign({},e),{active:0===t,scaleResolutionDownBy:Math.max(1,Math.ceil((null!==(n=this.mediaStreamTrack.getSettings().height)&&void 0!==n?n:360)/360)),scalabilityMode:0===t&&Za(this.codec)?"L1T3":void 0,maxFramerate:0===t?15:0,maxBitrate:0===t?e.maxBitrate:0})})),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:e.encodings})),this.encodings=e.encodings,yield this.sender.setParameters(e)}catch(n){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:n})),this.optimizeForPerformance=!1}finally{e()}}))}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return kr(this,void 0,void 0,(function*(){yield e.handleAppVisibilityChanged.call(this),uo()&&this.isInBackground&&this.source===Va.Source.Camera&&(this._mediaStreamTrack.enabled=!1)}))}}function Pl(e,t,n,i,r,s,a){return kr(this,void 0,void 0,(function*(){const o=yield i.lock();s.debug("setPublishingLayersForSender",Object.assign(Object.assign({},a),{sender:e,qualities:n,senderEncodings:t}));try{const i=e.getParameters(),o=i.encodings;if(!o)return;if(o.length!==t.length)return void s.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},a),{encodings:o,senderEncodings:t}));let c=!1;if(!1&&o[0].scalabilityMode);else{if(r){n.some((e=>e.enabled))&&n.forEach((e=>e.enabled=!0))}o.forEach(((e,i)=>{var r;let o=null!==(r=e.rid)&&void 0!==r?r:"";""===o&&(o="q");const d=Il(o),l=n.find((e=>e.quality===d));l&&e.active!==l.enabled&&(c=!0,e.active=l.enabled,s.debug("setting layer ".concat(l.quality," to ").concat(e.active?"enabled":"disabled"),a),ro()&&(l.enabled?(e.scaleResolutionDownBy=t[i].scaleResolutionDownBy,e.maxBitrate=t[i].maxBitrate,e.maxFrameRate=t[i].maxFrameRate):(e.scaleResolutionDownBy=4,e.maxBitrate=10,e.maxFrameRate=2)))}))}c&&(i.encodings=o,s.debug("setting encodings",Object.assign(Object.assign({},a),{encodings:i.encodings})),yield e.setParameters(i))}finally{o()}}))}function Il(t){switch(t){case"f":default:return e.VideoQuality.HIGH;case"h":return e.VideoQuality.MEDIUM;case"q":return e.VideoQuality.LOW}}function _l(t,n,i,r){if(!i)return[new Dt({quality:e.VideoQuality.HIGH,width:t,height:n,bitrate:0,ssrc:0})];if(r){const r=i[0].scalabilityMode,s=new wl(r),a=[],o="h"==s.suffix?1.5:2,c="h"==s.suffix?2:3;for(let d=0;d{var i,r,s;const a=null!==(i=e.scaleResolutionDownBy)&&void 0!==i?i:1;let o=Il(null!==(r=e.rid)&&void 0!==r?r:"");return new Dt({quality:o,width:Math.ceil(t/a),height:Math.ceil(n/a),bitrate:null!==(s=e.maxBitrate)&&void 0!==s?s:0,ssrc:0})}))}const Ml="leave-reconnect";var Dl;!function(e){e[e.New=0]="New",e[e.Connected=1]="Connected",e[e.Disconnected=2]="Disconnected",e[e.Reconnecting=3]="Reconnecting",e[e.Closed=4]="Closed"}(Dl||(Dl={}));class Ol extends wr.EventEmitter{get isClosed(){return this._isClosed}get isNewlyCreated(){return this._isNewlyCreated}get pendingReconnect(){return!!this.reconnectTimeout}get serverVersion(){var e,t,n;return(null===(t=null===(e=this.latestJoinResponse)||void 0===e?void 0:e.serverInfo)||void 0===t?void 0:t.version)||(null===(n=this.latestJoinResponse)||void 0===n?void 0:n.serverVersion)||void 0}get reliableChannel(){return this.dataChannels.reliable}get lossyChannel(){return this.dataChannels.lossy}get dataTrackChannel(){return this.dataChannels.dataTrack}constructor(t){var i;super(),this.options=t,this.rtcConfig={},this.peerConnectionTimeout=Qd.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=Dl.New,this._isClosed=!0,this._isNewlyCreated=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.shouldFailOnV1Path=!1,this.log=or,this.reliableReceivedState=new kd(3e4),this.midToTrackId={},this.isWaitingForNetworkReconnect=!1,this.pendingNegotiationAborts=new Set,this.handleDataChannel=e=>kr(this,[e],void 0,(function(e){var t=this;let n=e.channel;return function*(){n&&t.dataChannels.adoptSubscriberChannel(n)&&t.log.debug("on data channel ".concat(n.id,", ").concat(n.label))}()})),this.handleDataMessage=t=>kr(this,void 0,void 0,(function*(){var n,i,r,s;const a=yield this.dataProcessLock.lock();try{const a=yield this.decodeDataMessage(t);if(!a)return;const c=At.fromBinary(a);if(c.sequence>0&&""!==c.participantSid){const e=this.reliableReceivedState.get(c.participantSid);if(e&&c.sequence<=e)return;this.reliableReceivedState.set(c.participantSid,c.sequence)}if("speaker"===(null===(n=c.value)||void 0===n?void 0:n.case))this.emit(e.EngineEvent.ActiveSpeakersUpdate,c.value.value.speakers);else if("encryptedPacket"===(null===(i=c.value)||void 0===i?void 0:i.case)){if(!this.e2eeManager)return void this.log.error("Received encrypted packet but E2EE not set up");let t;try{t=yield this.e2eeManager.handleEncryptedData(c.value.value.encryptedValue,c.value.value.iv,c.participantIdentity,c.value.value.keyIndex)}catch(o){return void this.log.debug("failed to decrypt data packet",{error:o,participantIdentity:c.participantIdentity})}const n=xt.fromBinary(t.payload),i=new At({value:n.value,participantIdentity:c.participantIdentity,participantSid:c.participantSid});"user"===(null===(r=i.value)||void 0===r?void 0:r.case)&&Al(i,i.value.value),this.emit(e.EngineEvent.DataPacketReceived,i,c.value.value.encryptionType)}else"user"===(null===(s=c.value)||void 0===s?void 0:s.case)&&Al(c,c.value.value),this.emit(e.EngineEvent.DataPacketReceived,c,yt.NONE)}finally{a()}})),this.handleDataTrackMessage=e=>kr(this,void 0,void 0,(function*(){const t=yield this.decodeDataMessage(e);t&&this.emit("dataTrackPacketReceived",t)})),this.handleDataError=e=>{if(this._isClosed)return;const t=0===e.currentTarget.maxRetransmits?"lossy":"reliable";if("undefined"!=typeof RTCErrorEvent&&e instanceof RTCErrorEvent&&e.error){const n=e.error;this.log.error("DataChannel error on ".concat(t,": ").concat(n.message),{error:n,errorDetail:n.errorDetail,sctpCauseCode:n.sctpCauseCode})}else this.log.error("Unknown DataChannel error on ".concat(t),{event:e})},this.handleDataChannelClose=e=>()=>{var t;this._isClosed||"connected"!==(null===(t=this.pcManager)||void 0===t?void 0:t.publisher.getConnectionState())||this.log.error("publisher data channel '".concat(Xd[e],"' closed unexpectedly"),this.logContext)},this.handleDisconnect=(t,n)=>{if(this._isClosed)return;this.log.warn("".concat(t," disconnected")),0===this.reconnectAttempts&&(this.reconnectStart=Date.now());const i=t=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(t,"ms. giving up")),this.emit(e.EngineEvent.Disconnected),this.close("gave up reconnecting after ".concat(this.reconnectAttempts," attempts, ").concat(t,"ms"))},r=Date.now()-this.reconnectStart;let s=this.getNextRetryDelay({elapsedMs:r,retryCount:this.reconnectAttempts});null!==s?(t===Ml&&(s=0),this.log.debug("reconnecting in ".concat(s,"ms")),this.clearReconnectTimeout(),this.token&&this.emit(e.EngineEvent.TokenRefreshed,this.token),this.reconnectTimeout=da.setTimeout((()=>this.attemptReconnect(n).finally((()=>this.reconnectTimeout=void 0))),s)):i(r)},this.waitForRestarted=()=>new Promise(((t,n)=>{this.pcState===Dl.Connected&&t();const i=()=>{this.off(e.EngineEvent.Disconnected,r),t()},r=()=>{this.off(e.EngineEvent.Restarted,i),n()};this.once(e.EngineEvent.Restarted,i),this.once(e.EngineEvent.Disconnected,r)})),this.onRtpMapAvailable=t=>{const n=new Map;t.forEach((e=>{const t=e.codec.toLowerCase();Do(t)&&n.set(e.payload,t)})),this.emit(e.EngineEvent.RTPVideoMapUpdate,n)},this.handleBrowserOnLine=()=>kr(this,void 0,void 0,(function*(){if(!this.url)return;(yield fetch(Ao(this.url),{method:"HEAD"}).then((e=>e.ok)).catch((()=>!1)))&&(this.log.info("detected network reconnected"),(this.client.currentState===md.RECONNECTING||this.isWaitingForNetworkReconnect&&this.client.currentState===md.CONNECTED)&&(this.clearReconnectTimeout(),this.attemptReconnect(ct.RR_SIGNAL_DISCONNECTED),this.isWaitingForNetworkReconnect=!1))})),this.handleBrowserOffline=()=>kr(this,void 0,void 0,(function*(){if(this.url)try{yield Promise.race([fetch(Ao(this.url),{method:"HEAD"}),Ga(4e3).then((()=>Promise.reject()))])}catch(n){!1===window.navigator.onLine&&(this.log.info("detected network interruption"),this.isWaitingForNetworkReconnect=!0)}})),this.log=dr(null!==(i=t.loggerName)&&void 0!==i?i:e.LoggerNames.Engine,(()=>this.logContext)),this.loggerOptions={loggerName:t.loggerName,loggerContextCb:()=>this.logContext},this.client=new gd(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.closingLock=new r,this.dataProcessLock=new r,this.dataChannels=new cl({isEngineClosed:()=>this.isClosed,isReconnecting:()=>this.attemptingReconnect,onDataMessage:e=>this.handleDataMessage(e),onDataTrackMessage:e=>this.handleDataTrackMessage(e),onDataError:e=>this.handleDataError(e),onChannelClose:e=>this.handleDataChannelClose(e)(),onBufferStatusChanged:(t,n)=>this.emit(e.EngineEvent.DCBufferStatusChanged,n,t)}),this.client.onParticipantUpdate=t=>this.emit(e.EngineEvent.ParticipantUpdate,t),this.client.onConnectionQuality=t=>{this.handleLocalConnectionQuality(t),this.emit(e.EngineEvent.ConnectionQualityUpdate,t)},this.client.onRoomUpdate=t=>this.emit(e.EngineEvent.RoomUpdate,t),this.client.onSubscriptionError=t=>this.emit(e.EngineEvent.SubscriptionError,t),this.client.onSubscriptionPermissionUpdate=t=>this.emit(e.EngineEvent.SubscriptionPermissionUpdate,t),this.client.onSpeakersChanged=t=>this.emit(e.EngineEvent.SpeakersChanged,t),this.client.onStreamStateUpdate=t=>this.emit(e.EngineEvent.StreamStateChanged,t),this.client.onRequestResponse=t=>this.emit(e.EngineEvent.SignalRequestResponse,t),this.client.onParticipantUpdate=t=>this.emit(e.EngineEvent.ParticipantUpdate,t),this.client.onJoined=t=>this.emit(e.EngineEvent.Joined,t);const s=()=>{for(const e of Array.from(this.pendingNegotiationAborts))e()};this.on(e.EngineEvent.Closing,s),this.on(e.EngineEvent.Restarting,s)}get logContext(){var e,t,n,i,r,s;return{room:null===(t=null===(e=this.latestJoinResponse)||void 0===e?void 0:e.room)||void 0===t?void 0:t.name,roomID:null===(i=null===(n=this.latestJoinResponse)||void 0===n?void 0:n.room)||void 0===i?void 0:i.sid,participant:null===(s=null===(r=this.latestJoinResponse)||void 0===r?void 0:r.participant)||void 0===s?void 0:s.identity,participantID:this.participantSid}}join(t,i,r,s){return kr(this,arguments,void 0,(function(t,i,r,s){var a=this;let o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return function*(){var c,d,l;a._isNewlyCreated=!1,a.url=t,a.token=i,a.signalOpts=r,a.maxJoinAttempts=r.maxRetries;try{a.joinAttempts+=1,a.setupSignalClientCallbacks();const n=!o&&Go()&&!ro();let u;if(n){a.pcManager||(yield a.configure(),a.applyInitialPublisherLayout());const e=yield null===(c=a.pcManager)||void 0===c?void 0:c.publisher.createInitialOffer();e&&(u=fd(e.offer,e.offerId))}if(null==s?void 0:s.aborted)throw Xs.cancelled("Connection aborted");if(!o&&a.shouldFailOnV1Path)throw a.shouldFailOnV1Path=!1,Xs.serviceNotFound("Simulated v1 path failure","v0-rtc");const h=yield a.client.join(t,i,r,s,o,u);a._isClosed=!1,a.latestJoinResponse=h,a.participantSid=null===(d=h.participant)||void 0===d?void 0:d.sid,a.subscriberPrimary=h.subscriberPrimary,n?null===(l=a.pcManager)||void 0===l||l.updateConfiguration(a.makeRTCConfiguration(h)):(a.pcManager||(yield a.configure(h,!o),o||a.applyInitialPublisherLayout()),a.subscriberPrimary&&!h.fastPublish||a.negotiate().catch((e=>{a.log.error(e)}))),a.registerOnLineListener(),a.clientConfiguration=h.clientConfiguration,a.emit(e.EngineEvent.SignalConnected,h);let p=h.serverInfo;return p||(p={version:h.serverVersion,region:h.serverRegion}),a.log.info("connected to Livekit Server ".concat(Object.entries(p).map((e=>{let t=B(e,2),n=t[0],i=t[1];return"".concat(n,": ").concat(i)})).join(", "))),{joinResponse:h,serverInfo:p}}catch(n){if(n instanceof Xs)if(n.reason===e.ConnectionErrorReason.ServerUnreachable){if(a.log.warn("Couldn't connect to server, attempt ".concat(a.joinAttempts," of ").concat(a.maxJoinAttempts)),a.joinAttempts{const i=da.setTimeout((()=>{delete this.pendingTrackResolvers[e.cid],n(Xs.timeout("publication of local track timed out, no response from server"))}),1e4);this.pendingTrackResolvers[e.cid]={resolve:e=>{da.clearTimeout(i),t(e)},reject:()=>{da.clearTimeout(i),n(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)}))}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const t=this.pendingTrackResolvers[e.track.id].reject;t&&t(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(n){this.log.warn("failed to remove track",{error:n})}return!1}updateMuteStatus(e,t){this.client.sendMuteTrack(e,t)}get dataSubscriberReadyState(){var e;return null===(e=this.dataChannelForKind(Xd.RELIABLE,!0))||void 0===e?void 0:e.readyState}getConnectedServerAddress(){return kr(this,void 0,void 0,(function*(){var e;return null===(e=this.pcManager)||void 0===e?void 0:e.getConnectedAddress()}))}setRegionStrategy(e){this.regionStrategy=e}configure(t,n){return kr(this,void 0,void 0,(function*(){var i;if(!this.pcManager||this.pcManager.currentState===Yd.NEW){if(t){this.participantSid=null===(i=t.participant)||void 0===i?void 0:i.sid;const e=this.makeRTCConfiguration(t);this.pcManager=new Zd(n?"publisher-only":t.subscriberPrimary?"subscriber-primary":"publisher-primary",this.loggerOptions,e)}else{const e=this.makeRTCConfiguration();this.pcManager=new Zd("publisher-only",this.loggerOptions,e)}this.emit(e.EngineEvent.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(e,t)=>{this.client.sendIceCandidate(e,t)},this.pcManager.onPublisherOffer=(e,t)=>{this.client.sendOffer(e,t)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(t,n,i)=>kr(this,void 0,void 0,(function*(){if(this.log.debug("primary PC state changed ".concat(t)),t===Yd.CONNECTING?this.transportConnectingSince=Date.now():this.transportConnectingSince=void 0,["closed","disconnected","failed"].includes(n)&&(this.publisherConnectionPromise=void 0),t===Yd.CONNECTED){const t=this.pcState===Dl.New;this.pcState=Dl.Connected,t&&this.emit(e.EngineEvent.Connected,this.latestJoinResponse)}else t===Yd.FAILED&&(this.pcState!==Dl.Connected&&this.pcState!==Dl.Reconnecting||(this.pcState=Dl.Disconnected,this.handleDisconnect("peerconnection failed","failed"===i?ct.RR_SUBSCRIBER_FAILED:ct.RR_PUBLISHER_FAILED)));const r=this.client.isDisconnected||this.client.currentState===md.RECONNECTING,s=[Yd.FAILED,Yd.CLOSING,Yd.CLOSED].includes(t);r&&s&&!this._isClosed&&this.emit(e.EngineEvent.Offline)})),this.pcManager.onTrack=t=>{0!==t.streams.length&&this.emit(e.EngineEvent.MediaTrackAdded,t.track,t.streams[0],t.receiver)}}}))}setupSignalClientCallbacks(){this.client.onAnswer=(t,n,i)=>kr(this,void 0,void 0,(function*(){this.pcManager&&(this.log.debug("received server answer",{RTCSdpType:t.type,sdp:t.sdp,midToTrackId:i}),"publisher-only"===this.pcManager.mode&&(this.midToTrackId=i),yield this.pcManager.setPublisherAnswer(t,n),this.emit(e.EngineEvent.RequestSubscribedCodecRefresh))})),this.client.onTrickle=(e,t)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",{candidate:e,target:t}),this.pcManager.addIceCandidate(e,t))},this.client.onOffer=(e,t,n)=>kr(this,void 0,void 0,(function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;this.midToTrackId=n;const i=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);i&&this.client.sendAnswer(i,t)})),this.client.onLocalTrackPublished=e=>{var t;if(this.log.debug("received trackPublishedResponse",{cid:e.cid,track:null===(t=e.track)||void 0===t?void 0:t.sid}),!this.pendingTrackResolvers[e.cid])return void this.log.error("missing track resolver for ".concat(e.cid),{cid:e.cid});const n=this.pendingTrackResolvers[e.cid].resolve;delete this.pendingTrackResolvers[e.cid],n(e.track)},this.client.onLocalTrackUnpublished=t=>{this.emit(e.EngineEvent.LocalTrackUnpublished,t)},this.client.onLocalTrackSubscribed=t=>{this.emit(e.EngineEvent.LocalTrackSubscribed,t)},this.client.onTokenRefresh=t=>{this.token=t,this.emit(e.EngineEvent.TokenRefreshed,t)},this.client.onRemoteMuteChanged=(t,n)=>{this.emit(e.EngineEvent.RemoteMute,t,n)},this.client.onSubscribedQualityUpdate=t=>{this.emit(e.EngineEvent.SubscribedQualityUpdate,t)},this.client.onRoomMoved=t=>{var n;this.participantSid=null===(n=t.participant)||void 0===n?void 0:n.sid,this.latestJoinResponse&&(this.latestJoinResponse.room=t.room),this.emit(e.EngineEvent.RoomMoved,t)},this.client.onMediaSectionsRequirement=e=>{this.addMediaSections(e.numAudios,e.numVideos),this.negotiate().catch((e=>{this.log.error(e)}))},this.client.onPublishDataTrackResponse=t=>{this.emit(e.EngineEvent.PublishDataTrackResponse,t)},this.client.onUnPublishDataTrackResponse=t=>{this.emit(e.EngineEvent.UnPublishDataTrackResponse,t)},this.client.onDataTrackSubscriberHandles=t=>{this.emit(e.EngineEvent.DataTrackSubscriberHandles,t)},this.client.onClose=()=>{this.handleDisconnect("signal",ct.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=t=>{var n;switch(this.log.info("client leave request received (action=".concat(null==t?void 0:t.action,")"),{reason:null==t?void 0:t.reason}),t.regions&&(this.log.debug("updating regions"),this.emit(e.EngineEvent.ServerRegionsReported,t.regions)),t.action){case fi.DISCONNECT:this.emit(e.EngineEvent.Disconnected,null==t?void 0:t.reason),this.close("server leave: ".concat(null!==(n=ot[t.reason])&&void 0!==n?n:t.reason));break;case fi.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ml);break;case fi.RESUME:this.handleDisconnect(Ml)}}}makeRTCConfiguration(e){var t;const n=Object.assign({},this.rtcConfig);if(((null===(t=this.signalOpts)||void 0===t?void 0:t.e2eeEnabled)||this.frameMetadataWorker&&!fc())&&dc()&&(this.log.debug("E2EE - setting up transports with insertable streams"),n.encodedInsertableStreams=!0),n.sdpSemantics="unified-plan",n.continualGatheringPolicy="gather_continually",!e)return n;if(e.iceServers&&!n.iceServers){const t=[];e.iceServers.forEach((e=>{const n={urls:e.urls};e.username&&(n.username=e.username),e.credential&&(n.credential=e.credential),t.push(n)})),n.iceServers=t}return e.clientConfiguration&&e.clientConfiguration.forceRelay===at.ENABLED&&(n.iceTransportPolicy="relay"),n}applyInitialPublisherLayout(){this.createDataChannels(),po()||this.addMediaSections(3,3)}addMediaSections(e,t){var n,i,r;const s={direction:"recvonly"};for(let o=0;o1&&void 0!==arguments[1]?arguments[1]:{};var n,i,r;const s=this.frameMetadataWorker;if(!s||(null===(n=this.signalOpts)||void 0===n?void 0:n.e2eeEnabled))return;const a=null!==(i=t.frameMetadata)&&void 0!==i?i:t.packetTrailer,o=yc(a);if(fc())return void(o&&(e.transform=new RTCRtpScriptTransform(s,{kind:"encode",packetTrailer:a})));if(!kc(null!==(r=this.options.frameMetadata)&&void 0!==r?r:this.options.packetTrailer)||!("createEncodedStreams"in e))return void(o&&this.log.warn("frame metadata transform not supported; skipping write",this.logContext));const c=e.createEncodedStreams(),d=c.readable,l=c.writable;o?s.postMessage({kind:"encode",data:{readableStream:d,writableStream:l,packetTrailer:a}},[d,l]):d.pipeTo(l)}createTransceiverRTCRtpSender(e,t,n){return kr(this,void 0,void 0,(function*(){if(!this.pcManager)throw new na("publisher is closed");const i=[];e.mediaStream&&i.push(e.mediaStream),Bo(e)&&(e.codec=t.videoCodec);const r={direction:"sendonly",streams:i};n&&(r.sendEncodings=n);return(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r)).sender}))}createSimulcastTransceiverSender(e,t,n,i){return kr(this,void 0,void 0,(function*(){if(!this.pcManager)throw new na("publisher is closed");const r={direction:"sendonly"};i&&(r.sendEncodings=i);const s=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,r);if(n.videoCodec)return yield e.setSimulcastTrackSender(n.videoCodec,s.sender),s.sender}))}createRTCRtpSender(e){return kr(this,void 0,void 0,(function*(){if(!this.pcManager)throw new na("publisher is closed");return this.pcManager.addPublisherTrack(e)}))}handleLocalConnectionQuality(e){if(!this.participantSid)return;const t=e.updates.find((e=>e.participantSid===this.participantSid));t&&(t.quality===st.LOST?this.scheduleLostQualityReconnect():this.clearLostQualityTimeout())}scheduleLostQualityReconnect(){this.lostQualityTimeout||(this.lostQualityTimeout=da.setTimeout((()=>{this.lostQualityTimeout=void 0,this._isClosed||this.pcState!==Dl.Connected||this.attemptingReconnect||this.hasActivePublisherSenders()&&(this.log.warn("local connection quality lost while publishing, triggering full reconnect",this.logContext),this.fullReconnectOnNext=!0,this.handleDisconnect("connection quality lost",ct.RR_PUBLISHER_FAILED))}),1e4))}clearLostQualityTimeout(){this.lostQualityTimeout&&(da.clearTimeout(this.lostQualityTimeout),this.lostQualityTimeout=void 0)}hasActivePublisherSenders(){var e,t;return null!==(t=null===(e=this.pcManager)||void 0===e?void 0:e.publisher.getSenders().some((e=>!!e.track&&"live"===e.track.readyState)))&&void 0!==t&&t}reconnect(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ct.RR_UNKNOWN;this.fullReconnectOnNext=!0,this.handleDisconnect("reconcile",e)}attemptReconnect(t){return kr(this,void 0,void 0,(function*(){var i,r,s;if(this._isClosed)return;if(this.attemptingReconnect)return void this.log.warn("already attempting reconnect, returning early");this.clearLostQualityTimeout(),(null===(i=this.clientConfiguration)||void 0===i?void 0:i.resumeConnection)!==at.DISABLED&&(null!==(s=null===(r=this.pcManager)||void 0===r?void 0:r.currentState)&&void 0!==s?s:Yd.NEW)!==Yd.NEW||(this.fullReconnectOnNext=!0);const a=this.fullReconnectOnNext;this.fullReconnectOnNext=!1;let o=!1;try{this.attemptingReconnect=!0,a?yield this.restartConnection():yield this.resumeConnection(t),this.clearPendingReconnect(),o=!0}catch(n){this.reconnectAttempts+=1;let i=!0;n instanceof na?(this.log.debug("received unrecoverable error",{error:n}),i=!1):!a&&n instanceof ca||(this.fullReconnectOnNext=!0),i?this.handleDisconnect("reconnect",ct.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up")),this.emit(e.EngineEvent.Disconnected),yield this.close("gave up reconnecting after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms")))}finally{this.attemptingReconnect=!1,o&&this.fullReconnectOnNext&&!this._isClosed&&(this.log.debug("full reconnect requested during in-progress attempt, dispatching"),this.handleDisconnect("reconnect"))}}))}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(n){this.log.warn("encountered error in reconnect policy",{error:n})}return null}restartConnection(t){return kr(this,void 0,void 0,(function*(){var i,r,s;try{if(!this.url||!this.token)throw new na("could not reconnect, url or token not saved");let r;this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts)),this.emit(e.EngineEvent.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"),new ca;r=(yield this.join(null!=t?t:this.url,this.token,this.signalOpts,void 0,!this.options.singlePeerConnection)).joinResponse}catch(n){if(n instanceof Xs&&n.reason===e.ConnectionErrorReason.NotAllowed)throw new na("could not reconnect, token might be expired");throw new ca}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(e.EngineEvent.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==md.CONNECTED)throw new ca("Signal connection got severed during reconnect");null===(i=this.regionStrategy)||void 0===i||i.resetAttempts(),this.emit(e.EngineEvent.Restarted)}catch(a){const e=yield null===(r=this.regionStrategy)||void 0===r?void 0:r.getNextUrl();if(e)return void(yield this.restartConnection(e));throw null===(s=this.regionStrategy)||void 0===s||s.resetAttempts(),a}}))}resumeConnection(t){return kr(this,void 0,void 0,(function*(){if(!this.url||!this.token)throw new na("could not reconnect, url or token not saved");if(!this.pcManager)throw new na("publisher and subscriber connections unset");let n;this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts)),this.emit(e.EngineEvent.Resuming);try{this.setupSignalClientCallbacks(),n=yield this.client.reconnect(this.url,this.token,this.participantSid,t)}catch(r){let t="";if(r instanceof Error&&(t=r.message,this.log.error(r.message,{error:r})),r instanceof Xs&&r.reason===e.ConnectionErrorReason.NotAllowed)throw new na("could not reconnect, token might be expired");if(r instanceof Xs&&r.reason===e.ConnectionErrorReason.LeaveRequest)throw r;throw new ca(t)}if(this.emit(e.EngineEvent.SignalResumed),n){const e=this.makeRTCConfiguration(n);this.pcManager.updateConfiguration(e),this.latestJoinResponse&&(this.latestJoinResponse.serverInfo=n.serverInfo)}else this.log.warn("Did not receive reconnect response");if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==md.CONNECTED)throw new ca("Signal connection got severed during reconnect");this.client.setReconnected();const i=this.dataChannelForKind(Xd.RELIABLE);"open"===(null==i?void 0:i.readyState)&&null===i.id&&this.createDataChannels(),(null==n?void 0:n.lastMessageSeq)&&this.resendReliableMessagesForResume(n.lastMessageSeq).catch((e=>{this.log.warn("failed to resend reliable messages after resume",Object.assign(Object.assign({},this.logContext),{error:e}))})),this.emit(e.EngineEvent.Resumed)}))}waitForPCInitialConnection(e,t){return kr(this,void 0,void 0,(function*(){if(!this.pcManager)throw new na("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)}))}waitForPCReconnected(){return kr(this,void 0,void 0,(function*(){this.pcState=Dl.Reconnecting,this.log.debug("waiting for peer connection to reconnect");try{if(yield Ga(2e3),!this.pcManager)throw new na("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=Dl.Connected}catch(n){throw this.pcState=Dl.Disconnected,Xs.internal("could not establish PC connection, ".concat(n.message))}}))}publishRpcAck(e,t){return kr(this,void 0,void 0,(function*(){const n=new At({destinationIdentities:[e],kind:Lt.RELIABLE,value:{case:"rpcAck",value:new Kt({requestId:t})}});yield this.sendDataPacket(n,Xd.RELIABLE)}))}sendDataPacket(e,t){return kr(this,void 0,void 0,(function*(){var n,i;if(yield this.ensurePublisherConnected(t),this.e2eeManager&&this.e2eeManager.isDataChannelEncryptionEnabled){const t=pc(e);if(t){const n=yield this.e2eeManager.encryptData(t.toBinary());e.value={case:"encryptedPacket",value:new Nt({encryptedValue:n.payload,iv:n.iv,keyIndex:n.keyIndex})}}}t===Xd.RELIABLE&&(e.sequence=this.reliableChannel.nextSequence());const r=e.toBinary(),s=Math.min(null!==(i=null===(n=this.pcManager)||void 0===n?void 0:n.getMaxPublisherMessageSize())&&void 0!==i?i:64e3,64e3);if(void 0!==s&&0!==s&&r.byteLength>s)throw new ra("cannot publish data packet larger than ".concat(s," bytes (got ").concat(r.byteLength,")"));t===Xd.RELIABLE?yield this.reliableChannel.send(r,e.sequence):yield this.lossyChannel.send(r)}))}sendDataTrackFrame(e){return kr(this,void 0,void 0,(function*(){yield this.ensurePublisherConnected(Xd.DATA_TRACK_LOSSY),yield this.dataTrackChannel.send(e)}))}resendReliableMessagesForResume(e){return kr(this,void 0,void 0,(function*(){yield this.ensurePublisherConnected(Xd.RELIABLE),yield this.reliableChannel.replay(e)}))}flowControlFor(e){return this.dataChannels.channelFor(e)}waitForBufferHeadroom(e){return kr(this,void 0,void 0,(function*(){return this.flowControlFor(e).waitForHeadroomWithLock()}))}ensureDataTransportConnected(e){return kr(this,arguments,void 0,(function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.subscriberPrimary;return function*(){var i;if(!t.pcManager)throw new na("PC manager is closed");const r=n?t.pcManager.subscriber:t.pcManager.publisher,s=n?"Subscriber":"Publisher";if(!r)throw Xs.internal("".concat(s," connection not set"));let a=!1;n||t.dataChannelForKind(e,n)||(t.createDataChannels(),a=!0),a||n||t.pcManager.publisher.isICEConnected||"checking"===t.pcManager.publisher.getICEConnectionState()||(a=!0),a&&t.negotiate().catch((e=>{t.log.error(e)}));const o=t.dataChannelForKind(e,n);if("open"===(null==o?void 0:o.readyState))return;const c=(new Date).getTime()+t.peerConnectionTimeout;for(;(new Date).getTime()this.peerConnectionTimeout)||(this.log.warn("transport stuck in connecting state",this.logContext),!1)))}negotiate(){return kr(this,void 0,void 0,(function*(){return new Ls(((e,t)=>kr(this,void 0,void 0,(function*(){if(!this.pcManager)return void t(new ia("PC manager is closed"));this.pcManager.requirePublisher(),0!=this.pcManager.publisher.getTransceivers().length||this.dataChannels.hasPublisherChannels||this.createDataChannels();const i=new AbortController,r=()=>{i.abort(),this.log.debug("engine disconnected while negotiation was ongoing"),e()};this.isClosed&&t(new ia("cannot negotiate on closed engine")),this.pendingNegotiationAborts.add(r),this.pcManager.publisher.off(xd,this.onRtpMapAvailable),this.pcManager.publisher.once(xd,this.onRtpMapAvailable);try{yield this.pcManager.negotiate(i),e()}catch(n){if(i.signal.aborted)return void e();n instanceof ia&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",ct.RR_UNKNOWN),n instanceof Error?t(n):t(new Error(String(n)))}finally{this.pendingNegotiationAborts.delete(r)}}))))}))}dataChannelForKind(e,t){return this.dataChannels.getHandle(e,t)}sendSyncState(e,t,n){var i,r,s,a;if(!this.pcManager)return void this.log.warn("sync state cannot be sent without peer connection setup");const o=this.pcManager.publisher.getLocalDescription(),c=this.pcManager.publisher.getRemoteDescription(),d=null===(i=this.pcManager.subscriber)||void 0===i?void 0:i.getRemoteDescription(),l=null===(r=this.pcManager.subscriber)||void 0===r?void 0:r.getLocalDescription(),u=null===(a=null===(s=this.signalOpts)||void 0===s?void 0:s.autoSubscribe)||void 0===a||a,h=new Array,p=new Array;e.forEach((e=>{e.isDesired!==u&&h.push(e.trackSid),e.isEnabled||p.push(e.trackSid)})),this.client.sendSyncState(new Ni({answer:"publisher-only"===this.pcManager.mode?c?fd({sdp:c.sdp,type:c.type}):void 0:l?fd({sdp:l.sdp,type:l.type}):void 0,offer:"publisher-only"===this.pcManager.mode?o?fd({sdp:o.sdp,type:o.type}):void 0:d?fd({sdp:d.sdp,type:d.type}):void 0,subscription:new ai({trackSids:h,subscribe:!u,participantTracks:[]}),publishTracks:xa(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:p,datachannelReceiveStates:this.reliableReceivedState.map(((e,t)=>new xi({publisherSid:t,lastSeq:e}))),publishDataTracks:n.map((e=>new Gn({info:Kc.toProtobuf(e)})))}))}failNext(){this.shouldFailNext=!0}failNextV1Path(){this.shouldFailOnV1Path=!0}dataChannelsInfo(){const e=[],t=(t,n)=>{void 0!==(null==t?void 0:t.id)&&null!==t.id&&e.push(new Ui({label:t.label,id:t.id,target:n}))};return t(this.dataChannelForKind(Xd.LOSSY),Bn.PUBLISHER),t(this.dataChannelForKind(Xd.RELIABLE),Bn.PUBLISHER),t(this.dataChannelForKind(Xd.LOSSY,!0),Bn.SUBSCRIBER),t(this.dataChannelForKind(Xd.RELIABLE,!0),Bn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&da.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){ho()&&(window.addEventListener("online",this.handleBrowserOnLine),window.addEventListener("offline",this.handleBrowserOffline))}deregisterOnLineListener(){ho()&&(window.removeEventListener("online",this.handleBrowserOnLine),window.removeEventListener("offline",this.handleBrowserOffline))}getTrackIdForReceiver(e){var t;const n=null===(t=this.pcManager)||void 0===t?void 0:t.getMidForReceiver(e);if(n){const e=Object.entries(this.midToTrackId).find((e=>B(e,1)[0]===n));if(e)return e[1]}}}function Al(e,t){const n=e.participantIdentity?e.participantIdentity:t.participantIdentity;e.participantIdentity=n,t.participantIdentity=n;const i=0!==e.destinationIdentities.length?e.destinationIdentities:t.destinationIdentities;e.destinationIdentities=i,t.destinationIdentities=i}const Ll=dr(e.LoggerNames.Region),Nl=5e3;class xl{static fetchRegionSettings(e,t,i){return kr(this,void 0,void 0,(function*(){const r=yield xl.fetchLock.lock();try{const n=yield fetch("".concat(function(e){return"".concat(e.protocol.replace("ws","http"),"//").concat(e.host,"/settings")}(e),"/regions"),{headers:{authorization:"Bearer ".concat(t)},signal:i});if(n.ok){const e=function(e){var t;const n=e.get("Cache-Control");if(n){const e=null===(t=n.match(/(?:^|[,\s])max-age=(\d+)/))||void 0===t?void 0:t[1];if(e)return parseInt(e,10)}}(n.headers),t=e?1e3*e:Nl;return{regionSettings:yield n.json(),updatedAtInMs:Date.now(),maxAgeInMs:t}}throw 401===n.status?Xs.notAllowed("Could not fetch region settings: ".concat(n.statusText),n.status):Xs.internal("Could not fetch region settings: ".concat(n.statusText))}catch(n){throw n instanceof Xs?n:(null==i?void 0:i.aborted)?Xs.cancelled("Region fetching was aborted"):Xs.serverUnreachable("Could not fetch region settings, ".concat(n instanceof Error?"".concat(n.name,": ").concat(n.message):n))}finally{r()}}))}static scheduleRefetch(t,n,i){return kr(this,void 0,void 0,(function*(){const r=xl.settingsTimeouts.get(t.hostname);clearTimeout(r),xl.settingsTimeouts.set(t.hostname,setTimeout((()=>kr(this,void 0,void 0,(function*(){try{const e=yield xl.fetchRegionSettings(t,n);xl.updateCachedRegionSettings(t,n,e)}catch(r){if(r instanceof Xs&&r.reason===e.ConnectionErrorReason.NotAllowed)return void Ll.debug("token is not valid, cancelling auto region refresh");Ll.debug("auto refetching of region settings failed",{error:r}),xl.scheduleRefetch(t,n,i)}}))),i))}))}static updateCachedRegionSettings(e,t,n){xl.cache.set(e.hostname,n),xl.scheduleRefetch(e,t,n.maxAgeInMs)}static stopRefetch(e){const t=xl.settingsTimeouts.get(e);t&&(clearTimeout(t),xl.settingsTimeouts.delete(e))}static scheduleCleanup(e){let t=xl.connectionTrackers.get(e);t&&(t.cleanupTimeout&&clearTimeout(t.cleanupTimeout),t.cleanupTimeout=setTimeout((()=>{const t=xl.connectionTrackers.get(e);t&&0===t.connectionCount&&(Ll.debug("stopping region refetch after disconnect delay",{hostname:e}),xl.stopRefetch(e)),t&&(t.cleanupTimeout=void 0)}),3e4))}static cancelCleanup(e){const t=xl.connectionTrackers.get(e);(null==t?void 0:t.cleanupTimeout)&&(clearTimeout(t.cleanupTimeout),t.cleanupTimeout=void 0)}notifyConnected(){const e=this.serverUrl.hostname;let t=xl.connectionTrackers.get(e);t||(t={connectionCount:0},xl.connectionTrackers.set(e,t)),t.connectionCount++,xl.cancelCleanup(e)}notifyDisconnected(){const e=this.serverUrl.hostname,t=xl.connectionTrackers.get(e);t&&(t.connectionCount=Math.max(0,t.connectionCount-1),0===t.connectionCount&&xl.scheduleCleanup(e))}constructor(e,t){this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){var t;this.token=e;const n=this.getServerUrl(),i=xl.cache.get(n.hostname);xl.scheduleRefetch(this.serverUrl,this.token,null!==(t=null==i?void 0:i.maxAgeInMs)&&void 0!==t?t:Nl)}isCloud(){return mo(this.serverUrl)}getServerUrl(){return this.serverUrl}fetchRegionSettings(e){return kr(this,void 0,void 0,(function*(){return xl.fetchRegionSettings(this.serverUrl,this.token,e)}))}getNextBestRegionUrl(e){return kr(this,void 0,void 0,(function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");let t=xl.cache.get(this.serverUrl.hostname);(!t||Date.now()-t.updatedAtInMs>t.maxAgeInMs)&&(t=yield this.fetchRegionSettings(e),xl.updateCachedRegionSettings(this.serverUrl,this.token,t));const n=t.regionSettings.regions.filter((e=>!this.attemptedRegions.find((t=>t.url===e.url))));if(n.length>0){const e=n[0];return this.attemptedRegions.push(e),Ll.info("switching to region: ".concat(e.region),{region:e.region}),e.url}return null}))}resetAttempts(){this.attemptedRegions=[]}setServerReportedRegions(e){xl.updateCachedRegionSettings(this.serverUrl,this.token,e)}}function Ul(){return new CompressionStream("deflate-raw")}function Fl(){return new DecompressionStream("deflate-raw")}function Bl(e,t){return kr(this,void 0,void 0,(function*(){const n=new DecompressionStream("deflate-raw"),i=n.writable.getWriter();return i.write(e).catch((()=>{})),i.close().catch((()=>{})),jl(n.readable,t)}))}function jl(t,n){return kr(this,void 0,void 0,(function*(){const i=t.getReader(),r=[];let s=0;for(;;){const t=yield i.read(),a=t.done,o=t.value;if(a)break;if(r.push(o),s+=o.byteLength,"number"==typeof n&&s>n)throw yield i.cancel(),new oa("Decompressed payload exceeds the maximum payload size of ".concat(n," bytes"),e.DataStreamErrorReason.PayloadTooLarge)}const a=new Uint8Array(s);let o=0;for(const e of r)a.set(e,o),o+=e.byteLength;return a}))}xl.cache=new Map,xl.settingsTimeouts=new Map,xl.connectionTrackers=new Map,xl.fetchLock=new r;const ql=15e3;class Vl{get info(){return this._info}validateBytesReceived(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if("number"==typeof this.totalByteSize&&0!==this.totalByteSize){if(t&&this.bytesReceivedthis.totalByteSize)throw new oa("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),e.DataStreamErrorReason.LengthExceeded)}}constructor(e,t,n){this.reader=t,this.totalByteSize=n,this._info=e,this.bytesReceived=0}handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();const n=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;null===(t=this.onProgress)||void 0===t||t.call(this,n)}}class Wl extends Vl{[Symbol.asyncIterator](){const e=this.reader.getReader();e.closed.catch((()=>{}));const t=()=>{e.releaseLock(),this.signal=void 0};return{next:()=>kr(this,void 0,void 0,(function*(){var n;try{const t=this.signal;if(null==t?void 0:t.aborted)throw t.reason;const i=yield new Promise(((n,i)=>{if(t){const r=()=>i(t.reason);t.addEventListener("abort",r,{once:!0}),e.read().then(n,i).finally((()=>{t.removeEventListener("abort",r)}))}else e.read().then(n,i)}));return i.done?(this.validateBytesReceived(!0),"number"==typeof this.totalByteSize&&(null===(n=this.onProgress)||void 0===n||n.call(this,1)),{done:!0,value:void 0}):(this.handleChunkReceived(i.value),{done:!1,value:i.value.content})}catch(i){throw t(),i}})),return(){return kr(this,void 0,void 0,(function*(){return t(),{done:!0,value:void 0}}))}}}withAbortSignal(e){return this.signal=e,this}readAll(){return kr(this,arguments,void 0,(function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var n,i,r,s;let a=new Set;const o=t.signal?e.withAbortSignal(t.signal):e;try{for(var c,d=!0,l=Sr(o);!(n=(c=yield l.next()).done);d=!0){s=c.value,d=!1;const e=s;a.add(e)}}catch(u){i={error:u}}finally{try{d||n||!(r=l.return)||(yield r.call(l))}finally{if(i)throw i.error}}return Array.from(a)}()}))}}class Hl extends Vl{[Symbol.asyncIterator](){const t=this.reader.getReader();t.closed.catch((()=>{}));const n=new TextDecoder("utf-8"),i=this.signal,r=()=>{t.releaseLock(),this.signal=void 0};return{next:()=>kr(this,void 0,void 0,(function*(){var s;try{if(null==i?void 0:i.aborted)throw i.reason;const r=yield new Promise(((e,n)=>{if(i){const r=()=>n(i.reason);i.addEventListener("abort",r,{once:!0}),t.read().then(e,n).finally((()=>{i.removeEventListener("abort",r)}))}else t.read().then(e,n)}));if(r.done)return this.validateBytesReceived(!0),"number"==typeof this.totalByteSize&&(null===(s=this.onProgress)||void 0===s||s.call(this,1)),{done:!0,value:void 0};{let t;this.handleChunkReceived(r.value);try{t=n.decode(r.value.content)}catch(a){throw new oa("Cannot decode datastream chunk ".concat(r.value.chunkIndex," as text: ").concat(a),e.DataStreamErrorReason.DecodeFailed)}return{done:!1,value:t}}}catch(a){throw r(),a}})),return(){return kr(this,void 0,void 0,(function*(){return r(),{done:!0,value:void 0}}))}}}withAbortSignal(e){return this.signal=e,this}readAll(){return kr(this,arguments,void 0,(function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var n,i,r,s;let a="";const o=t.signal?e.withAbortSignal(t.signal):e;try{for(var c,d=!0,l=Sr(o);!(n=(c=yield l.next()).done);d=!0){s=c.value,d=!1;a+=s}}catch(u){i={error:u}}finally{try{d||n||!(r=l.return)||(yield r.call(l))}finally{if(i)throw i.error}}return a}()}))}}class Kl{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5e9;this.log=or,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map,this.isConnected=!1,this.bufferedPackets=[],this.maxPayloadByteLength=e}setConnected(e){this.isConnected=e,e&&this.flushBufferedPackets()}flushBufferedPackets(){const e=this.bufferedPackets;this.bufferedPackets=[];for(const t of e){const e=t.packet,n=t.encryptionType;this.handleDataStreamPacket(e,n)}}registerTextStreamHandler(t,n){if(this.textStreamHandlers.has(t))throw new oa('A text stream handler for topic "'.concat(t,'" has already been set.'),e.DataStreamErrorReason.HandlerAlreadyRegistered);this.textStreamHandlers.set(t,n)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(t,n){if(this.byteStreamHandlers.has(t))throw new oa('A byte stream handler for topic "'.concat(t,'" has already been set.'),e.DataStreamErrorReason.HandlerAlreadyRegistered);this.byteStreamHandlers.set(t,n)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear(),this.bufferedPackets=[]}validateParticipantHasNoActiveDataStreams(t){const n=Array.from(this.textStreamControllers.entries()).filter((e=>e[1].sendingParticipantIdentity===t)),i=Array.from(this.byteStreamControllers.entries()).filter((e=>e[1].sendingParticipantIdentity===t));if(n.length>0||i.length>0){const a=new oa("Participant ".concat(t," unexpectedly disconnected in the middle of sending data"),e.DataStreamErrorReason.AbnormalEnd);for(const e of i){var r=B(e,2);const t=r[0];r[1].controller.error(a),this.byteStreamControllers.delete(t)}for(const e of n){var s=B(e,2);const t=s[0];s[1].controller.error(a),this.textStreamControllers.delete(t)}}}handleDataStreamPacket(e,t){if(this.isConnected)switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity,t);case"streamChunk":return this.handleStreamChunk(e.value.value,t);case"streamTrailer":return this.handleStreamTrailer(e.value.value,t);default:throw new Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}else this.bufferedPackets.push({packet:e,encryptionType:t})}handleStreamHeader(t,n,i){var r;switch(t.contentHeader.case){case"byteHeader":{const s=this.byteStreamHandlers.get(t.topic);if(!s)return void this.log.debug("ignoring incoming byte stream due to no handler for topic",t.topic);let a;const o={id:t.streamId,name:null!==(r=t.contentHeader.value.name)&&void 0!==r?r:"unknown",mimeType:t.mimeType,size:t.totalLength?Number(t.totalLength):void 0,topic:t.topic,timestamp:No(t.timestamp),attributes:t.attributes,encryptionType:i};let c;switch(t.compression){case an.DEFLATE_RAW:if(!Qo())return void or.warn("Data stream ".concat(t.streamId," received with deflate-raw compression, but this browser does not support deflate-raw decompression. Dropping..."));c=!0;break;case an.NONE:c=!1;break;default:return void or.warn("Data stream ".concat(t.streamId," received with unknown compression type ").concat(t.compression,", dropping..."))}const d=t.inlineContent;if(void 0!==d)return void s(new Wl(o,zl(t.streamId,c?Bl(d,this.maxPayloadByteLength):d),No(t.totalLength)),{identity:n});const l=new ReadableStream({start:i=>{if(a=i,this.byteStreamControllers.has(t.streamId))throw new oa("A data stream read is already in progress for a stream with id ".concat(t.streamId,"."),e.DataStreamErrorReason.AlreadyOpened);this.byteStreamControllers.set(t.streamId,{info:o,controller:a,startTime:Date.now(),sendingParticipantIdentity:n})}});return void s(new Wl(o,c?function(e,t,n){return e.pipeThrough(Gl(t)).pipeThrough(Jl()).pipeThrough(Fl()).pipeThrough(Ql(t,n)).pipeThrough(function(e){let t=0;return new TransformStream({transform:(n,i)=>{n.byteLength>0&&(i.enqueue(new ln({streamId:e,chunkIndex:xo(t),content:n})),t+=1)}})}(t))}(l,t.streamId,this.maxPayloadByteLength):l.pipeThrough(Gl(t.streamId)),No(t.totalLength)),{identity:n})}case"textHeader":{const r=this.textStreamHandlers.get(t.topic);if(!r)return void this.log.debug("ignoring incoming text stream due to no handler for topic",t.topic);let s;const a={id:t.streamId,mimeType:t.mimeType,size:t.totalLength?Number(t.totalLength):void 0,topic:t.topic,timestamp:Number(t.timestamp),attributes:t.attributes,encryptionType:i,attachedStreamIds:t.contentHeader.value.attachedStreamIds};let o;switch(t.compression){case an.DEFLATE_RAW:if(!Qo())return void or.warn("Data stream ".concat(t.streamId," received with deflate-raw compression, but this browser does not support deflate-raw decompression. Dropping..."));o=!0;break;case an.NONE:o=!1;break;default:return void or.warn("Data stream ".concat(t.streamId," received with unknown compression type ").concat(t.compression,", dropping..."))}const c=t.inlineContent;if(void 0!==c){const e=o?Bl(c,this.maxPayloadByteLength):c;return void r(new Hl(a,zl(t.streamId,e),No(t.totalLength)),{identity:n})}const d=new ReadableStream({start:i=>{if(s=i,this.textStreamControllers.has(t.streamId))throw new oa("A data stream read is already in progress for a stream with id ".concat(t.streamId,"."),e.DataStreamErrorReason.AlreadyOpened);this.textStreamControllers.set(t.streamId,{info:a,controller:s,startTime:Date.now(),sendingParticipantIdentity:n})}});return void r(new Hl(a,o?function(t,n,i){return t.pipeThrough(Gl(n)).pipeThrough(Jl()).pipeThrough(Fl()).pipeThrough(Ql(n,i)).pipeThrough(function(t){const n=new TextDecoder("utf-8"),i=new TextEncoder;let r=0;const s=i=>{try{return i?n.decode(i,{stream:!0}):n.decode()}catch(r){throw new oa("Cannot decode compressed data stream ".concat(t," as text: ").concat(r),e.DataStreamErrorReason.DecodeFailed)}};return new TransformStream({transform:(e,n)=>{const a=s(e);a.length>0&&(n.enqueue(new ln({streamId:t,chunkIndex:xo(r),content:i.encode(a)})),r+=1)},flush:e=>{const n=s();n.length>0&&(e.enqueue(new ln({streamId:t,chunkIndex:xo(r),content:i.encode(n)})),r+=1)}})}(n))}(d,t.streamId,this.maxPayloadByteLength):d.pipeThrough(Gl(t.streamId)),No(t.totalLength)),{identity:n})}}}handleStreamChunk(t,n){const i=this.byteStreamControllers.get(t.streamId);i&&(i.info.encryptionType!==n?(i.controller.error(new oa("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(n,", got ").concat(i.info.encryptionType),e.DataStreamErrorReason.EncryptionTypeMismatch)),this.byteStreamControllers.delete(t.streamId)):i.controller.enqueue(t));const r=this.textStreamControllers.get(t.streamId);r&&(r.info.encryptionType!==n?(r.controller.error(new oa("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(n,", got ").concat(r.info.encryptionType),e.DataStreamErrorReason.EncryptionTypeMismatch)),this.textStreamControllers.delete(t.streamId)):r.controller.enqueue(t))}handleStreamTrailer(t,n){const i=this.textStreamControllers.get(t.streamId);i&&(i.info.encryptionType!==n?i.controller.error(new oa("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(n,", got ").concat(i.info.encryptionType),e.DataStreamErrorReason.EncryptionTypeMismatch)):(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),t.attributes),t.reason?i.controller.error(new oa("Data stream ".concat(t.streamId," closed abnormally: ").concat(t.reason),e.DataStreamErrorReason.AbnormalEnd)):i.controller.close()),this.textStreamControllers.delete(t.streamId));const r=this.byteStreamControllers.get(t.streamId);r&&(r.info.encryptionType!==n?r.controller.error(new oa("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(n,", got ").concat(r.info.encryptionType),e.DataStreamErrorReason.EncryptionTypeMismatch)):(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),t.attributes),t.reason?r.controller.error(new oa("Data stream ".concat(t.streamId," closed abnormally: ").concat(t.reason),e.DataStreamErrorReason.AbnormalEnd)):r.controller.close()),this.byteStreamControllers.delete(t.streamId))}}function zl(e,t){return new ReadableStream({start:n=>kr(this,void 0,void 0,(function*(){const i=yield t;n.enqueue(new ln({streamId:e,chunkIndex:BigInt(0),content:i})),n.close()}))})}function Gl(t){let n=-1;return new TransformStream({transform:(i,r)=>{const s=No(i.chunkIndex);if(s<=n)or.warn("ignoring duplicate chunk ".concat(s," ").concat(i.version>0?"(version ".concat(i.version,")"):""," for data stream ").concat(t," (last processed: ").concat(n,")"));else{if(s>n+1)throw new oa("Missing chunk(s) ".concat(n+1,"..").concat(s-1," for data stream ").concat(t," - cannot reassemble payload"),e.DataStreamErrorReason.Incomplete);n=s,0!==i.content.length&&r.enqueue(i)}}})}function Jl(){return new TransformStream({transform:(e,t)=>{t.enqueue(e.content)}})}function Ql(t,n){let i=0;return new TransformStream({transform:(r,s)=>{if(i+=r.byteLength,i>n)throw new oa("Data stream ".concat(t," exceeds the maximum payload size of ").concat(n," bytes"),e.DataStreamErrorReason.PayloadTooLarge);s.enqueue(r)}})}class Yl{constructor(e,t,n){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=n,this.info=t}write(e){return this.defaultWriter.write(e)}close(){return kr(this,void 0,void 0,(function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),null===(e=this.onClose)||void 0===e||e.call(this)}))}}class Xl extends Yl{}class Zl extends Yl{}function $l(e,t,n){var i;return new dn({streamId:e.id,mimeType:e.mimeType,topic:e.topic,timestamp:xo(e.timestamp),totalLength:xo(e.size),attributes:e.attributes,compression:null!==(i=null==n?void 0:n.compression)&&void 0!==i?i:an.NONE,inlineContent:null==n?void 0:n.inlineContent,contentHeader:{case:"textHeader",value:new on({version:null==t?void 0:t.version,attachedStreamIds:e.attachedStreamIds,replyToStreamId:null==t?void 0:t.replyToStreamId,operationType:"update"===(null==t?void 0:t.type)?sn.UPDATE:sn.CREATE})}})}function eu(e,t){var n;return new dn({streamId:e.id,mimeType:e.mimeType,topic:e.topic,timestamp:xo(e.timestamp),totalLength:xo(e.size),attributes:e.attributes,compression:null!==(n=null==t?void 0:t.compression)&&void 0!==n?n:an.NONE,inlineContent:null==t?void 0:t.inlineContent,contentHeader:{case:"byteHeader",value:new cn({name:e.name})}})}function tu(e,t){return new At({destinationIdentities:t,value:{case:"streamHeader",value:e}})}const nu=new TextEncoder;class iu{constructor(e,t,n,i,r){this.engine=e,this.log=t,this.getRemoteParticipantClientProtocol=n,this.getRemoteParticipantCapabilities=i,this.getAllRemoteParticipantIdentities=r}setupEngine(e){this.engine=e}sendText(e,t){return kr(this,void 0,void 0,(function*(){var n,i,r,s,a;const o=crypto.randomUUID(),c=nu.encode(e),d=c.byteLength,l=null===(n=null==t?void 0:t.compress)||void 0===n||n;let u={id:o,mimeType:"text/plain",timestamp:Date.now(),topic:null!==(i=null==t?void 0:t.topic)&&void 0!==i?i:"",size:d,attributes:null==t?void 0:t.attributes,encryptionType:(null===(r=this.engine.e2eeManager)||void 0===r?void 0:r.isDataChannelEncryptionEnabled)?yt.GCM:yt.NONE};let h=l&&Qo()&&this.allRecipientsSupportV2(null==t?void 0:t.destinationIdentities)&&this.allRecipientsSupportCompression(null==t?void 0:t.destinationIdentities)?ru.fromStream(zo(c).pipeThrough(Ul())):null;if((!(null==t?void 0:t.attachments)||0===t.attachments.length)&&this.allRecipientsSupportV2(null==t?void 0:t.destinationIdentities)){let e=c,n=an.NONE;if(h){const t=yield h.collect();t.byteLengthcrypto.randomUUID())),m=p?p.length+1:1,g=new Array(m).fill(0),v=(e,n)=>{var i;g[n]=e,null===(i=null==t?void 0:t.onProgress)||void 0===i||i.call(t,g.reduce(((e,t)=>e+t),0)/m)};if(h){u.attachedStreamIds=p;const e=tu($l(u,void 0,{compression:an.DEFLATE_RAW}),null==t?void 0:t.destinationIdentities);yield this.sendChunkedByteStream(e,o,null==t?void 0:t.destinationIdentities,h.stream().pipeThrough(su(c.length,(e=>v(e,0))))),0===c.length&&v(1,0)}else{const n=yield this.streamText({streamId:o,totalSize:d,destinationIdentities:null==t?void 0:t.destinationIdentities,topic:null==t?void 0:t.topic,attachedStreamIds:p,attributes:null==t?void 0:t.attributes});yield n.write(e),v(1,0),yield n.close(),u=n.info}return(null==t?void 0:t.attachments)&&p&&(yield Promise.all(t.attachments.map(((e,n)=>kr(this,void 0,void 0,(function*(){return this._sendFile(p[n],e,{topic:t.topic,mimeType:e.type,destinationIdentities:t.destinationIdentities,compress:t.compress,onProgress:e=>{v(e,n+1)}})})))))),u}))}sendBytes(e,t){return kr(this,void 0,void 0,(function*(){var n,i,r,s,a,o,c;const d=crypto.randomUUID(),l=null==t?void 0:t.destinationIdentities,u=null===(n=null==t?void 0:t.compress)||void 0===n||n,h={id:d,name:null!==(i=null==t?void 0:t.name)&&void 0!==i?i:"unknown",mimeType:null!==(r=null==t?void 0:t.mimeType)&&void 0!==r?r:"application/octet-stream",timestamp:Date.now(),topic:null!==(s=null==t?void 0:t.topic)&&void 0!==s?s:"",size:e.byteLength,attributes:null==t?void 0:t.attributes,encryptionType:(null===(a=this.engine.e2eeManager)||void 0===a?void 0:a.isDataChannelEncryptionEnabled)?yt.GCM:yt.NONE},p=su(e.length,null==t?void 0:t.onProgress);let m=u&&Qo()&&this.allRecipientsSupportV2(l)&&this.allRecipientsSupportCompression(l)?ru.fromStream(zo(e).pipeThrough(p).pipeThrough(Ul())):null;if(this.allRecipientsSupportV2(l)){let n=e,i=an.NONE;if(m){const t=yield m.collect();t.byteLength0?e:this.getAllRemoteParticipantIdentities()).every((e=>this.getRemoteParticipantClientProtocol(e)>=2))}allRecipientsSupportCompression(e){return(e&&e.length>0?e:this.getAllRemoteParticipantIdentities()).every((e=>this.getRemoteParticipantCapabilities(e).includes($t.CAP_COMPRESSION_DEFLATE_RAW)))}sendChunkedByteStream(e,t,n,i){return kr(this,void 0,void 0,(function*(){var r,s,a,o;const c=this.engine;yield au(c,e);let d=0;try{for(var l,u=!0,h=Sr(function(e,t){return Tr(this,arguments,(function*(){const n=e.getReader();let i=new Uint8Array(0);try{for(;;){const e=yield br(n.read()),r=e.done,s=e.value;if(r)break;if(0===s.byteLength)continue;const a=new Uint8Array(i.byteLength+s.byteLength);for(a.set(i),a.set(s,i.byteLength),i=a;i.byteLength>=t;)yield yield br(i.slice(0,t)),i=i.slice(t)}i.byteLength>0&&(yield yield br(i))}finally{n.releaseLock()}}))}(i,ql));!(r=(l=yield h.next()).done);u=!0){o=l.value,u=!1;const e=new At({destinationIdentities:n,value:{case:"streamChunk",value:new ln({content:o,streamId:t,chunkIndex:xo(d)})}});yield c.sendDataPacket(e,Xd.RELIABLE),d+=1}}catch(p){s={error:p}}finally{try{u||r||!(a=h.return)||(yield a.call(h))}finally{if(s)throw s.error}}yield ou(t,n,c)}))}streamText(t){return kr(this,void 0,void 0,(function*(){var n,i,r;const s=null!==(n=null==t?void 0:t.streamId)&&void 0!==n?n:crypto.randomUUID(),a=null==t?void 0:t.destinationIdentities,o={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:null!==(i=null==t?void 0:t.topic)&&void 0!==i?i:"",size:null==t?void 0:t.totalSize,attributes:null==t?void 0:t.attributes,encryptionType:(null===(r=this.engine.e2eeManager)||void 0===r?void 0:r.isDataChannelEncryptionEnabled)?yt.GCM:yt.NONE,attachedStreamIds:null==t?void 0:t.attachedStreamIds},c=tu($l(o,t),a);yield au(this.engine,c);let d=0;const l=this.engine,u=new WritableStream({write(e){return kr(this,void 0,void 0,(function*(){for(const t of function(e,t){const n=[];let i=(new TextEncoder).encode(e);for(;i.length>t;){let e=t;for(;e>0;){const t=i[e];if(void 0!==t&&128!=(192&t))break;e--}n.push(i.slice(0,e)),i=i.slice(e)}return i.length>0&&n.push(i),n}(e,ql)){const e=new ln({content:t,streamId:s,chunkIndex:xo(d)}),n=new At({destinationIdentities:a,value:{case:"streamChunk",value:e}});yield l.sendDataPacket(n,Xd.RELIABLE),d+=1}}))},close(){return kr(this,void 0,void 0,(function*(){yield ou(s,a,l)}))},abort(e){console.log("Sink error:",e)}});let h=()=>kr(this,void 0,void 0,(function*(){yield p.close()}));l.once(e.EngineEvent.Closing,h);const p=new Xl(u,o,(()=>this.engine.off(e.EngineEvent.Closing,h)));return p}))}sendFile(e,t){return kr(this,void 0,void 0,(function*(){const n=crypto.randomUUID();return yield this._sendFile(n,e,t),{id:n}}))}_sendFile(e,t,n){return kr(this,void 0,void 0,(function*(){var i,r,s,a,o;const c=null==n?void 0:n.destinationIdentities,d=(null===(i=null==n?void 0:n.compress)||void 0===i||i)&&Qo()&&this.allRecipientsSupportV2(c)&&this.allRecipientsSupportCompression(c),l={id:e,name:t.name,mimeType:null!==(r=null==n?void 0:n.mimeType)&&void 0!==r?r:t.type,topic:null!==(s=null==n?void 0:n.topic)&&void 0!==s?s:"",timestamp:Date.now(),size:t.size,encryptionType:(null===(a=this.engine.e2eeManager)||void 0===a?void 0:a.isDataChannelEncryptionEnabled)?yt.GCM:yt.NONE},u=tu(eu(l,{compression:d?an.DEFLATE_RAW:an.NONE}),c),h=t.stream().pipeThrough(su(t.size,null==n?void 0:n.onProgress)),p=d?h.pipeThrough(Ul()):h;return yield this.sendChunkedByteStream(u,e,c,p),0===t.size&&(null===(o=null==n?void 0:n.onProgress)||void 0===o||o.call(n,1)),l}))}streamBytes(e){return kr(this,void 0,void 0,(function*(){var t,n,i,s,a;const o=null!==(t=null==e?void 0:e.streamId)&&void 0!==t?t:crypto.randomUUID(),c=null==e?void 0:e.destinationIdentities,d={id:o,mimeType:null!==(n=null==e?void 0:e.mimeType)&&void 0!==n?n:"application/octet-stream",topic:null!==(i=null==e?void 0:e.topic)&&void 0!==i?i:"",timestamp:Date.now(),attributes:null==e?void 0:e.attributes,size:null==e?void 0:e.totalSize,name:null!==(s=null==e?void 0:e.name)&&void 0!==s?s:"unknown",encryptionType:(null===(a=this.engine.e2eeManager)||void 0===a?void 0:a.isDataChannelEncryptionEnabled)?yt.GCM:yt.NONE},l=tu(eu(d),c);yield au(this.engine,l);let u=0;const h=new r,p=this.engine,m=this.log,g=new WritableStream({write(e){return kr(this,void 0,void 0,(function*(){const t=yield h.lock();let n=0;try{for(;n0&&t(Math.min(n/e,1)),r.enqueue(i)}})}function au(t,n){return kr(this,void 0,void 0,(function*(){if(n.toBinary().byteLength>ql)throw new oa("data stream header exceeds the ".concat(ql,"-byte limit; reduce attribute size"),e.DataStreamErrorReason.HeaderTooLarge);yield t.sendDataPacket(n,Xd.RELIABLE)}))}function ou(e,t,n){return kr(this,void 0,void 0,(function*(){const i=new At({destinationIdentities:t,value:{case:"streamTrailer",value:new un({streamId:e})}});yield n.sendDataPacket(i,Xd.RELIABLE)}))}function cu(e){if(0===e.length){return(new AbortController).signal}if(1===e.length)return e[0];for(const i of e)if(i.aborted)return i;const t=new AbortController,n=Array(e.length);return e.forEach(((e,i)=>{const r=()=>{t.abort(e.reason),(()=>{for(const e of n)e()})()};e.addEventListener("abort",r),n[i]=()=>e.removeEventListener("abort",r)})),t.signal}function du(e){const t=new AbortController;return setTimeout((()=>{t.abort(new DOMException("signal timed out after ".concat(e," ms"),"TimeoutError"))}),e),t.signal}var lu,uu,hu;!function(e){e[e.TooShort=0]="TooShort",e[e.HeaderOverrun=1]="HeaderOverrun",e[e.MissingExtWords=2]="MissingExtWords",e[e.UnsupportedVersion=3]="UnsupportedVersion",e[e.InvalidHandle=4]="InvalidHandle",e[e.MalformedExt=5]="MalformedExt"}(lu||(lu={}));class pu extends Ws{constructor(e,t,n){super(19,e,n),this.name="DataTrackDeserializeError",this.reason=t,this.reasonName=lu[t]}static tooShort(){return new pu("Too short to contain a valid header",lu.TooShort)}static headerOverrun(){return new pu("Header exceeds total packet length",lu.HeaderOverrun)}static missingExtWords(){return new pu("Extension word indicator is missing",lu.MissingExtWords)}static unsupportedVersion(e){return new pu("Unsupported version ".concat(e),lu.UnsupportedVersion)}static invalidHandle(e){return new pu("invalid track handle: ".concat(e.message),lu.InvalidHandle,{cause:e})}static malformedExt(e){return new pu("Extension with tag ".concat(e," is malformed"),lu.MalformedExt)}}!function(e){e[e.TooSmallForHeader=0]="TooSmallForHeader",e[e.TooSmallForPayload=1]="TooSmallForPayload"}(uu||(uu={}));class mu extends Ws{constructor(e,t,n){super(19,e,n),this.name="DataTrackSerializeError",this.reason=t,this.reasonName=uu[t]}static tooSmallForHeader(){return new mu("Buffer cannot fit header",uu.TooSmallForHeader)}static tooSmallForPayload(){return new mu("Buffer cannot fit payload",uu.TooSmallForPayload)}}class gu{toBinary(){const e=this.toBinaryLengthBytes(),t=new ArrayBuffer(e),n=new DataView(t),i=this.toBinaryInto(n);if(e!==i)throw new Error("".concat(this.constructor.name,".toBinary: written bytes (").concat(i," bytes) not equal to allocated array buffer length (").concat(e," bytes)."));return new Uint8Array(t)}}!function(e){e[e.UserTimestamp=2]="UserTimestamp",e[e.E2ee=1]="E2ee"}(hu||(hu={}));class vu extends gu{}class fu extends vu{constructor(e){super(),this.timestamp=e}toBinaryLengthBytes(){return 2+fu.lengthBytes}toBinaryInto(e){let t=0;e.setUint8(t,fu.tag),t+=1,e.setUint8(t,fu.lengthBytes),t+=1,e.setBigUint64(t,this.timestamp),t+=8;const n=this.toBinaryLengthBytes();if(t!==n)throw new Error("DataTrackUserTimestampExtension.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(n," bytes"));return t}toJSON(){return{tag:fu.tag,lengthBytes:fu.lengthBytes,timestamp:this.timestamp}}}fu.tag=hu.UserTimestamp,fu.lengthBytes=8;class ku extends vu{constructor(e,t){super(),this.keyIndex=e,this.iv=t}toBinaryLengthBytes(){return 2+ku.lengthBytes}toBinaryInto(e){let t=0;e.setUint8(t,ku.tag),t+=1,e.setUint8(t,ku.lengthBytes),t+=1,e.setUint8(t,this.keyIndex),t+=1;for(let i=0;i0&&void 0!==arguments[0]?arguments[0]:{};super(),this.userTimestamp=e.userTimestamp,this.e2ee=e.e2ee}toBinaryLengthBytes(){let e=0;return this.userTimestamp&&(e+=this.userTimestamp.toBinaryLengthBytes()),this.e2ee&&(e+=this.e2ee.toBinaryLengthBytes()),e}toBinaryInto(e){let t=0;if(this.e2ee){t+=this.e2ee.toBinaryInto(e)}if(this.userTimestamp){t+=this.userTimestamp.toBinaryInto(new DataView(e.buffer,e.byteOffset+t))}const n=this.toBinaryLengthBytes();if(t!==n)throw new Error("DataTrackExtensions.toBinaryInto: Wrote ".concat(t," bytes but expected length was ").concat(n," bytes"));return t}static fromBinary(e){const t=jc(e);let n,i,r=0;for(;t.byteLength-r>=2;){const e=t.getUint8(r);r+=1;const s=t.getUint8(r);if(r+=1,0!==e)switch(e){case hu.UserTimestamp:if(t.byteLength-r({payload:e.payload,extensions:new yu({userTimestamp:e.userTimestamp?new fu(e.userTimestamp):void 0})}),lossyIntoFrame(e){var t;return{payload:e.payload,userTimestamp:null===(t=e.extensions.userTimestamp)||void 0===t?void 0:t.timestamp}}},Tu=Symbol.for("lk.track"),Su=Symbol.for("lk.data-track");class Eu{constructor(e,t,n){this.trackSymbol=Tu,this.isLocal=!1,this.typeSymbol=Su,this.info=e,this.manager=t,this.publisherIdentity=n.publisherIdentity}subscribe(e){try{const t=B(this.manager.openSubscriptionStream(this.info.sid,null==e?void 0:e.signal,null==e?void 0:e.bufferSize),2),n=t[0];return t[1].catch((()=>{})),n}catch(t){throw t}}setPipelineOptions(e){this.manager.setPipelineOptions(this.info.sid,e)}}class Cu extends gu{constructor(e){var t;super(),this.marker=e.marker,this.trackHandle=e.trackHandle,this.sequence=e.sequence,this.frameNumber=e.frameNumber,this.timestamp=e.timestamp,this.extensions=null!==(t=e.extensions)&&void 0!==t?t:new yu}extensionsMetrics(){const e=this.extensions.toBinaryLengthBytes(),t=Math.ceil((2+e)/4);return{lengthBytes:e,lengthWords:t,paddingLengthBytes:4*t-2-e}}toBinaryLengthBytes(){const e=this.extensionsMetrics(),t=e.lengthBytes,n=e.paddingLengthBytes;let i=12;return t>0&&(i+=2+t+n),i}toBinaryInto(e){if(e.byteLength0&&(n|=4);let o=0;if(e.setUint8(o,n),o+=1,e.setUint8(o,0),o+=1,e.setUint16(o,this.trackHandle),o+=2,e.setUint16(o,this.sequence.value),o+=2,e.setUint16(o,this.frameNumber.value),o+=2,e.setUint32(o,this.timestamp.asTicks()),o+=4,r>0){const t=s-1;e.setUint16(o,t),o+=2;o+=this.extensions.toBinaryInto(new DataView(e.buffer,e.byteOffset+o));for(let n=0;n>5&7;if(s>0)throw pu.unsupportedVersion(s);let a;switch(r>>3&3){case 2:a=wu.Start;break;case 1:a=wu.Final;break;case 3:a=wu.Single;break;default:a=wu.Inter}const o=(r>>2&1)>0;let c;i+=1;try{c=Wc.fromNumber(t.getUint16(i))}catch(n){throw n instanceof Vc&&(n.isReason(qc.Reserved)||n.isReason(qc.TooLarge))?pu.invalidHandle(n):n}i+=2;const d=Uc.u16(t.getUint16(i));i+=2;const l=Uc.u16(t.getUint16(i));i+=2;const u=Fc.fromRtpTicks(t.getUint32(i));i+=4;let h=new yu;if(o){if(t.byteLength-i<2)throw pu.missingExtWords();let e=t.getUint16(i);i+=2;let n=4*(e+1)-2;if(i+n>t.byteLength)throw pu.headerOverrun();let r=new DataView(t.buffer,t.byteOffset+i,n);const s=B(yu.fromBinary(r),2);h=s[0],i+=s[1]}return[new Cu({marker:a,trackHandle:c,sequence:d,frameNumber:l,timestamp:u,extensions:h}),i]}toJSON(){return{marker:this.marker,trackHandle:this.trackHandle,sequence:this.sequence.value,frameNumber:this.frameNumber.value,timestamp:this.timestamp.asTicks(),extensions:this.extensions.toJSON()}}}var wu;!function(e){e[e.Start=0]="Start",e[e.Inter=1]="Inter",e[e.Final=2]="Final",e[e.Single=3]="Single"}(wu||(wu={}));class Ru extends gu{constructor(e,t){super(),this.header=e,this.payload=t}toBinaryLengthBytes(){return this.header.toBinaryLengthBytes()+this.payload.byteLength}toBinaryInto(e){let t=0;if(t+=this.header.toBinaryInto(e),e.byteLength-t=i){const n=this.peekOldestPartialFrameNumber();if("number"!=typeof n)throw new Error("Depacketizer.frameFromSingle: no oldest frame number found, but partials.size is ".concat(this.partials.size,"."));if(this.partials.delete(n),null==t?void 0:t.throwOnInterruption)throw Iu.interrupted(n,e.header.frameNumber.value);Pu.warn("Data track frame ".concat(n," was interrupted by single-packet frame ").concat(e.header.frameNumber.value,", dropping."))}return{payload:e.payload,extensions:e.header.extensions}}beginPartial(e,t){var n;if(e.header.marker!==wu.Start)throw new Error("Depacketizer.beginPartial: packet.header.marker was not FrameMarker.Start, found ".concat(e.header.marker,"."));const i=e.header.sequence,r=e.header.frameNumber.value,s={startSequence:i,extensions:e.header.extensions,payloads:new Map([[i.value,e.payload]])},a=null!==(n=null==t?void 0:t.maxPartialFrames)&&void 0!==n?n:1;for(;this.partials.size>=a;){const e=this.peekOldestPartialFrameNumber();if("number"!=typeof e)break;if(this.partials.delete(e),null==t?void 0:t.throwOnInterruption)throw Iu.interrupted(e,r);Pu.warn("Data track partials full (max ".concat(a,"), evicted oldest frame ").concat(e," to make room for new frame ").concat(r,"."))}return this.partials.set(r,s),null}pushToPartial(e){if(e.header.marker!==wu.Inter&&e.header.marker!==wu.Final)throw new Error("Depacketizer.pushToPartial: packet.header.marker was not FrameMarker.Inter or FrameMarker.Final, found ".concat(e.header.marker,"."));const t=e.header.frameNumber.value,n=this.partials.get(t);if(!n)throw this.partials.delete(t),Iu.unknownFrame(t);if(n.payloads.size>=Du.MAX_BUFFER_PACKETS)throw this.partials.delete(t),Iu.bufferFull(t);return n.payloads.has(e.header.sequence.value)&&Pu.warn("Data track frame ".concat(t," received duplicate packet for sequence ").concat(e.header.sequence.value,", so replacing with newly received packet.")),n.payloads.set(e.header.sequence.value,e.payload),e.header.marker===wu.Final?this.finalize(t,n,e.header.sequence.value):null}finalize(e,t,n){const i=t.payloads.size;let r=0;for(const c of t.payloads.values())r+=c.length;const s=new Uint8Array(r);let a=t.startSequence.clone(),o=0;for(;;){const i=t.payloads.get(a.value);if(!i)break;t.payloads.delete(a.value);const r=s.length-o;if(i.length>r)throw new Error("Depacketizer.finalize: Expected at least ".concat(i.length," more bytes left in the payload buffer, only got ").concat(r," bytes."));if(s.set(i,o),o+=i.length,a.value==n)return this.partials.delete(e),{payload:s,extensions:t.extensions};a.increment()}throw this.partials.delete(e),Iu.incomplete(e,i,n-t.startSequence.value+1)}}Du.MAX_BUFFER_PACKETS=128,function(e){e[e.Unpublished=0]="Unpublished",e[e.Timeout=1]="Timeout",e[e.Disconnected=2]="Disconnected",e[e.Cancelled=4]="Cancelled"}(Mu||(Mu={}));class Ou extends Ws{constructor(e,t,n){super(22,e,n),this.name="DataTrackSubscribeError",this.reason=t,this.reasonName=Mu[t]}static unpublished(){return new Ou("The track has been unpublished and is no longer available",Mu.Unpublished)}static timeout(){return new Ou("Request to subscribe to data track timed-out",Mu.Timeout)}static disconnected(){return new Ou("Cannot subscribe to data track when disconnected",Mu.Disconnected)}static cancelled(){return new Ou("Subscription to data track cancelled by caller",Mu.Cancelled)}}const Au=dr(e.LoggerNames.DataTracks);class Lu{constructor(e){var t,n;const i=null!==e.e2eeManager;if(e.info.usesE2ee!==i)throw new Error("IncomingDataTrackPipeline: DataTrackInfo.usesE2ee must match presence of decryptionProvider");const r=new Du;this.publisherIdentity=e.publisherIdentity,this.e2eeManager=null!==(t=e.e2eeManager)&&void 0!==t?t:null,this.depacketizer=r,this.options=null!==(n=e.pipelineOptions)&&void 0!==n?n:{}}updateE2eeManager(e){this.e2eeManager=e}setOptions(e){this.options=e}processPacket(e){return kr(this,void 0,void 0,(function*(){const t=this.depacketize(e);if(!t)return null;const n=yield this.decryptIfNeeded(t);return n||null}))}depacketize(e){let t;try{t=this.depacketizer.push(e,{throwOnInterruption:!1,maxPartialFrames:this.options.maxPartialFrames})}catch(n){return Au.warn("Data frame depacketize error: ".concat(n)),null}return t}decryptIfNeeded(e){return kr(this,void 0,void 0,(function*(){var t,n;const i=this.e2eeManager;if(!i)return e;const r=null!==(n=null===(t=e.extensions)||void 0===t?void 0:t.e2ee)&&void 0!==n?n:null;if(!r)return Au.error("Missing E2EE meta"),null;let s;try{s=yield i.handleEncryptedData(e.payload,r.iv,this.publisherIdentity,r.keyIndex)}catch(a){return Au.error("Error decrypting packet: ".concat(a)),null}return e.payload=s.payload,e}))}}const Nu=dr(e.LoggerNames.DataTracks);class xu extends wr.EventEmitter{constructor(e){var t;super(),this.descriptors=new Map,this.subscriptionHandles=new Map,this.e2eeManager=null!==(t=null==e?void 0:e.e2eeManager)&&void 0!==t?t:null}updateE2eeManager(e){this.e2eeManager=e;for(const t of this.descriptors.values())"active"===t.subscription.type&&t.subscription.pipeline.updateE2eeManager(e)}setPipelineOptions(e,t){const n=this.descriptors.get(e);n?(n.pipelineOptions=t,"active"===n.subscription.type&&n.subscription.pipeline.setOptions(t)):Nu.warn("Unknown track ".concat(e,", cannot set pipeline options."))}openSubscriptionStream(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16,i=null;const r=new Mo,s=this.descriptors.get(e),a=()=>{null==t||t.removeEventListener("abort",c)},o=()=>{a(),i?s&&this.descriptors.get(s.info.sid)===s?"active"===s.subscription.type?(s.subscription.streamControllers.delete(i),0===s.subscription.streamControllers.size&&this.unSubscribeRequest(s.info.sid)):Nu.warn("Subscription for track ".concat(e," is not active, skipping cancel...")):Nu.warn("Unknown track ".concat(e,", skipping cancel...")):Nu.warn("ReadableStream subscribed to ".concat(e," was not started."))},c=()=>{var e;i&&("active"===(null==s?void 0:s.subscription.type)&&s.subscription.streamControllers.delete(i),i.error(Ou.cancelled()),null===(e=r.reject)||void 0===e||e.call(r,Ou.cancelled()),o())},d=new ReadableStream({start:n=>{i=n,this.subscribeRequest(e,t).then((()=>kr(this,void 0,void 0,(function*(){var i,o,d;if(!s||this.descriptors.get(s.info.sid)!==s){Nu.error("Unknown track ".concat(e));const t=Ou.disconnected();return n.error(t),void(null===(i=r.reject)||void 0===i||i.call(r,t))}if("active"!==s.subscription.type){Nu.error("Subscription for track ".concat(e," is not active"));const t=Ou.disconnected();return n.error(t),void(null===(o=r.reject)||void 0===o||o.call(r,t))}(null==t?void 0:t.aborted)?c():(null==t||t.addEventListener("abort",c),s.subscription.streamControllers.set(n,a),null===(d=r.resolve)||void 0===d||d.call(r))})))).catch((e=>{var t;n.error(e),null===(t=r.reject)||void 0===t||t.call(r,e)}))},cancel:()=>{o()}},new CountQueuingStrategy({highWaterMark:n}));return[d,r.promise]}subscribeRequest(e,t){return kr(this,void 0,void 0,(function*(){const n=this.descriptors.get(e);if(!n)throw new Error("Cannot subscribe to unknown track");const i=(t,n,i)=>kr(this,void 0,void 0,(function*(){if("active"===t.subscription.type)return;if("pending"!==t.subscription.type)throw new Error("Descriptor for track ".concat(e," is not pending, found ").concat(t.subscription.type));const r=cu([n,i].filter((e=>void 0!==e))),s=new Mo;t.subscription.completionFuture.promise.then((()=>{var e;return null===(e=s.resolve)||void 0===e?void 0:e.call(s)})).catch((e=>{var t;return null===(t=s.reject)||void 0===t?void 0:t.call(s,e)}));const a=()=>{var e;"pending"===t.subscription.type&&(t.subscription.pendingRequestCount-=1,(null==i?void 0:i.aborted)||t.subscription.pendingRequestCount<=0?t.subscription.cancel():null===(e=s.reject)||void 0===e||e.call(s,Ou.cancelled()))};r.aborted&&a(),r.addEventListener("abort",a),yield s.promise,r.removeEventListener("abort",a)}));switch(n.subscription.type){case"none":{n.subscription={type:"pending",completionFuture:new Mo,pendingRequestCount:1,cancel:()=>{var e,t;const i=n.subscription;n.subscription={type:"none"},this.emit("sfuUpdateSubscription",{sid:n.info.sid,subscribe:!1}),"pending"===i.type&&(null===(t=(e=i.completionFuture).reject)||void 0===t||t.call(e,r.aborted?Ou.timeout():Ou.cancelled()))}},this.emit("sfuUpdateSubscription",{sid:e,subscribe:!0});const r=du(1e4);return void(yield i(n,t,r))}case"pending":return n.subscription.pendingRequestCount+=1,void(yield i(n,t));case"active":return}}))}querySubscribed(){return kr(this,void 0,void 0,(function*(){return Array.from(this.descriptors.values()).filter((e=>"active"===e.subscription.type)).map((e=>[e.info,e.publisherIdentity]))}))}unSubscribeRequest(e){var t;const n=this.descriptors.get(e);if(!n)throw new Error("Cannot subscribe to unknown track");if("active"!==n.subscription.type)return void Nu.warn("Unexpected descriptor state in unSubscribeRequest, expected active, found ".concat(null===(t=n.subscription)||void 0===t?void 0:t.type));this.closeStreamControllers(n.subscription.streamControllers,e);const i=n.subscription;n.subscription={type:"none"},this.subscriptionHandles.delete(i.subcriptionHandle),this.emit("sfuUpdateSubscription",{sid:e,subscribe:!1})}closeStreamControllers(e,t){for(const r of e){var n=B(r,2);const e=n[0];(0,n[1])();try{e.close()}catch(i){Nu.warn("Failed to close readable stream for track ".concat(t,": ").concat(i))}}}receiveSfuPublicationUpdates(e){return kr(this,void 0,void 0,(function*(){if(0===e.size)return;const t=new Map;for(const r of e.entries()){var n=B(r,2);const e=n[0],i=n[1],s=new Set;for(const t of i)s.add(t.sid),this.descriptors.has(t.sid)||this.handleSidReassigned(e,t)||(yield this.handleTrackPublished(e,t));t.set(e,s)}for(const e of t.entries()){var i=B(e,2);const t=i[0],n=i[1];let r=Array.from(this.descriptors.entries()).filter((e=>{let n=B(e,2);return n[0],n[1].publisherIdentity===t})).map((e=>B(e,1)[0])).filter((e=>!n.has(e)));for(const e of r)this.handleTrackUnpublished(e)}}))}queryPublications(){return kr(this,void 0,void 0,(function*(){return Array.from(this.descriptors.values()).map((e=>e.info))}))}handleTrackPublished(e,t){return kr(this,void 0,void 0,(function*(){if(this.descriptors.has(t.sid))return void Nu.error("Existing descriptor for track ".concat(t.sid));let n={info:t,publisherIdentity:e,subscription:{type:"none"},pipelineOptions:{}};this.descriptors.set(n.info.sid,n);const i=new Eu(n.info,this,{publisherIdentity:e});this.emit("trackPublished",{track:i})}))}handleSidReassigned(e,t){const n=Array.from(this.descriptors.entries()).find((n=>{let i=B(n,2);i[0];let r=i[1];return r.publisherIdentity===e&&r.info.pubHandle===t.pubHandle}));if(!n)return!1;const i=B(n,2),r=i[0],s=i[1],a=s.info,o=a.name,c=a.usesE2ee;if(o!==t.name||c!==t.usesE2ee)return Nu.warn("Info mismatch for ".concat(r,", treating as new publication")),!1;const d=t.sid;if(Nu.debug("SID reassigned: ".concat(r," -> ").concat(d)),!this.descriptors.delete(r))return!1;switch(s.info.sid=d,s.subscription.type){case"none":break;case"pending":case"active":this.emit("sfuUpdateSubscription",{sid:d,subscribe:!0})}return"active"===s.subscription.type&&this.subscriptionHandles.set(s.subscription.subcriptionHandle,d),this.descriptors.set(d,s),!0}handleTrackUnpublished(e){const t=this.descriptors.get(e);t?(this.descriptors.delete(e),"active"===t.subscription.type&&(this.closeStreamControllers(t.subscription.streamControllers,e),this.subscriptionHandles.delete(t.subscription.subcriptionHandle)),this.emit("trackUnpublished",{sid:e,publisherIdentity:t.publisherIdentity})):Nu.error("Unknown track ".concat(e))}receivedSfuSubscriberHandles(e){for(const n of e.entries()){var t=B(n,2);const e=t[0],i=t[1];this.registerSubscriberHandle(e,i)}}registerSubscriberHandle(e,t){var n,i;const r=this.descriptors.get(t);if(r)switch(r.subscription.type){case"none":return void Nu.warn("No subscription for ".concat(t));case"active":return this.subscriptionHandles.delete(r.subscription.subcriptionHandle),r.subscription.subcriptionHandle=e,void this.subscriptionHandles.set(e,t);case"pending":{Nu.debug("data track subscription activated",{sid:t,handle:e});const s=new Lu({info:r.info,publisherIdentity:r.publisherIdentity,e2eeManager:this.e2eeManager,pipelineOptions:r.pipelineOptions}),a=r.subscription;r.subscription={type:"active",subcriptionHandle:e,pipeline:s,streamControllers:new Map},this.subscriptionHandles.set(e,t),null===(i=(n=a.completionFuture).resolve)||void 0===i||i.call(n)}}else Nu.error("Unknown track ".concat(t))}packetReceived(e){return kr(this,void 0,void 0,(function*(){let t;try{t=B(Ru.fromBinary(e),1)[0]}catch(s){return void Nu.error("Failed to deserialize packet: ".concat(s))}const n=this.subscriptionHandles.get(t.header.trackHandle);if(!n)return void Nu.warn("Unknown subscriber handle ".concat(t.header.trackHandle));const i=this.descriptors.get(n);if(!i)return void Nu.error("Missing descriptor for track ".concat(n));if("active"!==i.subscription.type)return void Nu.warn("Received packet for track ".concat(n," without active subscription"));const r=yield i.subscription.pipeline.processPacket(t);if(r)for(const e of i.subscription.streamControllers.keys()){if(null!==e.desiredSize&&e.desiredSize<=0){Nu.warn("Cannot send frame to subscribers: readable stream is full (desiredSize is ".concat(e.desiredSize,"). To increase this threshold, set a higher 'options.highWaterMark' when calling .subscribe()."));continue}const t=bu.lossyIntoFrame(r);e.enqueue(t)}}))}resendSubscriptionUpdates(){for(const t of this.descriptors){var e=B(t,2);const n=e[0];"none"!==e[1].subscription.type&&this.emit("sfuUpdateSubscription",{sid:n,subscribe:!0})}}handleRemoteParticipantDisconnected(e){var t,n;for(const i of this.descriptors.values())if(i.publisherIdentity===e)switch(i.subscription.type){case"none":break;case"pending":null===(n=(t=i.subscription.completionFuture).reject)||void 0===n||n.call(t,Ou.disconnected());break;case"active":this.unSubscribeRequest(i.info.sid)}}reset(){var e,t;for(const n of this.descriptors.values())this.emit("trackUnpublished",{sid:n.info.sid,publisherIdentity:n.publisherIdentity}),"pending"===n.subscription.type&&(null===(t=(e=n.subscription.completionFuture).reject)||void 0===t||t.call(e,Ou.disconnected())),"active"===n.subscription.type&&this.closeStreamControllers(n.subscription.streamControllers,n.info.sid);this.descriptors.clear(),this.subscriptionHandles.clear()}}class Uu extends Ws{constructor(e,t,n){super(19,e,n),this.name="DataTrackPacketizerError",this.reason=t,this.reasonName=Fu[t]}static mtuTooShort(){return new Uu("MTU is too short to send frame",Fu.MtuTooShort)}}var Fu,Bu,ju,qu;!function(e){e[e.MtuTooShort=0]="MtuTooShort"}(Fu||(Fu={}));class Vu{constructor(e,t){this.sequence=Uc.u16(0),this.frameNumber=Uc.u16(0),this.clock=Bc.rtpStartingNow(Fc.rtpRandom()),this.handle=e,this.mtuSizeBytes=t}static computeFrameMarker(e,t){return t<=1?wu.Single:0===e?wu.Start:e===t-1?wu.Final:wu.Inter}*packetize(e,t){var n;const i=this.frameNumber.getThenIncrement(),r={marker:wu.Inter,trackHandle:this.handle,sequence:Uc.u16(0),frameNumber:i,timestamp:null!==(n=null==t?void 0:t.now)&&void 0!==n?n:this.clock.now(),extensions:e.extensions},s=new Cu(r).toBinaryLengthBytes();if(s>=this.mtuSizeBytes)throw Uu.mtuTooShort();const a=this.mtuSizeBytes-s,o=Math.ceil(e.payload.byteLength/a);for(let d=0,l=0;l{var e,t;null===(t=(e=this.flushedFuture).resolve)||void 0===t||t.call(e),this.manager.off("packetsFlushedChange",this.handleManagerPacketsFlushedChange),this.manager.off("reset",this.handleManagerReset)},this.handleManagerPacketsFlushedChange=e=>{var t,n;this.isFlushed=e.isFlushed,e.isFlushed&&(null===(n=(t=this.flushedFuture).resolve)||void 0===n||n.call(t),this.flushedFuture=new Mo)},this.options=t,this.manager=n,this.log=dr(e.LoggerNames.DataTracks),this.manager.on("packetsFlushedChange",this.handleManagerPacketsFlushedChange),this.manager.on("reset",this.handleManagerReset)}static withExplicitHandle(e,t,n){const i=new zu(e,t);return i.handle=n,i}get info(){const e=this.descriptor;return"active"===(null==e?void 0:e.type)?e.info:void 0}get descriptor(){return this.handle?this.manager.getDescriptor(this.handle):null}publish(e){return kr(this,void 0,void 0,(function*(){try{this.handle=yield this.manager.publishRequest(this.options,e)}catch(t){throw t}}))}isPublished(){var e;return"active"===(null===(e=this.descriptor)||void 0===e?void 0:e.type)&&"unpublished"!==this.descriptor.publishState}tryPush(e){if(!this.handle)throw Hu.trackUnpublished();const t=bu.from(e);try{return this.manager.tryProcessAndSend(this.handle,t)}catch(n){throw n}}flush(){return kr(this,void 0,void 0,(function*(){if(!this.isFlushed)return this.flushedFuture.promise}))}unpublish(){return kr(this,void 0,void 0,(function*(){if(this.handle)try{yield this.manager.unpublishRequest(this.handle)}catch(e){throw e}else or.warn('Data track "'.concat(this.options.name,'" is not published, so unpublishing has no effect.'))}))}}class Gu{constructor(e){this.e2eeManager=e.e2eeManager,this.packetizer=new Vu(e.info.pubHandle,Gu.TRANSPORT_MTU_BYTES)}updateE2eeManager(e){this.e2eeManager=e}processFrame(e){return Tr(this,arguments,(function*(){const t=yield br(this.encryptIfNeeded(e));try{yield br(yield*function(e){var t,n;return t={},i("next"),i("throw",(function(e){throw e})),i("return"),t[Symbol.iterator]=function(){return this},t;function i(i,r){t[i]=e[i]?function(t){return(n=!n)?{value:br(e[i](t)),done:!1}:r?r(t):t}:r}}(Sr(this.packetizer.packetize(t))))}catch(n){if(n instanceof Uu)throw Ku.packetizer(n);throw n}}))}encryptIfNeeded(e){return kr(this,void 0,void 0,(function*(){if(!this.e2eeManager)return e;let t;try{t=yield this.e2eeManager.encryptData(e.payload)}catch(n){throw Ku.encryption(n)}return e.payload=t.payload,e.extensions.e2ee=new ku(t.keyIndex,t.iv),e}))}}Gu.TRANSPORT_MTU_BYTES=16e3;const Ju=dr(e.LoggerNames.DataTracks),Qu={pending:()=>({type:"pending",completionFuture:new Mo}),active:(e,t)=>({type:"active",info:e,publishState:"published",pipeline:new Gu({info:e,e2eeManager:t}),unpublishingFuture:new Mo})};class Yu extends wr.EventEmitter{constructor(e){var t;super(),this.handleAllocator=new Hc,this.descriptors=new Map,this.inFlightPacketCounter=new Map,this.e2eeManager=null!==(t=null==e?void 0:e.e2eeManager)&&void 0!==t?t:null}static withDescriptors(e){const t=new Yu;return t.descriptors=e,t}updateE2eeManager(e){this.e2eeManager=e;for(const t of this.descriptors.values())"active"===t.type&&t.pipeline.updateE2eeManager(e)}getDescriptor(e){var t;return null!==(t=this.descriptors.get(e))&&void 0!==t?t:null}tryProcessAndSend(e,t){return kr(this,void 0,void 0,(function*(){var n,i,r,s,a;const o=this.getDescriptor(e);if("active"!==(null==o?void 0:o.type))throw Hu.trackUnpublished();if("unpublished"===o.publishState)throw Hu.trackUnpublished();if("republishing"===o.publishState)throw Hu.dropped("Data track republishing");try{try{for(var c,d=!0,l=Sr(o.pipeline.processFrame(t));!(n=(c=yield l.next()).done);d=!0){s=c.value,d=!1;const t=s,n=null!==(a=this.inFlightPacketCounter.get(e))&&void 0!==a?a:0;this.inFlightPacketCounter.set(e,n+1),0===n&&this.emit("packetsFlushedChange",{handle:e,isFlushed:!1}),this.emit("packetAvailable",{handle:e,bytes:t.toBinary()})}}catch(u){i={error:u}}finally{try{d||n||!(r=l.return)||(yield r.call(l))}finally{if(i)throw i.error}}}catch(h){throw Hu.dropped(h)}}))}handlePacketSendComplete(e){var t;let n=(null!==(t=this.inFlightPacketCounter.get(e))&&void 0!==t?t:0)-1;n<0&&(Ju.warn("OutgoingDataTrackManager.handlePacketSendComplete: inFlightPacketCounter was decremented below 0 (got ".concat(this.inFlightPacketCounter," - resetting to 0. Were more packets send than were emitted?")),n=0),this.inFlightPacketCounter.set(e,n),0===n&&this.emit("packetsFlushedChange",{handle:e,isFlushed:!0})}publishRequest(e,t){return kr(this,void 0,void 0,(function*(){const n=this.handleAllocator.get();if(!n)throw Wu.limitReached();const i=du(1e4),r=t?cu([t,i]):i;if(this.descriptors.has(n))throw new Error("Descriptor for handle already exists");const s=Qu.pending();this.descriptors.set(n,s);const a=()=>{var e,t;const r=this.descriptors.get(n);r?(this.descriptors.delete(n),this.emit("sfuUnpublishRequest",{handle:n}),"pending"===r.type&&(null===(t=(e=r.completionFuture).reject)||void 0===t||t.call(e,i.aborted?Wu.timeout():Wu.cancelled()))):Ju.warn("No descriptor for ".concat(n))};return r.aborted?(a(),s.completionFuture.promise.then((()=>n))):(r.addEventListener("abort",a),this.emit("sfuPublishRequest",{handle:n,name:e.name,usesE2ee:null!==this.e2eeManager}),yield s.completionFuture.promise,r.removeEventListener("abort",a),this.emit("trackPublished",{track:zu.withExplicitHandle(e,this,n)}),n)}))}queryPublished(){return Array.from(this.descriptors.values()).filter((e=>"active"===e.type)).map((e=>e.info))}unpublishRequest(e){return kr(this,void 0,void 0,(function*(){const t=this.descriptors.get(e);t?"active"===t.type?(this.emit("sfuUnpublishRequest",{handle:e}),yield t.unpublishingFuture.promise,this.inFlightPacketCounter.delete(e),this.emit("trackUnpublished",{sid:t.info.sid})):Ju.warn("Track ".concat(e," not active")):Ju.warn("No descriptor for ".concat(e))}))}receivedSfuPublishResponse(e,t){var n,i,r,s;const a=this.descriptors.get(e);if(a)switch(this.descriptors.delete(e),a.type){case"pending":if("ok"===t.type){const r=t.data;Ju.debug("SFU accepted publish request for handle ".concat(e),{sid:r.sid});const s=r.usesE2ee?this.e2eeManager:null;this.descriptors.set(r.pubHandle,Qu.active(r,s)),null===(i=(n=a.completionFuture).resolve)||void 0===i||i.call(n)}else Ju.debug("SFU rejected publish request for handle ".concat(e),{error:t.error}),null===(s=(r=a.completionFuture).reject)||void 0===s||s.call(r,t.error);return;case"active":if("republishing"!==a.publishState)return void Ju.warn("Track ".concat(e," already active"));if("error"===t.type)return void Ju.warn("Republish failed for track ".concat(e));Ju.debug("Track ".concat(e," republished")),a.info.sid=t.data.sid,a.publishState="published",this.descriptors.set(a.info.pubHandle,a)}else Ju.warn("No descriptor for ".concat(e))}receivedSfuUnpublishResponse(e){var t,n;const i=this.descriptors.get(e);i?(this.descriptors.delete(e),"active"===i.type?(i.publishState="unpublished",null===(n=(t=i.unpublishingFuture).resolve)||void 0===n||n.call(t)):Ju.warn("Track ".concat(e," not active"))):Ju.warn("No descriptor for ".concat(e))}sfuWillRepublishTracks(){var e,t;for(const i of this.descriptors.entries()){var n=B(i,2);const r=n[0],s=n[1];switch(s.type){case"pending":this.descriptors.delete(r),null===(t=(e=s.completionFuture).reject)||void 0===t||t.call(e,Wu.disconnected());break;case"active":s.publishState="republishing",this.emit("sfuPublishRequest",{handle:s.info.pubHandle,name:s.info.name,usesE2ee:s.info.usesE2ee})}}}reset(){return kr(this,void 0,void 0,(function*(){var e,t,n,i;this.handleAllocator.reset();for(const r of this.descriptors.values())switch(r.type){case"pending":null===(t=(e=r.completionFuture).reject)||void 0===t||t.call(e,Wu.disconnected());break;case"active":null===(i=(n=r.unpublishingFuture).resolve)||void 0===i||i.call(n),yield this.unpublishRequest(r.info.pubHandle)}this.descriptors.clear(),this.inFlightPacketCounter.clear(),this.emit("reset")}))}}class Xu extends Error{constructor(e,t,n,i){super(t),this.code=e,this.message=nh(t,Xu.MAX_MESSAGE_BYTES),this.data=n?nh(n,Xu.MAX_DATA_BYTES):void 0,void 0!==(null==i?void 0:i.cause)&&(this.cause=null==i?void 0:i.cause)}static fromProto(e){return new Xu(e.code,e.message,e.data)}toProto(){return new Gt({code:this.code,message:this.message,data:this.data})}static builtIn(e,t,n){return new Xu(Xu.ErrorCode[e],Xu.ErrorMessage[e],t,n)}}Xu.MAX_MESSAGE_BYTES=256,Xu.MAX_DATA_BYTES=15360,Xu.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},Xu.ErrorMessage={APPLICATION_ERROR:"Application error in method handler",CONNECTION_TIMEOUT:"Connection timeout",RESPONSE_TIMEOUT:"Response timeout",RECIPIENT_DISCONNECTED:"Recipient disconnected",RESPONSE_PAYLOAD_TOO_LARGE:"Response payload too large",SEND_FAILED:"Failed to send",UNSUPPORTED_METHOD:"Method not supported at destination",RECIPIENT_NOT_FOUND:"Recipient not found",REQUEST_PAYLOAD_TOO_LARGE:"Request payload too large",UNSUPPORTED_SERVER:"RPC not supported by server",UNSUPPORTED_VERSION:"Unsupported RPC version"};const Zu="lk.rpc_request",$u="lk.rpc_response";var eh;!function(e){e.RPC_REQUEST_ID="lk.rpc_request_id",e.RPC_REQUEST_METHOD="lk.rpc_request_method",e.RPC_REQUEST_RESPONSE_TIMEOUT_MS="lk.rpc_request_response_timeout_ms",e.RPC_REQUEST_VERSION="lk.rpc_request_version"}(eh||(eh={}));function th(e){return(new TextEncoder).encode(e).length}function nh(e,t){if(th(e)<=t)return e;let n=0,i=e.length;const r=new TextEncoder;for(;n15360&&e<1)throw Xu.builtIn("REQUEST_PAYLOAD_TOO_LARGE");const a=t.getServerVersion();if(a&&yo(a,"1.8.0")<0)throw Xu.builtIn("UNSUPPORTED_SERVER");const c=Math.max(o,8e3),d=crypto.randomUUID(),l=new Mo;let u=null;const h=setTimeout((()=>{var e;t.pendingAcks.delete(d),null===(e=l.reject)||void 0===e||e.call(l,Xu.builtIn("CONNECTION_TIMEOUT")),t.pendingResponses.delete(d),null!==u&&clearTimeout(u)}),7e3);t.pendingAcks.set(d,{resolve:()=>{clearTimeout(h)},participantIdentity:i}),t.pendingResponses.set(d,{completionFuture:l,participantIdentity:i});const p=l.promise.finally((()=>{null!==u&&clearTimeout(u),t.pendingAcks.has(d)&&(t.log.warn("RPC response received before ack",d),t.pendingAcks.delete(d),clearTimeout(h))}));p.catch((()=>{}));try{yield t.publishRpcRequest(i,d,r,s,c,e)}catch(n){throw clearTimeout(h),t.pendingAcks.delete(d),t.pendingResponses.delete(d),n}return t.pendingResponses.has(d)&&(u=setTimeout((()=>{var e;t.pendingResponses.delete(d),null===(e=l.reject)||void 0===e||e.call(l,Xu.builtIn("RESPONSE_TIMEOUT"))}),o)),[d,p]}()}))}publishRpcRequest(e,t,n,i,r,s){return kr(this,void 0,void 0,(function*(){s>=1?yield this.outgoingDataStreamManager.sendText(i,{topic:Zu,destinationIdentities:[e],attributes:{[eh.RPC_REQUEST_ID]:t,[eh.RPC_REQUEST_METHOD]:n,[eh.RPC_REQUEST_RESPONSE_TIMEOUT_MS]:"".concat(r),[eh.RPC_REQUEST_VERSION]:"".concat(2)}}):this.emit("sendDataPacket",{packet:new At({destinationIdentities:[e],kind:Lt.RELIABLE,value:{case:"rpcRequest",value:new Ht({id:t,method:n,payload:i,responseTimeoutMs:r,version:1})}})})}))}handleIncomingDataStream(e,t,i){return kr(this,void 0,void 0,(function*(){const r=i[eh.RPC_REQUEST_ID];if(!r)return void this.log.warn("RPC data stream malformed: ".concat(eh.RPC_REQUEST_ID," not set."));const s=this.pendingResponses.get(r);if(s&&s.participantIdentity!==t)return void this.log.warn("RPC response stream for ".concat(r," arrived from unexpected sender ").concat(t,", expected ").concat(s.participantIdentity,". Ignoring."));let a;try{a=yield e.readAll()}catch(n){return this.log.warn("Error reading RPC response payload: ".concat(n)),void this.handleIncomingRpcResponseFailure(r,Xu.builtIn("APPLICATION_ERROR","Error reading RPC response payload",{cause:n}))}this.handleIncomingRpcResponseSuccess(r,a)}))}handleIncomingRpcResponseSuccess(e,t){var n,i;const r=this.pendingResponses.get(e);r?(null===(i=(n=r.completionFuture).resolve)||void 0===i||i.call(n,t),this.pendingResponses.delete(e)):this.log.error("Response received for unexpected RPC request",e)}handleIncomingRpcResponseFailure(e,t){var n,i;const r=this.pendingResponses.get(e);r?(null===(i=(n=r.completionFuture).reject)||void 0===i||i.call(n,t),this.pendingResponses.delete(e)):this.log.error("Response received for unexpected RPC request",e)}handleIncomingRpcAck(e){const t=this.pendingAcks.get(e);t?(t.resolve(),this.pendingAcks.delete(e)):this.log.error("Ack received for unexpected RPC request: ".concat(e))}handleParticipantDisconnected(e){var t;for(const s of this.pendingAcks){var n=B(s,2);const t=n[0];n[1].participantIdentity===e&&this.pendingAcks.delete(t)}for(const s of this.pendingResponses){var i=B(s,2);const n=i[0];var r=i[1];const a=r.participantIdentity,o=r.completionFuture;a===e&&(null===(t=o.reject)||void 0===t||t.call(o,Xu.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(n))}}}class rh extends wr.EventEmitter{constructor(e,t,n){super(),this.rpcHandlers=new Map,this.log=e,this.outgoingDataStreamManager=t,this.getRemoteParticipantClientProtocol=n}registerRpcMethod(e,t){if(this.rpcHandlers.has(e))throw Error("RPC handler already registered for method ".concat(e,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,t){return kr(this,void 0,void 0,(function*(){var n;if(this.publishRpcAck(e,t.id),1!==t.version)return void this.publishRpcResponsePacket(e,t.id,null,Xu.builtIn("UNSUPPORTED_VERSION"));const i=this.rpcHandlers.get(t.method);if(!i)return void this.publishRpcResponsePacket(e,t.id,null,Xu.builtIn("UNSUPPORTED_METHOD"));let r;try{r=yield i({requestId:t.id,callerIdentity:e,payload:t.payload,responseTimeout:t.responseTimeoutMs})}catch(s){let i;return s instanceof Xu?i=s:(this.log.warn("Uncaught error returned by RPC handler for ".concat(t.method,". Returning APPLICATION_ERROR instead."),s),i=Xu.builtIn("APPLICATION_ERROR","Uncaught error: ".concat(null!==(n=null==s?void 0:s.message)&&void 0!==n?n:s),{cause:s})),void this.publishRpcResponsePacket(e,t.id,null,i)}yield this.publishRpcResponse(e,t.id,null!=r?r:"")}))}handleIncomingDataStream(e,t,i){return kr(this,void 0,void 0,(function*(){const r=i[eh.RPC_REQUEST_ID],s=i[eh.RPC_REQUEST_METHOD],a=parseInt(i[eh.RPC_REQUEST_RESPONSE_TIMEOUT_MS],10),o=parseInt(i[eh.RPC_REQUEST_VERSION],10);if(!r||!s||Number.isNaN(a)||Number.isNaN(o))return this.log.warn("RPC data stream malformed: ".concat(eh.RPC_REQUEST_ID," / ").concat(eh.RPC_REQUEST_METHOD," / ").concat(eh.RPC_REQUEST_RESPONSE_TIMEOUT_MS," / ").concat(eh.RPC_REQUEST_VERSION," not set.")),void this.publishRpcResponsePacket(t,r,null,Xu.builtIn("APPLICATION_ERROR","RPC data stream malformed"));if(this.publishRpcAck(t,r),2!==o)return void this.publishRpcResponsePacket(t,r,null,Xu.builtIn("UNSUPPORTED_VERSION"));let c;try{c=yield e.readAll()}catch(n){return this.log.warn("Error reading RPC request payload: ".concat(n)),void this.publishRpcResponsePacket(t,r,null,Xu.builtIn("APPLICATION_ERROR","Error reading RPC request payload",{cause:n}))}const d=this.rpcHandlers.get(s);if(!d)return void this.publishRpcResponsePacket(t,r,null,Xu.builtIn("UNSUPPORTED_METHOD"));let l;try{l=yield d({requestId:r,callerIdentity:t,payload:c,responseTimeout:a})}catch(u){let e;return u instanceof Xu?e=u:(this.log.warn("Uncaught error returned by RPC handler for ".concat(s,". Returning APPLICATION_ERROR instead."),u),e=Xu.builtIn("APPLICATION_ERROR")),void this.publishRpcResponsePacket(t,r,null,e)}yield this.publishRpcResponse(t,r,null!=l?l:"")}))}publishRpcAck(e,t){this.emit("sendDataPacket",{packet:new At({destinationIdentities:[e],kind:Lt.RELIABLE,value:{case:"rpcAck",value:new Kt({requestId:t})}})})}publishRpcResponsePacket(e,t,n,i){this.emit("sendDataPacket",{packet:new At({destinationIdentities:[e],kind:Lt.RELIABLE,value:{case:"rpcResponse",value:new zt({requestId:t,value:i?{case:"error",value:i.toProto()}:{case:"payload",value:null!=n?n:""}})}})})}publishRpcResponse(e,t,n){return kr(this,void 0,void 0,(function*(){if(this.getRemoteParticipantClientProtocol(e)>=1)return void(yield this.outgoingDataStreamManager.sendText(n,{topic:$u,destinationIdentities:[e],attributes:{[eh.RPC_REQUEST_ID]:t}}));if(th(n)>15360)return this.log.warn("RPC Response payload too large for request ".concat(t,". To send larger responses, consider updating the sending client.")),void this.publishRpcResponsePacket(e,t,null,Xu.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"));this.publishRpcResponsePacket(e,t,n,null)}))}}class sh extends Ec{constructor(e,t,n,i,r,s){super(e,t,Va.Kind.Audio,n,s),this.monitorReceiver=()=>kr(this,void 0,void 0,(function*(){if(!this.receiver)return void(this._currentBitrate=0);const e=yield this.getReceiverStats();e&&this.prevStats&&this.receiver&&(this._currentBitrate=Sc(e,this.prevStats)),this.prevStats=e})),this.audioContext=i,this.webAudioPluginNodes=[],r&&(this.sinkId=r.deviceId)}setVolume(e){var t;for(const n of this.attachedElements)this.audioContext?null===(t=this.gainNode)||void 0===t||t.gain.setTargetAtTime(e,0,.1):n.volume=e;po()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(void 0!==this.elementVolume)return this.elementVolume;if(po())return 1;let e=0;return this.attachedElements.forEach((t=>{t.volume>e&&(e=t.volume)})),e}setSinkId(e){return kr(this,void 0,void 0,(function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map((t=>{if(no(t))return t.setSinkId(e)})))}))}attach(e){const t=0===this.attachedElements.length;return e?super.attach(e):e=super.attach(),this.sinkId&&no(e)&&e.setSinkId(this.sinkId).catch((e=>{this.log.error("Failed to set sink id on remote audio track",e,this.logContext)})),this.audioContext&&t&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),void 0!==this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let t;return e?(t=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(t=super.detach(),this.disconnectWebAudio()),t}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(t,n){this.disconnectWebAudio(),this.sourceNode=t.createMediaStreamSource(n.srcObject);let i=this.sourceNode;this.webAudioPluginNodes.forEach((e=>{i.connect(e),i=e})),this.gainNode=t.createGain(),i.connect(this.gainNode),this.gainNode.connect(t.destination),void 0!==this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),"running"!==t.state&&t.resume().then((()=>{"running"!==t.state&&this.emit(e.TrackEvent.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))})).catch((t=>{this.emit(e.TrackEvent.AudioPlaybackFailed,t)}))}disconnectWebAudio(){var e,t;null===(e=this.gainNode)||void 0===e||e.disconnect(),null===(t=this.sourceNode)||void 0===t||t.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return kr(this,void 0,void 0,(function*(){if(!this.receiver||!this.receiver.getStats)return;let e;return(yield this.receiver.getStats()).forEach((t=>{"inbound-rtp"===t.type&&(e={type:"audio",streamId:t.id,timestamp:t.timestamp,jitter:t.jitter,bytesReceived:t.bytesReceived,concealedSamples:t.concealedSamples,concealmentEvents:t.concealmentEvents,silentConcealedSamples:t.silentConcealedSamples,silentConcealmentEvents:t.silentConcealmentEvents,totalAudioEnergy:t.totalAudioEnergy,totalSamplesDuration:t.totalSamplesDuration})})),e}))}}class ah extends wr.EventEmitter{constructor(t,n,i,r){var s;super(),this.metadataMuted=!1,this.encryption=yt.NONE,this.log=or,this.handleMuted=()=>{this.emit(e.TrackEvent.Muted)},this.handleUnmuted=()=>{this.emit(e.TrackEvent.Unmuted)},this.log=dr(null!==(s=null==r?void 0:r.loggerName)&&void 0!==s?s:e.LoggerNames.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=t,this.trackSid=n,this.trackName=i,this.source=Va.Source.Unknown}setTrack(t){this.track&&(this.track.off(e.TrackEvent.Muted,this.handleMuted),this.track.off(e.TrackEvent.Unmuted,this.handleUnmuted)),this.track=t,t&&(t.on(e.TrackEvent.Muted,this.handleMuted),t.on(e.TrackEvent.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this)),Ua(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return void 0!==this.track}get isEncrypted(){return this.encryption!==yt.NONE}get audioTrack(){if(Fo(this.track))return this.track}get videoTrack(){if(Bo(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=Va.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===Va.Kind.Video&&e.width>0&&(this.dimensions={width:e.width,height:e.height},this.simulcasted=e.simulcast),this.encryption=e.encryption,this.trackInfo=e,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:e}))}}!function(e){var t,n;(t=e.SubscriptionStatus||(e.SubscriptionStatus={})).Desired="desired",t.Subscribed="subscribed",t.Unsubscribed="unsubscribed",(n=e.PermissionStatus||(e.PermissionStatus={})).Allowed="allowed",n.NotAllowed="not_allowed"}(ah||(ah={}));class oh extends ah{get isUpstreamPaused(){var e;return null===(e=this.track)||void 0===e?void 0:e.isUpstreamPaused}constructor(t,n,i,r){super(t,n.sid,n.name,r),this.track=void 0,this.handleTrackEnded=()=>{this.emit(e.TrackEvent.Ended)},this.handleCpuConstrained=()=>{this.track&&Bo(this.track)&&this.emit(e.TrackEvent.CpuConstrained,this.track)},this.updateInfo(n),this.setTrack(i)}setTrack(t){this.track&&(this.track.off(e.TrackEvent.Ended,this.handleTrackEnded),this.track.off(e.TrackEvent.CpuConstrained,this.handleCpuConstrained)),super.setTrack(t),t&&(t.on(e.TrackEvent.Ended,this.handleTrackEnded),t.on(e.TrackEvent.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 kr(this,void 0,void 0,(function*(){var e;return null===(e=this.track)||void 0===e?void 0:e.mute()}))}unmute(){return kr(this,void 0,void 0,(function*(){var e;return null===(e=this.track)||void 0===e?void 0:e.unmute()}))}pauseUpstream(){return kr(this,void 0,void 0,(function*(){var e;yield null===(e=this.track)||void 0===e?void 0:e.pauseUpstream()}))}resumeUpstream(){return kr(this,void 0,void 0,(function*(){var e;yield null===(e=this.track)||void 0===e?void 0:e.resumeUpstream()}))}getTrackFeatures(){var e;if(Fo(this.track)){const t=this.track.getSourceTrackSettings(),n=new Set;return t.autoGainControl&&n.add(lt.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&n.add(lt.TF_ECHO_CANCELLATION),t.noiseSuppression&&n.add(lt.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&n.add(lt.TF_STEREO),(null===(e=this.options)||void 0===e?void 0:e.dtx)||n.add(lt.TF_NO_DTX),this.track.enhancedNoiseCancellation&&n.add(lt.TF_ENHANCED_NOISE_CANCELLATION),Array.from(n.values())}return[]}}function ch(e,t){return kr(this,void 0,void 0,(function*(){null!=e||(e={});let i=!1;const r=Fa(e),s=r.audioProcessor,a=r.videoProcessor,o=r.optionsWithoutProcessor;let c=o.audio,d=o.video;if(s&&"object"==typeof o.audio&&(o.audio.processor=s),a&&"object"==typeof o.video&&(o.video.processor=a),e.audio&&"object"==typeof o.audio&&"string"==typeof o.audio.deviceId){const e=o.audio.deviceId;o.audio.deviceId={exact:e},i=!0,c=Object.assign(Object.assign({},o.audio),{deviceId:{ideal:e}})}if(o.video&&"object"==typeof o.video&&"string"==typeof o.video.deviceId){const e=o.video.deviceId;o.video.deviceId={exact:e},i=!0,d=Object.assign(Object.assign({},o.video),{deviceId:{ideal:e}})}!0===o.audio?o.audio={deviceId:"default"}:"object"==typeof o.audio&&null!==o.audio&&(o.audio=Object.assign(Object.assign({},o.audio),{deviceId:o.audio.deviceId||"default"})),!0===o.video?o.video={deviceId:"default"}:"object"!=typeof o.video||o.video.deviceId||(o.video.deviceId="default");const l=_a(Pa(o,zd,Gd)),u=navigator.mediaDevices.getUserMedia(l);o.audio&&(Lc.userMediaPromiseMap.set("audioinput",u),u.catch((()=>Lc.userMediaPromiseMap.delete("audioinput")))),o.video&&(Lc.userMediaPromiseMap.set("videoinput",u),u.catch((()=>Lc.userMediaPromiseMap.delete("videoinput"))));try{const e=yield u;return yield Promise.all(e.getTracks().map((n=>kr(this,void 0,void 0,(function*(){let i;const r="audio"===n.kind?l.audio:l.video;"boolean"!=typeof r&&(i=r);const o=n.getSettings().deviceId;(null==i?void 0:i.deviceId)&&Oo(i.deviceId)!==o?i.deviceId=o:i||(i={deviceId:o});const c=function(e,t,n){switch(e.kind){case"audio":return new pl(e,t,!1,void 0,n);case"video":return new Rl(e,t,!1,n);default:throw new ea("unsupported track type: ".concat(e.kind))}}(n,i,t);return c.kind===Va.Kind.Video?c.source=Va.Source.Camera:c.kind===Va.Kind.Audio&&(c.source=Va.Source.Microphone),c.mediaStream=e,Fo(c)&&s?yield c.setProcessor(s):Bo(c)&&a&&(yield c.setProcessor(a)),c})))))}catch(n){if(!i)throw n;return ch(Object.assign(Object.assign({},e),{audio:c,video:d}),t)}}))}function dh(e){return kr(this,void 0,void 0,(function*(){return(yield ch({audio:!1,video:null==e||e}))[0]}))}function lh(e){return kr(this,void 0,void 0,(function*(){return(yield ch({audio:null==e||e,video:!1}))[0]}))}var uh,hh;e.ConnectionQuality=void 0,(uh=e.ConnectionQuality||(e.ConnectionQuality={})).Excellent="excellent",uh.Good="good",uh.Poor="poor",uh.Lost="lost",uh.Unknown="unknown";class ph extends wr.EventEmitter{get logContext(){var e,t;return Object.assign({},null===(t=null===(e=this.loggerOptions)||void 0===e?void 0:e.loggerContextCb)||void 0===t?void 0:t.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every((e=>e.isEncrypted))}get isAgent(){var e;return(null===(e=this.permissions)||void 0===e?void 0:e.agent)||this.kind===ft.AGENT}get isActive(){var e;return(null===(e=this.participantInfo)||void 0===e?void 0:e.state)===vt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(t,n,i,r,s,a){let o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:ft.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=e.ConnectionQuality.Unknown,this.log=or,this.loggerOptions=a,this.log=dr(null!==(c=null==a?void 0:a.loggerName)&&void 0!==c?c:e.LoggerNames.Participant,(()=>this.logContext)),this.setMaxListeners(100),this.sid=t,this.identity=n,this.name=i,this.metadata=r,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=o,this._attributes=null!=s?s:{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const t of this.trackPublications){const n=B(t,2)[1];if(n.source===e)return n}}getTrackPublicationByName(e){for(const t of this.trackPublications){const n=B(t,2)[1];if(n.trackName===e)return n}}waitUntilActive(){return this.isActive?Promise.resolve():(this.activeFuture||(this.activeFuture=new Mo,this.once(e.ParticipantEvent.Active,(()=>{var e,t;null===(t=null===(e=this.activeFuture)||void 0===e?void 0:e.resolve)||void 0===t||t.call(e),this.activeFuture=void 0}))),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const t=this.getTrackPublication(Va.Source.Camera);return!(null===(e=null==t?void 0:t.isMuted)||void 0===e||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(Va.Source.Microphone);return!(null===(e=null==t?void 0:t.isMuted)||void 0===e||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(Va.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(1e3*Number.parseInt(this.participantInfo.joinedAt.toString())):new Date}updateInfo(t){var n;return!(this.participantInfo&&this.participantInfo.sid===t.sid&&this.participantInfo.version>t.version)&&(this.identity=t.identity,this.sid=t.sid,this._setName(t.name),this._setMetadata(t.metadata),this._setAttributes(t.attributes),t.state===vt.ACTIVE&&(null===(n=this.participantInfo)||void 0===n?void 0:n.state)!==vt.ACTIVE&&this.emit(e.ParticipantEvent.Active),t.permission&&this.setPermissions(t.permission),this.participantInfo=t,!0)}_setMetadata(t){const n=this.metadata!==t,i=this.metadata;this.metadata=t,n&&this.emit(e.ParticipantEvent.ParticipantMetadataChanged,i)}_setName(t){const n=this.name!==t;this.name=t,n&&this.emit(e.ParticipantEvent.ParticipantNameChanged,t)}_setAttributes(t){const n=function(e,t){var n;void 0===e&&(e={}),void 0===t&&(t={});const i=[...Object.keys(t),...Object.keys(e)],r={};for(const s of i)e[s]!==t[s]&&(r[s]=null!==(n=t[s])&&void 0!==n?n:"");return r}(this.attributes,t);this._attributes=t,Object.keys(n).length>0&&this.emit(e.ParticipantEvent.AttributesChanged,n)}setPermissions(t){var n,i,r,s,a,o;const c=this.permissions,d=t.canPublish!==(null===(n=this.permissions)||void 0===n?void 0:n.canPublish)||t.canSubscribe!==(null===(i=this.permissions)||void 0===i?void 0:i.canSubscribe)||t.canPublishData!==(null===(r=this.permissions)||void 0===r?void 0:r.canPublishData)||t.hidden!==(null===(s=this.permissions)||void 0===s?void 0:s.hidden)||t.recorder!==(null===(a=this.permissions)||void 0===a?void 0:a.recorder)||t.canPublishSources.length!==this.permissions.canPublishSources.length||t.canPublishSources.some(((e,t)=>{var n;return e!==(null===(n=this.permissions)||void 0===n?void 0:n.canPublishSources[t])}))||t.canSubscribeMetrics!==(null===(o=this.permissions)||void 0===o?void 0:o.canSubscribeMetrics);return this.permissions=t,d&&this.emit(e.ParticipantEvent.ParticipantPermissionsChanged,c),d}setIsSpeaking(t){t!==this.isSpeaking&&(this.isSpeaking=t,t&&(this.lastSpokeAt=new Date),this.emit(e.ParticipantEvent.IsSpeakingChanged,t))}setConnectionQuality(t){const n=this._connectionQuality;this._connectionQuality=function(t){switch(t){case st.EXCELLENT:return e.ConnectionQuality.Excellent;case st.GOOD:return e.ConnectionQuality.Good;case st.POOR:return e.ConnectionQuality.Poor;case st.LOST:return e.ConnectionQuality.Lost;default:return e.ConnectionQuality.Unknown}}(t),n!==this._connectionQuality&&this.emit(e.ParticipantEvent.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,t;this.activeFuture&&(null===(t=(e=this.activeFuture).reject)||void 0===t||t.call(e,new Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach((t=>Fo(t.track)&&t.track.setAudioContext(e)))}addTrackPublication(t){this.log.debug("adding track publication",{trackSid:t.trackSid,source:t.source,kind:t.kind}),t.on(e.TrackEvent.Muted,(()=>{this.emit(e.ParticipantEvent.TrackMuted,t)})),t.on(e.TrackEvent.Unmuted,(()=>{this.emit(e.ParticipantEvent.TrackUnmuted,t)}));const n=t;switch(n.track&&(n.track.sid=t.trackSid),this.trackPublications.set(t.trackSid,t),t.kind){case Va.Kind.Audio:this.audioTrackPublications.set(t.trackSid,t);break;case Va.Kind.Video:this.videoTrackPublications.set(t.trackSid,t)}}}class mh extends ph{constructor(t,i,s,a,o,c,d,l){super(t,i,void 0,void 0,void 0,{loggerName:a.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=yt.NONE,this.e2eeStateMutex=new r,this.enabledPublishVideoCodecs=[],this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Mo)},this.handleReconnected=()=>{var e,t;null===(t=null===(e=this.reconnectFuture)||void 0===e?void 0:e.resolve)||void 0===t||t.call(e),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var e,t,n,i,r,s;this.reconnectFuture&&(this.reconnectFuture.promise.catch((e=>this.log.warn(e.message))),null===(t=null===(e=this.reconnectFuture)||void 0===e?void 0:e.reject)||void 0===t||t.call(e,new Error("Got disconnected during reconnection attempt")),this.reconnectFuture=void 0),this.signalConnectedFuture&&(null===(i=(n=this.signalConnectedFuture).reject)||void 0===i||i.call(n,new Error("Got disconnected without signal connected")),this.signalConnectedFuture=void 0),null===(s=null===(r=this.activeAgentFuture)||void 0===r?void 0:r.reject)||void 0===s||s.call(r,new Error("Got disconnected without active agent present")),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=e=>{var t,n;e.participant&&this.updateInfo(e.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new Mo),null===(n=(t=this.signalConnectedFuture).resolve)||void 0===n||n.call(t)},this.handleSignalRequestResponse=e=>{const t=e.requestId,n=e.reason,i=e.message,r=this.pendingSignalRequests.get(t);switch(r&&(n!==Ki.OK&&r.reject(new aa(i,n)),this.pendingSignalRequests.delete(t)),e.request.case){case"publishDataTrack":{let t;switch(e.reason){case Ki.NOT_ALLOWED:t=Wu.notAllowed(e.message);break;case Ki.DUPLICATE_NAME:t=Wu.duplicateName(e.message);break;case Ki.INVALID_NAME:t=Wu.invalidName(e.message);break;case Ki.LIMIT_EXCEEDED:t=Wu.limitReached(e.message);break;default:t=Wu.unknown(e.reason,e.message)}this.roomOutgoingDataTrackManager.receivedSfuPublishResponse(e.request.value.pubHandle,{type:"error",error:t});break}}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions}),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map((e=>function(e){var t,n,i;if(!e.participantSid&&!e.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new Di({participantIdentity:null!==(t=e.participantIdentity)&&void 0!==t?t:"",participantSid:null!==(n=e.participantSid)&&void 0!==n?n:"",allTracks:null!==(i=e.allowAll)&&void 0!==i&&i,trackSids:e.allowedTrackSids||[]})}(e))))},this.onTrackUnmuted=e=>{this.onTrackMuted(e,e.isUpstreamPaused)},this.onTrackMuted=(e,t)=>{void 0===t&&(t=!0),e.sid?this.engine.updateMuteStatus(e.sid,t):this.log.error("could not update mute status for unpublished track",Ua(e))},this.onTrackUpstreamPaused=e=>{this.log.debug("upstream paused",Ua(e)),this.onTrackMuted(e,!0)},this.onTrackUpstreamResumed=e=>{this.log.debug("upstream resumed",Ua(e)),this.onTrackMuted(e,e.isMuted)},this.onTrackFeatureUpdate=e=>{const t=this.audioTrackPublications.get(e.sid);t?this.engine.client.sendUpdateLocalAudioTrack(t.trackSid,t.getTrackFeatures()):this.log.warn("Could not update local audio track settings, missing publication for track ".concat(e.sid))},this.onTrackCpuConstrained=(t,n)=>{this.log.debug("track cpu constrained",Ua(n)),this.emit(e.ParticipantEvent.LocalTrackCpuConstrained,t,n)},this.handleSubscribedQualityUpdate=e=>kr(this,void 0,void 0,(function*(){var t,n,i,r,s;if(!(null===(s=this.roomOptions)||void 0===s?void 0:s.dynacast))return;const a=this.videoTrackPublications.get(e.trackSid);if(!a)return void this.log.warn("received subscribed quality update for unknown track",{trackSid:e.trackSid});if(!a.videoTrack)return;const o=yield a.videoTrack.setPublishingCodecs(e.subscribedCodecs);try{for(var c,d=!0,l=Sr(o);!(t=(c=yield l.next()).done);d=!0){r=c.value,d=!1;const e=r;Ta(e)&&(this.log.debug("publish ".concat(e," for ").concat(a.videoTrack.sid),Ua(a)),yield this.publishAdditionalCodecForTrack(a.videoTrack,e,a.options))}}catch(u){n={error:u}}finally{try{d||t||!(i=l.return)||(yield i.call(l))}finally{if(n)throw n.error}}})),this.handleLocalTrackUnpublished=e=>{const t=this.trackPublications.get(e.trackSid);t?this.unpublishTrack(t.track):this.log.warn("received unpublished event for unknown track",{trackSid:e.trackSid})},this.handleTrackEnded=e=>kr(this,void 0,void 0,(function*(){if(e.source===Va.Source.ScreenShare||e.source===Va.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Ua(e)),this.unpublishTrack(e);else if(e.isUserProvided)yield e.mute();else if(qo(e)||jo(e))try{if(ho())try{const t=yield null===navigator||void 0===navigator?void 0:navigator.permissions.query({name:e.source===Va.Source.Camera?"camera":"microphone"});if(t&&"denied"===t.state)throw this.log.warn("user has revoked access to ".concat(e.source),Ua(e)),t.onchange=()=>{"denied"!==t.state&&(e.isMuted||e.restartTrack(),t.onchange=null)},new Error("GetUserMedia Permission denied")}catch(n){}e.isMuted||(this.log.debug("track ended, attempting to use a different device",Ua(e)),qo(e)?yield e.restartTrack({deviceId:"default"}):yield e.restartTrack())}catch(n){this.log.warn("could not restart track, muting instead",Ua(e)),yield e.mute()}})),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=s,this.roomOptions=a,this.setupEngine(s),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.roomOutgoingDataStreamManager=o,this.roomOutgoingDataTrackManager=c,this.rpcClientManager=d,this.rpcServerManager=l}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==yt.NONE}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setupEngine(t){var n;this.engine=t,this.engine.on(e.EngineEvent.RemoteMute,((e,t)=>{const n=this.trackPublications.get(e);n&&n.track&&(t?n.mute():n.unmute())})),(null===(n=this.signalConnectedFuture)||void 0===n?void 0:n.isResolved)&&(this.signalConnectedFuture=void 0),this.engine.on(e.EngineEvent.Connected,this.handleReconnected).on(e.EngineEvent.SignalConnected,this.handleSignalConnected).on(e.EngineEvent.SignalRestarted,this.handleReconnected).on(e.EngineEvent.SignalResumed,this.handleReconnected).on(e.EngineEvent.Restarting,this.handleReconnecting).on(e.EngineEvent.Resuming,this.handleReconnecting).on(e.EngineEvent.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(e.EngineEvent.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(e.EngineEvent.Closing,this.handleClosing).on(e.EngineEvent.SignalRequestResponse,this.handleSignalRequestResponse)}setMetadata(e){return kr(this,void 0,void 0,(function*(){yield this.requestMetadataUpdate({metadata:e})}))}setName(e){return kr(this,void 0,void 0,(function*(){yield this.requestMetadataUpdate({name:e})}))}setAttributes(e){return kr(this,void 0,void 0,(function*(){yield this.requestMetadataUpdate({attributes:e})}))}requestMetadataUpdate(e){return kr(this,arguments,void 0,(function(e){var t=this;let i=e.metadata,r=e.name,s=e.attributes;return function*(){return new Ls(((e,a)=>kr(t,void 0,void 0,(function*(){var t,o;try{let n=!1;const c=yield this.engine.client.sendUpdateLocalMetadata(null!==(t=null!=i?i:this.metadata)&&void 0!==t?t:"",null!==(o=null!=r?r:this.name)&&void 0!==o?o:"",s),d=performance.now();for(this.pendingSignalRequests.set(c,{resolve:e,reject:e=>{a(e),n=!0},values:{name:r,metadata:i,attributes:s}});performance.now()-d<5e3&&!n;){if((!r||this.name===r)&&(!i||this.metadata===i)&&(!s||Object.entries(s).every((e=>{let t=B(e,2),n=t[0],i=t[1];return this.attributes[n]===i||""===i&&!this.attributes[n]}))))return this.pendingSignalRequests.delete(c),void e();yield Ga(50)}a(new aa("Request to update local metadata timed out","TimeoutError"))}catch(n){n instanceof Error?a(n):a(new Error(String(n)))}}))))}()}))}setCameraEnabled(e,t,n){return this.setTrackEnabled(Va.Source.Camera,e,t,n)}setMicrophoneEnabled(e,t,n){return this.setTrackEnabled(Va.Source.Microphone,e,t,n)}setScreenShareEnabled(e,t,n){return this.setTrackEnabled(Va.Source.ScreenShare,e,t,n)}setE2EEEnabled(e){return kr(this,void 0,void 0,(function*(){const t=yield this.e2eeStateMutex.lock();try{if(this.encryptionType=e?yt.GCM:yt.NONE,yield Promise.all(this.pendingPublishPromises.values()),0===this.trackPublications.size||Array.from(this.trackPublications.values()).every((t=>t.isEncrypted===e)))return;yield this.republishAllTracks(void 0,!1)}finally{t()}}))}setTrackEnabled(t,i,r,s){return kr(this,void 0,void 0,(function*(){var a,o;this.log.debug("setTrackEnabled",{source:t,enabled:i}),this.republishPromise&&(yield this.republishPromise);let c=this.getTrackPublication(t);if(i)if(c)yield c.unmute();else{let i;if(this.pendingPublishing.has(t)){const e=yield this.waitForPendingPublicationOfSource(t);return e||this.log.info("waiting for pending publication promise timed out",{source:t}),yield null==e?void 0:e.unmute(),e}this.pendingPublishing.add(t);try{switch(t){case Va.Source.Camera:i=yield this.createTracks({video:null===(a=r)||void 0===a||a});break;case Va.Source.Microphone:i=yield this.createTracks({audio:null===(o=r)||void 0===o||o});break;case Va.Source.ScreenShare:i=yield this.createScreenTracks(Object.assign({},r));break;default:throw new ea(t)}}catch(n){throw null==i||i.forEach((e=>{e.stop()})),n instanceof Error&&this.emit(e.ParticipantEvent.MediaDevicesError,n,Aa(t)),this.pendingPublishing.delete(t),n}for(const e of i){const n=Object.assign(Object.assign({},this.roomOptions.publishDefaults),r);t===Va.Source.Microphone&&Fo(e)&&n.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone"),e.startPreConnectBuffer())}try{const e=[];for(const t of i)this.log.info("publishing track",Ua(t)),e.push(this.publishTrack(t,s));c=B(yield Promise.all(e),1)[0]}catch(n){throw null==i||i.forEach((e=>{e.stop()})),n}finally{this.pendingPublishing.delete(t)}}else if(!(null==c?void 0:c.track)&&this.pendingPublishing.has(t)&&(c=yield this.waitForPendingPublicationOfSource(t),c||this.log.info("waiting for pending publication promise timed out",{source:t})),c&&c.track)if(t===Va.Source.ScreenShare){const e=[this.unpublishTrack(c.track)],t=this.getTrackPublication(Va.Source.ScreenShareAudio);t&&t.track&&e.push(this.unpublishTrack(t.track)),c=B(yield Promise.all(e),1)[0]}else yield c.mute();return c}))}enableCameraAndMicrophone(){return kr(this,void 0,void 0,(function*(){if(!this.pendingPublishing.has(Va.Source.Camera)&&!this.pendingPublishing.has(Va.Source.Microphone)){this.pendingPublishing.add(Va.Source.Camera),this.pendingPublishing.add(Va.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map((e=>this.publishTrack(e))))}finally{this.pendingPublishing.delete(Va.Source.Camera),this.pendingPublishing.delete(Va.Source.Microphone)}}}))}createTracks(t){return kr(this,void 0,void 0,(function*(){var n,i;null!=t||(t={});const r=Pa(t,null===(n=this.roomOptions)||void 0===n?void 0:n.audioCaptureDefaults,null===(i=this.roomOptions)||void 0===i?void 0:i.videoCaptureDefaults);try{const t=yield ch(r,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return t.map((t=>(Fo(t)&&(this.microphoneError=void 0,t.setAudioContext(this.audioContext),t.source=Va.Source.Microphone,this.emit(e.ParticipantEvent.AudioStreamAcquired)),Bo(t)&&(this.cameraError=void 0,t.source=Va.Source.Camera),t)))}catch(s){throw s instanceof Error&&(t.audio&&(this.microphoneError=s),t.video&&(this.cameraError=s)),s}}))}createScreenTracks(t){return kr(this,void 0,void 0,(function*(){if(void 0===t&&(t={}),void 0===navigator.mediaDevices.getDisplayMedia)throw new $s("getDisplayMedia not supported");void 0!==t.resolution||lo()||(t.resolution=Ra.h1080fps30.resolution);const n=La(t),i=yield navigator.mediaDevices.getDisplayMedia(n),r=i.getVideoTracks();if(0===r.length)throw new ea("no video track found");const s=new Rl(r[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=Va.Source.ScreenShare,t.contentHint&&(s.mediaStreamTrack.contentHint=t.contentHint);const a=[s];if(i.getAudioTracks().length>0){this.emit(e.ParticipantEvent.AudioStreamAcquired);const t=new pl(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});t.source=Va.Source.ScreenShareAudio,a.push(t)}return a}))}publishTrack(e,t){return kr(this,void 0,void 0,(function*(){return this.publishOrRepublishTrack(e,t)}))}waitForNextEngineRestart(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:15e3;return new Promise(((n,i)=>{const r=()=>{clearTimeout(o),this.engine.off(e.EngineEvent.Restarted,s),this.engine.off(e.EngineEvent.Closing,a)},s=()=>{r(),n()},a=()=>{r(),i(new Error("engine closed before restart completed"))},o=setTimeout((()=>{r(),i(new Error("timed out waiting for engine restart"))}),t);this.engine.once(e.EngineEvent.Restarted,s),this.engine.once(e.EngineEvent.Closing,a)}))}publishOrRepublishTrack(e,t){return kr(this,arguments,void 0,(function(e,t){var i=this;let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return function*(){var a,o,c,d;let l,u;if(qo(e)&&e.setAudioContext(i.audioContext),yield null===(a=i.reconnectFuture)||void 0===a?void 0:a.promise,i.republishPromise&&!r&&(yield i.republishPromise),Uo(e)&&i.pendingPublishPromises.has(e)&&(yield i.pendingPublishPromises.get(e)),e instanceof MediaStreamTrack)l=e.getConstraints();else{let t;switch(l=e.constraints,e.source){case Va.Source.Microphone:t="audioinput";break;case Va.Source.Camera:t="videoinput"}t&&i.activeDeviceMap.has(t)&&(l=Object.assign(Object.assign({},l),{deviceId:i.activeDeviceMap.get(t)}))}if(e instanceof MediaStreamTrack)switch(e.kind){case"audio":e=new pl(e,l,!0,i.audioContext,{loggerName:i.roomOptions.loggerName,loggerContextCb:()=>i.logContext});break;case"video":e=new Rl(e,l,!0,{loggerName:i.roomOptions.loggerName,loggerContextCb:()=>i.logContext});break;default:throw new ea("unsupported MediaStreamTrack kind ".concat(e.kind))}else e.updateLoggerOptions({loggerName:i.roomOptions.loggerName,loggerContextCb:()=>i.logContext});if(i.trackPublications.forEach((t=>{t.track&&t.track===e&&(u=t)})),u)return i.log.warn("track has already been published, skipping",Ua(u)),u;const h=Object.assign(Object.assign({},i.roomOptions.publishDefaults),t),p="channelCount"in e.mediaStreamTrack.getSettings()&&2===e.mediaStreamTrack.getSettings().channelCount||2===e.mediaStreamTrack.getConstraints().channelCount,m=null!==(o=h.forceStereo)&&void 0!==o?o:p;m&&(void 0===h.dtx&&i.log.debug("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Ua(e)),void 0===h.red&&i.log.debug("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),null!==(c=h.dtx)&&void 0!==c||(h.dtx=!1),null!==(d=h.red)&&void 0!==d||(h.red=!1)),!function(){const e=Us(),t="17.2";if(e)return"Safari"!==e.name&&"iOS"!==e.os||!!("iOS"===e.os&&e.osVersion&&yo(e.osVersion,t)>=0)||"Safari"===e.name&&yo(e.version,t)>=0}()&&i.roomOptions.e2ee&&(i.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2"),h.simulcast=!1),h.source&&(e.source=h.source);const g=new Promise(((t,r)=>kr(i,void 0,void 0,(function*(){try{if(this.engine.client.currentState!==md.CONNECTED){this.log.debug("deferring track publication until signal is connected",{track:Ua(e)});let n=!1;const i=setTimeout((()=>{n=!0,e.stop(),r(new sa("publishing rejected as engine not connected within timeout",408))}),15e3);if(yield this.waitUntilEngineConnected(),clearTimeout(i),n)return;const s=yield this.publish(e,h,m);t(s)}else try{const n=yield this.publish(e,h,m);t(n)}catch(n){r(n)}}catch(n){r(n)}}))));i.pendingPublishPromises.set(e,g);try{return yield g}catch(n){if(!s&&n instanceof ia)return i.log.warn("negotiation due to track publish failed, retrying after reconnect",{error:n}),i.pendingPublishPromises.delete(e),yield i.waitForNextEngineRestart(),yield i.publishOrRepublishTrack(e,t,r,!0);throw n}finally{i.pendingPublishPromises.delete(e)}}()}))}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new Mo),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Ua(e)),!1;const t=this.permissions,n=t.canPublish,i=t.canPublishSources;return!(!n||0!==i.length&&!i.map((e=>function(e){switch(e){case it.CAMERA:return Va.Source.Camera;case it.MICROPHONE:return Va.Source.Microphone;case it.SCREEN_SHARE:return Va.Source.ScreenShare;case it.SCREEN_SHARE_AUDIO:return Va.Source.ScreenShareAudio;default:return Va.Source.Unknown}}(e))).includes(e.source))||(this.log.warn("insufficient permissions to publish",Ua(e)),!1)}publish(t,i,r){return kr(this,void 0,void 0,(function*(){var s,a,o,c,d,l,u,h,p,m,g;if(!this.hasPermissionsToPublish(t))throw new sa("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find((e=>Uo(t)&&e.source===t.source))&&t.source!==Va.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(t.source),Ua(t)),i.stopMicTrackOnMute&&Fo(t)&&(t.stopOnMute=!0),t.source===Va.Source.ScreenShare&&ro()&&(i.simulcast=!1),"av1"!==i.videoCodec||Ya()||(i.videoCodec=void 0),"vp9"!==i.videoCodec||Xa()||(i.videoCodec=void 0),void 0===i.videoCodec&&(i.videoCodec=Hd),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some((e=>i.videoCodec===Na(e.mime)))||(i.videoCodec=Na(this.enabledPublishVideoCodecs[0].mime)));const v=i.videoCodec;t.on(e.TrackEvent.Muted,this.onTrackMuted),t.on(e.TrackEvent.Unmuted,this.onTrackUnmuted),t.on(e.TrackEvent.Ended,this.handleTrackEnded),t.on(e.TrackEvent.UpstreamPaused,this.onTrackUpstreamPaused),t.on(e.TrackEvent.UpstreamResumed,this.onTrackUpstreamResumed),t.on(e.TrackEvent.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const f=[],k=!(null===(s=i.dtx)||void 0===s||s),y=t.getSourceTrackSettings();y.autoGainControl&&f.push(lt.TF_AUTO_GAIN_CONTROL),y.echoCancellation&&f.push(lt.TF_ECHO_CANCELLATION),y.noiseSuppression&&f.push(lt.TF_NOISE_SUPPRESSION),y.channelCount&&y.channelCount>1&&f.push(lt.TF_STEREO),k&&f.push(lt.TF_NO_DTX),qo(t)&&t.hasPreConnectBuffer&&f.push(lt.TF_PRECONNECT_BUFFER);const b=this.normalizeRequestedFrameMetadataOptions(t,i),T=new Kn({cid:t.mediaStreamTrack.id,name:i.name,type:Va.kindToProto(t.kind),muted:t.isMuted,source:Va.sourceToProto(t.source),disableDtx:k,encryption:this.encryptionType,stereo:r,disableRed:this.isE2EEEnabled||!(null===(a=i.red)||void 0===a||a),stream:null==i?void 0:i.stream,backupCodecPolicy:null==i?void 0:i.backupCodecPolicy,audioFeatures:f,packetTrailerFeatures:b});let S;if(t.kind===Va.Kind.Video){let e;try{e=yield t.waitForDimensions()}catch(n){const r=null!==(c=null===(o=this.roomOptions.videoCaptureDefaults)||void 0===o?void 0:o.resolution)&&void 0!==c?c:Ca.h720.resolution;e={width:r.width,height:r.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign({},Ua(t)),{dims:e}))}if(T.width=e.width,T.height=e.height,jo(t)){!eo(v,i)||!to()&&((E=null===(d=this.engine)||void 0===d?void 0:d.serverVersion)&&yo(E,"1.13.6")>0)||(i.simulcast=!1,this.log.info("SVC simulcast is not supported, disabling simulcast.",Ua(t)));const e=eo(v,i);Za(v)&&!e&&(t.source===Va.Source.ScreenShare&&(i.scalabilityMode="L1T3","contentHint"in t.mediaStreamTrack&&(t.mediaStreamTrack.contentHint="motion",this.log.debug("forcing contentHint to motion for screenshare with SVC codecs",Ua(t)))),i.scalabilityMode=null!==(l=i.scalabilityMode)&&void 0!==l?l:"L3T3_KEY");const n=new Hn({codec:v,cid:t.mediaStreamTrack.id});e&&(n.videoLayerMode=Ot.ONE_SPATIAL_LAYER_PER_STREAM),T.simulcastCodecs=[n],!0===i.backupCodec&&(i.backupCodec={codec:Hd}),i.backupCodec&&v!==i.backupCodec.codec&&T.encryption===yt.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),T.simulcastCodecs.push(new Hn({codec:i.backupCodec.codec,cid:""})))}S=bl(t.source===Va.Source.ScreenShare,T.width,T.height,i),T.layers=_l(T.width,T.height,S,Za(i.videoCodec)&&!eo(i.videoCodec,i))}else t.kind===Va.Kind.Audio&&(S=[{maxBitrate:null===(u=i.audioPreset)||void 0===u?void 0:u.maxBitrate,priority:null!==(p=null===(h=i.audioPreset)||void 0===h?void 0:h.priority)&&void 0!==p?p:"high",networkPriority:null!==(g=null===(m=i.audioPreset)||void 0===m?void 0:m.priority)&&void 0!==g?g:"high"}]);var E;if(!this.engine||this.engine.isClosed)throw new na("cannot publish track when not connected");const C=()=>kr(this,void 0,void 0,(function*(){var n,r;if(!this.engine.pcManager)throw new na("pcManager is not ready");if(t.sender=yield this.engine.createSender(t,i,S),jo(t)&&(t.publishOptions=i),this.emit(e.ParticipantEvent.LocalSenderCreated,t.sender,t),jo(t)&&(null!==(n=i.degradationPreference)&&void 0!==n||(i.degradationPreference=function(e){switch(e.source){case Va.Source.Camera:return"maintain-framerate";case Va.Source.ScreenShare:return"maintain-resolution";default:return"balanced"}}(t)),t.setDegradationPreference(i.degradationPreference)),S)if(ro()&&t.kind===Va.Kind.Audio){let e;for(const n of this.engine.pcManager.publisher.getTransceivers())if(n.sender===t.sender){e=n;break}e&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:e,codec:"opus",maxbr:(null===(r=S[0])||void 0===r?void 0:r.maxBitrate)?S[0].maxBitrate/1e3:0})}else if(t.codec&&Do(t.codec)){const e=function(e,t,n){var i,r;return Za(e)&&!eo(e,t)?null!==(r=null===(i=n[0])||void 0===i?void 0:i.maxBitrate)&&void 0!==r?r:0:n.reduce(((e,t)=>{var n;return e+(null!==(n=t.maxBitrate)&&void 0!==n?n:0)}),0)}(t.codec,i,S);e>0&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:T.cid,codec:t.codec,maxbr:e/1e3,isScreenShare:t.source===Va.Source.ScreenShare})}yield this.engine.negotiate()}));let w;const R=new Promise(((e,i)=>kr(this,void 0,void 0,(function*(){var r;try{w=yield this.engine.addTrack(T),e(w)}catch(s){if(t.sender&&(null===(r=this.engine.pcManager)||void 0===r?void 0:r.publisher)){try{this.engine.pcManager.publisher.removeTrack(t.sender)}catch(n){this.log.error(n)}yield this.engine.negotiate().catch((e=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign({},Ua(t)),{error:e}))}))}i(s)}}))));if(this.enabledPublishVideoCodecs.length>0&&0===b.length){const e=yield Promise.all([R,C()]);w=e[0]}else{let e;if(w=yield R,w.codecs.forEach((t=>{void 0===e&&(e=t.mimeType)})),e&&t.kind===Va.Kind.Video){const n=Na(e);n!==v&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign({},Ua(t)),{codec:n})),i.videoCodec=n,S=bl(t.source===Va.Source.ScreenShare,T.width,T.height,i))}yield C()}const P=new oh(t.kind,w,t,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(P.on(e.TrackEvent.CpuConstrained,(e=>this.onTrackCpuConstrained(e,P))),P.options=i,t.sid=w.sid,jo(t)&&(t.publishOptions=i,T.width&&T.height&&(t.lastEncodedDimensions={width:T.width,height:T.height})),this.log.debug("publishing ".concat(t.kind," with encodings"),{encodings:S,trackInfo:w}),jo(t)?t.startMonitor(this.engine.client):qo(t)&&t.startMonitor(),this.addTrackPublication(P),this.emit(e.ParticipantEvent.LocalTrackPublished,P),qo(t)&&w.audioFeatures.includes(lt.TF_PRECONNECT_BUFFER)){const i=t.getPreConnectBuffer(),r=t.getPreConnectBufferMimeType();if(this.on(e.ParticipantEvent.LocalTrackSubscribed,(e=>{if(e.trackSid===w.sid){if(!t.hasPreConnectBuffer)return void this.log.warn("subscribe event came to late, buffer already closed");this.log.debug("finished recording preconnect buffer",Ua(t)),t.stopPreConnectBuffer()}})),i){const e=new Promise(((e,s)=>kr(this,void 0,void 0,(function*(){var a,o,c,d,l,u;try{this.log.debug("waiting for agent",Ua(t));const n=setTimeout((()=>{s(new Error("agent not active within 10 seconds"))}),1e4),v=yield this.waitUntilActiveAgentPresent();clearTimeout(n),this.log.debug("sending preconnect buffer",Ua(t));const f=yield this.streamBytes({name:"preconnect-buffer",mimeType:r,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[v.identity],attributes:{trackId:P.trackSid,sampleRate:String(null!==(l=y.sampleRate)&&void 0!==l?l:"48000"),channels:String(null!==(u=y.channelCount)&&void 0!==u?u:"1")}});try{for(var h,p=!0,m=Sr(i);!(a=(h=yield m.next()).done);p=!0){d=h.value,p=!1;const e=d;yield f.write(e)}}catch(g){o={error:g}}finally{try{p||a||!(c=m.return)||(yield c.call(m))}finally{if(o)throw o.error}}yield f.close(),e()}catch(n){s(n)}}))));e.then((()=>{this.log.debug("preconnect buffer sent successfully",Ua(t))})).catch((e=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign({},Ua(t)),{error:e}))}))}}return P}))}canPublishFrameMetadata(){var e;return!!(this.roomOptions.e2ee||this.roomOptions.encryption||kc(null!==(e=this.roomOptions.frameMetadata)&&void 0!==e?e:this.roomOptions.packetTrailer))}normalizeRequestedFrameMetadataOptions(e,t){var n;const i=null!==(n=t.frameMetadata)&&void 0!==n?n:t.packetTrailer;if(e.kind!==Va.Kind.Video||!yc(i))return t.frameMetadata=void 0,t.packetTrailer=void 0,[];if(!this.canPublishFrameMetadata())return this.log.warn("frame metadata transform not supported; not advertising features",Object.assign(Object.assign({},this.logContext),Ua(e))),t.frameMetadata=void 0,t.packetTrailer=void 0,[];const r=function(e){const t=[];return(null==e?void 0:e.timestamp)&&t.push(ut.PTF_USER_TIMESTAMP),(null==e?void 0:e.frameId)&&t.push(ut.PTF_FRAME_ID),t}(i),s=function(e){if(!e||0===e.length)return;const t={};return e.includes(ut.PTF_USER_TIMESTAMP)&&(t.timestamp=!0),e.includes(ut.PTF_FRAME_ID)&&(t.frameId=!0),t.timestamp||t.frameId?t:void 0}(r);return t.frameMetadata=s,t.packetTrailer=s,r}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,n){return kr(this,void 0,void 0,(function*(){var i;if(this.encryptionType!==yt.NONE)return;let r;if(this.trackPublications.forEach((t=>{t.track&&t.track===e&&(r=t)})),!r)throw new ea("track is not published");if(!jo(e))throw new ea("track is not a video track");const s=Object.assign(Object.assign({},null===(i=this.roomOptions)||void 0===i?void 0:i.publishDefaults),n),a=Tl(e,t,s);if(!a)return void this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Ua(e));const o=e.addSimulcastTrack(t,a);if(!o)return;const c=this.normalizeRequestedFrameMetadataOptions(e,s),d=new Kn({cid:o.mediaStreamTrack.id,type:Va.kindToProto(e.kind),muted:e.isMuted,source:Va.sourceToProto(e.source),sid:e.sid,packetTrailerFeatures:c,simulcastCodecs:[{codec:s.videoCodec,cid:o.mediaStreamTrack.id}]});if(d.layers=_l(d.width,d.height,a),!this.engine||this.engine.isClosed)throw new na("cannot publish track when not connected");const l=(yield Promise.all([this.engine.addTrack(d),(()=>kr(this,void 0,void 0,(function*(){yield this.engine.createSimulcastSender(e,o,s,a),yield this.engine.negotiate()})))()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),{encodings:a,trackInfo:l})}))}unpublishTrack(t,i){return kr(this,void 0,void 0,(function*(){var r,s;if(Uo(t)){const e=this.pendingPublishPromises.get(t);e&&(this.log.debug("awaiting publish promise before attempting to unpublish",Ua(t)),yield e)}const a=this.getPublicationForTrack(t),o=a?Ua(a):void 0;if(this.log.info("unpublishing track",o),!a||!a.track)return void this.log.warn("track was not unpublished because no publication was found",o);(t=a.track).off(e.TrackEvent.Muted,this.onTrackMuted),t.off(e.TrackEvent.Unmuted,this.onTrackUnmuted),t.off(e.TrackEvent.Ended,this.handleTrackEnded),t.off(e.TrackEvent.UpstreamPaused,this.onTrackUpstreamPaused),t.off(e.TrackEvent.UpstreamResumed,this.onTrackUpstreamResumed),t.off(e.TrackEvent.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),void 0===i&&(i=null===(s=null===(r=this.roomOptions)||void 0===r?void 0:r.stopLocalTrackOnUnpublish)||void 0===s||s),i?t.stop():t.stopMonitor();let c=!1;const d=t.sender;if(t.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentStatethis.unpublishTrack(e))))).filter((e=>!!e))}))}republishAllTracks(e){return kr(this,arguments,void 0,(function(e){var t=this;let n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function*(){t.republishPromise&&(yield t.republishPromise),t.republishPromise=new Ls(((i,r)=>kr(t,void 0,void 0,(function*(){try{const t=[];this.trackPublications.forEach((n=>{n.track&&(e&&(n.options=Object.assign(Object.assign({},n.options),e)),t.push(n))})),yield Promise.all(t.map((e=>kr(this,void 0,void 0,(function*(){const t=e.track;yield this.unpublishTrack(t,!1),!n||t.isMuted||t.source===Va.Source.ScreenShare||t.source===Va.Source.ScreenShareAudio||!qo(t)&&!jo(t)||t.isUserProvided||(this.log.debug("restarting existing track",{track:e.trackSid}),yield t.restartTrack()),yield this.publishOrRepublishTrack(t,e.options,!0)}))))),i()}catch(t){t instanceof Error?r(t):r(new Error(String(t)))}finally{this.republishPromise=void 0}})))),yield t.republishPromise}()}))}publishData(e){return kr(this,arguments,void 0,(function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){const i=n.reliable?Xd.RELIABLE:Xd.LOSSY,r=n.reliable?Lt.RELIABLE:Lt.LOSSY,s=n.destinationIdentities,a=n.topic;let o=new Bt({participantIdentity:t.identity,payload:e,destinationIdentities:s,topic:a});const c=new At({kind:r,value:{case:"user",value:o}});yield t.engine.sendDataPacket(c,i)}()}))}publishDtmf(e,t){return kr(this,void 0,void 0,(function*(){const n=new At({kind:Lt.RELIABLE,value:{case:"sipDtmf",value:new jt({code:e,digit:t})}});yield this.engine.sendDataPacket(n,Xd.RELIABLE)}))}sendChatMessage(t,n){return kr(this,void 0,void 0,(function*(){const i={id:crypto.randomUUID(),message:t,timestamp:Date.now(),attachedFiles:null==n?void 0:n.attachments},r=new At({value:{case:"chatMessage",value:new Wt(Object.assign(Object.assign({},i),{timestamp:R.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(r,Xd.RELIABLE),this.emit(e.ParticipantEvent.ChatMessage,i),i}))}editChatMessage(t,n){return kr(this,void 0,void 0,(function*(){const i=Object.assign(Object.assign({},n),{message:t,editTimestamp:Date.now()}),r=new At({value:{case:"chatMessage",value:new Wt(Object.assign(Object.assign({},i),{timestamp:R.parse(i.timestamp),editTimestamp:R.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(r,Xd.RELIABLE),this.emit(e.ParticipantEvent.ChatMessage,i),i}))}sendText(e,t){return kr(this,void 0,void 0,(function*(){return this.roomOutgoingDataStreamManager.sendText(e,t)}))}streamText(e){return kr(this,void 0,void 0,(function*(){return this.roomOutgoingDataStreamManager.streamText(e)}))}sendFile(e,t){return kr(this,void 0,void 0,(function*(){return this.roomOutgoingDataStreamManager.sendFile(e,t)}))}sendBytes(e,t){return kr(this,void 0,void 0,(function*(){return this.roomOutgoingDataStreamManager.sendBytes(e,t)}))}streamBytes(e){return kr(this,void 0,void 0,(function*(){return this.roomOutgoingDataStreamManager.streamBytes(e)}))}performRpc(e){return this.rpcClientManager.performRpc(e).then((e=>{let t=B(e,2);return t[0],t[1]}))}registerRpcMethod(e,t){this.rpcServerManager.registerRpcMethod(e,t)}unregisterRpcMethod(e){this.rpcServerManager.unregisterRpcMethod(e)}setTrackSubscriptionPermissions(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];this.participantTrackPermissions=t,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter((e=>"video"===e.mime.split("/")[0].toLowerCase()))}updateInfo(e){return!!super.updateInfo(e)&&(e.tracks.forEach((e=>{var t,n;const i=this.trackPublications.get(e.sid);if(i){const r=i.isMuted||null!==(n=null===(t=i.track)||void 0===t?void 0:t.isUpstreamPaused)&&void 0!==n&&n;r!==e.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign({},Ua(i)),{mutedOnServer:r})),this.engine.client.sendMuteTrack(e.sid,r))}})),!0)}setActiveAgent(e){var t,n,i,r;this.firstActiveAgent=e,e&&!this.firstActiveAgent&&(this.firstActiveAgent=e),e?null===(n=null===(t=this.activeAgentFuture)||void 0===t?void 0:t.resolve)||void 0===n||n.call(t,e):null===(r=null===(i=this.activeAgentFuture)||void 0===i?void 0:i.reject)||void 0===r||r.call(i,new Error("Agent disconnected")),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new Mo),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach((n=>{const i=n.track;i&&(e instanceof MediaStreamTrack?(qo(i)||jo(i))&&i.mediaStreamTrack===e&&(t=n):e===i&&(t=n))})),t}waitForPendingPublicationOfSource(e){return kr(this,void 0,void 0,(function*(){const t=Date.now();for(;Date.now()B(t,1)[0].source===e));if(t)return t[1];yield Ga(20)}}))}publishDataTrack(e){return kr(this,void 0,void 0,(function*(){const t=new zu(e,this.roomOutgoingDataTrackManager);return yield t.publish(),t}))}}class gh extends DOMException{constructor(e,t){super(e,"AbortError"),this.reason=t}}class vh extends Map{constructor(){super(...arguments),this.pending=new Map}set(e,t){var n,i;super.set(e,t);const r=null===(n=this.pending)||void 0===n?void 0:n.get(e);if(r){for(const e of r)e.isResolved||null===(i=e.resolve)||void 0===i||i.call(e,t);this.pending.delete(e)}return this}get[Symbol.toStringTag](){return"DeferrableMap"}getDeferred(e,t){return kr(this,void 0,void 0,(function*(){const n=this.get(e);if(void 0!==n)return n;if(null==t?void 0:t.aborted)throw new gh("The operation was aborted.",t.reason);const i=new Mo(void 0,(()=>{const t=this.pending.get(e);if(!t)return;const n=t.indexOf(i);-1!==n&&t.splice(n,1),0===t.length&&this.pending.delete(e)})),r=this.pending.get(e);if(r?r.push(i):this.pending.set(e,[i]),t){const e=()=>{var e;i.isResolved||null===(e=i.reject)||void 0===e||e.call(i,new gh("The operation was aborted.",t.reason))};t.addEventListener("abort",e,{once:!0}),i.promise.finally((()=>{t.removeEventListener("abort",e)}))}return i.promise}))}}class fh extends ah{constructor(t,n,i,r){super(t,n.sid,n.name,r),this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=t=>{this.setTrack(void 0),this.emit(e.TrackEvent.Ended,t)},this.handleVisibilityChange=e=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(e),this.logContext),this.visible=e,this.emitTrackUpdate()},this.handleVideoDimensionsChange=e=>{this.log.debug("adaptivestream video dimensions ".concat(e.width,"x").concat(e.height),this.logContext),this.videoDimensionsAdaptiveStream=e,this.emitTrackUpdate()},this.subscribed=i,this.updateInfo(n)}setSubscribed(t){const n=this.subscriptionStatus,i=this.permissionStatus;this.subscribed=t,t&&(this.allowed=!0);const r=new ai({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Jt({participantSid:"",trackSids:[this.trackSid]})]});this.emit(e.TrackEvent.UpdateSubscription,r),this.emitSubscriptionUpdateIfChanged(n),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return!1===this.subscribed?ah.SubscriptionStatus.Unsubscribed:super.isSubscribed?ah.SubscriptionStatus.Subscribed:ah.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?ah.PermissionStatus.Allowed:ah.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(e){this.isManualOperationAllowed()&&this.requestedDisabled!==!e&&(this.requestedDisabled=!e,this.emitTrackUpdate())}setVideoQuality(e){this.isManualOperationAllowed()&&this.requestedMaxQuality!==e&&(this.requestedMaxQuality=e,this.requestedVideoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var t,n;this.isManualOperationAllowed()&&((null===(t=this.requestedVideoDimensions)||void 0===t?void 0:t.width)===e.width&&(null===(n=this.requestedVideoDimensions)||void 0===n?void 0:n.height)===e.height||(Ho(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ho(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var t;return null!==(t=this.requestedMaxQuality)&&void 0!==t?t:e.VideoQuality.HIGH}setTrack(t){const n=this.subscriptionStatus,i=this.permissionStatus,r=this.track;r!==t&&(r&&(r.off(e.TrackEvent.VideoDimensionsChanged,this.handleVideoDimensionsChange),r.off(e.TrackEvent.VisibilityChanged,this.handleVisibilityChange),r.off(e.TrackEvent.Ended,this.handleEnded),r.detach(),r.stopMonitor(),this.emit(e.TrackEvent.Unsubscribed,r)),super.setTrack(t),t&&(t.sid=this.trackSid,t.on(e.TrackEvent.VideoDimensionsChanged,this.handleVideoDimensionsChange),t.on(e.TrackEvent.VisibilityChanged,this.handleVisibilityChange),t.on(e.TrackEvent.Ended,this.handleEnded),this.emit(e.TrackEvent.Subscribed,t)),this.emitPermissionUpdateIfChanged(i),this.emitSubscriptionUpdateIfChanged(n))}setAllowed(e){const t=this.subscriptionStatus,n=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(t)}setSubscriptionError(t){this.emit(e.TrackEvent.SubscriptionFailed,t)}updateInfo(t){super.updateInfo(t);const n=this.metadataMuted;this.metadataMuted=t.muted,this.track?this.track.setMuted(t.muted):n!==t.muted&&this.emit(t.muted?e.TrackEvent.Muted:e.TrackEvent.Unmuted)}emitSubscriptionUpdateIfChanged(t){const n=this.subscriptionStatus;t!==n&&this.emit(e.TrackEvent.SubscriptionStatusChanged,n,t)}emitPermissionUpdateIfChanged(t){this.permissionStatus!==t&&this.emit(e.TrackEvent.SubscriptionPermissionChanged,this.permissionStatus,t)}isManualOperationAllowed(){return!!this.isDesired||(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ho(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const t=new pi({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===Va.Kind.Video){let n=this.requestedVideoDimensions;if(void 0!==this.videoDimensionsAdaptiveStream)if(n){Ba(this.videoDimensionsAdaptiveStream,n)&&(this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),n=this.videoDimensionsAdaptiveStream)}else if(void 0!==this.requestedMaxQuality&&this.trackInfo){const e=function(e,t){var n;return null===(n=e.layers)||void 0===n?void 0:n.find((e=>e.quality===t))}(this.trackInfo,this.requestedMaxQuality);e&&Ba(this.videoDimensionsAdaptiveStream,e)&&(this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),n=this.videoDimensionsAdaptiveStream)}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),n=this.videoDimensionsAdaptiveStream;n?(t.width=Math.ceil(n.width),t.height=Math.ceil(n.height)):void 0!==this.requestedMaxQuality?(this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),t.quality=this.requestedMaxQuality):(this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:e.VideoQuality.HIGH})),t.quality=e.VideoQuality.HIGH)}this.emit(e.TrackEvent.UpdateSettings,t)}}class kh extends ph{static fromParticipantInfo(e,t,n,i){return new kh(e,t.sid,t.identity,t.name,t.metadata,t.attributes,n,t.kind,t.dataTracks.map((e=>{const n=Kc.from(e);return new Eu(n,i,{publisherIdentity:t.identity})})),t.clientProtocol,t.capabilities)}get logContext(){return Object.assign(Object.assign({},super.logContext),{remoteParticipantID:this.sid,remoteParticipant:this.identity})}constructor(e,t,n,i,r,s,a){let o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:ft.STANDARD,c=arguments.length>8&&void 0!==arguments[8]?arguments[8]:[],d=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,l=arguments.length>10&&void 0!==arguments[10]?arguments[10]:[];super(t,n||"",i,r,s,a,o),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.dataTracks=new vh(c.map((e=>[e.info.name,e]))),this.volumeMap=new Map,this.clientProtocol=d,this.capabilities=l}addTrackPublication(t){super.addTrackPublication(t),t.on(e.TrackEvent.UpdateSettings,(e=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),Ua(t)),{settings:e})),this.signalClient.sendUpdateTrackSettings(e)})),t.on(e.TrackEvent.UpdateSubscription,(e=>{e.participantTracks.forEach((e=>{e.participantSid=this.sid})),this.signalClient.sendUpdateSubscription(e)})),t.on(e.TrackEvent.SubscriptionPermissionChanged,(n=>{this.emit(e.ParticipantEvent.TrackSubscriptionPermissionChanged,t,n)})),t.on(e.TrackEvent.SubscriptionStatusChanged,(n=>{this.emit(e.ParticipantEvent.TrackSubscriptionStatusChanged,t,n)})),t.on(e.TrackEvent.Subscribed,(n=>{this.emit(e.ParticipantEvent.TrackSubscribed,n,t)})),t.on(e.TrackEvent.Unsubscribed,(n=>{this.emit(e.ParticipantEvent.TrackUnsubscribed,n,t)})),t.on(e.TrackEvent.SubscriptionFailed,(n=>{this.emit(e.ParticipantEvent.TrackSubscriptionFailed,t.trackSid,n)}))}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setVolume(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Va.Source.Microphone;this.volumeMap.set(t,e);const n=this.getTrackPublication(t);n&&n.track&&n.track.setVolume(e)}getVolume(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Va.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(t,n,i,r,s,a){let o=this.getTrackPublicationBySid(n);if(o||n.startsWith("TR")||this.trackPublications.forEach((e=>{o||t.kind!==e.kind.toString()||(o=e)})),!o)return 0===a?(this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:n})),void this.emit(e.ParticipantEvent.TrackSubscriptionFailed,n)):(void 0===a&&(a=20),void setTimeout((()=>{this.addSubscribedMediaTrack(t,n,i,r,s,a-1)}),150));if("ended"===t.readyState)return this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Ua(o))),void this.emit(e.ParticipantEvent.TrackSubscriptionFailed,n);let c;return c="video"===t.kind?new Cc(t,n,r,s):new sh(t,n,r,this.audioContext,this.audioOutput),c.source=o.source,c.isMuted=o.isMuted,c.setMediaStream(i),c.start(),o.setTrack(c),this.volumeMap.has(o.source)&&Vo(c)&&Fo(c)&&c.setVolume(this.volumeMap.get(o.source)),o}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(t){if(!super.updateInfo(t))return!1;const n=new Map,i=new Map;return t.tracks.forEach((e=>{var t,r;let s=this.getTrackPublicationBySid(e.sid);if(s)s.updateInfo(e);else{const n=Va.kindFromProto(e.type);if(!n)return;s=new fh(n,e,null===(t=this.signalClient.connectOptions)||void 0===t?void 0:t.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:null===(r=this.loggerOptions)||void 0===r?void 0:r.loggerName}),s.updateInfo(e),i.set(e.sid,s);const a=Array.from(this.trackPublications.values()).find((e=>e.source===(null==s?void 0:s.source)));a&&s.source!==Va.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(s.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Ua(a),newTrack:Ua(s)})),this.addTrackPublication(s)}n.set(e.sid,s)})),this.trackPublications.forEach((e=>{n.has(e.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Ua(e))),this.unpublishTrack(e.trackSid,!0))})),i.forEach((t=>{this.emit(e.ParticipantEvent.TrackPublished,t)})),!0}unpublishTrack(t,n){const i=this.trackPublications.get(t);if(!i)return;const r=i.track;switch(r&&(r.stop(),i.setTrack(void 0)),this.trackPublications.delete(t),i.kind){case Va.Kind.Audio:this.audioTrackPublications.delete(t);break;case Va.Kind.Video:this.videoTrackPublications.delete(t)}n&&this.emit(e.ParticipantEvent.TrackUnpublished,i)}setAudioOutput(e){return kr(this,void 0,void 0,(function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach((n=>{var i;Fo(n.track)&&Vo(n.track)&&t.push(n.track.setSinkId(null!==(i=e.deviceId)&&void 0!==i?i:"default"))})),yield Promise.all(t)}))}addRemoteDataTrack(e){this.dataTracks.set(e.info.name,e)}removeRemoteDataTrack(e){for(const n of this.dataTracks.entries()){var t=B(n,2);const i=t[0];e===t[1].info.sid&&this.dataTracks.delete(i)}}emit(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;ikr(this,void 0,void 0,(function*(){var r;if(!io())throw po()?Error("WebRTC isn't detected, have you called registerGlobals?"):Error("LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.");const s=yield this.disconnectLock.lock();if(this.state===e.ConnectionState.Connected)return this.log.info("already connected to room ".concat(this.name)),s(),Promise.resolve();if(this.connectFuture)return s(),this.connectFuture.promise;this.setAndEmitConnectionState(e.ConnectionState.Connecting),(null===(r=this.regionUrlProvider)||void 0===r?void 0:r.getServerUrl().toString())!==Zo(t)&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),mo(new URL(t))&&(void 0===this.regionUrlProvider?this.regionUrlProvider=new xl(t,n):this.regionUrlProvider.updateToken(n),this.regionUrlProvider.fetchRegionSettings().then((e=>{var t;null===(t=this.regionUrlProvider)||void 0===t||t.setServerReportedRegions(e)})).catch((e=>{this.log.warn("could not fetch region settings",{error:e})})));const a=(r,o,c)=>kr(this,void 0,void 0,(function*(){var d,l;this.abortController&&this.abortController.abort();const u=new AbortController;this.abortController=u,null==s||s();try{if(yield Oc.getInstance().getBackOffPromise(t),u.signal.aborted)throw Xs.cancelled("Connection attempt aborted");yield this.attemptConnection(null!=c?c:t,n,i,u),this.abortController=void 0,r()}catch(h){if(this.regionUrlProvider&&h instanceof Xs&&Zs(h)){let n=null;try{this.log.debug("Fetching next region"),n=yield this.regionUrlProvider.getNextBestRegionUrl(null===(d=this.abortController)||void 0===d?void 0:d.signal)}catch(p){if(p instanceof Xs&&(401===p.status||p.reason===e.ConnectionErrorReason.Cancelled))return this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),void o(p)}[e.ConnectionErrorReason.InternalError,e.ConnectionErrorReason.ServerUnreachable,e.ConnectionErrorReason.Timeout].includes(h.reason)&&(this.log.debug("Adding failed connection attempt to back off"),Oc.getInstance().addFailedConnectionAttempt(t)),n&&!(null===(l=this.abortController)||void 0===l?void 0:l.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(h.message,". Retrying with another region: ").concat(n)),this.recreateEngine(!0),yield a(r,o,n)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Lo(h)),o(h))}else{let e=ot.UNKNOWN_REASON;h instanceof Xs&&(e=Lo(h)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e),o(h)}}})),o=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Mo(((e,t)=>{a(e,t,o)}),(()=>{this.clearConnectionFutures()})),this.connectFuture.promise})),this.connectSignal=(e,t,n,i,r,s)=>kr(this,void 0,void 0,(function*(){const a=yield n.join(e,t,{autoSubscribe:i.autoSubscribe,adaptiveStream:"object"==typeof r.adaptiveStream||r.adaptiveStream,disableIceLite:i.disableIceLite,subscriberAllowPause:i.subscriberAllowPause,clientInfoCapabilities:this.getClientInfoCapabilities(r),maxRetries:i.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:i.websocketTimeout},s.signal,!r.singlePeerConnection),o=a.joinResponse,c=a.serverInfo;if(this.serverInfo=c,!c.version)throw new ta("unknown server version");return"0.15.1"===c.version&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version"),r.dynacast=!1),o})),this.applyJoinResponse=e=>{const t=e.participant;if(this.localParticipant.sid=t.sid,this.localParticipant.identity=t.identity,this.localParticipant.setEnabledPublishCodecs(e.enabledPublishCodecs),this.e2eeManager)try{this.e2eeManager.setSifTrailer(e.sifTrailer)}catch(n){this.log.error(n instanceof Error?n.message:"Could not set SifTrailer",{error:n})}this.handleParticipantUpdates([t,...e.otherParticipants]),e.room&&this.handleRoomUpdate(e.room)},this.attemptConnection=(t,i,r,s)=>kr(this,void 0,void 0,(function*(){var a,o;this.state===e.ConnectionState.Reconnecting||this.isResuming||(null===(a=this.engine)||void 0===a?void 0:a.pendingReconnect)?(this.log.info("Reconnection attempt replaced by new connection attempt"),this.recreateEngine(!0)):this.maybeCreateEngine(),(null===(o=this.regionUrlProvider)||void 0===o?void 0:o.isCloud())&&this.engine.setRegionStrategy(this.createRegionStrategy()),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Qd),r),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const n=yield this.connectSignal(t,i,this.engine,this.connOptions,this.options,s);this.applyJoinResponse(n),this.setupLocalParticipantEvents(),this.emit(e.RoomEvent.SignalConnected)}catch(c){yield this.engine.close(),this.recreateEngine();const e=s.signal.aborted?Xs.cancelled("Signal connection aborted"):Xs.serverUnreachable("could not establish signal connection");throw c instanceof Error&&(e.message="".concat(e.message,": ").concat(c.message)),c instanceof Xs&&(e.reason=c.reason,e.status=c.status),this.log.debug("error trying to establish signal connection",{error:c}),e}if(s.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),Xs.cancelled("Connection attempt aborted");try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,s)}catch(n){throw yield this.engine.close(),this.recreateEngine(),n}ho()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),ho()&&window.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(e.ConnectionState.Connected),this.emit(e.RoomEvent.Connected),Oc.getInstance().resetFailedConnectionAttempts(t),this.registerConnectionReconcile(),this.regionUrlProvider&&this.regionUrlProvider.notifyConnected()})),this.disconnect=function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&void 0!==arguments[0])||arguments[0];return function*(){var i,r,s;const a=yield t.disconnectLock.lock();try{if(t.state===e.ConnectionState.Disconnected)return void t.log.debug("already disconnected");if(t.log.info("disconnect from room"),t.state===e.ConnectionState.Connecting||t.state===e.ConnectionState.Reconnecting||t.isResuming){const e="Abort connection attempt due to user initiated disconnect";t.log.warn(e),null===(i=t.abortController)||void 0===i||i.abort(e),null===(s=null===(r=t.connectFuture)||void 0===r?void 0:r.reject)||void 0===s||s.call(r,Xs.cancelled("Client initiated disconnect")),t.connectFuture=void 0}t.engine&&(t.engine.client.isDisconnected||(yield t.engine.client.sendLeave()),yield t.engine.close()),t.handleDisconnect(n,ot.CLIENT_INITIATED),t.engine=void 0}finally{a()}}()}))},this.onPageLeave=()=>kr(this,void 0,void 0,(function*(){this.log.info("Page leave detected, disconnecting"),yield this.disconnect()})),this.startAudio=()=>kr(this,void 0,void 0,(function*(){const t=[],n=Us();if(n&&"iOS"===n.os){const n="livekit-dummy-audio-el";let i=document.getElementById(n);if(!i){i=document.createElement("audio"),i.id=n,i.autoplay=!0,i.hidden=!0;const t=_o();t.enabled=!0;const r=new MediaStream([t]);i.srcObject=r,document.addEventListener("visibilitychange",(()=>{i&&(i.srcObject=document.hidden?null:r,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status"),this.startAudio()))})),document.body.append(i),this.once(e.RoomEvent.Disconnected,(()=>{null==i||i.remove(),i=null}))}t.push(i)}this.remoteParticipants.forEach((e=>{e.audioTrackPublications.forEach((e=>{e.track&&e.track.attachedElements.forEach((e=>{t.push(e)}))}))}));try{yield Promise.all([this.acquireAudioContext(),...t.map((e=>(this.options.webAudioMix||(e.muted=!1),e.play())))]),this.handleAudioPlaybackStarted()}catch(i){throw this.handleAudioPlaybackFailed(i),i}})),this.startVideo=()=>kr(this,void 0,void 0,(function*(){const e=[];for(const t of this.remoteParticipants.values())t.videoTrackPublications.forEach((t=>{var n;null===(n=t.track)||void 0===n||n.attachedElements.forEach((t=>{e.includes(t)||e.push(t)}))}));yield Promise.all(e.map((e=>e.play()))).then((()=>{this.handleVideoPlaybackStarted()})).catch((e=>{"NotAllowedError"===e.name?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler")}))})),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const e of this.remoteParticipants.values())this.handleParticipantDisconnected(e.identity,e);this.setAndEmitConnectionState(e.ConnectionState.Reconnecting)&&this.emit(e.RoomEvent.Reconnecting)},this.handleRestarted=()=>{this.outgoingDataTrackManager.sfuWillRepublishTracks(),this.incomingDataTrackManager.resendSubscriptionUpdates()},this.handleSignalRestarted=t=>kr(this,void 0,void 0,(function*(){this.log.debug("signal reconnected to server, region ".concat(t.serverRegion),{region:t.serverRegion}),this.bufferedEvents=[],this.applyJoinResponse(t);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(n){this.log.error("error trying to re-publish tracks after reconnection",{error:n})}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",{region:t.serverRegion})}catch(s){return}this.setAndEmitConnectionState(e.ConnectionState.Connected),this.emit(e.RoomEvent.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()})),this.handleParticipantUpdates=e=>{var t;for(const i of e){if(i.identity===this.localParticipant.identity){this.localParticipant.updateInfo(i);continue}""===i.identity&&(i.identity=null!==(t=this.sidToIdentity.get(i.sid))&&void 0!==t?t:"");let e=this.remoteParticipants.get(i.identity);i.state===vt.DISCONNECTED?this.handleParticipantDisconnected(i.identity,e,i.disconnectReason===ot.UNKNOWN_REASON?void 0:i.disconnectReason):this.getOrCreateParticipant(i.identity,i)}const n=new Map(e.filter((e=>e.identity!==this.localParticipant.identity)).map((e=>[e.identity,e.dataTracks.map((e=>Kc.from(e)))])));this.incomingDataTrackManager.receiveSfuPublicationUpdates(n)},this.handleActiveSpeakersUpdate=t=>{const n=[],i={};t.forEach((e=>{if(i[e.sid]=!0,e.sid===this.localParticipant.sid)this.localParticipant.audioLevel=e.level,this.localParticipant.setIsSpeaking(!0),n.push(this.localParticipant);else{const t=this.getRemoteParticipantBySid(e.sid);t&&(t.audioLevel=e.level,t.setIsSpeaking(!0),n.push(t))}})),i[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach((e=>{i[e.sid]||(e.audioLevel=0,e.setIsSpeaking(!1))})),this.activeSpeakers=n,this.emitWhenConnected(e.RoomEvent.ActiveSpeakersChanged,n)},this.handleSpeakersChanged=t=>{const n=new Map;this.activeSpeakers.forEach((e=>{const t=this.remoteParticipants.get(e.identity);t&&t.sid!==e.sid||n.set(e.sid,e)})),t.forEach((e=>{let t=this.getRemoteParticipantBySid(e.sid);e.sid===this.localParticipant.sid&&(t=this.localParticipant),t&&(t.audioLevel=e.level,t.setIsSpeaking(e.active),e.active?n.set(e.sid,t):n.delete(e.sid))}));const i=Array.from(n.values());i.sort(((e,t)=>t.audioLevel-e.audioLevel)),this.activeSpeakers=i,this.emitWhenConnected(e.RoomEvent.ActiveSpeakersChanged,i)},this.handleStreamStateUpdate=t=>{t.streamStates.forEach((t=>{const n=this.getRemoteParticipantBySid(t.participantSid);if(!n)return;const i=n.getTrackPublicationBySid(t.trackSid);if(!i||!i.track)return;const r=Va.streamStateFromProto(t.state),s=i.track.streamState;i.track.setStreamState(r),r!==s&&(n.emit(e.ParticipantEvent.TrackStreamStateChanged,i,i.track.streamState),this.emitWhenConnected(e.RoomEvent.TrackStreamStateChanged,i,i.track.streamState,n))}))},this.handleSubscriptionPermissionUpdate=e=>{const t=this.getRemoteParticipantBySid(e.participantSid);if(!t)return;const n=t.getTrackPublicationBySid(e.trackSid);n&&n.setAllowed(e.allowed)},this.handleSubscriptionError=e=>{this.cancelPendingTrackAdded(e.trackSid);const t=Array.from(this.remoteParticipants.values()).find((t=>t.trackPublications.has(e.trackSid)));if(!t)return;const n=t.getTrackPublicationBySid(e.trackSid);n&&n.setSubscriptionError(e.err)},this.handleDataPacket=(e,t)=>{const n=this.remoteParticipants.get(e.participantIdentity);if("user"===e.value.case)this.handleUserPacket(n,e.value.value,e.kind,t,e.participantIdentity);else if("transcription"===e.value.case)this.handleTranscription(n,e.value.value);else if("sipDtmf"===e.value.case)this.handleSipDtmf(n,e.value.value);else if("chatMessage"===e.value.case)this.handleChatMessage(n,e.value.value);else if("metrics"===e.value.case)this.handleMetrics(e.value.value,n);else if("streamHeader"===e.value.case||"streamChunk"===e.value.case||"streamTrailer"===e.value.case)this.handleDataStream(e,t);else if("rpcRequest"===e.value.case){const t=e.value.value;this.rpcServerManager.handleIncomingRpcRequest(e.participantIdentity,t)}else if("rpcResponse"===e.value.case){const t=e.value.value;switch(t.value.case){case"payload":this.rpcClientManager.handleIncomingRpcResponseSuccess(t.requestId,t.value.value);break;case"error":this.rpcClientManager.handleIncomingRpcResponseFailure(t.requestId,Xu.fromProto(t.value.value));break;default:this.log.warn("Unknown rpcResponse.value.case: ".concat(t.value.case),this.logContext)}}else"rpcAck"===e.value.case&&this.rpcClientManager.handleIncomingRpcAck(e.value.value.requestId)},this.handleUserPacket=(t,n,i,r,s)=>{this.emit(e.RoomEvent.DataReceived,n.payload,t,i,n.topic,r,s),null==t||t.emit(e.ParticipantEvent.DataReceived,n.payload,i,r)},this.handleSipDtmf=(t,n)=>{this.emit(e.RoomEvent.SipDTMFReceived,n,t),null==t||t.emit(e.ParticipantEvent.SipDTMFReceived,n)},this.handleTranscription=(t,n)=>{const i=n.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(n.transcribedParticipantIdentity),r=null==i?void 0:i.trackPublications.get(n.trackId),s=function(e,t){return e.segments.map((e=>{let n=e.id,i=e.text,r=e.language,s=e.startTime,a=e.endTime,o=e.final;var c;const d=null!==(c=t.get(n))&&void 0!==c?c:Date.now(),l=Date.now();return o?t.delete(n):t.set(n,d),{id:n,text:i,startTime:Number.parseInt(s.toString()),endTime:Number.parseInt(a.toString()),final:o,language:r,firstReceivedTime:d,lastReceivedTime:l}}))}(n,this.transcriptionReceivedTimes);null==r||r.emit(e.TrackEvent.TranscriptionReceived,s),null==i||i.emit(e.ParticipantEvent.TranscriptionReceived,s,r),this.emit(e.RoomEvent.TranscriptionReceived,s,i,r)},this.handleChatMessage=(t,n)=>{const i=function(e){const t=e.id,n=e.timestamp,i=e.message,r=e.editTimestamp;return{id:t,timestamp:Number.parseInt(n.toString()),editTimestamp:r?Number.parseInt(r.toString()):void 0,message:i}}(n);this.emit(e.RoomEvent.ChatMessage,i,t)},this.handleMetrics=(t,n)=>{this.emit(e.RoomEvent.MetricsReceived,t,n)},this.handleDataStream=(e,t)=>{this.incomingDataStreamManager.handleDataStreamPacket(e,t)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(e.RoomEvent.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=t=>{this.log.warn("could not playback audio",{error:t}),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(e.RoomEvent.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(e.RoomEvent.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(e.RoomEvent.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>kr(this,void 0,void 0,(function*(){var t;"iOS"!==(null===(t=Us())||void 0===t?void 0:t.os)&&(yield this.selectDefaultDevices()),this.emit(e.RoomEvent.MediaDevicesChanged)})),this.handleRoomUpdate=t=>{const n=this.roomInfo;this.roomInfo=t,n&&n.metadata!==t.metadata&&this.emitWhenConnected(e.RoomEvent.RoomMetadataChanged,t.metadata),(null==n?void 0:n.activeRecording)!==t.activeRecording&&this.emitWhenConnected(e.RoomEvent.RecordingStatusChanged,t.activeRecording)},this.handleConnectionQualityUpdate=e=>{e.updates.forEach((e=>{if(e.participantSid===this.localParticipant.sid)return void this.localParticipant.setConnectionQuality(e.quality);const t=this.getRemoteParticipantBySid(e.participantSid);t&&t.setConnectionQuality(e.quality)}))},this.getRemoteParticipantClientProtocol=e=>{var t,n;return null!==(n=null===(t=this.remoteParticipants.get(e))||void 0===t?void 0:t.clientProtocol)&&void 0!==n?n:0},this.getRemoteParticipantCapabilities=e=>{var t,n;return null!==(n=null===(t=this.remoteParticipants.get(e))||void 0===t?void 0:t.capabilities)&&void 0!==n?n:[]},this.getAllRemoteParticipantIdentities=()=>Array.from(this.remoteParticipants.keys()),this.logWebRTCStats=()=>kr(this,void 0,void 0,(function*(){var e,t,n,i;const r=null===(e=this.engine)||void 0===e?void 0:e.pcManager;if(r)try{const e=B(yield Promise.all([r.publisher.getStats(),null===(t=r.subscriber)||void 0===t?void 0:t.getStats()]),2),s=e[0],a=e[1],o=s&&ga(s),c=a&&ga(a);this.statsLog.info("webrtc stats",{publisher:null==o?void 0:o.connection,subscriber:null==c?void 0:c.connection,inbound:[...null!==(n=null==o?void 0:o.inbound)&&void 0!==n?n:[],...null!==(i=null==c?void 0:c.inbound)&&void 0!==i?i:[]],outbound:null==o?void 0:o.outbound})}catch(s){this.statsLog.debug("could not collect webrtc stats",{error:s})}})),this.onLocalParticipantMetadataChanged=t=>{this.emit(e.RoomEvent.ParticipantMetadataChanged,t,this.localParticipant)},this.onLocalParticipantNameChanged=t=>{this.emit(e.RoomEvent.ParticipantNameChanged,t,this.localParticipant)},this.onLocalAttributesChanged=t=>{this.emit(e.RoomEvent.ParticipantAttributesChanged,t,this.localParticipant)},this.onLocalTrackMuted=t=>{this.emit(e.RoomEvent.TrackMuted,t,this.localParticipant)},this.onLocalTrackUnmuted=t=>{this.emit(e.RoomEvent.TrackUnmuted,t,this.localParticipant)},this.onTrackProcessorUpdate=e=>{var t;null===(t=null==e?void 0:e.onPublish)||void 0===t||t.call(e,this)},this.onLocalTrackPublished=t=>kr(this,void 0,void 0,(function*(){var n,i,r,s,a,o;if(null===(n=t.track)||void 0===n||n.on(e.TrackEvent.TrackProcessorUpdate,this.onTrackProcessorUpdate),null===(i=t.track)||void 0===i||i.on(e.TrackEvent.Restarted,this.onLocalTrackRestarted),null===(a=null===(s=null===(r=t.track)||void 0===r?void 0:r.getProcessor())||void 0===s?void 0:s.onPublish)||void 0===a||a.call(s,this),this.emit(e.RoomEvent.LocalTrackPublished,t,this.localParticipant),qo(t.track)){(yield t.track.checkForSilence())&&this.emit(e.RoomEvent.LocalAudioSilenceDetected,t)}const c=yield null===(o=t.track)||void 0===o?void 0:o.getDeviceId(!1),d=Aa(t.source);d&&c&&c!==this.localParticipant.activeDeviceMap.get(d)&&(this.localParticipant.activeDeviceMap.set(d,c),this.emit(e.RoomEvent.ActiveDeviceChanged,d,c))})),this.onLocalTrackUnpublished=t=>{var n,i;null===(n=t.track)||void 0===n||n.off(e.TrackEvent.TrackProcessorUpdate,this.onTrackProcessorUpdate),null===(i=t.track)||void 0===i||i.off(e.TrackEvent.Restarted,this.onLocalTrackRestarted),this.emit(e.RoomEvent.LocalTrackUnpublished,t,this.localParticipant)},this.onLocalTrackRestarted=t=>kr(this,void 0,void 0,(function*(){const n=yield t.getDeviceId(!1),i=Aa(t.source);i&&n&&n!==this.localParticipant.activeDeviceMap.get(i)&&(this.log.debug("local track restarted, setting ".concat(i," ").concat(n," active")),this.localParticipant.activeDeviceMap.set(i,n),this.emit(e.RoomEvent.ActiveDeviceChanged,i,n))})),this.onLocalConnectionQualityChanged=t=>{this.emit(e.RoomEvent.ConnectionQualityChanged,t,this.localParticipant)},this.onMediaDevicesError=(t,n)=>{this.emit(e.RoomEvent.MediaDevicesError,t,n)},this.onLocalParticipantPermissionsChanged=t=>{this.emit(e.RoomEvent.ParticipantPermissionsChanged,t,this.localParticipant)},this.onLocalChatMessageSent=t=>{this.emit(e.RoomEvent.ChatMessage,t,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},Jd),t),this.log=dr(null!==(s=this.options.loggerName)&&void 0!==s?s:e.LoggerNames.Room,(()=>this.logContext)),this.statsLog=dr(e.LoggerNames.Stats,(()=>this.logContext)),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},zd),null==t?void 0:t.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Gd),null==t?void 0:t.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},Kd),null==t?void 0:t.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new Kl(null===(a=this.options.dataStream)||void 0===a?void 0:a.maxPayloadByteLength),this.outgoingDataStreamManager=new iu(this.engine,this.log,this.getRemoteParticipantClientProtocol,this.getRemoteParticipantCapabilities,this.getAllRemoteParticipantIdentities),this.incomingDataTrackManager=new xu({e2eeManager:this.e2eeManager}),this.incomingDataTrackManager.on("sfuUpdateSubscription",(e=>{this.engine.client.sendUpdateDataSubscription(e.sid,e.subscribe)})).on("trackPublished",(t=>{var n;t.track.publisherIdentity!==this.localParticipant.identity&&(this.emit(e.RoomEvent.DataTrackPublished,t.track),null===(n=this.remoteParticipants.get(t.track.publisherIdentity))||void 0===n||n.addRemoteDataTrack(t.track))})).on("trackUnpublished",(t=>{var n;t.publisherIdentity!==this.localParticipant.identity&&(this.emit(e.RoomEvent.DataTrackUnpublished,t.sid),null===(n=this.remoteParticipants.get(t.publisherIdentity))||void 0===n||n.removeRemoteDataTrack(t.sid))})),this.outgoingDataTrackManager=new Yu({e2eeManager:this.e2eeManager}),this.outgoingDataTrackManager.on("sfuPublishRequest",(e=>{this.engine.client.sendPublishDataTrackRequest(e.handle,e.name,e.usesE2ee)})).on("sfuUnpublishRequest",(e=>{this.engine.client.sendUnPublishDataTrackRequest(e.handle)})).on("trackPublished",(t=>{this.emit(e.RoomEvent.LocalDataTrackPublished,t.track)})).on("trackUnpublished",(t=>{this.emit(e.RoomEvent.LocalDataTrackUnpublished,t.sid)})).on("packetAvailable",(e=>{let t=e.handle,n=e.bytes;this.engine.sendDataTrackFrame(n).finally((()=>this.outgoingDataTrackManager.handlePacketSendComplete(t)))})),this.registerRpcDataStreamHandler(),this.rpcClientManager=new ih(this.log,this.outgoingDataStreamManager,this.getRemoteParticipantClientProtocol,(()=>{var e;return null===(e=this.engine)||void 0===e?void 0:e.serverVersion})),this.rpcClientManager.on("sendDataPacket",(e=>{let t=e.packet;var n;null===(n=this.engine)||void 0===n||n.sendDataPacket(t,Xd.RELIABLE)})),this.rpcServerManager=new rh(this.log,this.outgoingDataStreamManager,this.getRemoteParticipantClientProtocol),this.rpcServerManager.on("sendDataPacket",(e=>{let t=e.packet;var n;null===(n=this.engine)||void 0===n||n.sendDataPacket(t,Xd.RELIABLE)})),this.disconnectLock=new r,this.localParticipant=new mh("","",this.engine,this.options,this.outgoingDataStreamManager,this.outgoingDataTrackManager,this.rpcClientManager,this.rpcServerManager),this.setupFrameMetadata(),(this.options.e2ee||this.options.encryption)&&this.setupE2EE(),this.engine.e2eeManager=this.e2eeManager,this.incomingDataTrackManager.updateE2eeManager(null!==(o=this.e2eeManager)&&void 0!==o?o:null),this.outgoingDataTrackManager.updateE2eeManager(null!==(c=this.e2eeManager)&&void 0!==c?c:null),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Oo(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Oo(this.options.audioCaptureDefaults.deviceId)),(null===(d=this.options.audioOutput)||void 0===d?void 0:d.deviceId)&&this.switchActiveDevice("audiooutput",Oo(this.options.audioOutput.deviceId)).catch((e=>this.log.warn("Could not set audio output: ".concat(e.message)))),ho()){const e=new AbortController;let t;if(yh.cleanupRegistry){const n=new WeakRef(this);t=()=>{const e=n.deref();e&&e.handleDeviceChange()},yh.cleanupRegistry.register(this,(()=>{e.abort()}))}else t=this.handleDeviceChange;null===(u=null===(l=navigator.mediaDevices)||void 0===l?void 0:l.addEventListener)||void 0===u||u.call(l,"devicechange",t,{signal:e.signal})}}registerTextStreamHandler(e,t){return this.incomingDataStreamManager.registerTextStreamHandler(e,t)}unregisterTextStreamHandler(e){return this.incomingDataStreamManager.unregisterTextStreamHandler(e)}registerByteStreamHandler(e,t){return this.incomingDataStreamManager.registerByteStreamHandler(e,t)}unregisterByteStreamHandler(e){return this.incomingDataStreamManager.unregisterByteStreamHandler(e)}registerRpcMethod(e,t){this.rpcServerManager.registerRpcMethod(e,t)}unregisterRpcMethod(e){this.rpcServerManager.unregisterRpcMethod(e)}setE2EEEnabled(e){return kr(this,void 0,void 0,(function*(){const t=yield this.e2eeStateMutex.lock();try{if(!this.e2eeManager)throw Error("e2ee not configured, please set e2ee settings within the room options");this.isE2EEEnabled!==e&&(yield this.localParticipant.setE2EEEnabled(e),""!==this.localParticipant.identity&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity))}finally{t()}}))}setupE2EE(){var t,n;const i=!!this.options.encryption,r=this.options.encryption||this.options.e2ee;r&&("e2eeManager"in r?(this.e2eeManager=r.e2eeManager,this.e2eeManager.isDataChannelEncryptionEnabled=i):this.e2eeManager=new Ic(r,i),this.e2eeManager.on(e.EncryptionEvent.ParticipantEncryptionStatusChanged,((t,n)=>{Ko(n)&&(this.isE2EEEnabled=t),this.emit(e.RoomEvent.ParticipantEncryptionStatusChanged,t,n)})),this.e2eeManager.on(e.EncryptionEvent.EncryptionError,((t,n)=>{const i=n?this.getParticipantByIdentity(n):void 0;this.emit(e.RoomEvent.EncryptionError,t,i)})),null===(t=this.e2eeManager)||void 0===t||t.setup(this),null===(n=this.e2eeManager)||void 0===n||n.setupEngine(this.engine))}setupFrameMetadata(){var e;const t=null!==(e=this.options.frameMetadata)&&void 0!==e?e:this.options.packetTrailer;this.frameMetadataManager=new Mc(t),this.frameMetadataManager.setup(this)}get logContext(){var e,t,n;return{room:this.name,roomID:null===(e=this.roomInfo)||void 0===e?void 0:e.sid,participant:null===(t=this.localParticipant)||void 0===t?void 0:t.identity,participantID:null===(n=this.localParticipant)||void 0===n?void 0:n.sid}}get isRecording(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.activeRecording)&&void 0!==t&&t}getSid(){return this.state===e.ConnectionState.Disconnected?Ls.resolve(""):this.roomInfo&&""!==this.roomInfo.sid?Ls.resolve(this.roomInfo.sid):new Ls(((t,n)=>{const i=n=>{""!==n.sid&&(this.engine.off(e.EngineEvent.RoomUpdate,i),t(n.sid))};this.engine.on(e.EngineEvent.RoomUpdate,i),this.once(e.RoomEvent.Disconnected,(()=>{this.engine.off(e.EngineEvent.RoomUpdate,i),n(new na("Room disconnected before room server id was available"))}))}))}get name(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.name)&&void 0!==t?t:""}get metadata(){var e;return null===(e=this.roomInfo)||void 0===e?void 0:e.metadata}get numParticipants(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.numParticipants)&&void 0!==t?t:0}get numPublishers(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.numPublishers)&&void 0!==t?t:0}maybeCreateEngine(){(!this.engine||!this.engine.isNewlyCreated&&this.engine.isClosed)&&(this.engine=new Ol(this.options),this.engine.e2eeManager=this.e2eeManager,this.engine.on(e.EngineEvent.ParticipantUpdate,this.handleParticipantUpdates).on(e.EngineEvent.RoomUpdate,this.handleRoomUpdate).on(e.EngineEvent.SpeakersChanged,this.handleSpeakersChanged).on(e.EngineEvent.StreamStateChanged,this.handleStreamStateUpdate).on(e.EngineEvent.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(e.EngineEvent.SubscriptionError,this.handleSubscriptionError).on(e.EngineEvent.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(e.EngineEvent.MediaTrackAdded,((e,t,n)=>{this.onTrackAdded(e,t,n)})).on(e.EngineEvent.Disconnected,(e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)})).on(e.EngineEvent.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(e.EngineEvent.DataPacketReceived,this.handleDataPacket).on(e.EngineEvent.Resuming,(()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.debug("Resuming signal connection"),this.setAndEmitConnectionState(e.ConnectionState.SignalReconnecting)&&this.emit(e.RoomEvent.SignalReconnecting)})).on(e.EngineEvent.Resumed,(()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.debug("Resumed signal connection"),this.updateSubscriptions(),this.setAndEmitConnectionState(e.ConnectionState.Connected)&&this.emit(e.RoomEvent.Reconnected),this.emitBufferedEvents()})).on(e.EngineEvent.SignalResumed,(()=>{(this.state===e.ConnectionState.Reconnecting||this.isResuming)&&this.sendSyncState(),this.emitBufferedEvents()})).on(e.EngineEvent.Restarting,this.handleRestarting).on(e.EngineEvent.Restarted,this.handleRestarted).on(e.EngineEvent.SignalRestarted,this.handleSignalRestarted).on(e.EngineEvent.Offline,(()=>{this.setAndEmitConnectionState(e.ConnectionState.Reconnecting)&&this.emit(e.RoomEvent.Reconnecting)})).on(e.EngineEvent.DCBufferStatusChanged,((t,n)=>{this.emit(e.RoomEvent.DCBufferStatusChanged,t,n)})).on(e.EngineEvent.LocalTrackSubscribed,(e=>{this.handleLocalTrackSubscribed(e)})).on(e.EngineEvent.RoomMoved,(t=>{this.log.debug("room moved",t),t.room&&this.handleRoomUpdate(t.room),this.remoteParticipants.forEach(((e,t)=>{this.handleParticipantDisconnected(t,e)})),this.emit(e.RoomEvent.Moved,t.room.name),t.participant?this.handleParticipantUpdates([t.participant,...t.otherParticipants]):this.handleParticipantUpdates(t.otherParticipants)})).on(e.EngineEvent.PublishDataTrackResponse,(e=>{e.info?this.outgoingDataTrackManager.receivedSfuPublishResponse(e.info.pubHandle,{type:"ok",data:{sid:e.info.sid,pubHandle:e.info.pubHandle,name:e.info.name,usesE2ee:e.info.encryption!==yt.NONE}}):this.log.warn("received PublishDataTrackResponse, but event.info was ".concat(e.info,", so skipping."))})).on(e.EngineEvent.UnPublishDataTrackResponse,(e=>{e.info?this.outgoingDataTrackManager.receivedSfuUnpublishResponse(e.info.pubHandle):this.log.warn("received UnPublishDataTrackResponse, but event.info was ".concat(e.info,", so skipping."))})).on(e.EngineEvent.DataTrackSubscriberHandles,(e=>{const t=new Map(Object.entries(e.subHandles).map((e=>{let t=B(e,2),n=t[0],i=t[1];return[parseInt(n,10),i.trackSid]})));this.incomingDataTrackManager.receivedSfuSubscriberHandles(t)})).on(e.EngineEvent.DataTrackPacketReceived,(e=>{try{this.incomingDataTrackManager.packetReceived(e)}catch(t){throw t}})).on(e.EngineEvent.Joined,(e=>{const t=new Map(e.otherParticipants.map((e=>[e.identity,e.dataTracks.map((e=>Kc.from(e)))])));this.incomingDataTrackManager.receiveSfuPublicationUpdates(t)})).on(e.EngineEvent.TokenRefreshed,(e=>{var t;null===(t=this.regionUrlProvider)||void 0===t||t.updateToken(e)})).on(e.EngineEvent.ServerRegionsReported,(e=>{var t;null===(t=this.regionUrlProvider)||void 0===t||t.setServerReportedRegions({regionSettings:e,updatedAtInMs:Date.now(),maxAgeInMs:Nl})})).on(e.EngineEvent.RequestSubscribedCodecRefresh,(()=>{for(const e of this.localParticipant.videoTrackPublications.values())jo(e.track)&&e.track.refreshSubscribedCodecs()})),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine),this.outgoingDataStreamManager&&this.outgoingDataStreamManager.setupEngine(this.engine))}createRegionStrategy(){return{getNextUrl:e=>kr(this,void 0,void 0,(function*(){return this.regionUrlProvider?this.regionUrlProvider.getNextBestRegionUrl(e):null})),resetAttempts:()=>{var e;return null===(e=this.regionUrlProvider)||void 0===e?void 0:e.resetAttempts()}}}static getLocalDevices(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Lc.getInstance().getDevices(e,t)}prepareConnection(t,i){return kr(this,void 0,void 0,(function*(){if(this.state===e.ConnectionState.Disconnected){this.log.debug("prepareConnection to ".concat(t));try{if(mo(new URL(t))&&i){this.regionUrlProvider=new xl(t,i);const n=yield this.regionUrlProvider.getNextBestRegionUrl();n&&this.state===e.ConnectionState.Disconnected&&(this.regionUrl=n,yield fetch(Ao(n),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(n)))}else yield fetch(Ao(t),{method:"HEAD"})}catch(n){this.log.warn("could not prepare connection",{error:n})}}}))}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,t){return kr(this,void 0,void 0,(function*(){let n,i=()=>kr(this,void 0,void 0,(function*(){}));switch(e){case"signal-reconnect":const r="number"==typeof t?t:0;yield this.engine.client.handleOnClose("simulate disconnect",void 0,r);break;case"fail-on-v1-path":this.engine.failNextV1Path();break;case"speaker":n=new Fi({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":n=new Fi({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":n=new Fi({scenario:{case:"serverLeave",value:!0}});break;case"migration":n=new Fi({scenario:{case:"migration",value:!0}});break;case"resume-reconnect":this.engine.failNext(),yield this.engine.client.handleOnClose("simulate resume-disconnect");break;case"disconnect-signal-on-resume":i=()=>kr(this,void 0,void 0,(function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")})),n=new Fi({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>kr(this,void 0,void 0,(function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")})),n=new Fi({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":n=new Fi({scenario:{case:"switchCandidateProtocol",value:"force-tls"===e?2:1}}),i=()=>kr(this,void 0,void 0,(function*(){const e=this.engine.client.onLeave;e&&e(new vi({reason:ot.CLIENT_INITIATED,action:fi.RECONNECT}))}));break;case"subscriber-bandwidth":if(void 0===t||"number"!=typeof t)throw new Error("subscriber-bandwidth requires a number as argument");n=new Fi({scenario:{case:"subscriberBandwidth",value:xo(t)}});break;case"leave-full-reconnect":n=new Fi({scenario:{case:"leaveRequestFullReconnect",value:!0}})}n&&(yield this.engine.client.sendSimulateScenario(n),yield i())}))}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(t,i){return kr(this,arguments,void 0,(function(t,i){var r=this;let s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return function*(){var a,o,c,d,l,u,h;let p=!0,m=!1;const g=s?{exact:i}:i;if("audioinput"===t){m=0===r.localParticipant.audioTrackPublications.size;const e=null!==(a=r.getActiveDevice(t))&&void 0!==a?a:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=g;const i=Array.from(r.localParticipant.audioTrackPublications.values()).filter((e=>e.source===Va.Source.Microphone));try{p=(yield Promise.all(i.map((e=>{var t;return null===(t=e.audioTrack)||void 0===t?void 0:t.setDeviceId(g)})))).every((e=>!0===e))}catch(n){throw r.options.audioCaptureDefaults.deviceId=e,n}const s=i.some((e=>{var t,n;return null!==(n=null===(t=e.track)||void 0===t?void 0:t.isMuted)&&void 0!==n&&n}));p&&s&&(m=!0)}else if("videoinput"===t){m=0===r.localParticipant.videoTrackPublications.size;const e=null!==(o=r.getActiveDevice(t))&&void 0!==o?o:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=g;const i=Array.from(r.localParticipant.videoTrackPublications.values()).filter((e=>e.source===Va.Source.Camera));try{p=(yield Promise.all(i.map((e=>{var t;return null===(t=e.videoTrack)||void 0===t?void 0:t.setDeviceId(g)})))).every((e=>!0===e))}catch(n){throw r.options.videoCaptureDefaults.deviceId=e,n}const s=i.some((e=>{var t,n;return null!==(n=null===(t=e.track)||void 0===t?void 0:t.isMuted)&&void 0!==n&&n}));p&&s&&(m=!0)}else if("audiooutput"===t){if(m=!0,!no()&&!r.options.webAudioMix||r.options.webAudioMix&&r.audioContext&&!("setSinkId"in r.audioContext))throw new Error("cannot switch audio output, the current browser does not support it");r.options.webAudioMix&&(i=null!==(c=yield Lc.getInstance().normalizeDeviceId("audiooutput",i))&&void 0!==c?c:""),null!==(d=(h=r.options).audioOutput)&&void 0!==d||(h.audioOutput={});const e=null!==(l=r.getActiveDevice(t))&&void 0!==l?l:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=i;try{r.options.webAudioMix&&(null===(u=r.audioContext)||void 0===u||u.setSinkId(i)),yield Promise.all(Array.from(r.remoteParticipants.values()).map((e=>e.setAudioOutput({deviceId:i}))))}catch(n){throw r.options.audioOutput.deviceId=e,n}}return m&&(r.localParticipant.activeDeviceMap.set(t,i),r.emit(e.RoomEvent.ActiveDeviceChanged,t,i)),p}()}))}setupLocalParticipantEvents(){this.localParticipant.on(e.ParticipantEvent.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(e.ParticipantEvent.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(e.ParticipantEvent.AttributesChanged,this.onLocalAttributesChanged).on(e.ParticipantEvent.TrackMuted,this.onLocalTrackMuted).on(e.ParticipantEvent.TrackUnmuted,this.onLocalTrackUnmuted).on(e.ParticipantEvent.LocalTrackPublished,this.onLocalTrackPublished).on(e.ParticipantEvent.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(e.ParticipantEvent.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(e.ParticipantEvent.MediaDevicesError,this.onMediaDevicesError).on(e.ParticipantEvent.AudioStreamAcquired,this.startAudio).on(e.ParticipantEvent.ChatMessage,this.onLocalChatMessageSent).on(e.ParticipantEvent.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(e){const t=this.engine;e&&t&&!t.client.isDisconnected?t.client.sendLeave().finally((()=>t.close())):null==t||t.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(t,n,i){var r,s;if([e.ConnectionState.Connecting,e.ConnectionState.Reconnecting].includes(this.state)){const s=Yo(t,n);this.log.debug("deferring on track for later",{mediaTrackId:t.id,mediaStreamId:n.id,tracksInStream:n.getTracks().map((e=>e.id))});const a=()=>{o(),this.onTrackAdded(t,n,i)},o=()=>{if(this.off(e.RoomEvent.Reconnected,a),this.off(e.RoomEvent.Connected,a),this.off(e.RoomEvent.Disconnected,o),s){const e=this.pendingTrackAddedCallbacks.get(s);null==e||e.delete(o),0===(null==e?void 0:e.size)&&this.pendingTrackAddedCallbacks.delete(s)}};if(this.once(e.RoomEvent.Reconnected,a),this.once(e.RoomEvent.Connected,a),this.once(e.RoomEvent.Disconnected,o),s){const e=null!==(r=this.pendingTrackAddedCallbacks.get(s))&&void 0!==r?r:new Set;e.add(o),this.pendingTrackAddedCallbacks.set(s,e)}return}if(this.state===e.ConnectionState.Disconnected)return void this.log.warn("skipping incoming track after Room disconnected");if("ended"===t.readyState)return void this.log.debug("skipping incoming track as it already ended");const a=za(n.id),o=a[0],c=a[1];let d=null!==(s=Yo(t,n))&&void 0!==s?s:t.id;if(o===this.localParticipant.sid)return void this.log.warn("tried to create RemoteParticipant for local participant");const l=Array.from(this.remoteParticipants.values()).find((e=>e.sid===o));if(!l)return void(o.startsWith("PA")&&this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(o)));if(!d.startsWith("TR")){const e=this.engine.getTrackIdForReceiver(i);if(!e)return void this.log.error("Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ".concat(o));d=e}let u;d.startsWith("TR")||this.log.warn("Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ".concat(o,", streamId: ").concat(c,", trackId: ").concat(d),{remoteParticipantID:o,streamId:c,trackId:d}),this.options.adaptiveStream&&(u="object"==typeof this.options.adaptiveStream?this.options.adaptiveStream:{});const h=l.addSubscribedMediaTrack(t,d,n,i,u);(null==h?void 0:h.isEncrypted)&&!this.e2eeManager&&this.emit(e.RoomEvent.EncryptionError,new Error("Encrypted ".concat(h.source," track received from participant ").concat(l.sid,", but room does not have encryption enabled!")))}cancelPendingTrackAdded(e){var t;null===(t=this.pendingTrackAddedCallbacks.get(e))||void 0===t||t.forEach((e=>e()))}handleLocalTrackSubscribed(t){const n=()=>this.localParticipant.getTrackPublications().find((e=>e.trackSid===t)),i=n();if(i)return void this.emitLocalTrackSubscribed(i);this.log.debug("deferring LocalTrackSubscribed, publication not yet available",{subscribedSid:t});let r;const s=e=>{e.trackSid===t&&(a(),this.emitLocalTrackSubscribed(e))},a=()=>{clearTimeout(r),this.localParticipant.off(e.ParticipantEvent.LocalTrackPublished,s),this.off(e.RoomEvent.Disconnected,a)};this.localParticipant.on(e.ParticipantEvent.LocalTrackPublished,s),this.once(e.RoomEvent.Disconnected,a),r=setTimeout((()=>{a();const e=n();e?this.emitLocalTrackSubscribed(e):this.log.warn("could not find local track publication for LocalTrackSubscribed event after timeout",{subscribedSid:t})}),1e4)}emitLocalTrackSubscribed(t){this.localParticipant.emit(e.ParticipantEvent.LocalTrackSubscribed,t),this.emitWhenConnected(e.RoomEvent.LocalTrackSubscribed,t,this.localParticipant)}handleDisconnect(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=arguments.length>1?arguments[1]:void 0;var i,r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearControllers(),this.incomingDataTrackManager.reset(),this.outgoingDataTrackManager.reset(),this.state!==e.ConnectionState.Disconnected){this.regionUrl=void 0,this.regionUrlProvider&&this.regionUrlProvider.notifyDisconnected();try{this.remoteParticipants.forEach((e=>{e.trackPublications.forEach((t=>{e.unpublishTrack(t.trackSid)}))})),this.localParticipant.trackPublications.forEach((e=>{var n,i,r;e.track&&this.localParticipant.unpublishTrack(e.track,t),t?(null===(n=e.track)||void 0===n||n.detach(),null===(i=e.track)||void 0===i||i.stop()):null===(r=e.track)||void 0===r||r.stopMonitor()})),this.localParticipant.off(e.ParticipantEvent.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(e.ParticipantEvent.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(e.ParticipantEvent.AttributesChanged,this.onLocalAttributesChanged).off(e.ParticipantEvent.TrackMuted,this.onLocalTrackMuted).off(e.ParticipantEvent.TrackUnmuted,this.onLocalTrackUnmuted).off(e.ParticipantEvent.LocalTrackPublished,this.onLocalTrackPublished).off(e.ParticipantEvent.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(e.ParticipantEvent.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(e.ParticipantEvent.MediaDevicesError,this.onMediaDevicesError).off(e.ParticipantEvent.AudioStreamAcquired,this.startAudio).off(e.ParticipantEvent.ChatMessage,this.onLocalChatMessageSent).off(e.ParticipantEvent.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),ho()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),null===(r=null===(i=navigator.mediaDevices)||void 0===i?void 0:i.removeEventListener)||void 0===r||r.call(i,"devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(e.ConnectionState.Disconnected),this.emit(e.RoomEvent.Disconnected,n)}}}handleParticipantDisconnected(t,n,i){this.remoteParticipants.delete(t),n&&(this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(t),this.incomingDataTrackManager.handleRemoteParticipantDisconnected(t),n.trackPublications.forEach((e=>{n.unpublishTrack(e.trackSid,!0)})),this.emit(e.RoomEvent.ParticipantDisconnected,n,i),n.setDisconnected(),this.rpcClientManager.handleParticipantDisconnected(n.identity))}selectDefaultDevices(){return kr(this,void 0,void 0,(function*(){var t,n,i;const r=Lc.getInstance().previousDevices,s=yield Lc.getInstance().getDevices(void 0,!1),a=Us();if("Chrome"===(null==a?void 0:a.name)&&"iOS"!==a.os)for(let c of s){const t=r.find((e=>e.deviceId===c.deviceId));t&&""!==t.label&&t.kind===c.kind&&t.label!==c.label&&"default"===this.getActiveDevice(c.kind)&&this.emit(e.RoomEvent.ActiveDeviceChanged,c.kind,c.deviceId)}const o=["audiooutput","audioinput","videoinput"];for(let e of o){const a=Oa(e),o=this.localParticipant.getTrackPublication(a);if(o&&(null===(t=o.track)||void 0===t?void 0:t.isUserProvided))continue;const c=s.filter((t=>t.kind===e)),d=this.getActiveDevice(e);d===(null===(n=r.filter((t=>t.kind===e))[0])||void 0===n?void 0:n.deviceId)&&c.length>0&&(null===(i=c[0])||void 0===i?void 0:i.deviceId)!==d?yield this.switchActiveDevice(e,c[0].deviceId):"audioinput"===e&&!oo()||"videoinput"===e||!(c.length>0)||c.find((t=>t.deviceId===this.getActiveDevice(e)))||"audiooutput"===e&&oo()||(yield this.switchActiveDevice(e,c[0].deviceId))}}))}acquireAudioContext(){return kr(this,void 0,void 0,(function*(){var t,i;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!==(t=Da())&&void 0!==t?t:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach((e=>e.setAudioContext(this.audioContext))),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&"suspended"===this.audioContext.state)try{yield Promise.race([this.audioContext.resume(),Ga(200)])}catch(n){this.log.warn("Could not resume audio context",{error:n})}const r="running"===(null===(i=this.audioContext)||void 0===i?void 0:i.state);r!==this.canPlaybackAudio&&(this.audioEnabled=r,this.emit(e.RoomEvent.AudioPlaybackStatusChanged,r))}))}createParticipant(e,t){var n;let i;return i=t?kh.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName},this.incomingDataTrackManager):new kh(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&i.setAudioContext(this.audioContext),(null===(n=this.options.audioOutput)||void 0===n?void 0:n.deviceId)&&i.setAudioOutput(this.options.audioOutput).catch((e=>this.log.warn("Could not set audio output: ".concat(e.message)))),i}getOrCreateParticipant(t,n){if(this.remoteParticipants.has(t)){const e=this.remoteParticipants.get(t);if(n){e.updateInfo(n)&&this.sidToIdentity.set(n.sid,n.identity)}return e}const i=this.createParticipant(t,n);return this.remoteParticipants.set(t,i),this.sidToIdentity.set(n.sid,n.identity),this.emitWhenConnected(e.RoomEvent.ParticipantConnected,i),i.on(e.ParticipantEvent.TrackPublished,(t=>{this.emitWhenConnected(e.RoomEvent.TrackPublished,t,i)})).on(e.ParticipantEvent.TrackSubscribed,((t,n)=>{t.kind===Va.Kind.Audio?(t.on(e.TrackEvent.AudioPlaybackStarted,this.handleAudioPlaybackStarted),t.on(e.TrackEvent.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):t.kind===Va.Kind.Video&&(t.on(e.TrackEvent.VideoPlaybackFailed,this.handleVideoPlaybackFailed),t.on(e.TrackEvent.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emitWhenConnected(e.RoomEvent.TrackSubscribed,t,n,i)})).on(e.ParticipantEvent.TrackUnpublished,(t=>{this.cancelPendingTrackAdded(t.trackSid),this.emit(e.RoomEvent.TrackUnpublished,t,i)})).on(e.ParticipantEvent.TrackUnsubscribed,((t,n)=>{this.emit(e.RoomEvent.TrackUnsubscribed,t,n,i)})).on(e.ParticipantEvent.TrackMuted,(t=>{this.emitWhenConnected(e.RoomEvent.TrackMuted,t,i)})).on(e.ParticipantEvent.TrackUnmuted,(t=>{this.emitWhenConnected(e.RoomEvent.TrackUnmuted,t,i)})).on(e.ParticipantEvent.ParticipantMetadataChanged,(t=>{this.emitWhenConnected(e.RoomEvent.ParticipantMetadataChanged,t,i)})).on(e.ParticipantEvent.ParticipantNameChanged,(t=>{this.emitWhenConnected(e.RoomEvent.ParticipantNameChanged,t,i)})).on(e.ParticipantEvent.AttributesChanged,(t=>{this.emitWhenConnected(e.RoomEvent.ParticipantAttributesChanged,t,i)})).on(e.ParticipantEvent.ConnectionQualityChanged,(t=>{this.emitWhenConnected(e.RoomEvent.ConnectionQualityChanged,t,i)})).on(e.ParticipantEvent.ParticipantPermissionsChanged,(t=>{this.emitWhenConnected(e.RoomEvent.ParticipantPermissionsChanged,t,i)})).on(e.ParticipantEvent.TrackSubscriptionStatusChanged,((t,n)=>{this.emitWhenConnected(e.RoomEvent.TrackSubscriptionStatusChanged,t,n,i)})).on(e.ParticipantEvent.TrackSubscriptionFailed,((t,n)=>{this.emit(e.RoomEvent.TrackSubscriptionFailed,t,i,n)})).on(e.ParticipantEvent.TrackSubscriptionPermissionChanged,((t,n)=>{this.emitWhenConnected(e.RoomEvent.TrackSubscriptionPermissionChanged,t,n,i)})).on(e.ParticipantEvent.Active,(()=>{this.emitWhenConnected(e.RoomEvent.ParticipantActive,i),i.kind===ft.AGENT&&this.localParticipant.setActiveAgent(i)})),n&&i.updateInfo(n),i}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce(((e,t)=>(e.push(...t.getTrackPublications()),e)),[]),t=this.localParticipant.getTrackPublications(),n=this.outgoingDataTrackManager.queryPublished();this.engine.sendSyncState(e,t,n)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const t of e.videoTrackPublications.values())t.isSubscribed&&Wo(t)&&t.emitTrackUpdate()}getRemoteParticipantBySid(e){const t=this.sidToIdentity.get(e);if(t)return this.remoteParticipants.get(t)}getClientInfoCapabilities(e){var t;const n=[];return(kc(null!==(t=e.frameMetadata)&&void 0!==t?t:e.packetTrailer)||this.e2eeManager)&&n.push($t.CAP_PACKET_TRAILER),Qo()&&n.push($t.CAP_COMPRESSION_DEFLATE_RAW),n}registerRpcDataStreamHandler(){this.incomingDataStreamManager.registerTextStreamHandler(Zu,((e,t)=>kr(this,[e,t],void 0,(function(e,t){var n=this;let i=t.identity;return function*(){var t;const r=null!==(t=e.info.attributes)&&void 0!==t?t:{};yield n.rpcServerManager.handleIncomingDataStream(e,i,r)}()})))),this.incomingDataStreamManager.registerTextStreamHandler($u,((e,t)=>kr(this,[e,t],void 0,(function(e,t){var n=this;let i=t.identity;return function*(){var t;const r=null!==(t=e.info.attributes)&&void 0!==t?t:{};yield n.rpcClientManager.handleIncomingDataStream(e,i,r)}()}))))}setStatsLogging(e){e?this.statsLogInterval||(this.statsLogInterval=da.setInterval((()=>{this.logWebRTCStats()}),3e4)):this.statsLogInterval&&(da.clearInterval(this.statsLogInterval),this.statsLogInterval=void 0)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=da.setInterval((()=>{this.engine&&!this.engine.isClosed&&this.engine.verifyTransport()?e=0:(e++,this.log.warn("detected connection state mismatch",{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnectedOrConnecting:this.engine.verifyTransport()}:void 0}),e>=3&&(this.clearConnectionReconcile(),this.engine&&!this.engine.isClosed?(this.log.warn("detected connection state mismatch, attempting full reconnect"),this.engine.reconnect()):(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,ot.STATE_MISMATCH))))}),4e3)}clearConnectionReconcile(){this.connectionReconcileInterval&&da.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(t){return t!==this.state&&(this.log.info("connection state changed: ".concat(this.state," -> ").concat(t)),this.state=t,this.incomingDataStreamManager.setConnected(t===e.ConnectionState.Connected),this.setStatsLogging(t===e.ConnectionState.Connected),this.emit(e.RoomEvent.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach((e=>{let t=B(e,2),n=t[0],i=t[1];this.emit(n,...i)})),this.bufferedEvents=[]}emitWhenConnected(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;rthis.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(t),this.localParticipant.emit(e.ParticipantEvent.LocalTrackPublished,t)}if(a.audio){const t=new oh(Va.Kind.Audio,new Tt({source:it.MICROPHONE,sid:Math.floor(1e4*Math.random()).toString(),type:nt.AUDIO}),new pl(a.useRealTracks&&(null===(r=navigator.mediaDevices)||void 0===r?void 0:r.getUserMedia)?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:_o(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(t),this.localParticipant.emit(e.ParticipantEvent.LocalTrackPublished,t)}for(let e=0;e1?n-1:0),r=1;rvoid 0!==e));t!==e.RoomEvent.TrackSubscribed&&t!==e.RoomEvent.TrackUnsubscribed||this.log.trace("subscribe trace: ".concat(t),{event:t,args:n}),this.log.debug("room event ".concat(t),{event:t,args:n})}return super.emit(t,...i)}}function bh(e){return e.map((e=>{if(e)return Array.isArray(e)?bh(e):"object"==typeof e?"logContext"in e?e.logContext:void 0:e}))}yh.cleanupRegistry="undefined"!=typeof FinalizationRegistry&&"undefined"!=typeof WeakRef&&new FinalizationRegistry((e=>{e()}));var Th,Sh=Object.freeze({__proto__:null,Convert:class{static toAgentAttributes(e){return JSON.parse(e)}static agentAttributesToJson(e){return JSON.stringify(e)}static toTranscriptionAttributes(e){return JSON.parse(e)}static transcriptionAttributesToJson(e){return JSON.stringify(e)}}});e.CheckStatus=void 0,(Th=e.CheckStatus||(e.CheckStatus={}))[Th.IDLE=0]="IDLE",Th[Th.RUNNING=1]="RUNNING",Th[Th.SKIPPED=2]="SKIPPED",Th[Th.SUCCESS=3]="SUCCESS",Th[Th.FAILED=4]="FAILED";class Eh extends wr.EventEmitter{constructor(t,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super(),this.status=e.CheckStatus.IDLE,this.logs=[],this.options={},this.url=t,this.token=n,this.name=this.constructor.name,this.room=new yh(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(t){return kr(this,void 0,void 0,(function*(){if(this.status!==e.CheckStatus.IDLE)throw Error("check is running already");this.setStatus(e.CheckStatus.RUNNING);try{yield this.perform()}catch(n){n instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(n.message):this.appendError(n.message))}return yield this.disconnect(),yield new Promise((e=>setTimeout(e,500))),this.status!==e.CheckStatus.SKIPPED&&this.setStatus(this.isSuccess()?e.CheckStatus.SUCCESS:e.CheckStatus.FAILED),t&&t(),this.getInfo()}))}isSuccess(){return!this.logs.some((e=>"error"===e.level))}connect(t){return kr(this,void 0,void 0,(function*(){return this.room.state===e.ConnectionState.Connected||(t||(t=this.url),yield this.room.connect(t,this.token,this.connectOptions)),this.room}))}disconnect(){return kr(this,void 0,void 0,(function*(){this.room&&this.room.state!==e.ConnectionState.Disconnected&&(yield this.room.disconnect(),yield new Promise((e=>setTimeout(e,500))))}))}skip(){this.setStatus(e.CheckStatus.SKIPPED)}switchProtocol(t){return kr(this,void 0,void 0,(function*(){let n=!1,i=!1;if(this.room.on(e.RoomEvent.Reconnecting,(()=>{n=!0})),this.room.once(e.RoomEvent.Reconnected,(()=>{i=!0})),this.room.simulateScenario("force-".concat(t)),yield new Promise((e=>setTimeout(e,1e3))),!n)return;const r=Date.now()+1e4;for(;Date.now().5*(e.duration-t.duration)+.5*(e.rtt-t.rtt)));const i=t[0];this.bestStats=i,this.appendMessage("best Cloud region: ".concat(i.region))}))}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return kr(this,void 0,void 0,(function*(){var t,n;yield this.connect(e),"tcp"===this.options.protocol&&(yield this.switchProtocol("tcp"));const i=null===(t=this.room.serverInfo)||void 0===t?void 0:t.region;if(!i)throw new Error("Region not found");const r=yield this.room.localParticipant.streamText({topic:"test"}),s="A".repeat(1e3),a=Date.now();for(let e=0;e<1e3;e++)yield r.write(s);yield r.close();const o=Date.now(),c=yield null===(n=this.room.engine.pcManager)||void 0===n?void 0:n.publisher.getStats(),d={region:i,rtt:1e4,duration:o-a};return null==c||c.forEach((e=>{"candidate-pair"===e.type&&e.nominated&&(d.rtt=1e3*e.currentRoundTripTime)})),yield this.disconnect(),d}))}}const wh=1e4;class Rh extends Eh{get description(){return"Connection via UDP vs TCP"}perform(){return kr(this,void 0,void 0,(function*(){const e=yield this.checkConnectionProtocol("udp"),t=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-t.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-t.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=t):this.appendMessage("best connection quality via udp");const n=this.bestStats;this.appendMessage("upstream bitrate: ".concat((n.bitrateTotal/n.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((n.rttTotal/n.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((n.jitterTotal/n.count*1e3).toFixed(2)," ms")),n.packetsLost>0&&this.appendWarning("packets lost: ".concat((n.packetsLost/n.packetsSent*100).toFixed(2),"%")),n.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((n.qualityLimitationDurations.bandwidth/10*100).toFixed(2),"%")),n.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((n.qualityLimitationDurations.cpu/10*100).toFixed(2),"%"))}))}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return kr(this,void 0,void 0,(function*(){yield this.connect(),"tcp"===e?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const t=document.createElement("canvas");t.width=1280,t.height=720;const n=t.getContext("2d");if(!n)throw new Error("Could not get canvas context");let i=0;const r=()=>{i=(i+1)%360,n.fillStyle="hsl(".concat(i,", 100%, 50%)"),n.fillRect(0,0,t.width,t.height),requestAnimationFrame(r)};r();const s=t.captureStream(30).getVideoTracks()[0],a=(yield this.room.localParticipant.publishTrack(s,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,o={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},c=setInterval((()=>kr(this,void 0,void 0,(function*(){const e=yield a.getRTCStatsReport();null==e||e.forEach((e=>{"outbound-rtp"===e.type?(o.packetsSent=e.packetsSent,o.qualityLimitationDurations=e.qualityLimitationDurations,o.bitrateTotal+=e.targetBitrate,o.count++):"remote-inbound-rtp"===e.type&&(o.packetsLost=e.packetsLost,o.rttTotal+=e.roundTripTime,o.jitterTotal+=e.jitter)}))}))),1e3);return yield new Promise((e=>setTimeout(e,wh))),clearInterval(c),s.stop(),t.remove(),yield this.disconnect(),o}))}}class Ph extends Eh{get description(){return"Can publish audio"}perform(){return kr(this,void 0,void 0,(function*(){var e;const t=yield this.connect(),n=yield lh();if(yield Ma(n,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(n),yield new Promise((e=>setTimeout(e,3e3)));const i=yield null===(e=n.sender)||void 0===e?void 0:e.getStats();if(!i)throw new Error("Could not get RTCStats");let r=0;if(i.forEach((e=>{"outbound-rtp"!==e.type||"audio"!==e.kind&&(e.kind||"audio"!==e.mediaType)||(r=e.packetsSent)})),0===r)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," audio packets"))}))}}class Ih extends Eh{get description(){return"Can publish video"}perform(){return kr(this,void 0,void 0,(function*(){var e;const t=yield this.connect(),n=yield dh();yield this.checkForVideo(n.mediaStreamTrack),t.localParticipant.publishTrack(n),yield new Promise((e=>setTimeout(e,5e3)));const i=yield null===(e=n.sender)||void 0===e?void 0:e.getStats();if(!i)throw new Error("Could not get RTCStats");let r=0;if(i.forEach((e=>{"outbound-rtp"!==e.type||"video"!==e.kind&&(e.kind||"video"!==e.mediaType)||(r+=e.packetsSent)})),0===r)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))}))}checkForVideo(e){return kr(this,void 0,void 0,(function*(){const t=new MediaStream;t.addTrack(e.clone());const n=document.createElement("video");n.srcObject=t,n.muted=!0,n.autoplay=!0,n.playsInline=!0,n.setAttribute("playsinline","true"),document.body.appendChild(n),yield new Promise((t=>{n.onplay=()=>{setTimeout((()=>{var i,r,s,a;const o=document.createElement("canvas"),c=e.getSettings(),d=null!==(r=null!==(i=c.width)&&void 0!==i?i:n.videoWidth)&&void 0!==r?r:1280,l=null!==(a=null!==(s=c.height)&&void 0!==s?s:n.videoHeight)&&void 0!==a?a:720;o.width=d,o.height=l;const u=o.getContext("2d");u.drawImage(n,0,0);const h=u.getImageData(0,0,o.width,o.height).data;let p=!0;for(let e=0;ee.stop())),n.remove()}))}}class _h extends Eh{get description(){return"Resuming connection after interruption"}perform(){return kr(this,void 0,void 0,(function*(){var t;const n=yield this.connect();let i,r=!1,s=!1;const a=new Promise((e=>{setTimeout(e,5e3),i=e})),o=()=>{r=!0};n.on(e.RoomEvent.SignalReconnecting,o).on(e.RoomEvent.Reconnecting,o).on(e.RoomEvent.Reconnected,(()=>{s=!0,i(!0)})),null===(t=n.engine.client.ws)||void 0===t||t.close();const c=n.engine.client.onClose;if(c&&c(""),yield a,!r)throw new Error("Did not attempt to reconnect");if(!s||n.state!==e.ConnectionState.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}))}}class Mh extends Eh{get description(){return"Can connect via TURN"}perform(){return kr(this,void 0,void 0,(function*(){var e,t,n;mo(new URL(this.url))&&(this.appendMessage("Using region specific url"),this.url=null!==(e=yield new xl(this.url,this.token).getNextBestRegionUrl())&&void 0!==e?e:this.url);const i=new gd,r=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0);let s=!1,a=!1,o=!1;for(let c of r.iceServers)for(let e of c.urls)e.startsWith("turn:")?(a=!0,o=!0):e.startsWith("turns:")&&(a=!0,o=!0,s=!0),e.startsWith("stun:")&&(o=!0);o?a&&!s&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield i.close(),(null===(n=null===(t=this.connectOptions)||void 0===t?void 0:t.rtcConfig)||void 0===n?void 0:n.iceServers)||a?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise((e=>setTimeout(e,0))))}))}}class Dh extends Eh{get description(){return"Establishing WebRTC connection"}perform(){return kr(this,void 0,void 0,(function*(){let t=!1,n=!1;this.room.on(e.RoomEvent.SignalConnected,(()=>{var e;const i=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(e,r)=>{if(e.candidate){const i=new RTCIceCandidate(e);let r="".concat(i.protocol," ").concat(i.address,":").concat(i.port," ").concat(i.type);i.address&&(!function(e){const t=e.split(".");if(4===t.length){if("10"===t[0])return!0;if("192"===t[0]&&"168"===t[1])return!0;if("172"===t[0]){const e=parseInt(t[1],10);if(e>=16&&e<=31)return!0}}return!1}(i.address)?"tcp"===i.protocol&&"passive"===i.tcpType?(t=!0,r+=" (passive)"):"udp"===i.protocol&&(n=!0):r+=" (private)"),this.appendMessage(r)}i&&i(e,r)},(null===(e=this.room.engine.pcManager)||void 0===e?void 0:e.subscriber)&&(this.room.engine.pcManager.subscriber.onIceCandidateError=e=>{e instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(e.errorCode," ").concat(e.errorText," ").concat(e.url))})}));try{yield this.connect(),or.info("now the room is connected")}catch(i){throw this.appendWarning("ports need to be open on firewall in order to connect."),i}t||this.appendWarning("Server is not configured for ICE/TCP"),n||this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")}))}}class Oh extends Eh{get description(){return"Connecting to signal connection via WebSocket"}perform(){return kr(this,void 0,void 0,(function*(){var e,t,i;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let r,s=new gd;try{r=yield s.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0)}catch(n){if(mo(new URL(this.url))){this.appendMessage("Initial connection failed with error ".concat(n.message,". Retrying with region fallback"));const t=new xl(this.url,this.token),i=yield t.getNextBestRegionUrl();i&&(r=yield s.join(i,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3},void 0,!0),this.appendMessage("Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time"))}}r?(this.appendMessage("Connected to server, version ".concat(r.serverVersion,".")),(null===(e=r.serverInfo)||void 0===e?void 0:e.edition)===Yt.Cloud&&(null===(t=r.serverInfo)||void 0===t?void 0:t.region)&&this.appendMessage("LiveKit Cloud: ".concat(null===(i=r.serverInfo)||void 0===i?void 0:i.region))):this.appendError("Websocket connection could not be established"),yield s.close()}))}}class Ah extends wr.EventEmitter{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=t,this.options=n}getNextCheckId(){const t=this.checkResults.size;return this.checkResults.set(t,{logs:[],status:e.CheckStatus.IDLE,name:"",description:""}),t}updateCheck(e,t){this.checkResults.set(e,t),this.emit("checkUpdate",e,t)}isSuccess(){return Array.from(this.checkResults.values()).every((t=>t.status!==e.CheckStatus.FAILED))}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return kr(this,void 0,void 0,(function*(){const t=this.getNextCheckId(),n=new e(this.url,this.token,this.options),i=e=>{this.updateCheck(t,e)};n.on("update",i);const r=yield n.run();return n.off("update",i),r}))}checkWebsocket(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Oh)}))}checkWebRTC(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Dh)}))}checkTURN(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Mh)}))}checkReconnect(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(_h)}))}checkPublishAudio(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Ph)}))}checkPublishVideo(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Ih)}))}checkConnectionProtocol(){return kr(this,void 0,void 0,(function*(){const e=yield this.createAndRunCheck(Rh);if(e.data&&"protocol"in e.data){const t=e.data;this.options.protocol=t.protocol}return e}))}checkCloudRegion(){return kr(this,void 0,void 0,(function*(){return this.createAndRunCheck(Ch)}))}}class Lh{}class Nh{}new TextEncoder;const xh=new TextDecoder,Uh=new TextDecoder("utf-8",{fatal:!0});class Fh extends Error{constructor(e,t){var n;super(e,t),x(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,null===(n=Error.captureStackTrace)||void 0===n||n.call(Error,this,this.constructor)}}x(Fh,"code","ERR_JOSE_GENERIC");x(class extends Fh{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unspecified";super(e,{cause:{claim:n,reason:i,payload:t}}),x(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),x(this,"claim",void 0),x(this,"reason",void 0),x(this,"payload",void 0),this.claim=n,this.reason=i,this.payload=t}},"code","ERR_JWT_CLAIM_VALIDATION_FAILED");x(class extends Fh{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unspecified";super(e,{cause:{claim:n,reason:i,payload:t}}),x(this,"code","ERR_JWT_EXPIRED"),x(this,"claim",void 0),x(this,"reason",void 0),x(this,"payload",void 0),this.claim=n,this.reason=i,this.payload=t}},"code","ERR_JWT_EXPIRED");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}},"code","ERR_JOSE_ALG_NOT_ALLOWED");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JOSE_NOT_SUPPORTED")}},"code","ERR_JOSE_NOT_SUPPORTED");x(class extends Fh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"decryption operation failed",arguments.length>1?arguments[1]:void 0),x(this,"code","ERR_JWE_DECRYPTION_FAILED")}},"code","ERR_JWE_DECRYPTION_FAILED");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JWE_INVALID")}},"code","ERR_JWE_INVALID");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JWS_INVALID")}},"code","ERR_JWS_INVALID");class Bh extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JWT_INVALID")}}x(Bh,"code","ERR_JWT_INVALID");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JWK_INVALID")}},"code","ERR_JWK_INVALID");x(class extends Fh{constructor(){super(...arguments),x(this,"code","ERR_JWKS_INVALID")}},"code","ERR_JWKS_INVALID");x(class extends Fh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"no applicable key found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),x(this,"code","ERR_JWKS_NO_MATCHING_KEY")}},"code","ERR_JWKS_NO_MATCHING_KEY");x(class extends Fh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"multiple matching keys found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),x(this,Symbol.asyncIterator,function(e){return function(){return new V(e.apply(this,arguments))}}((function*(){}))),x(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}},"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");x(class extends Fh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"request timed out",arguments.length>1?arguments[1]:void 0),x(this,"code","ERR_JWKS_TIMEOUT")}},"code","ERR_JWKS_TIMEOUT");x(class extends Fh{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"signature verification failed",arguments.length>1?arguments[1]:void 0),x(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}},"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");function jh(e){try{return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e,{alphabet:t?"base64url":"base64"});if(t){if(e.includes("+")||e.includes("/"))throw new TypeError("Invalid base64url");e=e.replace(/-/g,"+").replace(/_/g,"/")}const n=atob(e),i=new Uint8Array(n.length);for(let r=0;rn)return!1}const i=t.exp*Vh;return new Date(i-6e4)>n}(this.cachedResponse)&&!!this.isSameAsCachedFetchOptions(e))}getCachedResponseJwtPayload(){return this.cachedResponse?Wh(this.cachedResponse.participantToken):null}fetch(e,t){return kr(this,void 0,void 0,(function*(){const n=yield this.fetchMutex.lock();try{if(t&&(this.cachedResponse=null),this.shouldReturnCachedValueFromFetch(e))return this.cachedResponse.toJson();this.cachedFetchOptions=e;const n=yield this.update(e);return this.cachedResponse=n,n.toJson()}finally{n()}}))}}class zh extends Lh{constructor(e){super(),this.literalOrFn=e}fetch(){return kr(this,void 0,void 0,(function*(){return"function"==typeof this.literalOrFn?this.literalOrFn():this.literalOrFn}))}}class Gh extends Kh{constructor(e){super(),this.customFn=e}update(e){return kr(this,void 0,void 0,(function*(){const t=this.customFn(e);let n;return n=t instanceof Promise?yield t:t,$i.fromJson(n,{ignoreUnknownFields:!0})}))}}class Jh extends Kh{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),this.url=e,this.endpointOptions=t}createRequestFromOptions(e){var t,n,i,r;const s=new Zi;for(const a of Object.keys(e))switch(a){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":s[a]=e[a];break;case"participantAttributes":s.participantAttributes=null!==(t=e.participantAttributes)&&void 0!==t?t:{};break;case"agentName":s.roomConfig=null!==(n=s.roomConfig)&&void 0!==n?n:new Fn,0===s.roomConfig.agents.length&&s.roomConfig.agents.push(new vn),s.roomConfig.agents[0].agentName=e.agentName;break;case"agentMetadata":s.roomConfig=null!==(i=s.roomConfig)&&void 0!==i?i:new Fn,0===s.roomConfig.agents.length&&s.roomConfig.agents.push(new vn),s.roomConfig.agents[0].metadata=e.agentMetadata;break;case"deployment":s.roomConfig=null!==(r=s.roomConfig)&&void 0!==r?r:new Fn,0===s.roomConfig.agents.length&&s.roomConfig.agents.push(new vn),s.roomConfig.agents[0].deployment=e.deployment;break;default:throw new Error("Options key ".concat(a," not being included in forming request!"))}return s}update(e){return kr(this,void 0,void 0,(function*(){var t;const n=this.createRequestFromOptions(e),i=yield fetch(this.url,Object.assign(Object.assign({},this.endpointOptions),{method:null!==(t=this.endpointOptions.method)&&void 0!==t?t:"POST",headers:Object.assign({"Content-Type":"application/json"},this.endpointOptions.headers),body:n.toJsonString({useProtoFieldName:!0})}));if(!i.ok)throw new Error("Error generating token from endpoint ".concat(this.url,": received ").concat(i.status," / ").concat(yield i.text()));const r=yield i.json();return $i.fromJson(r,{ignoreUnknownFields:!0})}))}}class Qh extends Jh{constructor(e,t){const n=t.baseUrl,i=void 0===n?"https://cloud-api.livekit.io":n,r=fr(t,["baseUrl"]);super("".concat(i,"/api/v2/sandbox/connection-details"),Object.assign(Object.assign({},r),{headers:{"X-Sandbox-ID":e}}))}}class Yh extends Qh{}const Xh={literal:e=>new zh(e),custom:e=>new Gh(e),endpoint(e){return new Jh(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})},sandboxTokenServer(e){return new Yh(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})},developmentTokenServer(e){return new Qh(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}};const Zh=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),$h=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]]);function ep(e){var t;const n=e.trim().toLowerCase();if(""!==n)return Zh.has(n)?Zh.get(n):null===(t=Array.from($h.entries()).find((e=>{let t=B(e,1)[0];return n.includes(t)})))||void 0===t?void 0:t[1]}const tp=Symbol.for("lk.serializer");function np(e){return Object.assign(Object.assign({},e),{symbol:tp})}const ip={json:function(){return np({parse:e=>JSON.parse(e),serialize:e=>JSON.stringify(e)})},raw:function(){return np({parse:e=>e,serialize:e=>e})},custom:function(e){return np(e)}};e.BaseKeyProvider=mc,e.CLIENT_PROTOCOL_DATA_STREAM_RPC=1,e.CLIENT_PROTOCOL_DATA_STREAM_V2=2,e.CLIENT_PROTOCOL_DEFAULT=0,e.Checker=Eh,e.ConnectionCheck=Ah,e.ConnectionError=Xs,e.CriticalTimers=da,e.CryptorError=vc,e.DataPacket_Kind=Lt,e.DataStreamError=oa,e.DataTrackPacket=Ru,e.DefaultReconnectPolicy=vr,e.DeviceUnsupportedError=$s,e.DisconnectReason=ot,e.Encryption_Type=yt,e.ExternalE2EEKeyProvider=class extends mc{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(Object.assign(Object.assign({},e),{sharedKey:!0,ratchetWindowSize:0,failureTolerance:-1}))}setKey(e){return kr(this,void 0,void 0,(function*(){const t="string"==typeof e?yield lc(e):yield uc(e);this.onSetEncryptionKey(t)}))}},e.FrameMetadataManager=Mc,e.LivekitError=Vs,e.LivekitReasonedError=Ws,e.LocalAudioTrack=pl,e.LocalDataTrack=zu,e.LocalParticipant=mh,e.LocalTrack=hl,e.LocalTrackPublication=oh,e.LocalTrackRecorder=ul,e.LocalVideoTrack=Rl,e.Mutex=r,e.NegotiationError=ia,e.PacketTrailerManager=Dc,e.Participant=ph,e.ParticipantKind=ft,e.PublishDataError=ra,e.PublishTrackError=sa,e.RemoteAudioTrack=sh,e.RemoteDataTrack=Eu,e.RemoteParticipant=kh,e.RemoteTrack=Ec,e.RemoteTrackPublication=fh,e.RemoteVideoTrack=Cc,e.Room=yh,e.RpcError=Xu,e.ScreenSharePresets=Ra,e.SignalReconnectError=ca,e.SignalRequestError=aa,e.SimulatedError=class extends Vs{constructor(){super(-1,arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Simulated failure"),this.name="simulated"}},e.SubscriptionError=dt,e.TokenSource=Xh,e.TokenSourceConfigurable=Nh,e.TokenSourceFixed=Lh,e.Track=Va,e.TrackInvalidError=ea,e.TrackPublication=ah,e.TrackType=nt,e.UnexpectedConnectionState=na,e.UnsupportedServer=ta,e.VideoPreset=va,e.VideoPresets=Ca,e.VideoPresets43=wa,e.areTokenSourceFetchOptionsEqual=Hh,e.asEncryptablePacket=pc,e.attachToElement=Wa,e.attributes=Sh,e.audioCodecs=fa,e.canFailOverToAnotherRegion=Zs,e.clientProtocol=2,e.compareVersions=yo,e.createAudioAnalyser=function(e,t){const n=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:.8,minDecibels:-100,maxDecibels:-80},t),i=Da();if(!i)throw new Error("Audio Context not supported on this browser");const r=n.cloneTrack?e.mediaStreamTrack.clone():e.mediaStreamTrack,s=i.createMediaStreamSource(new MediaStream([r])),a=i.createAnalyser();a.minDecibels=n.minDecibels,a.maxDecibels=n.maxDecibels,a.fftSize=n.fftSize,a.smoothingTimeConstant=n.smoothingTimeConstant,s.connect(a);const o=new Uint8Array(a.frequencyBinCount);return{calculateVolume:()=>{a.getByteFrequencyData(o);let e=0;for(const t of o)e+=Math.pow(t/255,2);return Math.sqrt(e/o.length)},analyser:a,cleanup:()=>kr(this,void 0,void 0,(function*(){yield i.close(),n.cloneTrack&&r.stop()}))}},e.createE2EEKey=function(){return window.crypto.getRandomValues(new Uint8Array(32))},e.createKeyMaterialFromBuffer=uc,e.createKeyMaterialFromString=lc,e.createLocalAudioTrack=lh,e.createLocalScreenTracks=function(e){return kr(this,void 0,void 0,(function*(){if(void 0===e&&(e={}),void 0!==e.resolution||lo()||(e.resolution=Ra.h1080fps30.resolution),void 0===navigator.mediaDevices.getDisplayMedia)throw new $s("getDisplayMedia not supported");const t=La(e),n=yield navigator.mediaDevices.getDisplayMedia(t),i=n.getVideoTracks();if(0===i.length)throw new ea("no video track found");const r=new Rl(i[0],void 0,!1);r.source=Va.Source.ScreenShare;const s=[r];if(n.getAudioTracks().length>0){const e=new pl(n.getAudioTracks()[0],void 0,!1);e.source=Va.Source.ScreenShareAudio,s.push(e)}return s}))},e.createLocalTracks=ch,e.createLocalVideoTrack=dh,e.decodeTokenPayload=Wh,e.deriveKeys=function(e,t){return kr(this,void 0,void 0,(function*(){const n=hc(e.algorithm.name,t.ratchetSalt),i=yield crypto.subtle.deriveKey(n,e,{name:tc,length:t.keySize},!1,["encrypt","decrypt"]);return{material:e,encryptionKey:i}}))},e.detachTrack=Ha,e.facingModeFromDeviceLabel=ep,e.facingModeFromLocalTrack=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n;const i=Uo(e)?e.mediaStreamTrack:e,r=i.getSettings();let s={facingMode:null!==(n=t.defaultFacingMode)&&void 0!==n?n:"user",confidence:"low"};if("facingMode"in r){const e=r.facingMode;or.trace("rawFacingMode",{rawFacingMode:e}),e&&"string"==typeof e&&function(e){const t=["user","environment","left","right"];return void 0===e||t.includes(e)}(e)&&(s={facingMode:e,confidence:"high"})}if(["low","medium"].includes(s.confidence)){or.trace("Try to get facing mode from device label: (".concat(i.label,")"));const e=ep(i.label);void 0!==e&&(s=e)}return s},e.getBrowser=Us,e.getEmptyAudioStreamTrack=_o,e.getEmptyVideoStreamTrack=function(){return Ro||(Ro=Io()),Ro.clone()},e.getLogger=dr,e.importKey=function(e){return kr(this,arguments,void 0,(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{name:tc},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"encrypt";return function*(){return crypto.subtle.importKey("raw",e,t,!1,"derive"===n?["deriveBits","deriveKey"]:["encrypt","decrypt"])}()}))},e.isAudioCodec=function(e){return fa.includes(e)},e.isAudioTrack=Fo,e.isBackupCodec=Ta,e.isBackupVideoCodec=ba,e.isBrowserSupported=io,e.isE2EESupported=oc,e.isInsertableStreamSupported=dc,e.isLocalParticipant=Ko,e.isLocalTrack=Uo,e.isRemoteParticipant=function(e){return!e.isLocal},e.isRemoteTrack=Vo,e.isSVCCodec=Za,e.isScriptTransformSupported=cc,e.isSerializer=function(e){return"object"==typeof e&&null!==e&&"symbol"in e&&e.symbol===tp},e.isVideoCodec=Do,e.isVideoFrame=function(e){return"type"in e},e.isVideoTrack=Bo,e.needsRbspUnescaping=function(e){for(var t=0;t=3&&!e[i]&&!e[i+1]&&3==e[i+2]?(t.push(e[i++]),t.push(e[i++]),i++):t.push(e[i++]);return new Uint8Array(t)},e.protocolVersion=17,e.ratchet=function(e,t){return kr(this,void 0,void 0,(function*(){const n=hc(e.algorithm.name,t);return crypto.subtle.deriveBits(n,e,256)}))},e.serializers=ip,e.setLogExtension=function(t,n){(n?[n]:cr).forEach((n=>{const i=n.methodFactory;n.methodFactory=(n,r,s)=>{const a=i(n,r,s),o=e.LogLevel[n],c=o>=r&&o{n?a(e,n):a(e),c&&t(o,e,n)}},n.setLevel(n.getLevel())}))},e.setLogLevel=function(e,t){if(t)ar.getLogger(t).setLevel(e);else for(const n of cr)n.setLevel(e)},e.supportsAV1=Ya,e.supportsAdaptiveStream=function(){return"undefined"!=typeof ResizeObserver&&"undefined"!=typeof IntersectionObserver},e.supportsAudioOutputSelection=function(){return no()},e.supportsDynacast=function(){return Ja()},e.supportsH265=function(){if(!("getCapabilities"in RTCRtpSender))return!1;const e=RTCRtpSender.getCapabilities("video");let t=!1;if(e)for(const n of e.codecs)if("video/h265"===n.mimeType.toLowerCase()){t=!0;break}return t},e.supportsVP9=Xa,e.version=qs,e.videoCodecs=ya,e.writeRbsp=function(e){const t=[];for(var n=0,i=0;i=2&&(t.push(3),n=0),t.push(r),0==r?++n:n=0}return new Uint8Array(t)}})); +//# sourceMappingURL=livekit-client.umd.js.map diff --git a/web/src/app/RealApp.tsx b/web/src/app/RealApp.tsx index 25758f0..32f7d3c 100644 --- a/web/src/app/RealApp.tsx +++ b/web/src/app/RealApp.tsx @@ -79,7 +79,7 @@ export function RealApp() { useEffect(() => { if (fresh && !unread.some(m => m.id === fresh.id)) setFresh(null); }, [fresh, unread]); // Reply to her: one new message plays on the stage; several open the record at the first one you have not seen. const openUnread = () => { setFresh(null); const first = unread[0]; leaveSettingsThen(() => { setArea('talk'); setFocusLife(''); setLog(unread.length > 1); setFocusIds(unread.length > 1 && first ? [first.id] : []); }); }; - const ignoreVoice = useCallback(() => {}, []); + const ignoreVoice = useCallback(() => {}, []), [voiceOn, setVoiceOn] = useState(false); // Status words follow the server, re-read when you open a page that shows them; a failed read keeps the last one. const life = lifeStatus(health); const refreshHealth = useCallback(() => { api('health').then(setHealth, () => {}); }, []); @@ -100,12 +100,12 @@ export function RealApp() { const lastReply = state ? [...state.messages].reverse().find(m => m.role === 'companion') : undefined; const talking = area === 'talk' && !!state && !creating; return <> navigate('talk')}/> -
{state?.identity.name || 'CyberGril'}{talking && {presence}}{ready ? '真实档案 · 文字对话' : '连接真实服务'}
天气尚未接通{(['moon', 'fog'] as Theme[]).map(t => )}{talking && }
+
{state?.identity.name || 'CyberGril'}{talking && {presence}}{!ready ? '连接真实服务' : talking && voiceOn ? '真实档案 · 语音(未经真机验收)' : '真实档案 · 文字对话'}
天气尚未接通{(['moon', 'fog'] as Theme[]).map(t => )}{talking && }
{!ready ?

一扇亮着的窗。

{error && <>

请检查真实服务是否可达。资料仍在服务器保存。

}
: <> {creating && setCreating(false)}/>} {!creating && state && <> {area === 'now' &&
一扇亮着的窗

慢慢说,我在这里。

{state.identity.relation} · 慢慢熟悉
{unread.length ? : lastReply && }

{memoryNote(health, life)}

{health && !health.llm.ok && }
} - {area === 'talk' && } + {area === 'talk' && } navigate('now')} onChat={openTold} onSaid={openSaid} onSettings={() => { navigate('settings'); setHerFocus(n => n + 1); }}/> navigate('now')} onSave={setState} fail={false} theme={theme} setTheme={setTheme}/> {/* Same card as the approved demo reach-out, now with her real words; it never opens the conversation by itself. */} diff --git a/web/src/chat/ChatPanel.tsx b/web/src/chat/ChatPanel.tsx index 3cbc6f5..ba929e4 100644 --- a/web/src/chat/ChatPanel.tsx +++ b/web/src/chat/ChatPanel.tsx @@ -10,6 +10,9 @@ import { snap } from '../shared/motion'; import { motionOff } from '../stage/roomScene'; import { LineStage, type PresentHow } from './lineStage'; import { anchorOf, cursorAt, groupTurns, pagesOf, ReadingClock, type Anchor, type Metrics, type ShownMessage } from './reading'; +import { mergeTurns, OFF, recentRows, VoiceController, voiceStatus, WORDS, type VoiceView } from '../voice/session'; +import { loadTransport } from '../voice/livekit'; +import { newestId, serverId } from '../adapters/inbox'; const START: Anchor = { mi: 0, offset: 0 }; const metricsFor = (width: number): Metrics => { const compact = document.documentElement.classList.contains('compact'); return { width, font: compact ? 16 : innerWidth <= 720 ? 18 : 23, compact }; }; @@ -47,6 +50,51 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, const name = state.identity.name; const change = (messages: Message[]) => { live.current = messages; onChange(messages); }; + // ── Real voice (R5). The controller owns the call; this panel shows its state and keeps the record in step. ── + const [voiceView, setVoiceView] = useState(OFF), [voiceOff, setVoiceOff] = useState(''); + const voiceCtl = useRef(null), busyNow = useRef(busy); busyNow.current = busy; + // Your voice turn and her spoken answer reach the record only as server rows (subtitles carry no message id). + // Rows still pending on the page are read again until they settle. + const recordSync = useRef({ running: false, again: false, timer: 0 as ReturnType | 0 }); + const reread = useRef(() => {}); + reread.current = () => { + const sync = recordSync.current; + if (sync.running) { sync.again = true; return; } + sync.running = true; sync.again = false; + const pending = live.current.filter(m => m.status === 'pending').map(serverId).filter(Boolean); + const since = Math.min(newestId(live.current), ...pending.map(id => id - 1)); + recentRows(since, new AbortController().signal).then(rows => { const next = mergeTurns(live.current, rows); if (next) change(next); }, () => { /* The next turn or the inbox read tries again. */ }) + .finally(() => { sync.running = false; if (sync.again) reread.current(); }); + }; + const spoke = useRef(() => {}); + // Speaking cancels a text reply still streaming (the server's turn gate already did); it is kept as a cut fragment. + spoke.current = () => { if (busyNow.current) stop(true); }; + useEffect(() => { + if (!real) return; + const sync = recordSync.current; + const c = new VoiceController({ transport: loadTransport, onView: setVoiceView, onSpoke: () => spoke.current(), onRecord: () => { clearTimeout(sync.timer); sync.timer = setTimeout(() => reread.current(), 250); } }); + voiceCtl.current = c; + const gone = () => c.unload(), offline = () => { if (c.active) void c.end(WORDS.offline); }, online = () => void c.settle(); + addEventListener('pagehide', gone); addEventListener('offline', offline); addEventListener('online', online); online(); + // Leaving the conversation (nav, Esc, 结束交谈) unmounts this panel: the call ends with it. + return () => { removeEventListener('pagehide', gone); removeEventListener('offline', offline); removeEventListener('online', online); voiceCtl.current = null; void c.end(); }; + }, [real]); + // The switch reads the server's honest state once on arrival; it never opens a room or touches the microphone. + useEffect(() => { + if (!real) return; + const c = new AbortController(); + voiceStatus(c.signal).then(s => setVoiceOff(s.available ? '' : s.reason), () => {}); + return () => c.abort(); + }, [real]); + const voiceOn = real ? voiceView.phase !== 'off' : voice; + const voiceLabel = { off: '', opening: '正在接通…', joining: `在等${name}接起…`, listening: '在听你说', thinking: `${name}在想`, speaking: `${name}在说 · 开口就能打断` }[voiceView.phase]; + useEffect(() => { + if (!real) return; + onVoice(voiceView.phase !== 'off'); + if (voiceView.phase !== 'off') onPresence(voiceLabel); + else if (voiceView.notice) { onPresence('在你面前'); setNotice(voiceView.notice); } + }, [real, voiceView.phase, voiceView.notice, voiceLabel, onVoice, onPresence]); + // ── What the stage shows: the newest turn of the (already privacy-filtered) record, plus the live reply. ── // Real messages are trimmed by the server before transmission; their lifeIds point at records this page has not // necessarily loaded, so the demo's local filter would wrongly hide them. @@ -78,10 +126,10 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, // Her own message that arrives while you are here waits its turn: never while she is answering you, a sheet is // open, you paused or went back, or the line on screen has not had its time. Then it comes in as a new turn. const waiting = useRef({ count: 0, busy: false, sheet: false }), admit = useRef(() => {}); - waiting.current = { count: incoming.length, busy, sheet: log || full }; + waiting.current = { count: incoming.length, busy: busy || voiceView.phase === 'thinking' || voiceView.phase === 'speaking', sheet: log || full }; admit.current = () => { const add = incoming.filter(m => !live.current.some(k => k.id === m.id)); onAdmit?.(incoming.map(m => m.id)); if (add.length) change([...live.current, ...add]); }; - function stop() { gate.current.cancel(); if (replyLive.current) setInterrupted({ text: replyLive.current, turn: turnLive.current }); replyLive.current = ''; setBusy(false); setReply(''); onPresence('停下来了'); change(live.current.map(m => m.status === 'pending' ? { ...m, status: 'cancelled' } : m)); } + function stop(quiet = false) { gate.current.cancel(); if (replyLive.current) setInterrupted({ text: replyLive.current, turn: turnLive.current }); replyLive.current = ''; setBusy(false); setReply(''); if (!quiet) onPresence('停下来了'); change(live.current.map(m => m.status === 'pending' ? { ...m, status: 'cancelled' } : m)); } function endVoice() { stop(); voiceController.current?.abort(); setVoice(false); onVoice(false); onPresence('在你面前'); } useEffect(() => { const current = gate.current; return () => { current.cancel(); if (real) onChange(live.current.map(m => m.status === 'pending' ? { ...m, status: 'cancelled' } : m)); voiceController.current?.abort(); onVoice(false); onObservation(''); }; }, [onVoice, onObservation, onChange, real]); useEffect(() => { try { sessionStorage.setItem(draftKey, draft); } catch { /* Draft remains in memory. */ } }, [draft, draftKey]); @@ -184,6 +232,8 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, if (!retry && real) retry = [...live.current].reverse().find(m => m.role === 'user' && m.status === 'failed' && m.text === draft.trim()); const text = retry?.text || draft.trim(); if (!text || offline) return; stop(); + // Typing over her spoken answer: the server cancels that voice turn; what is left of its audio stays silent. + voiceCtl.current?.hush(); const turnId = retry?.turnId || newId(), signal = gate.current.begin(turnId); const msg: Message = { id: retry?.id || newId(), role: 'user', text, lifeIds: [], turnId, status: 'pending' }; sentTurn.current = turnId; @@ -207,12 +257,26 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, replyLive.current = ''; setInterrupted(null); setReply(''); if (real) setDraft(current => current === text ? '' : current); setBusy(false); - onPresence(voice ? '在听你说(模拟)' : '在你面前'); + onPresence(real ? (voiceCtl.current?.active ? '在听你说' : '在你面前') : voice ? '在听你说(模拟)' : '在你面前'); } }, fail); } catch (e) { if (signal.aborted) return; + // A stream that ends without its final is not always a broken connection: a newer turn (your voice, or + // another page) takes the server's turn gate and cancels this one. The server's record says which. + if (real) { + const row = await recentRows(0, new AbortController().signal, 1).then(rows => rows.find(m => m.role === 'user' && m.turnId === turnId), () => undefined); + if (signal.aborted) return; + if (row?.status === 'cancelled') { + gate.current.cancel(); + if (replyLive.current) setInterrupted({ text: replyLive.current, turn: turnId }); + replyLive.current = ''; setReply(''); setBusy(false); + change(live.current.map(m => m.id === msg.id ? { ...m, status: 'cancelled' } : m)); + if (!voiceCtl.current?.active) onPresence('在你面前'); + return; + } + } change(live.current.map(m => m.id === msg.id ? { ...m, status: 'failed' } : m)); setBusy(false); if (replyLive.current) setInterrupted({ text: replyLive.current, turn: turnId }); @@ -222,7 +286,17 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, onPresence('在你面前'); } } - const setVoiceMode = () => { if (real) { setNotice('语音尚未接通,文字仍可使用。'); return; } if (voice) { endVoice(); return; } setPermission('mic'); }; + const setVoiceMode = () => { + if (real) { + const c = voiceCtl.current; if (!c) return; + if (c.active) { void c.end(); setNotice('语音已结束,麦克风已关闭。'); return; } + // Ask the server again: its state may have changed since the page opened (no room, no microphone yet). + setNotice(''); + voiceStatus(AbortSignal.timeout(8000)).then(s => { setVoiceOff(s.available ? '' : s.reason); if (s.available) { setDenied(false); setPermission('mic'); } else setNotice(s.reason); }, () => setNotice(WORDS.unknown)); + return; + } + if (voice) { endVoice(); return; } setPermission('mic'); + }; const lastUser = [...view.messages].reverse().find(m => m.role === 'user'); // Only says why her new words wait when it is your own reading that holds them; otherwise they simply come in. const queued = incoming.length && !busy ? (!flow ? `${name}刚又说了一句 · 继续后呈现` : !atEnd ? `${name}刚又说了一句 · 读完这段呈现` : '') : ''; @@ -239,7 +313,14 @@ export function ChatPanel({ state, onChange, onPresence, onVoice, onObservation, useLayoutEffect(() => { conversation.current?.toggleAttribute('inert', log || full); }, [log, full]); return <>
- {voice &&
{busy ? '她在想(模拟)' : '在听你说(模拟,无收音)'}
} + {real && voiceOn &&
+ + {voiceLabel} + {voiceView.spoken ? {name}:{voiceView.spoken}未记入聊天 : voiceView.heard && 「{voiceView.heard}」} + {voiceView.blocked && } + +
} + {!real && voice &&
{busy ? '她在想(模拟)' : '在听你说(模拟,无收音)'}
}