From 4930e5df60335ba3ca3c820a5c6a6f6bf31879a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Mon, 24 Mar 2025 01:55:24 +0100 Subject: [PATCH 01/13] add jupyter integration --- livekit-rtc/jupyter-html/.gitignore | 24 + livekit-rtc/jupyter-html/README.md | 54 + livekit-rtc/jupyter-html/eslint.config.js | 28 + livekit-rtc/jupyter-html/index.html | 13 + livekit-rtc/jupyter-html/package.json | 33 + livekit-rtc/jupyter-html/pnpm-lock.yaml | 2218 +++++++++++++++++ livekit-rtc/jupyter-html/public/vite.svg | 1 + livekit-rtc/jupyter-html/src/App.css | 180 ++ livekit-rtc/jupyter-html/src/App.tsx | 141 ++ livekit-rtc/jupyter-html/src/assets/react.svg | 1 + livekit-rtc/jupyter-html/src/index.css | 73 + livekit-rtc/jupyter-html/src/main.tsx | 10 + livekit-rtc/jupyter-html/src/vite-env.d.ts | 1 + livekit-rtc/jupyter-html/tsconfig.app.json | 26 + livekit-rtc/jupyter-html/tsconfig.json | 7 + livekit-rtc/jupyter-html/tsconfig.node.json | 24 + livekit-rtc/jupyter-html/vite.config.ts | 12 + 17 files changed, 2846 insertions(+) create mode 100644 livekit-rtc/jupyter-html/.gitignore create mode 100644 livekit-rtc/jupyter-html/README.md create mode 100644 livekit-rtc/jupyter-html/eslint.config.js create mode 100644 livekit-rtc/jupyter-html/index.html create mode 100644 livekit-rtc/jupyter-html/package.json create mode 100644 livekit-rtc/jupyter-html/pnpm-lock.yaml create mode 100644 livekit-rtc/jupyter-html/public/vite.svg create mode 100644 livekit-rtc/jupyter-html/src/App.css create mode 100644 livekit-rtc/jupyter-html/src/App.tsx create mode 100644 livekit-rtc/jupyter-html/src/assets/react.svg create mode 100644 livekit-rtc/jupyter-html/src/index.css create mode 100644 livekit-rtc/jupyter-html/src/main.tsx create mode 100644 livekit-rtc/jupyter-html/src/vite-env.d.ts create mode 100644 livekit-rtc/jupyter-html/tsconfig.app.json create mode 100644 livekit-rtc/jupyter-html/tsconfig.json create mode 100644 livekit-rtc/jupyter-html/tsconfig.node.json create mode 100644 livekit-rtc/jupyter-html/vite.config.ts diff --git a/livekit-rtc/jupyter-html/.gitignore b/livekit-rtc/jupyter-html/.gitignore new file mode 100644 index 00000000..a547bf36 --- /dev/null +++ b/livekit-rtc/jupyter-html/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/livekit-rtc/jupyter-html/README.md b/livekit-rtc/jupyter-html/README.md new file mode 100644 index 00000000..40ede56e --- /dev/null +++ b/livekit-rtc/jupyter-html/README.md @@ -0,0 +1,54 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default tseslint.config({ + extends: [ + // Remove ...tseslint.configs.recommended and replace with this + ...tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + ...tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + ...tseslint.configs.stylisticTypeChecked, + ], + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default tseslint.config({ + plugins: { + // Add the react-x and react-dom plugins + 'react-x': reactX, + 'react-dom': reactDom, + }, + rules: { + // other rules... + // Enable its recommended typescript rules + ...reactX.configs['recommended-typescript'].rules, + ...reactDom.configs.recommended.rules, + }, +}) +``` diff --git a/livekit-rtc/jupyter-html/eslint.config.js b/livekit-rtc/jupyter-html/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/livekit-rtc/jupyter-html/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/livekit-rtc/jupyter-html/index.html b/livekit-rtc/jupyter-html/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/livekit-rtc/jupyter-html/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/livekit-rtc/jupyter-html/package.json b/livekit-rtc/jupyter-html/package.json new file mode 100644 index 00000000..64547a55 --- /dev/null +++ b/livekit-rtc/jupyter-html/package.json @@ -0,0 +1,33 @@ +{ + "name": "jupyter-html", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@livekit/components-react": "^2.8.1", + "@livekit/components-styles": "^1.1.4", + "livekit-client": "^2.9.8", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1", + "vite": "^6.2.0", + "vite-plugin-singlefile": "^2.2.0" + } +} diff --git a/livekit-rtc/jupyter-html/pnpm-lock.yaml b/livekit-rtc/jupyter-html/pnpm-lock.yaml new file mode 100644 index 00000000..d69839e2 --- /dev/null +++ b/livekit-rtc/jupyter-html/pnpm-lock.yaml @@ -0,0 +1,2218 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@livekit/components-react': + specifier: ^2.8.1 + version: 2.8.1(livekit-client@2.9.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1) + '@livekit/components-styles': + specifier: ^1.1.4 + version: 1.1.4 + livekit-client: + specifier: ^2.9.8 + version: 2.9.8 + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@eslint/js': + specifier: ^9.21.0 + version: 9.23.0 + '@types/react': + specifier: ^19.0.10 + version: 19.0.12 + '@types/react-dom': + specifier: ^19.0.4 + version: 19.0.4(@types/react@19.0.12) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.2.2) + eslint: + specifier: ^9.21.0 + version: 9.23.0 + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.2.0(eslint@9.23.0) + eslint-plugin-react-refresh: + specifier: ^0.4.19 + version: 0.4.19(eslint@9.23.0) + globals: + specifier: ^15.15.0 + version: 15.15.0 + typescript: + specifier: ~5.7.2 + version: 5.7.3 + typescript-eslint: + specifier: ^8.24.1 + version: 8.27.0(eslint@9.23.0)(typescript@5.7.3) + vite: + specifier: ^6.2.0 + version: 6.2.2 + vite-plugin-singlefile: + specifier: ^2.2.0 + version: 2.2.0(rollup@4.37.0)(vite@6.2.2) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.10': + resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@bufbuild/protobuf@1.10.0': + resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.0': + resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.23.0': + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@livekit/components-core@0.12.1': + resolution: {integrity: sha512-R7qWoVzPckOYxEHZgP3Kp8u+amu+isnTptgoZV7+bpmLRBHI7mWnaD+0uDWlyIMjI1pBbK3wHg0ILKa5UytI+A==} + engines: {node: '>=18'} + peerDependencies: + livekit-client: ^2.8.1 + tslib: ^2.6.2 + + '@livekit/components-react@2.8.1': + resolution: {integrity: sha512-XpuDu7iDMcN4pkV8CYNzHf9hLNdYOeEtbmCr7Zesy6Au3BxUl4aS1Ajmg0b75Rx7zTlkyCJt9Lm4VrEqbJCI6Q==} + engines: {node: '>=18'} + peerDependencies: + '@livekit/krisp-noise-filter': ^0.2.12 + livekit-client: ^2.8.1 + react: '>=18' + react-dom: '>=18' + tslib: ^2.6.2 + peerDependenciesMeta: + '@livekit/krisp-noise-filter': + optional: true + + '@livekit/components-styles@1.1.4': + resolution: {integrity: sha512-QCupn7tQ/dy/WZclrfsgtDe8peiGYS6Ied1IGkKOysaXo04l90t62SIUTKyxgd0dNDhUDC0p34qCggGZs/44lQ==} + engines: {node: '>=18'} + + '@livekit/mutex@1.1.1': + resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==} + + '@livekit/protocol@1.34.0': + resolution: {integrity: sha512-bU7pCLAMRVTVZb1KSxA46q55bhOc4iATrY/gccy2/oX1D57tiZEI+8wGRWHeDwBb0UwnABu6JXzC4tTFkdsaOg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/rollup-android-arm-eabi@4.37.0': + resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.37.0': + resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.37.0': + resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.37.0': + resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.37.0': + resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.37.0': + resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.37.0': + resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.37.0': + resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.37.0': + resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.37.0': + resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/react-dom@19.0.4': + resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.0.12': + resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} + + '@typescript-eslint/eslint-plugin@8.27.0': + resolution: {integrity: sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.27.0': + resolution: {integrity: sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.27.0': + resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.27.0': + resolution: {integrity: sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.27.0': + resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.27.0': + resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.27.0': + resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.27.0': + resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + electron-to-chromium@1.5.123: + resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.19: + resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.23.0: + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + livekit-client@2.9.8: + resolution: {integrity: sha512-nhomKUSo1sjB6vQz7C9acySLCzpC+HVns4juKfSC6aR3hl9y/M8m4W3H5FaLcECOD9+tWY3cPQlyMK92UUpMQg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loglevel@1.9.1: + resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} + engines: {node: '>= 0.6.0'} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.37.0: + resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + sdp-transform@2.15.0: + resolution: {integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==} + hasBin: true + + sdp@3.2.0: + resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-debounce@4.0.0: + resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + + typescript-eslint@8.27.0: + resolution: {integrity: sha512-ZZ/8+Y0rRUMuW1gJaPtLWe4ryHbsPLzzibk5Sq+IFa2aOH1Vo0gPr1fbA6pOnzBke7zC2Da4w8AyCgxKXo3lqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + usehooks-ts@3.1.0: + resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==} + engines: {node: '>=16.15.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + + vite-plugin-singlefile@2.2.0: + resolution: {integrity: sha512-Ik1wXmJaGzeQtUeIV7JprDUqqy6DlLzXAY27Blei5peE4c9VJF+Kp9xWDJeuX0RJUZmFbIAuw1/RAh06A+Ql7w==} + engines: {node: '>18.0.0'} + peerDependencies: + rollup: ^4.35.0 + vite: ^5.4.11 || ^6.0.0 + + vite@6.2.2: + resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + webrtc-adapter@9.0.1: + resolution: {integrity: sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==} + engines: {node: '>=6.0.0', npm: '>=3.10.0'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.10': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.10': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + + '@babel/traverse@7.26.10': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.10': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bufbuild/protobuf@1.10.0': {} + + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.25.1': + optional: true + + '@esbuild/android-arm@0.25.1': + optional: true + + '@esbuild/android-x64@0.25.1': + optional: true + + '@esbuild/darwin-arm64@0.25.1': + optional: true + + '@esbuild/darwin-x64@0.25.1': + optional: true + + '@esbuild/freebsd-arm64@0.25.1': + optional: true + + '@esbuild/freebsd-x64@0.25.1': + optional: true + + '@esbuild/linux-arm64@0.25.1': + optional: true + + '@esbuild/linux-arm@0.25.1': + optional: true + + '@esbuild/linux-ia32@0.25.1': + optional: true + + '@esbuild/linux-loong64@0.25.1': + optional: true + + '@esbuild/linux-mips64el@0.25.1': + optional: true + + '@esbuild/linux-ppc64@0.25.1': + optional: true + + '@esbuild/linux-riscv64@0.25.1': + optional: true + + '@esbuild/linux-s390x@0.25.1': + optional: true + + '@esbuild/linux-x64@0.25.1': + optional: true + + '@esbuild/netbsd-arm64@0.25.1': + optional: true + + '@esbuild/netbsd-x64@0.25.1': + optional: true + + '@esbuild/openbsd-arm64@0.25.1': + optional: true + + '@esbuild/openbsd-x64@0.25.1': + optional: true + + '@esbuild/sunos-x64@0.25.1': + optional: true + + '@esbuild/win32-arm64@0.25.1': + optional: true + + '@esbuild/win32-ia32@0.25.1': + optional: true + + '@esbuild/win32-x64@0.25.1': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0)': + dependencies: + eslint: 9.23.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.0': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.23.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@livekit/components-core@0.12.1(livekit-client@2.9.8)(tslib@2.8.1)': + dependencies: + '@floating-ui/dom': 1.6.11 + livekit-client: 2.9.8 + loglevel: 1.9.1 + rxjs: 7.8.1 + tslib: 2.8.1 + + '@livekit/components-react@2.8.1(livekit-client@2.9.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tslib@2.8.1)': + dependencies: + '@livekit/components-core': 0.12.1(livekit-client@2.9.8)(tslib@2.8.1) + clsx: 2.1.1 + livekit-client: 2.9.8 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + tslib: 2.8.1 + usehooks-ts: 3.1.0(react@19.0.0) + + '@livekit/components-styles@1.1.4': {} + + '@livekit/mutex@1.1.1': {} + + '@livekit/protocol@1.34.0': + dependencies: + '@bufbuild/protobuf': 1.10.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@rollup/rollup-android-arm-eabi@4.37.0': + optional: true + + '@rollup/rollup-android-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-x64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.37.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.37.0': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.10 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.10 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/react-dom@19.0.4(@types/react@19.0.12)': + dependencies: + '@types/react': 19.0.12 + + '@types/react@19.0.12': + dependencies: + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0)(typescript@5.7.3))(eslint@9.23.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/type-utils': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.27.0 + eslint: 9.23.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.27.0(eslint@9.23.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.27.0 + debug: 4.4.0 + eslint: 9.23.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.27.0': + dependencies: + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 + + '@typescript-eslint/type-utils@8.27.0(eslint@9.23.0)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.23.0 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.27.0': {} + + '@typescript-eslint/typescript-estree@8.27.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.27.0(eslint@9.23.0)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + eslint: 9.23.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.27.0': + dependencies: + '@typescript-eslint/types': 8.27.0 + eslint-visitor-keys: 4.2.0 + + '@vitejs/plugin-react@4.3.4(vite@6.2.2)': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.2 + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.123 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001707: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + electron-to-chromium@1.5.123: {} + + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.23.0): + dependencies: + eslint: 9.23.0 + + eslint-plugin-react-refresh@0.4.19(eslint@9.23.0): + dependencies: + eslint: 9.23.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.23.0: + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.2.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.23.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.15.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + livekit-client@2.9.8: + dependencies: + '@livekit/mutex': 1.1.1 + '@livekit/protocol': 1.34.0 + events: 3.3.0 + loglevel: 1.9.2 + sdp-transform: 2.15.0 + ts-debounce: 4.0.0 + tslib: 2.8.1 + typed-emitter: 2.1.0 + webrtc-adapter: 9.0.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.debounce@4.0.8: {} + + lodash.merge@4.6.2: {} + + loglevel@1.9.1: {} + + loglevel@1.9.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.19: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-refresh@0.14.2: {} + + react@19.0.0: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.37.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.37.0 + '@rollup/rollup-android-arm64': 4.37.0 + '@rollup/rollup-darwin-arm64': 4.37.0 + '@rollup/rollup-darwin-x64': 4.37.0 + '@rollup/rollup-freebsd-arm64': 4.37.0 + '@rollup/rollup-freebsd-x64': 4.37.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 + '@rollup/rollup-linux-arm-musleabihf': 4.37.0 + '@rollup/rollup-linux-arm64-gnu': 4.37.0 + '@rollup/rollup-linux-arm64-musl': 4.37.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-musl': 4.37.0 + '@rollup/rollup-linux-s390x-gnu': 4.37.0 + '@rollup/rollup-linux-x64-gnu': 4.37.0 + '@rollup/rollup-linux-x64-musl': 4.37.0 + '@rollup/rollup-win32-arm64-msvc': 4.37.0 + '@rollup/rollup-win32-ia32-msvc': 4.37.0 + '@rollup/rollup-win32-x64-msvc': 4.37.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + optional: true + + scheduler@0.25.0: {} + + sdp-transform@2.15.0: {} + + sdp@3.2.0: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-debounce@4.0.0: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-emitter@2.1.0: + optionalDependencies: + rxjs: 7.8.2 + + typescript-eslint@8.27.0(eslint@9.23.0)(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0)(typescript@5.7.3))(eslint@9.23.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0)(typescript@5.7.3) + eslint: 9.23.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + typescript@5.7.3: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + usehooks-ts@3.1.0(react@19.0.0): + dependencies: + lodash.debounce: 4.0.8 + react: 19.0.0 + + vite-plugin-singlefile@2.2.0(rollup@4.37.0)(vite@6.2.2): + dependencies: + micromatch: 4.0.8 + rollup: 4.37.0 + vite: 6.2.2 + + vite@6.2.2: + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.37.0 + optionalDependencies: + fsevents: 2.3.3 + + webrtc-adapter@9.0.1: + dependencies: + sdp: 3.2.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/livekit-rtc/jupyter-html/public/vite.svg b/livekit-rtc/jupyter-html/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/livekit-rtc/jupyter-html/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/App.css b/livekit-rtc/jupyter-html/src/App.css new file mode 100644 index 00000000..41f00ae5 --- /dev/null +++ b/livekit-rtc/jupyter-html/src/App.css @@ -0,0 +1,180 @@ +.app-container { + max-width: 800px; + margin: 0 auto; + padding: 10px; +} + +.content { + width: 100%; + max-width: 100%; + overflow-x: hidden; + padding: 0; + margin: 0; +} + +.header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #eee; + padding-bottom: 8px; + width: 100%; +} + +.header-left { + display: flex; + align-items: center; + gap: 10px; +} + +.header h2 { + margin: 0; + font-size: 1.2em; + font-weight: normal; + color: #444; +} + +.header-controls { + display: flex; + align-items: center; + gap: 15px; +} + +.connection-state, +.state-inactive { + font-size: 0.9em; + margin: 0; + padding: 0; +} + +.connection-state { + color: #0066cc; +} + +.state-inactive { + color: #999; +} + +.controls { + display: flex; + flex-direction: column; + gap: 15px; + width: 100%; + padding: 8px 0; +} + +.controls-row { + display: flex; + align-items: center; + gap: 15px; + width: 100%; +} + +.button-container { + flex: 0 0 auto; +} + +.toggle-button { + width: fit-content; + padding: 6px 12px; + background-color: #002CF2; + border: none; + border-radius: 3px; + color: #fff; + font-size: 0.9em; + cursor: pointer; + transition: all 0.2s ease; +} + +.toggle-button:hover { + background-color: #0C3AFF; +} + +.visualizer h3 { + margin: 4px 0; + font-size: 0.9em; +} + +.states { + display: flex; + flex-direction: column; + font-size: 0.9em; + line-height: 1; +} + +.state-row { + display: flex; + align-items: baseline; + gap: 6px; +} + +.state-label { + min-width: 45px; + text-align: right; + color: #666; +} + +.error { + text-align: left; + font-size: 0.9em; + padding: 8px; + color: #666; + margin: 10px 0; +} + +.connection-buttons { + display: flex; + gap: 10px; + justify-content: center; + margin: 20px 0; +} + +.connect-button { + padding: 12px 24px; + font-size: 1.1em; + border: none; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s ease; + font-weight: 600; + text-transform: uppercase; +} + +.connect-button.connect { + background-color: #002CF2; + color: white; +} + +.connect-button.connect:hover { + background-color: #0C3AFF; + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0, 44, 242, 0.2); +} + +.connect-button.disconnect { + background-color: #ff3b30; + color: white; +} + +.connect-button.disconnect:hover { + background-color: #ff514a; + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(255, 59, 48, 0.2); +} + +.connect-button:disabled { + background-color: #cccccc; + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +/* LiveKit button styles */ +:root { + --lk-button-background: #002CF2; + --lk-button-background-hover: #0C3AFF; + --lk-button-border-radius: 3px; + --lk-disconnect-button-background: #ff3b30; + --lk-disconnect-button-background-hover: #ff514a; +} \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx new file mode 100644 index 00000000..602d069a --- /dev/null +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -0,0 +1,141 @@ +import React, { useEffect, useState } from 'react'; +import { + LiveKitRoom, + TrackToggle, + BarVisualizer, + useVoiceAssistant, + RoomAudioRenderer, + useConnectionState, + DisconnectButton, +} from '@livekit/components-react'; +import { Track } from 'livekit-client'; +import '@livekit/components-styles'; +import './App.css'; + + +export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { + const invoke = (window as any).google?.colab?.kernel?.invokeFunction; + if (invoke) { + const res = await invoke("create_join_token", []); + return res.data["application/json"]; + } else if ((window as any).jupyterFetchJoinToken) { + return await (window as any).jupyterFetchJoinToken(); + } else if (import.meta.env.MODE === "development") { + // use env variables + const url = import.meta.env.VITE_LIVEKIT_URL; + const token = import.meta.env.VITE_LIVEKIT_TOKEN; + return { url: url, token: token }; + } else { + throw new Error("No Colab or Jupyter kernel function available"); + } +} + + +function CloseIcon() { + return ( + + + + ); +} + +const ConnectedContent: React.FC<{ onDisconnect: () => void }> = ({ onDisconnect }) => { + const connectionState = useConnectionState(); + const { state: agentState, audioTrack: agentTrack } = useVoiceAssistant(); + + console.log(agentState); + + + + return ( +
+ +
+
+

livekit-rtc

+ + {connectionState} + +
+
+ Disconnect +
+
+
+
+ + Toggle Microphone + + +
+ {/* */} +
+
+ +
+ +
+
+
+ ); +}; + +const App = () => { + const [joinInfo, setJoinInfo] = useState<{ url: string; token: string } | null>(null); + const [error, setError] = useState(null); + const [isConnected, setIsConnected] = useState(true); + + useEffect(() => { + fetchJoinInfo() + .then((info) => setJoinInfo(info)) + .catch((err) => setError(err.message)); + }, []); + + if (error) return
Error: {error}
; + + if (!joinInfo) return
Loading...
; + + if (!isConnected) { + return ( +
+
+
+

livekit-rtc

+ disconnected +
+
+ Re-run the cell to connect +
+
+
+ ); + } + + return ( + setError(err.message)} + > + setIsConnected(false)} /> + + ); +}; +export default App; \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/assets/react.svg b/livekit-rtc/jupyter-html/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/livekit-rtc/jupyter-html/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/index.css b/livekit-rtc/jupyter-html/src/index.css new file mode 100644 index 00000000..741c3f4b --- /dev/null +++ b/livekit-rtc/jupyter-html/src/index.css @@ -0,0 +1,73 @@ +/* :root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} + +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} + +button:hover { + border-color: #646cff; +} + +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + + a:hover { + color: #747bff; + } + + button { + background-color: #f9f9f9; + } +} */ \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/main.tsx b/livekit-rtc/jupyter-html/src/main.tsx new file mode 100644 index 00000000..bef5202a --- /dev/null +++ b/livekit-rtc/jupyter-html/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/livekit-rtc/jupyter-html/src/vite-env.d.ts b/livekit-rtc/jupyter-html/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/livekit-rtc/jupyter-html/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/livekit-rtc/jupyter-html/tsconfig.app.json b/livekit-rtc/jupyter-html/tsconfig.app.json new file mode 100644 index 00000000..358ca9ba --- /dev/null +++ b/livekit-rtc/jupyter-html/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/livekit-rtc/jupyter-html/tsconfig.json b/livekit-rtc/jupyter-html/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/livekit-rtc/jupyter-html/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/livekit-rtc/jupyter-html/tsconfig.node.json b/livekit-rtc/jupyter-html/tsconfig.node.json new file mode 100644 index 00000000..db0becc8 --- /dev/null +++ b/livekit-rtc/jupyter-html/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/livekit-rtc/jupyter-html/vite.config.ts b/livekit-rtc/jupyter-html/vite.config.ts new file mode 100644 index 00000000..7630403b --- /dev/null +++ b/livekit-rtc/jupyter-html/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { viteSingleFile } from 'vite-plugin-singlefile'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + react(), + viteSingleFile() // This plugin inlines all JS and CSS into index.html + ], +}); + From 4c562be713f3c6b5a7b62c20a45c7249a4e6330a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 17:05:17 +0200 Subject: [PATCH 02/13] wip --- livekit-rtc/jupyter-html/package.json | 4 +- livekit-rtc/jupyter-html/public/vite.svg | 1 - livekit-rtc/jupyter-html/src/App.css | 191 +++++++----------- livekit-rtc/jupyter-html/src/App.tsx | 68 +++---- livekit-rtc/jupyter-html/src/assets/react.svg | 1 - livekit-rtc/jupyter-html/src/index.css | 73 ------- livekit-rtc/jupyter-html/src/main.tsx | 1 - livekit-rtc/jupyter-html/vite.config.ts | 1 - .../livekit/rtc/resources/.gitattributes | 1 + .../rtc/resources/jupyter-html/index.html | 101 +++++++++ 10 files changed, 205 insertions(+), 237 deletions(-) delete mode 100644 livekit-rtc/jupyter-html/public/vite.svg delete mode 100644 livekit-rtc/jupyter-html/src/assets/react.svg delete mode 100644 livekit-rtc/jupyter-html/src/index.css create mode 100644 livekit-rtc/livekit/rtc/resources/.gitattributes create mode 100644 livekit-rtc/livekit/rtc/resources/jupyter-html/index.html diff --git a/livekit-rtc/jupyter-html/package.json b/livekit-rtc/jupyter-html/package.json index 64547a55..46e25adb 100644 --- a/livekit-rtc/jupyter-html/package.json +++ b/livekit-rtc/jupyter-html/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc -b && vite build", + "build": "tsc -b && vite build --outDir=../livekit/rtc/resources/jupyter-html", "lint": "eslint .", "preview": "vite preview" }, @@ -30,4 +30,4 @@ "vite": "^6.2.0", "vite-plugin-singlefile": "^2.2.0" } -} +} \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/public/vite.svg b/livekit-rtc/jupyter-html/public/vite.svg deleted file mode 100644 index e7b8dfb1..00000000 --- a/livekit-rtc/jupyter-html/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/App.css b/livekit-rtc/jupyter-html/src/App.css index 41f00ae5..d030aa77 100644 --- a/livekit-rtc/jupyter-html/src/App.css +++ b/livekit-rtc/jupyter-html/src/App.css @@ -1,3 +1,66 @@ +:root { + --lk-fg: #111; + --lk-fg-secondary: #333; + --lk-fg-tertiary: #555; + + --lk-bg: #fff; + --lk-bg-secondary: #f5f5f5; + --lk-bg-tertiary: #fafafa; + + --lk-accent-fg: #fff; + --lk-accent-bg: #1f8cf9; + + --lk-danger-fg: #fff; + --lk-danger: #f91f31; + --lk-danger-text: #6d0311; + --lk-danger-bg: #fecdd4; + + --lk-success-fg: #fff; + --lk-success: #1ff968; + --lk-success-text: #036d26; + --lk-success-bg: #cdfedd; + + --lk-control-fg: var(--fg); + --lk-control-bg: var(--bg-secondary); + + --lk-connection-excellent: #06db4d; + --lk-connection-good: #f9b11f; + --lk-connection-poor: #f91f31; + + + --lk-va-bar-gap: 8px; + --lk-va-bar-width: 8px; +} + + +/* reset unwanted default styles */ + +.lk-disconnect-button { + border: unset; + color: unset; + font-weight: unset; + font-size: 0.8em; +} + +.lk-agent-control-bar { + width: 100%; + justify-content: space-between; +} + +@media screen and (max-width: 600px) { + .lk-start-audio-button { + position: unset; + top: unset; + left: unset; + transform: unset; + } +} + +.lk-start-audio-button { + color: #000; + background-color: #dadada; +} + .app-container { max-width: 800px; margin: 0 auto; @@ -17,6 +80,7 @@ flex-wrap: wrap; justify-content: space-between; align-items: center; + height: 32px; border-bottom: 1px solid #eee; padding-bottom: 8px; width: 100%; @@ -30,7 +94,7 @@ .header h2 { margin: 0; - font-size: 1.2em; + font-size: 1em; font-weight: normal; color: #444; } @@ -43,7 +107,7 @@ .connection-state, .state-inactive { - font-size: 0.9em; + font-size: 0.85em; margin: 0; padding: 0; } @@ -58,123 +122,14 @@ .controls { display: flex; - flex-direction: column; - gap: 15px; - width: 100%; - padding: 8px 0; -} - -.controls-row { - display: flex; - align-items: center; - gap: 15px; - width: 100%; -} - -.button-container { - flex: 0 0 auto; -} - -.toggle-button { - width: fit-content; - padding: 6px 12px; - background-color: #002CF2; - border: none; - border-radius: 3px; - color: #fff; - font-size: 0.9em; - cursor: pointer; - transition: all 0.2s ease; -} - -.toggle-button:hover { - background-color: #0C3AFF; -} - -.visualizer h3 { - margin: 4px 0; - font-size: 0.9em; -} - -.states { - display: flex; - flex-direction: column; - font-size: 0.9em; - line-height: 1; -} - -.state-row { - display: flex; - align-items: baseline; - gap: 6px; -} - -.state-label { - min-width: 45px; - text-align: right; - color: #666; -} - -.error { - text-align: left; - font-size: 0.9em; - padding: 8px; - color: #666; - margin: 10px 0; + flex-direction: row; + justify-content: space-between; } -.connection-buttons { +.agent-visualizer { display: flex; - gap: 10px; - justify-content: center; - margin: 20px 0; -} - -.connect-button { - padding: 12px 24px; - font-size: 1.1em; - border: none; - border-radius: 4px; - cursor: pointer; - transition: all 0.2s ease; - font-weight: 600; - text-transform: uppercase; -} - -.connect-button.connect { - background-color: #002CF2; - color: white; -} - -.connect-button.connect:hover { - background-color: #0C3AFF; - transform: translateY(-2px); - box-shadow: 0 4px 8px rgba(0, 44, 242, 0.2); -} - -.connect-button.disconnect { - background-color: #ff3b30; - color: white; -} - -.connect-button.disconnect:hover { - background-color: #ff514a; - transform: translateY(-2px); - box-shadow: 0 4px 8px rgba(255, 59, 48, 0.2); -} - -.connect-button:disabled { - background-color: #cccccc; - cursor: not-allowed; - transform: none; - box-shadow: none; -} - -/* LiveKit button styles */ -:root { - --lk-button-background: #002CF2; - --lk-button-background-hover: #0C3AFF; - --lk-button-border-radius: 3px; - --lk-disconnect-button-background: #ff3b30; - --lk-disconnect-button-background-hover: #ff514a; + flex-direction: row; + width: 25%; + margin-right: 32px; + height: var(--lk-control-bar-height); } \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx index 602d069a..28b42424 100644 --- a/livekit-rtc/jupyter-html/src/App.tsx +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -1,16 +1,18 @@ import React, { useEffect, useState } from 'react'; import { LiveKitRoom, - TrackToggle, BarVisualizer, useVoiceAssistant, RoomAudioRenderer, useConnectionState, DisconnectButton, + useStartAudio, + VoiceAssistantControlBar, } from '@livekit/components-react'; -import { Track } from 'livekit-client'; import '@livekit/components-styles'; import './App.css'; +import type { SVGProps } from 'react'; +import { ConnectionState } from 'livekit-client'; export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { @@ -31,30 +33,30 @@ export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { } -function CloseIcon() { - return ( - - - - ); -} +const LeaveIcon = (props: SVGProps) => ( + + + + +); const ConnectedContent: React.FC<{ onDisconnect: () => void }> = ({ onDisconnect }) => { const connectionState = useConnectionState(); const { state: agentState, audioTrack: agentTrack } = useVoiceAssistant(); - - console.log(agentState); - - + const { canPlayAudio } = useStartAudio({ props: {} }); // why do I need props..? return (
-

livekit-rtc

@@ -63,35 +65,20 @@ const ConnectedContent: React.FC<{ onDisconnect: () => void }> = ({ onDisconnect
- Disconnect + Disconnect
-
- - Toggle Microphone - - -
- {/* */} -
-
+ -
+ {canPlayAudio && connectionState == ConnectionState.Connected &&
-
+
}
); @@ -135,6 +122,7 @@ const App = () => { onError={(err) => setError(err.message)} > setIsConnected(false)} /> + ); }; diff --git a/livekit-rtc/jupyter-html/src/assets/react.svg b/livekit-rtc/jupyter-html/src/assets/react.svg deleted file mode 100644 index 6c87de9b..00000000 --- a/livekit-rtc/jupyter-html/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/index.css b/livekit-rtc/jupyter-html/src/index.css deleted file mode 100644 index 741c3f4b..00000000 --- a/livekit-rtc/jupyter-html/src/index.css +++ /dev/null @@ -1,73 +0,0 @@ -/* :root { - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} - -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} - -button:hover { - border-color: #646cff; -} - -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - - a:hover { - color: #747bff; - } - - button { - background-color: #f9f9f9; - } -} */ \ No newline at end of file diff --git a/livekit-rtc/jupyter-html/src/main.tsx b/livekit-rtc/jupyter-html/src/main.tsx index bef5202a..4aff0256 100644 --- a/livekit-rtc/jupyter-html/src/main.tsx +++ b/livekit-rtc/jupyter-html/src/main.tsx @@ -1,6 +1,5 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import './index.css' import App from './App.tsx' createRoot(document.getElementById('root')!).render( diff --git a/livekit-rtc/jupyter-html/vite.config.ts b/livekit-rtc/jupyter-html/vite.config.ts index 7630403b..3b4cae11 100644 --- a/livekit-rtc/jupyter-html/vite.config.ts +++ b/livekit-rtc/jupyter-html/vite.config.ts @@ -2,7 +2,6 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { viteSingleFile } from 'vite-plugin-singlefile'; -// https://vite.dev/config/ export default defineConfig({ plugins: [ react(), diff --git a/livekit-rtc/livekit/rtc/resources/.gitattributes b/livekit-rtc/livekit/rtc/resources/.gitattributes new file mode 100644 index 00000000..c27efeb3 --- /dev/null +++ b/livekit-rtc/livekit/rtc/resources/.gitattributes @@ -0,0 +1 @@ +jupyter-html/* linguist-generated=true \ No newline at end of file diff --git a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html new file mode 100644 index 00000000..dcb8decc --- /dev/null +++ b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html @@ -0,0 +1,101 @@ + + + + + + + Vite + React + TS + + + + +
+ + From 5c1a316d571d09b7b78080557e11cec7dae16071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 17:10:53 +0200 Subject: [PATCH 03/13] Create jupyter.py --- livekit-rtc/livekit/rtc/jupyter.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 livekit-rtc/livekit/rtc/jupyter.py diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py new file mode 100644 index 00000000..55bfb3f8 --- /dev/null +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -0,0 +1,13 @@ +import atexit +import contextlib +from IPython.core.display import HTML +from importlib.resources import as_file, files + +_resource_stack = contextlib.ExitStack() +atexit.register(_resource_stack.close) + + +def display_room() -> HTML: + index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" + index_path = _resource_stack.enter_context(as_file(index_path)) + return HTML(index_path.read_text()) From d9e2e0a9c933f05f9cc64b6efd3467faabb7aaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 17:20:58 +0200 Subject: [PATCH 04/13] Update jupyter.py --- livekit-rtc/livekit/rtc/jupyter.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 55bfb3f8..00ec53ff 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -1,5 +1,6 @@ import atexit import contextlib +import os from IPython.core.display import HTML from importlib.resources import as_file, files @@ -8,6 +9,20 @@ def display_room() -> HTML: + try: + from google.colab import secrets + + LIVEKIT_JUPYTER_URL = secrets.get("LIVEKIT_JUPYTER_URL") + except ImportError: + LIVEKIT_JUPYTER_URL = os.environ.get("LIVEKIT_JUPYTER_URL") + + if not LIVEKIT_JUPYTER_URL: + raise ValueError( + "LIVEKIT_JUPYTER_URL must be set via Google Colab secrets or as an environment variable." + ) + index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" index_path = _resource_stack.enter_context(as_file(index_path)) - return HTML(index_path.read_text()) + html_text = index_path.read_text() + + return HTML(html_text) From a3df5a81f9040ef2549ab0a29941a2038d6c94f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 17:38:17 +0200 Subject: [PATCH 05/13] wip --- livekit-rtc/jupyter-html/src/App.tsx | 2 +- livekit-rtc/livekit/rtc/jupyter.py | 56 ++++++++++++++----- .../rtc/resources/jupyter-html/index.html | 2 +- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx index 28b42424..b64b4ac6 100644 --- a/livekit-rtc/jupyter-html/src/App.tsx +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -18,7 +18,7 @@ import { ConnectionState } from 'livekit-client'; export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { const invoke = (window as any).google?.colab?.kernel?.invokeFunction; if (invoke) { - const res = await invoke("create_join_token", []); + const res = await invoke("get_join_token", []); return res.data["application/json"]; } else if ((window as any).jupyterFetchJoinToken) { return await (window as any).jupyterFetchJoinToken(); diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 00ec53ff..62103c6b 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -1,28 +1,58 @@ +from __future__ import annotations + import atexit +import sys import contextlib import os -from IPython.core.display import HTML +from IPython.core.display import HTML, JSON from importlib.resources import as_file, files _resource_stack = contextlib.ExitStack() atexit.register(_resource_stack.close) -def display_room() -> HTML: - try: - from google.colab import secrets +def display_room(url: str | None = None, token: str | None = None) -> HTML: + """ + Display a LiveKit room in Jupyter or Google Colab. + + Args: + url (str | None): The LiveKit room URL. If None, the function attempts + to use the LIVEKIT_JUPYTER_URL environment variable in a local or + Colab environment. + token (str | None): The LiveKit join token. If None, the function + attempts to use the LIVEKIT_JUPYTER_URL environment variable in a + local or Colab environment. + + Returns: + IPython.core.display.HTML: The HTML object that embeds the LiveKit room. + + Raises: + ValueError: If both `url` and `token` are None and + `LIVEKIT_JUPYTER_URL` is not set. + """ + IN_COLAB = "google.colab" in sys.modules + + if url is None and token is None: + if IN_COLAB: + from google.colab import userdata + + LIVEKIT_JUPYTER_URL = userdata.get("LIVEKIT_JUPYTER_URL") + else: + LIVEKIT_JUPYTER_URL = os.environ.get("LIVEKIT_JUPYTER_URL") + + if not LIVEKIT_JUPYTER_URL: + raise ValueError("LIVEKIT_JUPYTER_URL must be set (or url/token must be provided).") + + if IN_COLAB: + from google.colab import output - LIVEKIT_JUPYTER_URL = secrets.get("LIVEKIT_JUPYTER_URL") - except ImportError: - LIVEKIT_JUPYTER_URL = os.environ.get("LIVEKIT_JUPYTER_URL") + def create_join_token(): + return JSON({"url": url or "", "token": token or ""}) - if not LIVEKIT_JUPYTER_URL: - raise ValueError( - "LIVEKIT_JUPYTER_URL must be set via Google Colab secrets or as an environment variable." - ) + output.register_callback("get_join_token", create_join_token) + # Load the local HTML file that embeds the LiveKit client index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" index_path = _resource_stack.enter_context(as_file(index_path)) - html_text = index_path.read_text() - return HTML(html_text) + return HTML(index_path.read_text()) diff --git a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html index dcb8decc..50bfacf8 100644 --- a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html +++ b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html @@ -92,7 +92,7 @@ `)+`\r `},Nd}var Hv;function m1(){if(Hv)return un;Hv=1;var a=f1(),e=h1(),n=Kf();return un.grammar=n,un.write=e,un.parse=a.parse,un.parseParams=a.parseParams,un.parseFmtpConfig=a.parseFmtpConfig,un.parsePayloads=a.parsePayloads,un.parseRemoteCandidates=a.parseRemoteCandidates,un.parseImageAttributes=a.parseImageAttributes,un.parseSimulcastStreamList=a.parseSimulcastStreamList,un}var Mi=m1();function Qf(a,e,n){var r,o,l;e===void 0&&(e=50),n===void 0&&(n={});var u=(r=n.isImmediate)!=null&&r,d=(o=n.callback)!=null&&o,h=n.maxWait,m=Date.now(),g=[];function y(){if(h!==void 0){var T=Date.now()-m;if(T+e>=h)return h-T}return e}var b=function(){var T=[].slice.call(arguments),C=this;return new Promise(function(k,w){var O=u&&l===void 0;if(l!==void 0&&clearTimeout(l),l=setTimeout(function(){if(l=void 0,m=Date.now(),!u){var Q=a.apply(C,T);d&&d(Q),g.forEach(function(U){return(0,U.resolve)(Q)}),g=[]}},y()),O){var V=a.apply(C,T);return d&&d(V),k(V)}g.push({resolve:k,reject:w})})};return b.cancel=function(T){l!==void 0&&clearTimeout(l),g.forEach(function(C){return(0,C.reject)(T)}),g=[]},b}const p1=.7,g1=20,mr={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class Gv extends xn.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var r;super(),this.log=ke,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Qf(o=>R(this,void 0,void 0,function*(){this.emit(mr.NegotiationStarted);try{yield this.createAndSendOffer()}catch(l){if(o)o(l);else throw l}}),g1),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=ei((r=n.loggerName)!==null&&r!==void 0?r:gn.PCTransport),this.loggerOptions=n,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=n=>{var r;n.candidate&&((r=this.onIceCandidate)===null||r===void 0||r.call(this,n.candidate))},e.onicecandidateerror=n=>{var r;(r=this.onIceCandidateError)===null||r===void 0||r.call(this,n)},e.oniceconnectionstatechange=()=>{var n;(n=this.onIceConnectionStateChange)===null||n===void 0||n.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var n;(n=this.onSignalingStatechange)===null||n===void 0||n.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var n;(n=this.onConnectionStateChange)===null||n===void 0||n.call(this,e.connectionState)},e.ondatachannel=n=>{var r;(r=this.onDataChannel)===null||r===void 0||r.call(this,n)},e.ontrack=n=>{var r;(r=this.onTrack)===null||r===void 0||r.call(this,n)},e}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return R(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return R(this,void 0,void 0,function*(){var n;let r;if(e.type==="offer"){let{stereoMids:o,nackMids:l}=v1(e);this.remoteStereoMids=o,this.remoteNackMids=l}else if(e.type==="answer"){const o=Mi.parse((n=e.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{l.type==="audio"&&this.trackBitrates.some(u=>{if(!u.transceiver||l.mid!=u.transceiver.mid)return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0)return!0;let h=!1;for(const m of l.fmtp)if(m.payload===d){m.config=m.config.split(";").filter(g=>!g.includes("maxaveragebitrate")).join(";"),u.maxbr>0&&(m.config+=";maxaveragebitrate=".concat(u.maxbr*1e3)),h=!0;break}return h||u.maxbr>0&&l.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(u.maxbr*1e3)}),!0})}),r=Mi.write(o)}yield this.setMungedSDP(e,r,!0),this.pendingCandidates.forEach(o=>{this.pc.addIceCandidate(o)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(mr.NegotiationComplete),e.sdp&&Mi.parse(e.sdp).media.forEach(l=>{l.type==="video"&&this.emit(mr.RTPVideoPayloadTypes,l.rtp)}))})}createAndSendOffer(e){return R(this,void 0,void 0,function*(){var n;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const l=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&l)yield this._pc.setRemoteDescription(l);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const r=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:r.sdp},this.logContext));const o=Mi.parse((n=r.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{Yv(l),l.type==="audio"?Fv(l,[],[]):l.type==="video"&&this.trackBitrates.some(u=>{if(!l.msid||!u.cid||!l.msid.includes(u.cid))return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0||(Is(u.codec)&&this.ensureVideoDDExtensionForSVC(l,o),u.codec!=="av1"))return!0;const h=Math.round(u.maxbr*p1);for(const m of l.fmtp)if(m.payload===d){m.config.includes("x-google-start-bitrate")||(m.config+=";x-google-start-bitrate=".concat(h));break}return!0})}),yield this.setMungedSDP(r,Mi.write(o)),this.onOffer(r)})}createAndSetAnswer(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pc.createAnswer(),r=Mi.parse((e=n.sdp)!==null&&e!==void 0?e:"");return r.media.forEach(o=>{Yv(o),o.type==="audio"&&Fv(o,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(n,Mi.write(r)),n})}createDataChannel(e,n){return this.pc.createDataChannel(e,n)}addTransceiver(e,n){return this.pc.addTransceiver(e,n)}addTrack(e){if(!this._pc)throw new ut("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var n;if(!this._pc)throw new ut("PC closed, cannot configure");return(n=this._pc)===null||n===void 0?void 0:n.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var n;return(n=this._pc)===null||n===void 0?void 0:n.removeTrack(e)}getConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&n!==void 0?n:"closed"}getICEConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&n!==void 0?n:"closed"}getSignallingState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&n!==void 0?n:"closed"}getTransceivers(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&n!==void 0?n:[]}getSenders(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&n!==void 0?n:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return R(this,void 0,void 0,function*(){var e;if(!this._pc)return;let n="";const r=new Map,o=new Map;if((yield this._pc.getStats()).forEach(d=>{switch(d.type){case"transport":n=d.selectedCandidatePairId;break;case"candidate-pair":n===""&&d.selected&&(n=d.id),r.set(d.id,d);break;case"remote-candidate":o.set(d.id,"".concat(d.address,":").concat(d.port));break}}),n==="")return;const u=(e=r.get(n))===null||e===void 0?void 0:e.remoteCandidateId;if(u!==void 0)return o.get(u)})}setMungedSDP(e,n,r){return R(this,void 0,void 0,function*(){if(n){const o=e.sdp;e.sdp=n;try{this.log.debug("setting munged ".concat(r?"remote":"local"," description"),this.logContext),r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(l){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:l,sdp:n})),e.sdp=o}}try{r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(o){let l="unknown error";o instanceof Error?l=o.message:typeof o=="string"&&(l=o);const u={error:l,sdp:e.sdp};throw!r&&this.pc.remoteDescription&&(u.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:u})),new of(l)}})}ensureVideoDDExtensionForSVC(e,n){var r,o;if(!((r=e.ext)===null||r===void 0?void 0:r.some(u=>u.uri===Mv))){if(this.ddExtID===0){let u=0;n.media.forEach(d=>{var h;d.type==="video"&&((h=d.ext)===null||h===void 0||h.forEach(m=>{m.value>u&&(u=m.value)}))}),this.ddExtID=u+1}(o=e.ext)===null||o===void 0||o.push({value:this.ddExtID,uri:Mv})}}}function Fv(a,e,n){let r=0;a.rtp.some(o=>o.codec==="opus"?(r=o.payload,!0):!1),r>0&&(a.rtcpFb||(a.rtcpFb=[]),n.includes(a.mid)&&!a.rtcpFb.some(o=>o.payload===r&&o.type==="nack")&&a.rtcpFb.push({payload:r,type:"nack"}),e.includes(a.mid)&&a.fmtp.some(o=>o.payload===r?(o.config.includes("stereo=1")||(o.config+=";stereo=1"),!0):!1))}function v1(a){var e;const n=[],r=[],o=Mi.parse((e=a.sdp)!==null&&e!==void 0?e:"");let l=0;return o.media.forEach(u=>{var d;u.type==="audio"&&(u.rtp.some(h=>h.codec==="opus"?(l=h.payload,!0):!1),!((d=u.rtcpFb)===null||d===void 0)&&d.some(h=>h.payload===l&&h.type==="nack")&&r.push(u.mid),u.fmtp.some(h=>h.payload===l?(h.config.includes("sprop-stereo=1")&&n.push(u.mid),!0):!1))}),{stereoMids:n,nackMids:r}}function Yv(a){if(a.connection){const e=a.connection.ip.indexOf(":")>=0;(a.connection.version===4&&e||a.connection.version===6&&!e)&&(a.connection.ip="0.0.0.0",a.connection.version=4)}}const gf="vp8",y1={audioPreset:cf.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Hf.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:gf,backupCodec:!0},Fy={deviceId:"default",autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Yy={deviceId:"default",resolution:Hs.h720.resolution},b1={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new uE,disconnectOnPageLeave:!0,webAudioMix:!1},Xf={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var We;(function(a){a[a.NEW=0]="NEW",a[a.CONNECTING=1]="CONNECTING",a[a.CONNECTED=2]="CONNECTED",a[a.FAILED=3]="FAILED",a[a.CLOSING=4]="CLOSING",a[a.CLOSED=5]="CLOSED"})(We||(We={}));class S1{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,n,r){var o;this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.log=ke,this.updateState=()=>{var l;const u=this.state,d=this.requiredTransports.map(h=>h.getConnectionState());d.every(h=>h==="connected")?this.state=We.CONNECTED:d.some(h=>h==="failed")?this.state=We.FAILED:d.some(h=>h==="connecting")?this.state=We.CONNECTING:d.every(h=>h==="closed")?this.state=We.CLOSED:d.some(h=>h==="closed")?this.state=We.CLOSING:d.every(h=>h==="new")&&(this.state=We.NEW),u!==this.state&&(this.log.debug("pc state change: from ".concat(We[u]," to ").concat(We[this.state]),this.logContext),(l=this.onStateChange)===null||l===void 0||l.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=ei((o=r.loggerName)!==null&&o!==void 0?o:gn.PCManager),this.loggerOptions=r,this.isPublisherConnectionRequired=!n,this.isSubscriberConnectionRequired=n,this.publisher=new Gv(e,r),this.subscriber=new Gv(e,r),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.PUBLISHER)},this.subscriber.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.SUBSCRIBER)},this.subscriber.onDataChannel=l=>{var u;(u=this.onDataChannel)===null||u===void 0||u.call(this,l)},this.subscriber.onTrack=l=>{var u;(u=this.onTrack)===null||u===void 0||u.call(this,l)},this.publisher.onOffer=l=>{var u;(u=this.onPublisherOffer)===null||u===void 0||u.call(this,l)},this.state=We.NEW,this.connectionLock=new Ht,this.remoteOfferLock=new Ht}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return R(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const n of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(n)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return R(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,n){return R(this,void 0,void 0,function*(){n===mn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return R(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const n=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{n()}})}updateConfiguration(e,n){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),n&&this.triggerIceRestart()}ensurePCTransportConnection(e,n){return R(this,void 0,void 0,function*(){var r;const o=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((r=this.requiredTransports)===null||r===void 0?void 0:r.map(l=>this.ensureTransportConnected(l,e,n)))}finally{o()}})}negotiate(e){return R(this,void 0,void 0,function*(){return new Promise((n,r)=>R(this,void 0,void 0,function*(){const o=setTimeout(()=>{r("negotiation timed out")},this.peerConnectionTimeout),l=()=>{clearTimeout(o),r("negotiation aborted")};e.signal.addEventListener("abort",l),this.publisher.once(mr.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(mr.NegotiationComplete,()=>{clearTimeout(o),n()})}),yield this.publisher.negotiate(u=>{clearTimeout(o),r(u)})}))})}addPublisherTransceiver(e,n){return this.publisher.addTransceiver(e,n)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,n){return this.publisher.createDataChannel(e,n)}getConnectedAddress(e){return e===mn.PUBLISHER?this.publisher.getConnectedAddress():e===mn.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(r.getConnectionState()!=="connected")return new Promise((h,m)=>R(l,void 0,void 0,function*(){const g=()=>{this.log.warn("abort transport connection",this.logContext),Tt.clearTimeout(y),m(new Ie("room connection has been cancelled",Re.Cancelled))};o!=null&&o.signal.aborted&&g(),o==null||o.signal.addEventListener("abort",g);const y=Tt.setTimeout(()=>{o==null||o.signal.removeEventListener("abort",g),m(new Ie("could not establish pc connection",Re.InternalError))},u);for(;this.state!==We.CONNECTED;)if(yield Nt(50),o!=null&&o.signal.aborted){m(new Ie("room connection has been cancelled",Re.Cancelled));return}Tt.clearTimeout(y),o==null||o.signal.removeEventListener("abort",g),h()}))}()})}}class et extends Error{constructor(e,n,r){super(n),this.code=e,this.message=Kv(n,et.MAX_MESSAGE_BYTES),this.data=r?Kv(r,et.MAX_DATA_BYTES):void 0}static fromProto(e){return new et(e.code,e.message,e.data)}toProto(){return new H0({code:this.code,message:this.message,data:this.data})}static builtIn(e,n){return new et(et.ErrorCode[e],et.ErrorMessage[e],n)}}et.MAX_MESSAGE_BYTES=256;et.MAX_DATA_BYTES=15360;et.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};et.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 Ky=15360;function Zf(a){return new TextEncoder().encode(a).length}function Kv(a,e){if(Zf(a)<=e)return a;let n=0,r=a.length;const o=new TextEncoder;for(;n3&&arguments[3]!==void 0?arguments[3]:!1,l=arguments.length>4?arguments[4]:void 0;super(e,n,l),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=Qf(()=>R(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>R(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(W.Ended,this)},this.reacquireTrack=!1,this.providedByUser=o,this.muteLock=new Ht,this.pauseUpstreamLock=new Ht,this.processorLock=new Ht,this.restartLock=new Ht,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),r&&(this._constraints=r)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==j.Kind.Video)return;const{width:e,height:n}=this._mediaStreamTrack.getSettings();if(e&&n)return{width:e,height:n}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,n;return(n=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&n!==void 0?n:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,n){return R(this,void 0,void 0,function*(){var r;if(e===this._mediaStreamTrack&&!n)return;this._mediaStreamTrack&&(this.attachedElements.forEach(l=>{fr(this._mediaStreamTrack,l)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let o;if(this.processor&&e){const l=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(lr(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),o=this.processor.processedTrack}finally{l()}}this.sender&&((r=this.sender.transport)===null||r===void 0?void 0:r.state)!=="closed"&&(yield this.sender.replaceTrack(o??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(l=>{lr(o??e,l)}))})}waitForDimensions(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:T1;return function*(){var r;if(e.kind===j.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((r=Dn())===null||r===void 0?void 0:r.os)==="iOS"&&(yield Nt(10));const o=Date.now();for(;Date.now()-o0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===j.Source.ScreenShare)return;const{deviceId:r,groupId:o}=e._mediaStreamTrack.getSettings(),l=e.kind===j.Kind.Audio?"audioinput":"videoinput";return n?gt.getInstance().normalizeDeviceId(l,r,o):r}()})}mute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,n){return R(this,void 0,void 0,function*(){if(!this.sender)throw new $n("unable to replace an unpublished track");let r,o;return typeof n=="boolean"?r=n:n!==void 0&&(r=n.userProvidedTrack,o=n.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),o&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return R(this,void 0,void 0,function*(){this.manuallyStopped=!1;const n=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:r}=e,o=dE(e,["deviceId"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const l={audio:!1,video:!1};this.kind===j.Kind.Video?l.video=r?{deviceId:r}:!0:l.audio=r?{deviceId:r}:!0,this.attachedElements.forEach(h=>{fr(this.mediaStreamTrack,h)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const d=(yield navigator.mediaDevices.getUserMedia(l)).getTracks()[0];return yield d.applyConstraints(o),d.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(d),this._constraints=e,this.emit(W.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{n()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(W.UpstreamPaused,this);const r=Dn();if((r==null?void 0:r.name)==="Safari"&&Sr(r.version,"12.0")<0)throw new Vf("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{n()}})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(W.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{n()}})}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var l;const u=yield r.processorLock.lock();try{r.log.debug("setting up processor",r.logContext);const d=document.createElement(r.kind),h={kind:r.kind,track:r._mediaStreamTrack,element:d,audioContext:r.audioContext};if(yield n.init(h),r.log.debug("processor initialized",r.logContext),r.processor&&(yield r.stopProcessor()),r.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(lr(r._mediaStreamTrack,d),d.muted=!0,d.play().catch(m=>r.log.error("failed to play processor element",Object.assign(Object.assign({},r.logContext),{error:m}))),r.processor=n,r.processorElement=d,r.processor.processedTrack){for(const m of r.attachedElements)m!==r.processorElement&&o&&(fr(r._mediaStreamTrack,m),lr(r.processor.processedTrack,m));yield(l=r.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}r.emit(W.TrackProcessorUpdate,r.processor)}finally{u()}}()})}getProcessor(){return this.processor}stopProcessor(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var r,o;e.processor&&(e.log.debug("stopping processor",e.logContext),(r=e.processor.processedTrack)===null||r===void 0||r.stop(),yield e.processor.destroy(),e.processor=void 0,n||((o=e.processorElement)===null||o===void 0||o.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(W.TrackProcessorUpdate))}()})}}class Uc extends Qy{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;super(e,j.Kind.Audio,n,r,l),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let u;try{u=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}u&&this.prevStats&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=o,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const r=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Ii(this._constraints.deviceId);return this.source===j.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||r)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{n()}})}restartTrack(e){return R(this,void 0,void 0,function*(){let n;if(e){const r=Qc({audio:e});typeof r.audio!="boolean"&&(n=r.audio)}yield this.restart(n)})}restart(e){const n=Object.create(null,{restart:{get:()=>super.restart}});return R(this,void 0,void 0,function*(){const r=yield n.restart.call(this,e);return this.checkForSilence(),r})}startMonitor(){xt()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf)))}setProcessor(e){return R(this,void 0,void 0,function*(){var n;const r=yield this.processorLock.lock();try{if(!An()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const o={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(o),this.processor=e,this.processor.processedTrack&&(yield(n=this.sender)===null||n===void 0?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(W.TrackProcessorUpdate,this.processor)}finally{r()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const n=yield this.sender.getStats();let r;return n.forEach(o=>{o.type==="outbound-rtp"&&(r={type:"audio",streamId:o.id,packetsSent:o.packetsSent,packetsLost:o.packetsLost,bytesSent:o.bytesSent,timestamp:o.timestamp,roundTripTime:o.roundTripTime,jitter:o.jitter})}),r})}checkForSilence(){return R(this,void 0,void 0,function*(){const e=yield Gy(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(W.AudioSilenceDetected)),e})}}function Xy(a,e,n){switch(a.kind){case"audio":return new Uc(a,e,!1,void 0,n);case"video":return new Lc(a,e,!1,n);default:throw new $n("unsupported track type: ".concat(a.kind))}}const k1=Object.values(Hs),C1=Object.values(lf),E1=Object.values(Hf),R1=[Hs.h180,Hs.h360],_1=[lf.h180,lf.h360],w1=a=>[{scaleResolutionDownBy:2,fps:a.encoding.maxFramerate}].map(n=>{var r,o;return new Ue(Math.floor(a.width/n.scaleResolutionDownBy),Math.floor(a.height/n.scaleResolutionDownBy),Math.max(15e4,Math.floor(a.encoding.maxBitrate/(Math.pow(n.scaleResolutionDownBy,2)*(((r=a.encoding.maxFramerate)!==null&&r!==void 0?r:30)/((o=n.fps)!==null&&o!==void 0?o:30))))),n.fps,a.encoding.priority)}),vf=["q","h","f"];function yf(a,e,n,r){var o,l;let u=r==null?void 0:r.videoEncoding;a&&(u=r==null?void 0:r.screenShareEncoding);const d=r==null?void 0:r.simulcast,h=r==null?void 0:r.scalabilityMode,m=r==null?void 0:r.videoCodec;if(!u&&!d&&!h||!e||!n)return[{}];u||(u=D1(a,e,n,m),ke.debug("using video encoding",u));const g=u.maxFramerate,y=new Ue(e,n,u.maxBitrate,u.maxFramerate,u.priority);if(h&&Is(m)){const C=new Zy(h),k=[];if(C.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(h));const w=Dn();if(Bi()||An()||(w==null?void 0:w.name)==="Chrome"&&Sr(w==null?void 0:w.version,"113")<0){const O=C.suffix=="h"?2:3;for(let V=0;V0){const C=b[0];b.length>1&&([,T]=b);const k=Math.max(e,n);if(k>=960&&T)return Ud(e,n,[C,T,y],g);if(k>=480)return Ud(e,n,[C,y],g)}return Ud(e,n,[y])}function O1(a,e,n){var r,o,l,u;if(!n.backupCodec||n.backupCodec===!0||n.backupCodec.codec===n.videoCodec)return;e!==n.backupCodec.codec&&ke.warn("requested a different codec than specified as backup",{serverRequested:e,backup:n.backupCodec.codec}),n.videoCodec=e,n.videoEncoding=n.backupCodec.encoding;const d=a.mediaStreamTrack.getSettings(),h=(r=d.width)!==null&&r!==void 0?r:(o=a.dimensions)===null||o===void 0?void 0:o.width,m=(l=d.height)!==null&&l!==void 0?l:(u=a.dimensions)===null||u===void 0?void 0:u.height;return a.source===j.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1),yf(a.source===j.Source.ScreenShare,h,m,n)}function D1(a,e,n,r){const o=A1(a,e,n);let{encoding:l}=o[0];const u=Math.max(e,n);for(let d=0;d=u)break}if(r)switch(r){case"av1":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.7;break;case"vp9":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.85;break}return l}function A1(a,e,n){if(a)return E1;const r=e>n?e/n:n/e;return Math.abs(r-16/9)r?n/r:r/n;return Math.abs(o-16/9){if(u>=vf.length)return;const d=Math.min(a,e),m={rid:vf[u],scaleResolutionDownBy:Math.max(1,d/Math.min(l.width,l.height)),maxBitrate:l.encoding.maxBitrate},g=r&&l.encoding.maxFramerate?Math.min(r,l.encoding.maxFramerate):l.encoding.maxFramerate;g&&(m.maxFramerate=g);const y=br()||u===0;l.encoding.priority&&y&&(m.priority=l.encoding.priority,m.networkPriority=l.encoding.priority),o.push(m)}),An()&&qy()==="ios"){let l;o.forEach(d=>{l?d.maxFramerate&&d.maxFramerate>l&&(l=d.maxFramerate):l=d.maxFramerate});let u=!0;o.forEach(d=>{var h;d.maxFramerate!=l&&(u&&(u=!1,ke.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),ke.info('Setting framerate of encoding "'.concat((h=d.rid)!==null&&h!==void 0?h:"",'" to ').concat(l)),d.maxFramerate=l)})}return o}function Xv(a){if(a)return a.sort((e,n)=>{const{encoding:r}=e,{encoding:o}=n;return r.maxBitrate>o.maxBitrate?1:r.maxBitrateo.maxFramerate?1:-1:0})}class Zy{constructor(e){const n=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!n)throw new Error("invalid scalability mode");if(this.spatial=parseInt(n[1]),this.temporal=parseInt(n[2]),n.length>3)switch(n[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=n[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function M1(a){return a.source===j.Source.ScreenShare||a.constraints.height&&Ii(a.constraints.height)>=1080?"maintain-resolution":"balanced"}const P1=5e3;class Lc extends Qy{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0;super(e,j.Kind.Video,n,r,o),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let l;try{l=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}const u=new Map(l.map(d=>[d.rid,d]));if(this.prevStats){let d=0;u.forEach((h,m)=>{var g;const y=(g=this.prevStats)===null||g===void 0?void 0:g.get(m);d+=Xc(h,y)}),this._currentBitrate=d}this.prevStats=u}),this.senderLock=new Ht}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var n;if(this.signalClient=e,!xt())return;const r=(n=this.sender)===null||n===void 0?void 0:n.getParameters();r&&(this.encodings=r.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.pauseUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0)l=m.value,d=!1,yield(u=l.sender)===null||u===void 0?void 0:u.replaceTrack(null)}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.resumeUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0){l=m.value,d=!1;const g=l;yield(u=g.sender)===null||u===void 0?void 0:u.replaceTrack(g.mediaStreamTrack)}}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{n()}})}setTrackMuted(e){super.setTrackMuted(e);for(const n of this.simulcastCodecs.values())n.mediaStreamTrack.enabled=!e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const n=[],r=yield this.sender.getStats();return r.forEach(o=>{var l;if(o.type==="outbound-rtp"){const u={type:"video",streamId:o.id,frameHeight:o.frameHeight,frameWidth:o.frameWidth,framesPerSecond:o.framesPerSecond,framesSent:o.framesSent,firCount:o.firCount,pliCount:o.pliCount,nackCount:o.nackCount,packetsSent:o.packetsSent,bytesSent:o.bytesSent,qualityLimitationReason:o.qualityLimitationReason,qualityLimitationDurations:o.qualityLimitationDurations,qualityLimitationResolutionChanges:o.qualityLimitationResolutionChanges,rid:(l=o.rid)!==null&&l!==void 0?l:o.id,retransmittedPacketsSent:o.retransmittedPacketsSent,targetBitrate:o.targetBitrate,timestamp:o.timestamp},d=r.get(o.remoteId);d&&(u.jitter=d.jitter,u.packetsLost=d.packetsLost,u.roundTripTime=d.roundTripTime),n.push(u)}}),n.sort((o,l)=>{var u,d;return((u=l.frameWidth)!==null&&u!==void 0?u:0)-((d=o.frameWidth)!==null&&d!==void 0?d:0)}),n})}setPublishingQuality(e){const n=[];for(let r=rn.LOW;r<=rn.HIGH;r+=1)n.push(new Bf({quality:r,enabled:r<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(n)}restartTrack(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u;let d;if(e){const y=Qc({video:e});typeof y.video!="boolean"&&(d=y.video)}yield this.restart(d);try{for(var h=!0,m=xi(this.simulcastCodecs.values()),g;g=yield m.next(),n=g.done,!n;h=!0){l=g.value,h=!1;const y=l;y.sender&&((u=y.sender.transport)===null||u===void 0?void 0:u.state)!=="closed"&&(y.mediaStreamTrack=this.mediaStreamTrack.clone(),yield y.sender.replaceTrack(y.mediaStreamTrack))}}catch(y){r={error:y}}finally{try{!h&&!n&&(o=m.return)&&(yield o.call(m))}finally{if(r)throw r.error}}})}setProcessor(e){const n=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return R(this,arguments,void 0,function(r){var o=this;let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var u,d,h,m,g,y;if(yield n.setProcessor.call(o,r,l),!((g=o.processor)===null||g===void 0)&&g.processedTrack)try{for(var b=!0,T=xi(o.simulcastCodecs.values()),C;C=yield T.next(),u=C.done,!u;b=!0)m=C.value,b=!1,yield(y=m.sender)===null||y===void 0?void 0:y.replaceTrack(o.processor.processedTrack)}catch(k){d={error:k}}finally{try{!b&&!u&&(h=T.return)&&(yield h.call(T))}finally{if(d)throw d.error}}}()})}setDegradationPreference(e){return R(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const n=this.sender.getParameters();n.degradationPreference=e,this.sender.setParameters(n)}catch(n){this.log.warn("failed to set degradationPreference",Object.assign({error:n},this.logContext))}})}addSimulcastTrack(e,n){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const r={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:n};return this.simulcastCodecs.set(e,r),r}setSimulcastTrackSender(e,n){const r=this.simulcastCodecs.get(e);r&&(r.sender=n,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},P1))}setPublishingCodecs(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u,d,h;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(e[0].qualities),[];this.subscribedCodecs=e;const m=[];try{for(n=!0,r=xi(e);o=yield r.next(),l=o.done,!l;n=!0){h=o.value,n=!1;const g=h;if(!this.codec||this.codec===g.codec)yield this.setPublishingLayers(g.qualities);else{const y=this.simulcastCodecs.get(g.codec);if(this.log.debug("try setPublishingCodec for ".concat(g.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:y})),!y||!y.sender){for(const b of g.qualities)if(b.enabled){m.push(g.codec);break}}else y.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(g.codec),this.logContext),yield Zv(y.sender,y.encodings,g.qualities,this.senderLock,this.log,this.logContext))}}}catch(g){u={error:g}}finally{try{!n&&!l&&(d=r.return)&&(yield d.call(r))}finally{if(u)throw u.error}}return m})}setPublishingLayers(e){return R(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield Zv(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&this.isInBackground&&this.source===j.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Zv(a,e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=yield r.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},l),{sender:a,qualities:n,senderEncodings:e}));try{const d=a.getParameters(),{encodings:h}=d;if(!h)return;if(h.length!==e.length){o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},l),{encodings:h,senderEncodings:e}));return}let m=!1;!1&&h[0].scalabilityMode||h.forEach((y,b)=>{var T;let C=(T=y.rid)!==null&&T!==void 0?T:"";C===""&&(C="q");const k=Jy(C),w=n.find(O=>O.quality===k);w&&y.active!==w.enabled&&(m=!0,y.active=w.enabled,o.debug("setting layer ".concat(w.quality," to ").concat(y.active?"enabled":"disabled"),l),br()&&(w.enabled?(y.scaleResolutionDownBy=e[b].scaleResolutionDownBy,y.maxBitrate=e[b].maxBitrate,y.maxFrameRate=e[b].maxFrameRate):(y.scaleResolutionDownBy=4,y.maxBitrate=10,y.maxFrameRate=2)))}),m&&(d.encodings=h,o.debug("setting encodings",Object.assign(Object.assign({},l),{encodings:d.encodings})),yield a.setParameters(d))}finally{u()}})}function Jy(a){switch(a){case"f":return rn.HIGH;case"h":return rn.MEDIUM;case"q":return rn.LOW;default:return rn.HIGH}}function Jv(a,e,n,r){if(!n)return[new pa({quality:rn.HIGH,width:a,height:e,bitrate:0,ssrc:0})];if(r){const o=n[0].scalabilityMode,l=new Zy(o),u=[],d=l.suffix=="h"?1.5:2,h=l.suffix=="h"?2:3;for(let m=0;m{var l,u,d;const h=(l=o.scaleResolutionDownBy)!==null&&l!==void 0?l:1;let m=Jy((u=o.rid)!==null&&u!==void 0?u:"");return new pa({quality:m,width:Math.ceil(a/h),height:Math.ceil(e/h),bitrate:(d=o.maxBitrate)!==null&&d!==void 0?d:0,ssrc:0})})}const Wv="_lossy",$v="_reliable",x1=2*1e3,Ld="leave-reconnect";var dn;(function(a){a[a.New=0]="New",a[a.Connected=1]="Connected",a[a.Disconnected=2]="Disconnected",a[a.Reconnecting=3]="Reconnecting",a[a.Closed=4]="Closed"})(dn||(dn={}));class N1 extends xn.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var n;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=dn.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=ke,this.handleDataChannel=r=>R(this,[r],void 0,function(o){var l=this;let{channel:u}=o;return function*(){if(u){if(u.label===$v)l.reliableDCSub=u;else if(u.label===Wv)l.lossyDCSub=u;else return;l.log.debug("on data channel ".concat(u.id,", ").concat(u.label),l.logContext),u.onmessage=l.handleDataMessage}}()}),this.handleDataMessage=r=>R(this,void 0,void 0,function*(){var o,l;const u=yield this.dataProcessLock.lock();try{let d;if(r.data instanceof ArrayBuffer)d=r.data;else if(r.data instanceof Blob)d=yield r.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:r.data}));return}const h=Mt.fromBinary(new Uint8Array(d));((o=h.value)===null||o===void 0?void 0:o.case)==="speaker"?this.emit(ne.ActiveSpeakersUpdate,h.value.value.speakers):(((l=h.value)===null||l===void 0?void 0:l.case)==="user"&&L1(h,h.value.value),this.emit(ne.DataPacketReceived,h))}finally{u()}}),this.handleDataError=r=>{const l=r.currentTarget.maxRetransmits===0?"lossy":"reliable";if(r instanceof ErrorEvent&&r.error){const{error:u}=r.error;this.log.error("DataChannel error on ".concat(l,": ").concat(r.message),Object.assign(Object.assign({},this.logContext),{error:u}))}else this.log.error("Unknown DataChannel error on ".concat(l),Object.assign(Object.assign({},this.logContext),{event:r}))},this.handleBufferedAmountLow=r=>{const l=r.currentTarget.maxRetransmits===0?_e.LOSSY:_e.RELIABLE;this.updateAndEmitDCBufferStatus(l)},this.handleDisconnect=(r,o)=>{if(this._isClosed)return;this.log.warn("".concat(r," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const l=h=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(h,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),this.close()},u=Date.now()-this.reconnectStart;let d=this.getNextRetryDelay({elapsedMs:u,retryCount:this.reconnectAttempts});if(d===null){l(u);return}r===Ld&&(d=0),this.log.debug("reconnecting in ".concat(d,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Tt.setTimeout(()=>this.attemptReconnect(o).finally(()=>this.reconnectTimeout=void 0),d)},this.waitForRestarted=()=>new Promise((r,o)=>{this.pcState===dn.Connected&&r();const l=()=>{this.off(ne.Disconnected,u),r()},u=()=>{this.off(ne.Restarted,l),o()};this.once(ne.Restarted,l),this.once(ne.Disconnected,u)}),this.updateAndEmitDCBufferStatus=r=>{const o=this.isBufferStatusLow(r);typeof o<"u"&&o!==this.dcBufferStatus.get(r)&&(this.dcBufferStatus.set(r,o),this.emit(ne.DCBufferStatusChanged,o,r))},this.isBufferStatusLow=r=>{const o=this.dataChannelForKind(r);if(o)return o.bufferedAmount<=o.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===He.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(sr.RR_SIGNAL_DISCONNECTED))},this.log=ei((n=e.loggerName)!==null&&n!==void 0?n:gn.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new Yf(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new Ht,this.dataProcessLock=new Ht,this.dcBufferStatus=new Map([[_e.LOSSY,!0],[_e.RELIABLE,!0]]),this.client.onParticipantUpdate=r=>this.emit(ne.ParticipantUpdate,r),this.client.onConnectionQuality=r=>this.emit(ne.ConnectionQualityUpdate,r),this.client.onRoomUpdate=r=>this.emit(ne.RoomUpdate,r),this.client.onSubscriptionError=r=>this.emit(ne.SubscriptionError,r),this.client.onSubscriptionPermissionUpdate=r=>this.emit(ne.SubscriptionPermissionUpdate,r),this.client.onSpeakersChanged=r=>this.emit(ne.SpeakersChanged,r),this.client.onStreamStateUpdate=r=>this.emit(ne.StreamStateChanged,r),this.client.onRequestResponse=r=>this.emit(ne.SignalRequestResponse,r)}get logContext(){var e,n,r,o,l,u,d,h;return{room:(n=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||n===void 0?void 0:n.name,roomID:(o=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.room)===null||o===void 0?void 0:o.sid,participant:(u=(l=this.latestJoinResponse)===null||l===void 0?void 0:l.participant)===null||u===void 0?void 0:u.identity,pID:(h=(d=this.latestJoinResponse)===null||d===void 0?void 0:d.participant)===null||h===void 0?void 0:h.sid}}join(e,n,r,o){return R(this,void 0,void 0,function*(){this.url=e,this.token=n,this.signalOpts=r,this.maxJoinAttempts=r.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const l=yield this.client.join(e,n,r,o);return this._isClosed=!1,this.latestJoinResponse=l,this.subscriberPrimary=l.subscriberPrimary,this.pcManager||(yield this.configure(l)),(!this.subscriberPrimary||l.fastPublish)&&this.negotiate(),this.clientConfiguration=l.clientConfiguration,l}catch(l){if(l instanceof Ie&&l.reason===Re.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts{r&&(r.close(),r.onbufferedamountlow=null,r.onclose=null,r.onclosing=null,r.onerror=null,r.onmessage=null,r.onopen=null)};n(this.lossyDC),n(this.lossyDCSub),n(this.reliableDC),n(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return R(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $n("a track with the same ID has already been published");return new Promise((n,r)=>{const o=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],r(new Ie("publication of local track timed out, no response from server",Re.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:l=>{clearTimeout(o),n(l)},reject:()=>{clearTimeout(o),r(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:n}=this.pendingTrackResolvers[e.track.id];n&&n(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(n){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:n}))}return!1}updateMuteStatus(e,n){this.client.sendMuteTrack(e,n)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return R(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return R(this,void 0,void 0,function*(){var n,r;if(this.pcManager&&this.pcManager.currentState!==We.NEW)return;this.participantSid=(n=e.participant)===null||n===void 0?void 0:n.sid;const o=this.makeRTCConfiguration(e);this.pcManager=new S1(o,e.subscriberPrimary,this.loggerOptions),this.emit(ne.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(l,u)=>{this.client.sendIceCandidate(l,u)},this.pcManager.onPublisherOffer=l=>{this.client.sendOffer(l)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(l,u,d)=>R(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(l),this.logContext),["closed","disconnected","failed"].includes(u)&&(this.publisherConnectionPromise=void 0),l===We.CONNECTED){const g=this.pcState===dn.New;this.pcState=dn.Connected,g&&this.emit(ne.Connected,e)}else l===We.FAILED&&this.pcState===dn.Connected&&(this.pcState=dn.Disconnected,this.handleDisconnect("peerconnection failed",d==="failed"?sr.RR_SUBSCRIBER_FAILED:sr.RR_PUBLISHER_FAILED));const h=this.client.isDisconnected||this.client.currentState===He.RECONNECTING,m=[We.FAILED,We.CLOSING,We.CLOSED].includes(l);h&&m&&!this._isClosed&&this.emit(ne.Offline)}),this.pcManager.onTrack=l=>{this.emit(ne.MediaTrackAdded,l.track,l.streams[0],l.receiver)},U1((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>R(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,n)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:n})),this.pcManager.addIceCandidate(e,n))},this.client.onOffer=e=>R(this,void 0,void 0,function*(){if(!this.pcManager)return;const n=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(n)}),this.client.onLocalTrackPublished=e=>{var n;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(n=e.track)===null||n===void 0?void 0:n.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:r}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],r(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(ne.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(ne.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,n)=>{this.emit(ne.RemoteMute,e,n)},this.client.onSubscribedQualityUpdate=e=>{this.emit(ne.SubscribedQualityUpdate,e)},this.client.onClose=()=>{this.handleDisconnect("signal",sr.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case ur.DISCONNECT:this.emit(ne.Disconnected,e==null?void 0:e.reason),this.close();break;case ur.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ld);break;case ur.RESUME:this.handleDisconnect(Ld)}}}makeRTCConfiguration(e){var n;const r=Object.assign({},this.rtcConfig);if(!((n=this.signalOpts)===null||n===void 0)&&n.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),r.encodedInsertableStreams=!0),e.iceServers&&!r.iceServers){const o=[];e.iceServers.forEach(l=>{const u={urls:l.urls};l.username&&(u.username=l.username),l.credential&&(u.credential=l.credential),o.push(u)}),r.iceServers=o}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Bs.ENABLED&&(r.iceTransportPolicy="relay"),r.sdpSemantics="unified-plan",r.continualGatheringPolicy="gather_continually",r}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(Wv,{ordered:!0,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel($v,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,n,r){return R(this,void 0,void 0,function*(){if(uf())return yield this.createTransceiverRTCRtpSender(e,n,r);if(df())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(uf())return this.createSimulcastTransceiverSender(e,n,r,o);if(df())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,n,r){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const o=[];e.mediaStream&&o.push(e.mediaStream),Er(e)&&(e.codec=n.videoCodec);const l={direction:"sendonly",streams:o};return r&&(l.sendEncodings=r),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,l)).sender})}createSimulcastTransceiverSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const l={direction:"sendonly"};o&&(l.sendEncodings=o);const u=yield this.pcManager.addPublisherTransceiver(n.mediaStreamTrack,l);if(r.videoCodec)return e.setSimulcastTrackSender(r.videoCodec,u.sender),u.sender})}createRTCRtpSender(e){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return R(this,void 0,void 0,function*(){var n,r,o;if(!this._isClosed){if(this.attemptingReconnect){ke.warn("already attempting reconnect, returning early",this.logContext);return}(((n=this.clientConfiguration)===null||n===void 0?void 0:n.resumeConnection)===Bs.DISABLED||((o=(r=this.pcManager)===null||r===void 0?void 0:r.currentState)!==null&&o!==void 0?o:We.NEW)===We.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(l){this.reconnectAttempts+=1;let u=!0;l instanceof ut?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:l})),u=!1):l instanceof or||(this.fullReconnectOnNext=!0),u?this.handleDisconnect("reconnect",sr.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(n){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:n}))}return null}restartConnection(e){return R(this,void 0,void 0,function*(){var n,r,o;try{if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let l;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new or;l=yield this.join(e??this.url,this.token,this.signalOpts)}catch(u){throw u instanceof Ie&&u.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):new or}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(ne.SignalRestarted,l),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");(n=this.regionUrlProvider)===null||n===void 0||n.resetAttempts(),this.emit(ne.Restarted)}catch(l){const u=yield(r=this.regionUrlProvider)===null||r===void 0?void 0:r.getNextBestRegionUrl();if(u){yield this.restartConnection(u);return}else throw(o=this.regionUrlProvider)===null||o===void 0||o.resetAttempts(),l}})}resumeConnection(e){return R(this,void 0,void 0,function*(){var n;if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");if(!this.pcManager)throw new ut("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Resuming);let r;try{this.setupSignalClientCallbacks(),r=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(o){let l="";throw o instanceof Error&&(l=o.message,this.log.error(o.message,Object.assign(Object.assign({},this.logContext),{error:o}))),o instanceof Ie&&o.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):o instanceof Ie&&o.reason===Re.LeaveRequest?o:new or(l)}if(this.emit(ne.SignalResumed),r){const o=this.makeRTCConfiguration(r);this.pcManager.updateConfiguration(o)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");this.client.setReconnected(),((n=this.reliableDC)===null||n===void 0?void 0:n.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(ne.Resumed)})}waitForPCInitialConnection(e,n){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(n,e)})}waitForPCReconnected(){return R(this,void 0,void 0,function*(){this.pcState=dn.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Nt(x1),!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=dn.Connected}catch(e){throw this.pcState=dn.Disconnected,new Ie("could not establish PC connection, ".concat(e.message),Re.InternalError)}})}publishRpcResponse(e,n,r,o){return R(this,void 0,void 0,function*(){const l=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcResponse",value:new V0({requestId:n,value:o?{case:"error",value:o.toProto()}:{case:"payload",value:r??""}})}});yield this.sendDataPacket(l,_e.RELIABLE)})}publishRpcAck(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcAck",value:new q0({requestId:n})}});yield this.sendDataPacket(r,_e.RELIABLE)})}sendDataPacket(e,n){return R(this,void 0,void 0,function*(){const r=e.toBinary();yield this.ensurePublisherConnected(n);const o=this.dataChannelForKind(n);o&&o.send(r),this.updateAndEmitDCBufferStatus(n)})}waitForBufferStatusLow(e){return new Promise((n,r)=>R(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))n();else{const o=()=>r("Engine closed");for(this.once(ne.Closing,o);!this.dcBufferStatus.get(e);)yield Nt(10);this.off(ne.Closing,o),n()}}))}ensureDataTransportConnected(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var l;if(!r.pcManager)throw new ut("PC manager is closed");const u=o?r.pcManager.subscriber:r.pcManager.publisher,d=o?"Subscriber":"Publisher";if(!u)throw new Ie("".concat(d," connection not set"),Re.InternalError);let h=!1;!o&&!r.dataChannelForKind(n,o)&&(r.createDataChannels(),h=!0),!h&&!o&&!r.pcManager.publisher.isICEConnected&&r.pcManager.publisher.getICEConnectionState()!=="checking"&&(h=!0),h&&r.negotiate();const m=r.dataChannelForKind(n,o);if((m==null?void 0:m.readyState)==="open")return;const g=new Date().getTime()+r.peerConnectionTimeout;for(;new Date().getTime()R(this,void 0,void 0,function*(){if(!this.pcManager){n(new of("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const r=new AbortController,o=()=>{r.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&n("cannot negotiate on closed engine"),this.on(ne.Closing,o),this.pcManager.publisher.once(mr.RTPVideoPayloadTypes,l=>{const u=new Map;l.forEach(d=>{const h=d.codec.toLowerCase();XE(h)&&u.set(d.payload,h)}),this.emit(ne.RTPVideoMapUpdate,u)});try{yield this.pcManager.negotiate(r),e()}catch(l){l instanceof of&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",sr.RR_UNKNOWN),n(l)}finally{this.off(ne.Closing,o)}}))})}dataChannelForKind(e,n){if(n){if(e===_e.LOSSY)return this.lossyDCSub;if(e===_e.RELIABLE)return this.reliableDCSub}else{if(e===_e.LOSSY)return this.lossyDC;if(e===_e.RELIABLE)return this.reliableDC}}sendSyncState(e,n){var r,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const l=this.pcManager.subscriber.getLocalDescription(),u=this.pcManager.subscriber.getRemoteDescription(),d=(o=(r=this.signalOpts)===null||r===void 0?void 0:r.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(g=>{g.isDesired!==d&&h.push(g.trackSid),g.isEnabled||m.push(g.trackSid)}),this.client.sendSyncState(new ay({answer:l?Nc({sdp:l.sdp,type:l.type}):void 0,offer:u?Nc({sdp:u.sdp,type:u.type}):void 0,subscription:new Fc({trackSids:h,subscribe:!d,participantTracks:[]}),publishTracks:i1(n),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],n=(r,o)=>{(r==null?void 0:r.id)!==void 0&&r.id!==null&&e.push(new ry({label:r.label,id:r.id,target:o}))};return n(this.dataChannelForKind(_e.LOSSY),mn.PUBLISHER),n(this.dataChannelForKind(_e.RELIABLE),mn.PUBLISHER),n(this.dataChannelForKind(_e.LOSSY,!0),mn.SUBSCRIBER),n(this.dataChannelForKind(_e.RELIABLE,!0),mn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Tt.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xt()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xt()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class or extends Error{}function U1(a){return a!==void 0&&a>13}function L1(a,e){const n=a.participantIdentity?a.participantIdentity:e.participantIdentity;a.participantIdentity=n,e.participantIdentity=n;const r=a.destinationIdentities.length!==0?a.destinationIdentities:e.destinationIdentities;a.destinationIdentities=r,e.destinationIdentities=r}class bf{constructor(e,n){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=n}updateToken(e){this.token=e}isCloud(){return hf(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return R(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const n=this.regionSettings.regions.filter(r=>!this.attemptedRegions.find(o=>o.url===r.url));if(n.length>0){const r=n[0];return this.attemptedRegions.push(r),ke.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return R(this,void 0,void 0,function*(){const n=yield fetch("".concat(I1(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(n.ok){const r=yield n.json();return this.lastUpdateAt=Date.now(),r}else throw new Ie("Could not fetch region settings: ".concat(n.statusText),n.status===401?Re.NotAllowed:Re.InternalError,n.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function I1(a){return"".concat(a.protocol.replace("ws","http"),"//").concat(a.host,"/settings")}class Wy{get info(){return this._info}constructor(e,n,r){this.reader=n,this.totalByteSize=r,this._info=e,this.bytesReceived=0}}class j1 extends Wy{handleChunkReceived(e){var n;this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>R(this,void 0,void 0,function*(){try{const{done:n,value:r}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(r),{done:!1,value:r.content})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l=new Set;try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0){o=h.value,u=!1;const m=o;l.add(m)}}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return Array.from(l)})}}class B1 extends Wy{constructor(e,n,r){super(e,n,r),this.receivedChunks=new Map}handleChunkReceived(e){var n;const r=Oc(e.chunkIndex),o=this.receivedChunks.get(r);if(o&&o.version>e.version)return;this.receivedChunks.set(r,e),this.bytesReceived+=e.content.byteLength;const l=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,l)}[Symbol.asyncIterator](){const e=this.reader.getReader(),n=new TextDecoder;return{next:()=>R(this,void 0,void 0,function*(){try{const{done:r,value:o}=yield e.read();return r?{done:!0,value:void 0}:(this.handleChunkReceived(o),{done:!1,value:n.decode(o.content)})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l="";try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0)o=h.value,u=!1,l+=o}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return l})}}class z1{constructor(e,n,r){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=r,this.info=n}write(e){return this.defaultWriter.write(e)}close(){return R(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class q1 extends z1{}class $y extends j{constructor(e,n,r,o,l){super(e,r,l),this.sid=n,this.receiver=o}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const n=r=>{r.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",n),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(W.Ended,this))};e.addEventListener("removetrack",n)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),Jf)),a1()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var n;this.timeSyncHandle=requestAnimationFrame(()=>e());const r=(n=this.receiver)===null||n===void 0?void 0:n.getSynchronizationSources()[0];if(r){const{timestamp:o,rtpTimestamp:l}=r;l&&this.rtpTimestamp!==l&&(this.emit(W.TimeSyncUpdate,{timestamp:o,rtpTimestamp:l}),this.rtpTimestamp=l)}};e()}}class eb extends $y{constructor(e,n,r,o,l,u){super(e,n,j.Kind.Audio,r,u),this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const d=yield this.getReceiverStats();d&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(d,this.prevStats)),this.prevStats=d}),this.audioContext=o,this.webAudioPluginNodes=[],l&&(this.sinkId=l.deviceId)}setVolume(e){var n;for(const r of this.attachedElements)this.audioContext?(n=this.gainNode)===null||n===void 0||n.gain.setTargetAtTime(e,0,.1):r.volume=e;An()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(An())return 1;let e=0;return this.attachedElements.forEach(n=>{n.volume>e&&(e=n.volume)}),e}setSinkId(e){return R(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(n=>{if(ff(n))return n.setSinkId(e)}))})}attach(e){const n=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&ff(e)&&e.setSinkId(this.sinkId),this.audioContext&&n&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let n;return e?(n=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(n=super.detach(),this.disconnectWebAudio()),n}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,n){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(n.srcObject);let r=this.sourceNode;this.webAudioPluginNodes.forEach(o=>{r.connect(o),r=o}),this.gainNode=e.createGain(),r.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(W.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(o=>{this.emit(W.AudioPlaybackFailed,o)})}disconnectWebAudio(){var e,n;(e=this.gainNode)===null||e===void 0||e.disconnect(),(n=this.sourceNode)===null||n===void 0||n.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n;return e.forEach(r=>{r.type==="inbound-rtp"&&(n={type:"audio",streamId:r.id,timestamp:r.timestamp,jitter:r.jitter,bytesReceived:r.bytesReceived,concealedSamples:r.concealedSamples,concealmentEvents:r.concealmentEvents,silentConcealedSamples:r.silentConcealedSamples,silentConcealmentEvents:r.silentConcealmentEvents,totalAudioEnergy:r.totalAudioEnergy,totalSamplesDuration:r.totalSamplesDuration})}),n})}}const Id=100;class V1 extends $y{constructor(e,n,r,o,l){super(e,n,j.Kind.Video,r,l),this.elementInfos=[],this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const u=yield this.getReceiverStats();u&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.debouncedHandleResize=Qf(()=>{this.updateDimensions()},Id),this.adaptiveStreamSettings=o}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(n=>{e?fr(this._mediaStreamTrack,n):lr(this._mediaStreamTrack,n)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(n=>n.element===e)===void 0){const n=new H1(e);this.observeElementInfo(n)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(n=>n===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const n=this.elementInfos.filter(r=>r===e);for(const r of n)r.stopObserving();this.elementInfos=this.elementInfos.filter(r=>r!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let n=[];if(e)return this.stopObservingElement(e),super.detach(e);n=super.detach();for(const r of n)this.stopObservingElement(r);return n}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n,r="",o=new Map;return e.forEach(l=>{l.type==="inbound-rtp"?(r=l.codecId,n={type:"video",streamId:l.id,framesDecoded:l.framesDecoded,framesDropped:l.framesDropped,framesReceived:l.framesReceived,packetsReceived:l.packetsReceived,packetsLost:l.packetsLost,frameWidth:l.frameWidth,frameHeight:l.frameHeight,pliCount:l.pliCount,firCount:l.firCount,nackCount:l.nackCount,jitter:l.jitter,timestamp:l.timestamp,bytesReceived:l.bytesReceived,decoderImplementation:l.decoderImplementation}):l.type==="codec"&&o.set(l.id,l)}),n&&r!==""&&o.get(r)&&(n.mimeType=o.get(r).mimeType),n})}stopObservingElement(e){const n=this.elementInfos.filter(r=>r.element===e);for(const r of n)this.stopObservingElementInfo(r)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,n;const r=this.elementInfos.reduce((d,h)=>Math.max(d,h.visibilityChangedAt||0),0),o=!((n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&n!==void 0)||n?this.isInBackground:!1,l=this.elementInfos.some(d=>d.pictureInPicture),u=this.elementInfos.some(d=>d.visible)&&!o||l;if(this.lastVisible!==u){if(!u&&Date.now()-r{this.updateVisibility()},Id);return}this.lastVisible=u,this.emit(W.VisibilityChanged,u,this)}}updateDimensions(){var e,n;let r=0,o=0;const l=this.getPixelDensity();for(const u of this.elementInfos){const d=u.width()*l,h=u.height()*l;d+h>r+o&&(r=d,o=h)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===r&&((n=this.lastDimensions)===null||n===void 0?void 0:n.height)===o||(this.lastDimensions={width:r,height:o},this.emit(W.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return n==="screen"?Pv():n||(Pv()>2?2:1)}}class H1{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,n){this.onVisibilityChanged=r=>{var o;const{target:l,isIntersecting:u}=r;l===this.element&&(this.isIntersecting=u,this.isPiP=Ms(this.element),this.visibilityChangedAt=Date.now(),(o=this.handleVisibilityChanged)===null||o===void 0||o.call(this))},this.onEnterPiP=()=>{var r,o,l;(o=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||o===void 0||o.addEventListener("pagehide",this.onLeavePiP),this.isPiP=Ms(this.element),(l=this.handleVisibilityChanged)===null||l===void 0||l.call(this)},this.onLeavePiP=()=>{var r;this.isPiP=Ms(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.element=e,this.isIntersecting=n??Sf(e),this.isPiP=xt()&&Ms(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,n,r;this.isIntersecting=Sf(this.element),this.isPiP=Ms(this.element),this.element.handleResize=()=>{var o;(o=this.handleResize)===null||o===void 0||o.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Nv().observe(this.element),xv().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(r=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,n,r,o,l;(e=Nv())===null||e===void 0||e.unobserve(this.element),(n=xv())===null||n===void 0||n.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(r=window.documentPictureInPicture)===null||r===void 0||r.removeEventListener("enter",this.onEnterPiP),(l=(o=window.documentPictureInPicture)===null||o===void 0?void 0:o.window)===null||l===void 0||l.removeEventListener("pagehide",this.onLeavePiP)}}function Ms(a){var e,n;return document.pictureInPictureElement===a?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sf(a,(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window):!1}function Sf(a,e){const n=e||window;let r=a.offsetTop,o=a.offsetLeft;const l=a.offsetWidth,u=a.offsetHeight,{hidden:d}=a,{display:h}=getComputedStyle(a);for(;a.offsetParent;)a=a.offsetParent,r+=a.offsetTop,o+=a.offsetLeft;return rn.pageYOffset&&o+l>n.pageXOffset&&!d&&h!=="none"}class Pi extends xn.EventEmitter{constructor(e,n,r,o){var l;super(),this.metadataMuted=!1,this.encryption=Vt.NONE,this.log=ke,this.handleMuted=()=>{this.emit(W.Muted)},this.handleUnmuted=()=>{this.emit(W.Unmuted)},this.log=ei((l=o==null?void 0:o.loggerName)!==null&&l!==void 0?l:gn.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=n,this.trackName=r,this.source=j.Source.Unknown}setTrack(e){this.track&&(this.track.off(W.Muted,this.handleMuted),this.track.off(W.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(W.Muted,this.handleMuted),e.on(W.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Me(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Vt.NONE}get audioTrack(){if(ti(this.track))return this.track}get videoTrack(){if(Er(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=j.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===j.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(a){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(a.SubscriptionStatus||(a.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(a.PermissionStatus||(a.PermissionStatus={}))})(Pi);class Tf extends Pi{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.handleTrackEnded=()=>{this.emit(W.Ended)},this.updateInfo(n),this.setTrack(r)}setTrack(e){this.track&&this.track.off(W.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(W.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ti(this.track)){const n=this.track.getSourceTrackSettings(),r=new Set;return n.autoGainControl&&r.add(On.TF_AUTO_GAIN_CONTROL),n.echoCancellation&&r.add(On.TF_ECHO_CANCELLATION),n.noiseSuppression&&r.add(On.TF_NOISE_SUPPRESSION),n.channelCount&&n.channelCount>1&&r.add(On.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||r.add(On.TF_NO_DTX),this.track.enhancedNoiseCancellation&&r.add(On.TF_ENHANCED_NOISE_CANCELLATION),Array.from(r.values())}else return[]}}var Ni;(function(a){a.Excellent="excellent",a.Good="good",a.Poor="poor",a.Lost="lost",a.Unknown="unknown"})(Ni||(Ni={}));function G1(a){switch(a){case xs.EXCELLENT:return Ni.Excellent;case xs.GOOD:return Ni.Good;case xs.POOR:return Ni.Poor;case xs.LOST:return Ni.Lost;default:return Ni.Unknown}}class tb extends xn.EventEmitter{get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===qs.AGENT}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,n,r,o,l,u){let d=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qs.STANDARD;var h;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Ni.Unknown,this.log=ke,this.log=ei((h=u==null?void 0:u.loggerName)!==null&&h!==void 0?h:gn.Participant),this.loggerOptions=u,this.setMaxListeners(100),this.sid=e,this.identity=n,this.name=r,this.metadata=o,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=d,this._attributes=l??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,n]of this.trackPublications)if(n.source===e)return n}getTrackPublicationByName(e){for(const[,n]of this.trackPublications)if(n.trackName===e)return n}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const n=this.getTrackPublication(j.Source.Camera);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const n=this.getTrackPublication(j.Source.Microphone);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(j.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,this.log.trace("update participant info",Object.assign(Object.assign({},this.logContext),{info:e})),!0)}_setMetadata(e){const n=this.metadata!==e,r=this.metadata;this.metadata=e,n&&this.emit(F.ParticipantMetadataChanged,r)}_setName(e){const n=this.name!==e;this.name=e,n&&this.emit(F.ParticipantNameChanged,e)}_setAttributes(e){const n=r1(this.attributes,e);this._attributes=e,Object.keys(n).length>0&&this.emit(F.AttributesChanged,n)}setPermissions(e){var n,r,o,l,u,d;const h=this.permissions,m=e.canPublish!==((n=this.permissions)===null||n===void 0?void 0:n.canPublish)||e.canSubscribe!==((r=this.permissions)===null||r===void 0?void 0:r.canSubscribe)||e.canPublishData!==((o=this.permissions)===null||o===void 0?void 0:o.canPublishData)||e.hidden!==((l=this.permissions)===null||l===void 0?void 0:l.hidden)||e.recorder!==((u=this.permissions)===null||u===void 0?void 0:u.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((g,y)=>{var b;return g!==((b=this.permissions)===null||b===void 0?void 0:b.canPublishSources[y])})||e.canSubscribeMetrics!==((d=this.permissions)===null||d===void 0?void 0:d.canSubscribeMetrics);return this.permissions=e,m&&this.emit(F.ParticipantPermissionsChanged,h),m}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(F.IsSpeakingChanged,e))}setConnectionQuality(e){const n=this._connectionQuality;this._connectionQuality=G1(e),n!==this._connectionQuality&&this.emit(F.ConnectionQualityChanged,this._connectionQuality)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(n=>ti(n.track)&&n.track.setAudioContext(e))}addTrackPublication(e){e.on(W.Muted,()=>{this.emit(F.TrackMuted,e)}),e.on(W.Unmuted,()=>{this.emit(F.TrackUnmuted,e)});const n=e;switch(n.track&&(n.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case j.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case j.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function F1(a){var e,n,r;if(!a.participantSid&&!a.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new ny({participantIdentity:(e=a.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(n=a.participantSid)!==null&&n!==void 0?n:"",allTracks:(r=a.allowAll)!==null&&r!==void 0?r:!1,trackSids:a.allowedTrackSids||[]})}const hc=15e3;class Y1 extends tb{constructor(e,n,r,o,l){super(e,n,void 0,void 0,void 0,{loggerName:o.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Vt.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Vy)},this.handleReconnected=()=>{var u,d;(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.resolve)===null||d===void 0||d.call(u),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var u,d;this.reconnectFuture&&(this.reconnectFuture.promise.catch(h=>this.log.warn(h.message,this.logContext)),(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.reject)===null||d===void 0||d.call(u,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=u=>{const{requestId:d,reason:h,message:m}=u,g=this.pendingSignalRequests.get(d);g&&(h!==zf.OK&&g.reject(new Ov(m,h)),this.pendingSignalRequests.delete(d))},this.handleDataPacket=u=>{switch(u.value.case){case"rpcResponse":let d=u.value.value,h=null,m=null;d.value.case==="payload"?h=d.value.value:d.value.case==="error"&&(m=et.fromProto(d.value.value)),this.handleIncomingRpcResponse(d.requestId,h,m);break;case"rpcAck":let g=u.value.value;this.handleIncomingRpcAck(g.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(u=>F1(u)))},this.onTrackUnmuted=u=>{this.onTrackMuted(u,u.isUpstreamPaused)},this.onTrackMuted=(u,d)=>{if(d===void 0&&(d=!0),!u.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Me(u)));return}this.engine.updateMuteStatus(u.sid,d)},this.onTrackUpstreamPaused=u=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,!0)},this.onTrackUpstreamResumed=u=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,u.isMuted)},this.onTrackFeatureUpdate=u=>{const d=this.audioTrackPublications.get(u.sid);if(!d){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(u.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(d.trackSid,d.getTrackFeatures())},this.handleSubscribedQualityUpdate=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;if(!(!((y=this.roomOptions)===null||y===void 0)&&y.dynacast))return;const T=this.videoTrackPublications.get(u.trackSid);if(!T){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}if(u.subscribedCodecs.length>0){if(!T.videoTrack)return;const O=yield T.videoTrack.setPublishingCodecs(u.subscribedCodecs);try{for(var C=!0,k=xi(O),w;w=yield k.next(),d=w.done,!d;C=!0){g=w.value,C=!1;const V=g;IE(V)&&(this.log.debug("publish ".concat(V," for ").concat(T.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Me(T))),yield this.publishAdditionalCodecForTrack(T.videoTrack,V,T.options))}}catch(V){h={error:V}}finally{try{!C&&!d&&(m=k.return)&&(yield m.call(k))}finally{if(h)throw h.error}}}else u.subscribedQualities.length>0&&(yield(b=T.videoTrack)===null||b===void 0?void 0:b.setPublishingLayers(u.subscribedQualities))}),this.handleLocalTrackUnpublished=u=>{const d=this.trackPublications.get(u.trackSid);if(!d){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}this.unpublishTrack(d.track)},this.handleTrackEnded=u=>R(this,void 0,void 0,function*(){if(u.source===j.Source.ScreenShare||u.source===j.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Me(u))),this.unpublishTrack(u);else if(u.isUserProvided)yield u.mute();else if(ha(u)||Ai(u))try{if(xt())try{const d=yield navigator==null?void 0:navigator.permissions.query({name:u.source===j.Source.Camera?"camera":"microphone"});if(d&&d.state==="denied")throw this.log.warn("user has revoked access to ".concat(u.source),Object.assign(Object.assign({},this.logContext),Me(u))),d.onchange=()=>{d.state!=="denied"&&(u.isMuted||u.restartTrack(),d.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}u.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Me(u))),ha(u)?yield u.restartTrack({deviceId:"default"}):yield u.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Me(u))),yield u.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=r,this.roomOptions=o,this.setupEngine(r),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=l}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Vt.NONE}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setupEngine(e){this.engine=e,this.engine.on(ne.RemoteMute,(n,r)=>{const o=this.trackPublications.get(n);!o||!o.track||(r?o.mute():o.unmute())}),this.engine.on(ne.Connected,this.handleReconnected).on(ne.SignalRestarted,this.handleReconnected).on(ne.SignalResumed,this.handleReconnected).on(ne.Restarting,this.handleReconnecting).on(ne.Resuming,this.handleReconnecting).on(ne.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(ne.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(ne.Disconnected,this.handleDisconnected).on(ne.SignalRequestResponse,this.handleSignalRequestResponse).on(ne.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return R(this,arguments,void 0,function(n){var r=this;let{metadata:o,name:l,attributes:u}=n;return function*(){return new Promise((d,h)=>R(r,void 0,void 0,function*(){var m,g;try{let y=!1;const b=yield this.engine.client.sendUpdateLocalMetadata((m=o??this.metadata)!==null&&m!==void 0?m:"",(g=l??this.name)!==null&&g!==void 0?g:"",u),T=performance.now();for(this.pendingSignalRequests.set(b,{resolve:d,reject:C=>{h(C),y=!0},values:{name:l,metadata:o,attributes:u}});performance.now()-T<5e3&&!y;){if((!l||this.name===l)&&(!o||this.metadata===o)&&(!u||Object.entries(u).every(C=>{let[k,w]=C;return this.attributes[k]===w||w===""&&!this.attributes[k]}))){this.pendingSignalRequests.delete(b),d();return}yield Nt(50)}h(new Ov("Request to update local metadata timed out","TimeoutError"))}catch(y){y instanceof Error&&h(y)}}))}()})}setCameraEnabled(e,n,r){return this.setTrackEnabled(j.Source.Camera,e,n,r)}setMicrophoneEnabled(e,n,r){return this.setTrackEnabled(j.Source.Microphone,e,n,r)}setScreenShareEnabled(e,n,r){return this.setTrackEnabled(j.Source.ScreenShare,e,n,r)}setPermissions(e){const n=this.permissions,r=super.setPermissions(e);return r&&n&&this.emit(F.ParticipantPermissionsChanged,n),r}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){this.encryptionType=e?Vt.GCM:Vt.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,n,r,o){return R(this,void 0,void 0,function*(){var l,u;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:n})),this.republishPromise&&(yield this.republishPromise);let d=this.getTrackPublication(e);if(n)if(d)yield d.unmute();else{let h;if(this.pendingPublishing.has(e)){const m=yield this.waitForPendingPublicationOfSource(e);return m||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield m==null?void 0:m.unmute(),m}this.pendingPublishing.add(e);try{switch(e){case j.Source.Camera:h=yield this.createTracks({video:(l=r)!==null&&l!==void 0?l:!0});break;case j.Source.Microphone:h=yield this.createTracks({audio:(u=r)!==null&&u!==void 0?u:!0});break;case j.Source.ScreenShare:h=yield this.createScreenTracks(Object.assign({},r));break;default:throw new $n(e)}}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m instanceof Error&&this.emit(F.MediaDevicesError,m),this.pendingPublishing.delete(e),m}try{const m=[];for(const y of h)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Me(y))),m.push(this.publishTrack(y,o));[d]=yield Promise.all(m)}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m}finally{this.pendingPublishing.delete(e)}}else if(!(d!=null&&d.track)&&this.pendingPublishing.has(e)&&(d=yield this.waitForPendingPublicationOfSource(e),d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),d&&d.track)if(e===j.Source.ScreenShare){d=yield this.unpublishTrack(d.track);const h=this.getTrackPublication(j.Source.ScreenShareAudio);h&&h.track&&this.unpublishTrack(h.track)}else yield d.mute();return d})}enableCameraAndMicrophone(){return R(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(j.Source.Camera)||this.pendingPublishing.has(j.Source.Microphone))){this.pendingPublishing.add(j.Source.Camera),this.pendingPublishing.add(j.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(n=>this.publishTrack(n)))}finally{this.pendingPublishing.delete(j.Source.Camera),this.pendingPublishing.delete(j.Source.Microphone)}}})}createTracks(e){return R(this,void 0,void 0,function*(){var n,r;e??(e={});const o=Hy(e,(n=this.roomOptions)===null||n===void 0?void 0:n.audioCaptureDefaults,(r=this.roomOptions)===null||r===void 0?void 0:r.videoCaptureDefaults),{audioProcessor:l,videoProcessor:u,optionsWithoutProcessor:d}=Ff(o),h=Qc(d);let m;try{m=yield navigator.mediaDevices.getUserMedia(h)}catch(g){throw g instanceof Error&&(h.audio&&(this.microphoneError=g),h.video&&(this.cameraError=g)),g}return h.audio&&(this.microphoneError=void 0,this.emit(F.AudioStreamAcquired)),h.video&&(this.cameraError=void 0),Promise.all(m.getTracks().map(g=>R(this,void 0,void 0,function*(){const y=g.kind==="audio";let b;const T=y?h.audio:h.video;typeof T!="boolean"&&(b=T);const C=Xy(g,b,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone,C.setAudioContext(this.audioContext)),C.mediaStream=m,ti(C)&&l?yield C.setProcessor(l):Er(C)&&u&&(yield C.setProcessor(u)),C})))})}createScreenTracks(e){return R(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Vf("getDisplayMedia not supported");e.resolution===void 0&&!HE()&&(e.resolution=Hf.h1080fps30.resolution);const n=n1(e),r=yield navigator.mediaDevices.getDisplayMedia(n),o=r.getVideoTracks();if(o.length===0)throw new $n("no video track found");const l=new Lc(o[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=j.Source.ScreenShare,e.contentHint&&(l.mediaStreamTrack.contentHint=e.contentHint);const u=[l];if(r.getAudioTracks().length>0){this.emit(F.AudioStreamAcquired);const d=new Uc(r.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});d.source=j.Source.ScreenShareAudio,u.push(d)}return u})}publishTrack(e,n){return R(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,n)})}publishOrRepublishTrack(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g;ha(r)&&r.setAudioContext(l.audioContext),yield(d=l.reconnectFuture)===null||d===void 0?void 0:d.promise,l.republishPromise&&!u&&(yield l.republishPromise),hr(r)&&l.pendingPublishPromises.has(r)&&(yield l.pendingPublishPromises.get(r));let y;if(r instanceof MediaStreamTrack)y=r.getConstraints();else{y=r.constraints;let O;switch(r.source){case j.Source.Microphone:O="audioinput";break;case j.Source.Camera:O="videoinput"}O&&l.activeDeviceMap.has(O)&&(y=Object.assign(Object.assign({},y),{deviceId:l.activeDeviceMap.get(O)}))}if(r instanceof MediaStreamTrack)switch(r.kind){case"audio":r=new Uc(r,y,!0,l.audioContext,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;case"video":r=new Lc(r,y,!0,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;default:throw new $n("unsupported MediaStreamTrack kind ".concat(r.kind))}else r.updateLoggerOptions({loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});let b;if(l.trackPublications.forEach(O=>{O.track&&O.track===r&&(b=O)}),b)return l.log.warn("track has already been published, skipping",Object.assign(Object.assign({},l.logContext),Me(b))),b;const T="channelCount"in r.mediaStreamTrack.getSettings()&&r.mediaStreamTrack.getSettings().channelCount===2||r.mediaStreamTrack.getConstraints().channelCount===2,C=(h=o==null?void 0:o.forceStereo)!==null&&h!==void 0?h:T;C&&(o||(o={}),o.dtx===void 0&&l.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},l.logContext),Me(r))),o.red===void 0&&l.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(m=o.dtx)!==null&&m!==void 0||(o.dtx=!1),(g=o.red)!==null&&g!==void 0||(o.red=!1));const k=Object.assign(Object.assign({},l.roomOptions.publishDefaults),o);!GE()&&l.roomOptions.e2ee&&(l.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},l.logContext)),k.simulcast=!1),k.source&&(r.source=k.source);const w=l.publish(r,k,C);l.pendingPublishPromises.set(r,w);try{return yield w}catch(O){throw O}finally{l.pendingPublishPromises.delete(r)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Me(e))),!1;const{canPublish:n,canPublishSources:r}=this.permissions;return n&&(r.length===0||r.map(o=>s1(o)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Me(e))),!1)}publish(e,n,r){return R(this,void 0,void 0,function*(){var o,l,u,d,h,m,g,y,b,T;if(!this.hasPermissionsToPublish(e))throw new wE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(_=>hr(e)&&_.source===e.source)&&e.source!==j.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),Me(e))),n.stopMicTrackOnMute&&ti(e)&&(e.stopOnMute=!0),e.source===j.Source.ScreenShare&&br()&&(n.simulcast=!1),n.videoCodec==="av1"&&!zE()&&(n.videoCodec=void 0),n.videoCodec==="vp9"&&!qE()&&(n.videoCodec=void 0),n.videoCodec===void 0&&(n.videoCodec=gf),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(_=>n.videoCodec===Dc(_.mime))||(n.videoCodec=Dc(this.enabledPublishVideoCodecs[0].mime)));const k=n.videoCodec;e.on(W.Muted,this.onTrackMuted),e.on(W.Unmuted,this.onTrackUnmuted),e.on(W.Ended,this.handleTrackEnded),e.on(W.UpstreamPaused,this.onTrackUpstreamPaused),e.on(W.UpstreamResumed,this.onTrackUpstreamResumed),e.on(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const w=new Jd({cid:e.mediaStreamTrack.id,name:n.name,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),disableDtx:!(!((o=n.dtx)!==null&&o!==void 0)||o),encryption:this.encryptionType,stereo:r,disableRed:this.isE2EEEnabled||!(!((l=n.red)!==null&&l!==void 0)||l),stream:n==null?void 0:n.stream,backupCodecPolicy:n==null?void 0:n.backupCodecPolicy});let O;if(e.kind===j.Kind.Video){let _={width:0,height:0};try{_=yield e.waitForDimensions()}catch{const $=(d=(u=this.roomOptions.videoCaptureDefaults)===null||u===void 0?void 0:u.resolution)!==null&&d!==void 0?d:Hs.h720.resolution;_={width:$.width,height:$.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{dims:_}))}w.width=_.width,w.height=_.height,Ai(e)&&(Is(k)&&(e.source===j.Source.ScreenShare&&(n.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),Me(e))))),n.scalabilityMode=(h=n.scalabilityMode)!==null&&h!==void 0?h:"L3T3_KEY"),w.simulcastCodecs=[new Zd({codec:k,cid:e.mediaStreamTrack.id})],n.backupCodec===!0&&(n.backupCodec={codec:gf}),n.backupCodec&&k!==n.backupCodec.codec&&w.encryption===Vt.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new Zd({codec:n.backupCodec.codec,cid:""})))),O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n),w.layers=Jv(w.width,w.height,O,Is(n.videoCodec))}else e.kind===j.Kind.Audio&&(O=[{maxBitrate:(m=n.audioPreset)===null||m===void 0?void 0:m.maxBitrate,priority:(y=(g=n.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&y!==void 0?y:"high",networkPriority:(T=(b=n.audioPreset)===null||b===void 0?void 0:b.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const V=()=>R(this,void 0,void 0,function*(){var _,H,$;if(!this.engine.pcManager)throw new ut("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,n,O),Ai(e)&&((_=n.degradationPreference)!==null&&_!==void 0||(n.degradationPreference=M1(e)),e.setDegradationPreference(n.degradationPreference)),O)if(br()&&e.kind===j.Kind.Audio){let ie;for(const X of this.engine.pcManager.publisher.getTransceivers())if(X.sender===e.sender){ie=X;break}ie&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:ie,codec:"opus",maxbr:!((H=O[0])===null||H===void 0)&&H.maxBitrate?O[0].maxBitrate/1e3:0})}else e.codec&&Is(e.codec)&&(!(($=O[0])===null||$===void 0)&&$.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:O[0].maxBitrate/1e3});yield this.engine.negotiate()});let Q;if(this.enabledPublishVideoCodecs.length>0)Q=(yield Promise.all([this.engine.addTrack(w),V()]))[0];else{Q=yield this.engine.addTrack(w);let _;if(Q.codecs.forEach(H=>{_===void 0&&(_=H.mimeType)}),_&&e.kind===j.Kind.Video){const H=Dc(_);H!==k&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{codec:H})),n.videoCodec=H,O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n))}yield V()}const U=new Tf(e.kind,Q,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return U.options=n,e.sid=Q.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:O,trackInfo:Q})),Ai(e)?e.startMonitor(this.engine.client):ha(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(F.LocalTrackPublished,U),U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,n,r){return R(this,void 0,void 0,function*(){var o;if(this.encryptionType!==Vt.NONE)return;let l;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(l=T)}),!l)throw new $n("track is not published");if(!Ai(e))throw new $n("track is not a video track");const u=Object.assign(Object.assign({},(o=this.roomOptions)===null||o===void 0?void 0:o.publishDefaults),r),d=O1(e,n,u);if(!d){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Me(e)));return}const h=e.addSimulcastTrack(n,d);if(!h)return;const m=new Jd({cid:h.mediaStreamTrack.id,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:u.videoCodec,cid:h.mediaStreamTrack.id}]});if(m.layers=Jv(m.width,m.height,d),!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const g=()=>R(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,h,u,d),yield this.engine.negotiate()}),b=(yield Promise.all([this.engine.addTrack(m),g()]))[0];this.log.debug("published ".concat(n," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:d,trackInfo:b}))})}unpublishTrack(e,n){return R(this,void 0,void 0,function*(){var r,o;if(hr(e)){const m=this.pendingPublishPromises.get(e);m&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Me(e))),yield m)}const l=this.getPublicationForTrack(e),u=l?Me(l):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),u)),!l||!l.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),u));return}e=l.track,e.off(W.Muted,this.onTrackMuted),e.off(W.Unmuted,this.onTrackUnmuted),e.off(W.Ended,this.handleTrackEnded),e.off(W.UpstreamPaused,this.onTrackUpstreamPaused),e.off(W.UpstreamResumed,this.onTrackUpstreamResumed),e.off(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),n===void 0&&(n=(o=(r=this.roomOptions)===null||r===void 0?void 0:r.stopLocalTrackOnUnpublish)!==null&&o!==void 0?o:!0),n?e.stop():e.stopMonitor();let d=!1;const h=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentStatethis.unpublishTrack(r)))).filter(r=>!!r)})}republishAllTracks(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){r.republishPromise&&(yield r.republishPromise),r.republishPromise=new Promise((l,u)=>R(r,void 0,void 0,function*(){try{const d=[];this.trackPublications.forEach(h=>{h.track&&(n&&(h.options=Object.assign(Object.assign({},h.options),n)),d.push(h))}),yield Promise.all(d.map(h=>R(this,void 0,void 0,function*(){const m=h.track;yield this.unpublishTrack(m,!1),o&&!m.isMuted&&m.source!==j.Source.ScreenShare&&m.source!==j.Source.ScreenShareAudio&&(ha(m)||Ai(m))&&!m.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:h.trackSid})),yield m.restartTrack()),yield this.publishOrRepublishTrack(m,h.options,!0)}))),l()}catch(d){u(d)}finally{this.republishPromise=void 0}})),yield r.republishPromise}()})}publishData(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const l=o.reliable?_e.RELIABLE:_e.LOSSY,u=o.destinationIdentities,d=o.topic,h=new Mt({kind:l,value:{case:"user",value:new j0({participantIdentity:r.identity,payload:n,destinationIdentities:u,topic:d})}});yield r.engine.sendDataPacket(h,l)}()})}publishDtmf(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({kind:_e.RELIABLE,value:{case:"sipDtmf",value:new B0({code:e,digit:n})}});yield this.engine.sendDataPacket(r,_e.RELIABLE)})}sendChatMessage(e,n){return R(this,void 0,void 0,function*(){const r={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:n==null?void 0:n.attachments},o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}editChatMessage(e,n){return R(this,void 0,void 0,function*(){const r=Object.assign(Object.assign({},n),{message:e,editTimestamp:Date.now()}),o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp),editTimestamp:Ge.parse(r.editTimestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}sendText(e,n){return R(this,void 0,void 0,function*(){var r;const o=crypto.randomUUID(),u=new TextEncoder().encode(e).byteLength,d=(r=n==null?void 0:n.attachments)===null||r===void 0?void 0:r.map(()=>crypto.randomUUID()),h=new Array(d?d.length+1:1).fill(0),m=(y,b)=>{var T;h[b]=y;const C=h.reduce((k,w)=>k+w,0);(T=n==null?void 0:n.onProgress)===null||T===void 0||T.call(n,C)},g=yield this.streamText({streamId:o,totalSize:u,destinationIdentities:n==null?void 0:n.destinationIdentities,topic:n==null?void 0:n.topic,attachedStreamIds:d,attributes:n==null?void 0:n.attributes});return yield g.write(e),m(1,0),yield g.close(),n!=null&&n.attachments&&d&&(yield Promise.all(n.attachments.map((y,b)=>R(this,void 0,void 0,function*(){return this._sendFile(d[b],y,{topic:n.topic,mimeType:y.type,onProgress:T=>{m(T,b+1)}})})))),g.info})}streamText(e){return R(this,void 0,void 0,function*(){var n,r;const o=(n=e==null?void 0:e.streamId)!==null&&n!==void 0?n:crypto.randomUUID(),l={id:o,mimeType:"text/plain",timestamp:Date.now(),topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},u=new Yd({streamId:o,mimeType:l.mimeType,topic:l.topic,timestamp:fa(l.timestamp),totalLength:fa(e==null?void 0:e.totalSize),attributes:l.attributes,contentHeader:{case:"textHeader",value:new X0({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Fd.UPDATE:Fd.CREATE})}}),d=e==null?void 0:e.destinationIdentities,h=new Mt({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,_e.RELIABLE);let m=0;const g=this,y=new WritableStream({write(C){return R(this,void 0,void 0,function*(){for(const k of t1(C,hc)){yield g.engine.waitForBufferStatusLow(_e.RELIABLE);const w=new Kd({content:k,streamId:o,chunkIndex:fa(m)}),O=new Mt({destinationIdentities:d,value:{case:"streamChunk",value:w}});yield g.engine.sendDataPacket(O,_e.RELIABLE),m+=1}})},close(){return R(this,void 0,void 0,function*(){const C=new Qd({streamId:o}),k=new Mt({destinationIdentities:d,value:{case:"streamTrailer",value:C}});yield g.engine.sendDataPacket(k,_e.RELIABLE)})},abort(C){console.log("Sink error:",C)}});let b=()=>R(this,void 0,void 0,function*(){yield T.close()});g.engine.once(ne.Closing,b);const T=new q1(y,l,()=>this.engine.off(ne.Closing,b));return T})}sendFile(e,n){return R(this,void 0,void 0,function*(){const r=crypto.randomUUID();return yield this._sendFile(r,e,n),{id:r}})}_sendFile(e,n,r){return R(this,void 0,void 0,function*(){var o,l;const u=n.size,d=new Yd({totalLength:fa(u),mimeType:(o=r==null?void 0:r.mimeType)!==null&&o!==void 0?o:n.type,streamId:e,topic:r==null?void 0:r.topic,encryptionType:r==null?void 0:r.encryptionType,timestamp:fa(Date.now()),contentHeader:{case:"byteHeader",value:new Z0({name:n.name})}}),h=r==null?void 0:r.destinationIdentities,m=new Mt({destinationIdentities:h,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(m,_e.RELIABLE);function g(C){return new Promise(k=>{const w=new FileReader;w.onload=()=>{k(new Uint8Array(w.result))},w.readAsArrayBuffer(C)})}const y=Math.ceil(u/hc);for(let C=0;CR(r,void 0,void 0,function*(){var y,b,T,C;if(Zf(u)>Ky){g(et.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((b=(y=this.engine.latestJoinResponse)===null||y===void 0?void 0:y.serverInfo)===null||b===void 0)&&b.version&&Sr((C=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||C===void 0?void 0:C.version,"1.8.0")<0){g(et.builtIn("UNSUPPORTED_SERVER"));return}const k=crypto.randomUUID();yield this.publishRpcRequest(o,k,l,u,d-2e3);const w=setTimeout(()=>{this.pendingAcks.delete(k),g(et.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(k),clearTimeout(O)},2e3);this.pendingAcks.set(k,{resolve:()=>{clearTimeout(w)},participantIdentity:o});const O=setTimeout(()=>{this.pendingResponses.delete(k),g(et.builtIn("RESPONSE_TIMEOUT"))},d);this.pendingResponses.set(k,{resolve:(V,Q)=>{clearTimeout(O),this.pendingAcks.has(k)&&(console.warn("RPC response received before ack",k),this.pendingAcks.delete(k),clearTimeout(w)),Q?g(Q):m(V??"")},participantIdentity:o})}))}()})}registerRpcMethod(e,n){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=n,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const n=this.pendingAcks.get(e);n?(n.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,n,r){const o=this.pendingResponses.get(e);o?(o.resolve(n,r),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcRequest",value:new z0({id:n,method:r,payload:o,responseTimeoutMs:l,version:1})}});yield this.engine.sendDataPacket(u,_e.RELIABLE)})}handleParticipantDisconnected(e){for(const[n,{participantIdentity:r}]of this.pendingAcks)r===e&&this.pendingAcks.delete(n);for(const[n,{participantIdentity:r,resolve:o}]of this.pendingResponses)r===e&&(o(null,et.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(n))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(n=>n.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return e.sid!==this.sid||!super.updateInfo(e)?!1:(e.tracks.forEach(n=>{var r,o;const l=this.trackPublications.get(n.sid);if(l){const u=l.isMuted||((o=(r=l.track)===null||r===void 0?void 0:r.isUpstreamPaused)!==null&&o!==void 0?o:!1);u!==n.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Me(l)),{mutedOnServer:u})),this.engine.client.sendMuteTrack(n.sid,u))}}),!0)}getPublicationForTrack(e){let n;return this.trackPublications.forEach(r=>{const o=r.track;o&&(e instanceof MediaStreamTrack?(ha(o)||Ai(o))&&o.mediaStreamTrack===e&&(n=r):e===o&&(n=r))}),n}waitForPendingPublicationOfSource(e){return R(this,void 0,void 0,function*(){const r=Date.now();for(;Date.now(){let[u]=l;return u.source===e});if(o)return o[1];yield Nt(20)}})}}class nb extends Pi{constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=rn.HIGH,this.handleEnded=l=>{this.setTrack(void 0),this.emit(W.Ended,l)},this.handleVisibilityChange=l=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(l),this.logContext),this.disabled=!l,this.emitTrackUpdate()},this.handleVideoDimensionsChange=l=>{this.log.debug("adaptivestream video dimensions ".concat(l.width,"x").concat(l.height),this.logContext),this.videoDimensions=l,this.emitTrackUpdate()},this.subscribed=r,this.updateInfo(n)}setSubscribed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const o=new Fc({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new G0({participantSid:"",trackSids:[this.trackSid]})]});this.emit(W.UpdateSubscription,o),this.emitSubscriptionUpdateIfChanged(n),this.emitPermissionUpdateIfChanged(r)}get subscriptionStatus(){return this.subscribed===!1?Pi.SubscriptionStatus.Unsubscribed:super.isSubscribed?Pi.SubscriptionStatus.Subscribed:Pi.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Pi.PermissionStatus.Allowed:Pi.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var n,r;this.isManualOperationAllowed()&&(((n=this.videoDimensions)===null||n===void 0?void 0:n.width)===e.width&&((r=this.videoDimensions)===null||r===void 0?void 0:r.height)===e.height||(Ad(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ad(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const n=this.subscriptionStatus,r=this.permissionStatus,o=this.track;o!==e&&(o&&(o.off(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),o.off(W.VisibilityChanged,this.handleVisibilityChange),o.off(W.Ended,this.handleEnded),o.detach(),o.stopMonitor(),this.emit(W.Unsubscribed,o)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(W.VisibilityChanged,this.handleVisibilityChange),e.on(W.Ended,this.handleEnded),this.emit(W.Subscribed,e)),this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n))}setAllowed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n)}setSubscriptionError(e){this.emit(W.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const n=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):n!==e.muted&&this.emit(e.muted?W.Muted:W.Unmuted)}emitSubscriptionUpdateIfChanged(e){const n=this.subscriptionStatus;e!==n&&this.emit(W.SubscriptionStatusChanged,n,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(W.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===j.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ad(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new J0({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=rn.HIGH,this.emit(W.UpdateSettings,e)}}class Ic extends tb{static fromParticipantInfo(e,n,r){return new Ic(e,n.sid,n.identity,n.name,n.metadata,n.attributes,r,n.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,n,r,o,l,u,d){let h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qs.STANDARD;super(n,r||"",o,l,u,d,h),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(W.UpdateSettings,n=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),Me(e))),this.signalClient.sendUpdateTrackSettings(n)}),e.on(W.UpdateSubscription,n=>{n.participantTracks.forEach(r=>{r.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(n)}),e.on(W.SubscriptionPermissionChanged,n=>{this.emit(F.TrackSubscriptionPermissionChanged,e,n)}),e.on(W.SubscriptionStatusChanged,n=>{this.emit(F.TrackSubscriptionStatusChanged,e,n)}),e.on(W.Subscribed,n=>{this.emit(F.TrackSubscribed,n,e)}),e.on(W.Unsubscribed,n=>{this.emit(F.TrackUnsubscribed,n,e)}),e.on(W.SubscriptionFailed,n=>{this.emit(F.TrackSubscriptionFailed,e.trackSid,n)})}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setVolume(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.Source.Microphone;this.volumeMap.set(n,e);const r=this.getTrackPublication(n);r&&r.track&&r.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:j.Source.Microphone;const n=this.getTrackPublication(e);return n&&n.track?n.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,n,r,o,l,u){let d=this.getTrackPublicationBySid(n);if(d||n.startsWith("TR")||this.trackPublications.forEach(g=>{!d&&e.kind===g.kind.toString()&&(d=g)}),!d){if(u===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:n})),this.emit(F.TrackSubscriptionFailed,n);return}u===void 0&&(u=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,n,r,o,l,u-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Me(d))),this.emit(F.TrackSubscriptionFailed,n);return}const h=e.kind==="video";let m;return h?m=new V1(e,n,o,l):m=new eb(e,n,o,this.audioContext,this.audioOutput),m.source=d.source,m.isMuted=d.isMuted,m.setMediaStream(r),m.start(),d.setTrack(m),this.volumeMap.has(d.source)&&mf(m)&&ti(m)&&m.setVolume(this.volumeMap.get(d.source)),d}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const n=new Map,r=new Map;return e.tracks.forEach(o=>{var l,u;let d=this.getTrackPublicationBySid(o.sid);if(d)d.updateInfo(o);else{const h=j.kindFromProto(o.type);if(!h)return;d=new nb(h,o,(l=this.signalClient.connectOptions)===null||l===void 0?void 0:l.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(u=this.loggerOptions)===null||u===void 0?void 0:u.loggerName}),d.updateInfo(o),r.set(o.sid,d);const m=Array.from(this.trackPublications.values()).find(g=>g.source===(d==null?void 0:d.source));m&&d.source!==j.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(d.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Me(m),newTrack:Me(d)})),this.addTrackPublication(d)}n.set(o.sid,d)}),this.trackPublications.forEach(o=>{n.has(o.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Me(o))),this.unpublishTrack(o.trackSid,!0))}),r.forEach(o=>{this.emit(F.TrackPublished,o)}),!0}unpublishTrack(e,n){const r=this.trackPublications.get(e);if(!r)return;const{track:o}=r;switch(o&&(o.stop(),r.setTrack(void 0)),this.trackPublications.delete(e),r.kind){case j.Kind.Audio:this.audioTrackPublications.delete(e);break;case j.Kind.Video:this.videoTrackPublications.delete(e);break}n&&this.emit(F.TrackUnpublished,r)}setAudioOutput(e){return R(this,void 0,void 0,function*(){this.audioOutput=e;const n=[];this.audioTrackPublications.forEach(r=>{var o;ti(r.track)&&mf(r.track)&&n.push(r.track.setSinkId((o=e.deviceId)!==null&&o!==void 0?o:"default"))}),yield Promise.all(n)})}emit(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;oR(this,void 0,void 0,function*(){var m;if(!VE())throw An()?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 g=yield this.disconnectLock.lock();if(this.state===Te.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),g(),Promise.resolve();if(this.connectFuture)return g(),this.connectFuture.promise;this.setAndEmitConnectionState(Te.Connecting),((m=this.regionUrlProvider)===null||m===void 0?void 0:m.getServerUrl().toString())!==u&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),hf(new URL(u))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bf(u,d):this.regionUrlProvider.updateToken(d),this.regionUrlProvider.fetchRegionSettings().then(T=>{var C;(C=this.regionUrlProvider)===null||C===void 0||C.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const y=(T,C,k)=>R(this,void 0,void 0,function*(){var w,O;this.abortController&&this.abortController.abort();const V=new AbortController;this.abortController=V,g==null||g();try{yield this.attemptConnection(k??u,d,h,V),this.abortController=void 0,T()}catch(Q){if(this.regionUrlProvider&&Q instanceof Ie&&Q.reason!==Re.Cancelled&&Q.reason!==Re.NotAllowed){let U=null;try{U=yield this.regionUrlProvider.getNextBestRegionUrl((w=this.abortController)===null||w===void 0?void 0:w.signal)}catch(_){if(_ instanceof Ie&&(_.status===401||_.reason===Re.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),C(_);return}}U&&!(!((O=this.abortController)===null||O===void 0)&&O.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(Q.message,". Retrying with another region: ").concat(U),this.logContext),this.recreateEngine(),yield y(T,C,U)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Iv(Q)),C(Q))}else{let U=pn.UNKNOWN_REASON;Q instanceof Ie&&(U=Iv(Q)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,U),C(Q)}}}),b=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Vy((T,C)=>{y(T,C,b)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(u,d,h,m,g,y)=>R(this,void 0,void 0,function*(){var b,T,C;const k=yield h.join(u,d,{autoSubscribe:m.autoSubscribe,adaptiveStream:typeof g.adaptiveStream=="object"?!0:g.adaptiveStream,maxRetries:m.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:m.websocketTimeout},y.signal);let w=k.serverInfo;if(w||(w={version:k.serverVersion,region:k.serverRegion}),this.serverInfo=w,this.log.debug("connected to Livekit Server ".concat(Object.entries(w).map(O=>{let[V,Q]=O;return"".concat(V,": ").concat(Q)}).join(", ")),{room:(b=k.room)===null||b===void 0?void 0:b.name,roomSid:(T=k.room)===null||T===void 0?void 0:T.sid,identity:(C=k.participant)===null||C===void 0?void 0:C.identity}),!w.version)throw new _E("unknown server version");return w.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),g.dynacast=!1),k}),this.applyJoinResponse=u=>{const d=u.participant;if(this.localParticipant.sid=d.sid,this.localParticipant.identity=d.identity,this.localParticipant.setEnabledPublishCodecs(u.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(u.sifTrailer)}catch(h){this.log.error(h instanceof Error?h.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:h}))}this.handleParticipantUpdates([d,...u.otherParticipants]),u.room&&this.handleRoomUpdate(u.room)},this.attemptConnection=(u,d,h,m)=>R(this,void 0,void 0,function*(){var g,y;this.state===Te.Reconnecting||this.isResuming||!((g=this.engine)===null||g===void 0)&&g.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((y=this.regionUrlProvider)===null||y===void 0)&&y.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Xf),h),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const b=yield this.connectSignal(u,d,this.engine,this.connOptions,this.options,m);this.applyJoinResponse(b),this.setupLocalParticipantEvents(),this.emit(B.SignalConnected)}catch(b){yield this.engine.close(),this.recreateEngine();const T=new Ie("could not establish signal connection",Re.ServerUnreachable);throw b instanceof Error&&(T.message="".concat(T.message,": ").concat(b.message)),b instanceof Ie&&(T.reason=b.reason,T.status=b.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:b})),T}if(m.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Ie("Connection attempt aborted",Re.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,m)}catch(b){throw yield this.engine.close(),this.recreateEngine(),b}xt()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xt()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Te.Connected),this.emit(B.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var u=arguments.length,d=new Array(u),h=0;h0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var y,b,T,C;const k=yield m.disconnectLock.lock();try{if(m.state===Te.Disconnected){m.log.debug("already disconnected",m.logContext);return}m.log.info("disconnect from room",Object.assign({},m.logContext)),(m.state===Te.Connecting||m.state===Te.Reconnecting||m.isResuming)&&(m.log.warn("abort connection attempt",m.logContext),(y=m.abortController)===null||y===void 0||y.abort(),(T=(b=m.connectFuture)===null||b===void 0?void 0:b.reject)===null||T===void 0||T.call(b,new Ie("Client initiated disconnect",Re.Cancelled)),m.connectFuture=void 0),!((C=m.engine)===null||C===void 0)&&C.client.isDisconnected||(yield m.engine.client.sendLeave()),m.engine&&(yield m.engine.close()),m.handleDisconnect(g,pn.CLIENT_INITIATED),m.engine=void 0}finally{k()}}()})},this.onPageLeave=()=>R(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>R(this,void 0,void 0,function*(){const u=[],d=Dn();if(d&&d.os==="iOS"){const h="livekit-dummy-audio-el";let m=document.getElementById(h);if(!m){m=document.createElement("audio"),m.id=h,m.autoplay=!0,m.hidden=!0;const g=Dd();g.enabled=!0;const y=new MediaStream([g]);m.srcObject=y,document.addEventListener("visibilitychange",()=>{m&&(m.srcObject=document.hidden?null:y,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(m),this.once(B.Disconnected,()=>{m==null||m.remove(),m=null})}u.push(m)}this.remoteParticipants.forEach(h=>{h.audioTrackPublications.forEach(m=>{m.track&&m.track.attachedElements.forEach(g=>{u.push(g)})})});try{yield Promise.all([this.acquireAudioContext(),...u.map(h=>(h.muted=!1,h.play()))]),this.handleAudioPlaybackStarted()}catch(h){throw this.handleAudioPlaybackFailed(h),h}}),this.startVideo=()=>R(this,void 0,void 0,function*(){const u=[];for(const d of this.remoteParticipants.values())d.videoTrackPublications.forEach(h=>{var m;(m=h.track)===null||m===void 0||m.attachedElements.forEach(g=>{u.includes(g)||u.push(g)})});yield Promise.all(u.map(d=>d.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(d=>{d.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const u of this.remoteParticipants.values())this.handleParticipantDisconnected(u.identity,u);this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)},this.handleSignalRestarted=u=>R(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(u.serverRegion),Object.assign(Object.assign({},this.logContext),{region:u.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(u);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(d){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:d}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:u.serverRegion}))}catch{return}this.setAndEmitConnectionState(Te.Connected),this.emit(B.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=u=>{u.forEach(d=>{var h;if(d.identity===this.localParticipant.identity){this.localParticipant.updateInfo(d);return}d.identity===""&&(d.identity=(h=this.sidToIdentity.get(d.sid))!==null&&h!==void 0?h:"");let m=this.remoteParticipants.get(d.identity);d.state===Hd.DISCONNECTED?this.handleParticipantDisconnected(d.identity,m):m=this.getOrCreateParticipant(d.identity,d)})},this.handleActiveSpeakersUpdate=u=>{const d=[],h={};u.forEach(m=>{if(h[m.sid]=!0,m.sid===this.localParticipant.sid)this.localParticipant.audioLevel=m.level,this.localParticipant.setIsSpeaking(!0),d.push(this.localParticipant);else{const g=this.getRemoteParticipantBySid(m.sid);g&&(g.audioLevel=m.level,g.setIsSpeaking(!0),d.push(g))}}),h[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(m=>{h[m.sid]||(m.audioLevel=0,m.setIsSpeaking(!1))}),this.activeSpeakers=d,this.emitWhenConnected(B.ActiveSpeakersChanged,d)},this.handleSpeakersChanged=u=>{const d=new Map;this.activeSpeakers.forEach(m=>{const g=this.remoteParticipants.get(m.identity);g&&g.sid!==m.sid||d.set(m.sid,m)}),u.forEach(m=>{let g=this.getRemoteParticipantBySid(m.sid);m.sid===this.localParticipant.sid&&(g=this.localParticipant),g&&(g.audioLevel=m.level,g.setIsSpeaking(m.active),m.active?d.set(m.sid,g):d.delete(m.sid))});const h=Array.from(d.values());h.sort((m,g)=>g.audioLevel-m.audioLevel),this.activeSpeakers=h,this.emitWhenConnected(B.ActiveSpeakersChanged,h)},this.handleStreamStateUpdate=u=>{u.streamStates.forEach(d=>{const h=this.getRemoteParticipantBySid(d.participantSid);if(!h)return;const m=h.getTrackPublicationBySid(d.trackSid);if(!m||!m.track)return;const g=j.streamStateFromProto(d.state);g!==m.track.streamState&&(m.track.streamState=g,h.emit(F.TrackStreamStateChanged,m,m.track.streamState),this.emitWhenConnected(B.TrackStreamStateChanged,m,m.track.streamState,h))})},this.handleSubscriptionPermissionUpdate=u=>{const d=this.getRemoteParticipantBySid(u.participantSid);if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setAllowed(u.allowed)},this.handleSubscriptionError=u=>{const d=Array.from(this.remoteParticipants.values()).find(m=>m.trackPublications.has(u.trackSid));if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setSubscriptionError(u.err)},this.handleDataPacket=u=>{const d=this.remoteParticipants.get(u.participantIdentity);if(u.value.case==="user")this.handleUserPacket(d,u.value.value,u.kind);else if(u.value.case==="transcription")this.handleTranscription(d,u.value.value);else if(u.value.case==="sipDtmf")this.handleSipDtmf(d,u.value.value);else if(u.value.case==="chatMessage")this.handleChatMessage(d,u.value.value);else if(u.value.case==="metrics")this.handleMetrics(u.value.value,d);else if(u.value.case==="streamHeader")this.handleStreamHeader(u.value.value,u.participantIdentity);else if(u.value.case==="streamChunk")this.handleStreamChunk(u.value.value);else if(u.value.case==="streamTrailer")this.handleStreamTrailer(u.value.value);else if(u.value.case==="rpcRequest"){const h=u.value.value;this.handleIncomingRpcRequest(u.participantIdentity,h.id,h.method,h.payload,h.responseTimeoutMs,h.version)}},this.handleUserPacket=(u,d,h)=>{this.emit(B.DataReceived,d.payload,u,h,d.topic),u==null||u.emit(F.DataReceived,d.payload,h)},this.handleSipDtmf=(u,d)=>{this.emit(B.SipDTMFReceived,d,u),u==null||u.emit(F.SipDTMFReceived,d)},this.bufferedSegments=new Map,this.handleTranscription=(u,d)=>{const h=d.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(d.transcribedParticipantIdentity),m=h==null?void 0:h.trackPublications.get(d.trackId),g=JE(d,this.transcriptionReceivedTimes);m==null||m.emit(W.TranscriptionReceived,g),h==null||h.emit(F.TranscriptionReceived,g,m),this.emit(B.TranscriptionReceived,g,h,m)},this.handleChatMessage=(u,d)=>{const h=WE(d);this.emit(B.ChatMessage,h,u)},this.handleMetrics=(u,d)=>{this.emit(B.MetricsReceived,u,d)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(B.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=u=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:u})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(B.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(B.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(B.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>R(this,void 0,void 0,function*(){var u,d;const h=gt.getInstance().previousDevices,m=yield gt.getInstance().getDevices(void 0,!1),g=Dn();if((g==null?void 0:g.name)==="Chrome"&&g.os!=="iOS")for(let b of m){const T=h.find(C=>C.deviceId===b.deviceId);T&&T.label!==""&&T.kind===b.kind&&T.label!==b.label&&this.getActiveDevice(b.kind)==="default"&&this.emit(B.ActiveDeviceChanged,b.kind,b.deviceId)}const y=["audiooutput","audioinput","videoinput"];for(let b of y){const T=m.filter(k=>k.kind===b),C=this.getActiveDevice(b);if(C===((u=h.filter(k=>k.kind===b)[0])===null||u===void 0?void 0:u.deviceId)&&T.length>0&&((d=T[0])===null||d===void 0?void 0:d.deviceId)!==C){yield this.switchActiveDevice(b,T[0].deviceId);continue}b==="audioinput"&&!Bi()||b==="videoinput"||T.length>0&&!T.find(k=>k.deviceId===this.getActiveDevice(b))&&(yield this.switchActiveDevice(b,T[0].deviceId))}this.emit(B.MediaDevicesChanged)}),this.handleRoomUpdate=u=>{const d=this.roomInfo;this.roomInfo=u,d&&d.metadata!==u.metadata&&this.emitWhenConnected(B.RoomMetadataChanged,u.metadata),(d==null?void 0:d.activeRecording)!==u.activeRecording&&this.emitWhenConnected(B.RecordingStatusChanged,u.activeRecording)},this.handleConnectionQualityUpdate=u=>{u.updates.forEach(d=>{if(d.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(d.quality);return}const h=this.getRemoteParticipantBySid(d.participantSid);h&&h.setConnectionQuality(d.quality)})},this.onLocalParticipantMetadataChanged=u=>{this.emit(B.ParticipantMetadataChanged,u,this.localParticipant)},this.onLocalParticipantNameChanged=u=>{this.emit(B.ParticipantNameChanged,u,this.localParticipant)},this.onLocalAttributesChanged=u=>{this.emit(B.ParticipantAttributesChanged,u,this.localParticipant)},this.onLocalTrackMuted=u=>{this.emit(B.TrackMuted,u,this.localParticipant)},this.onLocalTrackUnmuted=u=>{this.emit(B.TrackUnmuted,u,this.localParticipant)},this.onTrackProcessorUpdate=u=>{var d;(d=u==null?void 0:u.onPublish)===null||d===void 0||d.call(u,this)},this.onLocalTrackPublished=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;(d=u.track)===null||d===void 0||d.on(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.on(W.Restarted,this.onLocalTrackRestarted),(y=(g=(m=u.track)===null||m===void 0?void 0:m.getProcessor())===null||g===void 0?void 0:g.onPublish)===null||y===void 0||y.call(g,this),this.emit(B.LocalTrackPublished,u,this.localParticipant),ha(u.track)&&(yield u.track.checkForSilence())&&this.emit(B.LocalAudioSilenceDetected,u);const T=yield(b=u.track)===null||b===void 0?void 0:b.getDeviceId(!1),C=jv(u.source);C&&T&&T!==this.localParticipant.activeDeviceMap.get(C)&&(this.localParticipant.activeDeviceMap.set(C,T),this.emit(B.ActiveDeviceChanged,C,T))}),this.onLocalTrackUnpublished=u=>{var d,h;(d=u.track)===null||d===void 0||d.off(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.off(W.Restarted,this.onLocalTrackRestarted),this.emit(B.LocalTrackUnpublished,u,this.localParticipant)},this.onLocalTrackRestarted=u=>R(this,void 0,void 0,function*(){const d=yield u.getDeviceId(!1),h=jv(u.source);h&&d&&d!==this.localParticipant.activeDeviceMap.get(h)&&(this.log.debug("local track restarted, setting ".concat(h," ").concat(d," active"),this.logContext),this.localParticipant.activeDeviceMap.set(h,d),this.emit(B.ActiveDeviceChanged,h,d))}),this.onLocalConnectionQualityChanged=u=>{this.emit(B.ConnectionQualityChanged,u,this.localParticipant)},this.onMediaDevicesError=u=>{this.emit(B.MediaDevicesError,u)},this.onLocalParticipantPermissionsChanged=u=>{this.emit(B.ParticipantPermissionsChanged,u,this.localParticipant)},this.onLocalChatMessageSent=u=>{this.emit(B.ChatMessage,u,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},b1),e),this.log=ei((r=this.options.loggerName)!==null&&r!==void 0?r:gn.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Fy),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Yy),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},y1),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new Ht,this.localParticipant=new Y1("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Ii(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Ii(this.options.audioCaptureDefaults.deviceId)),!((o=this.options.audioOutput)===null||o===void 0)&&o.deviceId&&this.switchActiveDevice("audiooutput",Ii(this.options.audioOutput.deviceId)).catch(u=>this.log.warn("Could not set audio output: ".concat(u.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xt()){const u=new AbortController;(l=navigator.mediaDevices)===null||l===void 0||l.addEventListener("devicechange",this.handleDeviceChange,{signal:u.signal}),ni.cleanupRegistry&&ni.cleanupRegistry.register(this,()=>{u.abort()})}}registerTextStreamHandler(e,n){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,n)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,n){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,n)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,n){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,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,n,r,o,l,u){return R(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,n),u!==1){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_VERSION"));return}const d=this.rpcHandlers.get(r);if(!d){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_METHOD"));return}let h=null,m=null;try{const g=yield d({requestId:n,callerIdentity:e,payload:o,responseTimeout:l});Zf(g)>Ky?(h=et.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(r))):m=g}catch(g){g instanceof et?h=g:(console.warn("Uncaught error returned by RPC handler for ".concat(r,". Returning APPLICATION_ERROR instead."),g),h=et.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,n,m,h)})}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new o1(this.options.e2ee),this.e2eeManager.on(Ui.ParticipantEncryptionStatusChanged,(n,r)=>{e1(r)&&(this.isE2EEEnabled=n),this.emit(B.ParticipantEncryptionStatusChanged,n,r)}),this.e2eeManager.on(Ui.EncryptionError,n=>this.emit(B.EncryptionError,n)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&n!==void 0?n:!1}getSid(){return R(this,void 0,void 0,function*(){return this.state===Te.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,n)=>{const r=o=>{o.sid!==""&&(this.engine.off(ne.RoomUpdate,r),e(o.sid))};this.engine.on(ne.RoomUpdate,r),this.once(B.Disconnected,()=>{this.engine.off(ne.RoomUpdate,r),n("Room disconnected before room server id was available")})})})}get name(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&n!==void 0?n:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&n!==void 0?n:0}get numPublishers(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&n!==void 0?n:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new N1(this.options),this.engine.on(ne.ParticipantUpdate,this.handleParticipantUpdates).on(ne.RoomUpdate,this.handleRoomUpdate).on(ne.SpeakersChanged,this.handleSpeakersChanged).on(ne.StreamStateChanged,this.handleStreamStateUpdate).on(ne.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(ne.SubscriptionError,this.handleSubscriptionError).on(ne.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(ne.MediaTrackAdded,(e,n,r)=>{this.onTrackAdded(e,n,r)}).on(ne.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(ne.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(ne.DataPacketReceived,this.handleDataPacket).on(ne.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Te.SignalReconnecting)&&this.emit(B.SignalReconnecting)}).on(ne.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Te.Connected)&&this.emit(B.Reconnected)}).on(ne.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Te.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(ne.Restarting,this.handleRestarting).on(ne.SignalRestarted,this.handleSignalRestarted).on(ne.Offline,()=>{this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)}).on(ne.DCBufferStatusChanged,(e,n)=>{this.emit(B.DCBufferStatusChanged,e,n)}).on(ne.LocalTrackSubscribed,e=>{const n=this.localParticipant.getTrackPublications().find(r=>{let{trackSid:o}=r;return o===e});if(!n){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(F.LocalTrackSubscribed,n),this.emitWhenConnected(B.LocalTrackSubscribed,n,this.localParticipant)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gt.getInstance().getDevices(e,n)}prepareConnection(e,n){return R(this,void 0,void 0,function*(){if(this.state===Te.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(hf(new URL(e))&&n){this.regionUrlProvider=new bf(e,n);const r=yield this.regionUrlProvider.getNextBestRegionUrl();r&&this.state===Te.Disconnected&&(this.regionUrl=r,yield fetch(Lv(r),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(r),this.logContext))}else yield fetch(Lv(e),{method:"HEAD"})}catch(r){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:r}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,n){return R(this,void 0,void 0,function*(){let r=()=>{},o;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":o=new _n({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":o=new _n({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":o=new _n({scenario:{case:"serverLeave",value:!0}});break;case"migration":o=new _n({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":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({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":o=new _n({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),r=()=>R(this,void 0,void 0,function*(){const l=this.engine.client.onLeave;l&&l(new Yc({reason:pn.CLIENT_INITIATED,action:ur.RECONNECT}))});break;case"subscriber-bandwidth":if(n===void 0||typeof n!="number")throw new Error("subscriber-bandwidth requires a number as argument");o=new _n({scenario:{case:"subscriberBandwidth",value:fa(n)}});break;case"leave-full-reconnect":o=new _n({scenario:{case:"leaveRequestFullReconnect",value:!0}})}o&&(yield this.engine.client.sendSimulateScenario(o),yield r())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g,y,b,T,C;let k=!0,w=!1;const O=u?{exact:o}:o;if(r==="audioinput"){w=l.localParticipant.audioTrackPublications.size===0;const V=(d=l.getActiveDevice(r))!==null&&d!==void 0?d:l.options.audioCaptureDefaults.deviceId;l.options.audioCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.audioTrackPublications.values()).filter(U=>U.source===j.Source.Microphone);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.audioTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.audioCaptureDefaults.deviceId=V,U}}else if(r==="videoinput"){w=l.localParticipant.videoTrackPublications.size===0;const V=(h=l.getActiveDevice(r))!==null&&h!==void 0?h:l.options.videoCaptureDefaults.deviceId;l.options.videoCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.videoTrackPublications.values()).filter(U=>U.source===j.Source.Camera);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.videoTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.videoCaptureDefaults.deviceId=V,U}}else if(r==="audiooutput"){if(!ff()&&!l.options.webAudioMix||l.options.webAudioMix&&l.audioContext&&!("setSinkId"in l.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");l.options.webAudioMix&&(o=(m=yield gt.getInstance().normalizeDeviceId("audiooutput",o))!==null&&m!==void 0?m:""),(g=(C=l.options).audioOutput)!==null&&g!==void 0||(C.audioOutput={});const V=(y=l.getActiveDevice(r))!==null&&y!==void 0?y:l.options.audioOutput.deviceId;l.options.audioOutput.deviceId=o;try{l.options.webAudioMix&&((b=l.audioContext)===null||b===void 0||b.setSinkId(o)),yield Promise.all(Array.from(l.remoteParticipants.values()).map(Q=>Q.setAudioOutput({deviceId:o})))}catch(Q){throw l.options.audioOutput.deviceId=V,Q}}return(w||r==="audiooutput")&&(l.localParticipant.activeDeviceMap.set(r,r==="audiooutput"&&((T=l.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||o),l.emit(B.ActiveDeviceChanged,r,o)),k}()})}setupLocalParticipantEvents(){this.localParticipant.on(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(F.AttributesChanged,this.onLocalAttributesChanged).on(F.TrackMuted,this.onLocalTrackMuted).on(F.TrackUnmuted,this.onLocalTrackUnmuted).on(F.LocalTrackPublished,this.onLocalTrackPublished).on(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(F.MediaDevicesError,this.onMediaDevicesError).on(F.AudioStreamAcquired,this.startAudio).on(F.ChatMessage,this.onLocalChatMessageSent).on(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,n,r){if(this.state===Te.Connecting||this.state===Te.Reconnecting){const g=()=>{this.onTrackAdded(e,n,r),y()},y=()=>{this.off(B.Reconnected,g),this.off(B.Connected,g),this.off(B.Disconnected,y)};this.once(B.Reconnected,g),this.once(B.Connected,g),this.once(B.Disconnected,y);return}if(this.state===Te.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}const o=BE(n.id),l=o[0];let u=o[1],d=e.id;if(u&&u.startsWith("TR")&&(d=u),l===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const h=Array.from(this.remoteParticipants.values()).find(g=>g.sid===l);if(!h){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(l),this.logContext);return}let m;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?m=this.options.adaptiveStream:m={}),h.addSubscribedMediaTrack(e,d,n,r,m)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1?arguments[1]:void 0;var r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Te.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(o=>{o.trackPublications.forEach(l=>{o.unpublishTrack(l.trackSid)})}),this.localParticipant.trackPublications.forEach(o=>{var l,u,d;o.track&&this.localParticipant.unpublishTrack(o.track,e),e?((l=o.track)===null||l===void 0||l.detach(),(u=o.track)===null||u===void 0||u.stop()):(d=o.track)===null||d===void 0||d.stopMonitor()}),this.localParticipant.off(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(F.AttributesChanged,this.onLocalAttributesChanged).off(F.TrackMuted,this.onLocalTrackMuted).off(F.TrackUnmuted,this.onLocalTrackUnmuted).off(F.LocalTrackPublished,this.onLocalTrackPublished).off(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(F.MediaDevicesError,this.onMediaDevicesError).off(F.AudioStreamAcquired,this.startAudio).off(F.ChatMessage,this.onLocalChatMessageSent).off(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),xt()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=navigator.mediaDevices)===null||r===void 0||r.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Te.Disconnected),this.emit(B.Disconnected,n)}}}handleParticipantDisconnected(e,n){var r;this.remoteParticipants.delete(e),n&&(n.trackPublications.forEach(o=>{n.unpublishTrack(o.trackSid,!0)}),this.emit(B.ParticipantDisconnected,n),(r=this.localParticipant)===null||r===void 0||r.handleParticipantDisconnected(n.identity))}handleStreamHeader(e,n){return R(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const o=this.byteStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Oc(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.byteStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new j1(u,d,Oc(e.totalLength)),{identity:n})}else if(e.contentHeader.case==="textHeader"){const o=this.textStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.textStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new B1(u,d,Oc(e.totalLength)),{identity:n})}})}handleStreamChunk(e){const n=this.byteStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e);const r=this.textStreamControllers.get(e.streamId);r&&e.content.length>0&&r.controller.enqueue(e)}handleStreamTrailer(e){const n=this.textStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.textStreamControllers.delete(e.streamId));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return R(this,void 0,void 0,function*(){var e,n;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Gf())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(o=>o.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Nt(200)])}catch(o){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:o}))}const r=((n=this.audioContext)===null||n===void 0?void 0:n.state)==="running";r!==this.canPlaybackAudio&&(this.audioEnabled=r,this.emit(B.AudioPlaybackStatusChanged,r))})}createParticipant(e,n){var r;let o;return n?o=Ic.fromParticipantInfo(this.engine.client,n,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):o=new Ic(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&o.setAudioContext(this.audioContext),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&o.setAudioOutput(this.options.audioOutput).catch(l=>this.log.warn("Could not set audio output: ".concat(l.message),this.logContext)),o}getOrCreateParticipant(e,n){if(this.remoteParticipants.has(e)){const o=this.remoteParticipants.get(e);return n&&o.updateInfo(n)&&this.sidToIdentity.set(n.sid,n.identity),o}const r=this.createParticipant(e,n);return this.remoteParticipants.set(e,r),this.sidToIdentity.set(n.sid,n.identity),this.emitWhenConnected(B.ParticipantConnected,r),r.on(F.TrackPublished,o=>{this.emitWhenConnected(B.TrackPublished,o,r)}).on(F.TrackSubscribed,(o,l)=>{o.kind===j.Kind.Audio?(o.on(W.AudioPlaybackStarted,this.handleAudioPlaybackStarted),o.on(W.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):o.kind===j.Kind.Video&&(o.on(W.VideoPlaybackFailed,this.handleVideoPlaybackFailed),o.on(W.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(B.TrackSubscribed,o,l,r)}).on(F.TrackUnpublished,o=>{this.emit(B.TrackUnpublished,o,r)}).on(F.TrackUnsubscribed,(o,l)=>{this.emit(B.TrackUnsubscribed,o,l,r)}).on(F.TrackMuted,o=>{this.emitWhenConnected(B.TrackMuted,o,r)}).on(F.TrackUnmuted,o=>{this.emitWhenConnected(B.TrackUnmuted,o,r)}).on(F.ParticipantMetadataChanged,o=>{this.emitWhenConnected(B.ParticipantMetadataChanged,o,r)}).on(F.ParticipantNameChanged,o=>{this.emitWhenConnected(B.ParticipantNameChanged,o,r)}).on(F.AttributesChanged,o=>{this.emitWhenConnected(B.ParticipantAttributesChanged,o,r)}).on(F.ConnectionQualityChanged,o=>{this.emitWhenConnected(B.ConnectionQualityChanged,o,r)}).on(F.ParticipantPermissionsChanged,o=>{this.emitWhenConnected(B.ParticipantPermissionsChanged,o,r)}).on(F.TrackSubscriptionStatusChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionStatusChanged,o,l,r)}).on(F.TrackSubscriptionFailed,(o,l)=>{this.emit(B.TrackSubscriptionFailed,o,r,l)}).on(F.TrackSubscriptionPermissionChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionPermissionChanged,o,l,r)}),n&&r.updateInfo(n),r}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((r,o)=>(r.push(...o.getTrackPublications()),r),[]),n=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,n)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const n of e.videoTrackPublications.values())n.isSubscribed&&$E(n)&&n.emitTrackUpdate()}getRemoteParticipantBySid(e){const n=this.sidToIdentity.get(e);if(n)return this.remoteParticipants.get(n)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Tt.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,pn.STATE_MISMATCH))):e=0},K1)}clearConnectionReconcile(){this.connectionReconcileInterval&&Tt.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(B.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[n,r]=e;this.emit(n,...r)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;othis.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}if(o.audio){const u=new Tf(j.Kind.Audio,new cr({source:ot.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:hn.AUDIO}),new Uc(o.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Dd(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}for(let u=0;u1?n-1:0),o=1;ou!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:l}))}return super.emit(e,...r)}}ni.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(a=>{a()});function ib(a){return a.map(e=>{if(e)return Array.isArray(e)?ib(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var fn;(function(a){a[a.IDLE=0]="IDLE",a[a.RUNNING=1]="RUNNING",a[a.SKIPPED=2]="SKIPPED",a[a.SUCCESS=3]="SUCCESS",a[a.FAILED=4]="FAILED"})(fn||(fn={}));class Hi extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=fn.IDLE,this.logs=[],this.options={},this.url=e,this.token=n,this.name=this.constructor.name,this.room=new ni(r.roomOptions),this.connectOptions=r.connectOptions,this.options=r}run(e){return R(this,void 0,void 0,function*(){if(this.status!==fn.IDLE)throw Error("check is running already");this.setStatus(fn.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(n=>setTimeout(n,500)),this.status!==fn.SKIPPED&&this.setStatus(this.isSuccess()?fn.SUCCESS:fn.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return R(this,void 0,void 0,function*(){return this.room.state===Te.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return R(this,void 0,void 0,function*(){this.room&&this.room.state!==Te.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(fn.SKIPPED)}switchProtocol(e){return R(this,void 0,void 0,function*(){let n=!1,r=!1;if(this.room.on(B.Reconnecting,()=>{n=!0}),this.room.once(B.Reconnected,()=>{r=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(l=>setTimeout(l,1e3)),!n)return;const o=Date.now()+1e4;for(;Date.now()(l.duration-u.duration)*.5+(l.rtt-u.rtt)*.5);const o=n[0];this.bestStats=o,this.appendMessage("best Cloud region: ".concat(o.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return R(this,void 0,void 0,function*(){var n,r;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const o=(n=this.room.serverInfo)===null||n===void 0?void 0:n.region;if(!o)throw new Error("Region not found");const l=yield this.room.localParticipant.streamText({topic:"test"}),u=1e3,h=1e6/u,m="A".repeat(u),g=Date.now();for(let C=0;C{C.type==="candidate-pair"&&C.nominated&&(T.rtt=C.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const jd=1e4;class X1 extends Hi{get description(){return"Connection via UDP vs TCP"}perform(){return R(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),n=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-n.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-n.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=n):this.appendMessage("best connection quality via udp");const r=this.bestStats;this.appendMessage("upstream bitrate: ".concat((r.bitrateTotal/r.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((r.rttTotal/r.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((r.jitterTotal/r.count*1e3).toFixed(2)," ms")),r.packetsLost>0&&this.appendWarning("packets lost: ".concat((r.packetsLost/r.packetsSent*100).toFixed(2),"%")),r.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((r.qualityLimitationDurations.bandwidth/(jd/1e3)*100).toFixed(2),"%")),r.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((r.qualityLimitationDurations.cpu/(jd/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return R(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const n=document.createElement("canvas");n.width=1280,n.height=720;const r=n.getContext("2d");if(!r)throw new Error("Could not get canvas context");let o=0;const l=()=>{o=(o+1)%360,r.fillStyle="hsl(".concat(o,", 100%, 50%)"),r.fillRect(0,0,n.width,n.height),requestAnimationFrame(l)};l();const d=n.captureStream(30).getVideoTracks()[0],m=(yield this.room.localParticipant.publishTrack(d,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,g={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},y=setInterval(()=>R(this,void 0,void 0,function*(){const b=yield m.getRTCStatsReport();b==null||b.forEach(T=>{T.type==="outbound-rtp"?(g.packetsSent=T.packetsSent,g.qualityLimitationDurations=T.qualityLimitationDurations,g.bitrateTotal+=T.targetBitrate,g.count++):T.type==="remote-inbound-rtp"&&(g.packetsLost=T.packetsLost,g.rttTotal+=T.roundTripTime,g.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(b=>setTimeout(b,jd)),clearInterval(y),d.stop(),n.remove(),yield this.disconnect(),g})}}function ab(a){return R(this,void 0,void 0,function*(){var e,n;a??(a={}),(e=a.audio)!==null&&e!==void 0||(a.audio={deviceId:"default"}),(n=a.video)!==null&&n!==void 0||(a.video={deviceId:"default"});const{audioProcessor:r,videoProcessor:o}=Ff(a),l=Hy(a,Fy,Yy),u=Qc(l),d=navigator.mediaDevices.getUserMedia(u);a.audio&&(gt.userMediaPromiseMap.set("audioinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("audioinput"))),a.video&&(gt.userMediaPromiseMap.set("videoinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("videoinput")));const h=yield d;return Promise.all(h.getTracks().map(m=>R(this,void 0,void 0,function*(){const g=m.kind==="audio";g?l.audio:l.video;let y;const b=g?u.audio:u.video;typeof b!="boolean"&&(y=b);const T=m.getSettings().deviceId;y!=null&&y.deviceId&&Ii(y.deviceId)!==T?y.deviceId=T:y||(y={deviceId:T});const C=Xy(m,y);return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone),C.mediaStream=h,ti(C)&&r?yield C.setProcessor(r):Er(C)&&o&&(yield C.setProcessor(o)),C})))})}function Z1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:!1,video:a}))[0]})}function J1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:a,video:!1}))[0]})}class W1 extends Hi{get description(){return"Can publish audio"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield J1();if(yield Gy(r,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),n.localParticipant.publishTrack(r),yield new Promise(d=>setTimeout(d,3e3));const l=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!l)throw new Error("Could not get RTCStats");let u=0;if(l.forEach(d=>{d.type==="outbound-rtp"&&(d.kind==="audio"||!d.kind&&d.mediaType==="audio")&&(u=d.packetsSent)}),u===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(u," audio packets"))})}}class $1 extends Hi{get description(){return"Can publish video"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield Z1();yield this.checkForVideo(r.mediaStreamTrack),n.localParticipant.publishTrack(r),yield new Promise(u=>setTimeout(u,5e3));const o=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!o)throw new Error("Could not get RTCStats");let l=0;if(o.forEach(u=>{u.type==="outbound-rtp"&&(u.kind==="video"||!u.kind&&u.mediaType==="video")&&(l+=u.packetsSent)}),l===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(l," video packets"))})}checkForVideo(e){return R(this,void 0,void 0,function*(){const n=new MediaStream;n.addTrack(e.clone());const r=document.createElement("video");r.srcObject=n,r.muted=!0,yield new Promise(o=>{r.onplay=()=>{setTimeout(()=>{var l,u,d,h;const m=document.createElement("canvas"),g=e.getSettings(),y=(u=(l=g.width)!==null&&l!==void 0?l:r.videoWidth)!==null&&u!==void 0?u:1280,b=(h=(d=g.height)!==null&&d!==void 0?d:r.videoHeight)!==null&&h!==void 0?h:720;m.width=y,m.height=b;const T=m.getContext("2d");T.drawImage(r,0,0);const k=T.getImageData(0,0,m.width,m.height).data;let w=!0;for(let O=0;O{setTimeout(m,5e3),l=m}),d=()=>{r=!0};n.on(B.SignalReconnecting,d).on(B.Reconnecting,d).on(B.Reconnected,()=>{o=!0,l(!0)}),(e=n.engine.client.ws)===null||e===void 0||e.close();const h=n.engine.client.onClose;if(h&&h(""),yield u,r){if(!o||n.state!==Te.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class tR extends Hi{get description(){return"Can connect via TURN"}perform(){return R(this,void 0,void 0,function*(){var e,n;const r=new Yf,o=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let l=!1,u=!1,d=!1;for(let h of o.iceServers)for(let m of h.urls)m.startsWith("turn:")?(u=!0,d=!0):m.startsWith("turns:")&&(u=!0,d=!0,l=!0),m.startsWith("stun:")&&(d=!0);d?u&&!l&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((n=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||n===void 0)&&n.iceServers||u?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(h=>setTimeout(h,0)))})}}class nR extends Hi{get description(){return"Establishing WebRTC connection"}perform(){return R(this,void 0,void 0,function*(){let e=!1,n=!1;this.room.on(B.SignalConnected,()=>{const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(o,l)=>{if(o.candidate){const u=new RTCIceCandidate(o);let d="".concat(u.protocol," ").concat(u.address,":").concat(u.port," ").concat(u.type);u.address&&(iR(u.address)?d+=" (private)":u.protocol==="tcp"&&u.tcpType==="passive"?(e=!0,d+=" (passive)"):u.protocol==="udp"&&(n=!0)),this.appendMessage(d)}r&&r(o,l)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=o=>{o instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(o.errorCode," ").concat(o.errorText," ").concat(o.url))})});try{yield this.connect(),ke.info("now the room is connected")}catch(r){throw this.appendWarning("ports need to be open on firewall in order to connect."),r}e||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")})}}function iR(a){const e=a.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const n=parseInt(e[1],10);if(n>=16&&n<=31)return!0}}return!1}class aR extends Hi{get description(){return"Connecting to signal connection via WebSocket"}perform(){return R(this,void 0,void 0,function*(){var e,n,r;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let o=new Yf;const l=yield o.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(l.serverVersion,".")),((e=l.serverInfo)===null||e===void 0?void 0:e.edition)===F0.Cloud&&(!((n=l.serverInfo)===null||n===void 0)&&n.region)&&this.appendMessage("LiveKit Cloud: ".concat((r=l.serverInfo)===null||r===void 0?void 0:r.region)),yield o.close()})}}class bO extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=n,this.options=r}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:fn.IDLE,name:"",description:""}),e}updateCheck(e,n){this.checkResults.set(e,n),this.emit("checkUpdate",e,n)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==fn.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return R(this,void 0,void 0,function*(){const n=this.getNextCheckId(),r=new e(this.url,this.token,this.options),o=u=>{this.updateCheck(n,u)};r.on("update",o);const l=yield r.run();return r.off("update",o),l})}checkWebsocket(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(aR)})}checkWebRTC(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(nR)})}checkTURN(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(tR)})}checkReconnect(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(eR)})}checkPublishAudio(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(W1)})}checkPublishVideo(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck($1)})}checkConnectionProtocol(){return R(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(X1);if(e.data&&"protocol"in e.data){const n=e.data;this.options.protocol=n.protocol}return e})}checkCloudRegion(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(Q1)})}}const kf=Math.min,pr=Math.max,jc=Math.round,zi=a=>({x:a,y:a}),rR={left:"right",right:"left",bottom:"top",top:"bottom"},sR={start:"end",end:"start"};function e0(a,e,n){return pr(a,kf(e,n))}function Zc(a,e){return typeof a=="function"?a(e):a}function ya(a){return a.split("-")[0]}function Jc(a){return a.split("-")[1]}function rb(a){return a==="x"?"y":"x"}function sb(a){return a==="y"?"height":"width"}function Wc(a){return["top","bottom"].includes(ya(a))?"y":"x"}function ob(a){return rb(Wc(a))}function oR(a,e,n){n===void 0&&(n=!1);const r=Jc(a),o=ob(a),l=sb(o);let u=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[l]>e.floating[l]&&(u=Bc(u)),[u,Bc(u)]}function cR(a){const e=Bc(a);return[Cf(a),e,Cf(e)]}function Cf(a){return a.replace(/start|end/g,e=>sR[e])}function lR(a,e,n){const r=["left","right"],o=["right","left"],l=["top","bottom"],u=["bottom","top"];switch(a){case"top":case"bottom":return n?e?o:r:e?r:o;case"left":case"right":return e?l:u;default:return[]}}function uR(a,e,n,r){const o=Jc(a);let l=lR(ya(a),n==="start",r);return o&&(l=l.map(u=>u+"-"+o),e&&(l=l.concat(l.map(Cf)))),l}function Bc(a){return a.replace(/left|right|bottom|top/g,e=>rR[e])}function dR(a){return{top:0,right:0,bottom:0,left:0,...a}}function fR(a){return typeof a!="number"?dR(a):{top:a,right:a,bottom:a,left:a}}function zc(a){const{x:e,y:n,width:r,height:o}=a;return{width:r,height:o,top:n,left:e,right:e+r,bottom:n+o,x:e,y:n}}function t0(a,e,n){let{reference:r,floating:o}=a;const l=Wc(e),u=ob(e),d=sb(u),h=ya(e),m=l==="y",g=r.x+r.width/2-o.width/2,y=r.y+r.height/2-o.height/2,b=r[d]/2-o[d]/2;let T;switch(h){case"top":T={x:g,y:r.y-o.height};break;case"bottom":T={x:g,y:r.y+r.height};break;case"right":T={x:r.x+r.width,y};break;case"left":T={x:r.x-o.width,y};break;default:T={x:r.x,y:r.y}}switch(Jc(e)){case"start":T[u]-=b*(n&&m?-1:1);break;case"end":T[u]+=b*(n&&m?-1:1);break}return T}const hR=async(a,e,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:l=[],platform:u}=n,d=l.filter(Boolean),h=await(u.isRTL==null?void 0:u.isRTL(e));let m=await u.getElementRects({reference:a,floating:e,strategy:o}),{x:g,y}=t0(m,r,h),b=r,T={},C=0;for(let k=0;koe<=0)){var X,J;const oe=(((X=l.flip)==null?void 0:X.index)||0)+1,qe=_[oe];if(qe)return{data:{index:oe,overflows:ie},reset:{placement:qe}};let Fe=(J=ie.filter(Ye=>Ye.overflows[0]<=0).sort((Ye,te)=>Ye.overflows[1]-te.overflows[1])[0])==null?void 0:J.placement;if(!Fe)switch(T){case"bestFit":{var ee;const Ye=(ee=ie.map(te=>[te.placement,te.overflows.filter(he=>he>0).reduce((he,ue)=>he+ue,0)]).sort((te,he)=>te[1]-he[1])[0])==null?void 0:ee[0];Ye&&(Fe=Ye);break}case"initialPlacement":Fe=d;break}if(o!==Fe)return{reset:{placement:Fe}}}return{}}}};async function pR(a,e){const{placement:n,platform:r,elements:o}=a,l=await(r.isRTL==null?void 0:r.isRTL(o.floating)),u=ya(n),d=Jc(n),h=Wc(n)==="y",m=["left","top"].includes(u)?-1:1,g=l&&h?-1:1,y=Zc(e,a);let{mainAxis:b,crossAxis:T,alignmentAxis:C}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...y};return d&&typeof C=="number"&&(T=d==="end"?C*-1:C),h?{x:T*g,y:b*m}:{x:b*m,y:T*g}}const gR=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(e){var n,r;const{x:o,y:l,placement:u,middlewareData:d}=e,h=await pR(e,a);return u===((n=d.offset)==null?void 0:n.placement)&&(r=d.arrow)!=null&&r.alignmentOffset?{}:{x:o+h.x,y:l+h.y,data:{...h,placement:u}}}}},vR=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:l=!0,crossAxis:u=!1,limiter:d={fn:w=>{let{x:O,y:V}=w;return{x:O,y:V}}},...h}=Zc(a,e),m={x:n,y:r},g=await cb(e,h),y=Wc(ya(o)),b=rb(y);let T=m[b],C=m[y];if(l){const w=b==="y"?"top":"left",O=b==="y"?"bottom":"right",V=T+g[w],Q=T-g[O];T=e0(V,T,Q)}if(u){const w=y==="y"?"top":"left",O=y==="y"?"bottom":"right",V=C+g[w],Q=C-g[O];C=e0(V,C,Q)}const k=d.fn({...e,[b]:T,[y]:C});return{...k,data:{x:k.x-n,y:k.y-r}}}}};function $c(){return typeof window<"u"}function Rr(a){return lb(a)?(a.nodeName||"").toLowerCase():"#document"}function Gt(a){var e;return(a==null||(e=a.ownerDocument)==null?void 0:e.defaultView)||window}function ii(a){var e;return(e=(lb(a)?a.ownerDocument:a.document)||window.document)==null?void 0:e.documentElement}function lb(a){return $c()?a instanceof Node||a instanceof Gt(a).Node:!1}function vn(a){return $c()?a instanceof Element||a instanceof Gt(a).Element:!1}function Mn(a){return $c()?a instanceof HTMLElement||a instanceof Gt(a).HTMLElement:!1}function n0(a){return!$c()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof Gt(a).ShadowRoot}function Ys(a){const{overflow:e,overflowX:n,overflowY:r,display:o}=yn(a);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(o)}function yR(a){return["table","td","th"].includes(Rr(a))}function el(a){return[":popover-open",":modal"].some(e=>{try{return a.matches(e)}catch{return!1}})}function Wf(a){const e=$f(),n=vn(a)?yn(a):a;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function bR(a){let e=qi(a);for(;Mn(e)&&!Tr(e);){if(Wf(e))return e;if(el(e))return null;e=qi(e)}return null}function $f(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Tr(a){return["html","body","#document"].includes(Rr(a))}function yn(a){return Gt(a).getComputedStyle(a)}function tl(a){return vn(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function qi(a){if(Rr(a)==="html")return a;const e=a.assignedSlot||a.parentNode||n0(a)&&a.host||ii(a);return n0(e)?e.host:e}function ub(a){const e=qi(a);return Tr(e)?a.ownerDocument?a.ownerDocument.body:a.body:Mn(e)&&Ys(e)?e:ub(e)}function db(a,e,n){var r;e===void 0&&(e=[]);const o=ub(a),l=o===((r=a.ownerDocument)==null?void 0:r.body),u=Gt(o);return l?(Ef(u),e.concat(u,u.visualViewport||[],Ys(o)?o:[],[])):e.concat(o,db(o,[]))}function Ef(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function fb(a){const e=yn(a);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const o=Mn(a),l=o?a.offsetWidth:n,u=o?a.offsetHeight:r,d=jc(n)!==l||jc(r)!==u;return d&&(n=l,r=u),{width:n,height:r,$:d}}function hb(a){return vn(a)?a:a.contextElement}function gr(a){const e=hb(a);if(!Mn(e))return zi(1);const n=e.getBoundingClientRect(),{width:r,height:o,$:l}=fb(e);let u=(l?jc(n.width):n.width)/r,d=(l?jc(n.height):n.height)/o;return(!u||!Number.isFinite(u))&&(u=1),(!d||!Number.isFinite(d))&&(d=1),{x:u,y:d}}const SR=zi(0);function mb(a){const e=Gt(a);return!$f()||!e.visualViewport?SR:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function TR(a,e,n){return e===void 0&&(e=!1),!n||e&&n!==Gt(a)?!1:e}function Gs(a,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const o=a.getBoundingClientRect(),l=hb(a);let u=zi(1);e&&(r?vn(r)&&(u=gr(r)):u=gr(a));const d=TR(l,n,r)?mb(l):zi(0);let h=(o.left+d.x)/u.x,m=(o.top+d.y)/u.y,g=o.width/u.x,y=o.height/u.y;if(l){const b=Gt(l),T=r&&vn(r)?Gt(r):r;let C=b,k=Ef(C);for(;k&&r&&T!==C;){const w=gr(k),O=k.getBoundingClientRect(),V=yn(k),Q=O.left+(k.clientLeft+parseFloat(V.paddingLeft))*w.x,U=O.top+(k.clientTop+parseFloat(V.paddingTop))*w.y;h*=w.x,m*=w.y,g*=w.x,y*=w.y,h+=Q,m+=U,C=Gt(k),k=Ef(C)}}return zc({width:g,height:y,x:h,y:m})}function kR(a){let{elements:e,rect:n,offsetParent:r,strategy:o}=a;const l=o==="fixed",u=ii(r),d=e?el(e.floating):!1;if(r===u||d&&l)return n;let h={scrollLeft:0,scrollTop:0},m=zi(1);const g=zi(0),y=Mn(r);if((y||!y&&!l)&&((Rr(r)!=="body"||Ys(u))&&(h=tl(r)),Mn(r))){const b=Gs(r);m=gr(r),g.x=b.x+r.clientLeft,g.y=b.y+r.clientTop}return{width:n.width*m.x,height:n.height*m.y,x:n.x*m.x-h.scrollLeft*m.x+g.x,y:n.y*m.y-h.scrollTop*m.y+g.y}}function CR(a){return Array.from(a.getClientRects())}function Rf(a,e){const n=tl(a).scrollLeft;return e?e.left+n:Gs(ii(a)).left+n}function ER(a){const e=ii(a),n=tl(a),r=a.ownerDocument.body,o=pr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),l=pr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let u=-n.scrollLeft+Rf(a);const d=-n.scrollTop;return yn(r).direction==="rtl"&&(u+=pr(e.clientWidth,r.clientWidth)-o),{width:o,height:l,x:u,y:d}}function RR(a,e){const n=Gt(a),r=ii(a),o=n.visualViewport;let l=r.clientWidth,u=r.clientHeight,d=0,h=0;if(o){l=o.width,u=o.height;const m=$f();(!m||m&&e==="fixed")&&(d=o.offsetLeft,h=o.offsetTop)}return{width:l,height:u,x:d,y:h}}function _R(a,e){const n=Gs(a,!0,e==="fixed"),r=n.top+a.clientTop,o=n.left+a.clientLeft,l=Mn(a)?gr(a):zi(1),u=a.clientWidth*l.x,d=a.clientHeight*l.y,h=o*l.x,m=r*l.y;return{width:u,height:d,x:h,y:m}}function i0(a,e,n){let r;if(e==="viewport")r=RR(a,n);else if(e==="document")r=ER(ii(a));else if(vn(e))r=_R(e,n);else{const o=mb(a);r={...e,x:e.x-o.x,y:e.y-o.y}}return zc(r)}function pb(a,e){const n=qi(a);return n===e||!vn(n)||Tr(n)?!1:yn(n).position==="fixed"||pb(n,e)}function wR(a,e){const n=e.get(a);if(n)return n;let r=db(a,[]).filter(d=>vn(d)&&Rr(d)!=="body"),o=null;const l=yn(a).position==="fixed";let u=l?qi(a):a;for(;vn(u)&&!Tr(u);){const d=yn(u),h=Wf(u);!h&&d.position==="fixed"&&(o=null),(l?!h&&!o:!h&&d.position==="static"&&o&&["absolute","fixed"].includes(o.position)||Ys(u)&&!h&&pb(a,u))?r=r.filter(m=>m!==u):o=d,u=qi(u)}return e.set(a,r),r}function OR(a){let{element:e,boundary:n,rootBoundary:r,strategy:o}=a;const l=[...n==="clippingAncestors"?el(e)?[]:wR(e,this._c):[].concat(n),r],u=l[0],d=l.reduce((h,m)=>{const g=i0(e,m,o);return h.top=pr(g.top,h.top),h.right=kf(g.right,h.right),h.bottom=kf(g.bottom,h.bottom),h.left=pr(g.left,h.left),h},i0(e,u,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function DR(a){const{width:e,height:n}=fb(a);return{width:e,height:n}}function AR(a,e,n){const r=Mn(e),o=ii(e),l=n==="fixed",u=Gs(a,!0,l,e);let d={scrollLeft:0,scrollTop:0};const h=zi(0);if(r||!r&&!l)if((Rr(e)!=="body"||Ys(o))&&(d=tl(e)),r){const T=Gs(e,!0,l,e);h.x=T.x+e.clientLeft,h.y=T.y+e.clientTop}else o&&(h.x=Rf(o));let m=0,g=0;if(o&&!r&&!l){const T=o.getBoundingClientRect();g=T.top+d.scrollTop,m=T.left+d.scrollLeft-Rf(o,T)}const y=u.left+d.scrollLeft-h.x-m,b=u.top+d.scrollTop-h.y-g;return{x:y,y:b,width:u.width,height:u.height}}function Bd(a){return yn(a).position==="static"}function a0(a,e){if(!Mn(a)||yn(a).position==="fixed")return null;if(e)return e(a);let n=a.offsetParent;return ii(a)===n&&(n=n.ownerDocument.body),n}function gb(a,e){const n=Gt(a);if(el(a))return n;if(!Mn(a)){let o=qi(a);for(;o&&!Tr(o);){if(vn(o)&&!Bd(o))return o;o=qi(o)}return n}let r=a0(a,e);for(;r&&yR(r)&&Bd(r);)r=a0(r,e);return r&&Tr(r)&&Bd(r)&&!Wf(r)?n:r||bR(a)||n}const MR=async function(a){const e=this.getOffsetParent||gb,n=this.getDimensions,r=await n(a.floating);return{reference:AR(a.reference,await e(a.floating),a.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function PR(a){return yn(a).direction==="rtl"}const xR={convertOffsetParentRelativeRectToViewportRelativeRect:kR,getDocumentElement:ii,getClippingRect:OR,getOffsetParent:gb,getElementRects:MR,getClientRects:CR,getDimensions:DR,getScale:gr,isElement:vn,isRTL:PR},NR=gR,UR=vR,LR=mR,IR=(a,e,n)=>{const r=new Map,o={platform:xR,...n},l={...o.platform,_c:r};return hR(a,e,{...o,platform:l})};var Ns=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function jR(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var vb={exports:{}};(function(a){(function(e,n){a.exports?a.exports=n():e.log=n()})(Ns,function(){var e=function(){},n="undefined",r=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],l={},u=null;function d(k,w){var O=k[w];if(typeof O.bind=="function")return O.bind(k);try{return Function.prototype.bind.call(O,k)}catch{return function(){return Function.prototype.apply.apply(O,[k,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function m(k){return k==="debug"&&(k="log"),typeof console===n?!1:k==="trace"&&r?h:console[k]!==void 0?d(console,k):console.log!==void 0?d(console,"log"):e}function g(){for(var k=this.getLevel(),w=0;w=0&&oe<=O.levels.SILENT)return oe;throw new TypeError("log.setLevel() called with invalid level: "+ee)}O.name=k,O.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},O.methodFactory=w||b,O.getLevel=function(){return U??Q??V},O.setLevel=function(ee,oe){return U=X(ee),oe!==!1&&H(U),g.call(O)},O.setDefaultLevel=function(ee){Q=X(ee),$()||O.setLevel(ee,!1)},O.resetLevel=function(){U=null,ie(),g.call(O)},O.enableAll=function(ee){O.setLevel(O.levels.TRACE,ee)},O.disableAll=function(ee){O.setLevel(O.levels.SILENT,ee)},O.rebuild=function(){if(u!==O&&(V=X(u.getLevel())),g.call(O),u===O)for(var ee in l)l[ee].rebuild()},V=X(u?u.getLevel():"WARN");var J=$();J!=null&&(U=X(J)),g.call(O)}u=new T,u.getLogger=function(k){if(typeof k!="symbol"&&typeof k!="string"||k==="")throw new TypeError("You must supply a name when creating a logger.");var w=l[k];return w||(w=l[k]=new T(k,u.methodFactory)),w};var C=typeof window!==n?window.log:void 0;return u.noConflict=function(){return typeof window!==n&&window.log===u&&(window.log=C),u},u.getLoggers=function(){return l},u.default=u,u})})(vb);var BR=vb.exports;const zR=jR(BR);var _f=function(a,e){return _f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},_f(a,e)};function ai(a,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");_f(a,e);function n(){this.constructor=a}a.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}function qR(a,e,n,r){function o(l){return l instanceof n?l:new n(function(u){u(l)})}return new(n||(n=Promise))(function(l,u){function d(g){try{m(r.next(g))}catch(y){u(y)}}function h(g){try{m(r.throw(g))}catch(y){u(y)}}function m(g){g.done?l(g.value):o(g.value).then(d,h)}m((r=r.apply(a,[])).next())})}function yb(a,e){var n={label:0,sent:function(){if(l[0]&1)throw l[1];return l[1]},trys:[],ops:[]},r,o,l,u=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return u.next=d(0),u.throw=d(1),u.return=d(2),typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(m){return function(g){return h([m,g])}}function h(m){if(r)throw new TypeError("Generator is already executing.");for(;u&&(u=0,m[0]&&(n=0)),n;)try{if(r=1,o&&(l=m[0]&2?o.return:m[0]?o.throw||((l=o.return)&&l.call(o),0):o.next)&&!(l=l.call(o,m[1])).done)return l;switch(o=0,l&&(m=[m[0]&2,l.value]),m[0]){case 0:case 1:l=m;break;case 4:return n.label++,{value:m[1],done:!1};case 5:n.label++,o=m[1],m=[0];continue;case 7:m=n.ops.pop(),n.trys.pop();continue;default:if(l=n.trys,!(l=l.length>0&&l[l.length-1])&&(m[0]===6||m[0]===2)){n=0;continue}if(m[0]===3&&(!l||m[1]>l[0]&&m[1]=a.length&&(a=void 0),{value:a&&a[r++],done:!a}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function qc(a,e){var n=typeof Symbol=="function"&&a[Symbol.iterator];if(!n)return a;var r=n.call(a),o,l=[],u;try{for(;(e===void 0||e-- >0)&&!(o=r.next()).done;)l.push(o.value)}catch(d){u={error:d}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(u)throw u.error}}return l}function Vc(a,e,n){if(arguments.length===2)for(var r=0,o=e.length,l;r1||h(T,k)})},C&&(o[T]=C(o[T])))}function h(T,C){try{m(r[T](C))}catch(k){b(l[0][3],k)}}function m(T){T.value instanceof vr?Promise.resolve(T.value.v).then(g,y):b(l[0][2],T)}function g(T){h("next",T)}function y(T){h("throw",T)}function b(T,C){T(C),l.shift(),l.length&&h(l[0][0],l[0][1])}}function HR(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=a[Symbol.asyncIterator],n;return e?e.call(a):(a=typeof kr=="function"?kr(a):a[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(l){n[l]=a[l]&&function(u){return new Promise(function(d,h){u=a[l](u),o(d,h,u.done,u.value)})}}function o(l,u,d,h){Promise.resolve(h).then(function(m){l({value:m,done:d})},u)}}function dt(a){return typeof a=="function"}function eh(a){var e=function(r){Error.call(r),r.stack=new Error().stack},n=a(e);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var zd=eh(function(a){return function(e){a(this),this.message=e?e.length+` errors occurred during unsubscription: `+e.map(function(n,r){return r+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}async function hO(){var e,n,r;const a=(r=(n=(e=window.google)==null?void 0:e.colab)==null?void 0:n.kernel)==null?void 0:r.invokeFunction;if(a)return(await a("create_join_token",[])).data["application/json"];if(window.jupyterFetchJoinToken)return await window.jupyterFetchJoinToken();throw new Error("No Colab or Jupyter kernel function available")}const mO=a=>Pe.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Pe.jsxs("div",{className:"content",children:[Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsxs(Wb,{onClick:a,children:[Pe.jsx(mO,{}),"Disconnect"]})})]}),Pe.jsxs("div",{className:"controls",children:[Pe.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Pe.jsx("div",{className:"agent-visualizer",children:Pe.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(null),[o,l]=P.useState(!0);return P.useEffect(()=>{hO().then(u=>e(u)).catch(u=>r(u.message))},[]),n?Pe.jsxs("div",{children:["Error: ",n]}):a?o?Pe.jsxs(_w,{serverUrl:a.url,token:a.token,onError:u=>r(u.message),children:[Pe.jsx(pO,{onDisconnect:()=>l(!1)}),Pe.jsx(sO,{})]}):Pe.jsx("div",{className:"content",children:Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})}):Pe.jsx("div",{children:"Loading..."})};Mk.createRoot(document.getElementById("root")).render(Pe.jsx(P.StrictMode,{children:Pe.jsx(gO,{})})); + `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}async function hO(){var e,n,r;const a=(r=(n=(e=window.google)==null?void 0:e.colab)==null?void 0:n.kernel)==null?void 0:r.invokeFunction;if(a)return(await a("get_join_token",[])).data["application/json"];if(window.jupyterFetchJoinToken)return await window.jupyterFetchJoinToken();throw new Error("No Colab or Jupyter kernel function available")}const mO=a=>Pe.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Pe.jsxs("div",{className:"content",children:[Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsxs(Wb,{onClick:a,children:[Pe.jsx(mO,{}),"Disconnect"]})})]}),Pe.jsxs("div",{className:"controls",children:[Pe.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Pe.jsx("div",{className:"agent-visualizer",children:Pe.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(null),[o,l]=P.useState(!0);return P.useEffect(()=>{hO().then(u=>e(u)).catch(u=>r(u.message))},[]),n?Pe.jsxs("div",{children:["Error: ",n]}):a?o?Pe.jsxs(_w,{serverUrl:a.url,token:a.token,onError:u=>r(u.message),children:[Pe.jsx(pO,{onDisconnect:()=>l(!1)}),Pe.jsx(sO,{})]}):Pe.jsx("div",{className:"content",children:Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})}):Pe.jsx("div",{children:"Loading..."})};Mk.createRoot(document.getElementById("root")).render(Pe.jsx(P.StrictMode,{children:Pe.jsx(gO,{})})); From 041e4ea21549ed51473b8085e7dae63e4fc23f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 17:56:52 +0200 Subject: [PATCH 06/13] Update jupyter.py --- livekit-rtc/livekit/rtc/jupyter.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 62103c6b..ab3a5fd8 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -5,13 +5,14 @@ import contextlib import os from IPython.core.display import HTML, JSON +from IPython.display import display from importlib.resources import as_file, files _resource_stack = contextlib.ExitStack() atexit.register(_resource_stack.close) -def display_room(url: str | None = None, token: str | None = None) -> HTML: +def room_html(url: str | None = None, token: str | None = None) -> HTML: """ Display a LiveKit room in Jupyter or Google Colab. @@ -56,3 +57,18 @@ def create_join_token(): index_path = _resource_stack.enter_context(as_file(index_path)) return HTML(index_path.read_text()) + + +def display_room(url: str | None = None, token: str | None = None) -> None: + """ + Display a LiveKit room in Jupyter or Google Colab. + + Args: + url (str | None): The LiveKit room URL. If None, the function attempts + to use the LIVEKIT_JUPYTER_URL environment variable in a local or + Colab environment. + token (str | None): The LiveKit join token. If None, the function + attempts to use the LIVEKIT_JUPYTER_URL environment variable in a + local or Colab environment. + """ + display(room_html(url, token)) From fe234385df6dc80fc82bfd7d6cbf33bf09fd2086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 21:38:43 +0200 Subject: [PATCH 07/13] simplify --- livekit-rtc/livekit/rtc/jupyter.py | 50 +++++------------------------- 1 file changed, 7 insertions(+), 43 deletions(-) diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index ab3a5fd8..c75b74ed 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -3,7 +3,6 @@ import atexit import sys import contextlib -import os from IPython.core.display import HTML, JSON from IPython.display import display from importlib.resources import as_file, files @@ -12,63 +11,28 @@ atexit.register(_resource_stack.close) -def room_html(url: str | None = None, token: str | None = None) -> HTML: - """ - Display a LiveKit room in Jupyter or Google Colab. - - Args: - url (str | None): The LiveKit room URL. If None, the function attempts - to use the LIVEKIT_JUPYTER_URL environment variable in a local or - Colab environment. - token (str | None): The LiveKit join token. If None, the function - attempts to use the LIVEKIT_JUPYTER_URL environment variable in a - local or Colab environment. - - Returns: - IPython.core.display.HTML: The HTML object that embeds the LiveKit room. - - Raises: - ValueError: If both `url` and `token` are None and - `LIVEKIT_JUPYTER_URL` is not set. - """ +def room_html(url: str, token: str) -> HTML: IN_COLAB = "google.colab" in sys.modules - if url is None and token is None: - if IN_COLAB: - from google.colab import userdata - - LIVEKIT_JUPYTER_URL = userdata.get("LIVEKIT_JUPYTER_URL") - else: - LIVEKIT_JUPYTER_URL = os.environ.get("LIVEKIT_JUPYTER_URL") - - if not LIVEKIT_JUPYTER_URL: - raise ValueError("LIVEKIT_JUPYTER_URL must be set (or url/token must be provided).") - if IN_COLAB: from google.colab import output - def create_join_token(): - return JSON({"url": url or "", "token": token or ""}) + def get_join_token(): + return JSON({"url": url, "token": token}) - output.register_callback("get_join_token", create_join_token) + output.register_callback("get_join_token", get_join_token) - # Load the local HTML file that embeds the LiveKit client index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" index_path = _resource_stack.enter_context(as_file(index_path)) - return HTML(index_path.read_text()) -def display_room(url: str | None = None, token: str | None = None) -> None: +def display_room(url: str, token: str) -> None: """ Display a LiveKit room in Jupyter or Google Colab. Args: - url (str | None): The LiveKit room URL. If None, the function attempts - to use the LIVEKIT_JUPYTER_URL environment variable in a local or - Colab environment. - token (str | None): The LiveKit join token. If None, the function - attempts to use the LIVEKIT_JUPYTER_URL environment variable in a - local or Colab environment. + url (str | None): The LiveKit room URL. + token (str | None): The LiveKit join token. """ display(room_html(url, token)) From 628c61b456994544177c87679dc76acb3239d120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 21:39:00 +0200 Subject: [PATCH 08/13] Update jupyter.py --- livekit-rtc/livekit/rtc/jupyter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index c75b74ed..197841a1 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -32,7 +32,7 @@ def display_room(url: str, token: str) -> None: Display a LiveKit room in Jupyter or Google Colab. Args: - url (str | None): The LiveKit room URL. - token (str | None): The LiveKit join token. + url (str): The LiveKit room URL. + token (str): The LiveKit join token. """ display(room_html(url, token)) From d936de49db3fc78a6112f69ec7a00bd57f70b710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Sun, 6 Apr 2025 23:38:35 +0200 Subject: [PATCH 09/13] add local kernel support --- livekit-rtc/jupyter-html/src/App.tsx | 36 +++++++++++++++---- livekit-rtc/livekit/rtc/jupyter.py | 14 ++++++++ .../rtc/resources/jupyter-html/index.html | 2 +- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx index b64b4ac6..ff7596d3 100644 --- a/livekit-rtc/jupyter-html/src/App.tsx +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -20,16 +20,38 @@ export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { if (invoke) { const res = await invoke("get_join_token", []); return res.data["application/json"]; - } else if ((window as any).jupyterFetchJoinToken) { - return await (window as any).jupyterFetchJoinToken(); - } else if (import.meta.env.MODE === "development") { - // use env variables + } + + + // This requires that JupyterLab was started with --LabApp.expose_app_in_browser, + if ((window as any).jupyterapp && (window as any).jupyterapp.shell) { + const currentWidget = (window as any).jupyterapp.shell.currentWidget; + if (currentWidget && currentWidget.context?.sessionContext) { + const session = currentWidget.context.sessionContext.session; + if (session && session.kernel) { + try { + const comm = session.kernel.createComm("get_join_token_comm"); + comm.open(); + comm.send({ request: "token" }); + return new Promise((resolve) => { + comm.onMsg = (msg: any) => { + resolve(msg.content.data); + }; + }); + } catch (error) { + throw new Error("Error creating comm channel: " + error); + } + } + } + } + + if (import.meta.env.MODE === "development") { const url = import.meta.env.VITE_LIVEKIT_URL; const token = import.meta.env.VITE_LIVEKIT_TOKEN; - return { url: url, token: token }; - } else { - throw new Error("No Colab or Jupyter kernel function available"); + return { url, token }; } + + throw new Error("No suitable kernel connection available"); } diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 197841a1..cf832231 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -1,3 +1,4 @@ +# type: ignore from __future__ import annotations import atexit @@ -13,6 +14,7 @@ def room_html(url: str, token: str) -> HTML: IN_COLAB = "google.colab" in sys.modules + IN_JUPYTER = "ipykernel" in sys.modules if IN_COLAB: from google.colab import output @@ -21,6 +23,18 @@ def get_join_token(): return JSON({"url": url, "token": token}) output.register_callback("get_join_token", get_join_token) + elif IN_JUPYTER: + from IPython import get_ipython + + ip = get_ipython() + if ip and hasattr(ip, "kernel"): + + def token_comm_target(comm, open_msg): + @comm.on_msg + def handle_message(msg): + comm.send({"url": url, "token": token}) + + ip.kernel.comm_manager.register_target("get_join_token_comm", token_comm_target) index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" index_path = _resource_stack.enter_context(as_file(index_path)) diff --git a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html index 50bfacf8..a55052c1 100644 --- a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html +++ b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html @@ -92,7 +92,7 @@ `)+`\r `},Nd}var Hv;function m1(){if(Hv)return un;Hv=1;var a=f1(),e=h1(),n=Kf();return un.grammar=n,un.write=e,un.parse=a.parse,un.parseParams=a.parseParams,un.parseFmtpConfig=a.parseFmtpConfig,un.parsePayloads=a.parsePayloads,un.parseRemoteCandidates=a.parseRemoteCandidates,un.parseImageAttributes=a.parseImageAttributes,un.parseSimulcastStreamList=a.parseSimulcastStreamList,un}var Mi=m1();function Qf(a,e,n){var r,o,l;e===void 0&&(e=50),n===void 0&&(n={});var u=(r=n.isImmediate)!=null&&r,d=(o=n.callback)!=null&&o,h=n.maxWait,m=Date.now(),g=[];function y(){if(h!==void 0){var T=Date.now()-m;if(T+e>=h)return h-T}return e}var b=function(){var T=[].slice.call(arguments),C=this;return new Promise(function(k,w){var O=u&&l===void 0;if(l!==void 0&&clearTimeout(l),l=setTimeout(function(){if(l=void 0,m=Date.now(),!u){var Q=a.apply(C,T);d&&d(Q),g.forEach(function(U){return(0,U.resolve)(Q)}),g=[]}},y()),O){var V=a.apply(C,T);return d&&d(V),k(V)}g.push({resolve:k,reject:w})})};return b.cancel=function(T){l!==void 0&&clearTimeout(l),g.forEach(function(C){return(0,C.reject)(T)}),g=[]},b}const p1=.7,g1=20,mr={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class Gv extends xn.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var r;super(),this.log=ke,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Qf(o=>R(this,void 0,void 0,function*(){this.emit(mr.NegotiationStarted);try{yield this.createAndSendOffer()}catch(l){if(o)o(l);else throw l}}),g1),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=ei((r=n.loggerName)!==null&&r!==void 0?r:gn.PCTransport),this.loggerOptions=n,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=n=>{var r;n.candidate&&((r=this.onIceCandidate)===null||r===void 0||r.call(this,n.candidate))},e.onicecandidateerror=n=>{var r;(r=this.onIceCandidateError)===null||r===void 0||r.call(this,n)},e.oniceconnectionstatechange=()=>{var n;(n=this.onIceConnectionStateChange)===null||n===void 0||n.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var n;(n=this.onSignalingStatechange)===null||n===void 0||n.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var n;(n=this.onConnectionStateChange)===null||n===void 0||n.call(this,e.connectionState)},e.ondatachannel=n=>{var r;(r=this.onDataChannel)===null||r===void 0||r.call(this,n)},e.ontrack=n=>{var r;(r=this.onTrack)===null||r===void 0||r.call(this,n)},e}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return R(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return R(this,void 0,void 0,function*(){var n;let r;if(e.type==="offer"){let{stereoMids:o,nackMids:l}=v1(e);this.remoteStereoMids=o,this.remoteNackMids=l}else if(e.type==="answer"){const o=Mi.parse((n=e.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{l.type==="audio"&&this.trackBitrates.some(u=>{if(!u.transceiver||l.mid!=u.transceiver.mid)return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0)return!0;let h=!1;for(const m of l.fmtp)if(m.payload===d){m.config=m.config.split(";").filter(g=>!g.includes("maxaveragebitrate")).join(";"),u.maxbr>0&&(m.config+=";maxaveragebitrate=".concat(u.maxbr*1e3)),h=!0;break}return h||u.maxbr>0&&l.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(u.maxbr*1e3)}),!0})}),r=Mi.write(o)}yield this.setMungedSDP(e,r,!0),this.pendingCandidates.forEach(o=>{this.pc.addIceCandidate(o)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(mr.NegotiationComplete),e.sdp&&Mi.parse(e.sdp).media.forEach(l=>{l.type==="video"&&this.emit(mr.RTPVideoPayloadTypes,l.rtp)}))})}createAndSendOffer(e){return R(this,void 0,void 0,function*(){var n;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const l=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&l)yield this._pc.setRemoteDescription(l);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const r=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:r.sdp},this.logContext));const o=Mi.parse((n=r.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{Yv(l),l.type==="audio"?Fv(l,[],[]):l.type==="video"&&this.trackBitrates.some(u=>{if(!l.msid||!u.cid||!l.msid.includes(u.cid))return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0||(Is(u.codec)&&this.ensureVideoDDExtensionForSVC(l,o),u.codec!=="av1"))return!0;const h=Math.round(u.maxbr*p1);for(const m of l.fmtp)if(m.payload===d){m.config.includes("x-google-start-bitrate")||(m.config+=";x-google-start-bitrate=".concat(h));break}return!0})}),yield this.setMungedSDP(r,Mi.write(o)),this.onOffer(r)})}createAndSetAnswer(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pc.createAnswer(),r=Mi.parse((e=n.sdp)!==null&&e!==void 0?e:"");return r.media.forEach(o=>{Yv(o),o.type==="audio"&&Fv(o,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(n,Mi.write(r)),n})}createDataChannel(e,n){return this.pc.createDataChannel(e,n)}addTransceiver(e,n){return this.pc.addTransceiver(e,n)}addTrack(e){if(!this._pc)throw new ut("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var n;if(!this._pc)throw new ut("PC closed, cannot configure");return(n=this._pc)===null||n===void 0?void 0:n.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var n;return(n=this._pc)===null||n===void 0?void 0:n.removeTrack(e)}getConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&n!==void 0?n:"closed"}getICEConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&n!==void 0?n:"closed"}getSignallingState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&n!==void 0?n:"closed"}getTransceivers(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&n!==void 0?n:[]}getSenders(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&n!==void 0?n:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return R(this,void 0,void 0,function*(){var e;if(!this._pc)return;let n="";const r=new Map,o=new Map;if((yield this._pc.getStats()).forEach(d=>{switch(d.type){case"transport":n=d.selectedCandidatePairId;break;case"candidate-pair":n===""&&d.selected&&(n=d.id),r.set(d.id,d);break;case"remote-candidate":o.set(d.id,"".concat(d.address,":").concat(d.port));break}}),n==="")return;const u=(e=r.get(n))===null||e===void 0?void 0:e.remoteCandidateId;if(u!==void 0)return o.get(u)})}setMungedSDP(e,n,r){return R(this,void 0,void 0,function*(){if(n){const o=e.sdp;e.sdp=n;try{this.log.debug("setting munged ".concat(r?"remote":"local"," description"),this.logContext),r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(l){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:l,sdp:n})),e.sdp=o}}try{r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(o){let l="unknown error";o instanceof Error?l=o.message:typeof o=="string"&&(l=o);const u={error:l,sdp:e.sdp};throw!r&&this.pc.remoteDescription&&(u.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:u})),new of(l)}})}ensureVideoDDExtensionForSVC(e,n){var r,o;if(!((r=e.ext)===null||r===void 0?void 0:r.some(u=>u.uri===Mv))){if(this.ddExtID===0){let u=0;n.media.forEach(d=>{var h;d.type==="video"&&((h=d.ext)===null||h===void 0||h.forEach(m=>{m.value>u&&(u=m.value)}))}),this.ddExtID=u+1}(o=e.ext)===null||o===void 0||o.push({value:this.ddExtID,uri:Mv})}}}function Fv(a,e,n){let r=0;a.rtp.some(o=>o.codec==="opus"?(r=o.payload,!0):!1),r>0&&(a.rtcpFb||(a.rtcpFb=[]),n.includes(a.mid)&&!a.rtcpFb.some(o=>o.payload===r&&o.type==="nack")&&a.rtcpFb.push({payload:r,type:"nack"}),e.includes(a.mid)&&a.fmtp.some(o=>o.payload===r?(o.config.includes("stereo=1")||(o.config+=";stereo=1"),!0):!1))}function v1(a){var e;const n=[],r=[],o=Mi.parse((e=a.sdp)!==null&&e!==void 0?e:"");let l=0;return o.media.forEach(u=>{var d;u.type==="audio"&&(u.rtp.some(h=>h.codec==="opus"?(l=h.payload,!0):!1),!((d=u.rtcpFb)===null||d===void 0)&&d.some(h=>h.payload===l&&h.type==="nack")&&r.push(u.mid),u.fmtp.some(h=>h.payload===l?(h.config.includes("sprop-stereo=1")&&n.push(u.mid),!0):!1))}),{stereoMids:n,nackMids:r}}function Yv(a){if(a.connection){const e=a.connection.ip.indexOf(":")>=0;(a.connection.version===4&&e||a.connection.version===6&&!e)&&(a.connection.ip="0.0.0.0",a.connection.version=4)}}const gf="vp8",y1={audioPreset:cf.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Hf.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:gf,backupCodec:!0},Fy={deviceId:"default",autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Yy={deviceId:"default",resolution:Hs.h720.resolution},b1={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new uE,disconnectOnPageLeave:!0,webAudioMix:!1},Xf={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var We;(function(a){a[a.NEW=0]="NEW",a[a.CONNECTING=1]="CONNECTING",a[a.CONNECTED=2]="CONNECTED",a[a.FAILED=3]="FAILED",a[a.CLOSING=4]="CLOSING",a[a.CLOSED=5]="CLOSED"})(We||(We={}));class S1{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,n,r){var o;this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.log=ke,this.updateState=()=>{var l;const u=this.state,d=this.requiredTransports.map(h=>h.getConnectionState());d.every(h=>h==="connected")?this.state=We.CONNECTED:d.some(h=>h==="failed")?this.state=We.FAILED:d.some(h=>h==="connecting")?this.state=We.CONNECTING:d.every(h=>h==="closed")?this.state=We.CLOSED:d.some(h=>h==="closed")?this.state=We.CLOSING:d.every(h=>h==="new")&&(this.state=We.NEW),u!==this.state&&(this.log.debug("pc state change: from ".concat(We[u]," to ").concat(We[this.state]),this.logContext),(l=this.onStateChange)===null||l===void 0||l.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=ei((o=r.loggerName)!==null&&o!==void 0?o:gn.PCManager),this.loggerOptions=r,this.isPublisherConnectionRequired=!n,this.isSubscriberConnectionRequired=n,this.publisher=new Gv(e,r),this.subscriber=new Gv(e,r),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.PUBLISHER)},this.subscriber.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.SUBSCRIBER)},this.subscriber.onDataChannel=l=>{var u;(u=this.onDataChannel)===null||u===void 0||u.call(this,l)},this.subscriber.onTrack=l=>{var u;(u=this.onTrack)===null||u===void 0||u.call(this,l)},this.publisher.onOffer=l=>{var u;(u=this.onPublisherOffer)===null||u===void 0||u.call(this,l)},this.state=We.NEW,this.connectionLock=new Ht,this.remoteOfferLock=new Ht}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return R(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const n of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(n)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return R(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,n){return R(this,void 0,void 0,function*(){n===mn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return R(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const n=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{n()}})}updateConfiguration(e,n){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),n&&this.triggerIceRestart()}ensurePCTransportConnection(e,n){return R(this,void 0,void 0,function*(){var r;const o=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((r=this.requiredTransports)===null||r===void 0?void 0:r.map(l=>this.ensureTransportConnected(l,e,n)))}finally{o()}})}negotiate(e){return R(this,void 0,void 0,function*(){return new Promise((n,r)=>R(this,void 0,void 0,function*(){const o=setTimeout(()=>{r("negotiation timed out")},this.peerConnectionTimeout),l=()=>{clearTimeout(o),r("negotiation aborted")};e.signal.addEventListener("abort",l),this.publisher.once(mr.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(mr.NegotiationComplete,()=>{clearTimeout(o),n()})}),yield this.publisher.negotiate(u=>{clearTimeout(o),r(u)})}))})}addPublisherTransceiver(e,n){return this.publisher.addTransceiver(e,n)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,n){return this.publisher.createDataChannel(e,n)}getConnectedAddress(e){return e===mn.PUBLISHER?this.publisher.getConnectedAddress():e===mn.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(r.getConnectionState()!=="connected")return new Promise((h,m)=>R(l,void 0,void 0,function*(){const g=()=>{this.log.warn("abort transport connection",this.logContext),Tt.clearTimeout(y),m(new Ie("room connection has been cancelled",Re.Cancelled))};o!=null&&o.signal.aborted&&g(),o==null||o.signal.addEventListener("abort",g);const y=Tt.setTimeout(()=>{o==null||o.signal.removeEventListener("abort",g),m(new Ie("could not establish pc connection",Re.InternalError))},u);for(;this.state!==We.CONNECTED;)if(yield Nt(50),o!=null&&o.signal.aborted){m(new Ie("room connection has been cancelled",Re.Cancelled));return}Tt.clearTimeout(y),o==null||o.signal.removeEventListener("abort",g),h()}))}()})}}class et extends Error{constructor(e,n,r){super(n),this.code=e,this.message=Kv(n,et.MAX_MESSAGE_BYTES),this.data=r?Kv(r,et.MAX_DATA_BYTES):void 0}static fromProto(e){return new et(e.code,e.message,e.data)}toProto(){return new H0({code:this.code,message:this.message,data:this.data})}static builtIn(e,n){return new et(et.ErrorCode[e],et.ErrorMessage[e],n)}}et.MAX_MESSAGE_BYTES=256;et.MAX_DATA_BYTES=15360;et.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};et.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 Ky=15360;function Zf(a){return new TextEncoder().encode(a).length}function Kv(a,e){if(Zf(a)<=e)return a;let n=0,r=a.length;const o=new TextEncoder;for(;n3&&arguments[3]!==void 0?arguments[3]:!1,l=arguments.length>4?arguments[4]:void 0;super(e,n,l),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=Qf(()=>R(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>R(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(W.Ended,this)},this.reacquireTrack=!1,this.providedByUser=o,this.muteLock=new Ht,this.pauseUpstreamLock=new Ht,this.processorLock=new Ht,this.restartLock=new Ht,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),r&&(this._constraints=r)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==j.Kind.Video)return;const{width:e,height:n}=this._mediaStreamTrack.getSettings();if(e&&n)return{width:e,height:n}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,n;return(n=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&n!==void 0?n:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,n){return R(this,void 0,void 0,function*(){var r;if(e===this._mediaStreamTrack&&!n)return;this._mediaStreamTrack&&(this.attachedElements.forEach(l=>{fr(this._mediaStreamTrack,l)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let o;if(this.processor&&e){const l=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(lr(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),o=this.processor.processedTrack}finally{l()}}this.sender&&((r=this.sender.transport)===null||r===void 0?void 0:r.state)!=="closed"&&(yield this.sender.replaceTrack(o??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(l=>{lr(o??e,l)}))})}waitForDimensions(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:T1;return function*(){var r;if(e.kind===j.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((r=Dn())===null||r===void 0?void 0:r.os)==="iOS"&&(yield Nt(10));const o=Date.now();for(;Date.now()-o0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===j.Source.ScreenShare)return;const{deviceId:r,groupId:o}=e._mediaStreamTrack.getSettings(),l=e.kind===j.Kind.Audio?"audioinput":"videoinput";return n?gt.getInstance().normalizeDeviceId(l,r,o):r}()})}mute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,n){return R(this,void 0,void 0,function*(){if(!this.sender)throw new $n("unable to replace an unpublished track");let r,o;return typeof n=="boolean"?r=n:n!==void 0&&(r=n.userProvidedTrack,o=n.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),o&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return R(this,void 0,void 0,function*(){this.manuallyStopped=!1;const n=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:r}=e,o=dE(e,["deviceId"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const l={audio:!1,video:!1};this.kind===j.Kind.Video?l.video=r?{deviceId:r}:!0:l.audio=r?{deviceId:r}:!0,this.attachedElements.forEach(h=>{fr(this.mediaStreamTrack,h)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const d=(yield navigator.mediaDevices.getUserMedia(l)).getTracks()[0];return yield d.applyConstraints(o),d.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(d),this._constraints=e,this.emit(W.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{n()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(W.UpstreamPaused,this);const r=Dn();if((r==null?void 0:r.name)==="Safari"&&Sr(r.version,"12.0")<0)throw new Vf("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{n()}})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(W.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{n()}})}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var l;const u=yield r.processorLock.lock();try{r.log.debug("setting up processor",r.logContext);const d=document.createElement(r.kind),h={kind:r.kind,track:r._mediaStreamTrack,element:d,audioContext:r.audioContext};if(yield n.init(h),r.log.debug("processor initialized",r.logContext),r.processor&&(yield r.stopProcessor()),r.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(lr(r._mediaStreamTrack,d),d.muted=!0,d.play().catch(m=>r.log.error("failed to play processor element",Object.assign(Object.assign({},r.logContext),{error:m}))),r.processor=n,r.processorElement=d,r.processor.processedTrack){for(const m of r.attachedElements)m!==r.processorElement&&o&&(fr(r._mediaStreamTrack,m),lr(r.processor.processedTrack,m));yield(l=r.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}r.emit(W.TrackProcessorUpdate,r.processor)}finally{u()}}()})}getProcessor(){return this.processor}stopProcessor(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var r,o;e.processor&&(e.log.debug("stopping processor",e.logContext),(r=e.processor.processedTrack)===null||r===void 0||r.stop(),yield e.processor.destroy(),e.processor=void 0,n||((o=e.processorElement)===null||o===void 0||o.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(W.TrackProcessorUpdate))}()})}}class Uc extends Qy{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;super(e,j.Kind.Audio,n,r,l),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let u;try{u=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}u&&this.prevStats&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=o,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const r=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Ii(this._constraints.deviceId);return this.source===j.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||r)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{n()}})}restartTrack(e){return R(this,void 0,void 0,function*(){let n;if(e){const r=Qc({audio:e});typeof r.audio!="boolean"&&(n=r.audio)}yield this.restart(n)})}restart(e){const n=Object.create(null,{restart:{get:()=>super.restart}});return R(this,void 0,void 0,function*(){const r=yield n.restart.call(this,e);return this.checkForSilence(),r})}startMonitor(){xt()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf)))}setProcessor(e){return R(this,void 0,void 0,function*(){var n;const r=yield this.processorLock.lock();try{if(!An()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const o={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(o),this.processor=e,this.processor.processedTrack&&(yield(n=this.sender)===null||n===void 0?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(W.TrackProcessorUpdate,this.processor)}finally{r()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const n=yield this.sender.getStats();let r;return n.forEach(o=>{o.type==="outbound-rtp"&&(r={type:"audio",streamId:o.id,packetsSent:o.packetsSent,packetsLost:o.packetsLost,bytesSent:o.bytesSent,timestamp:o.timestamp,roundTripTime:o.roundTripTime,jitter:o.jitter})}),r})}checkForSilence(){return R(this,void 0,void 0,function*(){const e=yield Gy(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(W.AudioSilenceDetected)),e})}}function Xy(a,e,n){switch(a.kind){case"audio":return new Uc(a,e,!1,void 0,n);case"video":return new Lc(a,e,!1,n);default:throw new $n("unsupported track type: ".concat(a.kind))}}const k1=Object.values(Hs),C1=Object.values(lf),E1=Object.values(Hf),R1=[Hs.h180,Hs.h360],_1=[lf.h180,lf.h360],w1=a=>[{scaleResolutionDownBy:2,fps:a.encoding.maxFramerate}].map(n=>{var r,o;return new Ue(Math.floor(a.width/n.scaleResolutionDownBy),Math.floor(a.height/n.scaleResolutionDownBy),Math.max(15e4,Math.floor(a.encoding.maxBitrate/(Math.pow(n.scaleResolutionDownBy,2)*(((r=a.encoding.maxFramerate)!==null&&r!==void 0?r:30)/((o=n.fps)!==null&&o!==void 0?o:30))))),n.fps,a.encoding.priority)}),vf=["q","h","f"];function yf(a,e,n,r){var o,l;let u=r==null?void 0:r.videoEncoding;a&&(u=r==null?void 0:r.screenShareEncoding);const d=r==null?void 0:r.simulcast,h=r==null?void 0:r.scalabilityMode,m=r==null?void 0:r.videoCodec;if(!u&&!d&&!h||!e||!n)return[{}];u||(u=D1(a,e,n,m),ke.debug("using video encoding",u));const g=u.maxFramerate,y=new Ue(e,n,u.maxBitrate,u.maxFramerate,u.priority);if(h&&Is(m)){const C=new Zy(h),k=[];if(C.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(h));const w=Dn();if(Bi()||An()||(w==null?void 0:w.name)==="Chrome"&&Sr(w==null?void 0:w.version,"113")<0){const O=C.suffix=="h"?2:3;for(let V=0;V0){const C=b[0];b.length>1&&([,T]=b);const k=Math.max(e,n);if(k>=960&&T)return Ud(e,n,[C,T,y],g);if(k>=480)return Ud(e,n,[C,y],g)}return Ud(e,n,[y])}function O1(a,e,n){var r,o,l,u;if(!n.backupCodec||n.backupCodec===!0||n.backupCodec.codec===n.videoCodec)return;e!==n.backupCodec.codec&&ke.warn("requested a different codec than specified as backup",{serverRequested:e,backup:n.backupCodec.codec}),n.videoCodec=e,n.videoEncoding=n.backupCodec.encoding;const d=a.mediaStreamTrack.getSettings(),h=(r=d.width)!==null&&r!==void 0?r:(o=a.dimensions)===null||o===void 0?void 0:o.width,m=(l=d.height)!==null&&l!==void 0?l:(u=a.dimensions)===null||u===void 0?void 0:u.height;return a.source===j.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1),yf(a.source===j.Source.ScreenShare,h,m,n)}function D1(a,e,n,r){const o=A1(a,e,n);let{encoding:l}=o[0];const u=Math.max(e,n);for(let d=0;d=u)break}if(r)switch(r){case"av1":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.7;break;case"vp9":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.85;break}return l}function A1(a,e,n){if(a)return E1;const r=e>n?e/n:n/e;return Math.abs(r-16/9)r?n/r:r/n;return Math.abs(o-16/9){if(u>=vf.length)return;const d=Math.min(a,e),m={rid:vf[u],scaleResolutionDownBy:Math.max(1,d/Math.min(l.width,l.height)),maxBitrate:l.encoding.maxBitrate},g=r&&l.encoding.maxFramerate?Math.min(r,l.encoding.maxFramerate):l.encoding.maxFramerate;g&&(m.maxFramerate=g);const y=br()||u===0;l.encoding.priority&&y&&(m.priority=l.encoding.priority,m.networkPriority=l.encoding.priority),o.push(m)}),An()&&qy()==="ios"){let l;o.forEach(d=>{l?d.maxFramerate&&d.maxFramerate>l&&(l=d.maxFramerate):l=d.maxFramerate});let u=!0;o.forEach(d=>{var h;d.maxFramerate!=l&&(u&&(u=!1,ke.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),ke.info('Setting framerate of encoding "'.concat((h=d.rid)!==null&&h!==void 0?h:"",'" to ').concat(l)),d.maxFramerate=l)})}return o}function Xv(a){if(a)return a.sort((e,n)=>{const{encoding:r}=e,{encoding:o}=n;return r.maxBitrate>o.maxBitrate?1:r.maxBitrateo.maxFramerate?1:-1:0})}class Zy{constructor(e){const n=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!n)throw new Error("invalid scalability mode");if(this.spatial=parseInt(n[1]),this.temporal=parseInt(n[2]),n.length>3)switch(n[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=n[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function M1(a){return a.source===j.Source.ScreenShare||a.constraints.height&&Ii(a.constraints.height)>=1080?"maintain-resolution":"balanced"}const P1=5e3;class Lc extends Qy{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0;super(e,j.Kind.Video,n,r,o),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let l;try{l=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}const u=new Map(l.map(d=>[d.rid,d]));if(this.prevStats){let d=0;u.forEach((h,m)=>{var g;const y=(g=this.prevStats)===null||g===void 0?void 0:g.get(m);d+=Xc(h,y)}),this._currentBitrate=d}this.prevStats=u}),this.senderLock=new Ht}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var n;if(this.signalClient=e,!xt())return;const r=(n=this.sender)===null||n===void 0?void 0:n.getParameters();r&&(this.encodings=r.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.pauseUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0)l=m.value,d=!1,yield(u=l.sender)===null||u===void 0?void 0:u.replaceTrack(null)}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.resumeUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0){l=m.value,d=!1;const g=l;yield(u=g.sender)===null||u===void 0?void 0:u.replaceTrack(g.mediaStreamTrack)}}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{n()}})}setTrackMuted(e){super.setTrackMuted(e);for(const n of this.simulcastCodecs.values())n.mediaStreamTrack.enabled=!e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const n=[],r=yield this.sender.getStats();return r.forEach(o=>{var l;if(o.type==="outbound-rtp"){const u={type:"video",streamId:o.id,frameHeight:o.frameHeight,frameWidth:o.frameWidth,framesPerSecond:o.framesPerSecond,framesSent:o.framesSent,firCount:o.firCount,pliCount:o.pliCount,nackCount:o.nackCount,packetsSent:o.packetsSent,bytesSent:o.bytesSent,qualityLimitationReason:o.qualityLimitationReason,qualityLimitationDurations:o.qualityLimitationDurations,qualityLimitationResolutionChanges:o.qualityLimitationResolutionChanges,rid:(l=o.rid)!==null&&l!==void 0?l:o.id,retransmittedPacketsSent:o.retransmittedPacketsSent,targetBitrate:o.targetBitrate,timestamp:o.timestamp},d=r.get(o.remoteId);d&&(u.jitter=d.jitter,u.packetsLost=d.packetsLost,u.roundTripTime=d.roundTripTime),n.push(u)}}),n.sort((o,l)=>{var u,d;return((u=l.frameWidth)!==null&&u!==void 0?u:0)-((d=o.frameWidth)!==null&&d!==void 0?d:0)}),n})}setPublishingQuality(e){const n=[];for(let r=rn.LOW;r<=rn.HIGH;r+=1)n.push(new Bf({quality:r,enabled:r<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(n)}restartTrack(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u;let d;if(e){const y=Qc({video:e});typeof y.video!="boolean"&&(d=y.video)}yield this.restart(d);try{for(var h=!0,m=xi(this.simulcastCodecs.values()),g;g=yield m.next(),n=g.done,!n;h=!0){l=g.value,h=!1;const y=l;y.sender&&((u=y.sender.transport)===null||u===void 0?void 0:u.state)!=="closed"&&(y.mediaStreamTrack=this.mediaStreamTrack.clone(),yield y.sender.replaceTrack(y.mediaStreamTrack))}}catch(y){r={error:y}}finally{try{!h&&!n&&(o=m.return)&&(yield o.call(m))}finally{if(r)throw r.error}}})}setProcessor(e){const n=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return R(this,arguments,void 0,function(r){var o=this;let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var u,d,h,m,g,y;if(yield n.setProcessor.call(o,r,l),!((g=o.processor)===null||g===void 0)&&g.processedTrack)try{for(var b=!0,T=xi(o.simulcastCodecs.values()),C;C=yield T.next(),u=C.done,!u;b=!0)m=C.value,b=!1,yield(y=m.sender)===null||y===void 0?void 0:y.replaceTrack(o.processor.processedTrack)}catch(k){d={error:k}}finally{try{!b&&!u&&(h=T.return)&&(yield h.call(T))}finally{if(d)throw d.error}}}()})}setDegradationPreference(e){return R(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const n=this.sender.getParameters();n.degradationPreference=e,this.sender.setParameters(n)}catch(n){this.log.warn("failed to set degradationPreference",Object.assign({error:n},this.logContext))}})}addSimulcastTrack(e,n){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const r={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:n};return this.simulcastCodecs.set(e,r),r}setSimulcastTrackSender(e,n){const r=this.simulcastCodecs.get(e);r&&(r.sender=n,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},P1))}setPublishingCodecs(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u,d,h;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(e[0].qualities),[];this.subscribedCodecs=e;const m=[];try{for(n=!0,r=xi(e);o=yield r.next(),l=o.done,!l;n=!0){h=o.value,n=!1;const g=h;if(!this.codec||this.codec===g.codec)yield this.setPublishingLayers(g.qualities);else{const y=this.simulcastCodecs.get(g.codec);if(this.log.debug("try setPublishingCodec for ".concat(g.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:y})),!y||!y.sender){for(const b of g.qualities)if(b.enabled){m.push(g.codec);break}}else y.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(g.codec),this.logContext),yield Zv(y.sender,y.encodings,g.qualities,this.senderLock,this.log,this.logContext))}}}catch(g){u={error:g}}finally{try{!n&&!l&&(d=r.return)&&(yield d.call(r))}finally{if(u)throw u.error}}return m})}setPublishingLayers(e){return R(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield Zv(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&this.isInBackground&&this.source===j.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Zv(a,e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=yield r.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},l),{sender:a,qualities:n,senderEncodings:e}));try{const d=a.getParameters(),{encodings:h}=d;if(!h)return;if(h.length!==e.length){o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},l),{encodings:h,senderEncodings:e}));return}let m=!1;!1&&h[0].scalabilityMode||h.forEach((y,b)=>{var T;let C=(T=y.rid)!==null&&T!==void 0?T:"";C===""&&(C="q");const k=Jy(C),w=n.find(O=>O.quality===k);w&&y.active!==w.enabled&&(m=!0,y.active=w.enabled,o.debug("setting layer ".concat(w.quality," to ").concat(y.active?"enabled":"disabled"),l),br()&&(w.enabled?(y.scaleResolutionDownBy=e[b].scaleResolutionDownBy,y.maxBitrate=e[b].maxBitrate,y.maxFrameRate=e[b].maxFrameRate):(y.scaleResolutionDownBy=4,y.maxBitrate=10,y.maxFrameRate=2)))}),m&&(d.encodings=h,o.debug("setting encodings",Object.assign(Object.assign({},l),{encodings:d.encodings})),yield a.setParameters(d))}finally{u()}})}function Jy(a){switch(a){case"f":return rn.HIGH;case"h":return rn.MEDIUM;case"q":return rn.LOW;default:return rn.HIGH}}function Jv(a,e,n,r){if(!n)return[new pa({quality:rn.HIGH,width:a,height:e,bitrate:0,ssrc:0})];if(r){const o=n[0].scalabilityMode,l=new Zy(o),u=[],d=l.suffix=="h"?1.5:2,h=l.suffix=="h"?2:3;for(let m=0;m{var l,u,d;const h=(l=o.scaleResolutionDownBy)!==null&&l!==void 0?l:1;let m=Jy((u=o.rid)!==null&&u!==void 0?u:"");return new pa({quality:m,width:Math.ceil(a/h),height:Math.ceil(e/h),bitrate:(d=o.maxBitrate)!==null&&d!==void 0?d:0,ssrc:0})})}const Wv="_lossy",$v="_reliable",x1=2*1e3,Ld="leave-reconnect";var dn;(function(a){a[a.New=0]="New",a[a.Connected=1]="Connected",a[a.Disconnected=2]="Disconnected",a[a.Reconnecting=3]="Reconnecting",a[a.Closed=4]="Closed"})(dn||(dn={}));class N1 extends xn.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var n;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=dn.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=ke,this.handleDataChannel=r=>R(this,[r],void 0,function(o){var l=this;let{channel:u}=o;return function*(){if(u){if(u.label===$v)l.reliableDCSub=u;else if(u.label===Wv)l.lossyDCSub=u;else return;l.log.debug("on data channel ".concat(u.id,", ").concat(u.label),l.logContext),u.onmessage=l.handleDataMessage}}()}),this.handleDataMessage=r=>R(this,void 0,void 0,function*(){var o,l;const u=yield this.dataProcessLock.lock();try{let d;if(r.data instanceof ArrayBuffer)d=r.data;else if(r.data instanceof Blob)d=yield r.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:r.data}));return}const h=Mt.fromBinary(new Uint8Array(d));((o=h.value)===null||o===void 0?void 0:o.case)==="speaker"?this.emit(ne.ActiveSpeakersUpdate,h.value.value.speakers):(((l=h.value)===null||l===void 0?void 0:l.case)==="user"&&L1(h,h.value.value),this.emit(ne.DataPacketReceived,h))}finally{u()}}),this.handleDataError=r=>{const l=r.currentTarget.maxRetransmits===0?"lossy":"reliable";if(r instanceof ErrorEvent&&r.error){const{error:u}=r.error;this.log.error("DataChannel error on ".concat(l,": ").concat(r.message),Object.assign(Object.assign({},this.logContext),{error:u}))}else this.log.error("Unknown DataChannel error on ".concat(l),Object.assign(Object.assign({},this.logContext),{event:r}))},this.handleBufferedAmountLow=r=>{const l=r.currentTarget.maxRetransmits===0?_e.LOSSY:_e.RELIABLE;this.updateAndEmitDCBufferStatus(l)},this.handleDisconnect=(r,o)=>{if(this._isClosed)return;this.log.warn("".concat(r," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const l=h=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(h,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),this.close()},u=Date.now()-this.reconnectStart;let d=this.getNextRetryDelay({elapsedMs:u,retryCount:this.reconnectAttempts});if(d===null){l(u);return}r===Ld&&(d=0),this.log.debug("reconnecting in ".concat(d,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Tt.setTimeout(()=>this.attemptReconnect(o).finally(()=>this.reconnectTimeout=void 0),d)},this.waitForRestarted=()=>new Promise((r,o)=>{this.pcState===dn.Connected&&r();const l=()=>{this.off(ne.Disconnected,u),r()},u=()=>{this.off(ne.Restarted,l),o()};this.once(ne.Restarted,l),this.once(ne.Disconnected,u)}),this.updateAndEmitDCBufferStatus=r=>{const o=this.isBufferStatusLow(r);typeof o<"u"&&o!==this.dcBufferStatus.get(r)&&(this.dcBufferStatus.set(r,o),this.emit(ne.DCBufferStatusChanged,o,r))},this.isBufferStatusLow=r=>{const o=this.dataChannelForKind(r);if(o)return o.bufferedAmount<=o.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===He.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(sr.RR_SIGNAL_DISCONNECTED))},this.log=ei((n=e.loggerName)!==null&&n!==void 0?n:gn.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new Yf(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new Ht,this.dataProcessLock=new Ht,this.dcBufferStatus=new Map([[_e.LOSSY,!0],[_e.RELIABLE,!0]]),this.client.onParticipantUpdate=r=>this.emit(ne.ParticipantUpdate,r),this.client.onConnectionQuality=r=>this.emit(ne.ConnectionQualityUpdate,r),this.client.onRoomUpdate=r=>this.emit(ne.RoomUpdate,r),this.client.onSubscriptionError=r=>this.emit(ne.SubscriptionError,r),this.client.onSubscriptionPermissionUpdate=r=>this.emit(ne.SubscriptionPermissionUpdate,r),this.client.onSpeakersChanged=r=>this.emit(ne.SpeakersChanged,r),this.client.onStreamStateUpdate=r=>this.emit(ne.StreamStateChanged,r),this.client.onRequestResponse=r=>this.emit(ne.SignalRequestResponse,r)}get logContext(){var e,n,r,o,l,u,d,h;return{room:(n=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||n===void 0?void 0:n.name,roomID:(o=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.room)===null||o===void 0?void 0:o.sid,participant:(u=(l=this.latestJoinResponse)===null||l===void 0?void 0:l.participant)===null||u===void 0?void 0:u.identity,pID:(h=(d=this.latestJoinResponse)===null||d===void 0?void 0:d.participant)===null||h===void 0?void 0:h.sid}}join(e,n,r,o){return R(this,void 0,void 0,function*(){this.url=e,this.token=n,this.signalOpts=r,this.maxJoinAttempts=r.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const l=yield this.client.join(e,n,r,o);return this._isClosed=!1,this.latestJoinResponse=l,this.subscriberPrimary=l.subscriberPrimary,this.pcManager||(yield this.configure(l)),(!this.subscriberPrimary||l.fastPublish)&&this.negotiate(),this.clientConfiguration=l.clientConfiguration,l}catch(l){if(l instanceof Ie&&l.reason===Re.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts{r&&(r.close(),r.onbufferedamountlow=null,r.onclose=null,r.onclosing=null,r.onerror=null,r.onmessage=null,r.onopen=null)};n(this.lossyDC),n(this.lossyDCSub),n(this.reliableDC),n(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return R(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $n("a track with the same ID has already been published");return new Promise((n,r)=>{const o=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],r(new Ie("publication of local track timed out, no response from server",Re.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:l=>{clearTimeout(o),n(l)},reject:()=>{clearTimeout(o),r(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:n}=this.pendingTrackResolvers[e.track.id];n&&n(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(n){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:n}))}return!1}updateMuteStatus(e,n){this.client.sendMuteTrack(e,n)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return R(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return R(this,void 0,void 0,function*(){var n,r;if(this.pcManager&&this.pcManager.currentState!==We.NEW)return;this.participantSid=(n=e.participant)===null||n===void 0?void 0:n.sid;const o=this.makeRTCConfiguration(e);this.pcManager=new S1(o,e.subscriberPrimary,this.loggerOptions),this.emit(ne.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(l,u)=>{this.client.sendIceCandidate(l,u)},this.pcManager.onPublisherOffer=l=>{this.client.sendOffer(l)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(l,u,d)=>R(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(l),this.logContext),["closed","disconnected","failed"].includes(u)&&(this.publisherConnectionPromise=void 0),l===We.CONNECTED){const g=this.pcState===dn.New;this.pcState=dn.Connected,g&&this.emit(ne.Connected,e)}else l===We.FAILED&&this.pcState===dn.Connected&&(this.pcState=dn.Disconnected,this.handleDisconnect("peerconnection failed",d==="failed"?sr.RR_SUBSCRIBER_FAILED:sr.RR_PUBLISHER_FAILED));const h=this.client.isDisconnected||this.client.currentState===He.RECONNECTING,m=[We.FAILED,We.CLOSING,We.CLOSED].includes(l);h&&m&&!this._isClosed&&this.emit(ne.Offline)}),this.pcManager.onTrack=l=>{this.emit(ne.MediaTrackAdded,l.track,l.streams[0],l.receiver)},U1((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>R(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,n)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:n})),this.pcManager.addIceCandidate(e,n))},this.client.onOffer=e=>R(this,void 0,void 0,function*(){if(!this.pcManager)return;const n=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(n)}),this.client.onLocalTrackPublished=e=>{var n;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(n=e.track)===null||n===void 0?void 0:n.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:r}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],r(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(ne.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(ne.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,n)=>{this.emit(ne.RemoteMute,e,n)},this.client.onSubscribedQualityUpdate=e=>{this.emit(ne.SubscribedQualityUpdate,e)},this.client.onClose=()=>{this.handleDisconnect("signal",sr.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case ur.DISCONNECT:this.emit(ne.Disconnected,e==null?void 0:e.reason),this.close();break;case ur.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ld);break;case ur.RESUME:this.handleDisconnect(Ld)}}}makeRTCConfiguration(e){var n;const r=Object.assign({},this.rtcConfig);if(!((n=this.signalOpts)===null||n===void 0)&&n.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),r.encodedInsertableStreams=!0),e.iceServers&&!r.iceServers){const o=[];e.iceServers.forEach(l=>{const u={urls:l.urls};l.username&&(u.username=l.username),l.credential&&(u.credential=l.credential),o.push(u)}),r.iceServers=o}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Bs.ENABLED&&(r.iceTransportPolicy="relay"),r.sdpSemantics="unified-plan",r.continualGatheringPolicy="gather_continually",r}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(Wv,{ordered:!0,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel($v,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,n,r){return R(this,void 0,void 0,function*(){if(uf())return yield this.createTransceiverRTCRtpSender(e,n,r);if(df())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(uf())return this.createSimulcastTransceiverSender(e,n,r,o);if(df())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,n,r){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const o=[];e.mediaStream&&o.push(e.mediaStream),Er(e)&&(e.codec=n.videoCodec);const l={direction:"sendonly",streams:o};return r&&(l.sendEncodings=r),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,l)).sender})}createSimulcastTransceiverSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const l={direction:"sendonly"};o&&(l.sendEncodings=o);const u=yield this.pcManager.addPublisherTransceiver(n.mediaStreamTrack,l);if(r.videoCodec)return e.setSimulcastTrackSender(r.videoCodec,u.sender),u.sender})}createRTCRtpSender(e){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return R(this,void 0,void 0,function*(){var n,r,o;if(!this._isClosed){if(this.attemptingReconnect){ke.warn("already attempting reconnect, returning early",this.logContext);return}(((n=this.clientConfiguration)===null||n===void 0?void 0:n.resumeConnection)===Bs.DISABLED||((o=(r=this.pcManager)===null||r===void 0?void 0:r.currentState)!==null&&o!==void 0?o:We.NEW)===We.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(l){this.reconnectAttempts+=1;let u=!0;l instanceof ut?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:l})),u=!1):l instanceof or||(this.fullReconnectOnNext=!0),u?this.handleDisconnect("reconnect",sr.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(n){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:n}))}return null}restartConnection(e){return R(this,void 0,void 0,function*(){var n,r,o;try{if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let l;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new or;l=yield this.join(e??this.url,this.token,this.signalOpts)}catch(u){throw u instanceof Ie&&u.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):new or}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(ne.SignalRestarted,l),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");(n=this.regionUrlProvider)===null||n===void 0||n.resetAttempts(),this.emit(ne.Restarted)}catch(l){const u=yield(r=this.regionUrlProvider)===null||r===void 0?void 0:r.getNextBestRegionUrl();if(u){yield this.restartConnection(u);return}else throw(o=this.regionUrlProvider)===null||o===void 0||o.resetAttempts(),l}})}resumeConnection(e){return R(this,void 0,void 0,function*(){var n;if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");if(!this.pcManager)throw new ut("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Resuming);let r;try{this.setupSignalClientCallbacks(),r=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(o){let l="";throw o instanceof Error&&(l=o.message,this.log.error(o.message,Object.assign(Object.assign({},this.logContext),{error:o}))),o instanceof Ie&&o.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):o instanceof Ie&&o.reason===Re.LeaveRequest?o:new or(l)}if(this.emit(ne.SignalResumed),r){const o=this.makeRTCConfiguration(r);this.pcManager.updateConfiguration(o)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");this.client.setReconnected(),((n=this.reliableDC)===null||n===void 0?void 0:n.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(ne.Resumed)})}waitForPCInitialConnection(e,n){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(n,e)})}waitForPCReconnected(){return R(this,void 0,void 0,function*(){this.pcState=dn.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Nt(x1),!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=dn.Connected}catch(e){throw this.pcState=dn.Disconnected,new Ie("could not establish PC connection, ".concat(e.message),Re.InternalError)}})}publishRpcResponse(e,n,r,o){return R(this,void 0,void 0,function*(){const l=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcResponse",value:new V0({requestId:n,value:o?{case:"error",value:o.toProto()}:{case:"payload",value:r??""}})}});yield this.sendDataPacket(l,_e.RELIABLE)})}publishRpcAck(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcAck",value:new q0({requestId:n})}});yield this.sendDataPacket(r,_e.RELIABLE)})}sendDataPacket(e,n){return R(this,void 0,void 0,function*(){const r=e.toBinary();yield this.ensurePublisherConnected(n);const o=this.dataChannelForKind(n);o&&o.send(r),this.updateAndEmitDCBufferStatus(n)})}waitForBufferStatusLow(e){return new Promise((n,r)=>R(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))n();else{const o=()=>r("Engine closed");for(this.once(ne.Closing,o);!this.dcBufferStatus.get(e);)yield Nt(10);this.off(ne.Closing,o),n()}}))}ensureDataTransportConnected(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var l;if(!r.pcManager)throw new ut("PC manager is closed");const u=o?r.pcManager.subscriber:r.pcManager.publisher,d=o?"Subscriber":"Publisher";if(!u)throw new Ie("".concat(d," connection not set"),Re.InternalError);let h=!1;!o&&!r.dataChannelForKind(n,o)&&(r.createDataChannels(),h=!0),!h&&!o&&!r.pcManager.publisher.isICEConnected&&r.pcManager.publisher.getICEConnectionState()!=="checking"&&(h=!0),h&&r.negotiate();const m=r.dataChannelForKind(n,o);if((m==null?void 0:m.readyState)==="open")return;const g=new Date().getTime()+r.peerConnectionTimeout;for(;new Date().getTime()R(this,void 0,void 0,function*(){if(!this.pcManager){n(new of("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const r=new AbortController,o=()=>{r.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&n("cannot negotiate on closed engine"),this.on(ne.Closing,o),this.pcManager.publisher.once(mr.RTPVideoPayloadTypes,l=>{const u=new Map;l.forEach(d=>{const h=d.codec.toLowerCase();XE(h)&&u.set(d.payload,h)}),this.emit(ne.RTPVideoMapUpdate,u)});try{yield this.pcManager.negotiate(r),e()}catch(l){l instanceof of&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",sr.RR_UNKNOWN),n(l)}finally{this.off(ne.Closing,o)}}))})}dataChannelForKind(e,n){if(n){if(e===_e.LOSSY)return this.lossyDCSub;if(e===_e.RELIABLE)return this.reliableDCSub}else{if(e===_e.LOSSY)return this.lossyDC;if(e===_e.RELIABLE)return this.reliableDC}}sendSyncState(e,n){var r,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const l=this.pcManager.subscriber.getLocalDescription(),u=this.pcManager.subscriber.getRemoteDescription(),d=(o=(r=this.signalOpts)===null||r===void 0?void 0:r.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(g=>{g.isDesired!==d&&h.push(g.trackSid),g.isEnabled||m.push(g.trackSid)}),this.client.sendSyncState(new ay({answer:l?Nc({sdp:l.sdp,type:l.type}):void 0,offer:u?Nc({sdp:u.sdp,type:u.type}):void 0,subscription:new Fc({trackSids:h,subscribe:!d,participantTracks:[]}),publishTracks:i1(n),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],n=(r,o)=>{(r==null?void 0:r.id)!==void 0&&r.id!==null&&e.push(new ry({label:r.label,id:r.id,target:o}))};return n(this.dataChannelForKind(_e.LOSSY),mn.PUBLISHER),n(this.dataChannelForKind(_e.RELIABLE),mn.PUBLISHER),n(this.dataChannelForKind(_e.LOSSY,!0),mn.SUBSCRIBER),n(this.dataChannelForKind(_e.RELIABLE,!0),mn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Tt.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xt()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xt()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class or extends Error{}function U1(a){return a!==void 0&&a>13}function L1(a,e){const n=a.participantIdentity?a.participantIdentity:e.participantIdentity;a.participantIdentity=n,e.participantIdentity=n;const r=a.destinationIdentities.length!==0?a.destinationIdentities:e.destinationIdentities;a.destinationIdentities=r,e.destinationIdentities=r}class bf{constructor(e,n){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=n}updateToken(e){this.token=e}isCloud(){return hf(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return R(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const n=this.regionSettings.regions.filter(r=>!this.attemptedRegions.find(o=>o.url===r.url));if(n.length>0){const r=n[0];return this.attemptedRegions.push(r),ke.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return R(this,void 0,void 0,function*(){const n=yield fetch("".concat(I1(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(n.ok){const r=yield n.json();return this.lastUpdateAt=Date.now(),r}else throw new Ie("Could not fetch region settings: ".concat(n.statusText),n.status===401?Re.NotAllowed:Re.InternalError,n.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function I1(a){return"".concat(a.protocol.replace("ws","http"),"//").concat(a.host,"/settings")}class Wy{get info(){return this._info}constructor(e,n,r){this.reader=n,this.totalByteSize=r,this._info=e,this.bytesReceived=0}}class j1 extends Wy{handleChunkReceived(e){var n;this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>R(this,void 0,void 0,function*(){try{const{done:n,value:r}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(r),{done:!1,value:r.content})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l=new Set;try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0){o=h.value,u=!1;const m=o;l.add(m)}}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return Array.from(l)})}}class B1 extends Wy{constructor(e,n,r){super(e,n,r),this.receivedChunks=new Map}handleChunkReceived(e){var n;const r=Oc(e.chunkIndex),o=this.receivedChunks.get(r);if(o&&o.version>e.version)return;this.receivedChunks.set(r,e),this.bytesReceived+=e.content.byteLength;const l=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,l)}[Symbol.asyncIterator](){const e=this.reader.getReader(),n=new TextDecoder;return{next:()=>R(this,void 0,void 0,function*(){try{const{done:r,value:o}=yield e.read();return r?{done:!0,value:void 0}:(this.handleChunkReceived(o),{done:!1,value:n.decode(o.content)})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l="";try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0)o=h.value,u=!1,l+=o}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return l})}}class z1{constructor(e,n,r){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=r,this.info=n}write(e){return this.defaultWriter.write(e)}close(){return R(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class q1 extends z1{}class $y extends j{constructor(e,n,r,o,l){super(e,r,l),this.sid=n,this.receiver=o}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const n=r=>{r.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",n),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(W.Ended,this))};e.addEventListener("removetrack",n)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),Jf)),a1()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var n;this.timeSyncHandle=requestAnimationFrame(()=>e());const r=(n=this.receiver)===null||n===void 0?void 0:n.getSynchronizationSources()[0];if(r){const{timestamp:o,rtpTimestamp:l}=r;l&&this.rtpTimestamp!==l&&(this.emit(W.TimeSyncUpdate,{timestamp:o,rtpTimestamp:l}),this.rtpTimestamp=l)}};e()}}class eb extends $y{constructor(e,n,r,o,l,u){super(e,n,j.Kind.Audio,r,u),this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const d=yield this.getReceiverStats();d&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(d,this.prevStats)),this.prevStats=d}),this.audioContext=o,this.webAudioPluginNodes=[],l&&(this.sinkId=l.deviceId)}setVolume(e){var n;for(const r of this.attachedElements)this.audioContext?(n=this.gainNode)===null||n===void 0||n.gain.setTargetAtTime(e,0,.1):r.volume=e;An()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(An())return 1;let e=0;return this.attachedElements.forEach(n=>{n.volume>e&&(e=n.volume)}),e}setSinkId(e){return R(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(n=>{if(ff(n))return n.setSinkId(e)}))})}attach(e){const n=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&ff(e)&&e.setSinkId(this.sinkId),this.audioContext&&n&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let n;return e?(n=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(n=super.detach(),this.disconnectWebAudio()),n}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,n){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(n.srcObject);let r=this.sourceNode;this.webAudioPluginNodes.forEach(o=>{r.connect(o),r=o}),this.gainNode=e.createGain(),r.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(W.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(o=>{this.emit(W.AudioPlaybackFailed,o)})}disconnectWebAudio(){var e,n;(e=this.gainNode)===null||e===void 0||e.disconnect(),(n=this.sourceNode)===null||n===void 0||n.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n;return e.forEach(r=>{r.type==="inbound-rtp"&&(n={type:"audio",streamId:r.id,timestamp:r.timestamp,jitter:r.jitter,bytesReceived:r.bytesReceived,concealedSamples:r.concealedSamples,concealmentEvents:r.concealmentEvents,silentConcealedSamples:r.silentConcealedSamples,silentConcealmentEvents:r.silentConcealmentEvents,totalAudioEnergy:r.totalAudioEnergy,totalSamplesDuration:r.totalSamplesDuration})}),n})}}const Id=100;class V1 extends $y{constructor(e,n,r,o,l){super(e,n,j.Kind.Video,r,l),this.elementInfos=[],this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const u=yield this.getReceiverStats();u&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.debouncedHandleResize=Qf(()=>{this.updateDimensions()},Id),this.adaptiveStreamSettings=o}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(n=>{e?fr(this._mediaStreamTrack,n):lr(this._mediaStreamTrack,n)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(n=>n.element===e)===void 0){const n=new H1(e);this.observeElementInfo(n)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(n=>n===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const n=this.elementInfos.filter(r=>r===e);for(const r of n)r.stopObserving();this.elementInfos=this.elementInfos.filter(r=>r!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let n=[];if(e)return this.stopObservingElement(e),super.detach(e);n=super.detach();for(const r of n)this.stopObservingElement(r);return n}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n,r="",o=new Map;return e.forEach(l=>{l.type==="inbound-rtp"?(r=l.codecId,n={type:"video",streamId:l.id,framesDecoded:l.framesDecoded,framesDropped:l.framesDropped,framesReceived:l.framesReceived,packetsReceived:l.packetsReceived,packetsLost:l.packetsLost,frameWidth:l.frameWidth,frameHeight:l.frameHeight,pliCount:l.pliCount,firCount:l.firCount,nackCount:l.nackCount,jitter:l.jitter,timestamp:l.timestamp,bytesReceived:l.bytesReceived,decoderImplementation:l.decoderImplementation}):l.type==="codec"&&o.set(l.id,l)}),n&&r!==""&&o.get(r)&&(n.mimeType=o.get(r).mimeType),n})}stopObservingElement(e){const n=this.elementInfos.filter(r=>r.element===e);for(const r of n)this.stopObservingElementInfo(r)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,n;const r=this.elementInfos.reduce((d,h)=>Math.max(d,h.visibilityChangedAt||0),0),o=!((n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&n!==void 0)||n?this.isInBackground:!1,l=this.elementInfos.some(d=>d.pictureInPicture),u=this.elementInfos.some(d=>d.visible)&&!o||l;if(this.lastVisible!==u){if(!u&&Date.now()-r{this.updateVisibility()},Id);return}this.lastVisible=u,this.emit(W.VisibilityChanged,u,this)}}updateDimensions(){var e,n;let r=0,o=0;const l=this.getPixelDensity();for(const u of this.elementInfos){const d=u.width()*l,h=u.height()*l;d+h>r+o&&(r=d,o=h)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===r&&((n=this.lastDimensions)===null||n===void 0?void 0:n.height)===o||(this.lastDimensions={width:r,height:o},this.emit(W.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return n==="screen"?Pv():n||(Pv()>2?2:1)}}class H1{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,n){this.onVisibilityChanged=r=>{var o;const{target:l,isIntersecting:u}=r;l===this.element&&(this.isIntersecting=u,this.isPiP=Ms(this.element),this.visibilityChangedAt=Date.now(),(o=this.handleVisibilityChanged)===null||o===void 0||o.call(this))},this.onEnterPiP=()=>{var r,o,l;(o=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||o===void 0||o.addEventListener("pagehide",this.onLeavePiP),this.isPiP=Ms(this.element),(l=this.handleVisibilityChanged)===null||l===void 0||l.call(this)},this.onLeavePiP=()=>{var r;this.isPiP=Ms(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.element=e,this.isIntersecting=n??Sf(e),this.isPiP=xt()&&Ms(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,n,r;this.isIntersecting=Sf(this.element),this.isPiP=Ms(this.element),this.element.handleResize=()=>{var o;(o=this.handleResize)===null||o===void 0||o.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Nv().observe(this.element),xv().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(r=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,n,r,o,l;(e=Nv())===null||e===void 0||e.unobserve(this.element),(n=xv())===null||n===void 0||n.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(r=window.documentPictureInPicture)===null||r===void 0||r.removeEventListener("enter",this.onEnterPiP),(l=(o=window.documentPictureInPicture)===null||o===void 0?void 0:o.window)===null||l===void 0||l.removeEventListener("pagehide",this.onLeavePiP)}}function Ms(a){var e,n;return document.pictureInPictureElement===a?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sf(a,(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window):!1}function Sf(a,e){const n=e||window;let r=a.offsetTop,o=a.offsetLeft;const l=a.offsetWidth,u=a.offsetHeight,{hidden:d}=a,{display:h}=getComputedStyle(a);for(;a.offsetParent;)a=a.offsetParent,r+=a.offsetTop,o+=a.offsetLeft;return rn.pageYOffset&&o+l>n.pageXOffset&&!d&&h!=="none"}class Pi extends xn.EventEmitter{constructor(e,n,r,o){var l;super(),this.metadataMuted=!1,this.encryption=Vt.NONE,this.log=ke,this.handleMuted=()=>{this.emit(W.Muted)},this.handleUnmuted=()=>{this.emit(W.Unmuted)},this.log=ei((l=o==null?void 0:o.loggerName)!==null&&l!==void 0?l:gn.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=n,this.trackName=r,this.source=j.Source.Unknown}setTrack(e){this.track&&(this.track.off(W.Muted,this.handleMuted),this.track.off(W.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(W.Muted,this.handleMuted),e.on(W.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Me(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Vt.NONE}get audioTrack(){if(ti(this.track))return this.track}get videoTrack(){if(Er(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=j.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===j.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(a){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(a.SubscriptionStatus||(a.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(a.PermissionStatus||(a.PermissionStatus={}))})(Pi);class Tf extends Pi{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.handleTrackEnded=()=>{this.emit(W.Ended)},this.updateInfo(n),this.setTrack(r)}setTrack(e){this.track&&this.track.off(W.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(W.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ti(this.track)){const n=this.track.getSourceTrackSettings(),r=new Set;return n.autoGainControl&&r.add(On.TF_AUTO_GAIN_CONTROL),n.echoCancellation&&r.add(On.TF_ECHO_CANCELLATION),n.noiseSuppression&&r.add(On.TF_NOISE_SUPPRESSION),n.channelCount&&n.channelCount>1&&r.add(On.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||r.add(On.TF_NO_DTX),this.track.enhancedNoiseCancellation&&r.add(On.TF_ENHANCED_NOISE_CANCELLATION),Array.from(r.values())}else return[]}}var Ni;(function(a){a.Excellent="excellent",a.Good="good",a.Poor="poor",a.Lost="lost",a.Unknown="unknown"})(Ni||(Ni={}));function G1(a){switch(a){case xs.EXCELLENT:return Ni.Excellent;case xs.GOOD:return Ni.Good;case xs.POOR:return Ni.Poor;case xs.LOST:return Ni.Lost;default:return Ni.Unknown}}class tb extends xn.EventEmitter{get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===qs.AGENT}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,n,r,o,l,u){let d=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qs.STANDARD;var h;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Ni.Unknown,this.log=ke,this.log=ei((h=u==null?void 0:u.loggerName)!==null&&h!==void 0?h:gn.Participant),this.loggerOptions=u,this.setMaxListeners(100),this.sid=e,this.identity=n,this.name=r,this.metadata=o,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=d,this._attributes=l??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,n]of this.trackPublications)if(n.source===e)return n}getTrackPublicationByName(e){for(const[,n]of this.trackPublications)if(n.trackName===e)return n}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const n=this.getTrackPublication(j.Source.Camera);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const n=this.getTrackPublication(j.Source.Microphone);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(j.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,this.log.trace("update participant info",Object.assign(Object.assign({},this.logContext),{info:e})),!0)}_setMetadata(e){const n=this.metadata!==e,r=this.metadata;this.metadata=e,n&&this.emit(F.ParticipantMetadataChanged,r)}_setName(e){const n=this.name!==e;this.name=e,n&&this.emit(F.ParticipantNameChanged,e)}_setAttributes(e){const n=r1(this.attributes,e);this._attributes=e,Object.keys(n).length>0&&this.emit(F.AttributesChanged,n)}setPermissions(e){var n,r,o,l,u,d;const h=this.permissions,m=e.canPublish!==((n=this.permissions)===null||n===void 0?void 0:n.canPublish)||e.canSubscribe!==((r=this.permissions)===null||r===void 0?void 0:r.canSubscribe)||e.canPublishData!==((o=this.permissions)===null||o===void 0?void 0:o.canPublishData)||e.hidden!==((l=this.permissions)===null||l===void 0?void 0:l.hidden)||e.recorder!==((u=this.permissions)===null||u===void 0?void 0:u.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((g,y)=>{var b;return g!==((b=this.permissions)===null||b===void 0?void 0:b.canPublishSources[y])})||e.canSubscribeMetrics!==((d=this.permissions)===null||d===void 0?void 0:d.canSubscribeMetrics);return this.permissions=e,m&&this.emit(F.ParticipantPermissionsChanged,h),m}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(F.IsSpeakingChanged,e))}setConnectionQuality(e){const n=this._connectionQuality;this._connectionQuality=G1(e),n!==this._connectionQuality&&this.emit(F.ConnectionQualityChanged,this._connectionQuality)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(n=>ti(n.track)&&n.track.setAudioContext(e))}addTrackPublication(e){e.on(W.Muted,()=>{this.emit(F.TrackMuted,e)}),e.on(W.Unmuted,()=>{this.emit(F.TrackUnmuted,e)});const n=e;switch(n.track&&(n.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case j.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case j.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function F1(a){var e,n,r;if(!a.participantSid&&!a.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new ny({participantIdentity:(e=a.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(n=a.participantSid)!==null&&n!==void 0?n:"",allTracks:(r=a.allowAll)!==null&&r!==void 0?r:!1,trackSids:a.allowedTrackSids||[]})}const hc=15e3;class Y1 extends tb{constructor(e,n,r,o,l){super(e,n,void 0,void 0,void 0,{loggerName:o.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Vt.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Vy)},this.handleReconnected=()=>{var u,d;(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.resolve)===null||d===void 0||d.call(u),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var u,d;this.reconnectFuture&&(this.reconnectFuture.promise.catch(h=>this.log.warn(h.message,this.logContext)),(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.reject)===null||d===void 0||d.call(u,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=u=>{const{requestId:d,reason:h,message:m}=u,g=this.pendingSignalRequests.get(d);g&&(h!==zf.OK&&g.reject(new Ov(m,h)),this.pendingSignalRequests.delete(d))},this.handleDataPacket=u=>{switch(u.value.case){case"rpcResponse":let d=u.value.value,h=null,m=null;d.value.case==="payload"?h=d.value.value:d.value.case==="error"&&(m=et.fromProto(d.value.value)),this.handleIncomingRpcResponse(d.requestId,h,m);break;case"rpcAck":let g=u.value.value;this.handleIncomingRpcAck(g.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(u=>F1(u)))},this.onTrackUnmuted=u=>{this.onTrackMuted(u,u.isUpstreamPaused)},this.onTrackMuted=(u,d)=>{if(d===void 0&&(d=!0),!u.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Me(u)));return}this.engine.updateMuteStatus(u.sid,d)},this.onTrackUpstreamPaused=u=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,!0)},this.onTrackUpstreamResumed=u=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,u.isMuted)},this.onTrackFeatureUpdate=u=>{const d=this.audioTrackPublications.get(u.sid);if(!d){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(u.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(d.trackSid,d.getTrackFeatures())},this.handleSubscribedQualityUpdate=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;if(!(!((y=this.roomOptions)===null||y===void 0)&&y.dynacast))return;const T=this.videoTrackPublications.get(u.trackSid);if(!T){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}if(u.subscribedCodecs.length>0){if(!T.videoTrack)return;const O=yield T.videoTrack.setPublishingCodecs(u.subscribedCodecs);try{for(var C=!0,k=xi(O),w;w=yield k.next(),d=w.done,!d;C=!0){g=w.value,C=!1;const V=g;IE(V)&&(this.log.debug("publish ".concat(V," for ").concat(T.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Me(T))),yield this.publishAdditionalCodecForTrack(T.videoTrack,V,T.options))}}catch(V){h={error:V}}finally{try{!C&&!d&&(m=k.return)&&(yield m.call(k))}finally{if(h)throw h.error}}}else u.subscribedQualities.length>0&&(yield(b=T.videoTrack)===null||b===void 0?void 0:b.setPublishingLayers(u.subscribedQualities))}),this.handleLocalTrackUnpublished=u=>{const d=this.trackPublications.get(u.trackSid);if(!d){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}this.unpublishTrack(d.track)},this.handleTrackEnded=u=>R(this,void 0,void 0,function*(){if(u.source===j.Source.ScreenShare||u.source===j.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Me(u))),this.unpublishTrack(u);else if(u.isUserProvided)yield u.mute();else if(ha(u)||Ai(u))try{if(xt())try{const d=yield navigator==null?void 0:navigator.permissions.query({name:u.source===j.Source.Camera?"camera":"microphone"});if(d&&d.state==="denied")throw this.log.warn("user has revoked access to ".concat(u.source),Object.assign(Object.assign({},this.logContext),Me(u))),d.onchange=()=>{d.state!=="denied"&&(u.isMuted||u.restartTrack(),d.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}u.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Me(u))),ha(u)?yield u.restartTrack({deviceId:"default"}):yield u.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Me(u))),yield u.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=r,this.roomOptions=o,this.setupEngine(r),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=l}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Vt.NONE}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setupEngine(e){this.engine=e,this.engine.on(ne.RemoteMute,(n,r)=>{const o=this.trackPublications.get(n);!o||!o.track||(r?o.mute():o.unmute())}),this.engine.on(ne.Connected,this.handleReconnected).on(ne.SignalRestarted,this.handleReconnected).on(ne.SignalResumed,this.handleReconnected).on(ne.Restarting,this.handleReconnecting).on(ne.Resuming,this.handleReconnecting).on(ne.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(ne.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(ne.Disconnected,this.handleDisconnected).on(ne.SignalRequestResponse,this.handleSignalRequestResponse).on(ne.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return R(this,arguments,void 0,function(n){var r=this;let{metadata:o,name:l,attributes:u}=n;return function*(){return new Promise((d,h)=>R(r,void 0,void 0,function*(){var m,g;try{let y=!1;const b=yield this.engine.client.sendUpdateLocalMetadata((m=o??this.metadata)!==null&&m!==void 0?m:"",(g=l??this.name)!==null&&g!==void 0?g:"",u),T=performance.now();for(this.pendingSignalRequests.set(b,{resolve:d,reject:C=>{h(C),y=!0},values:{name:l,metadata:o,attributes:u}});performance.now()-T<5e3&&!y;){if((!l||this.name===l)&&(!o||this.metadata===o)&&(!u||Object.entries(u).every(C=>{let[k,w]=C;return this.attributes[k]===w||w===""&&!this.attributes[k]}))){this.pendingSignalRequests.delete(b),d();return}yield Nt(50)}h(new Ov("Request to update local metadata timed out","TimeoutError"))}catch(y){y instanceof Error&&h(y)}}))}()})}setCameraEnabled(e,n,r){return this.setTrackEnabled(j.Source.Camera,e,n,r)}setMicrophoneEnabled(e,n,r){return this.setTrackEnabled(j.Source.Microphone,e,n,r)}setScreenShareEnabled(e,n,r){return this.setTrackEnabled(j.Source.ScreenShare,e,n,r)}setPermissions(e){const n=this.permissions,r=super.setPermissions(e);return r&&n&&this.emit(F.ParticipantPermissionsChanged,n),r}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){this.encryptionType=e?Vt.GCM:Vt.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,n,r,o){return R(this,void 0,void 0,function*(){var l,u;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:n})),this.republishPromise&&(yield this.republishPromise);let d=this.getTrackPublication(e);if(n)if(d)yield d.unmute();else{let h;if(this.pendingPublishing.has(e)){const m=yield this.waitForPendingPublicationOfSource(e);return m||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield m==null?void 0:m.unmute(),m}this.pendingPublishing.add(e);try{switch(e){case j.Source.Camera:h=yield this.createTracks({video:(l=r)!==null&&l!==void 0?l:!0});break;case j.Source.Microphone:h=yield this.createTracks({audio:(u=r)!==null&&u!==void 0?u:!0});break;case j.Source.ScreenShare:h=yield this.createScreenTracks(Object.assign({},r));break;default:throw new $n(e)}}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m instanceof Error&&this.emit(F.MediaDevicesError,m),this.pendingPublishing.delete(e),m}try{const m=[];for(const y of h)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Me(y))),m.push(this.publishTrack(y,o));[d]=yield Promise.all(m)}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m}finally{this.pendingPublishing.delete(e)}}else if(!(d!=null&&d.track)&&this.pendingPublishing.has(e)&&(d=yield this.waitForPendingPublicationOfSource(e),d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),d&&d.track)if(e===j.Source.ScreenShare){d=yield this.unpublishTrack(d.track);const h=this.getTrackPublication(j.Source.ScreenShareAudio);h&&h.track&&this.unpublishTrack(h.track)}else yield d.mute();return d})}enableCameraAndMicrophone(){return R(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(j.Source.Camera)||this.pendingPublishing.has(j.Source.Microphone))){this.pendingPublishing.add(j.Source.Camera),this.pendingPublishing.add(j.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(n=>this.publishTrack(n)))}finally{this.pendingPublishing.delete(j.Source.Camera),this.pendingPublishing.delete(j.Source.Microphone)}}})}createTracks(e){return R(this,void 0,void 0,function*(){var n,r;e??(e={});const o=Hy(e,(n=this.roomOptions)===null||n===void 0?void 0:n.audioCaptureDefaults,(r=this.roomOptions)===null||r===void 0?void 0:r.videoCaptureDefaults),{audioProcessor:l,videoProcessor:u,optionsWithoutProcessor:d}=Ff(o),h=Qc(d);let m;try{m=yield navigator.mediaDevices.getUserMedia(h)}catch(g){throw g instanceof Error&&(h.audio&&(this.microphoneError=g),h.video&&(this.cameraError=g)),g}return h.audio&&(this.microphoneError=void 0,this.emit(F.AudioStreamAcquired)),h.video&&(this.cameraError=void 0),Promise.all(m.getTracks().map(g=>R(this,void 0,void 0,function*(){const y=g.kind==="audio";let b;const T=y?h.audio:h.video;typeof T!="boolean"&&(b=T);const C=Xy(g,b,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone,C.setAudioContext(this.audioContext)),C.mediaStream=m,ti(C)&&l?yield C.setProcessor(l):Er(C)&&u&&(yield C.setProcessor(u)),C})))})}createScreenTracks(e){return R(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Vf("getDisplayMedia not supported");e.resolution===void 0&&!HE()&&(e.resolution=Hf.h1080fps30.resolution);const n=n1(e),r=yield navigator.mediaDevices.getDisplayMedia(n),o=r.getVideoTracks();if(o.length===0)throw new $n("no video track found");const l=new Lc(o[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=j.Source.ScreenShare,e.contentHint&&(l.mediaStreamTrack.contentHint=e.contentHint);const u=[l];if(r.getAudioTracks().length>0){this.emit(F.AudioStreamAcquired);const d=new Uc(r.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});d.source=j.Source.ScreenShareAudio,u.push(d)}return u})}publishTrack(e,n){return R(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,n)})}publishOrRepublishTrack(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g;ha(r)&&r.setAudioContext(l.audioContext),yield(d=l.reconnectFuture)===null||d===void 0?void 0:d.promise,l.republishPromise&&!u&&(yield l.republishPromise),hr(r)&&l.pendingPublishPromises.has(r)&&(yield l.pendingPublishPromises.get(r));let y;if(r instanceof MediaStreamTrack)y=r.getConstraints();else{y=r.constraints;let O;switch(r.source){case j.Source.Microphone:O="audioinput";break;case j.Source.Camera:O="videoinput"}O&&l.activeDeviceMap.has(O)&&(y=Object.assign(Object.assign({},y),{deviceId:l.activeDeviceMap.get(O)}))}if(r instanceof MediaStreamTrack)switch(r.kind){case"audio":r=new Uc(r,y,!0,l.audioContext,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;case"video":r=new Lc(r,y,!0,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;default:throw new $n("unsupported MediaStreamTrack kind ".concat(r.kind))}else r.updateLoggerOptions({loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});let b;if(l.trackPublications.forEach(O=>{O.track&&O.track===r&&(b=O)}),b)return l.log.warn("track has already been published, skipping",Object.assign(Object.assign({},l.logContext),Me(b))),b;const T="channelCount"in r.mediaStreamTrack.getSettings()&&r.mediaStreamTrack.getSettings().channelCount===2||r.mediaStreamTrack.getConstraints().channelCount===2,C=(h=o==null?void 0:o.forceStereo)!==null&&h!==void 0?h:T;C&&(o||(o={}),o.dtx===void 0&&l.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},l.logContext),Me(r))),o.red===void 0&&l.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(m=o.dtx)!==null&&m!==void 0||(o.dtx=!1),(g=o.red)!==null&&g!==void 0||(o.red=!1));const k=Object.assign(Object.assign({},l.roomOptions.publishDefaults),o);!GE()&&l.roomOptions.e2ee&&(l.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},l.logContext)),k.simulcast=!1),k.source&&(r.source=k.source);const w=l.publish(r,k,C);l.pendingPublishPromises.set(r,w);try{return yield w}catch(O){throw O}finally{l.pendingPublishPromises.delete(r)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Me(e))),!1;const{canPublish:n,canPublishSources:r}=this.permissions;return n&&(r.length===0||r.map(o=>s1(o)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Me(e))),!1)}publish(e,n,r){return R(this,void 0,void 0,function*(){var o,l,u,d,h,m,g,y,b,T;if(!this.hasPermissionsToPublish(e))throw new wE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(_=>hr(e)&&_.source===e.source)&&e.source!==j.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),Me(e))),n.stopMicTrackOnMute&&ti(e)&&(e.stopOnMute=!0),e.source===j.Source.ScreenShare&&br()&&(n.simulcast=!1),n.videoCodec==="av1"&&!zE()&&(n.videoCodec=void 0),n.videoCodec==="vp9"&&!qE()&&(n.videoCodec=void 0),n.videoCodec===void 0&&(n.videoCodec=gf),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(_=>n.videoCodec===Dc(_.mime))||(n.videoCodec=Dc(this.enabledPublishVideoCodecs[0].mime)));const k=n.videoCodec;e.on(W.Muted,this.onTrackMuted),e.on(W.Unmuted,this.onTrackUnmuted),e.on(W.Ended,this.handleTrackEnded),e.on(W.UpstreamPaused,this.onTrackUpstreamPaused),e.on(W.UpstreamResumed,this.onTrackUpstreamResumed),e.on(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const w=new Jd({cid:e.mediaStreamTrack.id,name:n.name,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),disableDtx:!(!((o=n.dtx)!==null&&o!==void 0)||o),encryption:this.encryptionType,stereo:r,disableRed:this.isE2EEEnabled||!(!((l=n.red)!==null&&l!==void 0)||l),stream:n==null?void 0:n.stream,backupCodecPolicy:n==null?void 0:n.backupCodecPolicy});let O;if(e.kind===j.Kind.Video){let _={width:0,height:0};try{_=yield e.waitForDimensions()}catch{const $=(d=(u=this.roomOptions.videoCaptureDefaults)===null||u===void 0?void 0:u.resolution)!==null&&d!==void 0?d:Hs.h720.resolution;_={width:$.width,height:$.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{dims:_}))}w.width=_.width,w.height=_.height,Ai(e)&&(Is(k)&&(e.source===j.Source.ScreenShare&&(n.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),Me(e))))),n.scalabilityMode=(h=n.scalabilityMode)!==null&&h!==void 0?h:"L3T3_KEY"),w.simulcastCodecs=[new Zd({codec:k,cid:e.mediaStreamTrack.id})],n.backupCodec===!0&&(n.backupCodec={codec:gf}),n.backupCodec&&k!==n.backupCodec.codec&&w.encryption===Vt.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new Zd({codec:n.backupCodec.codec,cid:""})))),O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n),w.layers=Jv(w.width,w.height,O,Is(n.videoCodec))}else e.kind===j.Kind.Audio&&(O=[{maxBitrate:(m=n.audioPreset)===null||m===void 0?void 0:m.maxBitrate,priority:(y=(g=n.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&y!==void 0?y:"high",networkPriority:(T=(b=n.audioPreset)===null||b===void 0?void 0:b.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const V=()=>R(this,void 0,void 0,function*(){var _,H,$;if(!this.engine.pcManager)throw new ut("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,n,O),Ai(e)&&((_=n.degradationPreference)!==null&&_!==void 0||(n.degradationPreference=M1(e)),e.setDegradationPreference(n.degradationPreference)),O)if(br()&&e.kind===j.Kind.Audio){let ie;for(const X of this.engine.pcManager.publisher.getTransceivers())if(X.sender===e.sender){ie=X;break}ie&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:ie,codec:"opus",maxbr:!((H=O[0])===null||H===void 0)&&H.maxBitrate?O[0].maxBitrate/1e3:0})}else e.codec&&Is(e.codec)&&(!(($=O[0])===null||$===void 0)&&$.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:O[0].maxBitrate/1e3});yield this.engine.negotiate()});let Q;if(this.enabledPublishVideoCodecs.length>0)Q=(yield Promise.all([this.engine.addTrack(w),V()]))[0];else{Q=yield this.engine.addTrack(w);let _;if(Q.codecs.forEach(H=>{_===void 0&&(_=H.mimeType)}),_&&e.kind===j.Kind.Video){const H=Dc(_);H!==k&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{codec:H})),n.videoCodec=H,O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n))}yield V()}const U=new Tf(e.kind,Q,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return U.options=n,e.sid=Q.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:O,trackInfo:Q})),Ai(e)?e.startMonitor(this.engine.client):ha(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(F.LocalTrackPublished,U),U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,n,r){return R(this,void 0,void 0,function*(){var o;if(this.encryptionType!==Vt.NONE)return;let l;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(l=T)}),!l)throw new $n("track is not published");if(!Ai(e))throw new $n("track is not a video track");const u=Object.assign(Object.assign({},(o=this.roomOptions)===null||o===void 0?void 0:o.publishDefaults),r),d=O1(e,n,u);if(!d){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Me(e)));return}const h=e.addSimulcastTrack(n,d);if(!h)return;const m=new Jd({cid:h.mediaStreamTrack.id,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:u.videoCodec,cid:h.mediaStreamTrack.id}]});if(m.layers=Jv(m.width,m.height,d),!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const g=()=>R(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,h,u,d),yield this.engine.negotiate()}),b=(yield Promise.all([this.engine.addTrack(m),g()]))[0];this.log.debug("published ".concat(n," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:d,trackInfo:b}))})}unpublishTrack(e,n){return R(this,void 0,void 0,function*(){var r,o;if(hr(e)){const m=this.pendingPublishPromises.get(e);m&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Me(e))),yield m)}const l=this.getPublicationForTrack(e),u=l?Me(l):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),u)),!l||!l.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),u));return}e=l.track,e.off(W.Muted,this.onTrackMuted),e.off(W.Unmuted,this.onTrackUnmuted),e.off(W.Ended,this.handleTrackEnded),e.off(W.UpstreamPaused,this.onTrackUpstreamPaused),e.off(W.UpstreamResumed,this.onTrackUpstreamResumed),e.off(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),n===void 0&&(n=(o=(r=this.roomOptions)===null||r===void 0?void 0:r.stopLocalTrackOnUnpublish)!==null&&o!==void 0?o:!0),n?e.stop():e.stopMonitor();let d=!1;const h=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentStatethis.unpublishTrack(r)))).filter(r=>!!r)})}republishAllTracks(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){r.republishPromise&&(yield r.republishPromise),r.republishPromise=new Promise((l,u)=>R(r,void 0,void 0,function*(){try{const d=[];this.trackPublications.forEach(h=>{h.track&&(n&&(h.options=Object.assign(Object.assign({},h.options),n)),d.push(h))}),yield Promise.all(d.map(h=>R(this,void 0,void 0,function*(){const m=h.track;yield this.unpublishTrack(m,!1),o&&!m.isMuted&&m.source!==j.Source.ScreenShare&&m.source!==j.Source.ScreenShareAudio&&(ha(m)||Ai(m))&&!m.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:h.trackSid})),yield m.restartTrack()),yield this.publishOrRepublishTrack(m,h.options,!0)}))),l()}catch(d){u(d)}finally{this.republishPromise=void 0}})),yield r.republishPromise}()})}publishData(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const l=o.reliable?_e.RELIABLE:_e.LOSSY,u=o.destinationIdentities,d=o.topic,h=new Mt({kind:l,value:{case:"user",value:new j0({participantIdentity:r.identity,payload:n,destinationIdentities:u,topic:d})}});yield r.engine.sendDataPacket(h,l)}()})}publishDtmf(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({kind:_e.RELIABLE,value:{case:"sipDtmf",value:new B0({code:e,digit:n})}});yield this.engine.sendDataPacket(r,_e.RELIABLE)})}sendChatMessage(e,n){return R(this,void 0,void 0,function*(){const r={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:n==null?void 0:n.attachments},o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}editChatMessage(e,n){return R(this,void 0,void 0,function*(){const r=Object.assign(Object.assign({},n),{message:e,editTimestamp:Date.now()}),o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp),editTimestamp:Ge.parse(r.editTimestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}sendText(e,n){return R(this,void 0,void 0,function*(){var r;const o=crypto.randomUUID(),u=new TextEncoder().encode(e).byteLength,d=(r=n==null?void 0:n.attachments)===null||r===void 0?void 0:r.map(()=>crypto.randomUUID()),h=new Array(d?d.length+1:1).fill(0),m=(y,b)=>{var T;h[b]=y;const C=h.reduce((k,w)=>k+w,0);(T=n==null?void 0:n.onProgress)===null||T===void 0||T.call(n,C)},g=yield this.streamText({streamId:o,totalSize:u,destinationIdentities:n==null?void 0:n.destinationIdentities,topic:n==null?void 0:n.topic,attachedStreamIds:d,attributes:n==null?void 0:n.attributes});return yield g.write(e),m(1,0),yield g.close(),n!=null&&n.attachments&&d&&(yield Promise.all(n.attachments.map((y,b)=>R(this,void 0,void 0,function*(){return this._sendFile(d[b],y,{topic:n.topic,mimeType:y.type,onProgress:T=>{m(T,b+1)}})})))),g.info})}streamText(e){return R(this,void 0,void 0,function*(){var n,r;const o=(n=e==null?void 0:e.streamId)!==null&&n!==void 0?n:crypto.randomUUID(),l={id:o,mimeType:"text/plain",timestamp:Date.now(),topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},u=new Yd({streamId:o,mimeType:l.mimeType,topic:l.topic,timestamp:fa(l.timestamp),totalLength:fa(e==null?void 0:e.totalSize),attributes:l.attributes,contentHeader:{case:"textHeader",value:new X0({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Fd.UPDATE:Fd.CREATE})}}),d=e==null?void 0:e.destinationIdentities,h=new Mt({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,_e.RELIABLE);let m=0;const g=this,y=new WritableStream({write(C){return R(this,void 0,void 0,function*(){for(const k of t1(C,hc)){yield g.engine.waitForBufferStatusLow(_e.RELIABLE);const w=new Kd({content:k,streamId:o,chunkIndex:fa(m)}),O=new Mt({destinationIdentities:d,value:{case:"streamChunk",value:w}});yield g.engine.sendDataPacket(O,_e.RELIABLE),m+=1}})},close(){return R(this,void 0,void 0,function*(){const C=new Qd({streamId:o}),k=new Mt({destinationIdentities:d,value:{case:"streamTrailer",value:C}});yield g.engine.sendDataPacket(k,_e.RELIABLE)})},abort(C){console.log("Sink error:",C)}});let b=()=>R(this,void 0,void 0,function*(){yield T.close()});g.engine.once(ne.Closing,b);const T=new q1(y,l,()=>this.engine.off(ne.Closing,b));return T})}sendFile(e,n){return R(this,void 0,void 0,function*(){const r=crypto.randomUUID();return yield this._sendFile(r,e,n),{id:r}})}_sendFile(e,n,r){return R(this,void 0,void 0,function*(){var o,l;const u=n.size,d=new Yd({totalLength:fa(u),mimeType:(o=r==null?void 0:r.mimeType)!==null&&o!==void 0?o:n.type,streamId:e,topic:r==null?void 0:r.topic,encryptionType:r==null?void 0:r.encryptionType,timestamp:fa(Date.now()),contentHeader:{case:"byteHeader",value:new Z0({name:n.name})}}),h=r==null?void 0:r.destinationIdentities,m=new Mt({destinationIdentities:h,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(m,_e.RELIABLE);function g(C){return new Promise(k=>{const w=new FileReader;w.onload=()=>{k(new Uint8Array(w.result))},w.readAsArrayBuffer(C)})}const y=Math.ceil(u/hc);for(let C=0;CR(r,void 0,void 0,function*(){var y,b,T,C;if(Zf(u)>Ky){g(et.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((b=(y=this.engine.latestJoinResponse)===null||y===void 0?void 0:y.serverInfo)===null||b===void 0)&&b.version&&Sr((C=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||C===void 0?void 0:C.version,"1.8.0")<0){g(et.builtIn("UNSUPPORTED_SERVER"));return}const k=crypto.randomUUID();yield this.publishRpcRequest(o,k,l,u,d-2e3);const w=setTimeout(()=>{this.pendingAcks.delete(k),g(et.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(k),clearTimeout(O)},2e3);this.pendingAcks.set(k,{resolve:()=>{clearTimeout(w)},participantIdentity:o});const O=setTimeout(()=>{this.pendingResponses.delete(k),g(et.builtIn("RESPONSE_TIMEOUT"))},d);this.pendingResponses.set(k,{resolve:(V,Q)=>{clearTimeout(O),this.pendingAcks.has(k)&&(console.warn("RPC response received before ack",k),this.pendingAcks.delete(k),clearTimeout(w)),Q?g(Q):m(V??"")},participantIdentity:o})}))}()})}registerRpcMethod(e,n){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=n,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const n=this.pendingAcks.get(e);n?(n.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,n,r){const o=this.pendingResponses.get(e);o?(o.resolve(n,r),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcRequest",value:new z0({id:n,method:r,payload:o,responseTimeoutMs:l,version:1})}});yield this.engine.sendDataPacket(u,_e.RELIABLE)})}handleParticipantDisconnected(e){for(const[n,{participantIdentity:r}]of this.pendingAcks)r===e&&this.pendingAcks.delete(n);for(const[n,{participantIdentity:r,resolve:o}]of this.pendingResponses)r===e&&(o(null,et.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(n))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(n=>n.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return e.sid!==this.sid||!super.updateInfo(e)?!1:(e.tracks.forEach(n=>{var r,o;const l=this.trackPublications.get(n.sid);if(l){const u=l.isMuted||((o=(r=l.track)===null||r===void 0?void 0:r.isUpstreamPaused)!==null&&o!==void 0?o:!1);u!==n.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Me(l)),{mutedOnServer:u})),this.engine.client.sendMuteTrack(n.sid,u))}}),!0)}getPublicationForTrack(e){let n;return this.trackPublications.forEach(r=>{const o=r.track;o&&(e instanceof MediaStreamTrack?(ha(o)||Ai(o))&&o.mediaStreamTrack===e&&(n=r):e===o&&(n=r))}),n}waitForPendingPublicationOfSource(e){return R(this,void 0,void 0,function*(){const r=Date.now();for(;Date.now(){let[u]=l;return u.source===e});if(o)return o[1];yield Nt(20)}})}}class nb extends Pi{constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=rn.HIGH,this.handleEnded=l=>{this.setTrack(void 0),this.emit(W.Ended,l)},this.handleVisibilityChange=l=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(l),this.logContext),this.disabled=!l,this.emitTrackUpdate()},this.handleVideoDimensionsChange=l=>{this.log.debug("adaptivestream video dimensions ".concat(l.width,"x").concat(l.height),this.logContext),this.videoDimensions=l,this.emitTrackUpdate()},this.subscribed=r,this.updateInfo(n)}setSubscribed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const o=new Fc({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new G0({participantSid:"",trackSids:[this.trackSid]})]});this.emit(W.UpdateSubscription,o),this.emitSubscriptionUpdateIfChanged(n),this.emitPermissionUpdateIfChanged(r)}get subscriptionStatus(){return this.subscribed===!1?Pi.SubscriptionStatus.Unsubscribed:super.isSubscribed?Pi.SubscriptionStatus.Subscribed:Pi.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Pi.PermissionStatus.Allowed:Pi.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var n,r;this.isManualOperationAllowed()&&(((n=this.videoDimensions)===null||n===void 0?void 0:n.width)===e.width&&((r=this.videoDimensions)===null||r===void 0?void 0:r.height)===e.height||(Ad(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ad(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const n=this.subscriptionStatus,r=this.permissionStatus,o=this.track;o!==e&&(o&&(o.off(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),o.off(W.VisibilityChanged,this.handleVisibilityChange),o.off(W.Ended,this.handleEnded),o.detach(),o.stopMonitor(),this.emit(W.Unsubscribed,o)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(W.VisibilityChanged,this.handleVisibilityChange),e.on(W.Ended,this.handleEnded),this.emit(W.Subscribed,e)),this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n))}setAllowed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n)}setSubscriptionError(e){this.emit(W.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const n=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):n!==e.muted&&this.emit(e.muted?W.Muted:W.Unmuted)}emitSubscriptionUpdateIfChanged(e){const n=this.subscriptionStatus;e!==n&&this.emit(W.SubscriptionStatusChanged,n,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(W.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===j.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ad(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new J0({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=rn.HIGH,this.emit(W.UpdateSettings,e)}}class Ic extends tb{static fromParticipantInfo(e,n,r){return new Ic(e,n.sid,n.identity,n.name,n.metadata,n.attributes,r,n.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,n,r,o,l,u,d){let h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qs.STANDARD;super(n,r||"",o,l,u,d,h),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(W.UpdateSettings,n=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),Me(e))),this.signalClient.sendUpdateTrackSettings(n)}),e.on(W.UpdateSubscription,n=>{n.participantTracks.forEach(r=>{r.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(n)}),e.on(W.SubscriptionPermissionChanged,n=>{this.emit(F.TrackSubscriptionPermissionChanged,e,n)}),e.on(W.SubscriptionStatusChanged,n=>{this.emit(F.TrackSubscriptionStatusChanged,e,n)}),e.on(W.Subscribed,n=>{this.emit(F.TrackSubscribed,n,e)}),e.on(W.Unsubscribed,n=>{this.emit(F.TrackUnsubscribed,n,e)}),e.on(W.SubscriptionFailed,n=>{this.emit(F.TrackSubscriptionFailed,e.trackSid,n)})}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setVolume(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.Source.Microphone;this.volumeMap.set(n,e);const r=this.getTrackPublication(n);r&&r.track&&r.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:j.Source.Microphone;const n=this.getTrackPublication(e);return n&&n.track?n.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,n,r,o,l,u){let d=this.getTrackPublicationBySid(n);if(d||n.startsWith("TR")||this.trackPublications.forEach(g=>{!d&&e.kind===g.kind.toString()&&(d=g)}),!d){if(u===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:n})),this.emit(F.TrackSubscriptionFailed,n);return}u===void 0&&(u=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,n,r,o,l,u-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Me(d))),this.emit(F.TrackSubscriptionFailed,n);return}const h=e.kind==="video";let m;return h?m=new V1(e,n,o,l):m=new eb(e,n,o,this.audioContext,this.audioOutput),m.source=d.source,m.isMuted=d.isMuted,m.setMediaStream(r),m.start(),d.setTrack(m),this.volumeMap.has(d.source)&&mf(m)&&ti(m)&&m.setVolume(this.volumeMap.get(d.source)),d}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const n=new Map,r=new Map;return e.tracks.forEach(o=>{var l,u;let d=this.getTrackPublicationBySid(o.sid);if(d)d.updateInfo(o);else{const h=j.kindFromProto(o.type);if(!h)return;d=new nb(h,o,(l=this.signalClient.connectOptions)===null||l===void 0?void 0:l.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(u=this.loggerOptions)===null||u===void 0?void 0:u.loggerName}),d.updateInfo(o),r.set(o.sid,d);const m=Array.from(this.trackPublications.values()).find(g=>g.source===(d==null?void 0:d.source));m&&d.source!==j.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(d.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Me(m),newTrack:Me(d)})),this.addTrackPublication(d)}n.set(o.sid,d)}),this.trackPublications.forEach(o=>{n.has(o.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Me(o))),this.unpublishTrack(o.trackSid,!0))}),r.forEach(o=>{this.emit(F.TrackPublished,o)}),!0}unpublishTrack(e,n){const r=this.trackPublications.get(e);if(!r)return;const{track:o}=r;switch(o&&(o.stop(),r.setTrack(void 0)),this.trackPublications.delete(e),r.kind){case j.Kind.Audio:this.audioTrackPublications.delete(e);break;case j.Kind.Video:this.videoTrackPublications.delete(e);break}n&&this.emit(F.TrackUnpublished,r)}setAudioOutput(e){return R(this,void 0,void 0,function*(){this.audioOutput=e;const n=[];this.audioTrackPublications.forEach(r=>{var o;ti(r.track)&&mf(r.track)&&n.push(r.track.setSinkId((o=e.deviceId)!==null&&o!==void 0?o:"default"))}),yield Promise.all(n)})}emit(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;oR(this,void 0,void 0,function*(){var m;if(!VE())throw An()?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 g=yield this.disconnectLock.lock();if(this.state===Te.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),g(),Promise.resolve();if(this.connectFuture)return g(),this.connectFuture.promise;this.setAndEmitConnectionState(Te.Connecting),((m=this.regionUrlProvider)===null||m===void 0?void 0:m.getServerUrl().toString())!==u&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),hf(new URL(u))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bf(u,d):this.regionUrlProvider.updateToken(d),this.regionUrlProvider.fetchRegionSettings().then(T=>{var C;(C=this.regionUrlProvider)===null||C===void 0||C.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const y=(T,C,k)=>R(this,void 0,void 0,function*(){var w,O;this.abortController&&this.abortController.abort();const V=new AbortController;this.abortController=V,g==null||g();try{yield this.attemptConnection(k??u,d,h,V),this.abortController=void 0,T()}catch(Q){if(this.regionUrlProvider&&Q instanceof Ie&&Q.reason!==Re.Cancelled&&Q.reason!==Re.NotAllowed){let U=null;try{U=yield this.regionUrlProvider.getNextBestRegionUrl((w=this.abortController)===null||w===void 0?void 0:w.signal)}catch(_){if(_ instanceof Ie&&(_.status===401||_.reason===Re.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),C(_);return}}U&&!(!((O=this.abortController)===null||O===void 0)&&O.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(Q.message,". Retrying with another region: ").concat(U),this.logContext),this.recreateEngine(),yield y(T,C,U)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Iv(Q)),C(Q))}else{let U=pn.UNKNOWN_REASON;Q instanceof Ie&&(U=Iv(Q)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,U),C(Q)}}}),b=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Vy((T,C)=>{y(T,C,b)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(u,d,h,m,g,y)=>R(this,void 0,void 0,function*(){var b,T,C;const k=yield h.join(u,d,{autoSubscribe:m.autoSubscribe,adaptiveStream:typeof g.adaptiveStream=="object"?!0:g.adaptiveStream,maxRetries:m.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:m.websocketTimeout},y.signal);let w=k.serverInfo;if(w||(w={version:k.serverVersion,region:k.serverRegion}),this.serverInfo=w,this.log.debug("connected to Livekit Server ".concat(Object.entries(w).map(O=>{let[V,Q]=O;return"".concat(V,": ").concat(Q)}).join(", ")),{room:(b=k.room)===null||b===void 0?void 0:b.name,roomSid:(T=k.room)===null||T===void 0?void 0:T.sid,identity:(C=k.participant)===null||C===void 0?void 0:C.identity}),!w.version)throw new _E("unknown server version");return w.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),g.dynacast=!1),k}),this.applyJoinResponse=u=>{const d=u.participant;if(this.localParticipant.sid=d.sid,this.localParticipant.identity=d.identity,this.localParticipant.setEnabledPublishCodecs(u.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(u.sifTrailer)}catch(h){this.log.error(h instanceof Error?h.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:h}))}this.handleParticipantUpdates([d,...u.otherParticipants]),u.room&&this.handleRoomUpdate(u.room)},this.attemptConnection=(u,d,h,m)=>R(this,void 0,void 0,function*(){var g,y;this.state===Te.Reconnecting||this.isResuming||!((g=this.engine)===null||g===void 0)&&g.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((y=this.regionUrlProvider)===null||y===void 0)&&y.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Xf),h),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const b=yield this.connectSignal(u,d,this.engine,this.connOptions,this.options,m);this.applyJoinResponse(b),this.setupLocalParticipantEvents(),this.emit(B.SignalConnected)}catch(b){yield this.engine.close(),this.recreateEngine();const T=new Ie("could not establish signal connection",Re.ServerUnreachable);throw b instanceof Error&&(T.message="".concat(T.message,": ").concat(b.message)),b instanceof Ie&&(T.reason=b.reason,T.status=b.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:b})),T}if(m.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Ie("Connection attempt aborted",Re.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,m)}catch(b){throw yield this.engine.close(),this.recreateEngine(),b}xt()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xt()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Te.Connected),this.emit(B.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var u=arguments.length,d=new Array(u),h=0;h0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var y,b,T,C;const k=yield m.disconnectLock.lock();try{if(m.state===Te.Disconnected){m.log.debug("already disconnected",m.logContext);return}m.log.info("disconnect from room",Object.assign({},m.logContext)),(m.state===Te.Connecting||m.state===Te.Reconnecting||m.isResuming)&&(m.log.warn("abort connection attempt",m.logContext),(y=m.abortController)===null||y===void 0||y.abort(),(T=(b=m.connectFuture)===null||b===void 0?void 0:b.reject)===null||T===void 0||T.call(b,new Ie("Client initiated disconnect",Re.Cancelled)),m.connectFuture=void 0),!((C=m.engine)===null||C===void 0)&&C.client.isDisconnected||(yield m.engine.client.sendLeave()),m.engine&&(yield m.engine.close()),m.handleDisconnect(g,pn.CLIENT_INITIATED),m.engine=void 0}finally{k()}}()})},this.onPageLeave=()=>R(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>R(this,void 0,void 0,function*(){const u=[],d=Dn();if(d&&d.os==="iOS"){const h="livekit-dummy-audio-el";let m=document.getElementById(h);if(!m){m=document.createElement("audio"),m.id=h,m.autoplay=!0,m.hidden=!0;const g=Dd();g.enabled=!0;const y=new MediaStream([g]);m.srcObject=y,document.addEventListener("visibilitychange",()=>{m&&(m.srcObject=document.hidden?null:y,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(m),this.once(B.Disconnected,()=>{m==null||m.remove(),m=null})}u.push(m)}this.remoteParticipants.forEach(h=>{h.audioTrackPublications.forEach(m=>{m.track&&m.track.attachedElements.forEach(g=>{u.push(g)})})});try{yield Promise.all([this.acquireAudioContext(),...u.map(h=>(h.muted=!1,h.play()))]),this.handleAudioPlaybackStarted()}catch(h){throw this.handleAudioPlaybackFailed(h),h}}),this.startVideo=()=>R(this,void 0,void 0,function*(){const u=[];for(const d of this.remoteParticipants.values())d.videoTrackPublications.forEach(h=>{var m;(m=h.track)===null||m===void 0||m.attachedElements.forEach(g=>{u.includes(g)||u.push(g)})});yield Promise.all(u.map(d=>d.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(d=>{d.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const u of this.remoteParticipants.values())this.handleParticipantDisconnected(u.identity,u);this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)},this.handleSignalRestarted=u=>R(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(u.serverRegion),Object.assign(Object.assign({},this.logContext),{region:u.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(u);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(d){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:d}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:u.serverRegion}))}catch{return}this.setAndEmitConnectionState(Te.Connected),this.emit(B.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=u=>{u.forEach(d=>{var h;if(d.identity===this.localParticipant.identity){this.localParticipant.updateInfo(d);return}d.identity===""&&(d.identity=(h=this.sidToIdentity.get(d.sid))!==null&&h!==void 0?h:"");let m=this.remoteParticipants.get(d.identity);d.state===Hd.DISCONNECTED?this.handleParticipantDisconnected(d.identity,m):m=this.getOrCreateParticipant(d.identity,d)})},this.handleActiveSpeakersUpdate=u=>{const d=[],h={};u.forEach(m=>{if(h[m.sid]=!0,m.sid===this.localParticipant.sid)this.localParticipant.audioLevel=m.level,this.localParticipant.setIsSpeaking(!0),d.push(this.localParticipant);else{const g=this.getRemoteParticipantBySid(m.sid);g&&(g.audioLevel=m.level,g.setIsSpeaking(!0),d.push(g))}}),h[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(m=>{h[m.sid]||(m.audioLevel=0,m.setIsSpeaking(!1))}),this.activeSpeakers=d,this.emitWhenConnected(B.ActiveSpeakersChanged,d)},this.handleSpeakersChanged=u=>{const d=new Map;this.activeSpeakers.forEach(m=>{const g=this.remoteParticipants.get(m.identity);g&&g.sid!==m.sid||d.set(m.sid,m)}),u.forEach(m=>{let g=this.getRemoteParticipantBySid(m.sid);m.sid===this.localParticipant.sid&&(g=this.localParticipant),g&&(g.audioLevel=m.level,g.setIsSpeaking(m.active),m.active?d.set(m.sid,g):d.delete(m.sid))});const h=Array.from(d.values());h.sort((m,g)=>g.audioLevel-m.audioLevel),this.activeSpeakers=h,this.emitWhenConnected(B.ActiveSpeakersChanged,h)},this.handleStreamStateUpdate=u=>{u.streamStates.forEach(d=>{const h=this.getRemoteParticipantBySid(d.participantSid);if(!h)return;const m=h.getTrackPublicationBySid(d.trackSid);if(!m||!m.track)return;const g=j.streamStateFromProto(d.state);g!==m.track.streamState&&(m.track.streamState=g,h.emit(F.TrackStreamStateChanged,m,m.track.streamState),this.emitWhenConnected(B.TrackStreamStateChanged,m,m.track.streamState,h))})},this.handleSubscriptionPermissionUpdate=u=>{const d=this.getRemoteParticipantBySid(u.participantSid);if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setAllowed(u.allowed)},this.handleSubscriptionError=u=>{const d=Array.from(this.remoteParticipants.values()).find(m=>m.trackPublications.has(u.trackSid));if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setSubscriptionError(u.err)},this.handleDataPacket=u=>{const d=this.remoteParticipants.get(u.participantIdentity);if(u.value.case==="user")this.handleUserPacket(d,u.value.value,u.kind);else if(u.value.case==="transcription")this.handleTranscription(d,u.value.value);else if(u.value.case==="sipDtmf")this.handleSipDtmf(d,u.value.value);else if(u.value.case==="chatMessage")this.handleChatMessage(d,u.value.value);else if(u.value.case==="metrics")this.handleMetrics(u.value.value,d);else if(u.value.case==="streamHeader")this.handleStreamHeader(u.value.value,u.participantIdentity);else if(u.value.case==="streamChunk")this.handleStreamChunk(u.value.value);else if(u.value.case==="streamTrailer")this.handleStreamTrailer(u.value.value);else if(u.value.case==="rpcRequest"){const h=u.value.value;this.handleIncomingRpcRequest(u.participantIdentity,h.id,h.method,h.payload,h.responseTimeoutMs,h.version)}},this.handleUserPacket=(u,d,h)=>{this.emit(B.DataReceived,d.payload,u,h,d.topic),u==null||u.emit(F.DataReceived,d.payload,h)},this.handleSipDtmf=(u,d)=>{this.emit(B.SipDTMFReceived,d,u),u==null||u.emit(F.SipDTMFReceived,d)},this.bufferedSegments=new Map,this.handleTranscription=(u,d)=>{const h=d.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(d.transcribedParticipantIdentity),m=h==null?void 0:h.trackPublications.get(d.trackId),g=JE(d,this.transcriptionReceivedTimes);m==null||m.emit(W.TranscriptionReceived,g),h==null||h.emit(F.TranscriptionReceived,g,m),this.emit(B.TranscriptionReceived,g,h,m)},this.handleChatMessage=(u,d)=>{const h=WE(d);this.emit(B.ChatMessage,h,u)},this.handleMetrics=(u,d)=>{this.emit(B.MetricsReceived,u,d)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(B.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=u=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:u})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(B.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(B.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(B.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>R(this,void 0,void 0,function*(){var u,d;const h=gt.getInstance().previousDevices,m=yield gt.getInstance().getDevices(void 0,!1),g=Dn();if((g==null?void 0:g.name)==="Chrome"&&g.os!=="iOS")for(let b of m){const T=h.find(C=>C.deviceId===b.deviceId);T&&T.label!==""&&T.kind===b.kind&&T.label!==b.label&&this.getActiveDevice(b.kind)==="default"&&this.emit(B.ActiveDeviceChanged,b.kind,b.deviceId)}const y=["audiooutput","audioinput","videoinput"];for(let b of y){const T=m.filter(k=>k.kind===b),C=this.getActiveDevice(b);if(C===((u=h.filter(k=>k.kind===b)[0])===null||u===void 0?void 0:u.deviceId)&&T.length>0&&((d=T[0])===null||d===void 0?void 0:d.deviceId)!==C){yield this.switchActiveDevice(b,T[0].deviceId);continue}b==="audioinput"&&!Bi()||b==="videoinput"||T.length>0&&!T.find(k=>k.deviceId===this.getActiveDevice(b))&&(yield this.switchActiveDevice(b,T[0].deviceId))}this.emit(B.MediaDevicesChanged)}),this.handleRoomUpdate=u=>{const d=this.roomInfo;this.roomInfo=u,d&&d.metadata!==u.metadata&&this.emitWhenConnected(B.RoomMetadataChanged,u.metadata),(d==null?void 0:d.activeRecording)!==u.activeRecording&&this.emitWhenConnected(B.RecordingStatusChanged,u.activeRecording)},this.handleConnectionQualityUpdate=u=>{u.updates.forEach(d=>{if(d.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(d.quality);return}const h=this.getRemoteParticipantBySid(d.participantSid);h&&h.setConnectionQuality(d.quality)})},this.onLocalParticipantMetadataChanged=u=>{this.emit(B.ParticipantMetadataChanged,u,this.localParticipant)},this.onLocalParticipantNameChanged=u=>{this.emit(B.ParticipantNameChanged,u,this.localParticipant)},this.onLocalAttributesChanged=u=>{this.emit(B.ParticipantAttributesChanged,u,this.localParticipant)},this.onLocalTrackMuted=u=>{this.emit(B.TrackMuted,u,this.localParticipant)},this.onLocalTrackUnmuted=u=>{this.emit(B.TrackUnmuted,u,this.localParticipant)},this.onTrackProcessorUpdate=u=>{var d;(d=u==null?void 0:u.onPublish)===null||d===void 0||d.call(u,this)},this.onLocalTrackPublished=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;(d=u.track)===null||d===void 0||d.on(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.on(W.Restarted,this.onLocalTrackRestarted),(y=(g=(m=u.track)===null||m===void 0?void 0:m.getProcessor())===null||g===void 0?void 0:g.onPublish)===null||y===void 0||y.call(g,this),this.emit(B.LocalTrackPublished,u,this.localParticipant),ha(u.track)&&(yield u.track.checkForSilence())&&this.emit(B.LocalAudioSilenceDetected,u);const T=yield(b=u.track)===null||b===void 0?void 0:b.getDeviceId(!1),C=jv(u.source);C&&T&&T!==this.localParticipant.activeDeviceMap.get(C)&&(this.localParticipant.activeDeviceMap.set(C,T),this.emit(B.ActiveDeviceChanged,C,T))}),this.onLocalTrackUnpublished=u=>{var d,h;(d=u.track)===null||d===void 0||d.off(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.off(W.Restarted,this.onLocalTrackRestarted),this.emit(B.LocalTrackUnpublished,u,this.localParticipant)},this.onLocalTrackRestarted=u=>R(this,void 0,void 0,function*(){const d=yield u.getDeviceId(!1),h=jv(u.source);h&&d&&d!==this.localParticipant.activeDeviceMap.get(h)&&(this.log.debug("local track restarted, setting ".concat(h," ").concat(d," active"),this.logContext),this.localParticipant.activeDeviceMap.set(h,d),this.emit(B.ActiveDeviceChanged,h,d))}),this.onLocalConnectionQualityChanged=u=>{this.emit(B.ConnectionQualityChanged,u,this.localParticipant)},this.onMediaDevicesError=u=>{this.emit(B.MediaDevicesError,u)},this.onLocalParticipantPermissionsChanged=u=>{this.emit(B.ParticipantPermissionsChanged,u,this.localParticipant)},this.onLocalChatMessageSent=u=>{this.emit(B.ChatMessage,u,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},b1),e),this.log=ei((r=this.options.loggerName)!==null&&r!==void 0?r:gn.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Fy),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Yy),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},y1),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new Ht,this.localParticipant=new Y1("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Ii(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Ii(this.options.audioCaptureDefaults.deviceId)),!((o=this.options.audioOutput)===null||o===void 0)&&o.deviceId&&this.switchActiveDevice("audiooutput",Ii(this.options.audioOutput.deviceId)).catch(u=>this.log.warn("Could not set audio output: ".concat(u.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xt()){const u=new AbortController;(l=navigator.mediaDevices)===null||l===void 0||l.addEventListener("devicechange",this.handleDeviceChange,{signal:u.signal}),ni.cleanupRegistry&&ni.cleanupRegistry.register(this,()=>{u.abort()})}}registerTextStreamHandler(e,n){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,n)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,n){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,n)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,n){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,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,n,r,o,l,u){return R(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,n),u!==1){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_VERSION"));return}const d=this.rpcHandlers.get(r);if(!d){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_METHOD"));return}let h=null,m=null;try{const g=yield d({requestId:n,callerIdentity:e,payload:o,responseTimeout:l});Zf(g)>Ky?(h=et.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(r))):m=g}catch(g){g instanceof et?h=g:(console.warn("Uncaught error returned by RPC handler for ".concat(r,". Returning APPLICATION_ERROR instead."),g),h=et.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,n,m,h)})}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new o1(this.options.e2ee),this.e2eeManager.on(Ui.ParticipantEncryptionStatusChanged,(n,r)=>{e1(r)&&(this.isE2EEEnabled=n),this.emit(B.ParticipantEncryptionStatusChanged,n,r)}),this.e2eeManager.on(Ui.EncryptionError,n=>this.emit(B.EncryptionError,n)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&n!==void 0?n:!1}getSid(){return R(this,void 0,void 0,function*(){return this.state===Te.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,n)=>{const r=o=>{o.sid!==""&&(this.engine.off(ne.RoomUpdate,r),e(o.sid))};this.engine.on(ne.RoomUpdate,r),this.once(B.Disconnected,()=>{this.engine.off(ne.RoomUpdate,r),n("Room disconnected before room server id was available")})})})}get name(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&n!==void 0?n:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&n!==void 0?n:0}get numPublishers(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&n!==void 0?n:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new N1(this.options),this.engine.on(ne.ParticipantUpdate,this.handleParticipantUpdates).on(ne.RoomUpdate,this.handleRoomUpdate).on(ne.SpeakersChanged,this.handleSpeakersChanged).on(ne.StreamStateChanged,this.handleStreamStateUpdate).on(ne.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(ne.SubscriptionError,this.handleSubscriptionError).on(ne.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(ne.MediaTrackAdded,(e,n,r)=>{this.onTrackAdded(e,n,r)}).on(ne.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(ne.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(ne.DataPacketReceived,this.handleDataPacket).on(ne.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Te.SignalReconnecting)&&this.emit(B.SignalReconnecting)}).on(ne.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Te.Connected)&&this.emit(B.Reconnected)}).on(ne.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Te.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(ne.Restarting,this.handleRestarting).on(ne.SignalRestarted,this.handleSignalRestarted).on(ne.Offline,()=>{this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)}).on(ne.DCBufferStatusChanged,(e,n)=>{this.emit(B.DCBufferStatusChanged,e,n)}).on(ne.LocalTrackSubscribed,e=>{const n=this.localParticipant.getTrackPublications().find(r=>{let{trackSid:o}=r;return o===e});if(!n){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(F.LocalTrackSubscribed,n),this.emitWhenConnected(B.LocalTrackSubscribed,n,this.localParticipant)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gt.getInstance().getDevices(e,n)}prepareConnection(e,n){return R(this,void 0,void 0,function*(){if(this.state===Te.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(hf(new URL(e))&&n){this.regionUrlProvider=new bf(e,n);const r=yield this.regionUrlProvider.getNextBestRegionUrl();r&&this.state===Te.Disconnected&&(this.regionUrl=r,yield fetch(Lv(r),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(r),this.logContext))}else yield fetch(Lv(e),{method:"HEAD"})}catch(r){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:r}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,n){return R(this,void 0,void 0,function*(){let r=()=>{},o;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":o=new _n({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":o=new _n({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":o=new _n({scenario:{case:"serverLeave",value:!0}});break;case"migration":o=new _n({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":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({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":o=new _n({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),r=()=>R(this,void 0,void 0,function*(){const l=this.engine.client.onLeave;l&&l(new Yc({reason:pn.CLIENT_INITIATED,action:ur.RECONNECT}))});break;case"subscriber-bandwidth":if(n===void 0||typeof n!="number")throw new Error("subscriber-bandwidth requires a number as argument");o=new _n({scenario:{case:"subscriberBandwidth",value:fa(n)}});break;case"leave-full-reconnect":o=new _n({scenario:{case:"leaveRequestFullReconnect",value:!0}})}o&&(yield this.engine.client.sendSimulateScenario(o),yield r())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g,y,b,T,C;let k=!0,w=!1;const O=u?{exact:o}:o;if(r==="audioinput"){w=l.localParticipant.audioTrackPublications.size===0;const V=(d=l.getActiveDevice(r))!==null&&d!==void 0?d:l.options.audioCaptureDefaults.deviceId;l.options.audioCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.audioTrackPublications.values()).filter(U=>U.source===j.Source.Microphone);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.audioTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.audioCaptureDefaults.deviceId=V,U}}else if(r==="videoinput"){w=l.localParticipant.videoTrackPublications.size===0;const V=(h=l.getActiveDevice(r))!==null&&h!==void 0?h:l.options.videoCaptureDefaults.deviceId;l.options.videoCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.videoTrackPublications.values()).filter(U=>U.source===j.Source.Camera);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.videoTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.videoCaptureDefaults.deviceId=V,U}}else if(r==="audiooutput"){if(!ff()&&!l.options.webAudioMix||l.options.webAudioMix&&l.audioContext&&!("setSinkId"in l.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");l.options.webAudioMix&&(o=(m=yield gt.getInstance().normalizeDeviceId("audiooutput",o))!==null&&m!==void 0?m:""),(g=(C=l.options).audioOutput)!==null&&g!==void 0||(C.audioOutput={});const V=(y=l.getActiveDevice(r))!==null&&y!==void 0?y:l.options.audioOutput.deviceId;l.options.audioOutput.deviceId=o;try{l.options.webAudioMix&&((b=l.audioContext)===null||b===void 0||b.setSinkId(o)),yield Promise.all(Array.from(l.remoteParticipants.values()).map(Q=>Q.setAudioOutput({deviceId:o})))}catch(Q){throw l.options.audioOutput.deviceId=V,Q}}return(w||r==="audiooutput")&&(l.localParticipant.activeDeviceMap.set(r,r==="audiooutput"&&((T=l.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||o),l.emit(B.ActiveDeviceChanged,r,o)),k}()})}setupLocalParticipantEvents(){this.localParticipant.on(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(F.AttributesChanged,this.onLocalAttributesChanged).on(F.TrackMuted,this.onLocalTrackMuted).on(F.TrackUnmuted,this.onLocalTrackUnmuted).on(F.LocalTrackPublished,this.onLocalTrackPublished).on(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(F.MediaDevicesError,this.onMediaDevicesError).on(F.AudioStreamAcquired,this.startAudio).on(F.ChatMessage,this.onLocalChatMessageSent).on(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,n,r){if(this.state===Te.Connecting||this.state===Te.Reconnecting){const g=()=>{this.onTrackAdded(e,n,r),y()},y=()=>{this.off(B.Reconnected,g),this.off(B.Connected,g),this.off(B.Disconnected,y)};this.once(B.Reconnected,g),this.once(B.Connected,g),this.once(B.Disconnected,y);return}if(this.state===Te.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}const o=BE(n.id),l=o[0];let u=o[1],d=e.id;if(u&&u.startsWith("TR")&&(d=u),l===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const h=Array.from(this.remoteParticipants.values()).find(g=>g.sid===l);if(!h){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(l),this.logContext);return}let m;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?m=this.options.adaptiveStream:m={}),h.addSubscribedMediaTrack(e,d,n,r,m)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1?arguments[1]:void 0;var r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Te.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(o=>{o.trackPublications.forEach(l=>{o.unpublishTrack(l.trackSid)})}),this.localParticipant.trackPublications.forEach(o=>{var l,u,d;o.track&&this.localParticipant.unpublishTrack(o.track,e),e?((l=o.track)===null||l===void 0||l.detach(),(u=o.track)===null||u===void 0||u.stop()):(d=o.track)===null||d===void 0||d.stopMonitor()}),this.localParticipant.off(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(F.AttributesChanged,this.onLocalAttributesChanged).off(F.TrackMuted,this.onLocalTrackMuted).off(F.TrackUnmuted,this.onLocalTrackUnmuted).off(F.LocalTrackPublished,this.onLocalTrackPublished).off(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(F.MediaDevicesError,this.onMediaDevicesError).off(F.AudioStreamAcquired,this.startAudio).off(F.ChatMessage,this.onLocalChatMessageSent).off(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),xt()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=navigator.mediaDevices)===null||r===void 0||r.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Te.Disconnected),this.emit(B.Disconnected,n)}}}handleParticipantDisconnected(e,n){var r;this.remoteParticipants.delete(e),n&&(n.trackPublications.forEach(o=>{n.unpublishTrack(o.trackSid,!0)}),this.emit(B.ParticipantDisconnected,n),(r=this.localParticipant)===null||r===void 0||r.handleParticipantDisconnected(n.identity))}handleStreamHeader(e,n){return R(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const o=this.byteStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Oc(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.byteStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new j1(u,d,Oc(e.totalLength)),{identity:n})}else if(e.contentHeader.case==="textHeader"){const o=this.textStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.textStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new B1(u,d,Oc(e.totalLength)),{identity:n})}})}handleStreamChunk(e){const n=this.byteStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e);const r=this.textStreamControllers.get(e.streamId);r&&e.content.length>0&&r.controller.enqueue(e)}handleStreamTrailer(e){const n=this.textStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.textStreamControllers.delete(e.streamId));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return R(this,void 0,void 0,function*(){var e,n;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Gf())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(o=>o.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Nt(200)])}catch(o){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:o}))}const r=((n=this.audioContext)===null||n===void 0?void 0:n.state)==="running";r!==this.canPlaybackAudio&&(this.audioEnabled=r,this.emit(B.AudioPlaybackStatusChanged,r))})}createParticipant(e,n){var r;let o;return n?o=Ic.fromParticipantInfo(this.engine.client,n,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):o=new Ic(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&o.setAudioContext(this.audioContext),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&o.setAudioOutput(this.options.audioOutput).catch(l=>this.log.warn("Could not set audio output: ".concat(l.message),this.logContext)),o}getOrCreateParticipant(e,n){if(this.remoteParticipants.has(e)){const o=this.remoteParticipants.get(e);return n&&o.updateInfo(n)&&this.sidToIdentity.set(n.sid,n.identity),o}const r=this.createParticipant(e,n);return this.remoteParticipants.set(e,r),this.sidToIdentity.set(n.sid,n.identity),this.emitWhenConnected(B.ParticipantConnected,r),r.on(F.TrackPublished,o=>{this.emitWhenConnected(B.TrackPublished,o,r)}).on(F.TrackSubscribed,(o,l)=>{o.kind===j.Kind.Audio?(o.on(W.AudioPlaybackStarted,this.handleAudioPlaybackStarted),o.on(W.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):o.kind===j.Kind.Video&&(o.on(W.VideoPlaybackFailed,this.handleVideoPlaybackFailed),o.on(W.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(B.TrackSubscribed,o,l,r)}).on(F.TrackUnpublished,o=>{this.emit(B.TrackUnpublished,o,r)}).on(F.TrackUnsubscribed,(o,l)=>{this.emit(B.TrackUnsubscribed,o,l,r)}).on(F.TrackMuted,o=>{this.emitWhenConnected(B.TrackMuted,o,r)}).on(F.TrackUnmuted,o=>{this.emitWhenConnected(B.TrackUnmuted,o,r)}).on(F.ParticipantMetadataChanged,o=>{this.emitWhenConnected(B.ParticipantMetadataChanged,o,r)}).on(F.ParticipantNameChanged,o=>{this.emitWhenConnected(B.ParticipantNameChanged,o,r)}).on(F.AttributesChanged,o=>{this.emitWhenConnected(B.ParticipantAttributesChanged,o,r)}).on(F.ConnectionQualityChanged,o=>{this.emitWhenConnected(B.ConnectionQualityChanged,o,r)}).on(F.ParticipantPermissionsChanged,o=>{this.emitWhenConnected(B.ParticipantPermissionsChanged,o,r)}).on(F.TrackSubscriptionStatusChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionStatusChanged,o,l,r)}).on(F.TrackSubscriptionFailed,(o,l)=>{this.emit(B.TrackSubscriptionFailed,o,r,l)}).on(F.TrackSubscriptionPermissionChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionPermissionChanged,o,l,r)}),n&&r.updateInfo(n),r}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((r,o)=>(r.push(...o.getTrackPublications()),r),[]),n=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,n)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const n of e.videoTrackPublications.values())n.isSubscribed&&$E(n)&&n.emitTrackUpdate()}getRemoteParticipantBySid(e){const n=this.sidToIdentity.get(e);if(n)return this.remoteParticipants.get(n)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Tt.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,pn.STATE_MISMATCH))):e=0},K1)}clearConnectionReconcile(){this.connectionReconcileInterval&&Tt.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(B.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[n,r]=e;this.emit(n,...r)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;othis.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}if(o.audio){const u=new Tf(j.Kind.Audio,new cr({source:ot.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:hn.AUDIO}),new Uc(o.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Dd(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}for(let u=0;u1?n-1:0),o=1;ou!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:l}))}return super.emit(e,...r)}}ni.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(a=>{a()});function ib(a){return a.map(e=>{if(e)return Array.isArray(e)?ib(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var fn;(function(a){a[a.IDLE=0]="IDLE",a[a.RUNNING=1]="RUNNING",a[a.SKIPPED=2]="SKIPPED",a[a.SUCCESS=3]="SUCCESS",a[a.FAILED=4]="FAILED"})(fn||(fn={}));class Hi extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=fn.IDLE,this.logs=[],this.options={},this.url=e,this.token=n,this.name=this.constructor.name,this.room=new ni(r.roomOptions),this.connectOptions=r.connectOptions,this.options=r}run(e){return R(this,void 0,void 0,function*(){if(this.status!==fn.IDLE)throw Error("check is running already");this.setStatus(fn.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(n=>setTimeout(n,500)),this.status!==fn.SKIPPED&&this.setStatus(this.isSuccess()?fn.SUCCESS:fn.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return R(this,void 0,void 0,function*(){return this.room.state===Te.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return R(this,void 0,void 0,function*(){this.room&&this.room.state!==Te.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(fn.SKIPPED)}switchProtocol(e){return R(this,void 0,void 0,function*(){let n=!1,r=!1;if(this.room.on(B.Reconnecting,()=>{n=!0}),this.room.once(B.Reconnected,()=>{r=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(l=>setTimeout(l,1e3)),!n)return;const o=Date.now()+1e4;for(;Date.now()(l.duration-u.duration)*.5+(l.rtt-u.rtt)*.5);const o=n[0];this.bestStats=o,this.appendMessage("best Cloud region: ".concat(o.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return R(this,void 0,void 0,function*(){var n,r;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const o=(n=this.room.serverInfo)===null||n===void 0?void 0:n.region;if(!o)throw new Error("Region not found");const l=yield this.room.localParticipant.streamText({topic:"test"}),u=1e3,h=1e6/u,m="A".repeat(u),g=Date.now();for(let C=0;C{C.type==="candidate-pair"&&C.nominated&&(T.rtt=C.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const jd=1e4;class X1 extends Hi{get description(){return"Connection via UDP vs TCP"}perform(){return R(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),n=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-n.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-n.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=n):this.appendMessage("best connection quality via udp");const r=this.bestStats;this.appendMessage("upstream bitrate: ".concat((r.bitrateTotal/r.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((r.rttTotal/r.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((r.jitterTotal/r.count*1e3).toFixed(2)," ms")),r.packetsLost>0&&this.appendWarning("packets lost: ".concat((r.packetsLost/r.packetsSent*100).toFixed(2),"%")),r.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((r.qualityLimitationDurations.bandwidth/(jd/1e3)*100).toFixed(2),"%")),r.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((r.qualityLimitationDurations.cpu/(jd/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return R(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const n=document.createElement("canvas");n.width=1280,n.height=720;const r=n.getContext("2d");if(!r)throw new Error("Could not get canvas context");let o=0;const l=()=>{o=(o+1)%360,r.fillStyle="hsl(".concat(o,", 100%, 50%)"),r.fillRect(0,0,n.width,n.height),requestAnimationFrame(l)};l();const d=n.captureStream(30).getVideoTracks()[0],m=(yield this.room.localParticipant.publishTrack(d,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,g={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},y=setInterval(()=>R(this,void 0,void 0,function*(){const b=yield m.getRTCStatsReport();b==null||b.forEach(T=>{T.type==="outbound-rtp"?(g.packetsSent=T.packetsSent,g.qualityLimitationDurations=T.qualityLimitationDurations,g.bitrateTotal+=T.targetBitrate,g.count++):T.type==="remote-inbound-rtp"&&(g.packetsLost=T.packetsLost,g.rttTotal+=T.roundTripTime,g.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(b=>setTimeout(b,jd)),clearInterval(y),d.stop(),n.remove(),yield this.disconnect(),g})}}function ab(a){return R(this,void 0,void 0,function*(){var e,n;a??(a={}),(e=a.audio)!==null&&e!==void 0||(a.audio={deviceId:"default"}),(n=a.video)!==null&&n!==void 0||(a.video={deviceId:"default"});const{audioProcessor:r,videoProcessor:o}=Ff(a),l=Hy(a,Fy,Yy),u=Qc(l),d=navigator.mediaDevices.getUserMedia(u);a.audio&&(gt.userMediaPromiseMap.set("audioinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("audioinput"))),a.video&&(gt.userMediaPromiseMap.set("videoinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("videoinput")));const h=yield d;return Promise.all(h.getTracks().map(m=>R(this,void 0,void 0,function*(){const g=m.kind==="audio";g?l.audio:l.video;let y;const b=g?u.audio:u.video;typeof b!="boolean"&&(y=b);const T=m.getSettings().deviceId;y!=null&&y.deviceId&&Ii(y.deviceId)!==T?y.deviceId=T:y||(y={deviceId:T});const C=Xy(m,y);return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone),C.mediaStream=h,ti(C)&&r?yield C.setProcessor(r):Er(C)&&o&&(yield C.setProcessor(o)),C})))})}function Z1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:!1,video:a}))[0]})}function J1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:a,video:!1}))[0]})}class W1 extends Hi{get description(){return"Can publish audio"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield J1();if(yield Gy(r,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),n.localParticipant.publishTrack(r),yield new Promise(d=>setTimeout(d,3e3));const l=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!l)throw new Error("Could not get RTCStats");let u=0;if(l.forEach(d=>{d.type==="outbound-rtp"&&(d.kind==="audio"||!d.kind&&d.mediaType==="audio")&&(u=d.packetsSent)}),u===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(u," audio packets"))})}}class $1 extends Hi{get description(){return"Can publish video"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield Z1();yield this.checkForVideo(r.mediaStreamTrack),n.localParticipant.publishTrack(r),yield new Promise(u=>setTimeout(u,5e3));const o=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!o)throw new Error("Could not get RTCStats");let l=0;if(o.forEach(u=>{u.type==="outbound-rtp"&&(u.kind==="video"||!u.kind&&u.mediaType==="video")&&(l+=u.packetsSent)}),l===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(l," video packets"))})}checkForVideo(e){return R(this,void 0,void 0,function*(){const n=new MediaStream;n.addTrack(e.clone());const r=document.createElement("video");r.srcObject=n,r.muted=!0,yield new Promise(o=>{r.onplay=()=>{setTimeout(()=>{var l,u,d,h;const m=document.createElement("canvas"),g=e.getSettings(),y=(u=(l=g.width)!==null&&l!==void 0?l:r.videoWidth)!==null&&u!==void 0?u:1280,b=(h=(d=g.height)!==null&&d!==void 0?d:r.videoHeight)!==null&&h!==void 0?h:720;m.width=y,m.height=b;const T=m.getContext("2d");T.drawImage(r,0,0);const k=T.getImageData(0,0,m.width,m.height).data;let w=!0;for(let O=0;O{setTimeout(m,5e3),l=m}),d=()=>{r=!0};n.on(B.SignalReconnecting,d).on(B.Reconnecting,d).on(B.Reconnected,()=>{o=!0,l(!0)}),(e=n.engine.client.ws)===null||e===void 0||e.close();const h=n.engine.client.onClose;if(h&&h(""),yield u,r){if(!o||n.state!==Te.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class tR extends Hi{get description(){return"Can connect via TURN"}perform(){return R(this,void 0,void 0,function*(){var e,n;const r=new Yf,o=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let l=!1,u=!1,d=!1;for(let h of o.iceServers)for(let m of h.urls)m.startsWith("turn:")?(u=!0,d=!0):m.startsWith("turns:")&&(u=!0,d=!0,l=!0),m.startsWith("stun:")&&(d=!0);d?u&&!l&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((n=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||n===void 0)&&n.iceServers||u?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(h=>setTimeout(h,0)))})}}class nR extends Hi{get description(){return"Establishing WebRTC connection"}perform(){return R(this,void 0,void 0,function*(){let e=!1,n=!1;this.room.on(B.SignalConnected,()=>{const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(o,l)=>{if(o.candidate){const u=new RTCIceCandidate(o);let d="".concat(u.protocol," ").concat(u.address,":").concat(u.port," ").concat(u.type);u.address&&(iR(u.address)?d+=" (private)":u.protocol==="tcp"&&u.tcpType==="passive"?(e=!0,d+=" (passive)"):u.protocol==="udp"&&(n=!0)),this.appendMessage(d)}r&&r(o,l)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=o=>{o instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(o.errorCode," ").concat(o.errorText," ").concat(o.url))})});try{yield this.connect(),ke.info("now the room is connected")}catch(r){throw this.appendWarning("ports need to be open on firewall in order to connect."),r}e||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")})}}function iR(a){const e=a.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const n=parseInt(e[1],10);if(n>=16&&n<=31)return!0}}return!1}class aR extends Hi{get description(){return"Connecting to signal connection via WebSocket"}perform(){return R(this,void 0,void 0,function*(){var e,n,r;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let o=new Yf;const l=yield o.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(l.serverVersion,".")),((e=l.serverInfo)===null||e===void 0?void 0:e.edition)===F0.Cloud&&(!((n=l.serverInfo)===null||n===void 0)&&n.region)&&this.appendMessage("LiveKit Cloud: ".concat((r=l.serverInfo)===null||r===void 0?void 0:r.region)),yield o.close()})}}class bO extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=n,this.options=r}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:fn.IDLE,name:"",description:""}),e}updateCheck(e,n){this.checkResults.set(e,n),this.emit("checkUpdate",e,n)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==fn.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return R(this,void 0,void 0,function*(){const n=this.getNextCheckId(),r=new e(this.url,this.token,this.options),o=u=>{this.updateCheck(n,u)};r.on("update",o);const l=yield r.run();return r.off("update",o),l})}checkWebsocket(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(aR)})}checkWebRTC(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(nR)})}checkTURN(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(tR)})}checkReconnect(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(eR)})}checkPublishAudio(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(W1)})}checkPublishVideo(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck($1)})}checkConnectionProtocol(){return R(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(X1);if(e.data&&"protocol"in e.data){const n=e.data;this.options.protocol=n.protocol}return e})}checkCloudRegion(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(Q1)})}}const kf=Math.min,pr=Math.max,jc=Math.round,zi=a=>({x:a,y:a}),rR={left:"right",right:"left",bottom:"top",top:"bottom"},sR={start:"end",end:"start"};function e0(a,e,n){return pr(a,kf(e,n))}function Zc(a,e){return typeof a=="function"?a(e):a}function ya(a){return a.split("-")[0]}function Jc(a){return a.split("-")[1]}function rb(a){return a==="x"?"y":"x"}function sb(a){return a==="y"?"height":"width"}function Wc(a){return["top","bottom"].includes(ya(a))?"y":"x"}function ob(a){return rb(Wc(a))}function oR(a,e,n){n===void 0&&(n=!1);const r=Jc(a),o=ob(a),l=sb(o);let u=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[l]>e.floating[l]&&(u=Bc(u)),[u,Bc(u)]}function cR(a){const e=Bc(a);return[Cf(a),e,Cf(e)]}function Cf(a){return a.replace(/start|end/g,e=>sR[e])}function lR(a,e,n){const r=["left","right"],o=["right","left"],l=["top","bottom"],u=["bottom","top"];switch(a){case"top":case"bottom":return n?e?o:r:e?r:o;case"left":case"right":return e?l:u;default:return[]}}function uR(a,e,n,r){const o=Jc(a);let l=lR(ya(a),n==="start",r);return o&&(l=l.map(u=>u+"-"+o),e&&(l=l.concat(l.map(Cf)))),l}function Bc(a){return a.replace(/left|right|bottom|top/g,e=>rR[e])}function dR(a){return{top:0,right:0,bottom:0,left:0,...a}}function fR(a){return typeof a!="number"?dR(a):{top:a,right:a,bottom:a,left:a}}function zc(a){const{x:e,y:n,width:r,height:o}=a;return{width:r,height:o,top:n,left:e,right:e+r,bottom:n+o,x:e,y:n}}function t0(a,e,n){let{reference:r,floating:o}=a;const l=Wc(e),u=ob(e),d=sb(u),h=ya(e),m=l==="y",g=r.x+r.width/2-o.width/2,y=r.y+r.height/2-o.height/2,b=r[d]/2-o[d]/2;let T;switch(h){case"top":T={x:g,y:r.y-o.height};break;case"bottom":T={x:g,y:r.y+r.height};break;case"right":T={x:r.x+r.width,y};break;case"left":T={x:r.x-o.width,y};break;default:T={x:r.x,y:r.y}}switch(Jc(e)){case"start":T[u]-=b*(n&&m?-1:1);break;case"end":T[u]+=b*(n&&m?-1:1);break}return T}const hR=async(a,e,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:l=[],platform:u}=n,d=l.filter(Boolean),h=await(u.isRTL==null?void 0:u.isRTL(e));let m=await u.getElementRects({reference:a,floating:e,strategy:o}),{x:g,y}=t0(m,r,h),b=r,T={},C=0;for(let k=0;koe<=0)){var X,J;const oe=(((X=l.flip)==null?void 0:X.index)||0)+1,qe=_[oe];if(qe)return{data:{index:oe,overflows:ie},reset:{placement:qe}};let Fe=(J=ie.filter(Ye=>Ye.overflows[0]<=0).sort((Ye,te)=>Ye.overflows[1]-te.overflows[1])[0])==null?void 0:J.placement;if(!Fe)switch(T){case"bestFit":{var ee;const Ye=(ee=ie.map(te=>[te.placement,te.overflows.filter(he=>he>0).reduce((he,ue)=>he+ue,0)]).sort((te,he)=>te[1]-he[1])[0])==null?void 0:ee[0];Ye&&(Fe=Ye);break}case"initialPlacement":Fe=d;break}if(o!==Fe)return{reset:{placement:Fe}}}return{}}}};async function pR(a,e){const{placement:n,platform:r,elements:o}=a,l=await(r.isRTL==null?void 0:r.isRTL(o.floating)),u=ya(n),d=Jc(n),h=Wc(n)==="y",m=["left","top"].includes(u)?-1:1,g=l&&h?-1:1,y=Zc(e,a);let{mainAxis:b,crossAxis:T,alignmentAxis:C}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...y};return d&&typeof C=="number"&&(T=d==="end"?C*-1:C),h?{x:T*g,y:b*m}:{x:b*m,y:T*g}}const gR=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(e){var n,r;const{x:o,y:l,placement:u,middlewareData:d}=e,h=await pR(e,a);return u===((n=d.offset)==null?void 0:n.placement)&&(r=d.arrow)!=null&&r.alignmentOffset?{}:{x:o+h.x,y:l+h.y,data:{...h,placement:u}}}}},vR=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:l=!0,crossAxis:u=!1,limiter:d={fn:w=>{let{x:O,y:V}=w;return{x:O,y:V}}},...h}=Zc(a,e),m={x:n,y:r},g=await cb(e,h),y=Wc(ya(o)),b=rb(y);let T=m[b],C=m[y];if(l){const w=b==="y"?"top":"left",O=b==="y"?"bottom":"right",V=T+g[w],Q=T-g[O];T=e0(V,T,Q)}if(u){const w=y==="y"?"top":"left",O=y==="y"?"bottom":"right",V=C+g[w],Q=C-g[O];C=e0(V,C,Q)}const k=d.fn({...e,[b]:T,[y]:C});return{...k,data:{x:k.x-n,y:k.y-r}}}}};function $c(){return typeof window<"u"}function Rr(a){return lb(a)?(a.nodeName||"").toLowerCase():"#document"}function Gt(a){var e;return(a==null||(e=a.ownerDocument)==null?void 0:e.defaultView)||window}function ii(a){var e;return(e=(lb(a)?a.ownerDocument:a.document)||window.document)==null?void 0:e.documentElement}function lb(a){return $c()?a instanceof Node||a instanceof Gt(a).Node:!1}function vn(a){return $c()?a instanceof Element||a instanceof Gt(a).Element:!1}function Mn(a){return $c()?a instanceof HTMLElement||a instanceof Gt(a).HTMLElement:!1}function n0(a){return!$c()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof Gt(a).ShadowRoot}function Ys(a){const{overflow:e,overflowX:n,overflowY:r,display:o}=yn(a);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(o)}function yR(a){return["table","td","th"].includes(Rr(a))}function el(a){return[":popover-open",":modal"].some(e=>{try{return a.matches(e)}catch{return!1}})}function Wf(a){const e=$f(),n=vn(a)?yn(a):a;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function bR(a){let e=qi(a);for(;Mn(e)&&!Tr(e);){if(Wf(e))return e;if(el(e))return null;e=qi(e)}return null}function $f(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Tr(a){return["html","body","#document"].includes(Rr(a))}function yn(a){return Gt(a).getComputedStyle(a)}function tl(a){return vn(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function qi(a){if(Rr(a)==="html")return a;const e=a.assignedSlot||a.parentNode||n0(a)&&a.host||ii(a);return n0(e)?e.host:e}function ub(a){const e=qi(a);return Tr(e)?a.ownerDocument?a.ownerDocument.body:a.body:Mn(e)&&Ys(e)?e:ub(e)}function db(a,e,n){var r;e===void 0&&(e=[]);const o=ub(a),l=o===((r=a.ownerDocument)==null?void 0:r.body),u=Gt(o);return l?(Ef(u),e.concat(u,u.visualViewport||[],Ys(o)?o:[],[])):e.concat(o,db(o,[]))}function Ef(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function fb(a){const e=yn(a);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const o=Mn(a),l=o?a.offsetWidth:n,u=o?a.offsetHeight:r,d=jc(n)!==l||jc(r)!==u;return d&&(n=l,r=u),{width:n,height:r,$:d}}function hb(a){return vn(a)?a:a.contextElement}function gr(a){const e=hb(a);if(!Mn(e))return zi(1);const n=e.getBoundingClientRect(),{width:r,height:o,$:l}=fb(e);let u=(l?jc(n.width):n.width)/r,d=(l?jc(n.height):n.height)/o;return(!u||!Number.isFinite(u))&&(u=1),(!d||!Number.isFinite(d))&&(d=1),{x:u,y:d}}const SR=zi(0);function mb(a){const e=Gt(a);return!$f()||!e.visualViewport?SR:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function TR(a,e,n){return e===void 0&&(e=!1),!n||e&&n!==Gt(a)?!1:e}function Gs(a,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const o=a.getBoundingClientRect(),l=hb(a);let u=zi(1);e&&(r?vn(r)&&(u=gr(r)):u=gr(a));const d=TR(l,n,r)?mb(l):zi(0);let h=(o.left+d.x)/u.x,m=(o.top+d.y)/u.y,g=o.width/u.x,y=o.height/u.y;if(l){const b=Gt(l),T=r&&vn(r)?Gt(r):r;let C=b,k=Ef(C);for(;k&&r&&T!==C;){const w=gr(k),O=k.getBoundingClientRect(),V=yn(k),Q=O.left+(k.clientLeft+parseFloat(V.paddingLeft))*w.x,U=O.top+(k.clientTop+parseFloat(V.paddingTop))*w.y;h*=w.x,m*=w.y,g*=w.x,y*=w.y,h+=Q,m+=U,C=Gt(k),k=Ef(C)}}return zc({width:g,height:y,x:h,y:m})}function kR(a){let{elements:e,rect:n,offsetParent:r,strategy:o}=a;const l=o==="fixed",u=ii(r),d=e?el(e.floating):!1;if(r===u||d&&l)return n;let h={scrollLeft:0,scrollTop:0},m=zi(1);const g=zi(0),y=Mn(r);if((y||!y&&!l)&&((Rr(r)!=="body"||Ys(u))&&(h=tl(r)),Mn(r))){const b=Gs(r);m=gr(r),g.x=b.x+r.clientLeft,g.y=b.y+r.clientTop}return{width:n.width*m.x,height:n.height*m.y,x:n.x*m.x-h.scrollLeft*m.x+g.x,y:n.y*m.y-h.scrollTop*m.y+g.y}}function CR(a){return Array.from(a.getClientRects())}function Rf(a,e){const n=tl(a).scrollLeft;return e?e.left+n:Gs(ii(a)).left+n}function ER(a){const e=ii(a),n=tl(a),r=a.ownerDocument.body,o=pr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),l=pr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let u=-n.scrollLeft+Rf(a);const d=-n.scrollTop;return yn(r).direction==="rtl"&&(u+=pr(e.clientWidth,r.clientWidth)-o),{width:o,height:l,x:u,y:d}}function RR(a,e){const n=Gt(a),r=ii(a),o=n.visualViewport;let l=r.clientWidth,u=r.clientHeight,d=0,h=0;if(o){l=o.width,u=o.height;const m=$f();(!m||m&&e==="fixed")&&(d=o.offsetLeft,h=o.offsetTop)}return{width:l,height:u,x:d,y:h}}function _R(a,e){const n=Gs(a,!0,e==="fixed"),r=n.top+a.clientTop,o=n.left+a.clientLeft,l=Mn(a)?gr(a):zi(1),u=a.clientWidth*l.x,d=a.clientHeight*l.y,h=o*l.x,m=r*l.y;return{width:u,height:d,x:h,y:m}}function i0(a,e,n){let r;if(e==="viewport")r=RR(a,n);else if(e==="document")r=ER(ii(a));else if(vn(e))r=_R(e,n);else{const o=mb(a);r={...e,x:e.x-o.x,y:e.y-o.y}}return zc(r)}function pb(a,e){const n=qi(a);return n===e||!vn(n)||Tr(n)?!1:yn(n).position==="fixed"||pb(n,e)}function wR(a,e){const n=e.get(a);if(n)return n;let r=db(a,[]).filter(d=>vn(d)&&Rr(d)!=="body"),o=null;const l=yn(a).position==="fixed";let u=l?qi(a):a;for(;vn(u)&&!Tr(u);){const d=yn(u),h=Wf(u);!h&&d.position==="fixed"&&(o=null),(l?!h&&!o:!h&&d.position==="static"&&o&&["absolute","fixed"].includes(o.position)||Ys(u)&&!h&&pb(a,u))?r=r.filter(m=>m!==u):o=d,u=qi(u)}return e.set(a,r),r}function OR(a){let{element:e,boundary:n,rootBoundary:r,strategy:o}=a;const l=[...n==="clippingAncestors"?el(e)?[]:wR(e,this._c):[].concat(n),r],u=l[0],d=l.reduce((h,m)=>{const g=i0(e,m,o);return h.top=pr(g.top,h.top),h.right=kf(g.right,h.right),h.bottom=kf(g.bottom,h.bottom),h.left=pr(g.left,h.left),h},i0(e,u,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function DR(a){const{width:e,height:n}=fb(a);return{width:e,height:n}}function AR(a,e,n){const r=Mn(e),o=ii(e),l=n==="fixed",u=Gs(a,!0,l,e);let d={scrollLeft:0,scrollTop:0};const h=zi(0);if(r||!r&&!l)if((Rr(e)!=="body"||Ys(o))&&(d=tl(e)),r){const T=Gs(e,!0,l,e);h.x=T.x+e.clientLeft,h.y=T.y+e.clientTop}else o&&(h.x=Rf(o));let m=0,g=0;if(o&&!r&&!l){const T=o.getBoundingClientRect();g=T.top+d.scrollTop,m=T.left+d.scrollLeft-Rf(o,T)}const y=u.left+d.scrollLeft-h.x-m,b=u.top+d.scrollTop-h.y-g;return{x:y,y:b,width:u.width,height:u.height}}function Bd(a){return yn(a).position==="static"}function a0(a,e){if(!Mn(a)||yn(a).position==="fixed")return null;if(e)return e(a);let n=a.offsetParent;return ii(a)===n&&(n=n.ownerDocument.body),n}function gb(a,e){const n=Gt(a);if(el(a))return n;if(!Mn(a)){let o=qi(a);for(;o&&!Tr(o);){if(vn(o)&&!Bd(o))return o;o=qi(o)}return n}let r=a0(a,e);for(;r&&yR(r)&&Bd(r);)r=a0(r,e);return r&&Tr(r)&&Bd(r)&&!Wf(r)?n:r||bR(a)||n}const MR=async function(a){const e=this.getOffsetParent||gb,n=this.getDimensions,r=await n(a.floating);return{reference:AR(a.reference,await e(a.floating),a.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function PR(a){return yn(a).direction==="rtl"}const xR={convertOffsetParentRelativeRectToViewportRelativeRect:kR,getDocumentElement:ii,getClippingRect:OR,getOffsetParent:gb,getElementRects:MR,getClientRects:CR,getDimensions:DR,getScale:gr,isElement:vn,isRTL:PR},NR=gR,UR=vR,LR=mR,IR=(a,e,n)=>{const r=new Map,o={platform:xR,...n},l={...o.platform,_c:r};return hR(a,e,{...o,platform:l})};var Ns=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function jR(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var vb={exports:{}};(function(a){(function(e,n){a.exports?a.exports=n():e.log=n()})(Ns,function(){var e=function(){},n="undefined",r=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],l={},u=null;function d(k,w){var O=k[w];if(typeof O.bind=="function")return O.bind(k);try{return Function.prototype.bind.call(O,k)}catch{return function(){return Function.prototype.apply.apply(O,[k,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function m(k){return k==="debug"&&(k="log"),typeof console===n?!1:k==="trace"&&r?h:console[k]!==void 0?d(console,k):console.log!==void 0?d(console,"log"):e}function g(){for(var k=this.getLevel(),w=0;w=0&&oe<=O.levels.SILENT)return oe;throw new TypeError("log.setLevel() called with invalid level: "+ee)}O.name=k,O.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},O.methodFactory=w||b,O.getLevel=function(){return U??Q??V},O.setLevel=function(ee,oe){return U=X(ee),oe!==!1&&H(U),g.call(O)},O.setDefaultLevel=function(ee){Q=X(ee),$()||O.setLevel(ee,!1)},O.resetLevel=function(){U=null,ie(),g.call(O)},O.enableAll=function(ee){O.setLevel(O.levels.TRACE,ee)},O.disableAll=function(ee){O.setLevel(O.levels.SILENT,ee)},O.rebuild=function(){if(u!==O&&(V=X(u.getLevel())),g.call(O),u===O)for(var ee in l)l[ee].rebuild()},V=X(u?u.getLevel():"WARN");var J=$();J!=null&&(U=X(J)),g.call(O)}u=new T,u.getLogger=function(k){if(typeof k!="symbol"&&typeof k!="string"||k==="")throw new TypeError("You must supply a name when creating a logger.");var w=l[k];return w||(w=l[k]=new T(k,u.methodFactory)),w};var C=typeof window!==n?window.log:void 0;return u.noConflict=function(){return typeof window!==n&&window.log===u&&(window.log=C),u},u.getLoggers=function(){return l},u.default=u,u})})(vb);var BR=vb.exports;const zR=jR(BR);var _f=function(a,e){return _f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},_f(a,e)};function ai(a,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");_f(a,e);function n(){this.constructor=a}a.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}function qR(a,e,n,r){function o(l){return l instanceof n?l:new n(function(u){u(l)})}return new(n||(n=Promise))(function(l,u){function d(g){try{m(r.next(g))}catch(y){u(y)}}function h(g){try{m(r.throw(g))}catch(y){u(y)}}function m(g){g.done?l(g.value):o(g.value).then(d,h)}m((r=r.apply(a,[])).next())})}function yb(a,e){var n={label:0,sent:function(){if(l[0]&1)throw l[1];return l[1]},trys:[],ops:[]},r,o,l,u=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return u.next=d(0),u.throw=d(1),u.return=d(2),typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(m){return function(g){return h([m,g])}}function h(m){if(r)throw new TypeError("Generator is already executing.");for(;u&&(u=0,m[0]&&(n=0)),n;)try{if(r=1,o&&(l=m[0]&2?o.return:m[0]?o.throw||((l=o.return)&&l.call(o),0):o.next)&&!(l=l.call(o,m[1])).done)return l;switch(o=0,l&&(m=[m[0]&2,l.value]),m[0]){case 0:case 1:l=m;break;case 4:return n.label++,{value:m[1],done:!1};case 5:n.label++,o=m[1],m=[0];continue;case 7:m=n.ops.pop(),n.trys.pop();continue;default:if(l=n.trys,!(l=l.length>0&&l[l.length-1])&&(m[0]===6||m[0]===2)){n=0;continue}if(m[0]===3&&(!l||m[1]>l[0]&&m[1]=a.length&&(a=void 0),{value:a&&a[r++],done:!a}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function qc(a,e){var n=typeof Symbol=="function"&&a[Symbol.iterator];if(!n)return a;var r=n.call(a),o,l=[],u;try{for(;(e===void 0||e-- >0)&&!(o=r.next()).done;)l.push(o.value)}catch(d){u={error:d}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(u)throw u.error}}return l}function Vc(a,e,n){if(arguments.length===2)for(var r=0,o=e.length,l;r1||h(T,k)})},C&&(o[T]=C(o[T])))}function h(T,C){try{m(r[T](C))}catch(k){b(l[0][3],k)}}function m(T){T.value instanceof vr?Promise.resolve(T.value.v).then(g,y):b(l[0][2],T)}function g(T){h("next",T)}function y(T){h("throw",T)}function b(T,C){T(C),l.shift(),l.length&&h(l[0][0],l[0][1])}}function HR(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=a[Symbol.asyncIterator],n;return e?e.call(a):(a=typeof kr=="function"?kr(a):a[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(l){n[l]=a[l]&&function(u){return new Promise(function(d,h){u=a[l](u),o(d,h,u.done,u.value)})}}function o(l,u,d,h){Promise.resolve(h).then(function(m){l({value:m,done:d})},u)}}function dt(a){return typeof a=="function"}function eh(a){var e=function(r){Error.call(r),r.stack=new Error().stack},n=a(e);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var zd=eh(function(a){return function(e){a(this),this.message=e?e.length+` errors occurred during unsubscription: `+e.map(function(n,r){return r+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}async function hO(){var e,n,r;const a=(r=(n=(e=window.google)==null?void 0:e.colab)==null?void 0:n.kernel)==null?void 0:r.invokeFunction;if(a)return(await a("get_join_token",[])).data["application/json"];if(window.jupyterFetchJoinToken)return await window.jupyterFetchJoinToken();throw new Error("No Colab or Jupyter kernel function available")}const mO=a=>Pe.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Pe.jsxs("div",{className:"content",children:[Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsxs(Wb,{onClick:a,children:[Pe.jsx(mO,{}),"Disconnect"]})})]}),Pe.jsxs("div",{className:"controls",children:[Pe.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Pe.jsx("div",{className:"agent-visualizer",children:Pe.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(null),[o,l]=P.useState(!0);return P.useEffect(()=>{hO().then(u=>e(u)).catch(u=>r(u.message))},[]),n?Pe.jsxs("div",{children:["Error: ",n]}):a?o?Pe.jsxs(_w,{serverUrl:a.url,token:a.token,onError:u=>r(u.message),children:[Pe.jsx(pO,{onDisconnect:()=>l(!1)}),Pe.jsx(sO,{})]}):Pe.jsx("div",{className:"content",children:Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})}):Pe.jsx("div",{children:"Loading..."})};Mk.createRoot(document.getElementById("root")).render(Pe.jsx(P.StrictMode,{children:Pe.jsx(gO,{})})); + `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}async function hO(){var e,n,r,o;const a=(r=(n=(e=window.google)==null?void 0:e.colab)==null?void 0:n.kernel)==null?void 0:r.invokeFunction;if(a)return(await a("get_join_token",[])).data["application/json"];if(window.jupyterapp&&window.jupyterapp.shell){const l=window.jupyterapp.shell.currentWidget;if(l&&((o=l.context)!=null&&o.sessionContext)){const u=l.context.sessionContext.session;if(u&&u.kernel)try{const d=u.kernel.createComm("get_join_token_comm");return d.open(),d.send({request:"token"}),new Promise(h=>{d.onMsg=m=>{h(m.content.data)}})}catch(d){throw new Error("Error creating comm channel: "+d)}}}throw new Error("No suitable kernel connection available")}const mO=a=>Pe.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Pe.jsxs("div",{className:"content",children:[Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsxs(Wb,{onClick:a,children:[Pe.jsx(mO,{}),"Disconnect"]})})]}),Pe.jsxs("div",{className:"controls",children:[Pe.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Pe.jsx("div",{className:"agent-visualizer",children:Pe.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(null),[o,l]=P.useState(!0);return P.useEffect(()=>{hO().then(u=>e(u)).catch(u=>r(u.message))},[]),n?Pe.jsxs("div",{children:["Error: ",n]}):a?o?Pe.jsxs(_w,{serverUrl:a.url,token:a.token,onError:u=>r(u.message),children:[Pe.jsx(pO,{onDisconnect:()=>l(!1)}),Pe.jsx(sO,{})]}):Pe.jsx("div",{className:"content",children:Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})}):Pe.jsx("div",{children:"Loading..."})};Mk.createRoot(document.getElementById("root")).render(Pe.jsx(P.StrictMode,{children:Pe.jsx(gO,{})})); From a7e5216b76f38fbd474b360fa5b924931c887cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Mon, 7 Apr 2025 15:11:05 +0200 Subject: [PATCH 10/13] avoid comms --- livekit-rtc/jupyter-html/src/App.tsx | 46 ++----------------- livekit-rtc/livekit/rtc/jupyter.py | 45 +++++++++--------- .../rtc/resources/jupyter-html/index.html | 8 ++-- 3 files changed, 31 insertions(+), 68 deletions(-) diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx index ff7596d3..8c9de9d2 100644 --- a/livekit-rtc/jupyter-html/src/App.tsx +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { LiveKitRoom, BarVisualizer, @@ -15,46 +15,16 @@ import type { SVGProps } from 'react'; import { ConnectionState } from 'livekit-client'; -export async function fetchJoinInfo(): Promise<{ url: string; token: string }> { - const invoke = (window as any).google?.colab?.kernel?.invokeFunction; - if (invoke) { - const res = await invoke("get_join_token", []); - return res.data["application/json"]; - } - - - // This requires that JupyterLab was started with --LabApp.expose_app_in_browser, - if ((window as any).jupyterapp && (window as any).jupyterapp.shell) { - const currentWidget = (window as any).jupyterapp.shell.currentWidget; - if (currentWidget && currentWidget.context?.sessionContext) { - const session = currentWidget.context.sessionContext.session; - if (session && session.kernel) { - try { - const comm = session.kernel.createComm("get_join_token_comm"); - comm.open(); - comm.send({ request: "token" }); - return new Promise((resolve) => { - comm.onMsg = (msg: any) => { - resolve(msg.content.data); - }; - }); - } catch (error) { - throw new Error("Error creating comm channel: " + error); - } - } - } - } - +export function getJoinInfo(): { url: string; token: string } { if (import.meta.env.MODE === "development") { const url = import.meta.env.VITE_LIVEKIT_URL; const token = import.meta.env.VITE_LIVEKIT_TOKEN; return { url, token }; } - throw new Error("No suitable kernel connection available"); + return { url: "##livekit-url-placeholder##", token: "##livekit-token-placeholder##" }; } - const LeaveIcon = (props: SVGProps) => ( void }> = ({ onDisconnect }; const App = () => { - const [joinInfo, setJoinInfo] = useState<{ url: string; token: string } | null>(null); const [error, setError] = useState(null); const [isConnected, setIsConnected] = useState(true); - - useEffect(() => { - fetchJoinInfo() - .then((info) => setJoinInfo(info)) - .catch((err) => setError(err.message)); - }, []); + const joinInfo = getJoinInfo(); if (error) return
Error: {error}
; - if (!joinInfo) return
Loading...
; - if (!isConnected) { return (
diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index cf832231..0701399d 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -13,40 +13,41 @@ def room_html(url: str, token: str) -> HTML: - IN_COLAB = "google.colab" in sys.modules - IN_JUPYTER = "ipykernel" in sys.modules - - if IN_COLAB: - from google.colab import output - - def get_join_token(): - return JSON({"url": url, "token": token}) - - output.register_callback("get_join_token", get_join_token) - elif IN_JUPYTER: - from IPython import get_ipython - - ip = get_ipython() - if ip and hasattr(ip, "kernel"): + """ + Generate the HTML needed to embed a LiveKit room. - def token_comm_target(comm, open_msg): - @comm.on_msg - def handle_message(msg): - comm.send({"url": url, "token": token}) + Args: + url (str): The LiveKit room URL. + token (str): The LiveKit join token. - ip.kernel.comm_manager.register_target("get_join_token_comm", token_comm_target) + Important: + The returned HTML contains the provided `url` and `token` values directly. + Avoid using sensitive tokens in public notebooks (e.g., tokens with long expiration times). + """ + token_placeholder = "##livekit-token-placeholder##" + url_placeholder = "##livekit-url-placeholder##" index_path = files("livekit.rtc.resources") / "jupyter-html" / "index.html" index_path = _resource_stack.enter_context(as_file(index_path)) - return HTML(index_path.read_text()) + + # turns out that directly replacing the URL/token is necessary, as Colab or Jupyter comms become + # unreliable when the main thread is busy/blocked + html_text = index_path.read_text() + html_text = html_text.replace(token_placeholder, token) + html_text = html_text.replace(url_placeholder, url) + return HTML(html_text) def display_room(url: str, token: str) -> None: """ - Display a LiveKit room in Jupyter or Google Colab. + Display a LiveKit room in a Jupyter notebook or Google Colab. Args: url (str): The LiveKit room URL. token (str): The LiveKit join token. + + Important: + The rendered HTML will include the provided `url` and `token` in plain text. + Avoid using sensitive tokens in public notebooks (e.g., tokens with long expiration times). """ display(room_html(url, token)) diff --git a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html index a55052c1..62f9c473 100644 --- a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html +++ b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html @@ -13,7 +13,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Hg;function kk(){if(Hg)return Rs;Hg=1;var a=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,o,l){var u=null;if(l!==void 0&&(u=""+l),o.key!==void 0&&(u=""+o.key),"key"in o){l={};for(var d in o)d!=="key"&&(l[d]=o[d])}else l=o;return o=l.ref,{$$typeof:a,type:r,key:u,ref:o!==void 0?o:null,props:l}}return Rs.Fragment=e,Rs.jsx=n,Rs.jsxs=n,Rs}var Gg;function Ck(){return Gg||(Gg=1,pd.exports=kk()),pd.exports}var Pe=Ck(),gd={exports:{}},pe={};/** + */var Hg;function kk(){if(Hg)return Rs;Hg=1;var a=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,o,l){var u=null;if(l!==void 0&&(u=""+l),o.key!==void 0&&(u=""+o.key),"key"in o){l={};for(var d in o)d!=="key"&&(l[d]=o[d])}else l=o;return o=l.ref,{$$typeof:a,type:r,key:u,ref:o!==void 0?o:null,props:l}}return Rs.Fragment=e,Rs.jsx=n,Rs.jsxs=n,Rs}var Gg;function Ck(){return Gg||(Gg=1,pd.exports=kk()),pd.exports}var Ne=Ck(),gd={exports:{}},pe={};/** * @license React * react.production.js * @@ -52,8 +52,8 @@ `);for(f=c=0;cf||E[c]!==M[f]){var q=` `+E[c].replace(" at new "," at ");return t.displayName&&q.includes("")&&(q=q.replace("",t.displayName)),q}while(1<=c&&0<=f);break}}}finally{Fe=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?qe(s):""}function te(t){switch(t.tag){case 26:case 27:case 5:return qe(t.type);case 16:return qe("Lazy");case 13:return qe("Suspense");case 19:return qe("SuspenseList");case 0:case 15:return t=Ye(t.type,!1),t;case 11:return t=Ye(t.type.render,!1),t;case 1:return t=Ye(t.type,!0),t;default:return""}}function he(t){try{var i="";do i+=te(t),t=t.return;while(t);return i}catch(s){return` Error generating stack: `+s.message+` -`+s.stack}}function ue(t){var i=t,s=t;if(t.alternate)for(;i.return;)i=i.return;else{t=i;do i=t,(i.flags&4098)!==0&&(s=i.return),t=i.return;while(t)}return i.tag===3?s:null}function je(t){if(t.tag===13){var i=t.memoizedState;if(i===null&&(t=t.alternate,t!==null&&(i=t.memoizedState)),i!==null)return i.dehydrated}return null}function D(t){if(ue(t)!==t)throw Error(r(188))}function Z(t){var i=t.alternate;if(!i){if(i=ue(t),i===null)throw Error(r(188));return i!==t?null:t}for(var s=t,c=i;;){var f=s.return;if(f===null)break;var p=f.alternate;if(p===null){if(c=f.return,c!==null){s=c;continue}break}if(f.child===p.child){for(p=f.child;p;){if(p===s)return D(f),t;if(p===c)return D(f),i;p=p.sibling}throw Error(r(188))}if(s.return!==c.return)s=f,c=p;else{for(var v=!1,S=f.child;S;){if(S===s){v=!0,s=f,c=p;break}if(S===c){v=!0,c=f,s=p;break}S=S.sibling}if(!v){for(S=p.child;S;){if(S===s){v=!0,s=p,c=f;break}if(S===c){v=!0,c=p,s=f;break}S=S.sibling}if(!v)throw Error(r(189))}}if(s.alternate!==c)throw Error(r(190))}if(s.tag!==3)throw Error(r(188));return s.stateNode.current===s?t:i}function fe(t){var i=t.tag;if(i===5||i===26||i===27||i===6)return t;for(t=t.child;t!==null;){if(i=fe(t),i!==null)return i;t=t.sibling}return null}var le=Array.isArray,ae=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Ce={pending:!1,data:null,method:null,action:null},ge=[],Rt=-1;function De(t){return{current:t}}function it(t){0>Rt||(t.current=ge[Rt],ge[Rt]=null,Rt--)}function Ve(t,i){Rt++,ge[Rt]=t.current,t.current=i}var bn=De(null),Or=De(null),ri=De(null),Xs=De(null);function Zs(t,i){switch(Ve(ri,i),Ve(Or,t),Ve(bn,null),t=i.nodeType,t){case 9:case 11:i=(i=i.documentElement)&&(i=i.namespaceURI)?yg(i):0;break;default:if(t=t===8?i.parentNode:i,i=t.tagName,t=t.namespaceURI)t=yg(t),i=bg(t,i);else switch(i){case"svg":i=1;break;case"math":i=2;break;default:i=0}}it(bn),Ve(bn,i)}function Ca(){it(bn),it(Or),it(ri)}function sl(t){t.memoizedState!==null&&Ve(Xs,t);var i=bn.current,s=bg(i,t.type);i!==s&&(Ve(Or,t),Ve(bn,s))}function Js(t){Or.current===t&&(it(bn),it(Or)),Xs.current===t&&(it(Xs),Ss._currentValue=Ce)}var ol=Object.prototype.hasOwnProperty,cl=a.unstable_scheduleCallback,ll=a.unstable_cancelCallback,eS=a.unstable_shouldYield,tS=a.unstable_requestPaint,Sn=a.unstable_now,nS=a.unstable_getCurrentPriorityLevel,oh=a.unstable_ImmediatePriority,ch=a.unstable_UserBlockingPriority,Ws=a.unstable_NormalPriority,iS=a.unstable_LowPriority,lh=a.unstable_IdlePriority,aS=a.log,rS=a.unstable_setDisableYieldValue,Dr=null,Ut=null;function sS(t){if(Ut&&typeof Ut.onCommitFiberRoot=="function")try{Ut.onCommitFiberRoot(Dr,t,void 0,(t.current.flags&128)===128)}catch{}}function si(t){if(typeof aS=="function"&&rS(t),Ut&&typeof Ut.setStrictMode=="function")try{Ut.setStrictMode(Dr,t)}catch{}}var Lt=Math.clz32?Math.clz32:lS,oS=Math.log,cS=Math.LN2;function lS(t){return t>>>=0,t===0?32:31-(oS(t)/cS|0)|0}var $s=128,eo=4194304;function Gi(t){var i=t&42;if(i!==0)return i;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function to(t,i){var s=t.pendingLanes;if(s===0)return 0;var c=0,f=t.suspendedLanes,p=t.pingedLanes,v=t.warmLanes;t=t.finishedLanes!==0;var S=s&134217727;return S!==0?(s=S&~f,s!==0?c=Gi(s):(p&=S,p!==0?c=Gi(p):t||(v=S&~v,v!==0&&(c=Gi(v))))):(S=s&~f,S!==0?c=Gi(S):p!==0?c=Gi(p):t||(v=s&~v,v!==0&&(c=Gi(v)))),c===0?0:i!==0&&i!==c&&(i&f)===0&&(f=c&-c,v=i&-i,f>=v||f===32&&(v&4194176)!==0)?i:c}function Ar(t,i){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&i)===0}function uS(t,i){switch(t){case 1:case 2:case 4:case 8:return i+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function uh(){var t=$s;return $s<<=1,($s&4194176)===0&&($s=128),t}function dh(){var t=eo;return eo<<=1,(eo&62914560)===0&&(eo=4194304),t}function ul(t){for(var i=[],s=0;31>s;s++)i.push(t);return i}function Mr(t,i){t.pendingLanes|=i,i!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function dS(t,i,s,c,f,p){var v=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var S=t.entanglements,E=t.expirationTimes,M=t.hiddenUpdates;for(s=v&~s;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pS=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),bh={},Sh={};function gS(t){return ol.call(Sh,t)?!0:ol.call(bh,t)?!1:pS.test(t)?Sh[t]=!0:(bh[t]=!0,!1)}function no(t,i,s){if(gS(i))if(s===null)t.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":t.removeAttribute(i);return;case"boolean":var c=i.toLowerCase().slice(0,5);if(c!=="data-"&&c!=="aria-"){t.removeAttribute(i);return}}t.setAttribute(i,""+s)}}function io(t,i,s){if(s===null)t.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(i);return}t.setAttribute(i,""+s)}}function Ln(t,i,s,c){if(c===null)t.removeAttribute(s);else{switch(typeof c){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(s);return}t.setAttributeNS(i,s,""+c)}}function Yt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Th(t){var i=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(i==="checkbox"||i==="radio")}function vS(t){var i=Th(t)?"checked":"value",s=Object.getOwnPropertyDescriptor(t.constructor.prototype,i),c=""+t[i];if(!t.hasOwnProperty(i)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var f=s.get,p=s.set;return Object.defineProperty(t,i,{configurable:!0,get:function(){return f.call(this)},set:function(v){c=""+v,p.call(this,v)}}),Object.defineProperty(t,i,{enumerable:s.enumerable}),{getValue:function(){return c},setValue:function(v){c=""+v},stopTracking:function(){t._valueTracker=null,delete t[i]}}}}function ao(t){t._valueTracker||(t._valueTracker=vS(t))}function kh(t){if(!t)return!1;var i=t._valueTracker;if(!i)return!0;var s=i.getValue(),c="";return t&&(c=Th(t)?t.checked?"true":"false":t.value),t=c,t!==s?(i.setValue(t),!0):!1}function ro(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var yS=/[\n"\\]/g;function Kt(t){return t.replace(yS,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function hl(t,i,s,c,f,p,v,S){t.name="",v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"?t.type=v:t.removeAttribute("type"),i!=null?v==="number"?(i===0&&t.value===""||t.value!=i)&&(t.value=""+Yt(i)):t.value!==""+Yt(i)&&(t.value=""+Yt(i)):v!=="submit"&&v!=="reset"||t.removeAttribute("value"),i!=null?ml(t,v,Yt(i)):s!=null?ml(t,v,Yt(s)):c!=null&&t.removeAttribute("value"),f==null&&p!=null&&(t.defaultChecked=!!p),f!=null&&(t.checked=f&&typeof f!="function"&&typeof f!="symbol"),S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?t.name=""+Yt(S):t.removeAttribute("name")}function Ch(t,i,s,c,f,p,v,S){if(p!=null&&typeof p!="function"&&typeof p!="symbol"&&typeof p!="boolean"&&(t.type=p),i!=null||s!=null){if(!(p!=="submit"&&p!=="reset"||i!=null))return;s=s!=null?""+Yt(s):"",i=i!=null?""+Yt(i):s,S||i===t.value||(t.value=i),t.defaultValue=i}c=c??f,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=S?t.checked:!!c,t.defaultChecked=!!c,v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(t.name=v)}function ml(t,i,s){i==="number"&&ro(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function Oa(t,i,s,c){if(t=t.options,i){i={};for(var f=0;f=jr),Lh=" ",Ih=!1;function jh(t,i){switch(t){case"keyup":return YS.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Bh(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Pa=!1;function QS(t,i){switch(t){case"compositionend":return Bh(i);case"keypress":return i.which!==32?null:(Ih=!0,Lh);case"textInput":return t=i.data,t===Lh&&Ih?null:t;default:return null}}function XS(t,i){if(Pa)return t==="compositionend"||!Rl&&jh(t,i)?(t=Ah(),oo=Sl=ci=null,Pa=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:s,offset:i-t};t=c}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=Kh(s)}}function Xh(t,i){return t&&i?t===i?!0:t&&t.nodeType===3?!1:i&&i.nodeType===3?Xh(t,i.parentNode):"contains"in t?t.contains(i):t.compareDocumentPosition?!!(t.compareDocumentPosition(i)&16):!1:!1}function Zh(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var i=ro(t.document);i instanceof t.HTMLIFrameElement;){try{var s=typeof i.contentWindow.location.href=="string"}catch{s=!1}if(s)t=i.contentWindow;else break;i=ro(t.document)}return i}function Ol(t){var i=t&&t.nodeName&&t.nodeName.toLowerCase();return i&&(i==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||i==="textarea"||t.contentEditable==="true")}function iT(t,i){var s=Zh(i);i=t.focusedElem;var c=t.selectionRange;if(s!==i&&i&&i.ownerDocument&&Xh(i.ownerDocument.documentElement,i)){if(c!==null&&Ol(i)){if(t=c.start,s=c.end,s===void 0&&(s=t),"selectionStart"in i)i.selectionStart=t,i.selectionEnd=Math.min(s,i.value.length);else if(s=(t=i.ownerDocument||document)&&t.defaultView||window,s.getSelection){s=s.getSelection();var f=i.textContent.length,p=Math.min(c.start,f);c=c.end===void 0?p:Math.min(c.end,f),!s.extend&&p>c&&(f=c,c=p,p=f),f=Qh(i,p);var v=Qh(i,c);f&&v&&(s.rangeCount!==1||s.anchorNode!==f.node||s.anchorOffset!==f.offset||s.focusNode!==v.node||s.focusOffset!==v.offset)&&(t=t.createRange(),t.setStart(f.node,f.offset),s.removeAllRanges(),p>c?(s.addRange(t),s.extend(v.node,v.offset)):(t.setEnd(v.node,v.offset),s.addRange(t)))}}for(t=[],s=i;s=s.parentNode;)s.nodeType===1&&t.push({element:s,left:s.scrollLeft,top:s.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,xa=null,Dl=null,Vr=null,Al=!1;function Jh(t,i,s){var c=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;Al||xa==null||xa!==ro(c)||(c=xa,"selectionStart"in c&&Ol(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Vr&&qr(Vr,c)||(Vr=c,c=Xo(Dl,"onSelect"),0>=v,f-=v,In=1<<32-Lt(i)+f|s<de?(pt=ce,ce=null):pt=ce.sibling;var Oe=L(x,ce,N[de],G);if(Oe===null){ce===null&&(ce=pt);break}t&&ce&&Oe.alternate===null&&i(x,ce),A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe,ce=pt}if(de===N.length)return s(x,ce),we&&Ji(x,de),re;if(ce===null){for(;dede?(pt=ce,ce=null):pt=ce.sibling;var Oi=L(x,ce,Oe.value,G);if(Oi===null){ce===null&&(ce=pt);break}t&&ce&&Oi.alternate===null&&i(x,ce),A=p(Oi,A,de),ye===null?re=Oi:ye.sibling=Oi,ye=Oi,ce=pt}if(Oe.done)return s(x,ce),we&&Ji(x,de),re;if(ce===null){for(;!Oe.done;de++,Oe=N.next())Oe=K(x,Oe.value,G),Oe!==null&&(A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe);return we&&Ji(x,de),re}for(ce=c(ce);!Oe.done;de++,Oe=N.next())Oe=z(ce,x,de,Oe.value,G),Oe!==null&&(t&&Oe.alternate!==null&&ce.delete(Oe.key===null?de:Oe.key),A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe);return t&&ce.forEach(function(Tk){return i(x,Tk)}),we&&Ji(x,de),re}function Je(x,A,N,G){if(typeof N=="object"&&N!==null&&N.type===h&&N.key===null&&(N=N.props.children),typeof N=="object"&&N!==null){switch(N.$$typeof){case u:e:{for(var re=N.key;A!==null;){if(A.key===re){if(re=N.type,re===h){if(A.tag===7){s(x,A.sibling),G=f(A,N.props.children),G.return=x,x=G;break e}}else if(A.elementType===re||typeof re=="object"&&re!==null&&re.$$typeof===V&&mm(re)===A.type){s(x,A.sibling),G=f(A,N.props),Xr(G,N),G.return=x,x=G;break e}s(x,A);break}else i(x,A);A=A.sibling}N.type===h?(G=ca(N.props.children,x.mode,G,N.key),G.return=x,x=G):(G=Bo(N.type,N.key,N.props,null,x.mode,G),Xr(G,N),G.return=x,x=G)}return v(x);case d:e:{for(re=N.key;A!==null;){if(A.key===re)if(A.tag===4&&A.stateNode.containerInfo===N.containerInfo&&A.stateNode.implementation===N.implementation){s(x,A.sibling),G=f(A,N.children||[]),G.return=x,x=G;break e}else{s(x,A);break}else i(x,A);A=A.sibling}G=Pu(N,x.mode,G),G.return=x,x=G}return v(x);case V:return re=N._init,N=re(N._payload),Je(x,A,N,G)}if(le(N))return se(x,A,N,G);if(H(N)){if(re=H(N),typeof re!="function")throw Error(r(150));return N=re.call(N),me(x,A,N,G)}if(typeof N.then=="function")return Je(x,A,So(N),G);if(N.$$typeof===T)return Je(x,A,Lo(x,N),G);To(x,N)}return typeof N=="string"&&N!==""||typeof N=="number"||typeof N=="bigint"?(N=""+N,A!==null&&A.tag===6?(s(x,A.sibling),G=f(A,N),G.return=x,x=G):(s(x,A),G=Mu(N,x.mode,G),G.return=x,x=G),v(x)):s(x,A)}return function(x,A,N,G){try{Qr=0;var re=Je(x,A,N,G);return Ba=null,re}catch(ce){if(ce===Yr)throw ce;var ye=tn(29,ce,null,x.mode);return ye.lanes=G,ye.return=x,ye}finally{}}}var $i=pm(!0),gm=pm(!1),za=De(null),ko=De(0);function vm(t,i){t=Xn,Ve(ko,t),Ve(za,i),Xn=t|i.baseLanes}function jl(){Ve(ko,Xn),Ve(za,za.current)}function Bl(){Xn=ko.current,it(za),it(ko)}var Wt=De(null),kn=null;function ui(t){var i=t.alternate;Ve(ct,ct.current&1),Ve(Wt,t),kn===null&&(i===null||za.current!==null||i.memoizedState!==null)&&(kn=t)}function ym(t){if(t.tag===22){if(Ve(ct,ct.current),Ve(Wt,t),kn===null){var i=t.alternate;i!==null&&i.memoizedState!==null&&(kn=t)}}else di()}function di(){Ve(ct,ct.current),Ve(Wt,Wt.current)}function Bn(t){it(Wt),kn===t&&(kn=null),it(ct)}var ct=De(0);function Co(t){for(var i=t;i!==null;){if(i.tag===13){var s=i.memoizedState;if(s!==null&&(s=s.dehydrated,s===null||s.data==="$?"||s.data==="$!"))return i}else if(i.tag===19&&i.memoizedProps.revealOrder!==void 0){if((i.flags&128)!==0)return i}else if(i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break;for(;i.sibling===null;){if(i.return===null||i.return===t)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var cT=typeof AbortController<"u"?AbortController:function(){var t=[],i=this.signal={aborted:!1,addEventListener:function(s,c){t.push(c)}};this.abort=function(){i.aborted=!0,t.forEach(function(s){return s()})}},lT=a.unstable_scheduleCallback,uT=a.unstable_NormalPriority,lt={$$typeof:T,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function zl(){return{controller:new cT,data:new Map,refCount:0}}function Zr(t){t.refCount--,t.refCount===0&&lT(uT,function(){t.controller.abort()})}var Jr=null,ql=0,qa=0,Va=null;function dT(t,i){if(Jr===null){var s=Jr=[];ql=0,qa=Ku(),Va={status:"pending",value:void 0,then:function(c){s.push(c)}}}return ql++,i.then(bm,bm),i}function bm(){if(--ql===0&&Jr!==null){Va!==null&&(Va.status="fulfilled");var t=Jr;Jr=null,qa=0,Va=null;for(var i=0;ip?p:8;var v=X.T,S={};X.T=S,au(t,!1,i,s);try{var E=f(),M=X.S;if(M!==null&&M(S,E),E!==null&&typeof E=="object"&&typeof E.then=="function"){var q=fT(E,c);es(t,i,q,qt(t))}else es(t,i,c,qt(t))}catch(K){es(t,i,{then:function(){},status:"rejected",reason:K},qt())}finally{ae.p=p,X.T=v}}function vT(){}function nu(t,i,s,c){if(t.tag!==5)throw Error(r(476));var f=Zm(t).queue;Xm(t,f,i,Ce,s===null?vT:function(){return Jm(t),s(c)})}function Zm(t){var i=t.memoizedState;if(i!==null)return i;i={memoizedState:Ce,baseState:Ce,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zn,lastRenderedState:Ce},next:null};var s={};return i.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zn,lastRenderedState:s},next:null},t.memoizedState=i,t=t.alternate,t!==null&&(t.memoizedState=i),i}function Jm(t){var i=Zm(t).next.queue;es(t,i,{},qt())}function iu(){return Ct(Ss)}function Wm(){return rt().memoizedState}function $m(){return rt().memoizedState}function yT(t){for(var i=t.return;i!==null;){switch(i.tag){case 24:case 3:var s=qt();t=gi(s);var c=vi(i,t,s);c!==null&&(wt(c,i,s),is(c,i,s)),i={cache:zl()},t.payload=i;return}i=i.return}}function bT(t,i,s){var c=qt();s={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null},Po(t)?tp(i,s):(s=xl(t,i,s,c),s!==null&&(wt(s,t,c),np(s,i,c)))}function ep(t,i,s){var c=qt();es(t,i,s,c)}function es(t,i,s,c){var f={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null};if(Po(t))tp(i,f);else{var p=t.alternate;if(t.lanes===0&&(p===null||p.lanes===0)&&(p=i.lastRenderedReducer,p!==null))try{var v=i.lastRenderedState,S=p(v,s);if(f.hasEagerState=!0,f.eagerState=S,It(S,v))return po(t,i,f,0),Be===null&&mo(),!1}catch{}finally{}if(s=xl(t,i,f,c),s!==null)return wt(s,t,c),np(s,i,c),!0}return!1}function au(t,i,s,c){if(c={lane:2,revertLane:Ku(),action:c,hasEagerState:!1,eagerState:null,next:null},Po(t)){if(i)throw Error(r(479))}else i=xl(t,s,c,2),i!==null&&wt(i,t,2)}function Po(t){var i=t.alternate;return t===ve||i!==null&&i===ve}function tp(t,i){Ha=Ro=!0;var s=t.pending;s===null?i.next=i:(i.next=s.next,s.next=i),t.pending=i}function np(t,i,s){if((s&4194176)!==0){var c=i.lanes;c&=t.pendingLanes,s|=c,i.lanes=s,hh(t,s)}}var Cn={readContext:Ct,use:Oo,useCallback:tt,useContext:tt,useEffect:tt,useImperativeHandle:tt,useLayoutEffect:tt,useInsertionEffect:tt,useMemo:tt,useReducer:tt,useRef:tt,useState:tt,useDebugValue:tt,useDeferredValue:tt,useTransition:tt,useSyncExternalStore:tt,useId:tt};Cn.useCacheRefresh=tt,Cn.useMemoCache=tt,Cn.useHostTransitionStatus=tt,Cn.useFormState=tt,Cn.useActionState=tt,Cn.useOptimistic=tt;var na={readContext:Ct,use:Oo,useCallback:function(t,i){return At().memoizedState=[t,i===void 0?null:i],t},useContext:Ct,useEffect:qm,useImperativeHandle:function(t,i,s){s=s!=null?s.concat([t]):null,Ao(4194308,4,Gm.bind(null,i,t),s)},useLayoutEffect:function(t,i){return Ao(4194308,4,t,i)},useInsertionEffect:function(t,i){Ao(4,2,t,i)},useMemo:function(t,i){var s=At();i=i===void 0?null:i;var c=t();if(ta){si(!0);try{t()}finally{si(!1)}}return s.memoizedState=[c,i],c},useReducer:function(t,i,s){var c=At();if(s!==void 0){var f=s(i);if(ta){si(!0);try{s(i)}finally{si(!1)}}}else f=i;return c.memoizedState=c.baseState=f,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:f},c.queue=t,t=t.dispatch=bT.bind(null,ve,t),[c.memoizedState,t]},useRef:function(t){var i=At();return t={current:t},i.memoizedState=t},useState:function(t){t=Jl(t);var i=t.queue,s=ep.bind(null,ve,i);return i.dispatch=s,[t.memoizedState,s]},useDebugValue:eu,useDeferredValue:function(t,i){var s=At();return tu(s,t,i)},useTransition:function(){var t=Jl(!1);return t=Xm.bind(null,ve,t.queue,!0,!1),At().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,i,s){var c=ve,f=At();if(we){if(s===void 0)throw Error(r(407));s=s()}else{if(s=i(),Be===null)throw Error(r(349));(Ee&60)!==0||Rm(c,i,s)}f.memoizedState=s;var p={value:s,getSnapshot:i};return f.queue=p,qm(wm.bind(null,c,p,t),[t]),c.flags|=2048,Fa(9,_m.bind(null,c,p,s,i),{destroy:void 0},null),s},useId:function(){var t=At(),i=Be.identifierPrefix;if(we){var s=jn,c=In;s=(c&~(1<<32-Lt(c)-1)).toString(32)+s,i=":"+i+"R"+s,s=_o++,0 title"))),St(p,c,s),p[kt]=t,ft(p),c=p;break e;case"link":var v=Dg("link","href",f).get(c+(s.href||""));if(v){for(var S=0;S<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof c.is=="string"?f.createElement("select",{is:c.is}):f.createElement("select"),c.multiple?t.multiple=!0:c.size&&(t.size=c.size);break;default:t=typeof c.is=="string"?f.createElement(s,{is:c.is}):f.createElement(s)}}t[kt]=i,t[Ot]=c;e:for(f=i.child;f!==null;){if(f.tag===5||f.tag===6)t.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===i)break e;for(;f.sibling===null;){if(f.return===null||f.return===i)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}i.stateNode=t;e:switch(St(t,s,c),s){case"button":case"input":case"select":case"textarea":t=!!c.autoFocus;break e;case"img":t=!0;break e;default:t=!1}t&&Kn(i)}}return Ke(i),i.flags&=-16777217,null;case 6:if(t&&i.stateNode!=null)t.memoizedProps!==c&&Kn(i);else{if(typeof c!="string"&&i.stateNode===null)throw Error(r(166));if(t=ri.current,Hr(i)){if(t=i.stateNode,s=i.memoizedProps,c=null,f=_t,f!==null)switch(f.tag){case 27:case 5:c=f.memoizedProps}t[kt]=i,t=!!(t.nodeValue===s||c!==null&&c.suppressHydrationWarning===!0||vg(t.nodeValue,s)),t||Wi(i)}else t=Jo(t).createTextNode(c),t[kt]=i,i.stateNode=t}return Ke(i),null;case 13:if(c=i.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(f=Hr(i),c!==null&&c.dehydrated!==null){if(t===null){if(!f)throw Error(r(318));if(f=i.memoizedState,f=f!==null?f.dehydrated:null,!f)throw Error(r(317));f[kt]=i}else Gr(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Ke(i),f=!1}else on!==null&&(zu(on),on=null),f=!0;if(!f)return i.flags&256?(Bn(i),i):(Bn(i),null)}if(Bn(i),(i.flags&128)!==0)return i.lanes=s,i;if(s=c!==null,t=t!==null&&t.memoizedState!==null,s){c=i.child,f=null,c.alternate!==null&&c.alternate.memoizedState!==null&&c.alternate.memoizedState.cachePool!==null&&(f=c.alternate.memoizedState.cachePool.pool);var p=null;c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(p=c.memoizedState.cachePool.pool),p!==f&&(c.flags|=2048)}return s!==t&&s&&(i.child.flags|=8192),zo(i,i.updateQueue),Ke(i),null;case 4:return Ca(),t===null&&Ju(i.stateNode.containerInfo),Ke(i),null;case 10:return Hn(i.type),Ke(i),null;case 19:if(it(ct),f=i.memoizedState,f===null)return Ke(i),null;if(c=(i.flags&128)!==0,p=f.rendering,p===null)if(c)us(f,!1);else{if(Ze!==0||t!==null&&(t.flags&128)!==0)for(t=i.child;t!==null;){if(p=Co(t),p!==null){for(i.flags|=128,us(f,!1),t=p.updateQueue,i.updateQueue=t,zo(i,t),i.subtreeFlags=0,t=s,s=i.child;s!==null;)Fp(s,t),s=s.sibling;return Ve(ct,ct.current&1|2),i.child}t=t.sibling}f.tail!==null&&Sn()>qo&&(i.flags|=128,c=!0,us(f,!1),i.lanes=4194304)}else{if(!c)if(t=Co(p),t!==null){if(i.flags|=128,c=!0,t=t.updateQueue,i.updateQueue=t,zo(i,t),us(f,!0),f.tail===null&&f.tailMode==="hidden"&&!p.alternate&&!we)return Ke(i),null}else 2*Sn()-f.renderingStartTime>qo&&s!==536870912&&(i.flags|=128,c=!0,us(f,!1),i.lanes=4194304);f.isBackwards?(p.sibling=i.child,i.child=p):(t=f.last,t!==null?t.sibling=p:i.child=p,f.last=p)}return f.tail!==null?(i=f.tail,f.rendering=i,f.tail=i.sibling,f.renderingStartTime=Sn(),i.sibling=null,t=ct.current,Ve(ct,c?t&1|2:t&1),i):(Ke(i),null);case 22:case 23:return Bn(i),Bl(),c=i.memoizedState!==null,t!==null?t.memoizedState!==null!==c&&(i.flags|=8192):c&&(i.flags|=8192),c?(s&536870912)!==0&&(i.flags&128)===0&&(Ke(i),i.subtreeFlags&6&&(i.flags|=8192)):Ke(i),s=i.updateQueue,s!==null&&zo(i,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),c=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(c=i.memoizedState.cachePool.pool),c!==s&&(i.flags|=2048),t!==null&&it(ea),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),i.memoizedState.cache!==s&&(i.flags|=2048),Hn(lt),Ke(i),null;case 25:return null}throw Error(r(156,i.tag))}function _T(t,i){switch(Ul(i),i.tag){case 1:return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 3:return Hn(lt),Ca(),t=i.flags,(t&65536)!==0&&(t&128)===0?(i.flags=t&-65537|128,i):null;case 26:case 27:case 5:return Js(i),null;case 13:if(Bn(i),t=i.memoizedState,t!==null&&t.dehydrated!==null){if(i.alternate===null)throw Error(r(340));Gr()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 19:return it(ct),null;case 4:return Ca(),null;case 10:return Hn(i.type),null;case 22:case 23:return Bn(i),Bl(),t!==null&&it(ea),t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 24:return Hn(lt),null;case 25:return null;default:return null}}function Qp(t,i){switch(Ul(i),i.tag){case 3:Hn(lt),Ca();break;case 26:case 27:case 5:Js(i);break;case 4:Ca();break;case 13:Bn(i);break;case 19:it(ct);break;case 10:Hn(i.type);break;case 22:case 23:Bn(i),Bl(),t!==null&&it(ea);break;case 24:Hn(lt)}}var wT={getCacheForType:function(t){var i=Ct(lt),s=i.data.get(t);return s===void 0&&(s=t(),i.data.set(t,s)),s}},OT=typeof WeakMap=="function"?WeakMap:Map,Qe=0,Be=null,be=null,Ee=0,ze=0,zt=null,Qn=!1,Xa=!1,xu=!1,Xn=0,Ze=0,ki=0,la=0,Nu=0,nn=0,Za=0,ds=null,En=null,Uu=!1,Lu=0,qo=1/0,Vo=null,Ci=null,Ho=!1,ua=null,fs=0,Iu=0,ju=null,hs=0,Bu=null;function qt(){if((Qe&2)!==0&&Ee!==0)return Ee&-Ee;if(X.T!==null){var t=qa;return t!==0?t:Ku()}return ph()}function Xp(){nn===0&&(nn=(Ee&536870912)===0||we?uh():536870912);var t=Wt.current;return t!==null&&(t.flags|=32),nn}function wt(t,i,s){(t===Be&&ze===2||t.cancelPendingCommit!==null)&&(Ja(t,0),Zn(t,Ee,nn,!1)),Mr(t,s),((Qe&2)===0||t!==Be)&&(t===Be&&((Qe&2)===0&&(la|=s),Ze===4&&Zn(t,Ee,nn,!1)),Rn(t))}function Zp(t,i,s){if((Qe&6)!==0)throw Error(r(327));var c=!s&&(i&60)===0&&(i&t.expiredLanes)===0||Ar(t,i),f=c?MT(t,i):Hu(t,i,!0),p=c;do{if(f===0){Xa&&!c&&Zn(t,i,0,!1);break}else if(f===6)Zn(t,i,0,!Qn);else{if(s=t.current.alternate,p&&!DT(s)){f=Hu(t,i,!1),p=!1;continue}if(f===2){if(p=i,t.errorRecoveryDisabledLanes&p)var v=0;else v=t.pendingLanes&-536870913,v=v!==0?v:v&536870912?536870912:0;if(v!==0){i=v;e:{var S=t;f=ds;var E=S.current.memoizedState.isDehydrated;if(E&&(Ja(S,v).flags|=256),v=Hu(S,v,!1),v!==2){if(xu&&!E){S.errorRecoveryDisabledLanes|=p,la|=p,f=4;break e}p=En,En=f,p!==null&&zu(p)}f=v}if(p=!1,f!==2)continue}}if(f===1){Ja(t,0),Zn(t,i,0,!0);break}e:{switch(c=t,f){case 0:case 1:throw Error(r(345));case 4:if((i&4194176)===i){Zn(c,i,nn,!Qn);break e}break;case 2:En=null;break;case 3:case 5:break;default:throw Error(r(329))}if(c.finishedWork=s,c.finishedLanes=i,(i&62914560)===i&&(p=Lu+300-Sn(),10s?32:s,X.T=null,ua===null)var p=!1;else{s=ju,ju=null;var v=ua,S=fs;if(ua=null,fs=0,(Qe&6)!==0)throw Error(r(331));var E=Qe;if(Qe|=4,Hp(v.current),zp(v,v.current,S,s),Qe=E,ms(0,!1),Ut&&typeof Ut.onPostCommitFiberRoot=="function")try{Ut.onPostCommitFiberRoot(Dr,v)}catch{}p=!0}return p}finally{ae.p=f,X.T=c,rg(t,i)}}return!1}function sg(t,i,s){i=Xt(s,i),i=ou(t.stateNode,i,2),t=vi(t,i,2),t!==null&&(Mr(t,2),Rn(t))}function Le(t,i,s){if(t.tag===3)sg(t,t,s);else for(;i!==null;){if(i.tag===3){sg(i,t,s);break}else if(i.tag===1){var c=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof c.componentDidCatch=="function"&&(Ci===null||!Ci.has(c))){t=Xt(s,t),s=lp(2),c=vi(i,s,2),c!==null&&(up(s,c,i,t),Mr(c,2),Rn(c));break}}i=i.return}}function Gu(t,i,s){var c=t.pingCache;if(c===null){c=t.pingCache=new OT;var f=new Set;c.set(i,f)}else f=c.get(i),f===void 0&&(f=new Set,c.set(i,f));f.has(s)||(xu=!0,f.add(s),t=NT.bind(null,t,i,s),i.then(t,t))}function NT(t,i,s){var c=t.pingCache;c!==null&&c.delete(i),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,Be===t&&(Ee&s)===s&&(Ze===4||Ze===3&&(Ee&62914560)===Ee&&300>Sn()-Lu?(Qe&2)===0&&Ja(t,0):Nu|=s,Za===Ee&&(Za=0)),Rn(t)}function og(t,i){i===0&&(i=dh()),t=li(t,i),t!==null&&(Mr(t,i),Rn(t))}function UT(t){var i=t.memoizedState,s=0;i!==null&&(s=i.retryLane),og(t,s)}function LT(t,i){var s=0;switch(t.tag){case 13:var c=t.stateNode,f=t.memoizedState;f!==null&&(s=f.retryLane);break;case 19:c=t.stateNode;break;case 22:c=t.stateNode._retryCache;break;default:throw Error(r(314))}c!==null&&c.delete(i),og(t,s)}function IT(t,i){return cl(t,i)}var Yo=null,er=null,Fu=!1,Ko=!1,Yu=!1,da=0;function Rn(t){t!==er&&t.next===null&&(er===null?Yo=er=t:er=er.next=t),Ko=!0,Fu||(Fu=!0,BT(jT))}function ms(t,i){if(!Yu&&Ko){Yu=!0;do for(var s=!1,c=Yo;c!==null;){if(t!==0){var f=c.pendingLanes;if(f===0)var p=0;else{var v=c.suspendedLanes,S=c.pingedLanes;p=(1<<31-Lt(42|t)+1)-1,p&=f&~(v&~S),p=p&201326677?p&201326677|1:p?p|2:0}p!==0&&(s=!0,ug(c,p))}else p=Ee,p=to(c,c===Be?p:0),(p&3)===0||Ar(c,p)||(s=!0,ug(c,p));c=c.next}while(s);Yu=!1}}function jT(){Ko=Fu=!1;var t=0;da!==0&&(KT()&&(t=da),da=0);for(var i=Sn(),s=null,c=Yo;c!==null;){var f=c.next,p=cg(c,i);p===0?(c.next=null,s===null?Yo=f:s.next=f,f===null&&(er=s)):(s=c,(t!==0||(p&3)!==0)&&(Ko=!0)),c=f}ms(t)}function cg(t,i){for(var s=t.suspendedLanes,c=t.pingedLanes,f=t.expirationTimes,p=t.pendingLanes&-62914561;0"u"?null:document;function Rg(t,i,s){var c=nr;if(c&&typeof i=="string"&&i){var f=Kt(i);f='link[rel="'+t+'"][href="'+f+'"]',typeof s=="string"&&(f+='[crossorigin="'+s+'"]'),Eg.has(f)||(Eg.add(f),t={rel:t,crossOrigin:s,href:i},c.querySelector(f)===null&&(i=c.createElement("link"),St(i,"link",t),ft(i),c.head.appendChild(i)))}}function tk(t){Jn.D(t),Rg("dns-prefetch",t,null)}function nk(t,i){Jn.C(t,i),Rg("preconnect",t,i)}function ik(t,i,s){Jn.L(t,i,s);var c=nr;if(c&&t&&i){var f='link[rel="preload"][as="'+Kt(i)+'"]';i==="image"&&s&&s.imageSrcSet?(f+='[imagesrcset="'+Kt(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(f+='[imagesizes="'+Kt(s.imageSizes)+'"]')):f+='[href="'+Kt(t)+'"]';var p=f;switch(i){case"style":p=ir(t);break;case"script":p=ar(t)}an.has(p)||(t=J({rel:"preload",href:i==="image"&&s&&s.imageSrcSet?void 0:t,as:i},s),an.set(p,t),c.querySelector(f)!==null||i==="style"&&c.querySelector(vs(p))||i==="script"&&c.querySelector(ys(p))||(i=c.createElement("link"),St(i,"link",t),ft(i),c.head.appendChild(i)))}}function ak(t,i){Jn.m(t,i);var s=nr;if(s&&t){var c=i&&typeof i.as=="string"?i.as:"script",f='link[rel="modulepreload"][as="'+Kt(c)+'"][href="'+Kt(t)+'"]',p=f;switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":p=ar(t)}if(!an.has(p)&&(t=J({rel:"modulepreload",href:t},i),an.set(p,t),s.querySelector(f)===null)){switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(ys(p)))return}c=s.createElement("link"),St(c,"link",t),ft(c),s.head.appendChild(c)}}}function rk(t,i,s){Jn.S(t,i,s);var c=nr;if(c&&t){var f=_a(c).hoistableStyles,p=ir(t);i=i||"default";var v=f.get(p);if(!v){var S={loading:0,preload:null};if(v=c.querySelector(vs(p)))S.loading=5;else{t=J({rel:"stylesheet",href:t,"data-precedence":i},s),(s=an.get(p))&&sd(t,s);var E=v=c.createElement("link");ft(E),St(E,"link",t),E._p=new Promise(function(M,q){E.onload=M,E.onerror=q}),E.addEventListener("load",function(){S.loading|=1}),E.addEventListener("error",function(){S.loading|=2}),S.loading|=4,$o(v,i,c)}v={type:"stylesheet",instance:v,count:1,state:S},f.set(p,v)}}}function sk(t,i){Jn.X(t,i);var s=nr;if(s&&t){var c=_a(s).hoistableScripts,f=ar(t),p=c.get(f);p||(p=s.querySelector(ys(f)),p||(t=J({src:t,async:!0},i),(i=an.get(f))&&od(t,i),p=s.createElement("script"),ft(p),St(p,"link",t),s.head.appendChild(p)),p={type:"script",instance:p,count:1,state:null},c.set(f,p))}}function ok(t,i){Jn.M(t,i);var s=nr;if(s&&t){var c=_a(s).hoistableScripts,f=ar(t),p=c.get(f);p||(p=s.querySelector(ys(f)),p||(t=J({src:t,async:!0,type:"module"},i),(i=an.get(f))&&od(t,i),p=s.createElement("script"),ft(p),St(p,"link",t),s.head.appendChild(p)),p={type:"script",instance:p,count:1,state:null},c.set(f,p))}}function _g(t,i,s,c){var f=(f=ri.current)?Wo(f):null;if(!f)throw Error(r(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(i=ir(s.href),s=_a(f).hoistableStyles,c=s.get(i),c||(c={type:"style",instance:null,count:0,state:null},s.set(i,c)),c):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=ir(s.href);var p=_a(f).hoistableStyles,v=p.get(t);if(v||(f=f.ownerDocument||f,v={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},p.set(t,v),(p=f.querySelector(vs(t)))&&!p._p&&(v.instance=p,v.state.loading=5),an.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},an.set(t,s),p||ck(f,t,s,v.state))),i&&c===null)throw Error(r(528,""));return v}if(i&&c!==null)throw Error(r(529,""));return null;case"script":return i=s.async,s=s.src,typeof s=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=ar(s),s=_a(f).hoistableScripts,c=s.get(i),c||(c={type:"script",instance:null,count:0,state:null},s.set(i,c)),c):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,t))}}function ir(t){return'href="'+Kt(t)+'"'}function vs(t){return'link[rel="stylesheet"]['+t+"]"}function wg(t){return J({},t,{"data-precedence":t.precedence,precedence:null})}function ck(t,i,s,c){t.querySelector('link[rel="preload"][as="style"]['+i+"]")?c.loading=1:(i=t.createElement("link"),c.preload=i,i.addEventListener("load",function(){return c.loading|=1}),i.addEventListener("error",function(){return c.loading|=2}),St(i,"link",s),ft(i),t.head.appendChild(i))}function ar(t){return'[src="'+Kt(t)+'"]'}function ys(t){return"script[async]"+t}function Og(t,i,s){if(i.count++,i.instance===null)switch(i.type){case"style":var c=t.querySelector('style[data-href~="'+Kt(s.href)+'"]');if(c)return i.instance=c,ft(c),c;var f=J({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return c=(t.ownerDocument||t).createElement("style"),ft(c),St(c,"style",f),$o(c,s.precedence,t),i.instance=c;case"stylesheet":f=ir(s.href);var p=t.querySelector(vs(f));if(p)return i.state.loading|=4,i.instance=p,ft(p),p;c=wg(s),(f=an.get(f))&&sd(c,f),p=(t.ownerDocument||t).createElement("link"),ft(p);var v=p;return v._p=new Promise(function(S,E){v.onload=S,v.onerror=E}),St(p,"link",c),i.state.loading|=4,$o(p,s.precedence,t),i.instance=p;case"script":return p=ar(s.src),(f=t.querySelector(ys(p)))?(i.instance=f,ft(f),f):(c=s,(f=an.get(p))&&(c=J({},s),od(c,f)),t=t.ownerDocument||t,f=t.createElement("script"),ft(f),St(f,"link",c),t.head.appendChild(f),i.instance=f);case"void":return null;default:throw Error(r(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(c=i.instance,i.state.loading|=4,$o(c,s.precedence,t));return i.instance}function $o(t,i,s){for(var c=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),f=c.length?c[c.length-1]:null,p=f,v=0;v title"):null)}function lk(t,i,s){if(s===1||i.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return t=i.disabled,typeof i.precedence=="string"&&t==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function Mg(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}var bs=null;function uk(){}function dk(t,i,s){if(bs===null)throw Error(r(475));var c=bs;if(i.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var f=ir(s.href),p=t.querySelector(vs(f));if(p){t=p._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(c.count++,c=tc.bind(c),t.then(c,c)),i.state.loading|=4,i.instance=p,ft(p);return}p=t.ownerDocument||t,s=wg(s),(f=an.get(f))&&sd(s,f),p=p.createElement("link"),ft(p);var v=p;v._p=new Promise(function(S,E){v.onload=S,v.onerror=E}),St(p,"link",s),i.instance=p}c.stylesheets===null&&(c.stylesheets=new Map),c.stylesheets.set(i,t),(t=i.state.preload)&&(i.state.loading&3)===0&&(c.count++,i=tc.bind(c),t.addEventListener("load",i),t.addEventListener("error",i))}}function fk(){if(bs===null)throw Error(r(475));var t=bs;return t.stylesheets&&t.count===0&&cd(t,t.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(e){console.error(e)}}return a(),vd.exports=Dk(),vd.exports}var Mk=Ak(),$g={};function Pk(a,e){return e.forEach(function(n){n&&typeof n!="string"&&!Array.isArray(n)&&Object.keys(n).forEach(function(r){if(r!=="default"&&!(r in a)){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(a,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}})}),Object.freeze(a)}var xk=Object.defineProperty,Nk=(a,e,n)=>e in a?xk(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,ev=(a,e,n)=>Nk(a,typeof e!="symbol"?e+"":e,n);let Ht=class{constructor(){ev(this,"_locking"),ev(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const n=new Promise(o=>e=()=>{this._locks-=1,o()}),r=this._locking.then(()=>e);return this._locking=this._locking.then(()=>n),r}};function $e(a,e){if(!a)throw new Error(e)}const Uk=34028234663852886e22,Lk=-34028234663852886e22,Ik=4294967295,jk=2147483647,Bk=-2147483648;function pc(a){if(typeof a!="number")throw new Error("invalid int 32: "+typeof a);if(!Number.isInteger(a)||a>jk||aIk||a<0)throw new Error("invalid uint 32: "+a)}function y0(a){if(typeof a!="number")throw new Error("invalid float 32: "+typeof a);if(Number.isFinite(a)&&(a>Uk||a({no:o.no,name:o.name,localName:a[o.no]})))}function T0(a,e,n){const r=Object.create(null),o=Object.create(null),l=[];for(const u of e){const d=k0(u);l.push(d),r[u.name]=d,o[u.no]=d}return{typeName:a,values:l,findName(u){return r[u]},findNumber(u){return o[u]}}}function qk(a,e,n){const r={};for(const o of e){const l=k0(o);r[l.localName]=l.no,r[l.no]=l.localName}return S0(r,a,e),r}function k0(a){return"localName"in a?a:Object.assign(Object.assign({},a),{localName:a.name})}class Pf{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,n){const r=this.getType(),o=r.runtime.bin,l=o.makeReadOptions(n);return o.readMessage(this,l.readerFactory(e),e.byteLength,l),this}fromJson(e,n){const r=this.getType(),o=r.runtime.json,l=o.makeReadOptions(n);return o.readMessage(r,e,l,this),this}fromJsonString(e,n){let r;try{r=JSON.parse(e)}catch(o){throw new Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(o instanceof Error?o.message:String(o)))}return this.fromJson(r,n)}toBinary(e){const n=this.getType(),r=n.runtime.bin,o=r.makeWriteOptions(e),l=o.writerFactory();return r.writeMessage(this,l,o),l.finish()}toJson(e){const n=this.getType(),r=n.runtime.json,o=r.makeWriteOptions(e);return r.writeMessage(this,o)}toJsonString(e){var n;const r=this.toJson(e);return JSON.stringify(r,null,(n=e==null?void 0:e.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function Vk(a,e,n,r){var o;const l=(o=r==null?void 0:r.localName)!==null&&o!==void 0?o:e.substring(e.lastIndexOf(".")+1),u={[l]:function(d){a.util.initFields(this),a.util.initPartial(d,this)}}[l];return Object.setPrototypeOf(u.prototype,new Pf),Object.assign(u,{runtime:a,typeName:e,fields:a.util.newFieldList(n),fromBinary(d,h){return new u().fromBinary(d,h)},fromJson(d,h){return new u().fromJson(d,h)},fromJsonString(d,h){return new u().fromJsonString(d,h)},equals(d,h){return a.util.equals(u,d,h)}}),u}function Hk(){let a=0,e=0;for(let r=0;r<28;r+=7){let o=this.buf[this.pos++];if(a|=(o&127)<>4,(n&128)==0)return this.assertBounds(),[a,e];for(let r=3;r<=31;r+=7){let o=this.buf[this.pos++];if(e|=(o&127)<>>l,d=!(!(u>>>7)&&e==0),h=(d?u|128:u)&255;if(n.push(h),!d)return}const r=a>>>28&15|(e&7)<<4,o=e>>3!=0;if(n.push((o?r|128:r)&255),!!o){for(let l=3;l<31;l=l+7){const u=e>>>l,d=!!(u>>>7),h=(d?u|128:u)&255;if(n.push(h),!d)return}n.push(e>>>31&1)}}const gc=4294967296;function tv(a){const e=a[0]==="-";e&&(a=a.slice(1));const n=1e6;let r=0,o=0;function l(u,d){const h=Number(a.slice(u,d));o*=n,r=r*n+h,r>=gc&&(o=o+(r/gc|0),r=r%gc)}return l(-24,-18),l(-18,-12),l(-12,-6),l(-6),e?E0(r,o):xf(r,o)}function Gk(a,e){let n=xf(a,e);const r=n.hi&2147483648;r&&(n=E0(n.lo,n.hi));const o=C0(n.lo,n.hi);return r?"-"+o:o}function C0(a,e){if({lo:a,hi:e}=Fk(a,e),e<=2097151)return String(gc*e+a);const n=a&16777215,r=(a>>>24|e<<8)&16777215,o=e>>16&65535;let l=n+r*6777216+o*6710656,u=r+o*8147497,d=o*2;const h=1e7;return l>=h&&(u+=Math.floor(l/h),l%=h),u>=h&&(d+=Math.floor(u/h),u%=h),d.toString()+nv(u)+nv(l)}function Fk(a,e){return{lo:a>>>0,hi:e>>>0}}function xf(a,e){return{lo:a|0,hi:e|0}}function E0(a,e){return e=~e,a?a=~a+1:e+=1,xf(a,e)}const nv=a=>{const e=String(a);return"0000000".slice(e.length)+e};function iv(a,e){if(a>=0){for(;a>127;)e.push(a&127|128),a=a>>>7;e.push(a)}else{for(let n=0;n<9;n++)e.push(a&127|128),a=a>>7;e.push(1)}}function Yk(){let a=this.buf[this.pos++],e=a&127;if((a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<7,(a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<14,(a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<21,(a&128)==0)return this.assertBounds(),e;a=this.buf[this.pos++],e|=(a&15)<<28;for(let n=5;(a&128)!==0&&n<10;n++)a=this.buf[this.pos++];if((a&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Kk(){const a=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof a.getBigInt64=="function"&&typeof a.getBigUint64=="function"&&typeof a.setBigInt64=="function"&&typeof a.setBigUint64=="function"&&(typeof process!="object"||typeof $g!="object"||$g.BUF_BIGINT_DISABLE!=="1")){const o=BigInt("-9223372036854775808"),l=BigInt("9223372036854775807"),u=BigInt("0"),d=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(h){const m=typeof h=="bigint"?h:BigInt(h);if(m>l||md||m$e(/^-?[0-9]+$/.test(o),"int64 invalid: ".concat(o)),r=o=>$e(/^[0-9]+$/.test(o),"uint64 invalid: ".concat(o));return{zero:"0",supported:!1,parse(o){return typeof o!="string"&&(o=o.toString()),n(o),o},uParse(o){return typeof o!="string"&&(o=o.toString()),r(o),o},enc(o){return typeof o!="string"&&(o=o.toString()),n(o),tv(o)},uEnc(o){return typeof o!="string"&&(o=o.toString()),r(o),tv(o)},dec(o,l){return Gk(o,l)},uDec(o,l){return C0(o,l)}}}const Ge=Kk();var Y;(function(a){a[a.DOUBLE=1]="DOUBLE",a[a.FLOAT=2]="FLOAT",a[a.INT64=3]="INT64",a[a.UINT64=4]="UINT64",a[a.INT32=5]="INT32",a[a.FIXED64=6]="FIXED64",a[a.FIXED32=7]="FIXED32",a[a.BOOL=8]="BOOL",a[a.STRING=9]="STRING",a[a.BYTES=12]="BYTES",a[a.UINT32=13]="UINT32",a[a.SFIXED32=15]="SFIXED32",a[a.SFIXED64=16]="SFIXED64",a[a.SINT32=17]="SINT32",a[a.SINT64=18]="SINT64"})(Y||(Y={}));var ji;(function(a){a[a.BIGINT=0]="BIGINT",a[a.STRING=1]="STRING"})(ji||(ji={}));function Di(a,e,n){if(e===n)return!0;if(a==Y.BYTES){if(!(e instanceof Uint8Array)||!(n instanceof Uint8Array)||e.length!==n.length)return!1;for(let r=0;r>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(Vd(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return pc(e),iv(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 n=this.textEncoder.encode(e);return this.uint32(n.byteLength),this.raw(n)}float(e){y0(e);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,e,!0),this.raw(n)}double(e){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,e,!0),this.raw(n)}fixed32(e){Vd(e);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,e,!0),this.raw(n)}sfixed32(e){pc(e);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,e,!0),this.raw(n)}sint32(e){return pc(e),e=(e<<1^e>>31)>>>0,iv(e,this.buf),this}sfixed64(e){let n=new Uint8Array(8),r=new DataView(n.buffer),o=Ge.enc(e);return r.setInt32(0,o.lo,!0),r.setInt32(4,o.hi,!0),this.raw(n)}fixed64(e){let n=new Uint8Array(8),r=new DataView(n.buffer),o=Ge.uEnc(e);return r.setInt32(0,o.lo,!0),r.setInt32(4,o.hi,!0),this.raw(n)}int64(e){let n=Ge.enc(e);return Td(n.lo,n.hi,this.buf),this}sint64(e){let n=Ge.enc(e),r=n.hi>>31,o=n.lo<<1^r,l=(n.hi<<1|n.lo>>>31)^r;return Td(o,l,this.buf),this}uint64(e){let n=Ge.uEnc(e);return Td(n.lo,n.hi,this.buf),this}}class Xk{constructor(e,n){this.varint64=Hk,this.uint32=Yk,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=n??new TextDecoder}tag(){let e=this.uint32(),n=e>>>3,r=e&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(e,n){let r=this.pos;switch(e){case nt.Varint:for(;this.buf[this.pos++]&128;);break;case nt.Bit64:this.pos+=4;case nt.Bit32:this.pos+=4;break;case nt.LengthDelimited:let o=this.uint32();this.pos+=o;break;case nt.StartGroup:for(;;){const[l,u]=this.tag();if(u===nt.EndGroup){if(n!==void 0&&l!==n)throw new Error("invalid end group tag");break}this.skip(u,l)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(r,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return Ge.dec(...this.varint64())}uint64(){return Ge.uDec(...this.varint64())}sint64(){let[e,n]=this.varint64(),r=-(e&1);return e=(e>>>1|(n&1)<<31)^r,n=n>>>1^r,Ge.dec(e,n)}bool(){let[e,n]=this.varint64();return e!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Ge.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Ge.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(),n=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(n,n+e)}string(){return this.textDecoder.decode(this.bytes())}}function Zk(a,e,n,r){let o;return{typeName:e,extendee:n,get field(){if(!o){const l=typeof r=="function"?r():r;l.name=e.split(".").pop(),l.jsonName="[".concat(e,"]"),o=a.util.newFieldList([l]).list()[0]}return o},runtime:a}}function _0(a){const e=a.field.localName,n=Object.create(null);return n[e]=Jk(a),[n,()=>n[e]]}function Jk(a){const e=a.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return yr(e.T,e.L);case"message":const n=e.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function Wk(a,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let n=a.length-1;n>=0;--n)if(a[n].no==e.no)return[a[n]];return[]}return a.filter(n=>n.no===e.no)}let Wn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Gc=[];for(let a=0;a>>=0,t===0?32:31-(oS(t)/cS|0)|0}var $s=128,eo=4194304;function Gi(t){var i=t&42;if(i!==0)return i;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194176;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function to(t,i){var s=t.pendingLanes;if(s===0)return 0;var c=0,f=t.suspendedLanes,p=t.pingedLanes,v=t.warmLanes;t=t.finishedLanes!==0;var S=s&134217727;return S!==0?(s=S&~f,s!==0?c=Gi(s):(p&=S,p!==0?c=Gi(p):t||(v=S&~v,v!==0&&(c=Gi(v))))):(S=s&~f,S!==0?c=Gi(S):p!==0?c=Gi(p):t||(v=s&~v,v!==0&&(c=Gi(v)))),c===0?0:i!==0&&i!==c&&(i&f)===0&&(f=c&-c,v=i&-i,f>=v||f===32&&(v&4194176)!==0)?i:c}function Ar(t,i){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&i)===0}function uS(t,i){switch(t){case 1:case 2:case 4:case 8:return i+250;case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function uh(){var t=$s;return $s<<=1,($s&4194176)===0&&($s=128),t}function dh(){var t=eo;return eo<<=1,(eo&62914560)===0&&(eo=4194304),t}function ul(t){for(var i=[],s=0;31>s;s++)i.push(t);return i}function Mr(t,i){t.pendingLanes|=i,i!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function dS(t,i,s,c,f,p){var v=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var S=t.entanglements,E=t.expirationTimes,M=t.hiddenUpdates;for(s=v&~s;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pS=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),bh={},Sh={};function gS(t){return ol.call(Sh,t)?!0:ol.call(bh,t)?!1:pS.test(t)?Sh[t]=!0:(bh[t]=!0,!1)}function no(t,i,s){if(gS(i))if(s===null)t.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":t.removeAttribute(i);return;case"boolean":var c=i.toLowerCase().slice(0,5);if(c!=="data-"&&c!=="aria-"){t.removeAttribute(i);return}}t.setAttribute(i,""+s)}}function io(t,i,s){if(s===null)t.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(i);return}t.setAttribute(i,""+s)}}function Ln(t,i,s,c){if(c===null)t.removeAttribute(s);else{switch(typeof c){case"undefined":case"function":case"symbol":case"boolean":t.removeAttribute(s);return}t.setAttributeNS(i,s,""+c)}}function Yt(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Th(t){var i=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(i==="checkbox"||i==="radio")}function vS(t){var i=Th(t)?"checked":"value",s=Object.getOwnPropertyDescriptor(t.constructor.prototype,i),c=""+t[i];if(!t.hasOwnProperty(i)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var f=s.get,p=s.set;return Object.defineProperty(t,i,{configurable:!0,get:function(){return f.call(this)},set:function(v){c=""+v,p.call(this,v)}}),Object.defineProperty(t,i,{enumerable:s.enumerable}),{getValue:function(){return c},setValue:function(v){c=""+v},stopTracking:function(){t._valueTracker=null,delete t[i]}}}}function ao(t){t._valueTracker||(t._valueTracker=vS(t))}function kh(t){if(!t)return!1;var i=t._valueTracker;if(!i)return!0;var s=i.getValue(),c="";return t&&(c=Th(t)?t.checked?"true":"false":t.value),t=c,t!==s?(i.setValue(t),!0):!1}function ro(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var yS=/[\n"\\]/g;function Kt(t){return t.replace(yS,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function hl(t,i,s,c,f,p,v,S){t.name="",v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"?t.type=v:t.removeAttribute("type"),i!=null?v==="number"?(i===0&&t.value===""||t.value!=i)&&(t.value=""+Yt(i)):t.value!==""+Yt(i)&&(t.value=""+Yt(i)):v!=="submit"&&v!=="reset"||t.removeAttribute("value"),i!=null?ml(t,v,Yt(i)):s!=null?ml(t,v,Yt(s)):c!=null&&t.removeAttribute("value"),f==null&&p!=null&&(t.defaultChecked=!!p),f!=null&&(t.checked=f&&typeof f!="function"&&typeof f!="symbol"),S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?t.name=""+Yt(S):t.removeAttribute("name")}function Ch(t,i,s,c,f,p,v,S){if(p!=null&&typeof p!="function"&&typeof p!="symbol"&&typeof p!="boolean"&&(t.type=p),i!=null||s!=null){if(!(p!=="submit"&&p!=="reset"||i!=null))return;s=s!=null?""+Yt(s):"",i=i!=null?""+Yt(i):s,S||i===t.value||(t.value=i),t.defaultValue=i}c=c??f,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=S?t.checked:!!c,t.defaultChecked=!!c,v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(t.name=v)}function ml(t,i,s){i==="number"&&ro(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function Oa(t,i,s,c){if(t=t.options,i){i={};for(var f=0;f=jr),Lh=" ",Ih=!1;function jh(t,i){switch(t){case"keyup":return YS.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Bh(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Pa=!1;function QS(t,i){switch(t){case"compositionend":return Bh(i);case"keypress":return i.which!==32?null:(Ih=!0,Lh);case"textInput":return t=i.data,t===Lh&&Ih?null:t;default:return null}}function XS(t,i){if(Pa)return t==="compositionend"||!Rl&&jh(t,i)?(t=Ah(),oo=Sl=ci=null,Pa=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:s,offset:i-t};t=c}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=Kh(s)}}function Xh(t,i){return t&&i?t===i?!0:t&&t.nodeType===3?!1:i&&i.nodeType===3?Xh(t,i.parentNode):"contains"in t?t.contains(i):t.compareDocumentPosition?!!(t.compareDocumentPosition(i)&16):!1:!1}function Zh(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var i=ro(t.document);i instanceof t.HTMLIFrameElement;){try{var s=typeof i.contentWindow.location.href=="string"}catch{s=!1}if(s)t=i.contentWindow;else break;i=ro(t.document)}return i}function Ol(t){var i=t&&t.nodeName&&t.nodeName.toLowerCase();return i&&(i==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||i==="textarea"||t.contentEditable==="true")}function iT(t,i){var s=Zh(i);i=t.focusedElem;var c=t.selectionRange;if(s!==i&&i&&i.ownerDocument&&Xh(i.ownerDocument.documentElement,i)){if(c!==null&&Ol(i)){if(t=c.start,s=c.end,s===void 0&&(s=t),"selectionStart"in i)i.selectionStart=t,i.selectionEnd=Math.min(s,i.value.length);else if(s=(t=i.ownerDocument||document)&&t.defaultView||window,s.getSelection){s=s.getSelection();var f=i.textContent.length,p=Math.min(c.start,f);c=c.end===void 0?p:Math.min(c.end,f),!s.extend&&p>c&&(f=c,c=p,p=f),f=Qh(i,p);var v=Qh(i,c);f&&v&&(s.rangeCount!==1||s.anchorNode!==f.node||s.anchorOffset!==f.offset||s.focusNode!==v.node||s.focusOffset!==v.offset)&&(t=t.createRange(),t.setStart(f.node,f.offset),s.removeAllRanges(),p>c?(s.addRange(t),s.extend(v.node,v.offset)):(t.setEnd(v.node,v.offset),s.addRange(t)))}}for(t=[],s=i;s=s.parentNode;)s.nodeType===1&&t.push({element:s,left:s.scrollLeft,top:s.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,xa=null,Dl=null,Vr=null,Al=!1;function Jh(t,i,s){var c=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;Al||xa==null||xa!==ro(c)||(c=xa,"selectionStart"in c&&Ol(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Vr&&qr(Vr,c)||(Vr=c,c=Xo(Dl,"onSelect"),0>=v,f-=v,In=1<<32-Lt(i)+f|s<de?(pt=ce,ce=null):pt=ce.sibling;var Oe=L(x,ce,N[de],G);if(Oe===null){ce===null&&(ce=pt);break}t&&ce&&Oe.alternate===null&&i(x,ce),A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe,ce=pt}if(de===N.length)return s(x,ce),we&&Ji(x,de),re;if(ce===null){for(;dede?(pt=ce,ce=null):pt=ce.sibling;var Oi=L(x,ce,Oe.value,G);if(Oi===null){ce===null&&(ce=pt);break}t&&ce&&Oi.alternate===null&&i(x,ce),A=p(Oi,A,de),ye===null?re=Oi:ye.sibling=Oi,ye=Oi,ce=pt}if(Oe.done)return s(x,ce),we&&Ji(x,de),re;if(ce===null){for(;!Oe.done;de++,Oe=N.next())Oe=K(x,Oe.value,G),Oe!==null&&(A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe);return we&&Ji(x,de),re}for(ce=c(ce);!Oe.done;de++,Oe=N.next())Oe=z(ce,x,de,Oe.value,G),Oe!==null&&(t&&Oe.alternate!==null&&ce.delete(Oe.key===null?de:Oe.key),A=p(Oe,A,de),ye===null?re=Oe:ye.sibling=Oe,ye=Oe);return t&&ce.forEach(function(Tk){return i(x,Tk)}),we&&Ji(x,de),re}function Je(x,A,N,G){if(typeof N=="object"&&N!==null&&N.type===h&&N.key===null&&(N=N.props.children),typeof N=="object"&&N!==null){switch(N.$$typeof){case u:e:{for(var re=N.key;A!==null;){if(A.key===re){if(re=N.type,re===h){if(A.tag===7){s(x,A.sibling),G=f(A,N.props.children),G.return=x,x=G;break e}}else if(A.elementType===re||typeof re=="object"&&re!==null&&re.$$typeof===V&&mm(re)===A.type){s(x,A.sibling),G=f(A,N.props),Xr(G,N),G.return=x,x=G;break e}s(x,A);break}else i(x,A);A=A.sibling}N.type===h?(G=ca(N.props.children,x.mode,G,N.key),G.return=x,x=G):(G=Bo(N.type,N.key,N.props,null,x.mode,G),Xr(G,N),G.return=x,x=G)}return v(x);case d:e:{for(re=N.key;A!==null;){if(A.key===re)if(A.tag===4&&A.stateNode.containerInfo===N.containerInfo&&A.stateNode.implementation===N.implementation){s(x,A.sibling),G=f(A,N.children||[]),G.return=x,x=G;break e}else{s(x,A);break}else i(x,A);A=A.sibling}G=Pu(N,x.mode,G),G.return=x,x=G}return v(x);case V:return re=N._init,N=re(N._payload),Je(x,A,N,G)}if(le(N))return se(x,A,N,G);if(H(N)){if(re=H(N),typeof re!="function")throw Error(r(150));return N=re.call(N),me(x,A,N,G)}if(typeof N.then=="function")return Je(x,A,So(N),G);if(N.$$typeof===T)return Je(x,A,Lo(x,N),G);To(x,N)}return typeof N=="string"&&N!==""||typeof N=="number"||typeof N=="bigint"?(N=""+N,A!==null&&A.tag===6?(s(x,A.sibling),G=f(A,N),G.return=x,x=G):(s(x,A),G=Mu(N,x.mode,G),G.return=x,x=G),v(x)):s(x,A)}return function(x,A,N,G){try{Qr=0;var re=Je(x,A,N,G);return Ba=null,re}catch(ce){if(ce===Yr)throw ce;var ye=tn(29,ce,null,x.mode);return ye.lanes=G,ye.return=x,ye}finally{}}}var $i=pm(!0),gm=pm(!1),za=De(null),ko=De(0);function vm(t,i){t=Xn,Ve(ko,t),Ve(za,i),Xn=t|i.baseLanes}function jl(){Ve(ko,Xn),Ve(za,za.current)}function Bl(){Xn=ko.current,it(za),it(ko)}var Wt=De(null),kn=null;function ui(t){var i=t.alternate;Ve(ct,ct.current&1),Ve(Wt,t),kn===null&&(i===null||za.current!==null||i.memoizedState!==null)&&(kn=t)}function ym(t){if(t.tag===22){if(Ve(ct,ct.current),Ve(Wt,t),kn===null){var i=t.alternate;i!==null&&i.memoizedState!==null&&(kn=t)}}else di()}function di(){Ve(ct,ct.current),Ve(Wt,Wt.current)}function Bn(t){it(Wt),kn===t&&(kn=null),it(ct)}var ct=De(0);function Co(t){for(var i=t;i!==null;){if(i.tag===13){var s=i.memoizedState;if(s!==null&&(s=s.dehydrated,s===null||s.data==="$?"||s.data==="$!"))return i}else if(i.tag===19&&i.memoizedProps.revealOrder!==void 0){if((i.flags&128)!==0)return i}else if(i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break;for(;i.sibling===null;){if(i.return===null||i.return===t)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var cT=typeof AbortController<"u"?AbortController:function(){var t=[],i=this.signal={aborted:!1,addEventListener:function(s,c){t.push(c)}};this.abort=function(){i.aborted=!0,t.forEach(function(s){return s()})}},lT=a.unstable_scheduleCallback,uT=a.unstable_NormalPriority,lt={$$typeof:T,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function zl(){return{controller:new cT,data:new Map,refCount:0}}function Zr(t){t.refCount--,t.refCount===0&&lT(uT,function(){t.controller.abort()})}var Jr=null,ql=0,qa=0,Va=null;function dT(t,i){if(Jr===null){var s=Jr=[];ql=0,qa=Ku(),Va={status:"pending",value:void 0,then:function(c){s.push(c)}}}return ql++,i.then(bm,bm),i}function bm(){if(--ql===0&&Jr!==null){Va!==null&&(Va.status="fulfilled");var t=Jr;Jr=null,qa=0,Va=null;for(var i=0;ip?p:8;var v=X.T,S={};X.T=S,au(t,!1,i,s);try{var E=f(),M=X.S;if(M!==null&&M(S,E),E!==null&&typeof E=="object"&&typeof E.then=="function"){var q=fT(E,c);es(t,i,q,qt(t))}else es(t,i,c,qt(t))}catch(K){es(t,i,{then:function(){},status:"rejected",reason:K},qt())}finally{ae.p=p,X.T=v}}function vT(){}function nu(t,i,s,c){if(t.tag!==5)throw Error(r(476));var f=Zm(t).queue;Xm(t,f,i,Ce,s===null?vT:function(){return Jm(t),s(c)})}function Zm(t){var i=t.memoizedState;if(i!==null)return i;i={memoizedState:Ce,baseState:Ce,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zn,lastRenderedState:Ce},next:null};var s={};return i.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zn,lastRenderedState:s},next:null},t.memoizedState=i,t=t.alternate,t!==null&&(t.memoizedState=i),i}function Jm(t){var i=Zm(t).next.queue;es(t,i,{},qt())}function iu(){return Ct(Ss)}function Wm(){return rt().memoizedState}function $m(){return rt().memoizedState}function yT(t){for(var i=t.return;i!==null;){switch(i.tag){case 24:case 3:var s=qt();t=gi(s);var c=vi(i,t,s);c!==null&&(wt(c,i,s),is(c,i,s)),i={cache:zl()},t.payload=i;return}i=i.return}}function bT(t,i,s){var c=qt();s={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null},Po(t)?tp(i,s):(s=xl(t,i,s,c),s!==null&&(wt(s,t,c),np(s,i,c)))}function ep(t,i,s){var c=qt();es(t,i,s,c)}function es(t,i,s,c){var f={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null};if(Po(t))tp(i,f);else{var p=t.alternate;if(t.lanes===0&&(p===null||p.lanes===0)&&(p=i.lastRenderedReducer,p!==null))try{var v=i.lastRenderedState,S=p(v,s);if(f.hasEagerState=!0,f.eagerState=S,It(S,v))return po(t,i,f,0),Be===null&&mo(),!1}catch{}finally{}if(s=xl(t,i,f,c),s!==null)return wt(s,t,c),np(s,i,c),!0}return!1}function au(t,i,s,c){if(c={lane:2,revertLane:Ku(),action:c,hasEagerState:!1,eagerState:null,next:null},Po(t)){if(i)throw Error(r(479))}else i=xl(t,s,c,2),i!==null&&wt(i,t,2)}function Po(t){var i=t.alternate;return t===ve||i!==null&&i===ve}function tp(t,i){Ha=Ro=!0;var s=t.pending;s===null?i.next=i:(i.next=s.next,s.next=i),t.pending=i}function np(t,i,s){if((s&4194176)!==0){var c=i.lanes;c&=t.pendingLanes,s|=c,i.lanes=s,hh(t,s)}}var Cn={readContext:Ct,use:Oo,useCallback:tt,useContext:tt,useEffect:tt,useImperativeHandle:tt,useLayoutEffect:tt,useInsertionEffect:tt,useMemo:tt,useReducer:tt,useRef:tt,useState:tt,useDebugValue:tt,useDeferredValue:tt,useTransition:tt,useSyncExternalStore:tt,useId:tt};Cn.useCacheRefresh=tt,Cn.useMemoCache=tt,Cn.useHostTransitionStatus=tt,Cn.useFormState=tt,Cn.useActionState=tt,Cn.useOptimistic=tt;var na={readContext:Ct,use:Oo,useCallback:function(t,i){return At().memoizedState=[t,i===void 0?null:i],t},useContext:Ct,useEffect:qm,useImperativeHandle:function(t,i,s){s=s!=null?s.concat([t]):null,Ao(4194308,4,Gm.bind(null,i,t),s)},useLayoutEffect:function(t,i){return Ao(4194308,4,t,i)},useInsertionEffect:function(t,i){Ao(4,2,t,i)},useMemo:function(t,i){var s=At();i=i===void 0?null:i;var c=t();if(ta){si(!0);try{t()}finally{si(!1)}}return s.memoizedState=[c,i],c},useReducer:function(t,i,s){var c=At();if(s!==void 0){var f=s(i);if(ta){si(!0);try{s(i)}finally{si(!1)}}}else f=i;return c.memoizedState=c.baseState=f,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:f},c.queue=t,t=t.dispatch=bT.bind(null,ve,t),[c.memoizedState,t]},useRef:function(t){var i=At();return t={current:t},i.memoizedState=t},useState:function(t){t=Jl(t);var i=t.queue,s=ep.bind(null,ve,i);return i.dispatch=s,[t.memoizedState,s]},useDebugValue:eu,useDeferredValue:function(t,i){var s=At();return tu(s,t,i)},useTransition:function(){var t=Jl(!1);return t=Xm.bind(null,ve,t.queue,!0,!1),At().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,i,s){var c=ve,f=At();if(we){if(s===void 0)throw Error(r(407));s=s()}else{if(s=i(),Be===null)throw Error(r(349));(Ee&60)!==0||Rm(c,i,s)}f.memoizedState=s;var p={value:s,getSnapshot:i};return f.queue=p,qm(wm.bind(null,c,p,t),[t]),c.flags|=2048,Fa(9,_m.bind(null,c,p,s,i),{destroy:void 0},null),s},useId:function(){var t=At(),i=Be.identifierPrefix;if(we){var s=jn,c=In;s=(c&~(1<<32-Lt(c)-1)).toString(32)+s,i=":"+i+"R"+s,s=_o++,0 title"))),St(p,c,s),p[kt]=t,ft(p),c=p;break e;case"link":var v=Dg("link","href",f).get(c+(s.href||""));if(v){for(var S=0;S<\/script>",t=t.removeChild(t.firstChild);break;case"select":t=typeof c.is=="string"?f.createElement("select",{is:c.is}):f.createElement("select"),c.multiple?t.multiple=!0:c.size&&(t.size=c.size);break;default:t=typeof c.is=="string"?f.createElement(s,{is:c.is}):f.createElement(s)}}t[kt]=i,t[Ot]=c;e:for(f=i.child;f!==null;){if(f.tag===5||f.tag===6)t.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===i)break e;for(;f.sibling===null;){if(f.return===null||f.return===i)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}i.stateNode=t;e:switch(St(t,s,c),s){case"button":case"input":case"select":case"textarea":t=!!c.autoFocus;break e;case"img":t=!0;break e;default:t=!1}t&&Kn(i)}}return Ke(i),i.flags&=-16777217,null;case 6:if(t&&i.stateNode!=null)t.memoizedProps!==c&&Kn(i);else{if(typeof c!="string"&&i.stateNode===null)throw Error(r(166));if(t=ri.current,Hr(i)){if(t=i.stateNode,s=i.memoizedProps,c=null,f=_t,f!==null)switch(f.tag){case 27:case 5:c=f.memoizedProps}t[kt]=i,t=!!(t.nodeValue===s||c!==null&&c.suppressHydrationWarning===!0||vg(t.nodeValue,s)),t||Wi(i)}else t=Jo(t).createTextNode(c),t[kt]=i,i.stateNode=t}return Ke(i),null;case 13:if(c=i.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(f=Hr(i),c!==null&&c.dehydrated!==null){if(t===null){if(!f)throw Error(r(318));if(f=i.memoizedState,f=f!==null?f.dehydrated:null,!f)throw Error(r(317));f[kt]=i}else Gr(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Ke(i),f=!1}else on!==null&&(zu(on),on=null),f=!0;if(!f)return i.flags&256?(Bn(i),i):(Bn(i),null)}if(Bn(i),(i.flags&128)!==0)return i.lanes=s,i;if(s=c!==null,t=t!==null&&t.memoizedState!==null,s){c=i.child,f=null,c.alternate!==null&&c.alternate.memoizedState!==null&&c.alternate.memoizedState.cachePool!==null&&(f=c.alternate.memoizedState.cachePool.pool);var p=null;c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(p=c.memoizedState.cachePool.pool),p!==f&&(c.flags|=2048)}return s!==t&&s&&(i.child.flags|=8192),zo(i,i.updateQueue),Ke(i),null;case 4:return Ca(),t===null&&Ju(i.stateNode.containerInfo),Ke(i),null;case 10:return Hn(i.type),Ke(i),null;case 19:if(it(ct),f=i.memoizedState,f===null)return Ke(i),null;if(c=(i.flags&128)!==0,p=f.rendering,p===null)if(c)us(f,!1);else{if(Ze!==0||t!==null&&(t.flags&128)!==0)for(t=i.child;t!==null;){if(p=Co(t),p!==null){for(i.flags|=128,us(f,!1),t=p.updateQueue,i.updateQueue=t,zo(i,t),i.subtreeFlags=0,t=s,s=i.child;s!==null;)Fp(s,t),s=s.sibling;return Ve(ct,ct.current&1|2),i.child}t=t.sibling}f.tail!==null&&Sn()>qo&&(i.flags|=128,c=!0,us(f,!1),i.lanes=4194304)}else{if(!c)if(t=Co(p),t!==null){if(i.flags|=128,c=!0,t=t.updateQueue,i.updateQueue=t,zo(i,t),us(f,!0),f.tail===null&&f.tailMode==="hidden"&&!p.alternate&&!we)return Ke(i),null}else 2*Sn()-f.renderingStartTime>qo&&s!==536870912&&(i.flags|=128,c=!0,us(f,!1),i.lanes=4194304);f.isBackwards?(p.sibling=i.child,i.child=p):(t=f.last,t!==null?t.sibling=p:i.child=p,f.last=p)}return f.tail!==null?(i=f.tail,f.rendering=i,f.tail=i.sibling,f.renderingStartTime=Sn(),i.sibling=null,t=ct.current,Ve(ct,c?t&1|2:t&1),i):(Ke(i),null);case 22:case 23:return Bn(i),Bl(),c=i.memoizedState!==null,t!==null?t.memoizedState!==null!==c&&(i.flags|=8192):c&&(i.flags|=8192),c?(s&536870912)!==0&&(i.flags&128)===0&&(Ke(i),i.subtreeFlags&6&&(i.flags|=8192)):Ke(i),s=i.updateQueue,s!==null&&zo(i,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),c=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(c=i.memoizedState.cachePool.pool),c!==s&&(i.flags|=2048),t!==null&&it(ea),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),i.memoizedState.cache!==s&&(i.flags|=2048),Hn(lt),Ke(i),null;case 25:return null}throw Error(r(156,i.tag))}function _T(t,i){switch(Ul(i),i.tag){case 1:return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 3:return Hn(lt),Ca(),t=i.flags,(t&65536)!==0&&(t&128)===0?(i.flags=t&-65537|128,i):null;case 26:case 27:case 5:return Js(i),null;case 13:if(Bn(i),t=i.memoizedState,t!==null&&t.dehydrated!==null){if(i.alternate===null)throw Error(r(340));Gr()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 19:return it(ct),null;case 4:return Ca(),null;case 10:return Hn(i.type),null;case 22:case 23:return Bn(i),Bl(),t!==null&&it(ea),t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 24:return Hn(lt),null;case 25:return null;default:return null}}function Qp(t,i){switch(Ul(i),i.tag){case 3:Hn(lt),Ca();break;case 26:case 27:case 5:Js(i);break;case 4:Ca();break;case 13:Bn(i);break;case 19:it(ct);break;case 10:Hn(i.type);break;case 22:case 23:Bn(i),Bl(),t!==null&&it(ea);break;case 24:Hn(lt)}}var wT={getCacheForType:function(t){var i=Ct(lt),s=i.data.get(t);return s===void 0&&(s=t(),i.data.set(t,s)),s}},OT=typeof WeakMap=="function"?WeakMap:Map,Qe=0,Be=null,be=null,Ee=0,ze=0,zt=null,Qn=!1,Xa=!1,xu=!1,Xn=0,Ze=0,ki=0,la=0,Nu=0,nn=0,Za=0,ds=null,En=null,Uu=!1,Lu=0,qo=1/0,Vo=null,Ci=null,Ho=!1,ua=null,fs=0,Iu=0,ju=null,hs=0,Bu=null;function qt(){if((Qe&2)!==0&&Ee!==0)return Ee&-Ee;if(X.T!==null){var t=qa;return t!==0?t:Ku()}return ph()}function Xp(){nn===0&&(nn=(Ee&536870912)===0||we?uh():536870912);var t=Wt.current;return t!==null&&(t.flags|=32),nn}function wt(t,i,s){(t===Be&&ze===2||t.cancelPendingCommit!==null)&&(Ja(t,0),Zn(t,Ee,nn,!1)),Mr(t,s),((Qe&2)===0||t!==Be)&&(t===Be&&((Qe&2)===0&&(la|=s),Ze===4&&Zn(t,Ee,nn,!1)),Rn(t))}function Zp(t,i,s){if((Qe&6)!==0)throw Error(r(327));var c=!s&&(i&60)===0&&(i&t.expiredLanes)===0||Ar(t,i),f=c?MT(t,i):Hu(t,i,!0),p=c;do{if(f===0){Xa&&!c&&Zn(t,i,0,!1);break}else if(f===6)Zn(t,i,0,!Qn);else{if(s=t.current.alternate,p&&!DT(s)){f=Hu(t,i,!1),p=!1;continue}if(f===2){if(p=i,t.errorRecoveryDisabledLanes&p)var v=0;else v=t.pendingLanes&-536870913,v=v!==0?v:v&536870912?536870912:0;if(v!==0){i=v;e:{var S=t;f=ds;var E=S.current.memoizedState.isDehydrated;if(E&&(Ja(S,v).flags|=256),v=Hu(S,v,!1),v!==2){if(xu&&!E){S.errorRecoveryDisabledLanes|=p,la|=p,f=4;break e}p=En,En=f,p!==null&&zu(p)}f=v}if(p=!1,f!==2)continue}}if(f===1){Ja(t,0),Zn(t,i,0,!0);break}e:{switch(c=t,f){case 0:case 1:throw Error(r(345));case 4:if((i&4194176)===i){Zn(c,i,nn,!Qn);break e}break;case 2:En=null;break;case 3:case 5:break;default:throw Error(r(329))}if(c.finishedWork=s,c.finishedLanes=i,(i&62914560)===i&&(p=Lu+300-Sn(),10s?32:s,X.T=null,ua===null)var p=!1;else{s=ju,ju=null;var v=ua,S=fs;if(ua=null,fs=0,(Qe&6)!==0)throw Error(r(331));var E=Qe;if(Qe|=4,Hp(v.current),zp(v,v.current,S,s),Qe=E,ms(0,!1),Ut&&typeof Ut.onPostCommitFiberRoot=="function")try{Ut.onPostCommitFiberRoot(Dr,v)}catch{}p=!0}return p}finally{ae.p=f,X.T=c,rg(t,i)}}return!1}function sg(t,i,s){i=Xt(s,i),i=ou(t.stateNode,i,2),t=vi(t,i,2),t!==null&&(Mr(t,2),Rn(t))}function Le(t,i,s){if(t.tag===3)sg(t,t,s);else for(;i!==null;){if(i.tag===3){sg(i,t,s);break}else if(i.tag===1){var c=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof c.componentDidCatch=="function"&&(Ci===null||!Ci.has(c))){t=Xt(s,t),s=lp(2),c=vi(i,s,2),c!==null&&(up(s,c,i,t),Mr(c,2),Rn(c));break}}i=i.return}}function Gu(t,i,s){var c=t.pingCache;if(c===null){c=t.pingCache=new OT;var f=new Set;c.set(i,f)}else f=c.get(i),f===void 0&&(f=new Set,c.set(i,f));f.has(s)||(xu=!0,f.add(s),t=NT.bind(null,t,i,s),i.then(t,t))}function NT(t,i,s){var c=t.pingCache;c!==null&&c.delete(i),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,Be===t&&(Ee&s)===s&&(Ze===4||Ze===3&&(Ee&62914560)===Ee&&300>Sn()-Lu?(Qe&2)===0&&Ja(t,0):Nu|=s,Za===Ee&&(Za=0)),Rn(t)}function og(t,i){i===0&&(i=dh()),t=li(t,i),t!==null&&(Mr(t,i),Rn(t))}function UT(t){var i=t.memoizedState,s=0;i!==null&&(s=i.retryLane),og(t,s)}function LT(t,i){var s=0;switch(t.tag){case 13:var c=t.stateNode,f=t.memoizedState;f!==null&&(s=f.retryLane);break;case 19:c=t.stateNode;break;case 22:c=t.stateNode._retryCache;break;default:throw Error(r(314))}c!==null&&c.delete(i),og(t,s)}function IT(t,i){return cl(t,i)}var Yo=null,er=null,Fu=!1,Ko=!1,Yu=!1,da=0;function Rn(t){t!==er&&t.next===null&&(er===null?Yo=er=t:er=er.next=t),Ko=!0,Fu||(Fu=!0,BT(jT))}function ms(t,i){if(!Yu&&Ko){Yu=!0;do for(var s=!1,c=Yo;c!==null;){if(t!==0){var f=c.pendingLanes;if(f===0)var p=0;else{var v=c.suspendedLanes,S=c.pingedLanes;p=(1<<31-Lt(42|t)+1)-1,p&=f&~(v&~S),p=p&201326677?p&201326677|1:p?p|2:0}p!==0&&(s=!0,ug(c,p))}else p=Ee,p=to(c,c===Be?p:0),(p&3)===0||Ar(c,p)||(s=!0,ug(c,p));c=c.next}while(s);Yu=!1}}function jT(){Ko=Fu=!1;var t=0;da!==0&&(KT()&&(t=da),da=0);for(var i=Sn(),s=null,c=Yo;c!==null;){var f=c.next,p=cg(c,i);p===0?(c.next=null,s===null?Yo=f:s.next=f,f===null&&(er=s)):(s=c,(t!==0||(p&3)!==0)&&(Ko=!0)),c=f}ms(t)}function cg(t,i){for(var s=t.suspendedLanes,c=t.pingedLanes,f=t.expirationTimes,p=t.pendingLanes&-62914561;0"u"?null:document;function Rg(t,i,s){var c=nr;if(c&&typeof i=="string"&&i){var f=Kt(i);f='link[rel="'+t+'"][href="'+f+'"]',typeof s=="string"&&(f+='[crossorigin="'+s+'"]'),Eg.has(f)||(Eg.add(f),t={rel:t,crossOrigin:s,href:i},c.querySelector(f)===null&&(i=c.createElement("link"),St(i,"link",t),ft(i),c.head.appendChild(i)))}}function tk(t){Jn.D(t),Rg("dns-prefetch",t,null)}function nk(t,i){Jn.C(t,i),Rg("preconnect",t,i)}function ik(t,i,s){Jn.L(t,i,s);var c=nr;if(c&&t&&i){var f='link[rel="preload"][as="'+Kt(i)+'"]';i==="image"&&s&&s.imageSrcSet?(f+='[imagesrcset="'+Kt(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(f+='[imagesizes="'+Kt(s.imageSizes)+'"]')):f+='[href="'+Kt(t)+'"]';var p=f;switch(i){case"style":p=ir(t);break;case"script":p=ar(t)}an.has(p)||(t=J({rel:"preload",href:i==="image"&&s&&s.imageSrcSet?void 0:t,as:i},s),an.set(p,t),c.querySelector(f)!==null||i==="style"&&c.querySelector(vs(p))||i==="script"&&c.querySelector(ys(p))||(i=c.createElement("link"),St(i,"link",t),ft(i),c.head.appendChild(i)))}}function ak(t,i){Jn.m(t,i);var s=nr;if(s&&t){var c=i&&typeof i.as=="string"?i.as:"script",f='link[rel="modulepreload"][as="'+Kt(c)+'"][href="'+Kt(t)+'"]',p=f;switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":p=ar(t)}if(!an.has(p)&&(t=J({rel:"modulepreload",href:t},i),an.set(p,t),s.querySelector(f)===null)){switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(ys(p)))return}c=s.createElement("link"),St(c,"link",t),ft(c),s.head.appendChild(c)}}}function rk(t,i,s){Jn.S(t,i,s);var c=nr;if(c&&t){var f=_a(c).hoistableStyles,p=ir(t);i=i||"default";var v=f.get(p);if(!v){var S={loading:0,preload:null};if(v=c.querySelector(vs(p)))S.loading=5;else{t=J({rel:"stylesheet",href:t,"data-precedence":i},s),(s=an.get(p))&&sd(t,s);var E=v=c.createElement("link");ft(E),St(E,"link",t),E._p=new Promise(function(M,q){E.onload=M,E.onerror=q}),E.addEventListener("load",function(){S.loading|=1}),E.addEventListener("error",function(){S.loading|=2}),S.loading|=4,$o(v,i,c)}v={type:"stylesheet",instance:v,count:1,state:S},f.set(p,v)}}}function sk(t,i){Jn.X(t,i);var s=nr;if(s&&t){var c=_a(s).hoistableScripts,f=ar(t),p=c.get(f);p||(p=s.querySelector(ys(f)),p||(t=J({src:t,async:!0},i),(i=an.get(f))&&od(t,i),p=s.createElement("script"),ft(p),St(p,"link",t),s.head.appendChild(p)),p={type:"script",instance:p,count:1,state:null},c.set(f,p))}}function ok(t,i){Jn.M(t,i);var s=nr;if(s&&t){var c=_a(s).hoistableScripts,f=ar(t),p=c.get(f);p||(p=s.querySelector(ys(f)),p||(t=J({src:t,async:!0,type:"module"},i),(i=an.get(f))&&od(t,i),p=s.createElement("script"),ft(p),St(p,"link",t),s.head.appendChild(p)),p={type:"script",instance:p,count:1,state:null},c.set(f,p))}}function _g(t,i,s,c){var f=(f=ri.current)?Wo(f):null;if(!f)throw Error(r(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(i=ir(s.href),s=_a(f).hoistableStyles,c=s.get(i),c||(c={type:"style",instance:null,count:0,state:null},s.set(i,c)),c):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=ir(s.href);var p=_a(f).hoistableStyles,v=p.get(t);if(v||(f=f.ownerDocument||f,v={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},p.set(t,v),(p=f.querySelector(vs(t)))&&!p._p&&(v.instance=p,v.state.loading=5),an.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},an.set(t,s),p||ck(f,t,s,v.state))),i&&c===null)throw Error(r(528,""));return v}if(i&&c!==null)throw Error(r(529,""));return null;case"script":return i=s.async,s=s.src,typeof s=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=ar(s),s=_a(f).hoistableScripts,c=s.get(i),c||(c={type:"script",instance:null,count:0,state:null},s.set(i,c)),c):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,t))}}function ir(t){return'href="'+Kt(t)+'"'}function vs(t){return'link[rel="stylesheet"]['+t+"]"}function wg(t){return J({},t,{"data-precedence":t.precedence,precedence:null})}function ck(t,i,s,c){t.querySelector('link[rel="preload"][as="style"]['+i+"]")?c.loading=1:(i=t.createElement("link"),c.preload=i,i.addEventListener("load",function(){return c.loading|=1}),i.addEventListener("error",function(){return c.loading|=2}),St(i,"link",s),ft(i),t.head.appendChild(i))}function ar(t){return'[src="'+Kt(t)+'"]'}function ys(t){return"script[async]"+t}function Og(t,i,s){if(i.count++,i.instance===null)switch(i.type){case"style":var c=t.querySelector('style[data-href~="'+Kt(s.href)+'"]');if(c)return i.instance=c,ft(c),c;var f=J({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return c=(t.ownerDocument||t).createElement("style"),ft(c),St(c,"style",f),$o(c,s.precedence,t),i.instance=c;case"stylesheet":f=ir(s.href);var p=t.querySelector(vs(f));if(p)return i.state.loading|=4,i.instance=p,ft(p),p;c=wg(s),(f=an.get(f))&&sd(c,f),p=(t.ownerDocument||t).createElement("link"),ft(p);var v=p;return v._p=new Promise(function(S,E){v.onload=S,v.onerror=E}),St(p,"link",c),i.state.loading|=4,$o(p,s.precedence,t),i.instance=p;case"script":return p=ar(s.src),(f=t.querySelector(ys(p)))?(i.instance=f,ft(f),f):(c=s,(f=an.get(p))&&(c=J({},s),od(c,f)),t=t.ownerDocument||t,f=t.createElement("script"),ft(f),St(f,"link",c),t.head.appendChild(f),i.instance=f);case"void":return null;default:throw Error(r(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(c=i.instance,i.state.loading|=4,$o(c,s.precedence,t));return i.instance}function $o(t,i,s){for(var c=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),f=c.length?c[c.length-1]:null,p=f,v=0;v title"):null)}function lk(t,i,s){if(s===1||i.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return t=i.disabled,typeof i.precedence=="string"&&t==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function Mg(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}var bs=null;function uk(){}function dk(t,i,s){if(bs===null)throw Error(r(475));var c=bs;if(i.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var f=ir(s.href),p=t.querySelector(vs(f));if(p){t=p._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(c.count++,c=tc.bind(c),t.then(c,c)),i.state.loading|=4,i.instance=p,ft(p);return}p=t.ownerDocument||t,s=wg(s),(f=an.get(f))&&sd(s,f),p=p.createElement("link"),ft(p);var v=p;v._p=new Promise(function(S,E){v.onload=S,v.onerror=E}),St(p,"link",s),i.instance=p}c.stylesheets===null&&(c.stylesheets=new Map),c.stylesheets.set(i,t),(t=i.state.preload)&&(i.state.loading&3)===0&&(c.count++,i=tc.bind(c),t.addEventListener("load",i),t.addEventListener("error",i))}}function fk(){if(bs===null)throw Error(r(475));var t=bs;return t.stylesheets&&t.count===0&&cd(t,t.stylesheets),0"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(e){console.error(e)}}return a(),vd.exports=Dk(),vd.exports}var Mk=Ak(),$g={};function Pk(a,e){return e.forEach(function(n){n&&typeof n!="string"&&!Array.isArray(n)&&Object.keys(n).forEach(function(r){if(r!=="default"&&!(r in a)){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(a,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}})}),Object.freeze(a)}var xk=Object.defineProperty,Nk=(a,e,n)=>e in a?xk(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,ev=(a,e,n)=>Nk(a,typeof e!="symbol"?e+"":e,n);let Ht=class{constructor(){ev(this,"_locking"),ev(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const n=new Promise(o=>e=()=>{this._locks-=1,o()}),r=this._locking.then(()=>e);return this._locking=this._locking.then(()=>n),r}};function $e(a,e){if(!a)throw new Error(e)}const Uk=34028234663852886e22,Lk=-34028234663852886e22,Ik=4294967295,jk=2147483647,Bk=-2147483648;function pc(a){if(typeof a!="number")throw new Error("invalid int 32: "+typeof a);if(!Number.isInteger(a)||a>jk||aIk||a<0)throw new Error("invalid uint 32: "+a)}function y0(a){if(typeof a!="number")throw new Error("invalid float 32: "+typeof a);if(Number.isFinite(a)&&(a>Uk||a({no:o.no,name:o.name,localName:a[o.no]})))}function T0(a,e,n){const r=Object.create(null),o=Object.create(null),l=[];for(const u of e){const d=k0(u);l.push(d),r[u.name]=d,o[u.no]=d}return{typeName:a,values:l,findName(u){return r[u]},findNumber(u){return o[u]}}}function qk(a,e,n){const r={};for(const o of e){const l=k0(o);r[l.localName]=l.no,r[l.no]=l.localName}return S0(r,a,e),r}function k0(a){return"localName"in a?a:Object.assign(Object.assign({},a),{localName:a.name})}class Pf{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,n){const r=this.getType(),o=r.runtime.bin,l=o.makeReadOptions(n);return o.readMessage(this,l.readerFactory(e),e.byteLength,l),this}fromJson(e,n){const r=this.getType(),o=r.runtime.json,l=o.makeReadOptions(n);return o.readMessage(r,e,l,this),this}fromJsonString(e,n){let r;try{r=JSON.parse(e)}catch(o){throw new Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(o instanceof Error?o.message:String(o)))}return this.fromJson(r,n)}toBinary(e){const n=this.getType(),r=n.runtime.bin,o=r.makeWriteOptions(e),l=o.writerFactory();return r.writeMessage(this,l,o),l.finish()}toJson(e){const n=this.getType(),r=n.runtime.json,o=r.makeWriteOptions(e);return r.writeMessage(this,o)}toJsonString(e){var n;const r=this.toJson(e);return JSON.stringify(r,null,(n=e==null?void 0:e.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function Vk(a,e,n,r){var o;const l=(o=r==null?void 0:r.localName)!==null&&o!==void 0?o:e.substring(e.lastIndexOf(".")+1),u={[l]:function(d){a.util.initFields(this),a.util.initPartial(d,this)}}[l];return Object.setPrototypeOf(u.prototype,new Pf),Object.assign(u,{runtime:a,typeName:e,fields:a.util.newFieldList(n),fromBinary(d,h){return new u().fromBinary(d,h)},fromJson(d,h){return new u().fromJson(d,h)},fromJsonString(d,h){return new u().fromJsonString(d,h)},equals(d,h){return a.util.equals(u,d,h)}}),u}function Hk(){let a=0,e=0;for(let r=0;r<28;r+=7){let o=this.buf[this.pos++];if(a|=(o&127)<>4,(n&128)==0)return this.assertBounds(),[a,e];for(let r=3;r<=31;r+=7){let o=this.buf[this.pos++];if(e|=(o&127)<>>l,d=!(!(u>>>7)&&e==0),h=(d?u|128:u)&255;if(n.push(h),!d)return}const r=a>>>28&15|(e&7)<<4,o=e>>3!=0;if(n.push((o?r|128:r)&255),!!o){for(let l=3;l<31;l=l+7){const u=e>>>l,d=!!(u>>>7),h=(d?u|128:u)&255;if(n.push(h),!d)return}n.push(e>>>31&1)}}const gc=4294967296;function tv(a){const e=a[0]==="-";e&&(a=a.slice(1));const n=1e6;let r=0,o=0;function l(u,d){const h=Number(a.slice(u,d));o*=n,r=r*n+h,r>=gc&&(o=o+(r/gc|0),r=r%gc)}return l(-24,-18),l(-18,-12),l(-12,-6),l(-6),e?E0(r,o):xf(r,o)}function Gk(a,e){let n=xf(a,e);const r=n.hi&2147483648;r&&(n=E0(n.lo,n.hi));const o=C0(n.lo,n.hi);return r?"-"+o:o}function C0(a,e){if({lo:a,hi:e}=Fk(a,e),e<=2097151)return String(gc*e+a);const n=a&16777215,r=(a>>>24|e<<8)&16777215,o=e>>16&65535;let l=n+r*6777216+o*6710656,u=r+o*8147497,d=o*2;const h=1e7;return l>=h&&(u+=Math.floor(l/h),l%=h),u>=h&&(d+=Math.floor(u/h),u%=h),d.toString()+nv(u)+nv(l)}function Fk(a,e){return{lo:a>>>0,hi:e>>>0}}function xf(a,e){return{lo:a|0,hi:e|0}}function E0(a,e){return e=~e,a?a=~a+1:e+=1,xf(a,e)}const nv=a=>{const e=String(a);return"0000000".slice(e.length)+e};function iv(a,e){if(a>=0){for(;a>127;)e.push(a&127|128),a=a>>>7;e.push(a)}else{for(let n=0;n<9;n++)e.push(a&127|128),a=a>>7;e.push(1)}}function Yk(){let a=this.buf[this.pos++],e=a&127;if((a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<7,(a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<14,(a&128)==0)return this.assertBounds(),e;if(a=this.buf[this.pos++],e|=(a&127)<<21,(a&128)==0)return this.assertBounds(),e;a=this.buf[this.pos++],e|=(a&15)<<28;for(let n=5;(a&128)!==0&&n<10;n++)a=this.buf[this.pos++];if((a&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Kk(){const a=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof a.getBigInt64=="function"&&typeof a.getBigUint64=="function"&&typeof a.setBigInt64=="function"&&typeof a.setBigUint64=="function"&&(typeof process!="object"||typeof $g!="object"||$g.BUF_BIGINT_DISABLE!=="1")){const o=BigInt("-9223372036854775808"),l=BigInt("9223372036854775807"),u=BigInt("0"),d=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(h){const m=typeof h=="bigint"?h:BigInt(h);if(m>l||md||m$e(/^-?[0-9]+$/.test(o),"int64 invalid: ".concat(o)),r=o=>$e(/^[0-9]+$/.test(o),"uint64 invalid: ".concat(o));return{zero:"0",supported:!1,parse(o){return typeof o!="string"&&(o=o.toString()),n(o),o},uParse(o){return typeof o!="string"&&(o=o.toString()),r(o),o},enc(o){return typeof o!="string"&&(o=o.toString()),n(o),tv(o)},uEnc(o){return typeof o!="string"&&(o=o.toString()),r(o),tv(o)},dec(o,l){return Gk(o,l)},uDec(o,l){return C0(o,l)}}}const Ge=Kk();var Y;(function(a){a[a.DOUBLE=1]="DOUBLE",a[a.FLOAT=2]="FLOAT",a[a.INT64=3]="INT64",a[a.UINT64=4]="UINT64",a[a.INT32=5]="INT32",a[a.FIXED64=6]="FIXED64",a[a.FIXED32=7]="FIXED32",a[a.BOOL=8]="BOOL",a[a.STRING=9]="STRING",a[a.BYTES=12]="BYTES",a[a.UINT32=13]="UINT32",a[a.SFIXED32=15]="SFIXED32",a[a.SFIXED64=16]="SFIXED64",a[a.SINT32=17]="SINT32",a[a.SINT64=18]="SINT64"})(Y||(Y={}));var ji;(function(a){a[a.BIGINT=0]="BIGINT",a[a.STRING=1]="STRING"})(ji||(ji={}));function Di(a,e,n){if(e===n)return!0;if(a==Y.BYTES){if(!(e instanceof Uint8Array)||!(n instanceof Uint8Array)||e.length!==n.length)return!1;for(let r=0;r>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(Vd(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return pc(e),iv(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 n=this.textEncoder.encode(e);return this.uint32(n.byteLength),this.raw(n)}float(e){y0(e);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,e,!0),this.raw(n)}double(e){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,e,!0),this.raw(n)}fixed32(e){Vd(e);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,e,!0),this.raw(n)}sfixed32(e){pc(e);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,e,!0),this.raw(n)}sint32(e){return pc(e),e=(e<<1^e>>31)>>>0,iv(e,this.buf),this}sfixed64(e){let n=new Uint8Array(8),r=new DataView(n.buffer),o=Ge.enc(e);return r.setInt32(0,o.lo,!0),r.setInt32(4,o.hi,!0),this.raw(n)}fixed64(e){let n=new Uint8Array(8),r=new DataView(n.buffer),o=Ge.uEnc(e);return r.setInt32(0,o.lo,!0),r.setInt32(4,o.hi,!0),this.raw(n)}int64(e){let n=Ge.enc(e);return Td(n.lo,n.hi,this.buf),this}sint64(e){let n=Ge.enc(e),r=n.hi>>31,o=n.lo<<1^r,l=(n.hi<<1|n.lo>>>31)^r;return Td(o,l,this.buf),this}uint64(e){let n=Ge.uEnc(e);return Td(n.lo,n.hi,this.buf),this}}class Xk{constructor(e,n){this.varint64=Hk,this.uint32=Yk,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=n??new TextDecoder}tag(){let e=this.uint32(),n=e>>>3,r=e&7;if(n<=0||r<0||r>5)throw new Error("illegal tag: field no "+n+" wire type "+r);return[n,r]}skip(e,n){let r=this.pos;switch(e){case nt.Varint:for(;this.buf[this.pos++]&128;);break;case nt.Bit64:this.pos+=4;case nt.Bit32:this.pos+=4;break;case nt.LengthDelimited:let o=this.uint32();this.pos+=o;break;case nt.StartGroup:for(;;){const[l,u]=this.tag();if(u===nt.EndGroup){if(n!==void 0&&l!==n)throw new Error("invalid end group tag");break}this.skip(u,l)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(r,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return Ge.dec(...this.varint64())}uint64(){return Ge.uDec(...this.varint64())}sint64(){let[e,n]=this.varint64(),r=-(e&1);return e=(e>>>1|(n&1)<<31)^r,n=n>>>1^r,Ge.dec(e,n)}bool(){let[e,n]=this.varint64();return e!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return Ge.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return Ge.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(),n=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(n,n+e)}string(){return this.textDecoder.decode(this.bytes())}}function Zk(a,e,n,r){let o;return{typeName:e,extendee:n,get field(){if(!o){const l=typeof r=="function"?r():r;l.name=e.split(".").pop(),l.jsonName="[".concat(e,"]"),o=a.util.newFieldList([l]).list()[0]}return o},runtime:a}}function _0(a){const e=a.field.localName,n=Object.create(null);return n[e]=Jk(a),[n,()=>n[e]]}function Jk(a){const e=a.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return yr(e.T,e.L);case"message":const n=e.T,r=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(r):r;case"map":throw"map fields are not allowed to be extensions"}}function Wk(a,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let n=a.length-1;n>=0;--n)if(a[n].no==e.no)return[a[n]];return[]}return a.filter(n=>n.no===e.no)}let Wn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Gc=[];for(let a=0;a>4,u=l,o=2;break;case 2:n[r++]=(u&15)<<4|(l&60)>>2,u=l,o=3;break;case 3:n[r++]=(u&3)<<6|l,o=0;break}}if(o==1)throw Error("invalid base64 string.");return n.subarray(0,r)},enc(a){let e="",n=0,r,o=0;for(let l=0;l>2],o=(r&3)<<4,n=1;break;case 1:e+=Wn[o|r>>4],o=(r&15)<<2,n=2;break;case 2:e+=Wn[o|r>>6],e+=Wn[r&63],n=0;break}return n&&(e+=Wn[o],e+="=",n==1&&(e+="=")),e}};function $k(a,e,n){D0(e,a);const r=e.runtime.bin.makeReadOptions(n),o=Wk(a.getType().runtime.bin.listUnknownFields(a),e.field),[l,u]=_0(e);for(const d of o)e.runtime.bin.readField(l,r.readerFactory(d.data),e.field,d.wireType,r);return u()}function eC(a,e,n,r){D0(e,a);const o=e.runtime.bin.makeReadOptions(r),l=e.runtime.bin.makeWriteOptions(r);if(O0(a,e)){const m=a.getType().runtime.bin.listUnknownFields(a).filter(g=>g.no!=e.field.no);a.getType().runtime.bin.discardUnknownFields(a);for(const g of m)a.getType().runtime.bin.onUnknownField(a,g.no,g.wireType,g.data)}const u=l.writerFactory();let d=e.field;!d.opt&&!d.repeated&&(d.kind=="enum"||d.kind=="scalar")&&(d=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(d,n,u,l);const h=o.readerFactory(u.finish());for(;h.posr.no==e.field.no)}function D0(a,e){$e(a.extendee.typeName==e.getType().typeName,"extension ".concat(a.typeName," can only be applied to message ").concat(a.extendee.typeName))}function A0(a,e){const n=a.localName;if(a.repeated)return e[n].length>0;if(a.oneof)return e[a.oneof.localName].case===n;switch(a.kind){case"enum":case"scalar":return a.opt||a.req?e[n]!==void 0:a.kind=="enum"?e[n]!==a.T.values[0].no:!R0(a.T,e[n]);case"message":return e[n]!==void 0;case"map":return Object.keys(e[n]).length>0}}function av(a,e){const n=a.localName,r=!a.opt&&!a.req;if(a.repeated)e[n]=[];else if(a.oneof)e[a.oneof.localName]={case:void 0};else switch(a.kind){case"map":e[n]={};break;case"enum":e[n]=r?a.T.values[0].no:void 0;break;case"scalar":e[n]=r?yr(a.T,a.L):void 0;break;case"message":e[n]=void 0;break}}function ma(a,e){if(a===null||typeof a!="object"||!Object.getOwnPropertyNames(Pf.prototype).every(r=>r in a&&typeof a[r]=="function"))return!1;const n=a.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:e===void 0?!0:n.typeName==e.typeName}function M0(a,e){return ma(e)||!a.fieldWrapper?e:a.fieldWrapper.wrapField(e)}Y.DOUBLE,Y.FLOAT,Y.INT64,Y.UINT64,Y.INT32,Y.UINT32,Y.BOOL,Y.STRING,Y.BYTES;const rv={ignoreUnknownFields:!1},sv={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function tC(a){return a?Object.assign(Object.assign({},rv),a):rv}function nC(a){return a?Object.assign(Object.assign({},sv),a):sv}const Mc=Symbol(),vc=Symbol();function iC(){return{makeReadOptions:tC,makeWriteOptions:nC,readMessage(a,e,n,r){if(e==null||Array.isArray(e)||typeof e!="object")throw new Error("cannot decode message ".concat(a.typeName," from JSON: ").concat(wn(e)));r=r??new a;const o=new Map,l=n.typeRegistry;for(const[u,d]of Object.entries(e)){const h=a.fields.findJsonName(u);if(h){if(h.oneof){if(d===null&&h.kind=="scalar")continue;const m=o.get(h.oneof);if(m!==void 0)throw new Error("cannot decode message ".concat(a.typeName,' from JSON: multiple keys for oneof "').concat(h.oneof.name,'" present: "').concat(m,'", "').concat(u,'"'));o.set(h.oneof,u)}ov(r,d,h,n,a)}else{let m=!1;if(l!=null&&l.findExtension&&u.startsWith("[")&&u.endsWith("]")){const g=l.findExtension(u.substring(1,u.length-1));if(g&&g.extendee.typeName==a.typeName){m=!0;const[y,b]=_0(g);ov(y,d,g.field,n,g),eC(r,g,b(),n)}}if(!m&&!n.ignoreUnknownFields)throw new Error("cannot decode message ".concat(a.typeName,' from JSON: key "').concat(u,'" is unknown'))}}return r},writeMessage(a,e){const n=a.getType(),r={};let o;try{for(o of n.fields.byNumber()){if(!A0(o,a)){if(o.req)throw"required field not set";if(!e.emitDefaultValues||!rC(o))continue}const u=o.oneof?a[o.oneof.localName].value:a[o.localName],d=cv(o,u,e);d!==void 0&&(r[e.useProtoFieldName?o.name:o.jsonName]=d)}const l=e.typeRegistry;if(l!=null&&l.findExtensionFor)for(const u of n.runtime.bin.listUnknownFields(a)){const d=l.findExtensionFor(n.typeName,u.no);if(d&&O0(a,d)){const h=$k(a,d,e),m=cv(d.field,h,e);m!==void 0&&(r[d.field.jsonName]=m)}}}catch(l){const u=o?"cannot encode field ".concat(n.typeName,".").concat(o.name," to JSON"):"cannot encode message ".concat(n.typeName," to JSON"),d=l instanceof Error?l.message:String(l);throw new Error(u+(d.length>0?": ".concat(d):""))}return r},readScalar(a,e,n){return Us(a,e,n??ji.BIGINT,!0)},writeScalar(a,e,n){if(e!==void 0&&(n||R0(a,e)))return yc(a,e)},debug:wn}}function wn(a){if(a===null)return"null";switch(typeof a){case"object":return Array.isArray(a)?"array":"object";case"string":return a.length>100?"string":'"'.concat(a.split('"').join('\\"'),'"');default:return String(a)}}function ov(a,e,n,r,o){let l=n.localName;if(n.repeated){if($e(n.kind!="map"),e===null)return;if(!Array.isArray(e))throw new Error("cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(e)));const u=a[l];for(const d of e){if(d===null)throw new Error("cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(d)));switch(n.kind){case"message":u.push(n.T.fromJson(d,r));break;case"enum":const h=kd(n.T,d,r.ignoreUnknownFields,!0);h!==vc&&u.push(h);break;case"scalar":try{u.push(Us(n.T,d,n.L,!0))}catch(m){let g="cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(d));throw m instanceof Error&&m.message.length>0&&(g+=": ".concat(m.message)),new Error(g)}break}}}else if(n.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw new Error("cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(e)));const u=a[l];for(const[d,h]of Object.entries(e)){if(h===null)throw new Error("cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: map value null"));let m;try{m=aC(n.K,d)}catch(g){let y="cannot decode map key for field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(e));throw g instanceof Error&&g.message.length>0&&(y+=": ".concat(g.message)),new Error(y)}switch(n.V.kind){case"message":u[m]=n.V.T.fromJson(h,r);break;case"enum":const g=kd(n.V.T,h,r.ignoreUnknownFields,!0);g!==vc&&(u[m]=g);break;case"scalar":try{u[m]=Us(n.V.T,h,ji.BIGINT,!0)}catch(y){let b="cannot decode map value for field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(e));throw y instanceof Error&&y.message.length>0&&(b+=": ".concat(y.message)),new Error(b)}break}}}else switch(n.oneof&&(a=a[n.oneof.localName]={case:l},l="value"),n.kind){case"message":const u=n.T;if(e===null&&u.typeName!="google.protobuf.Value")return;let d=a[l];ma(d)?d.fromJson(e,r):(a[l]=d=u.fromJson(e,r),u.fieldWrapper&&!n.oneof&&(a[l]=u.fieldWrapper.unwrapField(d)));break;case"enum":const h=kd(n.T,e,r.ignoreUnknownFields,!1);switch(h){case Mc:av(n,a);break;case vc:break;default:a[l]=h;break}break;case"scalar":try{const m=Us(n.T,e,n.L,!1);switch(m){case Mc:av(n,a);break;default:a[l]=m;break}}catch(m){let g="cannot decode field ".concat(o.typeName,".").concat(n.name," from JSON: ").concat(wn(e));throw m instanceof Error&&m.message.length>0&&(g+=": ".concat(m.message)),new Error(g)}break}}function aC(a,e){if(a===Y.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return Us(a,e,ji.BIGINT,!0).toString()}function Us(a,e,n,r){if(e===null)return r?yr(a,n):Mc;switch(a){case Y.DOUBLE:case Y.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e===""||typeof e=="string"&&e.trim().length!==e.length||typeof e!="string"&&typeof e!="number")break;const o=Number(e);if(Number.isNaN(o)||!Number.isFinite(o))break;return a==Y.FLOAT&&y0(o),o;case Y.INT32:case Y.FIXED32:case Y.SFIXED32:case Y.SINT32:case Y.UINT32:let l;if(typeof e=="number"?l=e:typeof e=="string"&&e.length>0&&e.trim().length===e.length&&(l=Number(e)),l===void 0)break;return a==Y.UINT32||a==Y.FIXED32?Vd(l):pc(l),l;case Y.INT64:case Y.SFIXED64:case Y.SINT64:if(typeof e!="number"&&typeof e!="string")break;const u=Ge.parse(e);return n?u.toString():u;case Y.FIXED64:case Y.UINT64:if(typeof e!="number"&&typeof e!="string")break;const d=Ge.uParse(e);return n?d.toString():d;case Y.BOOL:if(typeof e!="boolean")break;return e;case Y.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case Y.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return w0.dec(e)}throw new Error}function kd(a,e,n,r){if(e===null)return a.typeName=="google.protobuf.NullValue"?0:r?a.values[0].no:Mc;switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":const o=a.findName(e);if(o!==void 0)return o.no;if(n)return vc;break}throw new Error("cannot decode enum ".concat(a.typeName," from JSON: ").concat(wn(e)))}function rC(a){return a.repeated||a.kind=="map"?!0:!(a.oneof||a.kind=="message"||a.opt||a.req)}function cv(a,e,n){if(a.kind=="map"){$e(typeof e=="object"&&e!=null);const r={},o=Object.entries(e);switch(a.V.kind){case"scalar":for(const[u,d]of o)r[u.toString()]=yc(a.V.T,d);break;case"message":for(const[u,d]of o)r[u.toString()]=d.toJson(n);break;case"enum":const l=a.V.T;for(const[u,d]of o)r[u.toString()]=Cd(l,d,n.enumAsInteger);break}return n.emitDefaultValues||o.length>0?r:void 0}if(a.repeated){$e(Array.isArray(e));const r=[];switch(a.kind){case"scalar":for(let o=0;o0?r:void 0}switch(a.kind){case"scalar":return yc(a.T,e);case"enum":return Cd(a.T,e,n.enumAsInteger);case"message":return M0(a.T,e).toJson(n)}}function Cd(a,e,n){var r;if($e(typeof e=="number"),a.typeName=="google.protobuf.NullValue")return null;if(n)return e;const o=a.findNumber(e);return(r=o==null?void 0:o.name)!==null&&r!==void 0?r:e}function yc(a,e){switch(a){case Y.INT32:case Y.SFIXED32:case Y.SINT32:case Y.FIXED32:case Y.UINT32:return $e(typeof e=="number"),e;case Y.FLOAT:case Y.DOUBLE:return $e(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case Y.STRING:return $e(typeof e=="string"),e;case Y.BOOL:return $e(typeof e=="boolean"),e;case Y.UINT64:case Y.FIXED64:case Y.INT64:case Y.SFIXED64:case Y.SINT64:return $e(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case Y.BYTES:return $e(e instanceof Uint8Array),w0.enc(e)}}const rr=Symbol("@bufbuild/protobuf/unknown-fields"),lv={readUnknownFields:!0,readerFactory:a=>new Xk(a)},uv={writeUnknownFields:!0,writerFactory:()=>new Qk};function sC(a){return a?Object.assign(Object.assign({},lv),a):lv}function oC(a){return a?Object.assign(Object.assign({},uv),a):uv}function cC(){return{makeReadOptions:sC,makeWriteOptions:oC,listUnknownFields(a){var e;return(e=a[rr])!==null&&e!==void 0?e:[]},discardUnknownFields(a){delete a[rr]},writeUnknownFields(a,e){const r=a[rr];if(r)for(const o of r)e.tag(o.no,o.wireType).raw(o.data)},onUnknownField(a,e,n,r){const o=a;Array.isArray(o[rr])||(o[rr]=[]),o[rr].push({no:e,wireType:n,data:r})},readMessage(a,e,n,r,o){const l=a.getType(),u=o?e.len:e.pos+n;let d,h;for(;e.pos0&&(h=uC),l){let b=a[u];if(r==nt.LengthDelimited&&d!=Y.STRING&&d!=Y.BYTES){let C=e.uint32()+e.pos;for(;e.posma(b,y)?b:new y(b));else{const b=u[o];y.fieldWrapper?y.typeName==="google.protobuf.BytesValue"?l[o]=ws(b):l[o]=b:l[o]=ma(b,y)?b:new y(b)}break}}},equals(a,e,n){return e===n?!0:!e||!n?!1:a.fields.byMember().every(r=>{const o=e[r.localName],l=n[r.localName];if(r.repeated){if(o.length!==l.length)return!1;switch(r.kind){case"message":return o.every((u,d)=>r.T.equals(u,l[d]));case"scalar":return o.every((u,d)=>Di(r.T,u,l[d]));case"enum":return o.every((u,d)=>Di(Y.INT32,u,l[d]))}throw new Error("repeated cannot contain ".concat(r.kind))}switch(r.kind){case"message":return r.T.equals(o,l);case"enum":return Di(Y.INT32,o,l);case"scalar":return Di(r.T,o,l);case"oneof":if(o.case!==l.case)return!1;const u=r.findField(o.case);if(u===void 0)return!0;switch(u.kind){case"message":return u.T.equals(o.value,l.value);case"enum":return Di(Y.INT32,o.value,l.value);case"scalar":return Di(u.T,o.value,l.value)}throw new Error("oneof cannot contain ".concat(u.kind));case"map":const d=Object.keys(o).concat(Object.keys(l));switch(r.V.kind){case"message":const h=r.V.T;return d.every(g=>h.equals(o[g],l[g]));case"enum":return d.every(g=>Di(Y.INT32,o[g],l[g]));case"scalar":const m=r.V.T;return d.every(g=>Di(m,o[g],l[g]))}break}})},clone(a){const e=a.getType(),n=new e,r=n;for(const o of e.fields.byMember()){const l=a[o.localName];let u;if(o.repeated)u=l.map(uc);else if(o.kind=="map"){u=r[o.localName];for(const[d,h]of Object.entries(l))u[d]=uc(h)}else o.kind=="oneof"?u=o.findField(l.case)?{case:l.case,value:uc(l.value)}:{case:void 0}:u=uc(l);r[o.localName]=u}for(const o of e.runtime.bin.listUnknownFields(a))e.runtime.bin.onUnknownField(r,o.no,o.wireType,o.data);return n}}}function uc(a){if(a===void 0)return a;if(ma(a))return a.clone();if(a instanceof Uint8Array){const e=new Uint8Array(a.byteLength);return e.set(a),e}return a}function ws(a){return a instanceof Uint8Array?a:new Uint8Array(a)}function mC(a,e,n){return{syntax:a,json:iC(),bin:cC(),util:Object.assign(Object.assign({},hC()),{newFieldList:e,initFields:n}),makeMessageType(r,o,l){return Vk(this,r,o,l)},makeEnum:qk,makeEnumType:T0,getEnumType:zk,makeExtension(r,o,l){return Zk(this,r,o,l)}}}class pC{constructor(e,n){this._fields=e,this._normalizer=n}findJsonName(e){if(!this.jsonNames){const n={};for(const r of this.list())n[r.jsonName]=n[r.name]=r;this.jsonNames=n}return this.jsonNames[e]}find(e){if(!this.numbers){const n={};for(const r of this.list())n[r.no]=r;this.numbers=n}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,n)=>e.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let n;for(const r of this.list())r.oneof?r.oneof!==n&&(n=r.oneof,e.push(n)):e.push(r)}return this.members}}function x0(a,e){const n=N0(a);return e?n:TC(SC(n))}function gC(a){return x0(a,!1)}const vC=N0;function N0(a){let e=!1;const n=[];for(let r=0;r"".concat(a,"$"),SC=a=>bC.has(a)?U0(a):a,TC=a=>yC.has(a)?U0(a):a;class kC{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=gC(e)}addField(e){$e(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 n=0;nnew pC(a,e=>CC(e)),a=>{for(const e of a.getType().fields.byMember()){if(e.opt)continue;const n=e.localName,r=a;if(e.repeated){r[n]=[];continue}switch(e.kind){case"oneof":r[n]={case:void 0};break;case"enum":r[n]=0;break;case"map":r[n]={};break;case"scalar":r[n]=yr(e.T,e.L);break}}});class Pt extends Pf{constructor(e){super(),this.seconds=Ge.zero,this.nanos=0,I.util.initPartial(e,this)}fromJson(e,n){if(typeof e!="string")throw new Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(I.json.debug(e)));const r=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(!r)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const o=Date.parse(r[1]+"-"+r[2]+"-"+r[3]+"T"+r[4]+":"+r[5]+":"+r[6]+(r[8]?r[8]:"Z"));if(Number.isNaN(o))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(oDate.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=Ge.parse(o/1e3),this.nanos=0,r[7]&&(this.nanos=parseInt("1"+r[7]+"0".repeat(9-r[7].length))-1e9),this}toJson(e){const n=Number(this.seconds)*1e3;if(nDate.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 r="Z";if(this.nanos>0){const o=(this.nanos+1e9).toString().substring(1);o.substring(3)==="000000"?r="."+o.substring(0,3)+"Z":o.substring(6)==="000"?r="."+o.substring(0,6)+"Z":r="."+o+"Z"}return new Date(n).toISOString().replace(".000Z",r)}toDate(){return new Date(Number(this.seconds)*1e3+Math.ceil(this.nanos/1e6))}static now(){return Pt.fromDate(new Date)}static fromDate(e){const n=e.getTime();return new Pt({seconds:Ge.parse(Math.floor(n/1e3)),nanos:n%1e3*1e6})}static fromBinary(e,n){return new Pt().fromBinary(e,n)}static fromJson(e,n){return new Pt().fromJson(e,n)}static fromJsonString(e,n){return new Pt().fromJsonString(e,n)}static equals(e,n){return I.util.equals(Pt,e,n)}}Pt.runtime=I;Pt.typeName="google.protobuf.Timestamp";Pt.fields=I.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const EC=I.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Pt},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:RC,repeated:!0},{no:5,name:"events",kind:"message",T:wC,repeated:!0}]),RC=I.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:_C,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),_C=I.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Pt},{no:3,name:"value",kind:"scalar",T:2}]),wC=I.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:Pt},{no:7,name:"normalized_end_timestamp",kind:"message",T:Pt,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),L0=I.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"REGRESSION"},{no:1,name:"SIMULCAST"}]),hn=I.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),ot=I.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"}]),Nf=I.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),xs=I.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),Bs=I.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),pn=I.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"}]),sr=I.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"}]),OC=I.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),On=I.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"}]),Uf=I.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:xc,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:Q0}]),xc=I.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),DC=I.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:I.getEnumType(ot),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}]),zs=I.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:I.getEnumType(Hd)},{no:4,name:"tracks",kind:"message",T:cr,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:DC},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:I.getEnumType(qs)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:I.getEnumType(pn)}]),Hd=I.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),qs=I.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"}]),Vt=I.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),AC=I.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:pa,repeated:!0}]),cr=I.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:I.getEnumType(hn)},{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:I.getEnumType(ot)},{no:10,name:"layers",kind:"message",T:pa,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:AC,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:I.getEnumType(Vt)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:Q0},{no:19,name:"audio_features",kind:"enum",T:I.getEnumType(On),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:I.getEnumType(L0)}]),pa=I.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:I.getEnumType(Nf)},{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}]),Mt=I.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:I.getEnumType(_e)},{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:j0,oneof:"value"},{no:3,name:"speaker",kind:"message",T:MC,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:B0,oneof:"value"},{no:7,name:"transcription",kind:"message",T:PC,oneof:"value"},{no:8,name:"metrics",kind:"message",T:EC,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:Gd,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:z0,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:q0,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:V0,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:Yd,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:Kd,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:Qd,oneof:"value"}]),_e=I.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),MC=I.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:I0,repeated:!0}]),I0=I.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}]),j0=I.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}]),B0=I.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),PC=I.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:xC,repeated:!0}]),xC=I.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}]),Gd=I.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}]),z0=I.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}]),q0=I.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),V0=I.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:H0,oneof:"value"}]),H0=I.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}]),G0=I.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),NC=I.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:I.getEnumType(F0)},{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}]),F0=I.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),UC=I.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:I.getEnumType(Y0)},{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}]),Y0=I.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"}]),K0=I.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:mv},{no:2,name:"screen",kind:"message",T:mv},{no:3,name:"resume_connection",kind:"enum",T:I.getEnumType(Bs)},{no:4,name:"disabled_codecs",kind:"message",T:LC},{no:5,name:"force_relay",kind:"enum",T:I.getEnumType(Bs)}]),mv=I.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:I.getEnumType(Bs)}]),LC=I.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:xc,repeated:!0},{no:2,name:"publish",kind:"message",T:xc,repeated:!0}]),Q0=I.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Fd=I.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),X0=I.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:I.getEnumType(Fd)},{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"}),Z0=I.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),Yd=I.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:I.getEnumType(Vt)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:X0,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:Z0,oneof:"content_header"}],{localName:"DataStream_Header"}),Kd=I.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"}),Qd=I.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"}),mn=I.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),Xd=I.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),IC=I.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),jC=I.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:va,oneof:"message"},{no:2,name:"answer",kind:"message",T:va,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Lf,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Jd,oneof:"message"},{no:5,name:"mute",kind:"message",T:If,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Fc,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:J0,oneof:"message"},{no:8,name:"leave",kind:"message",T:Yc,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:$0,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:iy,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:ay,oneof:"message"},{no:13,name:"simulate",kind:"message",T:_n,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:ey,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:sy,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:W0,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:HC,oneof:"message"}]),pv=I.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:BC,oneof:"message"},{no:2,name:"answer",kind:"message",T:va,oneof:"message"},{no:3,name:"offer",kind:"message",T:va,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Lf,oneof:"message"},{no:5,name:"update",kind:"message",T:VC,oneof:"message"},{no:6,name:"track_published",kind:"message",T:jf,oneof:"message"},{no:8,name:"leave",kind:"message",T:Yc,oneof:"message"},{no:9,name:"mute",kind:"message",T:If,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:GC,oneof:"message"},{no:11,name:"room_update",kind:"message",T:FC,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:KC,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:XC,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:JC,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:WC,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:qC,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:zC,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:$C,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:nE,oneof:"message"},{no:22,name:"request_response",kind:"message",T:iE,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:aE,oneof:"message"}]),Zd=I.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9}]),Jd=I.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:I.getEnumType(hn)},{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:I.getEnumType(ot)},{no:9,name:"layers",kind:"message",T:pa,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:Zd,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:I.getEnumType(Vt)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:I.getEnumType(L0)}]),Lf=I.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:I.getEnumType(mn)},{no:3,name:"final",kind:"scalar",T:8}]),If=I.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),BC=I.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Uf},{no:2,name:"participant",kind:"message",T:zs},{no:3,name:"other_participants",kind:"message",T:zs,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:ty,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:K0},{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:NC},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:xc,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),zC=I.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:ty,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:K0}]),jf=I.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:cr}]),qC=I.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),va=I.makeMessageType("livekit.SessionDescription",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9}]),VC=I.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:zs,repeated:!0}]),Fc=I.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:G0,repeated:!0}]),J0=I.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:I.getEnumType(Nf)},{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}]),W0=I.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:I.getEnumType(On),repeated:!0}]),HC=I.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}]),Yc=I.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:I.getEnumType(pn)},{no:3,name:"action",kind:"enum",T:I.getEnumType(ur)},{no:4,name:"regions",kind:"message",T:eE}]),ur=I.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),$0=I.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:pa,repeated:!0}]),ey=I.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}]),ty=I.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}]),GC=I.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:I0,repeated:!0}]),FC=I.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Uf}]),YC=I.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:I.getEnumType(xs)},{no:3,name:"score",kind:"scalar",T:2}]),KC=I.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:YC,repeated:!0}]),QC=I.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:I.getEnumType(Xd)}]),XC=I.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:QC,repeated:!0}]),Bf=I.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:I.getEnumType(Nf)},{no:2,name:"enabled",kind:"scalar",T:8}]),ZC=I.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:Bf,repeated:!0}]),JC=I.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:Bf,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:ZC,repeated:!0}]),ny=I.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}]),iy=I.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:ny,repeated:!0}]),WC=I.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}]),ay=I.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:va},{no:2,name:"subscription",kind:"message",T:Fc},{no:3,name:"publish_tracks",kind:"message",T:jf,repeated:!0},{no:4,name:"data_channels",kind:"message",T:ry,repeated:!0},{no:5,name:"offer",kind:"message",T:va},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0}]),ry=I.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:I.getEnumType(mn)}]),_n=I.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:I.getEnumType(IC),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"}]),sy=I.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),$C=I.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),eE=I.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:tE,repeated:!0}]),tE=I.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}]),nE=I.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:I.getEnumType(OC)}]),iE=I.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:I.getEnumType(zf)},{no:3,name:"message",kind:"scalar",T:9}]),zf=I.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"}]),aE=I.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]);function rE(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var Sc={exports:{}},sE=Sc.exports,gv;function oE(){return gv||(gv=1,function(a){(function(e,n){a.exports?a.exports=n():e.log=n()})(sE,function(){var e=function(){},n="undefined",r=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],l={},u=null;function d(k,w){var O=k[w];if(typeof O.bind=="function")return O.bind(k);try{return Function.prototype.bind.call(O,k)}catch{return function(){return Function.prototype.apply.apply(O,[k,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function m(k){return k==="debug"&&(k="log"),typeof console===n?!1:k==="trace"&&r?h:console[k]!==void 0?d(console,k):console.log!==void 0?d(console,"log"):e}function g(){for(var k=this.getLevel(),w=0;w=0&&oe<=O.levels.SILENT)return oe;throw new TypeError("log.setLevel() called with invalid level: "+ee)}O.name=k,O.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},O.methodFactory=w||b,O.getLevel=function(){return U??Q??V},O.setLevel=function(ee,oe){return U=X(ee),oe!==!1&&H(U),g.call(O)},O.setDefaultLevel=function(ee){Q=X(ee),$()||O.setLevel(ee,!1)},O.resetLevel=function(){U=null,ie(),g.call(O)},O.enableAll=function(ee){O.setLevel(O.levels.TRACE,ee)},O.disableAll=function(ee){O.setLevel(O.levels.SILENT,ee)},O.rebuild=function(){if(u!==O&&(V=X(u.getLevel())),g.call(O),u===O)for(var ee in l)l[ee].rebuild()},V=X(u?u.getLevel():"WARN");var J=$();J!=null&&(U=X(J)),g.call(O)}u=new T,u.getLogger=function(w){if(typeof w!="symbol"&&typeof w!="string"||w==="")throw new TypeError("You must supply a name when creating a logger.");var O=l[w];return O||(O=l[w]=new T(w,u.methodFactory)),O};var C=typeof window!==n?window.log:void 0;return u.noConflict=function(){return typeof window!==n&&window.log===u&&(window.log=C),u},u.getLoggers=function(){return l},u.default=u,u})}(Sc)),Sc.exports}var Kc=oE(),Wd;(function(a){a[a.trace=0]="trace",a[a.debug=1]="debug",a[a.info=2]="info",a[a.warn=3]="warn",a[a.error=4]="error",a[a.silent=5]="silent"})(Wd||(Wd={}));var gn;(function(a){a.Default="livekit",a.Room="livekit-room",a.Participant="livekit-participant",a.Track="livekit-track",a.Publication="livekit-track-publication",a.Engine="livekit-engine",a.Signal="livekit-signal",a.PCManager="livekit-pc-manager",a.PCTransport="livekit-pc-transport",a.E2EE="lk-e2ee"})(gn||(gn={}));let ke=Kc.getLogger("livekit");Object.values(gn).map(a=>Kc.getLogger(a));ke.setDefaultLevel(Wd.info);function ei(a){const e=Kc.getLogger(a);return e.setDefaultLevel(ke.getLevel()),e}const cE=Kc.getLogger("lk-e2ee"),Os=7e3,lE=[0,300,2*2*300,3*3*300,4*4*300,Os,Os,Os,Os,Os];class uE{constructor(e){this._retryDelays=e!==void 0?[...e]:lE}nextRetryDelayInMs(e){if(e.retryCount>=this._retryDelays.length)return null;const n=this._retryDelays[e.retryCount];return e.retryCount<=1?n:n+Math.random()*1e3}}function dE(a,e){var n={};for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&e.indexOf(r)<0&&(n[r]=a[r]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(a);o=a.length&&(a=void 0),{value:a&&a[r++],done:!a}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function xi(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=a[Symbol.asyncIterator],n;return e?e.call(a):(a=typeof vv=="function"?vv(a):a[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(l){n[l]=a[l]&&function(u){return new Promise(function(d,h){u=a[l](u),o(d,h,u.done,u.value)})}}function o(l,u,d,h){Promise.resolve(h).then(function(m){l({value:m,done:d})},u)}}var dc={exports:{}},yv;function fE(){if(yv)return dc.exports;yv=1;var a=typeof Reflect=="object"?Reflect:null,e=a&&typeof a.apply=="function"?a.apply:function(_,H,$){return Function.prototype.apply.call(_,H,$)},n;a&&typeof a.ownKeys=="function"?n=a.ownKeys:Object.getOwnPropertySymbols?n=function(_){return Object.getOwnPropertyNames(_).concat(Object.getOwnPropertySymbols(_))}:n=function(_){return Object.getOwnPropertyNames(_)};function r(U){console&&console.warn&&console.warn(U)}var o=Number.isNaN||function(_){return _!==_};function l(){l.init.call(this)}dc.exports=l,dc.exports.once=O,l.EventEmitter=l,l.prototype._events=void 0,l.prototype._eventsCount=0,l.prototype._maxListeners=void 0;var u=10;function d(U){if(typeof U!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof U)}Object.defineProperty(l,"defaultMaxListeners",{enumerable:!0,get:function(){return u},set:function(U){if(typeof U!="number"||U<0||o(U))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+U+".");u=U}}),l.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},l.prototype.setMaxListeners=function(_){if(typeof _!="number"||_<0||o(_))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+_+".");return this._maxListeners=_,this};function h(U){return U._maxListeners===void 0?l.defaultMaxListeners:U._maxListeners}l.prototype.getMaxListeners=function(){return h(this)},l.prototype.emit=function(_){for(var H=[],$=1;$0&&(J=H[0]),J instanceof Error)throw J;var ee=new Error("Unhandled error."+(J?" ("+J.message+")":""));throw ee.context=J,ee}var oe=X[_];if(oe===void 0)return!1;if(typeof oe=="function")e(oe,this,H);else for(var qe=oe.length,Fe=C(oe,qe),$=0;$0&&J.length>ie&&!J.warned){J.warned=!0;var ee=new Error("Possible EventEmitter memory leak detected. "+J.length+" "+String(_)+" listeners added. Use emitter.setMaxListeners() to increase limit");ee.name="MaxListenersExceededWarning",ee.emitter=U,ee.type=_,ee.count=J.length,r(ee)}return U}l.prototype.addListener=function(_,H){return m(this,_,H,!1)},l.prototype.on=l.prototype.addListener,l.prototype.prependListener=function(_,H){return m(this,_,H,!0)};function g(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function y(U,_,H){var $={fired:!1,wrapFn:void 0,target:U,type:_,listener:H},ie=g.bind($);return ie.listener=H,$.wrapFn=ie,ie}l.prototype.once=function(_,H){return d(H),this.on(_,y(this,_,H)),this},l.prototype.prependOnceListener=function(_,H){return d(H),this.prependListener(_,y(this,_,H)),this},l.prototype.removeListener=function(_,H){var $,ie,X,J,ee;if(d(H),ie=this._events,ie===void 0)return this;if($=ie[_],$===void 0)return this;if($===H||$.listener===H)--this._eventsCount===0?this._events=Object.create(null):(delete ie[_],ie.removeListener&&this.emit("removeListener",_,$.listener||H));else if(typeof $!="function"){for(X=-1,J=$.length-1;J>=0;J--)if($[J]===H||$[J].listener===H){ee=$[J].listener,X=J;break}if(X<0)return this;X===0?$.shift():k($,X),$.length===1&&(ie[_]=$[0]),ie.removeListener!==void 0&&this.emit("removeListener",_,ee||H)}return this},l.prototype.off=l.prototype.removeListener,l.prototype.removeAllListeners=function(_){var H,$,ie;if($=this._events,$===void 0)return this;if($.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):$[_]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete $[_]),this;if(arguments.length===0){var X=Object.keys($),J;for(ie=0;ie=0;ie--)this.removeListener(_,H[ie]);return this};function b(U,_,H){var $=U._events;if($===void 0)return[];var ie=$[_];return ie===void 0?[]:typeof ie=="function"?H?[ie.listener||ie]:[ie]:H?w(ie):C(ie,ie.length)}l.prototype.listeners=function(_){return b(this,_,!0)},l.prototype.rawListeners=function(_){return b(this,_,!1)},l.listenerCount=function(U,_){return typeof U.listenerCount=="function"?U.listenerCount(_):T.call(U,_)},l.prototype.listenerCount=T;function T(U){var _=this._events;if(_!==void 0){var H=_[U];if(typeof H=="function")return 1;if(H!==void 0)return H.length}return 0}l.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]};function C(U,_){for(var H=new Array(_),$=0;$<_;++$)H[$]=U[$];return H}function k(U,_){for(;_+1=n&&parseInt(r[n],10)}function ba(a,e,n){if(!a.RTCPeerConnection)return;const r=a.RTCPeerConnection.prototype,o=r.addEventListener;r.addEventListener=function(u,d){if(u!==e)return o.apply(this,arguments);const h=m=>{const g=n(m);g&&(d.handleEvent?d.handleEvent(g):d(g))};return this._eventMap=this._eventMap||{},this._eventMap[e]||(this._eventMap[e]=new Map),this._eventMap[e].set(d,h),o.apply(this,[u,h])};const l=r.removeEventListener;r.removeEventListener=function(u,d){if(u!==e||!this._eventMap||!this._eventMap[e])return l.apply(this,arguments);if(!this._eventMap[e].has(d))return l.apply(this,arguments);const h=this._eventMap[e].get(d);return this._eventMap[e].delete(d),this._eventMap[e].size===0&&delete this._eventMap[e],Object.keys(this._eventMap).length===0&&delete this._eventMap,l.apply(this,[u,h])},Object.defineProperty(r,"on"+e,{get(){return this["_on"+e]},set(u){this["_on"+e]&&(this.removeEventListener(e,this["_on"+e]),delete this["_on"+e]),u&&this.addEventListener(e,this["_on"+e]=u)},enumerable:!0,configurable:!0})}function hE(a){return typeof a!="boolean"?new Error("Argument type: "+typeof a+". Please use a boolean."):(oy=a,a?"adapter.js logging disabled":"adapter.js logging enabled")}function mE(a){return typeof a!="boolean"?new Error("Argument type: "+typeof a+". Please use a boolean."):(cy=!a,"adapter.js deprecation warnings "+(a?"disabled":"enabled"))}function ly(){if(typeof window=="object"){if(oy)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function qf(a,e){cy&&console.warn(a+" is deprecated, please use "+e+" instead.")}function pE(a){const e={browser:null,version:null};if(typeof a>"u"||!a.navigator||!a.navigator.userAgent)return e.browser="Not a browser.",e;const{navigator:n}=a;if(n.userAgentData&&n.userAgentData.brands){const r=n.userAgentData.brands.find(o=>o.brand==="Chromium");if(r)return{browser:"chrome",version:parseInt(r.version,10)}}if(n.mozGetUserMedia)e.browser="firefox",e.version=Tc(n.userAgent,/Firefox\/(\d+)\./,1);else if(n.webkitGetUserMedia||a.isSecureContext===!1&&a.webkitRTCPeerConnection)e.browser="chrome",e.version=Tc(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(a.RTCPeerConnection&&n.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=Tc(n.userAgent,/AppleWebKit\/(\d+)\./,1),e.supportsUnifiedPlan=a.RTCRtpTransceiver&&"currentDirection"in a.RTCRtpTransceiver.prototype;else return e.browser="Not a supported browser.",e;return e}function bv(a){return Object.prototype.toString.call(a)==="[object Object]"}function uy(a){return bv(a)?Object.keys(a).reduce(function(e,n){const r=bv(a[n]),o=r?uy(a[n]):a[n],l=r&&!Object.keys(o).length;return o===void 0||l?e:Object.assign(e,{[n]:o})},{}):a}function $d(a,e,n){!e||n.has(e.id)||(n.set(e.id,e),Object.keys(e).forEach(r=>{r.endsWith("Id")?$d(a,a.get(e[r]),n):r.endsWith("Ids")&&e[r].forEach(o=>{$d(a,a.get(o),n)})}))}function Sv(a,e,n){const r=n?"outbound-rtp":"inbound-rtp",o=new Map;if(e===null)return o;const l=[];return a.forEach(u=>{u.type==="track"&&u.trackIdentifier===e.id&&l.push(u)}),l.forEach(u=>{a.forEach(d=>{d.type===r&&d.trackId===u.id&&$d(a,d,o)})}),o}const Tv=ly;function dy(a,e){const n=a&&a.navigator;if(!n.mediaDevices)return;const r=function(d){if(typeof d!="object"||d.mandatory||d.optional)return d;const h={};return Object.keys(d).forEach(m=>{if(m==="require"||m==="advanced"||m==="mediaSource")return;const g=typeof d[m]=="object"?d[m]:{ideal:d[m]};g.exact!==void 0&&typeof g.exact=="number"&&(g.min=g.max=g.exact);const y=function(b,T){return b?b+T.charAt(0).toUpperCase()+T.slice(1):T==="deviceId"?"sourceId":T};if(g.ideal!==void 0){h.optional=h.optional||[];let b={};typeof g.ideal=="number"?(b[y("min",m)]=g.ideal,h.optional.push(b),b={},b[y("max",m)]=g.ideal,h.optional.push(b)):(b[y("",m)]=g.ideal,h.optional.push(b))}g.exact!==void 0&&typeof g.exact!="number"?(h.mandatory=h.mandatory||{},h.mandatory[y("",m)]=g.exact):["min","max"].forEach(b=>{g[b]!==void 0&&(h.mandatory=h.mandatory||{},h.mandatory[y(b,m)]=g[b])})}),d.advanced&&(h.optional=(h.optional||[]).concat(d.advanced)),h},o=function(d,h){if(e.version>=61)return h(d);if(d=JSON.parse(JSON.stringify(d)),d&&typeof d.audio=="object"){const m=function(g,y,b){y in g&&!(b in g)&&(g[b]=g[y],delete g[y])};d=JSON.parse(JSON.stringify(d)),m(d.audio,"autoGainControl","googAutoGainControl"),m(d.audio,"noiseSuppression","googNoiseSuppression"),d.audio=r(d.audio)}if(d&&typeof d.video=="object"){let m=d.video.facingMode;m=m&&(typeof m=="object"?m:{ideal:m});const g=e.version<66;if(m&&(m.exact==="user"||m.exact==="environment"||m.ideal==="user"||m.ideal==="environment")&&!(n.mediaDevices.getSupportedConstraints&&n.mediaDevices.getSupportedConstraints().facingMode&&!g)){delete d.video.facingMode;let y;if(m.exact==="environment"||m.ideal==="environment"?y=["back","rear"]:(m.exact==="user"||m.ideal==="user")&&(y=["front"]),y)return n.mediaDevices.enumerateDevices().then(b=>{b=b.filter(C=>C.kind==="videoinput");let T=b.find(C=>y.some(k=>C.label.toLowerCase().includes(k)));return!T&&b.length&&y.includes("back")&&(T=b[b.length-1]),T&&(d.video.deviceId=m.exact?{exact:T.deviceId}:{ideal:T.deviceId}),d.video=r(d.video),Tv("chrome: "+JSON.stringify(d)),h(d)})}d.video=r(d.video)}return Tv("chrome: "+JSON.stringify(d)),h(d)},l=function(d){return e.version>=64?d:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[d.name]||d.name,message:d.message,constraint:d.constraint||d.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},u=function(d,h,m){o(d,g=>{n.webkitGetUserMedia(g,h,y=>{m&&m(l(y))})})};if(n.getUserMedia=u.bind(n),n.mediaDevices.getUserMedia){const d=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(h){return o(h,m=>d(m).then(g=>{if(m.audio&&!g.getAudioTracks().length||m.video&&!g.getVideoTracks().length)throw g.getTracks().forEach(y=>{y.stop()}),new DOMException("","NotFoundError");return g},g=>Promise.reject(l(g))))}}}function fy(a){a.MediaStream=a.MediaStream||a.webkitMediaStream}function hy(a){if(typeof a=="object"&&a.RTCPeerConnection&&!("ontrack"in a.RTCPeerConnection.prototype)){Object.defineProperty(a.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(n){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=n)},enumerable:!0,configurable:!0});const e=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=r=>{r.stream.addEventListener("addtrack",o=>{let l;a.RTCPeerConnection.prototype.getReceivers?l=this.getReceivers().find(d=>d.track&&d.track.id===o.track.id):l={track:o.track};const u=new Event("track");u.track=o.track,u.receiver=l,u.transceiver={receiver:l},u.streams=[r.stream],this.dispatchEvent(u)}),r.stream.getTracks().forEach(o=>{let l;a.RTCPeerConnection.prototype.getReceivers?l=this.getReceivers().find(d=>d.track&&d.track.id===o.id):l={track:o};const u=new Event("track");u.track=o,u.receiver=l,u.transceiver={receiver:l},u.streams=[r.stream],this.dispatchEvent(u)})},this.addEventListener("addstream",this._ontrackpoly)),e.apply(this,arguments)}}else ba(a,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function my(a){if(typeof a=="object"&&a.RTCPeerConnection&&!("getSenders"in a.RTCPeerConnection.prototype)&&"createDTMFSender"in a.RTCPeerConnection.prototype){const e=function(o,l){return{track:l,get dtmf(){return this._dtmf===void 0&&(l.kind==="audio"?this._dtmf=o.createDTMFSender(l):this._dtmf=null),this._dtmf},_pc:o}};if(!a.RTCPeerConnection.prototype.getSenders){a.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const o=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addTrack=function(d,h){let m=o.apply(this,arguments);return m||(m=e(this,d),this._senders.push(m)),m};const l=a.RTCPeerConnection.prototype.removeTrack;a.RTCPeerConnection.prototype.removeTrack=function(d){l.apply(this,arguments);const h=this._senders.indexOf(d);h!==-1&&this._senders.splice(h,1)}}const n=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(l){this._senders=this._senders||[],n.apply(this,[l]),l.getTracks().forEach(u=>{this._senders.push(e(this,u))})};const r=a.RTCPeerConnection.prototype.removeStream;a.RTCPeerConnection.prototype.removeStream=function(l){this._senders=this._senders||[],r.apply(this,[l]),l.getTracks().forEach(u=>{const d=this._senders.find(h=>h.track===u);d&&this._senders.splice(this._senders.indexOf(d),1)})}}else if(typeof a=="object"&&a.RTCPeerConnection&&"getSenders"in a.RTCPeerConnection.prototype&&"createDTMFSender"in a.RTCPeerConnection.prototype&&a.RTCRtpSender&&!("dtmf"in a.RTCRtpSender.prototype)){const e=a.RTCPeerConnection.prototype.getSenders;a.RTCPeerConnection.prototype.getSenders=function(){const r=e.apply(this,[]);return r.forEach(o=>o._pc=this),r},Object.defineProperty(a.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function py(a){if(!(typeof a=="object"&&a.RTCPeerConnection&&a.RTCRtpSender&&a.RTCRtpReceiver))return;if(!("getStats"in a.RTCRtpSender.prototype)){const n=a.RTCPeerConnection.prototype.getSenders;n&&(a.RTCPeerConnection.prototype.getSenders=function(){const l=n.apply(this,[]);return l.forEach(u=>u._pc=this),l});const r=a.RTCPeerConnection.prototype.addTrack;r&&(a.RTCPeerConnection.prototype.addTrack=function(){const l=r.apply(this,arguments);return l._pc=this,l}),a.RTCRtpSender.prototype.getStats=function(){const l=this;return this._pc.getStats().then(u=>Sv(u,l.track,!0))}}if(!("getStats"in a.RTCRtpReceiver.prototype)){const n=a.RTCPeerConnection.prototype.getReceivers;n&&(a.RTCPeerConnection.prototype.getReceivers=function(){const o=n.apply(this,[]);return o.forEach(l=>l._pc=this),o}),ba(a,"track",r=>(r.receiver._pc=r.srcElement,r)),a.RTCRtpReceiver.prototype.getStats=function(){const o=this;return this._pc.getStats().then(l=>Sv(l,o.track,!1))}}if(!("getStats"in a.RTCRtpSender.prototype&&"getStats"in a.RTCRtpReceiver.prototype))return;const e=a.RTCPeerConnection.prototype.getStats;a.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof a.MediaStreamTrack){const r=arguments[0];let o,l,u;return this.getSenders().forEach(d=>{d.track===r&&(o?u=!0:o=d)}),this.getReceivers().forEach(d=>(d.track===r&&(l?u=!0:l=d),d.track===r)),u||o&&l?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):o?o.getStats():l?l.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function gy(a){a.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(u=>this._shimmedLocalStreams[u][0])};const e=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addTrack=function(u,d){if(!d)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const h=e.apply(this,arguments);return this._shimmedLocalStreams[d.id]?this._shimmedLocalStreams[d.id].indexOf(h)===-1&&this._shimmedLocalStreams[d.id].push(h):this._shimmedLocalStreams[d.id]=[d,h],h};const n=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(u){this._shimmedLocalStreams=this._shimmedLocalStreams||{},u.getTracks().forEach(m=>{if(this.getSenders().find(y=>y.track===m))throw new DOMException("Track already exists.","InvalidAccessError")});const d=this.getSenders();n.apply(this,arguments);const h=this.getSenders().filter(m=>d.indexOf(m)===-1);this._shimmedLocalStreams[u.id]=[u].concat(h)};const r=a.RTCPeerConnection.prototype.removeStream;a.RTCPeerConnection.prototype.removeStream=function(u){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[u.id],r.apply(this,arguments)};const o=a.RTCPeerConnection.prototype.removeTrack;a.RTCPeerConnection.prototype.removeTrack=function(u){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},u&&Object.keys(this._shimmedLocalStreams).forEach(d=>{const h=this._shimmedLocalStreams[d].indexOf(u);h!==-1&&this._shimmedLocalStreams[d].splice(h,1),this._shimmedLocalStreams[d].length===1&&delete this._shimmedLocalStreams[d]}),o.apply(this,arguments)}}function vy(a,e){if(!a.RTCPeerConnection)return;if(a.RTCPeerConnection.prototype.addTrack&&e.version>=65)return gy(a);const n=a.RTCPeerConnection.prototype.getLocalStreams;a.RTCPeerConnection.prototype.getLocalStreams=function(){const g=n.apply(this);return this._reverseStreams=this._reverseStreams||{},g.map(y=>this._reverseStreams[y.id])};const r=a.RTCPeerConnection.prototype.addStream;a.RTCPeerConnection.prototype.addStream=function(g){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},g.getTracks().forEach(y=>{if(this.getSenders().find(T=>T.track===y))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[g.id]){const y=new a.MediaStream(g.getTracks());this._streams[g.id]=y,this._reverseStreams[y.id]=g,g=y}r.apply(this,[g])};const o=a.RTCPeerConnection.prototype.removeStream;a.RTCPeerConnection.prototype.removeStream=function(g){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},o.apply(this,[this._streams[g.id]||g]),delete this._reverseStreams[this._streams[g.id]?this._streams[g.id].id:g.id],delete this._streams[g.id]},a.RTCPeerConnection.prototype.addTrack=function(g,y){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const b=[].slice.call(arguments,1);if(b.length!==1||!b[0].getTracks().find(k=>k===g))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(k=>k.track===g))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const C=this._streams[y.id];if(C)C.addTrack(g),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const k=new a.MediaStream([g]);this._streams[y.id]=k,this._reverseStreams[k.id]=y,this.addStream(k)}return this.getSenders().find(k=>k.track===g)};function l(m,g){let y=g.sdp;return Object.keys(m._reverseStreams||[]).forEach(b=>{const T=m._reverseStreams[b],C=m._streams[T.id];y=y.replace(new RegExp(C.id,"g"),T.id)}),new RTCSessionDescription({type:g.type,sdp:y})}function u(m,g){let y=g.sdp;return Object.keys(m._reverseStreams||[]).forEach(b=>{const T=m._reverseStreams[b],C=m._streams[T.id];y=y.replace(new RegExp(T.id,"g"),C.id)}),new RTCSessionDescription({type:g.type,sdp:y})}["createOffer","createAnswer"].forEach(function(m){const g=a.RTCPeerConnection.prototype[m],y={[m](){const b=arguments;return arguments.length&&typeof arguments[0]=="function"?g.apply(this,[C=>{const k=l(this,C);b[0].apply(null,[k])},C=>{b[1]&&b[1].apply(null,C)},arguments[2]]):g.apply(this,arguments).then(C=>l(this,C))}};a.RTCPeerConnection.prototype[m]=y[m]});const d=a.RTCPeerConnection.prototype.setLocalDescription;a.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?d.apply(this,arguments):(arguments[0]=u(this,arguments[0]),d.apply(this,arguments))};const h=Object.getOwnPropertyDescriptor(a.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(a.RTCPeerConnection.prototype,"localDescription",{get(){const m=h.get.apply(this);return m.type===""?m:l(this,m)}}),a.RTCPeerConnection.prototype.removeTrack=function(g){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!g._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(g._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let b;Object.keys(this._streams).forEach(T=>{this._streams[T].getTracks().find(k=>g.track===k)&&(b=this._streams[T])}),b&&(b.getTracks().length===1?this.removeStream(this._reverseStreams[b.id]):b.removeTrack(g.track),this.dispatchEvent(new Event("negotiationneeded")))}}function ef(a,e){!a.RTCPeerConnection&&a.webkitRTCPeerConnection&&(a.RTCPeerConnection=a.webkitRTCPeerConnection),a.RTCPeerConnection&&e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(n){const r=a.RTCPeerConnection.prototype[n],o={[n](){return arguments[0]=new(n==="addIceCandidate"?a.RTCIceCandidate:a.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};a.RTCPeerConnection.prototype[n]=o[n]})}function yy(a,e){ba(a,"negotiationneeded",n=>{const r=n.target;if(!((e.version<72||r.getConfiguration&&r.getConfiguration().sdpSemantics==="plan-b")&&r.signalingState!=="stable"))return n})}var kv=Object.freeze({__proto__:null,fixNegotiationNeeded:yy,shimAddTrackRemoveTrack:vy,shimAddTrackRemoveTrackWithNative:gy,shimGetSendersWithDtmf:my,shimGetUserMedia:dy,shimMediaStream:fy,shimOnTrack:hy,shimPeerConnection:ef,shimSenderReceiverGetStats:py});function by(a,e){const n=a&&a.navigator,r=a&&a.MediaStreamTrack;if(n.getUserMedia=function(o,l,u){qf("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(o).then(l,u)},!(e.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const o=function(u,d,h){d in u&&!(h in u)&&(u[h]=u[d],delete u[d])},l=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(u){return typeof u=="object"&&typeof u.audio=="object"&&(u=JSON.parse(JSON.stringify(u)),o(u.audio,"autoGainControl","mozAutoGainControl"),o(u.audio,"noiseSuppression","mozNoiseSuppression")),l(u)},r&&r.prototype.getSettings){const u=r.prototype.getSettings;r.prototype.getSettings=function(){const d=u.apply(this,arguments);return o(d,"mozAutoGainControl","autoGainControl"),o(d,"mozNoiseSuppression","noiseSuppression"),d}}if(r&&r.prototype.applyConstraints){const u=r.prototype.applyConstraints;r.prototype.applyConstraints=function(d){return this.kind==="audio"&&typeof d=="object"&&(d=JSON.parse(JSON.stringify(d)),o(d,"autoGainControl","mozAutoGainControl"),o(d,"noiseSuppression","mozNoiseSuppression")),u.apply(this,[d])}}}}function gE(a,e){a.navigator.mediaDevices&&"getDisplayMedia"in a.navigator.mediaDevices||a.navigator.mediaDevices&&(a.navigator.mediaDevices.getDisplayMedia=function(r){if(!(r&&r.video)){const o=new DOMException("getDisplayMedia without video constraints is undefined");return o.name="NotFoundError",o.code=8,Promise.reject(o)}return r.video===!0?r.video={mediaSource:e}:r.video.mediaSource=e,a.navigator.mediaDevices.getUserMedia(r)})}function Sy(a){typeof a=="object"&&a.RTCTrackEvent&&"receiver"in a.RTCTrackEvent.prototype&&!("transceiver"in a.RTCTrackEvent.prototype)&&Object.defineProperty(a.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function tf(a,e){if(typeof a!="object"||!(a.RTCPeerConnection||a.mozRTCPeerConnection))return;!a.RTCPeerConnection&&a.mozRTCPeerConnection&&(a.RTCPeerConnection=a.mozRTCPeerConnection),e.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(o){const l=a.RTCPeerConnection.prototype[o],u={[o](){return arguments[0]=new(o==="addIceCandidate"?a.RTCIceCandidate:a.RTCSessionDescription)(arguments[0]),l.apply(this,arguments)}};a.RTCPeerConnection.prototype[o]=u[o]});const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=a.RTCPeerConnection.prototype.getStats;a.RTCPeerConnection.prototype.getStats=function(){const[l,u,d]=arguments;return r.apply(this,[l||null]).then(h=>{if(e.version<53&&!u)try{h.forEach(m=>{m.type=n[m.type]||m.type})}catch(m){if(m.name!=="TypeError")throw m;h.forEach((g,y)=>{h.set(y,Object.assign({},g,{type:n[g.type]||g.type}))})}return h}).then(u,d)}}function Ty(a){if(!(typeof a=="object"&&a.RTCPeerConnection&&a.RTCRtpSender)||a.RTCRtpSender&&"getStats"in a.RTCRtpSender.prototype)return;const e=a.RTCPeerConnection.prototype.getSenders;e&&(a.RTCPeerConnection.prototype.getSenders=function(){const o=e.apply(this,[]);return o.forEach(l=>l._pc=this),o});const n=a.RTCPeerConnection.prototype.addTrack;n&&(a.RTCPeerConnection.prototype.addTrack=function(){const o=n.apply(this,arguments);return o._pc=this,o}),a.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function ky(a){if(!(typeof a=="object"&&a.RTCPeerConnection&&a.RTCRtpSender)||a.RTCRtpSender&&"getStats"in a.RTCRtpReceiver.prototype)return;const e=a.RTCPeerConnection.prototype.getReceivers;e&&(a.RTCPeerConnection.prototype.getReceivers=function(){const r=e.apply(this,[]);return r.forEach(o=>o._pc=this),r}),ba(a,"track",n=>(n.receiver._pc=n.srcElement,n)),a.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Cy(a){!a.RTCPeerConnection||"removeStream"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.removeStream=function(n){qf("removeStream","removeTrack"),this.getSenders().forEach(r=>{r.track&&n.getTracks().includes(r.track)&&this.removeTrack(r)})})}function Ey(a){a.DataChannel&&!a.RTCDataChannel&&(a.RTCDataChannel=a.DataChannel)}function Ry(a){if(!(typeof a=="object"&&a.RTCPeerConnection))return;const e=a.RTCPeerConnection.prototype.addTransceiver;e&&(a.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let r=arguments[1]&&arguments[1].sendEncodings;r===void 0&&(r=[]),r=[...r];const o=r.length>0;o&&r.forEach(u=>{if("rid"in u&&!/^[a-z0-9]{0,16}$/i.test(u.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in u&&!(parseFloat(u.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in u&&!(parseFloat(u.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const l=e.apply(this,arguments);if(o){const{sender:u}=l,d=u.getParameters();(!("encodings"in d)||d.encodings.length===1&&Object.keys(d.encodings[0]).length===0)&&(d.encodings=r,u.sendEncodings=r,this.setParametersPromises.push(u.setParameters(d).then(()=>{delete u.sendEncodings}).catch(()=>{delete u.sendEncodings})))}return l})}function _y(a){if(!(typeof a=="object"&&a.RTCRtpSender))return;const e=a.RTCRtpSender.prototype.getParameters;e&&(a.RTCRtpSender.prototype.getParameters=function(){const r=e.apply(this,arguments);return"encodings"in r||(r.encodings=[].concat(this.sendEncodings||[{}])),r})}function wy(a){if(!(typeof a=="object"&&a.RTCPeerConnection))return;const e=a.RTCPeerConnection.prototype.createOffer;a.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}function Oy(a){if(!(typeof a=="object"&&a.RTCPeerConnection))return;const e=a.RTCPeerConnection.prototype.createAnswer;a.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>e.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):e.apply(this,arguments)}}var Cv=Object.freeze({__proto__:null,shimAddTransceiver:Ry,shimCreateAnswer:Oy,shimCreateOffer:wy,shimGetDisplayMedia:gE,shimGetParameters:_y,shimGetUserMedia:by,shimOnTrack:Sy,shimPeerConnection:tf,shimRTCDataChannel:Ey,shimReceiverGetStats:ky,shimRemoveStream:Cy,shimSenderGetStats:Ty});function Dy(a){if(!(typeof a!="object"||!a.RTCPeerConnection)){if("getLocalStreams"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in a.RTCPeerConnection.prototype)){const e=a.RTCPeerConnection.prototype.addTrack;a.RTCPeerConnection.prototype.addStream=function(r){this._localStreams||(this._localStreams=[]),this._localStreams.includes(r)||this._localStreams.push(r),r.getAudioTracks().forEach(o=>e.call(this,o,r)),r.getVideoTracks().forEach(o=>e.call(this,o,r))},a.RTCPeerConnection.prototype.addTrack=function(r){for(var o=arguments.length,l=new Array(o>1?o-1:0),u=1;u{this._localStreams?this._localStreams.includes(d)||this._localStreams.push(d):this._localStreams=[d]}),e.apply(this,arguments)}}"removeStream"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.removeStream=function(n){this._localStreams||(this._localStreams=[]);const r=this._localStreams.indexOf(n);if(r===-1)return;this._localStreams.splice(r,1);const o=n.getTracks();this.getSenders().forEach(l=>{o.includes(l.track)&&this.removeTrack(l)})})}}function Ay(a){if(!(typeof a!="object"||!a.RTCPeerConnection)&&("getRemoteStreams"in a.RTCPeerConnection.prototype||(a.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in a.RTCPeerConnection.prototype))){Object.defineProperty(a.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(n){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=n),this.addEventListener("track",this._onaddstreampoly=r=>{r.streams.forEach(o=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(o))return;this._remoteStreams.push(o);const l=new Event("addstream");l.stream=o,this.dispatchEvent(l)})})}});const e=a.RTCPeerConnection.prototype.setRemoteDescription;a.RTCPeerConnection.prototype.setRemoteDescription=function(){const r=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(o){o.streams.forEach(l=>{if(r._remoteStreams||(r._remoteStreams=[]),r._remoteStreams.indexOf(l)>=0)return;r._remoteStreams.push(l);const u=new Event("addstream");u.stream=l,r.dispatchEvent(u)})}),e.apply(r,arguments)}}}function My(a){if(typeof a!="object"||!a.RTCPeerConnection)return;const e=a.RTCPeerConnection.prototype,n=e.createOffer,r=e.createAnswer,o=e.setLocalDescription,l=e.setRemoteDescription,u=e.addIceCandidate;e.createOffer=function(m,g){const y=arguments.length>=2?arguments[2]:arguments[0],b=n.apply(this,[y]);return g?(b.then(m,g),Promise.resolve()):b},e.createAnswer=function(m,g){const y=arguments.length>=2?arguments[2]:arguments[0],b=r.apply(this,[y]);return g?(b.then(m,g),Promise.resolve()):b};let d=function(h,m,g){const y=o.apply(this,[h]);return g?(y.then(m,g),Promise.resolve()):y};e.setLocalDescription=d,d=function(h,m,g){const y=l.apply(this,[h]);return g?(y.then(m,g),Promise.resolve()):y},e.setRemoteDescription=d,d=function(h,m,g){const y=u.apply(this,[h]);return g?(y.then(m,g),Promise.resolve()):y},e.addIceCandidate=d}function Py(a){const e=a&&a.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){const n=e.mediaDevices,r=n.getUserMedia.bind(n);e.mediaDevices.getUserMedia=o=>r(xy(o))}!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia&&(e.getUserMedia=(function(r,o,l){e.mediaDevices.getUserMedia(r).then(o,l)}).bind(e))}function xy(a){return a&&a.video!==void 0?Object.assign({},a,{video:uy(a.video)}):a}function Ny(a){if(!a.RTCPeerConnection)return;const e=a.RTCPeerConnection;a.RTCPeerConnection=function(r,o){if(r&&r.iceServers){const l=[];for(let u=0;uu.receiver.track.kind==="audio");r.offerToReceiveAudio===!1&&o?o.direction==="sendrecv"?o.setDirection?o.setDirection("sendonly"):o.direction="sendonly":o.direction==="recvonly"&&(o.setDirection?o.setDirection("inactive"):o.direction="inactive"):r.offerToReceiveAudio===!0&&!o&&this.addTransceiver("audio",{direction:"recvonly"}),typeof r.offerToReceiveVideo<"u"&&(r.offerToReceiveVideo=!!r.offerToReceiveVideo);const l=this.getTransceivers().find(u=>u.receiver.track.kind==="video");r.offerToReceiveVideo===!1&&l?l.direction==="sendrecv"?l.setDirection?l.setDirection("sendonly"):l.direction="sendonly":l.direction==="recvonly"&&(l.setDirection?l.setDirection("inactive"):l.direction="inactive"):r.offerToReceiveVideo===!0&&!l&&this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function Iy(a){typeof a!="object"||a.AudioContext||(a.AudioContext=a.webkitAudioContext)}var Ev=Object.freeze({__proto__:null,shimAudioContext:Iy,shimCallbacksAPI:My,shimConstraints:xy,shimCreateOfferLegacy:Ly,shimGetUserMedia:Py,shimLocalStreamsAPI:Dy,shimRTCIceServerUrls:Ny,shimRemoteStreamsAPI:Ay,shimTrackEventTransceiver:Uy}),Ed={exports:{}},Rv;function vE(){return Rv||(Rv=1,function(a){const e={};e.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},e.localCName=e.generateIdentifier(),e.splitLines=function(n){return n.trim().split(` `).map(r=>r.trim())},e.splitSections=function(n){return n.split(` m=`).map((o,l)=>(l>0?"m="+o:o).trim()+`\r @@ -92,7 +92,7 @@ `)+`\r `},Nd}var Hv;function m1(){if(Hv)return un;Hv=1;var a=f1(),e=h1(),n=Kf();return un.grammar=n,un.write=e,un.parse=a.parse,un.parseParams=a.parseParams,un.parseFmtpConfig=a.parseFmtpConfig,un.parsePayloads=a.parsePayloads,un.parseRemoteCandidates=a.parseRemoteCandidates,un.parseImageAttributes=a.parseImageAttributes,un.parseSimulcastStreamList=a.parseSimulcastStreamList,un}var Mi=m1();function Qf(a,e,n){var r,o,l;e===void 0&&(e=50),n===void 0&&(n={});var u=(r=n.isImmediate)!=null&&r,d=(o=n.callback)!=null&&o,h=n.maxWait,m=Date.now(),g=[];function y(){if(h!==void 0){var T=Date.now()-m;if(T+e>=h)return h-T}return e}var b=function(){var T=[].slice.call(arguments),C=this;return new Promise(function(k,w){var O=u&&l===void 0;if(l!==void 0&&clearTimeout(l),l=setTimeout(function(){if(l=void 0,m=Date.now(),!u){var Q=a.apply(C,T);d&&d(Q),g.forEach(function(U){return(0,U.resolve)(Q)}),g=[]}},y()),O){var V=a.apply(C,T);return d&&d(V),k(V)}g.push({resolve:k,reject:w})})};return b.cancel=function(T){l!==void 0&&clearTimeout(l),g.forEach(function(C){return(0,C.reject)(T)}),g=[]},b}const p1=.7,g1=20,mr={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class Gv extends xn.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var r;super(),this.log=ke,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Qf(o=>R(this,void 0,void 0,function*(){this.emit(mr.NegotiationStarted);try{yield this.createAndSendOffer()}catch(l){if(o)o(l);else throw l}}),g1),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=ei((r=n.loggerName)!==null&&r!==void 0?r:gn.PCTransport),this.loggerOptions=n,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=n=>{var r;n.candidate&&((r=this.onIceCandidate)===null||r===void 0||r.call(this,n.candidate))},e.onicecandidateerror=n=>{var r;(r=this.onIceCandidateError)===null||r===void 0||r.call(this,n)},e.oniceconnectionstatechange=()=>{var n;(n=this.onIceConnectionStateChange)===null||n===void 0||n.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var n;(n=this.onSignalingStatechange)===null||n===void 0||n.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var n;(n=this.onConnectionStateChange)===null||n===void 0||n.call(this,e.connectionState)},e.ondatachannel=n=>{var r;(r=this.onDataChannel)===null||r===void 0||r.call(this,n)},e.ontrack=n=>{var r;(r=this.onTrack)===null||r===void 0||r.call(this,n)},e}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return R(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return R(this,void 0,void 0,function*(){var n;let r;if(e.type==="offer"){let{stereoMids:o,nackMids:l}=v1(e);this.remoteStereoMids=o,this.remoteNackMids=l}else if(e.type==="answer"){const o=Mi.parse((n=e.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{l.type==="audio"&&this.trackBitrates.some(u=>{if(!u.transceiver||l.mid!=u.transceiver.mid)return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0)return!0;let h=!1;for(const m of l.fmtp)if(m.payload===d){m.config=m.config.split(";").filter(g=>!g.includes("maxaveragebitrate")).join(";"),u.maxbr>0&&(m.config+=";maxaveragebitrate=".concat(u.maxbr*1e3)),h=!0;break}return h||u.maxbr>0&&l.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(u.maxbr*1e3)}),!0})}),r=Mi.write(o)}yield this.setMungedSDP(e,r,!0),this.pendingCandidates.forEach(o=>{this.pc.addIceCandidate(o)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(mr.NegotiationComplete),e.sdp&&Mi.parse(e.sdp).media.forEach(l=>{l.type==="video"&&this.emit(mr.RTPVideoPayloadTypes,l.rtp)}))})}createAndSendOffer(e){return R(this,void 0,void 0,function*(){var n;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const l=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&l)yield this._pc.setRemoteDescription(l);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const r=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:r.sdp},this.logContext));const o=Mi.parse((n=r.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{Yv(l),l.type==="audio"?Fv(l,[],[]):l.type==="video"&&this.trackBitrates.some(u=>{if(!l.msid||!u.cid||!l.msid.includes(u.cid))return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0||(Is(u.codec)&&this.ensureVideoDDExtensionForSVC(l,o),u.codec!=="av1"))return!0;const h=Math.round(u.maxbr*p1);for(const m of l.fmtp)if(m.payload===d){m.config.includes("x-google-start-bitrate")||(m.config+=";x-google-start-bitrate=".concat(h));break}return!0})}),yield this.setMungedSDP(r,Mi.write(o)),this.onOffer(r)})}createAndSetAnswer(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pc.createAnswer(),r=Mi.parse((e=n.sdp)!==null&&e!==void 0?e:"");return r.media.forEach(o=>{Yv(o),o.type==="audio"&&Fv(o,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(n,Mi.write(r)),n})}createDataChannel(e,n){return this.pc.createDataChannel(e,n)}addTransceiver(e,n){return this.pc.addTransceiver(e,n)}addTrack(e){if(!this._pc)throw new ut("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var n;if(!this._pc)throw new ut("PC closed, cannot configure");return(n=this._pc)===null||n===void 0?void 0:n.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var n;return(n=this._pc)===null||n===void 0?void 0:n.removeTrack(e)}getConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&n!==void 0?n:"closed"}getICEConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&n!==void 0?n:"closed"}getSignallingState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&n!==void 0?n:"closed"}getTransceivers(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&n!==void 0?n:[]}getSenders(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&n!==void 0?n:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return R(this,void 0,void 0,function*(){var e;if(!this._pc)return;let n="";const r=new Map,o=new Map;if((yield this._pc.getStats()).forEach(d=>{switch(d.type){case"transport":n=d.selectedCandidatePairId;break;case"candidate-pair":n===""&&d.selected&&(n=d.id),r.set(d.id,d);break;case"remote-candidate":o.set(d.id,"".concat(d.address,":").concat(d.port));break}}),n==="")return;const u=(e=r.get(n))===null||e===void 0?void 0:e.remoteCandidateId;if(u!==void 0)return o.get(u)})}setMungedSDP(e,n,r){return R(this,void 0,void 0,function*(){if(n){const o=e.sdp;e.sdp=n;try{this.log.debug("setting munged ".concat(r?"remote":"local"," description"),this.logContext),r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(l){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:l,sdp:n})),e.sdp=o}}try{r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(o){let l="unknown error";o instanceof Error?l=o.message:typeof o=="string"&&(l=o);const u={error:l,sdp:e.sdp};throw!r&&this.pc.remoteDescription&&(u.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:u})),new of(l)}})}ensureVideoDDExtensionForSVC(e,n){var r,o;if(!((r=e.ext)===null||r===void 0?void 0:r.some(u=>u.uri===Mv))){if(this.ddExtID===0){let u=0;n.media.forEach(d=>{var h;d.type==="video"&&((h=d.ext)===null||h===void 0||h.forEach(m=>{m.value>u&&(u=m.value)}))}),this.ddExtID=u+1}(o=e.ext)===null||o===void 0||o.push({value:this.ddExtID,uri:Mv})}}}function Fv(a,e,n){let r=0;a.rtp.some(o=>o.codec==="opus"?(r=o.payload,!0):!1),r>0&&(a.rtcpFb||(a.rtcpFb=[]),n.includes(a.mid)&&!a.rtcpFb.some(o=>o.payload===r&&o.type==="nack")&&a.rtcpFb.push({payload:r,type:"nack"}),e.includes(a.mid)&&a.fmtp.some(o=>o.payload===r?(o.config.includes("stereo=1")||(o.config+=";stereo=1"),!0):!1))}function v1(a){var e;const n=[],r=[],o=Mi.parse((e=a.sdp)!==null&&e!==void 0?e:"");let l=0;return o.media.forEach(u=>{var d;u.type==="audio"&&(u.rtp.some(h=>h.codec==="opus"?(l=h.payload,!0):!1),!((d=u.rtcpFb)===null||d===void 0)&&d.some(h=>h.payload===l&&h.type==="nack")&&r.push(u.mid),u.fmtp.some(h=>h.payload===l?(h.config.includes("sprop-stereo=1")&&n.push(u.mid),!0):!1))}),{stereoMids:n,nackMids:r}}function Yv(a){if(a.connection){const e=a.connection.ip.indexOf(":")>=0;(a.connection.version===4&&e||a.connection.version===6&&!e)&&(a.connection.ip="0.0.0.0",a.connection.version=4)}}const gf="vp8",y1={audioPreset:cf.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Hf.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:gf,backupCodec:!0},Fy={deviceId:"default",autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Yy={deviceId:"default",resolution:Hs.h720.resolution},b1={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new uE,disconnectOnPageLeave:!0,webAudioMix:!1},Xf={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var We;(function(a){a[a.NEW=0]="NEW",a[a.CONNECTING=1]="CONNECTING",a[a.CONNECTED=2]="CONNECTED",a[a.FAILED=3]="FAILED",a[a.CLOSING=4]="CLOSING",a[a.CLOSED=5]="CLOSED"})(We||(We={}));class S1{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,n,r){var o;this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.log=ke,this.updateState=()=>{var l;const u=this.state,d=this.requiredTransports.map(h=>h.getConnectionState());d.every(h=>h==="connected")?this.state=We.CONNECTED:d.some(h=>h==="failed")?this.state=We.FAILED:d.some(h=>h==="connecting")?this.state=We.CONNECTING:d.every(h=>h==="closed")?this.state=We.CLOSED:d.some(h=>h==="closed")?this.state=We.CLOSING:d.every(h=>h==="new")&&(this.state=We.NEW),u!==this.state&&(this.log.debug("pc state change: from ".concat(We[u]," to ").concat(We[this.state]),this.logContext),(l=this.onStateChange)===null||l===void 0||l.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=ei((o=r.loggerName)!==null&&o!==void 0?o:gn.PCManager),this.loggerOptions=r,this.isPublisherConnectionRequired=!n,this.isSubscriberConnectionRequired=n,this.publisher=new Gv(e,r),this.subscriber=new Gv(e,r),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.PUBLISHER)},this.subscriber.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.SUBSCRIBER)},this.subscriber.onDataChannel=l=>{var u;(u=this.onDataChannel)===null||u===void 0||u.call(this,l)},this.subscriber.onTrack=l=>{var u;(u=this.onTrack)===null||u===void 0||u.call(this,l)},this.publisher.onOffer=l=>{var u;(u=this.onPublisherOffer)===null||u===void 0||u.call(this,l)},this.state=We.NEW,this.connectionLock=new Ht,this.remoteOfferLock=new Ht}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return R(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const n of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(n)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return R(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,n){return R(this,void 0,void 0,function*(){n===mn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return R(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const n=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{n()}})}updateConfiguration(e,n){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),n&&this.triggerIceRestart()}ensurePCTransportConnection(e,n){return R(this,void 0,void 0,function*(){var r;const o=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((r=this.requiredTransports)===null||r===void 0?void 0:r.map(l=>this.ensureTransportConnected(l,e,n)))}finally{o()}})}negotiate(e){return R(this,void 0,void 0,function*(){return new Promise((n,r)=>R(this,void 0,void 0,function*(){const o=setTimeout(()=>{r("negotiation timed out")},this.peerConnectionTimeout),l=()=>{clearTimeout(o),r("negotiation aborted")};e.signal.addEventListener("abort",l),this.publisher.once(mr.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(mr.NegotiationComplete,()=>{clearTimeout(o),n()})}),yield this.publisher.negotiate(u=>{clearTimeout(o),r(u)})}))})}addPublisherTransceiver(e,n){return this.publisher.addTransceiver(e,n)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,n){return this.publisher.createDataChannel(e,n)}getConnectedAddress(e){return e===mn.PUBLISHER?this.publisher.getConnectedAddress():e===mn.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(r.getConnectionState()!=="connected")return new Promise((h,m)=>R(l,void 0,void 0,function*(){const g=()=>{this.log.warn("abort transport connection",this.logContext),Tt.clearTimeout(y),m(new Ie("room connection has been cancelled",Re.Cancelled))};o!=null&&o.signal.aborted&&g(),o==null||o.signal.addEventListener("abort",g);const y=Tt.setTimeout(()=>{o==null||o.signal.removeEventListener("abort",g),m(new Ie("could not establish pc connection",Re.InternalError))},u);for(;this.state!==We.CONNECTED;)if(yield Nt(50),o!=null&&o.signal.aborted){m(new Ie("room connection has been cancelled",Re.Cancelled));return}Tt.clearTimeout(y),o==null||o.signal.removeEventListener("abort",g),h()}))}()})}}class et extends Error{constructor(e,n,r){super(n),this.code=e,this.message=Kv(n,et.MAX_MESSAGE_BYTES),this.data=r?Kv(r,et.MAX_DATA_BYTES):void 0}static fromProto(e){return new et(e.code,e.message,e.data)}toProto(){return new H0({code:this.code,message:this.message,data:this.data})}static builtIn(e,n){return new et(et.ErrorCode[e],et.ErrorMessage[e],n)}}et.MAX_MESSAGE_BYTES=256;et.MAX_DATA_BYTES=15360;et.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};et.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 Ky=15360;function Zf(a){return new TextEncoder().encode(a).length}function Kv(a,e){if(Zf(a)<=e)return a;let n=0,r=a.length;const o=new TextEncoder;for(;n3&&arguments[3]!==void 0?arguments[3]:!1,l=arguments.length>4?arguments[4]:void 0;super(e,n,l),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=Qf(()=>R(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>R(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(W.Ended,this)},this.reacquireTrack=!1,this.providedByUser=o,this.muteLock=new Ht,this.pauseUpstreamLock=new Ht,this.processorLock=new Ht,this.restartLock=new Ht,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),r&&(this._constraints=r)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==j.Kind.Video)return;const{width:e,height:n}=this._mediaStreamTrack.getSettings();if(e&&n)return{width:e,height:n}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,n;return(n=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&n!==void 0?n:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,n){return R(this,void 0,void 0,function*(){var r;if(e===this._mediaStreamTrack&&!n)return;this._mediaStreamTrack&&(this.attachedElements.forEach(l=>{fr(this._mediaStreamTrack,l)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let o;if(this.processor&&e){const l=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(lr(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),o=this.processor.processedTrack}finally{l()}}this.sender&&((r=this.sender.transport)===null||r===void 0?void 0:r.state)!=="closed"&&(yield this.sender.replaceTrack(o??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(l=>{lr(o??e,l)}))})}waitForDimensions(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:T1;return function*(){var r;if(e.kind===j.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((r=Dn())===null||r===void 0?void 0:r.os)==="iOS"&&(yield Nt(10));const o=Date.now();for(;Date.now()-o0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===j.Source.ScreenShare)return;const{deviceId:r,groupId:o}=e._mediaStreamTrack.getSettings(),l=e.kind===j.Kind.Audio?"audioinput":"videoinput";return n?gt.getInstance().normalizeDeviceId(l,r,o):r}()})}mute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,n){return R(this,void 0,void 0,function*(){if(!this.sender)throw new $n("unable to replace an unpublished track");let r,o;return typeof n=="boolean"?r=n:n!==void 0&&(r=n.userProvidedTrack,o=n.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),o&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return R(this,void 0,void 0,function*(){this.manuallyStopped=!1;const n=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:r}=e,o=dE(e,["deviceId"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const l={audio:!1,video:!1};this.kind===j.Kind.Video?l.video=r?{deviceId:r}:!0:l.audio=r?{deviceId:r}:!0,this.attachedElements.forEach(h=>{fr(this.mediaStreamTrack,h)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const d=(yield navigator.mediaDevices.getUserMedia(l)).getTracks()[0];return yield d.applyConstraints(o),d.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(d),this._constraints=e,this.emit(W.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{n()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(W.UpstreamPaused,this);const r=Dn();if((r==null?void 0:r.name)==="Safari"&&Sr(r.version,"12.0")<0)throw new Vf("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{n()}})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(W.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{n()}})}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var l;const u=yield r.processorLock.lock();try{r.log.debug("setting up processor",r.logContext);const d=document.createElement(r.kind),h={kind:r.kind,track:r._mediaStreamTrack,element:d,audioContext:r.audioContext};if(yield n.init(h),r.log.debug("processor initialized",r.logContext),r.processor&&(yield r.stopProcessor()),r.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(lr(r._mediaStreamTrack,d),d.muted=!0,d.play().catch(m=>r.log.error("failed to play processor element",Object.assign(Object.assign({},r.logContext),{error:m}))),r.processor=n,r.processorElement=d,r.processor.processedTrack){for(const m of r.attachedElements)m!==r.processorElement&&o&&(fr(r._mediaStreamTrack,m),lr(r.processor.processedTrack,m));yield(l=r.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}r.emit(W.TrackProcessorUpdate,r.processor)}finally{u()}}()})}getProcessor(){return this.processor}stopProcessor(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var r,o;e.processor&&(e.log.debug("stopping processor",e.logContext),(r=e.processor.processedTrack)===null||r===void 0||r.stop(),yield e.processor.destroy(),e.processor=void 0,n||((o=e.processorElement)===null||o===void 0||o.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(W.TrackProcessorUpdate))}()})}}class Uc extends Qy{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;super(e,j.Kind.Audio,n,r,l),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let u;try{u=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}u&&this.prevStats&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=o,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const r=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Ii(this._constraints.deviceId);return this.source===j.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||r)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{n()}})}restartTrack(e){return R(this,void 0,void 0,function*(){let n;if(e){const r=Qc({audio:e});typeof r.audio!="boolean"&&(n=r.audio)}yield this.restart(n)})}restart(e){const n=Object.create(null,{restart:{get:()=>super.restart}});return R(this,void 0,void 0,function*(){const r=yield n.restart.call(this,e);return this.checkForSilence(),r})}startMonitor(){xt()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf)))}setProcessor(e){return R(this,void 0,void 0,function*(){var n;const r=yield this.processorLock.lock();try{if(!An()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const o={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(o),this.processor=e,this.processor.processedTrack&&(yield(n=this.sender)===null||n===void 0?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(W.TrackProcessorUpdate,this.processor)}finally{r()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const n=yield this.sender.getStats();let r;return n.forEach(o=>{o.type==="outbound-rtp"&&(r={type:"audio",streamId:o.id,packetsSent:o.packetsSent,packetsLost:o.packetsLost,bytesSent:o.bytesSent,timestamp:o.timestamp,roundTripTime:o.roundTripTime,jitter:o.jitter})}),r})}checkForSilence(){return R(this,void 0,void 0,function*(){const e=yield Gy(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(W.AudioSilenceDetected)),e})}}function Xy(a,e,n){switch(a.kind){case"audio":return new Uc(a,e,!1,void 0,n);case"video":return new Lc(a,e,!1,n);default:throw new $n("unsupported track type: ".concat(a.kind))}}const k1=Object.values(Hs),C1=Object.values(lf),E1=Object.values(Hf),R1=[Hs.h180,Hs.h360],_1=[lf.h180,lf.h360],w1=a=>[{scaleResolutionDownBy:2,fps:a.encoding.maxFramerate}].map(n=>{var r,o;return new Ue(Math.floor(a.width/n.scaleResolutionDownBy),Math.floor(a.height/n.scaleResolutionDownBy),Math.max(15e4,Math.floor(a.encoding.maxBitrate/(Math.pow(n.scaleResolutionDownBy,2)*(((r=a.encoding.maxFramerate)!==null&&r!==void 0?r:30)/((o=n.fps)!==null&&o!==void 0?o:30))))),n.fps,a.encoding.priority)}),vf=["q","h","f"];function yf(a,e,n,r){var o,l;let u=r==null?void 0:r.videoEncoding;a&&(u=r==null?void 0:r.screenShareEncoding);const d=r==null?void 0:r.simulcast,h=r==null?void 0:r.scalabilityMode,m=r==null?void 0:r.videoCodec;if(!u&&!d&&!h||!e||!n)return[{}];u||(u=D1(a,e,n,m),ke.debug("using video encoding",u));const g=u.maxFramerate,y=new Ue(e,n,u.maxBitrate,u.maxFramerate,u.priority);if(h&&Is(m)){const C=new Zy(h),k=[];if(C.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(h));const w=Dn();if(Bi()||An()||(w==null?void 0:w.name)==="Chrome"&&Sr(w==null?void 0:w.version,"113")<0){const O=C.suffix=="h"?2:3;for(let V=0;V0){const C=b[0];b.length>1&&([,T]=b);const k=Math.max(e,n);if(k>=960&&T)return Ud(e,n,[C,T,y],g);if(k>=480)return Ud(e,n,[C,y],g)}return Ud(e,n,[y])}function O1(a,e,n){var r,o,l,u;if(!n.backupCodec||n.backupCodec===!0||n.backupCodec.codec===n.videoCodec)return;e!==n.backupCodec.codec&&ke.warn("requested a different codec than specified as backup",{serverRequested:e,backup:n.backupCodec.codec}),n.videoCodec=e,n.videoEncoding=n.backupCodec.encoding;const d=a.mediaStreamTrack.getSettings(),h=(r=d.width)!==null&&r!==void 0?r:(o=a.dimensions)===null||o===void 0?void 0:o.width,m=(l=d.height)!==null&&l!==void 0?l:(u=a.dimensions)===null||u===void 0?void 0:u.height;return a.source===j.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1),yf(a.source===j.Source.ScreenShare,h,m,n)}function D1(a,e,n,r){const o=A1(a,e,n);let{encoding:l}=o[0];const u=Math.max(e,n);for(let d=0;d=u)break}if(r)switch(r){case"av1":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.7;break;case"vp9":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.85;break}return l}function A1(a,e,n){if(a)return E1;const r=e>n?e/n:n/e;return Math.abs(r-16/9)r?n/r:r/n;return Math.abs(o-16/9){if(u>=vf.length)return;const d=Math.min(a,e),m={rid:vf[u],scaleResolutionDownBy:Math.max(1,d/Math.min(l.width,l.height)),maxBitrate:l.encoding.maxBitrate},g=r&&l.encoding.maxFramerate?Math.min(r,l.encoding.maxFramerate):l.encoding.maxFramerate;g&&(m.maxFramerate=g);const y=br()||u===0;l.encoding.priority&&y&&(m.priority=l.encoding.priority,m.networkPriority=l.encoding.priority),o.push(m)}),An()&&qy()==="ios"){let l;o.forEach(d=>{l?d.maxFramerate&&d.maxFramerate>l&&(l=d.maxFramerate):l=d.maxFramerate});let u=!0;o.forEach(d=>{var h;d.maxFramerate!=l&&(u&&(u=!1,ke.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),ke.info('Setting framerate of encoding "'.concat((h=d.rid)!==null&&h!==void 0?h:"",'" to ').concat(l)),d.maxFramerate=l)})}return o}function Xv(a){if(a)return a.sort((e,n)=>{const{encoding:r}=e,{encoding:o}=n;return r.maxBitrate>o.maxBitrate?1:r.maxBitrateo.maxFramerate?1:-1:0})}class Zy{constructor(e){const n=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!n)throw new Error("invalid scalability mode");if(this.spatial=parseInt(n[1]),this.temporal=parseInt(n[2]),n.length>3)switch(n[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=n[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function M1(a){return a.source===j.Source.ScreenShare||a.constraints.height&&Ii(a.constraints.height)>=1080?"maintain-resolution":"balanced"}const P1=5e3;class Lc extends Qy{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0;super(e,j.Kind.Video,n,r,o),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let l;try{l=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}const u=new Map(l.map(d=>[d.rid,d]));if(this.prevStats){let d=0;u.forEach((h,m)=>{var g;const y=(g=this.prevStats)===null||g===void 0?void 0:g.get(m);d+=Xc(h,y)}),this._currentBitrate=d}this.prevStats=u}),this.senderLock=new Ht}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var n;if(this.signalClient=e,!xt())return;const r=(n=this.sender)===null||n===void 0?void 0:n.getParameters();r&&(this.encodings=r.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.pauseUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0)l=m.value,d=!1,yield(u=l.sender)===null||u===void 0?void 0:u.replaceTrack(null)}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.resumeUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0){l=m.value,d=!1;const g=l;yield(u=g.sender)===null||u===void 0?void 0:u.replaceTrack(g.mediaStreamTrack)}}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{n()}})}setTrackMuted(e){super.setTrackMuted(e);for(const n of this.simulcastCodecs.values())n.mediaStreamTrack.enabled=!e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const n=[],r=yield this.sender.getStats();return r.forEach(o=>{var l;if(o.type==="outbound-rtp"){const u={type:"video",streamId:o.id,frameHeight:o.frameHeight,frameWidth:o.frameWidth,framesPerSecond:o.framesPerSecond,framesSent:o.framesSent,firCount:o.firCount,pliCount:o.pliCount,nackCount:o.nackCount,packetsSent:o.packetsSent,bytesSent:o.bytesSent,qualityLimitationReason:o.qualityLimitationReason,qualityLimitationDurations:o.qualityLimitationDurations,qualityLimitationResolutionChanges:o.qualityLimitationResolutionChanges,rid:(l=o.rid)!==null&&l!==void 0?l:o.id,retransmittedPacketsSent:o.retransmittedPacketsSent,targetBitrate:o.targetBitrate,timestamp:o.timestamp},d=r.get(o.remoteId);d&&(u.jitter=d.jitter,u.packetsLost=d.packetsLost,u.roundTripTime=d.roundTripTime),n.push(u)}}),n.sort((o,l)=>{var u,d;return((u=l.frameWidth)!==null&&u!==void 0?u:0)-((d=o.frameWidth)!==null&&d!==void 0?d:0)}),n})}setPublishingQuality(e){const n=[];for(let r=rn.LOW;r<=rn.HIGH;r+=1)n.push(new Bf({quality:r,enabled:r<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(n)}restartTrack(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u;let d;if(e){const y=Qc({video:e});typeof y.video!="boolean"&&(d=y.video)}yield this.restart(d);try{for(var h=!0,m=xi(this.simulcastCodecs.values()),g;g=yield m.next(),n=g.done,!n;h=!0){l=g.value,h=!1;const y=l;y.sender&&((u=y.sender.transport)===null||u===void 0?void 0:u.state)!=="closed"&&(y.mediaStreamTrack=this.mediaStreamTrack.clone(),yield y.sender.replaceTrack(y.mediaStreamTrack))}}catch(y){r={error:y}}finally{try{!h&&!n&&(o=m.return)&&(yield o.call(m))}finally{if(r)throw r.error}}})}setProcessor(e){const n=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return R(this,arguments,void 0,function(r){var o=this;let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var u,d,h,m,g,y;if(yield n.setProcessor.call(o,r,l),!((g=o.processor)===null||g===void 0)&&g.processedTrack)try{for(var b=!0,T=xi(o.simulcastCodecs.values()),C;C=yield T.next(),u=C.done,!u;b=!0)m=C.value,b=!1,yield(y=m.sender)===null||y===void 0?void 0:y.replaceTrack(o.processor.processedTrack)}catch(k){d={error:k}}finally{try{!b&&!u&&(h=T.return)&&(yield h.call(T))}finally{if(d)throw d.error}}}()})}setDegradationPreference(e){return R(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const n=this.sender.getParameters();n.degradationPreference=e,this.sender.setParameters(n)}catch(n){this.log.warn("failed to set degradationPreference",Object.assign({error:n},this.logContext))}})}addSimulcastTrack(e,n){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const r={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:n};return this.simulcastCodecs.set(e,r),r}setSimulcastTrackSender(e,n){const r=this.simulcastCodecs.get(e);r&&(r.sender=n,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},P1))}setPublishingCodecs(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u,d,h;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(e[0].qualities),[];this.subscribedCodecs=e;const m=[];try{for(n=!0,r=xi(e);o=yield r.next(),l=o.done,!l;n=!0){h=o.value,n=!1;const g=h;if(!this.codec||this.codec===g.codec)yield this.setPublishingLayers(g.qualities);else{const y=this.simulcastCodecs.get(g.codec);if(this.log.debug("try setPublishingCodec for ".concat(g.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:y})),!y||!y.sender){for(const b of g.qualities)if(b.enabled){m.push(g.codec);break}}else y.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(g.codec),this.logContext),yield Zv(y.sender,y.encodings,g.qualities,this.senderLock,this.log,this.logContext))}}}catch(g){u={error:g}}finally{try{!n&&!l&&(d=r.return)&&(yield d.call(r))}finally{if(u)throw u.error}}return m})}setPublishingLayers(e){return R(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield Zv(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&this.isInBackground&&this.source===j.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Zv(a,e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=yield r.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},l),{sender:a,qualities:n,senderEncodings:e}));try{const d=a.getParameters(),{encodings:h}=d;if(!h)return;if(h.length!==e.length){o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},l),{encodings:h,senderEncodings:e}));return}let m=!1;!1&&h[0].scalabilityMode||h.forEach((y,b)=>{var T;let C=(T=y.rid)!==null&&T!==void 0?T:"";C===""&&(C="q");const k=Jy(C),w=n.find(O=>O.quality===k);w&&y.active!==w.enabled&&(m=!0,y.active=w.enabled,o.debug("setting layer ".concat(w.quality," to ").concat(y.active?"enabled":"disabled"),l),br()&&(w.enabled?(y.scaleResolutionDownBy=e[b].scaleResolutionDownBy,y.maxBitrate=e[b].maxBitrate,y.maxFrameRate=e[b].maxFrameRate):(y.scaleResolutionDownBy=4,y.maxBitrate=10,y.maxFrameRate=2)))}),m&&(d.encodings=h,o.debug("setting encodings",Object.assign(Object.assign({},l),{encodings:d.encodings})),yield a.setParameters(d))}finally{u()}})}function Jy(a){switch(a){case"f":return rn.HIGH;case"h":return rn.MEDIUM;case"q":return rn.LOW;default:return rn.HIGH}}function Jv(a,e,n,r){if(!n)return[new pa({quality:rn.HIGH,width:a,height:e,bitrate:0,ssrc:0})];if(r){const o=n[0].scalabilityMode,l=new Zy(o),u=[],d=l.suffix=="h"?1.5:2,h=l.suffix=="h"?2:3;for(let m=0;m{var l,u,d;const h=(l=o.scaleResolutionDownBy)!==null&&l!==void 0?l:1;let m=Jy((u=o.rid)!==null&&u!==void 0?u:"");return new pa({quality:m,width:Math.ceil(a/h),height:Math.ceil(e/h),bitrate:(d=o.maxBitrate)!==null&&d!==void 0?d:0,ssrc:0})})}const Wv="_lossy",$v="_reliable",x1=2*1e3,Ld="leave-reconnect";var dn;(function(a){a[a.New=0]="New",a[a.Connected=1]="Connected",a[a.Disconnected=2]="Disconnected",a[a.Reconnecting=3]="Reconnecting",a[a.Closed=4]="Closed"})(dn||(dn={}));class N1 extends xn.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var n;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=dn.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=ke,this.handleDataChannel=r=>R(this,[r],void 0,function(o){var l=this;let{channel:u}=o;return function*(){if(u){if(u.label===$v)l.reliableDCSub=u;else if(u.label===Wv)l.lossyDCSub=u;else return;l.log.debug("on data channel ".concat(u.id,", ").concat(u.label),l.logContext),u.onmessage=l.handleDataMessage}}()}),this.handleDataMessage=r=>R(this,void 0,void 0,function*(){var o,l;const u=yield this.dataProcessLock.lock();try{let d;if(r.data instanceof ArrayBuffer)d=r.data;else if(r.data instanceof Blob)d=yield r.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:r.data}));return}const h=Mt.fromBinary(new Uint8Array(d));((o=h.value)===null||o===void 0?void 0:o.case)==="speaker"?this.emit(ne.ActiveSpeakersUpdate,h.value.value.speakers):(((l=h.value)===null||l===void 0?void 0:l.case)==="user"&&L1(h,h.value.value),this.emit(ne.DataPacketReceived,h))}finally{u()}}),this.handleDataError=r=>{const l=r.currentTarget.maxRetransmits===0?"lossy":"reliable";if(r instanceof ErrorEvent&&r.error){const{error:u}=r.error;this.log.error("DataChannel error on ".concat(l,": ").concat(r.message),Object.assign(Object.assign({},this.logContext),{error:u}))}else this.log.error("Unknown DataChannel error on ".concat(l),Object.assign(Object.assign({},this.logContext),{event:r}))},this.handleBufferedAmountLow=r=>{const l=r.currentTarget.maxRetransmits===0?_e.LOSSY:_e.RELIABLE;this.updateAndEmitDCBufferStatus(l)},this.handleDisconnect=(r,o)=>{if(this._isClosed)return;this.log.warn("".concat(r," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const l=h=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(h,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),this.close()},u=Date.now()-this.reconnectStart;let d=this.getNextRetryDelay({elapsedMs:u,retryCount:this.reconnectAttempts});if(d===null){l(u);return}r===Ld&&(d=0),this.log.debug("reconnecting in ".concat(d,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Tt.setTimeout(()=>this.attemptReconnect(o).finally(()=>this.reconnectTimeout=void 0),d)},this.waitForRestarted=()=>new Promise((r,o)=>{this.pcState===dn.Connected&&r();const l=()=>{this.off(ne.Disconnected,u),r()},u=()=>{this.off(ne.Restarted,l),o()};this.once(ne.Restarted,l),this.once(ne.Disconnected,u)}),this.updateAndEmitDCBufferStatus=r=>{const o=this.isBufferStatusLow(r);typeof o<"u"&&o!==this.dcBufferStatus.get(r)&&(this.dcBufferStatus.set(r,o),this.emit(ne.DCBufferStatusChanged,o,r))},this.isBufferStatusLow=r=>{const o=this.dataChannelForKind(r);if(o)return o.bufferedAmount<=o.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===He.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(sr.RR_SIGNAL_DISCONNECTED))},this.log=ei((n=e.loggerName)!==null&&n!==void 0?n:gn.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new Yf(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new Ht,this.dataProcessLock=new Ht,this.dcBufferStatus=new Map([[_e.LOSSY,!0],[_e.RELIABLE,!0]]),this.client.onParticipantUpdate=r=>this.emit(ne.ParticipantUpdate,r),this.client.onConnectionQuality=r=>this.emit(ne.ConnectionQualityUpdate,r),this.client.onRoomUpdate=r=>this.emit(ne.RoomUpdate,r),this.client.onSubscriptionError=r=>this.emit(ne.SubscriptionError,r),this.client.onSubscriptionPermissionUpdate=r=>this.emit(ne.SubscriptionPermissionUpdate,r),this.client.onSpeakersChanged=r=>this.emit(ne.SpeakersChanged,r),this.client.onStreamStateUpdate=r=>this.emit(ne.StreamStateChanged,r),this.client.onRequestResponse=r=>this.emit(ne.SignalRequestResponse,r)}get logContext(){var e,n,r,o,l,u,d,h;return{room:(n=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||n===void 0?void 0:n.name,roomID:(o=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.room)===null||o===void 0?void 0:o.sid,participant:(u=(l=this.latestJoinResponse)===null||l===void 0?void 0:l.participant)===null||u===void 0?void 0:u.identity,pID:(h=(d=this.latestJoinResponse)===null||d===void 0?void 0:d.participant)===null||h===void 0?void 0:h.sid}}join(e,n,r,o){return R(this,void 0,void 0,function*(){this.url=e,this.token=n,this.signalOpts=r,this.maxJoinAttempts=r.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const l=yield this.client.join(e,n,r,o);return this._isClosed=!1,this.latestJoinResponse=l,this.subscriberPrimary=l.subscriberPrimary,this.pcManager||(yield this.configure(l)),(!this.subscriberPrimary||l.fastPublish)&&this.negotiate(),this.clientConfiguration=l.clientConfiguration,l}catch(l){if(l instanceof Ie&&l.reason===Re.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts{r&&(r.close(),r.onbufferedamountlow=null,r.onclose=null,r.onclosing=null,r.onerror=null,r.onmessage=null,r.onopen=null)};n(this.lossyDC),n(this.lossyDCSub),n(this.reliableDC),n(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return R(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $n("a track with the same ID has already been published");return new Promise((n,r)=>{const o=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],r(new Ie("publication of local track timed out, no response from server",Re.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:l=>{clearTimeout(o),n(l)},reject:()=>{clearTimeout(o),r(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:n}=this.pendingTrackResolvers[e.track.id];n&&n(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(n){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:n}))}return!1}updateMuteStatus(e,n){this.client.sendMuteTrack(e,n)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return R(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return R(this,void 0,void 0,function*(){var n,r;if(this.pcManager&&this.pcManager.currentState!==We.NEW)return;this.participantSid=(n=e.participant)===null||n===void 0?void 0:n.sid;const o=this.makeRTCConfiguration(e);this.pcManager=new S1(o,e.subscriberPrimary,this.loggerOptions),this.emit(ne.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(l,u)=>{this.client.sendIceCandidate(l,u)},this.pcManager.onPublisherOffer=l=>{this.client.sendOffer(l)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(l,u,d)=>R(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(l),this.logContext),["closed","disconnected","failed"].includes(u)&&(this.publisherConnectionPromise=void 0),l===We.CONNECTED){const g=this.pcState===dn.New;this.pcState=dn.Connected,g&&this.emit(ne.Connected,e)}else l===We.FAILED&&this.pcState===dn.Connected&&(this.pcState=dn.Disconnected,this.handleDisconnect("peerconnection failed",d==="failed"?sr.RR_SUBSCRIBER_FAILED:sr.RR_PUBLISHER_FAILED));const h=this.client.isDisconnected||this.client.currentState===He.RECONNECTING,m=[We.FAILED,We.CLOSING,We.CLOSED].includes(l);h&&m&&!this._isClosed&&this.emit(ne.Offline)}),this.pcManager.onTrack=l=>{this.emit(ne.MediaTrackAdded,l.track,l.streams[0],l.receiver)},U1((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>R(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,n)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:n})),this.pcManager.addIceCandidate(e,n))},this.client.onOffer=e=>R(this,void 0,void 0,function*(){if(!this.pcManager)return;const n=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(n)}),this.client.onLocalTrackPublished=e=>{var n;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(n=e.track)===null||n===void 0?void 0:n.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:r}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],r(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(ne.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(ne.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,n)=>{this.emit(ne.RemoteMute,e,n)},this.client.onSubscribedQualityUpdate=e=>{this.emit(ne.SubscribedQualityUpdate,e)},this.client.onClose=()=>{this.handleDisconnect("signal",sr.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case ur.DISCONNECT:this.emit(ne.Disconnected,e==null?void 0:e.reason),this.close();break;case ur.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ld);break;case ur.RESUME:this.handleDisconnect(Ld)}}}makeRTCConfiguration(e){var n;const r=Object.assign({},this.rtcConfig);if(!((n=this.signalOpts)===null||n===void 0)&&n.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),r.encodedInsertableStreams=!0),e.iceServers&&!r.iceServers){const o=[];e.iceServers.forEach(l=>{const u={urls:l.urls};l.username&&(u.username=l.username),l.credential&&(u.credential=l.credential),o.push(u)}),r.iceServers=o}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Bs.ENABLED&&(r.iceTransportPolicy="relay"),r.sdpSemantics="unified-plan",r.continualGatheringPolicy="gather_continually",r}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(Wv,{ordered:!0,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel($v,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,n,r){return R(this,void 0,void 0,function*(){if(uf())return yield this.createTransceiverRTCRtpSender(e,n,r);if(df())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(uf())return this.createSimulcastTransceiverSender(e,n,r,o);if(df())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,n,r){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const o=[];e.mediaStream&&o.push(e.mediaStream),Er(e)&&(e.codec=n.videoCodec);const l={direction:"sendonly",streams:o};return r&&(l.sendEncodings=r),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,l)).sender})}createSimulcastTransceiverSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const l={direction:"sendonly"};o&&(l.sendEncodings=o);const u=yield this.pcManager.addPublisherTransceiver(n.mediaStreamTrack,l);if(r.videoCodec)return e.setSimulcastTrackSender(r.videoCodec,u.sender),u.sender})}createRTCRtpSender(e){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return R(this,void 0,void 0,function*(){var n,r,o;if(!this._isClosed){if(this.attemptingReconnect){ke.warn("already attempting reconnect, returning early",this.logContext);return}(((n=this.clientConfiguration)===null||n===void 0?void 0:n.resumeConnection)===Bs.DISABLED||((o=(r=this.pcManager)===null||r===void 0?void 0:r.currentState)!==null&&o!==void 0?o:We.NEW)===We.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(l){this.reconnectAttempts+=1;let u=!0;l instanceof ut?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:l})),u=!1):l instanceof or||(this.fullReconnectOnNext=!0),u?this.handleDisconnect("reconnect",sr.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(n){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:n}))}return null}restartConnection(e){return R(this,void 0,void 0,function*(){var n,r,o;try{if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let l;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new or;l=yield this.join(e??this.url,this.token,this.signalOpts)}catch(u){throw u instanceof Ie&&u.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):new or}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(ne.SignalRestarted,l),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");(n=this.regionUrlProvider)===null||n===void 0||n.resetAttempts(),this.emit(ne.Restarted)}catch(l){const u=yield(r=this.regionUrlProvider)===null||r===void 0?void 0:r.getNextBestRegionUrl();if(u){yield this.restartConnection(u);return}else throw(o=this.regionUrlProvider)===null||o===void 0||o.resetAttempts(),l}})}resumeConnection(e){return R(this,void 0,void 0,function*(){var n;if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");if(!this.pcManager)throw new ut("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Resuming);let r;try{this.setupSignalClientCallbacks(),r=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(o){let l="";throw o instanceof Error&&(l=o.message,this.log.error(o.message,Object.assign(Object.assign({},this.logContext),{error:o}))),o instanceof Ie&&o.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):o instanceof Ie&&o.reason===Re.LeaveRequest?o:new or(l)}if(this.emit(ne.SignalResumed),r){const o=this.makeRTCConfiguration(r);this.pcManager.updateConfiguration(o)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");this.client.setReconnected(),((n=this.reliableDC)===null||n===void 0?void 0:n.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(ne.Resumed)})}waitForPCInitialConnection(e,n){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(n,e)})}waitForPCReconnected(){return R(this,void 0,void 0,function*(){this.pcState=dn.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Nt(x1),!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=dn.Connected}catch(e){throw this.pcState=dn.Disconnected,new Ie("could not establish PC connection, ".concat(e.message),Re.InternalError)}})}publishRpcResponse(e,n,r,o){return R(this,void 0,void 0,function*(){const l=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcResponse",value:new V0({requestId:n,value:o?{case:"error",value:o.toProto()}:{case:"payload",value:r??""}})}});yield this.sendDataPacket(l,_e.RELIABLE)})}publishRpcAck(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcAck",value:new q0({requestId:n})}});yield this.sendDataPacket(r,_e.RELIABLE)})}sendDataPacket(e,n){return R(this,void 0,void 0,function*(){const r=e.toBinary();yield this.ensurePublisherConnected(n);const o=this.dataChannelForKind(n);o&&o.send(r),this.updateAndEmitDCBufferStatus(n)})}waitForBufferStatusLow(e){return new Promise((n,r)=>R(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))n();else{const o=()=>r("Engine closed");for(this.once(ne.Closing,o);!this.dcBufferStatus.get(e);)yield Nt(10);this.off(ne.Closing,o),n()}}))}ensureDataTransportConnected(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var l;if(!r.pcManager)throw new ut("PC manager is closed");const u=o?r.pcManager.subscriber:r.pcManager.publisher,d=o?"Subscriber":"Publisher";if(!u)throw new Ie("".concat(d," connection not set"),Re.InternalError);let h=!1;!o&&!r.dataChannelForKind(n,o)&&(r.createDataChannels(),h=!0),!h&&!o&&!r.pcManager.publisher.isICEConnected&&r.pcManager.publisher.getICEConnectionState()!=="checking"&&(h=!0),h&&r.negotiate();const m=r.dataChannelForKind(n,o);if((m==null?void 0:m.readyState)==="open")return;const g=new Date().getTime()+r.peerConnectionTimeout;for(;new Date().getTime()R(this,void 0,void 0,function*(){if(!this.pcManager){n(new of("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const r=new AbortController,o=()=>{r.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&n("cannot negotiate on closed engine"),this.on(ne.Closing,o),this.pcManager.publisher.once(mr.RTPVideoPayloadTypes,l=>{const u=new Map;l.forEach(d=>{const h=d.codec.toLowerCase();XE(h)&&u.set(d.payload,h)}),this.emit(ne.RTPVideoMapUpdate,u)});try{yield this.pcManager.negotiate(r),e()}catch(l){l instanceof of&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",sr.RR_UNKNOWN),n(l)}finally{this.off(ne.Closing,o)}}))})}dataChannelForKind(e,n){if(n){if(e===_e.LOSSY)return this.lossyDCSub;if(e===_e.RELIABLE)return this.reliableDCSub}else{if(e===_e.LOSSY)return this.lossyDC;if(e===_e.RELIABLE)return this.reliableDC}}sendSyncState(e,n){var r,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const l=this.pcManager.subscriber.getLocalDescription(),u=this.pcManager.subscriber.getRemoteDescription(),d=(o=(r=this.signalOpts)===null||r===void 0?void 0:r.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(g=>{g.isDesired!==d&&h.push(g.trackSid),g.isEnabled||m.push(g.trackSid)}),this.client.sendSyncState(new ay({answer:l?Nc({sdp:l.sdp,type:l.type}):void 0,offer:u?Nc({sdp:u.sdp,type:u.type}):void 0,subscription:new Fc({trackSids:h,subscribe:!d,participantTracks:[]}),publishTracks:i1(n),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],n=(r,o)=>{(r==null?void 0:r.id)!==void 0&&r.id!==null&&e.push(new ry({label:r.label,id:r.id,target:o}))};return n(this.dataChannelForKind(_e.LOSSY),mn.PUBLISHER),n(this.dataChannelForKind(_e.RELIABLE),mn.PUBLISHER),n(this.dataChannelForKind(_e.LOSSY,!0),mn.SUBSCRIBER),n(this.dataChannelForKind(_e.RELIABLE,!0),mn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Tt.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xt()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xt()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class or extends Error{}function U1(a){return a!==void 0&&a>13}function L1(a,e){const n=a.participantIdentity?a.participantIdentity:e.participantIdentity;a.participantIdentity=n,e.participantIdentity=n;const r=a.destinationIdentities.length!==0?a.destinationIdentities:e.destinationIdentities;a.destinationIdentities=r,e.destinationIdentities=r}class bf{constructor(e,n){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=n}updateToken(e){this.token=e}isCloud(){return hf(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return R(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const n=this.regionSettings.regions.filter(r=>!this.attemptedRegions.find(o=>o.url===r.url));if(n.length>0){const r=n[0];return this.attemptedRegions.push(r),ke.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return R(this,void 0,void 0,function*(){const n=yield fetch("".concat(I1(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(n.ok){const r=yield n.json();return this.lastUpdateAt=Date.now(),r}else throw new Ie("Could not fetch region settings: ".concat(n.statusText),n.status===401?Re.NotAllowed:Re.InternalError,n.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function I1(a){return"".concat(a.protocol.replace("ws","http"),"//").concat(a.host,"/settings")}class Wy{get info(){return this._info}constructor(e,n,r){this.reader=n,this.totalByteSize=r,this._info=e,this.bytesReceived=0}}class j1 extends Wy{handleChunkReceived(e){var n;this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>R(this,void 0,void 0,function*(){try{const{done:n,value:r}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(r),{done:!1,value:r.content})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l=new Set;try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0){o=h.value,u=!1;const m=o;l.add(m)}}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return Array.from(l)})}}class B1 extends Wy{constructor(e,n,r){super(e,n,r),this.receivedChunks=new Map}handleChunkReceived(e){var n;const r=Oc(e.chunkIndex),o=this.receivedChunks.get(r);if(o&&o.version>e.version)return;this.receivedChunks.set(r,e),this.bytesReceived+=e.content.byteLength;const l=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,l)}[Symbol.asyncIterator](){const e=this.reader.getReader(),n=new TextDecoder;return{next:()=>R(this,void 0,void 0,function*(){try{const{done:r,value:o}=yield e.read();return r?{done:!0,value:void 0}:(this.handleChunkReceived(o),{done:!1,value:n.decode(o.content)})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l="";try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0)o=h.value,u=!1,l+=o}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return l})}}class z1{constructor(e,n,r){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=r,this.info=n}write(e){return this.defaultWriter.write(e)}close(){return R(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class q1 extends z1{}class $y extends j{constructor(e,n,r,o,l){super(e,r,l),this.sid=n,this.receiver=o}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const n=r=>{r.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",n),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(W.Ended,this))};e.addEventListener("removetrack",n)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),Jf)),a1()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var n;this.timeSyncHandle=requestAnimationFrame(()=>e());const r=(n=this.receiver)===null||n===void 0?void 0:n.getSynchronizationSources()[0];if(r){const{timestamp:o,rtpTimestamp:l}=r;l&&this.rtpTimestamp!==l&&(this.emit(W.TimeSyncUpdate,{timestamp:o,rtpTimestamp:l}),this.rtpTimestamp=l)}};e()}}class eb extends $y{constructor(e,n,r,o,l,u){super(e,n,j.Kind.Audio,r,u),this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const d=yield this.getReceiverStats();d&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(d,this.prevStats)),this.prevStats=d}),this.audioContext=o,this.webAudioPluginNodes=[],l&&(this.sinkId=l.deviceId)}setVolume(e){var n;for(const r of this.attachedElements)this.audioContext?(n=this.gainNode)===null||n===void 0||n.gain.setTargetAtTime(e,0,.1):r.volume=e;An()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(An())return 1;let e=0;return this.attachedElements.forEach(n=>{n.volume>e&&(e=n.volume)}),e}setSinkId(e){return R(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(n=>{if(ff(n))return n.setSinkId(e)}))})}attach(e){const n=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&ff(e)&&e.setSinkId(this.sinkId),this.audioContext&&n&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let n;return e?(n=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(n=super.detach(),this.disconnectWebAudio()),n}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,n){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(n.srcObject);let r=this.sourceNode;this.webAudioPluginNodes.forEach(o=>{r.connect(o),r=o}),this.gainNode=e.createGain(),r.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(W.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(o=>{this.emit(W.AudioPlaybackFailed,o)})}disconnectWebAudio(){var e,n;(e=this.gainNode)===null||e===void 0||e.disconnect(),(n=this.sourceNode)===null||n===void 0||n.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n;return e.forEach(r=>{r.type==="inbound-rtp"&&(n={type:"audio",streamId:r.id,timestamp:r.timestamp,jitter:r.jitter,bytesReceived:r.bytesReceived,concealedSamples:r.concealedSamples,concealmentEvents:r.concealmentEvents,silentConcealedSamples:r.silentConcealedSamples,silentConcealmentEvents:r.silentConcealmentEvents,totalAudioEnergy:r.totalAudioEnergy,totalSamplesDuration:r.totalSamplesDuration})}),n})}}const Id=100;class V1 extends $y{constructor(e,n,r,o,l){super(e,n,j.Kind.Video,r,l),this.elementInfos=[],this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const u=yield this.getReceiverStats();u&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.debouncedHandleResize=Qf(()=>{this.updateDimensions()},Id),this.adaptiveStreamSettings=o}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(n=>{e?fr(this._mediaStreamTrack,n):lr(this._mediaStreamTrack,n)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(n=>n.element===e)===void 0){const n=new H1(e);this.observeElementInfo(n)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(n=>n===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const n=this.elementInfos.filter(r=>r===e);for(const r of n)r.stopObserving();this.elementInfos=this.elementInfos.filter(r=>r!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let n=[];if(e)return this.stopObservingElement(e),super.detach(e);n=super.detach();for(const r of n)this.stopObservingElement(r);return n}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n,r="",o=new Map;return e.forEach(l=>{l.type==="inbound-rtp"?(r=l.codecId,n={type:"video",streamId:l.id,framesDecoded:l.framesDecoded,framesDropped:l.framesDropped,framesReceived:l.framesReceived,packetsReceived:l.packetsReceived,packetsLost:l.packetsLost,frameWidth:l.frameWidth,frameHeight:l.frameHeight,pliCount:l.pliCount,firCount:l.firCount,nackCount:l.nackCount,jitter:l.jitter,timestamp:l.timestamp,bytesReceived:l.bytesReceived,decoderImplementation:l.decoderImplementation}):l.type==="codec"&&o.set(l.id,l)}),n&&r!==""&&o.get(r)&&(n.mimeType=o.get(r).mimeType),n})}stopObservingElement(e){const n=this.elementInfos.filter(r=>r.element===e);for(const r of n)this.stopObservingElementInfo(r)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,n;const r=this.elementInfos.reduce((d,h)=>Math.max(d,h.visibilityChangedAt||0),0),o=!((n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&n!==void 0)||n?this.isInBackground:!1,l=this.elementInfos.some(d=>d.pictureInPicture),u=this.elementInfos.some(d=>d.visible)&&!o||l;if(this.lastVisible!==u){if(!u&&Date.now()-r{this.updateVisibility()},Id);return}this.lastVisible=u,this.emit(W.VisibilityChanged,u,this)}}updateDimensions(){var e,n;let r=0,o=0;const l=this.getPixelDensity();for(const u of this.elementInfos){const d=u.width()*l,h=u.height()*l;d+h>r+o&&(r=d,o=h)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===r&&((n=this.lastDimensions)===null||n===void 0?void 0:n.height)===o||(this.lastDimensions={width:r,height:o},this.emit(W.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return n==="screen"?Pv():n||(Pv()>2?2:1)}}class H1{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,n){this.onVisibilityChanged=r=>{var o;const{target:l,isIntersecting:u}=r;l===this.element&&(this.isIntersecting=u,this.isPiP=Ms(this.element),this.visibilityChangedAt=Date.now(),(o=this.handleVisibilityChanged)===null||o===void 0||o.call(this))},this.onEnterPiP=()=>{var r,o,l;(o=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||o===void 0||o.addEventListener("pagehide",this.onLeavePiP),this.isPiP=Ms(this.element),(l=this.handleVisibilityChanged)===null||l===void 0||l.call(this)},this.onLeavePiP=()=>{var r;this.isPiP=Ms(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.element=e,this.isIntersecting=n??Sf(e),this.isPiP=xt()&&Ms(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,n,r;this.isIntersecting=Sf(this.element),this.isPiP=Ms(this.element),this.element.handleResize=()=>{var o;(o=this.handleResize)===null||o===void 0||o.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Nv().observe(this.element),xv().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(r=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,n,r,o,l;(e=Nv())===null||e===void 0||e.unobserve(this.element),(n=xv())===null||n===void 0||n.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(r=window.documentPictureInPicture)===null||r===void 0||r.removeEventListener("enter",this.onEnterPiP),(l=(o=window.documentPictureInPicture)===null||o===void 0?void 0:o.window)===null||l===void 0||l.removeEventListener("pagehide",this.onLeavePiP)}}function Ms(a){var e,n;return document.pictureInPictureElement===a?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sf(a,(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window):!1}function Sf(a,e){const n=e||window;let r=a.offsetTop,o=a.offsetLeft;const l=a.offsetWidth,u=a.offsetHeight,{hidden:d}=a,{display:h}=getComputedStyle(a);for(;a.offsetParent;)a=a.offsetParent,r+=a.offsetTop,o+=a.offsetLeft;return rn.pageYOffset&&o+l>n.pageXOffset&&!d&&h!=="none"}class Pi extends xn.EventEmitter{constructor(e,n,r,o){var l;super(),this.metadataMuted=!1,this.encryption=Vt.NONE,this.log=ke,this.handleMuted=()=>{this.emit(W.Muted)},this.handleUnmuted=()=>{this.emit(W.Unmuted)},this.log=ei((l=o==null?void 0:o.loggerName)!==null&&l!==void 0?l:gn.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=n,this.trackName=r,this.source=j.Source.Unknown}setTrack(e){this.track&&(this.track.off(W.Muted,this.handleMuted),this.track.off(W.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(W.Muted,this.handleMuted),e.on(W.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Me(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Vt.NONE}get audioTrack(){if(ti(this.track))return this.track}get videoTrack(){if(Er(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=j.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===j.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(a){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(a.SubscriptionStatus||(a.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(a.PermissionStatus||(a.PermissionStatus={}))})(Pi);class Tf extends Pi{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.handleTrackEnded=()=>{this.emit(W.Ended)},this.updateInfo(n),this.setTrack(r)}setTrack(e){this.track&&this.track.off(W.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(W.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ti(this.track)){const n=this.track.getSourceTrackSettings(),r=new Set;return n.autoGainControl&&r.add(On.TF_AUTO_GAIN_CONTROL),n.echoCancellation&&r.add(On.TF_ECHO_CANCELLATION),n.noiseSuppression&&r.add(On.TF_NOISE_SUPPRESSION),n.channelCount&&n.channelCount>1&&r.add(On.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||r.add(On.TF_NO_DTX),this.track.enhancedNoiseCancellation&&r.add(On.TF_ENHANCED_NOISE_CANCELLATION),Array.from(r.values())}else return[]}}var Ni;(function(a){a.Excellent="excellent",a.Good="good",a.Poor="poor",a.Lost="lost",a.Unknown="unknown"})(Ni||(Ni={}));function G1(a){switch(a){case xs.EXCELLENT:return Ni.Excellent;case xs.GOOD:return Ni.Good;case xs.POOR:return Ni.Poor;case xs.LOST:return Ni.Lost;default:return Ni.Unknown}}class tb extends xn.EventEmitter{get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===qs.AGENT}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,n,r,o,l,u){let d=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qs.STANDARD;var h;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Ni.Unknown,this.log=ke,this.log=ei((h=u==null?void 0:u.loggerName)!==null&&h!==void 0?h:gn.Participant),this.loggerOptions=u,this.setMaxListeners(100),this.sid=e,this.identity=n,this.name=r,this.metadata=o,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=d,this._attributes=l??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,n]of this.trackPublications)if(n.source===e)return n}getTrackPublicationByName(e){for(const[,n]of this.trackPublications)if(n.trackName===e)return n}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const n=this.getTrackPublication(j.Source.Camera);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const n=this.getTrackPublication(j.Source.Microphone);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(j.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,this.log.trace("update participant info",Object.assign(Object.assign({},this.logContext),{info:e})),!0)}_setMetadata(e){const n=this.metadata!==e,r=this.metadata;this.metadata=e,n&&this.emit(F.ParticipantMetadataChanged,r)}_setName(e){const n=this.name!==e;this.name=e,n&&this.emit(F.ParticipantNameChanged,e)}_setAttributes(e){const n=r1(this.attributes,e);this._attributes=e,Object.keys(n).length>0&&this.emit(F.AttributesChanged,n)}setPermissions(e){var n,r,o,l,u,d;const h=this.permissions,m=e.canPublish!==((n=this.permissions)===null||n===void 0?void 0:n.canPublish)||e.canSubscribe!==((r=this.permissions)===null||r===void 0?void 0:r.canSubscribe)||e.canPublishData!==((o=this.permissions)===null||o===void 0?void 0:o.canPublishData)||e.hidden!==((l=this.permissions)===null||l===void 0?void 0:l.hidden)||e.recorder!==((u=this.permissions)===null||u===void 0?void 0:u.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((g,y)=>{var b;return g!==((b=this.permissions)===null||b===void 0?void 0:b.canPublishSources[y])})||e.canSubscribeMetrics!==((d=this.permissions)===null||d===void 0?void 0:d.canSubscribeMetrics);return this.permissions=e,m&&this.emit(F.ParticipantPermissionsChanged,h),m}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(F.IsSpeakingChanged,e))}setConnectionQuality(e){const n=this._connectionQuality;this._connectionQuality=G1(e),n!==this._connectionQuality&&this.emit(F.ConnectionQualityChanged,this._connectionQuality)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(n=>ti(n.track)&&n.track.setAudioContext(e))}addTrackPublication(e){e.on(W.Muted,()=>{this.emit(F.TrackMuted,e)}),e.on(W.Unmuted,()=>{this.emit(F.TrackUnmuted,e)});const n=e;switch(n.track&&(n.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case j.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case j.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function F1(a){var e,n,r;if(!a.participantSid&&!a.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new ny({participantIdentity:(e=a.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(n=a.participantSid)!==null&&n!==void 0?n:"",allTracks:(r=a.allowAll)!==null&&r!==void 0?r:!1,trackSids:a.allowedTrackSids||[]})}const hc=15e3;class Y1 extends tb{constructor(e,n,r,o,l){super(e,n,void 0,void 0,void 0,{loggerName:o.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Vt.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Vy)},this.handleReconnected=()=>{var u,d;(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.resolve)===null||d===void 0||d.call(u),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var u,d;this.reconnectFuture&&(this.reconnectFuture.promise.catch(h=>this.log.warn(h.message,this.logContext)),(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.reject)===null||d===void 0||d.call(u,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=u=>{const{requestId:d,reason:h,message:m}=u,g=this.pendingSignalRequests.get(d);g&&(h!==zf.OK&&g.reject(new Ov(m,h)),this.pendingSignalRequests.delete(d))},this.handleDataPacket=u=>{switch(u.value.case){case"rpcResponse":let d=u.value.value,h=null,m=null;d.value.case==="payload"?h=d.value.value:d.value.case==="error"&&(m=et.fromProto(d.value.value)),this.handleIncomingRpcResponse(d.requestId,h,m);break;case"rpcAck":let g=u.value.value;this.handleIncomingRpcAck(g.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(u=>F1(u)))},this.onTrackUnmuted=u=>{this.onTrackMuted(u,u.isUpstreamPaused)},this.onTrackMuted=(u,d)=>{if(d===void 0&&(d=!0),!u.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Me(u)));return}this.engine.updateMuteStatus(u.sid,d)},this.onTrackUpstreamPaused=u=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,!0)},this.onTrackUpstreamResumed=u=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,u.isMuted)},this.onTrackFeatureUpdate=u=>{const d=this.audioTrackPublications.get(u.sid);if(!d){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(u.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(d.trackSid,d.getTrackFeatures())},this.handleSubscribedQualityUpdate=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;if(!(!((y=this.roomOptions)===null||y===void 0)&&y.dynacast))return;const T=this.videoTrackPublications.get(u.trackSid);if(!T){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}if(u.subscribedCodecs.length>0){if(!T.videoTrack)return;const O=yield T.videoTrack.setPublishingCodecs(u.subscribedCodecs);try{for(var C=!0,k=xi(O),w;w=yield k.next(),d=w.done,!d;C=!0){g=w.value,C=!1;const V=g;IE(V)&&(this.log.debug("publish ".concat(V," for ").concat(T.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Me(T))),yield this.publishAdditionalCodecForTrack(T.videoTrack,V,T.options))}}catch(V){h={error:V}}finally{try{!C&&!d&&(m=k.return)&&(yield m.call(k))}finally{if(h)throw h.error}}}else u.subscribedQualities.length>0&&(yield(b=T.videoTrack)===null||b===void 0?void 0:b.setPublishingLayers(u.subscribedQualities))}),this.handleLocalTrackUnpublished=u=>{const d=this.trackPublications.get(u.trackSid);if(!d){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}this.unpublishTrack(d.track)},this.handleTrackEnded=u=>R(this,void 0,void 0,function*(){if(u.source===j.Source.ScreenShare||u.source===j.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Me(u))),this.unpublishTrack(u);else if(u.isUserProvided)yield u.mute();else if(ha(u)||Ai(u))try{if(xt())try{const d=yield navigator==null?void 0:navigator.permissions.query({name:u.source===j.Source.Camera?"camera":"microphone"});if(d&&d.state==="denied")throw this.log.warn("user has revoked access to ".concat(u.source),Object.assign(Object.assign({},this.logContext),Me(u))),d.onchange=()=>{d.state!=="denied"&&(u.isMuted||u.restartTrack(),d.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}u.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Me(u))),ha(u)?yield u.restartTrack({deviceId:"default"}):yield u.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Me(u))),yield u.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=r,this.roomOptions=o,this.setupEngine(r),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=l}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Vt.NONE}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setupEngine(e){this.engine=e,this.engine.on(ne.RemoteMute,(n,r)=>{const o=this.trackPublications.get(n);!o||!o.track||(r?o.mute():o.unmute())}),this.engine.on(ne.Connected,this.handleReconnected).on(ne.SignalRestarted,this.handleReconnected).on(ne.SignalResumed,this.handleReconnected).on(ne.Restarting,this.handleReconnecting).on(ne.Resuming,this.handleReconnecting).on(ne.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(ne.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(ne.Disconnected,this.handleDisconnected).on(ne.SignalRequestResponse,this.handleSignalRequestResponse).on(ne.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return R(this,arguments,void 0,function(n){var r=this;let{metadata:o,name:l,attributes:u}=n;return function*(){return new Promise((d,h)=>R(r,void 0,void 0,function*(){var m,g;try{let y=!1;const b=yield this.engine.client.sendUpdateLocalMetadata((m=o??this.metadata)!==null&&m!==void 0?m:"",(g=l??this.name)!==null&&g!==void 0?g:"",u),T=performance.now();for(this.pendingSignalRequests.set(b,{resolve:d,reject:C=>{h(C),y=!0},values:{name:l,metadata:o,attributes:u}});performance.now()-T<5e3&&!y;){if((!l||this.name===l)&&(!o||this.metadata===o)&&(!u||Object.entries(u).every(C=>{let[k,w]=C;return this.attributes[k]===w||w===""&&!this.attributes[k]}))){this.pendingSignalRequests.delete(b),d();return}yield Nt(50)}h(new Ov("Request to update local metadata timed out","TimeoutError"))}catch(y){y instanceof Error&&h(y)}}))}()})}setCameraEnabled(e,n,r){return this.setTrackEnabled(j.Source.Camera,e,n,r)}setMicrophoneEnabled(e,n,r){return this.setTrackEnabled(j.Source.Microphone,e,n,r)}setScreenShareEnabled(e,n,r){return this.setTrackEnabled(j.Source.ScreenShare,e,n,r)}setPermissions(e){const n=this.permissions,r=super.setPermissions(e);return r&&n&&this.emit(F.ParticipantPermissionsChanged,n),r}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){this.encryptionType=e?Vt.GCM:Vt.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,n,r,o){return R(this,void 0,void 0,function*(){var l,u;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:n})),this.republishPromise&&(yield this.republishPromise);let d=this.getTrackPublication(e);if(n)if(d)yield d.unmute();else{let h;if(this.pendingPublishing.has(e)){const m=yield this.waitForPendingPublicationOfSource(e);return m||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield m==null?void 0:m.unmute(),m}this.pendingPublishing.add(e);try{switch(e){case j.Source.Camera:h=yield this.createTracks({video:(l=r)!==null&&l!==void 0?l:!0});break;case j.Source.Microphone:h=yield this.createTracks({audio:(u=r)!==null&&u!==void 0?u:!0});break;case j.Source.ScreenShare:h=yield this.createScreenTracks(Object.assign({},r));break;default:throw new $n(e)}}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m instanceof Error&&this.emit(F.MediaDevicesError,m),this.pendingPublishing.delete(e),m}try{const m=[];for(const y of h)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Me(y))),m.push(this.publishTrack(y,o));[d]=yield Promise.all(m)}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m}finally{this.pendingPublishing.delete(e)}}else if(!(d!=null&&d.track)&&this.pendingPublishing.has(e)&&(d=yield this.waitForPendingPublicationOfSource(e),d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),d&&d.track)if(e===j.Source.ScreenShare){d=yield this.unpublishTrack(d.track);const h=this.getTrackPublication(j.Source.ScreenShareAudio);h&&h.track&&this.unpublishTrack(h.track)}else yield d.mute();return d})}enableCameraAndMicrophone(){return R(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(j.Source.Camera)||this.pendingPublishing.has(j.Source.Microphone))){this.pendingPublishing.add(j.Source.Camera),this.pendingPublishing.add(j.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(n=>this.publishTrack(n)))}finally{this.pendingPublishing.delete(j.Source.Camera),this.pendingPublishing.delete(j.Source.Microphone)}}})}createTracks(e){return R(this,void 0,void 0,function*(){var n,r;e??(e={});const o=Hy(e,(n=this.roomOptions)===null||n===void 0?void 0:n.audioCaptureDefaults,(r=this.roomOptions)===null||r===void 0?void 0:r.videoCaptureDefaults),{audioProcessor:l,videoProcessor:u,optionsWithoutProcessor:d}=Ff(o),h=Qc(d);let m;try{m=yield navigator.mediaDevices.getUserMedia(h)}catch(g){throw g instanceof Error&&(h.audio&&(this.microphoneError=g),h.video&&(this.cameraError=g)),g}return h.audio&&(this.microphoneError=void 0,this.emit(F.AudioStreamAcquired)),h.video&&(this.cameraError=void 0),Promise.all(m.getTracks().map(g=>R(this,void 0,void 0,function*(){const y=g.kind==="audio";let b;const T=y?h.audio:h.video;typeof T!="boolean"&&(b=T);const C=Xy(g,b,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone,C.setAudioContext(this.audioContext)),C.mediaStream=m,ti(C)&&l?yield C.setProcessor(l):Er(C)&&u&&(yield C.setProcessor(u)),C})))})}createScreenTracks(e){return R(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Vf("getDisplayMedia not supported");e.resolution===void 0&&!HE()&&(e.resolution=Hf.h1080fps30.resolution);const n=n1(e),r=yield navigator.mediaDevices.getDisplayMedia(n),o=r.getVideoTracks();if(o.length===0)throw new $n("no video track found");const l=new Lc(o[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=j.Source.ScreenShare,e.contentHint&&(l.mediaStreamTrack.contentHint=e.contentHint);const u=[l];if(r.getAudioTracks().length>0){this.emit(F.AudioStreamAcquired);const d=new Uc(r.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});d.source=j.Source.ScreenShareAudio,u.push(d)}return u})}publishTrack(e,n){return R(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,n)})}publishOrRepublishTrack(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g;ha(r)&&r.setAudioContext(l.audioContext),yield(d=l.reconnectFuture)===null||d===void 0?void 0:d.promise,l.republishPromise&&!u&&(yield l.republishPromise),hr(r)&&l.pendingPublishPromises.has(r)&&(yield l.pendingPublishPromises.get(r));let y;if(r instanceof MediaStreamTrack)y=r.getConstraints();else{y=r.constraints;let O;switch(r.source){case j.Source.Microphone:O="audioinput";break;case j.Source.Camera:O="videoinput"}O&&l.activeDeviceMap.has(O)&&(y=Object.assign(Object.assign({},y),{deviceId:l.activeDeviceMap.get(O)}))}if(r instanceof MediaStreamTrack)switch(r.kind){case"audio":r=new Uc(r,y,!0,l.audioContext,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;case"video":r=new Lc(r,y,!0,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;default:throw new $n("unsupported MediaStreamTrack kind ".concat(r.kind))}else r.updateLoggerOptions({loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});let b;if(l.trackPublications.forEach(O=>{O.track&&O.track===r&&(b=O)}),b)return l.log.warn("track has already been published, skipping",Object.assign(Object.assign({},l.logContext),Me(b))),b;const T="channelCount"in r.mediaStreamTrack.getSettings()&&r.mediaStreamTrack.getSettings().channelCount===2||r.mediaStreamTrack.getConstraints().channelCount===2,C=(h=o==null?void 0:o.forceStereo)!==null&&h!==void 0?h:T;C&&(o||(o={}),o.dtx===void 0&&l.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},l.logContext),Me(r))),o.red===void 0&&l.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(m=o.dtx)!==null&&m!==void 0||(o.dtx=!1),(g=o.red)!==null&&g!==void 0||(o.red=!1));const k=Object.assign(Object.assign({},l.roomOptions.publishDefaults),o);!GE()&&l.roomOptions.e2ee&&(l.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},l.logContext)),k.simulcast=!1),k.source&&(r.source=k.source);const w=l.publish(r,k,C);l.pendingPublishPromises.set(r,w);try{return yield w}catch(O){throw O}finally{l.pendingPublishPromises.delete(r)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Me(e))),!1;const{canPublish:n,canPublishSources:r}=this.permissions;return n&&(r.length===0||r.map(o=>s1(o)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Me(e))),!1)}publish(e,n,r){return R(this,void 0,void 0,function*(){var o,l,u,d,h,m,g,y,b,T;if(!this.hasPermissionsToPublish(e))throw new wE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(_=>hr(e)&&_.source===e.source)&&e.source!==j.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),Me(e))),n.stopMicTrackOnMute&&ti(e)&&(e.stopOnMute=!0),e.source===j.Source.ScreenShare&&br()&&(n.simulcast=!1),n.videoCodec==="av1"&&!zE()&&(n.videoCodec=void 0),n.videoCodec==="vp9"&&!qE()&&(n.videoCodec=void 0),n.videoCodec===void 0&&(n.videoCodec=gf),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(_=>n.videoCodec===Dc(_.mime))||(n.videoCodec=Dc(this.enabledPublishVideoCodecs[0].mime)));const k=n.videoCodec;e.on(W.Muted,this.onTrackMuted),e.on(W.Unmuted,this.onTrackUnmuted),e.on(W.Ended,this.handleTrackEnded),e.on(W.UpstreamPaused,this.onTrackUpstreamPaused),e.on(W.UpstreamResumed,this.onTrackUpstreamResumed),e.on(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const w=new Jd({cid:e.mediaStreamTrack.id,name:n.name,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),disableDtx:!(!((o=n.dtx)!==null&&o!==void 0)||o),encryption:this.encryptionType,stereo:r,disableRed:this.isE2EEEnabled||!(!((l=n.red)!==null&&l!==void 0)||l),stream:n==null?void 0:n.stream,backupCodecPolicy:n==null?void 0:n.backupCodecPolicy});let O;if(e.kind===j.Kind.Video){let _={width:0,height:0};try{_=yield e.waitForDimensions()}catch{const $=(d=(u=this.roomOptions.videoCaptureDefaults)===null||u===void 0?void 0:u.resolution)!==null&&d!==void 0?d:Hs.h720.resolution;_={width:$.width,height:$.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{dims:_}))}w.width=_.width,w.height=_.height,Ai(e)&&(Is(k)&&(e.source===j.Source.ScreenShare&&(n.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),Me(e))))),n.scalabilityMode=(h=n.scalabilityMode)!==null&&h!==void 0?h:"L3T3_KEY"),w.simulcastCodecs=[new Zd({codec:k,cid:e.mediaStreamTrack.id})],n.backupCodec===!0&&(n.backupCodec={codec:gf}),n.backupCodec&&k!==n.backupCodec.codec&&w.encryption===Vt.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new Zd({codec:n.backupCodec.codec,cid:""})))),O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n),w.layers=Jv(w.width,w.height,O,Is(n.videoCodec))}else e.kind===j.Kind.Audio&&(O=[{maxBitrate:(m=n.audioPreset)===null||m===void 0?void 0:m.maxBitrate,priority:(y=(g=n.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&y!==void 0?y:"high",networkPriority:(T=(b=n.audioPreset)===null||b===void 0?void 0:b.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const V=()=>R(this,void 0,void 0,function*(){var _,H,$;if(!this.engine.pcManager)throw new ut("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,n,O),Ai(e)&&((_=n.degradationPreference)!==null&&_!==void 0||(n.degradationPreference=M1(e)),e.setDegradationPreference(n.degradationPreference)),O)if(br()&&e.kind===j.Kind.Audio){let ie;for(const X of this.engine.pcManager.publisher.getTransceivers())if(X.sender===e.sender){ie=X;break}ie&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:ie,codec:"opus",maxbr:!((H=O[0])===null||H===void 0)&&H.maxBitrate?O[0].maxBitrate/1e3:0})}else e.codec&&Is(e.codec)&&(!(($=O[0])===null||$===void 0)&&$.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:O[0].maxBitrate/1e3});yield this.engine.negotiate()});let Q;if(this.enabledPublishVideoCodecs.length>0)Q=(yield Promise.all([this.engine.addTrack(w),V()]))[0];else{Q=yield this.engine.addTrack(w);let _;if(Q.codecs.forEach(H=>{_===void 0&&(_=H.mimeType)}),_&&e.kind===j.Kind.Video){const H=Dc(_);H!==k&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{codec:H})),n.videoCodec=H,O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n))}yield V()}const U=new Tf(e.kind,Q,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return U.options=n,e.sid=Q.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:O,trackInfo:Q})),Ai(e)?e.startMonitor(this.engine.client):ha(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(F.LocalTrackPublished,U),U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,n,r){return R(this,void 0,void 0,function*(){var o;if(this.encryptionType!==Vt.NONE)return;let l;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(l=T)}),!l)throw new $n("track is not published");if(!Ai(e))throw new $n("track is not a video track");const u=Object.assign(Object.assign({},(o=this.roomOptions)===null||o===void 0?void 0:o.publishDefaults),r),d=O1(e,n,u);if(!d){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Me(e)));return}const h=e.addSimulcastTrack(n,d);if(!h)return;const m=new Jd({cid:h.mediaStreamTrack.id,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:u.videoCodec,cid:h.mediaStreamTrack.id}]});if(m.layers=Jv(m.width,m.height,d),!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const g=()=>R(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,h,u,d),yield this.engine.negotiate()}),b=(yield Promise.all([this.engine.addTrack(m),g()]))[0];this.log.debug("published ".concat(n," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:d,trackInfo:b}))})}unpublishTrack(e,n){return R(this,void 0,void 0,function*(){var r,o;if(hr(e)){const m=this.pendingPublishPromises.get(e);m&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Me(e))),yield m)}const l=this.getPublicationForTrack(e),u=l?Me(l):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),u)),!l||!l.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),u));return}e=l.track,e.off(W.Muted,this.onTrackMuted),e.off(W.Unmuted,this.onTrackUnmuted),e.off(W.Ended,this.handleTrackEnded),e.off(W.UpstreamPaused,this.onTrackUpstreamPaused),e.off(W.UpstreamResumed,this.onTrackUpstreamResumed),e.off(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),n===void 0&&(n=(o=(r=this.roomOptions)===null||r===void 0?void 0:r.stopLocalTrackOnUnpublish)!==null&&o!==void 0?o:!0),n?e.stop():e.stopMonitor();let d=!1;const h=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentStatethis.unpublishTrack(r)))).filter(r=>!!r)})}republishAllTracks(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){r.republishPromise&&(yield r.republishPromise),r.republishPromise=new Promise((l,u)=>R(r,void 0,void 0,function*(){try{const d=[];this.trackPublications.forEach(h=>{h.track&&(n&&(h.options=Object.assign(Object.assign({},h.options),n)),d.push(h))}),yield Promise.all(d.map(h=>R(this,void 0,void 0,function*(){const m=h.track;yield this.unpublishTrack(m,!1),o&&!m.isMuted&&m.source!==j.Source.ScreenShare&&m.source!==j.Source.ScreenShareAudio&&(ha(m)||Ai(m))&&!m.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:h.trackSid})),yield m.restartTrack()),yield this.publishOrRepublishTrack(m,h.options,!0)}))),l()}catch(d){u(d)}finally{this.republishPromise=void 0}})),yield r.republishPromise}()})}publishData(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const l=o.reliable?_e.RELIABLE:_e.LOSSY,u=o.destinationIdentities,d=o.topic,h=new Mt({kind:l,value:{case:"user",value:new j0({participantIdentity:r.identity,payload:n,destinationIdentities:u,topic:d})}});yield r.engine.sendDataPacket(h,l)}()})}publishDtmf(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({kind:_e.RELIABLE,value:{case:"sipDtmf",value:new B0({code:e,digit:n})}});yield this.engine.sendDataPacket(r,_e.RELIABLE)})}sendChatMessage(e,n){return R(this,void 0,void 0,function*(){const r={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:n==null?void 0:n.attachments},o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}editChatMessage(e,n){return R(this,void 0,void 0,function*(){const r=Object.assign(Object.assign({},n),{message:e,editTimestamp:Date.now()}),o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp),editTimestamp:Ge.parse(r.editTimestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}sendText(e,n){return R(this,void 0,void 0,function*(){var r;const o=crypto.randomUUID(),u=new TextEncoder().encode(e).byteLength,d=(r=n==null?void 0:n.attachments)===null||r===void 0?void 0:r.map(()=>crypto.randomUUID()),h=new Array(d?d.length+1:1).fill(0),m=(y,b)=>{var T;h[b]=y;const C=h.reduce((k,w)=>k+w,0);(T=n==null?void 0:n.onProgress)===null||T===void 0||T.call(n,C)},g=yield this.streamText({streamId:o,totalSize:u,destinationIdentities:n==null?void 0:n.destinationIdentities,topic:n==null?void 0:n.topic,attachedStreamIds:d,attributes:n==null?void 0:n.attributes});return yield g.write(e),m(1,0),yield g.close(),n!=null&&n.attachments&&d&&(yield Promise.all(n.attachments.map((y,b)=>R(this,void 0,void 0,function*(){return this._sendFile(d[b],y,{topic:n.topic,mimeType:y.type,onProgress:T=>{m(T,b+1)}})})))),g.info})}streamText(e){return R(this,void 0,void 0,function*(){var n,r;const o=(n=e==null?void 0:e.streamId)!==null&&n!==void 0?n:crypto.randomUUID(),l={id:o,mimeType:"text/plain",timestamp:Date.now(),topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},u=new Yd({streamId:o,mimeType:l.mimeType,topic:l.topic,timestamp:fa(l.timestamp),totalLength:fa(e==null?void 0:e.totalSize),attributes:l.attributes,contentHeader:{case:"textHeader",value:new X0({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Fd.UPDATE:Fd.CREATE})}}),d=e==null?void 0:e.destinationIdentities,h=new Mt({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,_e.RELIABLE);let m=0;const g=this,y=new WritableStream({write(C){return R(this,void 0,void 0,function*(){for(const k of t1(C,hc)){yield g.engine.waitForBufferStatusLow(_e.RELIABLE);const w=new Kd({content:k,streamId:o,chunkIndex:fa(m)}),O=new Mt({destinationIdentities:d,value:{case:"streamChunk",value:w}});yield g.engine.sendDataPacket(O,_e.RELIABLE),m+=1}})},close(){return R(this,void 0,void 0,function*(){const C=new Qd({streamId:o}),k=new Mt({destinationIdentities:d,value:{case:"streamTrailer",value:C}});yield g.engine.sendDataPacket(k,_e.RELIABLE)})},abort(C){console.log("Sink error:",C)}});let b=()=>R(this,void 0,void 0,function*(){yield T.close()});g.engine.once(ne.Closing,b);const T=new q1(y,l,()=>this.engine.off(ne.Closing,b));return T})}sendFile(e,n){return R(this,void 0,void 0,function*(){const r=crypto.randomUUID();return yield this._sendFile(r,e,n),{id:r}})}_sendFile(e,n,r){return R(this,void 0,void 0,function*(){var o,l;const u=n.size,d=new Yd({totalLength:fa(u),mimeType:(o=r==null?void 0:r.mimeType)!==null&&o!==void 0?o:n.type,streamId:e,topic:r==null?void 0:r.topic,encryptionType:r==null?void 0:r.encryptionType,timestamp:fa(Date.now()),contentHeader:{case:"byteHeader",value:new Z0({name:n.name})}}),h=r==null?void 0:r.destinationIdentities,m=new Mt({destinationIdentities:h,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(m,_e.RELIABLE);function g(C){return new Promise(k=>{const w=new FileReader;w.onload=()=>{k(new Uint8Array(w.result))},w.readAsArrayBuffer(C)})}const y=Math.ceil(u/hc);for(let C=0;CR(r,void 0,void 0,function*(){var y,b,T,C;if(Zf(u)>Ky){g(et.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((b=(y=this.engine.latestJoinResponse)===null||y===void 0?void 0:y.serverInfo)===null||b===void 0)&&b.version&&Sr((C=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||C===void 0?void 0:C.version,"1.8.0")<0){g(et.builtIn("UNSUPPORTED_SERVER"));return}const k=crypto.randomUUID();yield this.publishRpcRequest(o,k,l,u,d-2e3);const w=setTimeout(()=>{this.pendingAcks.delete(k),g(et.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(k),clearTimeout(O)},2e3);this.pendingAcks.set(k,{resolve:()=>{clearTimeout(w)},participantIdentity:o});const O=setTimeout(()=>{this.pendingResponses.delete(k),g(et.builtIn("RESPONSE_TIMEOUT"))},d);this.pendingResponses.set(k,{resolve:(V,Q)=>{clearTimeout(O),this.pendingAcks.has(k)&&(console.warn("RPC response received before ack",k),this.pendingAcks.delete(k),clearTimeout(w)),Q?g(Q):m(V??"")},participantIdentity:o})}))}()})}registerRpcMethod(e,n){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=n,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const n=this.pendingAcks.get(e);n?(n.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,n,r){const o=this.pendingResponses.get(e);o?(o.resolve(n,r),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcRequest",value:new z0({id:n,method:r,payload:o,responseTimeoutMs:l,version:1})}});yield this.engine.sendDataPacket(u,_e.RELIABLE)})}handleParticipantDisconnected(e){for(const[n,{participantIdentity:r}]of this.pendingAcks)r===e&&this.pendingAcks.delete(n);for(const[n,{participantIdentity:r,resolve:o}]of this.pendingResponses)r===e&&(o(null,et.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(n))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(n=>n.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return e.sid!==this.sid||!super.updateInfo(e)?!1:(e.tracks.forEach(n=>{var r,o;const l=this.trackPublications.get(n.sid);if(l){const u=l.isMuted||((o=(r=l.track)===null||r===void 0?void 0:r.isUpstreamPaused)!==null&&o!==void 0?o:!1);u!==n.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Me(l)),{mutedOnServer:u})),this.engine.client.sendMuteTrack(n.sid,u))}}),!0)}getPublicationForTrack(e){let n;return this.trackPublications.forEach(r=>{const o=r.track;o&&(e instanceof MediaStreamTrack?(ha(o)||Ai(o))&&o.mediaStreamTrack===e&&(n=r):e===o&&(n=r))}),n}waitForPendingPublicationOfSource(e){return R(this,void 0,void 0,function*(){const r=Date.now();for(;Date.now(){let[u]=l;return u.source===e});if(o)return o[1];yield Nt(20)}})}}class nb extends Pi{constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=rn.HIGH,this.handleEnded=l=>{this.setTrack(void 0),this.emit(W.Ended,l)},this.handleVisibilityChange=l=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(l),this.logContext),this.disabled=!l,this.emitTrackUpdate()},this.handleVideoDimensionsChange=l=>{this.log.debug("adaptivestream video dimensions ".concat(l.width,"x").concat(l.height),this.logContext),this.videoDimensions=l,this.emitTrackUpdate()},this.subscribed=r,this.updateInfo(n)}setSubscribed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const o=new Fc({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new G0({participantSid:"",trackSids:[this.trackSid]})]});this.emit(W.UpdateSubscription,o),this.emitSubscriptionUpdateIfChanged(n),this.emitPermissionUpdateIfChanged(r)}get subscriptionStatus(){return this.subscribed===!1?Pi.SubscriptionStatus.Unsubscribed:super.isSubscribed?Pi.SubscriptionStatus.Subscribed:Pi.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Pi.PermissionStatus.Allowed:Pi.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var n,r;this.isManualOperationAllowed()&&(((n=this.videoDimensions)===null||n===void 0?void 0:n.width)===e.width&&((r=this.videoDimensions)===null||r===void 0?void 0:r.height)===e.height||(Ad(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ad(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const n=this.subscriptionStatus,r=this.permissionStatus,o=this.track;o!==e&&(o&&(o.off(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),o.off(W.VisibilityChanged,this.handleVisibilityChange),o.off(W.Ended,this.handleEnded),o.detach(),o.stopMonitor(),this.emit(W.Unsubscribed,o)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(W.VisibilityChanged,this.handleVisibilityChange),e.on(W.Ended,this.handleEnded),this.emit(W.Subscribed,e)),this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n))}setAllowed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n)}setSubscriptionError(e){this.emit(W.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const n=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):n!==e.muted&&this.emit(e.muted?W.Muted:W.Unmuted)}emitSubscriptionUpdateIfChanged(e){const n=this.subscriptionStatus;e!==n&&this.emit(W.SubscriptionStatusChanged,n,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(W.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===j.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ad(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new J0({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=rn.HIGH,this.emit(W.UpdateSettings,e)}}class Ic extends tb{static fromParticipantInfo(e,n,r){return new Ic(e,n.sid,n.identity,n.name,n.metadata,n.attributes,r,n.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,n,r,o,l,u,d){let h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qs.STANDARD;super(n,r||"",o,l,u,d,h),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(W.UpdateSettings,n=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),Me(e))),this.signalClient.sendUpdateTrackSettings(n)}),e.on(W.UpdateSubscription,n=>{n.participantTracks.forEach(r=>{r.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(n)}),e.on(W.SubscriptionPermissionChanged,n=>{this.emit(F.TrackSubscriptionPermissionChanged,e,n)}),e.on(W.SubscriptionStatusChanged,n=>{this.emit(F.TrackSubscriptionStatusChanged,e,n)}),e.on(W.Subscribed,n=>{this.emit(F.TrackSubscribed,n,e)}),e.on(W.Unsubscribed,n=>{this.emit(F.TrackUnsubscribed,n,e)}),e.on(W.SubscriptionFailed,n=>{this.emit(F.TrackSubscriptionFailed,e.trackSid,n)})}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setVolume(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.Source.Microphone;this.volumeMap.set(n,e);const r=this.getTrackPublication(n);r&&r.track&&r.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:j.Source.Microphone;const n=this.getTrackPublication(e);return n&&n.track?n.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,n,r,o,l,u){let d=this.getTrackPublicationBySid(n);if(d||n.startsWith("TR")||this.trackPublications.forEach(g=>{!d&&e.kind===g.kind.toString()&&(d=g)}),!d){if(u===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:n})),this.emit(F.TrackSubscriptionFailed,n);return}u===void 0&&(u=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,n,r,o,l,u-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Me(d))),this.emit(F.TrackSubscriptionFailed,n);return}const h=e.kind==="video";let m;return h?m=new V1(e,n,o,l):m=new eb(e,n,o,this.audioContext,this.audioOutput),m.source=d.source,m.isMuted=d.isMuted,m.setMediaStream(r),m.start(),d.setTrack(m),this.volumeMap.has(d.source)&&mf(m)&&ti(m)&&m.setVolume(this.volumeMap.get(d.source)),d}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const n=new Map,r=new Map;return e.tracks.forEach(o=>{var l,u;let d=this.getTrackPublicationBySid(o.sid);if(d)d.updateInfo(o);else{const h=j.kindFromProto(o.type);if(!h)return;d=new nb(h,o,(l=this.signalClient.connectOptions)===null||l===void 0?void 0:l.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(u=this.loggerOptions)===null||u===void 0?void 0:u.loggerName}),d.updateInfo(o),r.set(o.sid,d);const m=Array.from(this.trackPublications.values()).find(g=>g.source===(d==null?void 0:d.source));m&&d.source!==j.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(d.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Me(m),newTrack:Me(d)})),this.addTrackPublication(d)}n.set(o.sid,d)}),this.trackPublications.forEach(o=>{n.has(o.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Me(o))),this.unpublishTrack(o.trackSid,!0))}),r.forEach(o=>{this.emit(F.TrackPublished,o)}),!0}unpublishTrack(e,n){const r=this.trackPublications.get(e);if(!r)return;const{track:o}=r;switch(o&&(o.stop(),r.setTrack(void 0)),this.trackPublications.delete(e),r.kind){case j.Kind.Audio:this.audioTrackPublications.delete(e);break;case j.Kind.Video:this.videoTrackPublications.delete(e);break}n&&this.emit(F.TrackUnpublished,r)}setAudioOutput(e){return R(this,void 0,void 0,function*(){this.audioOutput=e;const n=[];this.audioTrackPublications.forEach(r=>{var o;ti(r.track)&&mf(r.track)&&n.push(r.track.setSinkId((o=e.deviceId)!==null&&o!==void 0?o:"default"))}),yield Promise.all(n)})}emit(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;oR(this,void 0,void 0,function*(){var m;if(!VE())throw An()?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 g=yield this.disconnectLock.lock();if(this.state===Te.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),g(),Promise.resolve();if(this.connectFuture)return g(),this.connectFuture.promise;this.setAndEmitConnectionState(Te.Connecting),((m=this.regionUrlProvider)===null||m===void 0?void 0:m.getServerUrl().toString())!==u&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),hf(new URL(u))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bf(u,d):this.regionUrlProvider.updateToken(d),this.regionUrlProvider.fetchRegionSettings().then(T=>{var C;(C=this.regionUrlProvider)===null||C===void 0||C.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const y=(T,C,k)=>R(this,void 0,void 0,function*(){var w,O;this.abortController&&this.abortController.abort();const V=new AbortController;this.abortController=V,g==null||g();try{yield this.attemptConnection(k??u,d,h,V),this.abortController=void 0,T()}catch(Q){if(this.regionUrlProvider&&Q instanceof Ie&&Q.reason!==Re.Cancelled&&Q.reason!==Re.NotAllowed){let U=null;try{U=yield this.regionUrlProvider.getNextBestRegionUrl((w=this.abortController)===null||w===void 0?void 0:w.signal)}catch(_){if(_ instanceof Ie&&(_.status===401||_.reason===Re.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),C(_);return}}U&&!(!((O=this.abortController)===null||O===void 0)&&O.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(Q.message,". Retrying with another region: ").concat(U),this.logContext),this.recreateEngine(),yield y(T,C,U)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Iv(Q)),C(Q))}else{let U=pn.UNKNOWN_REASON;Q instanceof Ie&&(U=Iv(Q)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,U),C(Q)}}}),b=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Vy((T,C)=>{y(T,C,b)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(u,d,h,m,g,y)=>R(this,void 0,void 0,function*(){var b,T,C;const k=yield h.join(u,d,{autoSubscribe:m.autoSubscribe,adaptiveStream:typeof g.adaptiveStream=="object"?!0:g.adaptiveStream,maxRetries:m.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:m.websocketTimeout},y.signal);let w=k.serverInfo;if(w||(w={version:k.serverVersion,region:k.serverRegion}),this.serverInfo=w,this.log.debug("connected to Livekit Server ".concat(Object.entries(w).map(O=>{let[V,Q]=O;return"".concat(V,": ").concat(Q)}).join(", ")),{room:(b=k.room)===null||b===void 0?void 0:b.name,roomSid:(T=k.room)===null||T===void 0?void 0:T.sid,identity:(C=k.participant)===null||C===void 0?void 0:C.identity}),!w.version)throw new _E("unknown server version");return w.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),g.dynacast=!1),k}),this.applyJoinResponse=u=>{const d=u.participant;if(this.localParticipant.sid=d.sid,this.localParticipant.identity=d.identity,this.localParticipant.setEnabledPublishCodecs(u.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(u.sifTrailer)}catch(h){this.log.error(h instanceof Error?h.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:h}))}this.handleParticipantUpdates([d,...u.otherParticipants]),u.room&&this.handleRoomUpdate(u.room)},this.attemptConnection=(u,d,h,m)=>R(this,void 0,void 0,function*(){var g,y;this.state===Te.Reconnecting||this.isResuming||!((g=this.engine)===null||g===void 0)&&g.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((y=this.regionUrlProvider)===null||y===void 0)&&y.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Xf),h),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const b=yield this.connectSignal(u,d,this.engine,this.connOptions,this.options,m);this.applyJoinResponse(b),this.setupLocalParticipantEvents(),this.emit(B.SignalConnected)}catch(b){yield this.engine.close(),this.recreateEngine();const T=new Ie("could not establish signal connection",Re.ServerUnreachable);throw b instanceof Error&&(T.message="".concat(T.message,": ").concat(b.message)),b instanceof Ie&&(T.reason=b.reason,T.status=b.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:b})),T}if(m.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Ie("Connection attempt aborted",Re.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,m)}catch(b){throw yield this.engine.close(),this.recreateEngine(),b}xt()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xt()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Te.Connected),this.emit(B.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var u=arguments.length,d=new Array(u),h=0;h0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var y,b,T,C;const k=yield m.disconnectLock.lock();try{if(m.state===Te.Disconnected){m.log.debug("already disconnected",m.logContext);return}m.log.info("disconnect from room",Object.assign({},m.logContext)),(m.state===Te.Connecting||m.state===Te.Reconnecting||m.isResuming)&&(m.log.warn("abort connection attempt",m.logContext),(y=m.abortController)===null||y===void 0||y.abort(),(T=(b=m.connectFuture)===null||b===void 0?void 0:b.reject)===null||T===void 0||T.call(b,new Ie("Client initiated disconnect",Re.Cancelled)),m.connectFuture=void 0),!((C=m.engine)===null||C===void 0)&&C.client.isDisconnected||(yield m.engine.client.sendLeave()),m.engine&&(yield m.engine.close()),m.handleDisconnect(g,pn.CLIENT_INITIATED),m.engine=void 0}finally{k()}}()})},this.onPageLeave=()=>R(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>R(this,void 0,void 0,function*(){const u=[],d=Dn();if(d&&d.os==="iOS"){const h="livekit-dummy-audio-el";let m=document.getElementById(h);if(!m){m=document.createElement("audio"),m.id=h,m.autoplay=!0,m.hidden=!0;const g=Dd();g.enabled=!0;const y=new MediaStream([g]);m.srcObject=y,document.addEventListener("visibilitychange",()=>{m&&(m.srcObject=document.hidden?null:y,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(m),this.once(B.Disconnected,()=>{m==null||m.remove(),m=null})}u.push(m)}this.remoteParticipants.forEach(h=>{h.audioTrackPublications.forEach(m=>{m.track&&m.track.attachedElements.forEach(g=>{u.push(g)})})});try{yield Promise.all([this.acquireAudioContext(),...u.map(h=>(h.muted=!1,h.play()))]),this.handleAudioPlaybackStarted()}catch(h){throw this.handleAudioPlaybackFailed(h),h}}),this.startVideo=()=>R(this,void 0,void 0,function*(){const u=[];for(const d of this.remoteParticipants.values())d.videoTrackPublications.forEach(h=>{var m;(m=h.track)===null||m===void 0||m.attachedElements.forEach(g=>{u.includes(g)||u.push(g)})});yield Promise.all(u.map(d=>d.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(d=>{d.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const u of this.remoteParticipants.values())this.handleParticipantDisconnected(u.identity,u);this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)},this.handleSignalRestarted=u=>R(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(u.serverRegion),Object.assign(Object.assign({},this.logContext),{region:u.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(u);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(d){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:d}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:u.serverRegion}))}catch{return}this.setAndEmitConnectionState(Te.Connected),this.emit(B.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=u=>{u.forEach(d=>{var h;if(d.identity===this.localParticipant.identity){this.localParticipant.updateInfo(d);return}d.identity===""&&(d.identity=(h=this.sidToIdentity.get(d.sid))!==null&&h!==void 0?h:"");let m=this.remoteParticipants.get(d.identity);d.state===Hd.DISCONNECTED?this.handleParticipantDisconnected(d.identity,m):m=this.getOrCreateParticipant(d.identity,d)})},this.handleActiveSpeakersUpdate=u=>{const d=[],h={};u.forEach(m=>{if(h[m.sid]=!0,m.sid===this.localParticipant.sid)this.localParticipant.audioLevel=m.level,this.localParticipant.setIsSpeaking(!0),d.push(this.localParticipant);else{const g=this.getRemoteParticipantBySid(m.sid);g&&(g.audioLevel=m.level,g.setIsSpeaking(!0),d.push(g))}}),h[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(m=>{h[m.sid]||(m.audioLevel=0,m.setIsSpeaking(!1))}),this.activeSpeakers=d,this.emitWhenConnected(B.ActiveSpeakersChanged,d)},this.handleSpeakersChanged=u=>{const d=new Map;this.activeSpeakers.forEach(m=>{const g=this.remoteParticipants.get(m.identity);g&&g.sid!==m.sid||d.set(m.sid,m)}),u.forEach(m=>{let g=this.getRemoteParticipantBySid(m.sid);m.sid===this.localParticipant.sid&&(g=this.localParticipant),g&&(g.audioLevel=m.level,g.setIsSpeaking(m.active),m.active?d.set(m.sid,g):d.delete(m.sid))});const h=Array.from(d.values());h.sort((m,g)=>g.audioLevel-m.audioLevel),this.activeSpeakers=h,this.emitWhenConnected(B.ActiveSpeakersChanged,h)},this.handleStreamStateUpdate=u=>{u.streamStates.forEach(d=>{const h=this.getRemoteParticipantBySid(d.participantSid);if(!h)return;const m=h.getTrackPublicationBySid(d.trackSid);if(!m||!m.track)return;const g=j.streamStateFromProto(d.state);g!==m.track.streamState&&(m.track.streamState=g,h.emit(F.TrackStreamStateChanged,m,m.track.streamState),this.emitWhenConnected(B.TrackStreamStateChanged,m,m.track.streamState,h))})},this.handleSubscriptionPermissionUpdate=u=>{const d=this.getRemoteParticipantBySid(u.participantSid);if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setAllowed(u.allowed)},this.handleSubscriptionError=u=>{const d=Array.from(this.remoteParticipants.values()).find(m=>m.trackPublications.has(u.trackSid));if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setSubscriptionError(u.err)},this.handleDataPacket=u=>{const d=this.remoteParticipants.get(u.participantIdentity);if(u.value.case==="user")this.handleUserPacket(d,u.value.value,u.kind);else if(u.value.case==="transcription")this.handleTranscription(d,u.value.value);else if(u.value.case==="sipDtmf")this.handleSipDtmf(d,u.value.value);else if(u.value.case==="chatMessage")this.handleChatMessage(d,u.value.value);else if(u.value.case==="metrics")this.handleMetrics(u.value.value,d);else if(u.value.case==="streamHeader")this.handleStreamHeader(u.value.value,u.participantIdentity);else if(u.value.case==="streamChunk")this.handleStreamChunk(u.value.value);else if(u.value.case==="streamTrailer")this.handleStreamTrailer(u.value.value);else if(u.value.case==="rpcRequest"){const h=u.value.value;this.handleIncomingRpcRequest(u.participantIdentity,h.id,h.method,h.payload,h.responseTimeoutMs,h.version)}},this.handleUserPacket=(u,d,h)=>{this.emit(B.DataReceived,d.payload,u,h,d.topic),u==null||u.emit(F.DataReceived,d.payload,h)},this.handleSipDtmf=(u,d)=>{this.emit(B.SipDTMFReceived,d,u),u==null||u.emit(F.SipDTMFReceived,d)},this.bufferedSegments=new Map,this.handleTranscription=(u,d)=>{const h=d.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(d.transcribedParticipantIdentity),m=h==null?void 0:h.trackPublications.get(d.trackId),g=JE(d,this.transcriptionReceivedTimes);m==null||m.emit(W.TranscriptionReceived,g),h==null||h.emit(F.TranscriptionReceived,g,m),this.emit(B.TranscriptionReceived,g,h,m)},this.handleChatMessage=(u,d)=>{const h=WE(d);this.emit(B.ChatMessage,h,u)},this.handleMetrics=(u,d)=>{this.emit(B.MetricsReceived,u,d)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(B.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=u=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:u})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(B.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(B.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(B.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>R(this,void 0,void 0,function*(){var u,d;const h=gt.getInstance().previousDevices,m=yield gt.getInstance().getDevices(void 0,!1),g=Dn();if((g==null?void 0:g.name)==="Chrome"&&g.os!=="iOS")for(let b of m){const T=h.find(C=>C.deviceId===b.deviceId);T&&T.label!==""&&T.kind===b.kind&&T.label!==b.label&&this.getActiveDevice(b.kind)==="default"&&this.emit(B.ActiveDeviceChanged,b.kind,b.deviceId)}const y=["audiooutput","audioinput","videoinput"];for(let b of y){const T=m.filter(k=>k.kind===b),C=this.getActiveDevice(b);if(C===((u=h.filter(k=>k.kind===b)[0])===null||u===void 0?void 0:u.deviceId)&&T.length>0&&((d=T[0])===null||d===void 0?void 0:d.deviceId)!==C){yield this.switchActiveDevice(b,T[0].deviceId);continue}b==="audioinput"&&!Bi()||b==="videoinput"||T.length>0&&!T.find(k=>k.deviceId===this.getActiveDevice(b))&&(yield this.switchActiveDevice(b,T[0].deviceId))}this.emit(B.MediaDevicesChanged)}),this.handleRoomUpdate=u=>{const d=this.roomInfo;this.roomInfo=u,d&&d.metadata!==u.metadata&&this.emitWhenConnected(B.RoomMetadataChanged,u.metadata),(d==null?void 0:d.activeRecording)!==u.activeRecording&&this.emitWhenConnected(B.RecordingStatusChanged,u.activeRecording)},this.handleConnectionQualityUpdate=u=>{u.updates.forEach(d=>{if(d.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(d.quality);return}const h=this.getRemoteParticipantBySid(d.participantSid);h&&h.setConnectionQuality(d.quality)})},this.onLocalParticipantMetadataChanged=u=>{this.emit(B.ParticipantMetadataChanged,u,this.localParticipant)},this.onLocalParticipantNameChanged=u=>{this.emit(B.ParticipantNameChanged,u,this.localParticipant)},this.onLocalAttributesChanged=u=>{this.emit(B.ParticipantAttributesChanged,u,this.localParticipant)},this.onLocalTrackMuted=u=>{this.emit(B.TrackMuted,u,this.localParticipant)},this.onLocalTrackUnmuted=u=>{this.emit(B.TrackUnmuted,u,this.localParticipant)},this.onTrackProcessorUpdate=u=>{var d;(d=u==null?void 0:u.onPublish)===null||d===void 0||d.call(u,this)},this.onLocalTrackPublished=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;(d=u.track)===null||d===void 0||d.on(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.on(W.Restarted,this.onLocalTrackRestarted),(y=(g=(m=u.track)===null||m===void 0?void 0:m.getProcessor())===null||g===void 0?void 0:g.onPublish)===null||y===void 0||y.call(g,this),this.emit(B.LocalTrackPublished,u,this.localParticipant),ha(u.track)&&(yield u.track.checkForSilence())&&this.emit(B.LocalAudioSilenceDetected,u);const T=yield(b=u.track)===null||b===void 0?void 0:b.getDeviceId(!1),C=jv(u.source);C&&T&&T!==this.localParticipant.activeDeviceMap.get(C)&&(this.localParticipant.activeDeviceMap.set(C,T),this.emit(B.ActiveDeviceChanged,C,T))}),this.onLocalTrackUnpublished=u=>{var d,h;(d=u.track)===null||d===void 0||d.off(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.off(W.Restarted,this.onLocalTrackRestarted),this.emit(B.LocalTrackUnpublished,u,this.localParticipant)},this.onLocalTrackRestarted=u=>R(this,void 0,void 0,function*(){const d=yield u.getDeviceId(!1),h=jv(u.source);h&&d&&d!==this.localParticipant.activeDeviceMap.get(h)&&(this.log.debug("local track restarted, setting ".concat(h," ").concat(d," active"),this.logContext),this.localParticipant.activeDeviceMap.set(h,d),this.emit(B.ActiveDeviceChanged,h,d))}),this.onLocalConnectionQualityChanged=u=>{this.emit(B.ConnectionQualityChanged,u,this.localParticipant)},this.onMediaDevicesError=u=>{this.emit(B.MediaDevicesError,u)},this.onLocalParticipantPermissionsChanged=u=>{this.emit(B.ParticipantPermissionsChanged,u,this.localParticipant)},this.onLocalChatMessageSent=u=>{this.emit(B.ChatMessage,u,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},b1),e),this.log=ei((r=this.options.loggerName)!==null&&r!==void 0?r:gn.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Fy),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Yy),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},y1),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new Ht,this.localParticipant=new Y1("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Ii(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Ii(this.options.audioCaptureDefaults.deviceId)),!((o=this.options.audioOutput)===null||o===void 0)&&o.deviceId&&this.switchActiveDevice("audiooutput",Ii(this.options.audioOutput.deviceId)).catch(u=>this.log.warn("Could not set audio output: ".concat(u.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xt()){const u=new AbortController;(l=navigator.mediaDevices)===null||l===void 0||l.addEventListener("devicechange",this.handleDeviceChange,{signal:u.signal}),ni.cleanupRegistry&&ni.cleanupRegistry.register(this,()=>{u.abort()})}}registerTextStreamHandler(e,n){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,n)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,n){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,n)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,n){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,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,n,r,o,l,u){return R(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,n),u!==1){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_VERSION"));return}const d=this.rpcHandlers.get(r);if(!d){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_METHOD"));return}let h=null,m=null;try{const g=yield d({requestId:n,callerIdentity:e,payload:o,responseTimeout:l});Zf(g)>Ky?(h=et.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(r))):m=g}catch(g){g instanceof et?h=g:(console.warn("Uncaught error returned by RPC handler for ".concat(r,". Returning APPLICATION_ERROR instead."),g),h=et.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,n,m,h)})}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new o1(this.options.e2ee),this.e2eeManager.on(Ui.ParticipantEncryptionStatusChanged,(n,r)=>{e1(r)&&(this.isE2EEEnabled=n),this.emit(B.ParticipantEncryptionStatusChanged,n,r)}),this.e2eeManager.on(Ui.EncryptionError,n=>this.emit(B.EncryptionError,n)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&n!==void 0?n:!1}getSid(){return R(this,void 0,void 0,function*(){return this.state===Te.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,n)=>{const r=o=>{o.sid!==""&&(this.engine.off(ne.RoomUpdate,r),e(o.sid))};this.engine.on(ne.RoomUpdate,r),this.once(B.Disconnected,()=>{this.engine.off(ne.RoomUpdate,r),n("Room disconnected before room server id was available")})})})}get name(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&n!==void 0?n:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&n!==void 0?n:0}get numPublishers(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&n!==void 0?n:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new N1(this.options),this.engine.on(ne.ParticipantUpdate,this.handleParticipantUpdates).on(ne.RoomUpdate,this.handleRoomUpdate).on(ne.SpeakersChanged,this.handleSpeakersChanged).on(ne.StreamStateChanged,this.handleStreamStateUpdate).on(ne.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(ne.SubscriptionError,this.handleSubscriptionError).on(ne.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(ne.MediaTrackAdded,(e,n,r)=>{this.onTrackAdded(e,n,r)}).on(ne.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(ne.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(ne.DataPacketReceived,this.handleDataPacket).on(ne.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Te.SignalReconnecting)&&this.emit(B.SignalReconnecting)}).on(ne.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Te.Connected)&&this.emit(B.Reconnected)}).on(ne.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Te.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(ne.Restarting,this.handleRestarting).on(ne.SignalRestarted,this.handleSignalRestarted).on(ne.Offline,()=>{this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)}).on(ne.DCBufferStatusChanged,(e,n)=>{this.emit(B.DCBufferStatusChanged,e,n)}).on(ne.LocalTrackSubscribed,e=>{const n=this.localParticipant.getTrackPublications().find(r=>{let{trackSid:o}=r;return o===e});if(!n){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(F.LocalTrackSubscribed,n),this.emitWhenConnected(B.LocalTrackSubscribed,n,this.localParticipant)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gt.getInstance().getDevices(e,n)}prepareConnection(e,n){return R(this,void 0,void 0,function*(){if(this.state===Te.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(hf(new URL(e))&&n){this.regionUrlProvider=new bf(e,n);const r=yield this.regionUrlProvider.getNextBestRegionUrl();r&&this.state===Te.Disconnected&&(this.regionUrl=r,yield fetch(Lv(r),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(r),this.logContext))}else yield fetch(Lv(e),{method:"HEAD"})}catch(r){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:r}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,n){return R(this,void 0,void 0,function*(){let r=()=>{},o;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":o=new _n({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":o=new _n({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":o=new _n({scenario:{case:"serverLeave",value:!0}});break;case"migration":o=new _n({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":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({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":o=new _n({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),r=()=>R(this,void 0,void 0,function*(){const l=this.engine.client.onLeave;l&&l(new Yc({reason:pn.CLIENT_INITIATED,action:ur.RECONNECT}))});break;case"subscriber-bandwidth":if(n===void 0||typeof n!="number")throw new Error("subscriber-bandwidth requires a number as argument");o=new _n({scenario:{case:"subscriberBandwidth",value:fa(n)}});break;case"leave-full-reconnect":o=new _n({scenario:{case:"leaveRequestFullReconnect",value:!0}})}o&&(yield this.engine.client.sendSimulateScenario(o),yield r())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g,y,b,T,C;let k=!0,w=!1;const O=u?{exact:o}:o;if(r==="audioinput"){w=l.localParticipant.audioTrackPublications.size===0;const V=(d=l.getActiveDevice(r))!==null&&d!==void 0?d:l.options.audioCaptureDefaults.deviceId;l.options.audioCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.audioTrackPublications.values()).filter(U=>U.source===j.Source.Microphone);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.audioTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.audioCaptureDefaults.deviceId=V,U}}else if(r==="videoinput"){w=l.localParticipant.videoTrackPublications.size===0;const V=(h=l.getActiveDevice(r))!==null&&h!==void 0?h:l.options.videoCaptureDefaults.deviceId;l.options.videoCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.videoTrackPublications.values()).filter(U=>U.source===j.Source.Camera);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.videoTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.videoCaptureDefaults.deviceId=V,U}}else if(r==="audiooutput"){if(!ff()&&!l.options.webAudioMix||l.options.webAudioMix&&l.audioContext&&!("setSinkId"in l.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");l.options.webAudioMix&&(o=(m=yield gt.getInstance().normalizeDeviceId("audiooutput",o))!==null&&m!==void 0?m:""),(g=(C=l.options).audioOutput)!==null&&g!==void 0||(C.audioOutput={});const V=(y=l.getActiveDevice(r))!==null&&y!==void 0?y:l.options.audioOutput.deviceId;l.options.audioOutput.deviceId=o;try{l.options.webAudioMix&&((b=l.audioContext)===null||b===void 0||b.setSinkId(o)),yield Promise.all(Array.from(l.remoteParticipants.values()).map(Q=>Q.setAudioOutput({deviceId:o})))}catch(Q){throw l.options.audioOutput.deviceId=V,Q}}return(w||r==="audiooutput")&&(l.localParticipant.activeDeviceMap.set(r,r==="audiooutput"&&((T=l.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||o),l.emit(B.ActiveDeviceChanged,r,o)),k}()})}setupLocalParticipantEvents(){this.localParticipant.on(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(F.AttributesChanged,this.onLocalAttributesChanged).on(F.TrackMuted,this.onLocalTrackMuted).on(F.TrackUnmuted,this.onLocalTrackUnmuted).on(F.LocalTrackPublished,this.onLocalTrackPublished).on(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(F.MediaDevicesError,this.onMediaDevicesError).on(F.AudioStreamAcquired,this.startAudio).on(F.ChatMessage,this.onLocalChatMessageSent).on(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,n,r){if(this.state===Te.Connecting||this.state===Te.Reconnecting){const g=()=>{this.onTrackAdded(e,n,r),y()},y=()=>{this.off(B.Reconnected,g),this.off(B.Connected,g),this.off(B.Disconnected,y)};this.once(B.Reconnected,g),this.once(B.Connected,g),this.once(B.Disconnected,y);return}if(this.state===Te.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}const o=BE(n.id),l=o[0];let u=o[1],d=e.id;if(u&&u.startsWith("TR")&&(d=u),l===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const h=Array.from(this.remoteParticipants.values()).find(g=>g.sid===l);if(!h){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(l),this.logContext);return}let m;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?m=this.options.adaptiveStream:m={}),h.addSubscribedMediaTrack(e,d,n,r,m)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1?arguments[1]:void 0;var r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Te.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(o=>{o.trackPublications.forEach(l=>{o.unpublishTrack(l.trackSid)})}),this.localParticipant.trackPublications.forEach(o=>{var l,u,d;o.track&&this.localParticipant.unpublishTrack(o.track,e),e?((l=o.track)===null||l===void 0||l.detach(),(u=o.track)===null||u===void 0||u.stop()):(d=o.track)===null||d===void 0||d.stopMonitor()}),this.localParticipant.off(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(F.AttributesChanged,this.onLocalAttributesChanged).off(F.TrackMuted,this.onLocalTrackMuted).off(F.TrackUnmuted,this.onLocalTrackUnmuted).off(F.LocalTrackPublished,this.onLocalTrackPublished).off(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(F.MediaDevicesError,this.onMediaDevicesError).off(F.AudioStreamAcquired,this.startAudio).off(F.ChatMessage,this.onLocalChatMessageSent).off(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),xt()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=navigator.mediaDevices)===null||r===void 0||r.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Te.Disconnected),this.emit(B.Disconnected,n)}}}handleParticipantDisconnected(e,n){var r;this.remoteParticipants.delete(e),n&&(n.trackPublications.forEach(o=>{n.unpublishTrack(o.trackSid,!0)}),this.emit(B.ParticipantDisconnected,n),(r=this.localParticipant)===null||r===void 0||r.handleParticipantDisconnected(n.identity))}handleStreamHeader(e,n){return R(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const o=this.byteStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Oc(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.byteStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new j1(u,d,Oc(e.totalLength)),{identity:n})}else if(e.contentHeader.case==="textHeader"){const o=this.textStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.textStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new B1(u,d,Oc(e.totalLength)),{identity:n})}})}handleStreamChunk(e){const n=this.byteStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e);const r=this.textStreamControllers.get(e.streamId);r&&e.content.length>0&&r.controller.enqueue(e)}handleStreamTrailer(e){const n=this.textStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.textStreamControllers.delete(e.streamId));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return R(this,void 0,void 0,function*(){var e,n;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Gf())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(o=>o.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Nt(200)])}catch(o){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:o}))}const r=((n=this.audioContext)===null||n===void 0?void 0:n.state)==="running";r!==this.canPlaybackAudio&&(this.audioEnabled=r,this.emit(B.AudioPlaybackStatusChanged,r))})}createParticipant(e,n){var r;let o;return n?o=Ic.fromParticipantInfo(this.engine.client,n,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):o=new Ic(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&o.setAudioContext(this.audioContext),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&o.setAudioOutput(this.options.audioOutput).catch(l=>this.log.warn("Could not set audio output: ".concat(l.message),this.logContext)),o}getOrCreateParticipant(e,n){if(this.remoteParticipants.has(e)){const o=this.remoteParticipants.get(e);return n&&o.updateInfo(n)&&this.sidToIdentity.set(n.sid,n.identity),o}const r=this.createParticipant(e,n);return this.remoteParticipants.set(e,r),this.sidToIdentity.set(n.sid,n.identity),this.emitWhenConnected(B.ParticipantConnected,r),r.on(F.TrackPublished,o=>{this.emitWhenConnected(B.TrackPublished,o,r)}).on(F.TrackSubscribed,(o,l)=>{o.kind===j.Kind.Audio?(o.on(W.AudioPlaybackStarted,this.handleAudioPlaybackStarted),o.on(W.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):o.kind===j.Kind.Video&&(o.on(W.VideoPlaybackFailed,this.handleVideoPlaybackFailed),o.on(W.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(B.TrackSubscribed,o,l,r)}).on(F.TrackUnpublished,o=>{this.emit(B.TrackUnpublished,o,r)}).on(F.TrackUnsubscribed,(o,l)=>{this.emit(B.TrackUnsubscribed,o,l,r)}).on(F.TrackMuted,o=>{this.emitWhenConnected(B.TrackMuted,o,r)}).on(F.TrackUnmuted,o=>{this.emitWhenConnected(B.TrackUnmuted,o,r)}).on(F.ParticipantMetadataChanged,o=>{this.emitWhenConnected(B.ParticipantMetadataChanged,o,r)}).on(F.ParticipantNameChanged,o=>{this.emitWhenConnected(B.ParticipantNameChanged,o,r)}).on(F.AttributesChanged,o=>{this.emitWhenConnected(B.ParticipantAttributesChanged,o,r)}).on(F.ConnectionQualityChanged,o=>{this.emitWhenConnected(B.ConnectionQualityChanged,o,r)}).on(F.ParticipantPermissionsChanged,o=>{this.emitWhenConnected(B.ParticipantPermissionsChanged,o,r)}).on(F.TrackSubscriptionStatusChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionStatusChanged,o,l,r)}).on(F.TrackSubscriptionFailed,(o,l)=>{this.emit(B.TrackSubscriptionFailed,o,r,l)}).on(F.TrackSubscriptionPermissionChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionPermissionChanged,o,l,r)}),n&&r.updateInfo(n),r}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((r,o)=>(r.push(...o.getTrackPublications()),r),[]),n=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,n)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const n of e.videoTrackPublications.values())n.isSubscribed&&$E(n)&&n.emitTrackUpdate()}getRemoteParticipantBySid(e){const n=this.sidToIdentity.get(e);if(n)return this.remoteParticipants.get(n)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Tt.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,pn.STATE_MISMATCH))):e=0},K1)}clearConnectionReconcile(){this.connectionReconcileInterval&&Tt.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(B.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[n,r]=e;this.emit(n,...r)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;othis.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}if(o.audio){const u=new Tf(j.Kind.Audio,new cr({source:ot.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:hn.AUDIO}),new Uc(o.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Dd(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}for(let u=0;u1?n-1:0),o=1;ou!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:l}))}return super.emit(e,...r)}}ni.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(a=>{a()});function ib(a){return a.map(e=>{if(e)return Array.isArray(e)?ib(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var fn;(function(a){a[a.IDLE=0]="IDLE",a[a.RUNNING=1]="RUNNING",a[a.SKIPPED=2]="SKIPPED",a[a.SUCCESS=3]="SUCCESS",a[a.FAILED=4]="FAILED"})(fn||(fn={}));class Hi extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=fn.IDLE,this.logs=[],this.options={},this.url=e,this.token=n,this.name=this.constructor.name,this.room=new ni(r.roomOptions),this.connectOptions=r.connectOptions,this.options=r}run(e){return R(this,void 0,void 0,function*(){if(this.status!==fn.IDLE)throw Error("check is running already");this.setStatus(fn.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(n=>setTimeout(n,500)),this.status!==fn.SKIPPED&&this.setStatus(this.isSuccess()?fn.SUCCESS:fn.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return R(this,void 0,void 0,function*(){return this.room.state===Te.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return R(this,void 0,void 0,function*(){this.room&&this.room.state!==Te.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(fn.SKIPPED)}switchProtocol(e){return R(this,void 0,void 0,function*(){let n=!1,r=!1;if(this.room.on(B.Reconnecting,()=>{n=!0}),this.room.once(B.Reconnected,()=>{r=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(l=>setTimeout(l,1e3)),!n)return;const o=Date.now()+1e4;for(;Date.now()(l.duration-u.duration)*.5+(l.rtt-u.rtt)*.5);const o=n[0];this.bestStats=o,this.appendMessage("best Cloud region: ".concat(o.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return R(this,void 0,void 0,function*(){var n,r;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const o=(n=this.room.serverInfo)===null||n===void 0?void 0:n.region;if(!o)throw new Error("Region not found");const l=yield this.room.localParticipant.streamText({topic:"test"}),u=1e3,h=1e6/u,m="A".repeat(u),g=Date.now();for(let C=0;C{C.type==="candidate-pair"&&C.nominated&&(T.rtt=C.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const jd=1e4;class X1 extends Hi{get description(){return"Connection via UDP vs TCP"}perform(){return R(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),n=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-n.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-n.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=n):this.appendMessage("best connection quality via udp");const r=this.bestStats;this.appendMessage("upstream bitrate: ".concat((r.bitrateTotal/r.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((r.rttTotal/r.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((r.jitterTotal/r.count*1e3).toFixed(2)," ms")),r.packetsLost>0&&this.appendWarning("packets lost: ".concat((r.packetsLost/r.packetsSent*100).toFixed(2),"%")),r.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((r.qualityLimitationDurations.bandwidth/(jd/1e3)*100).toFixed(2),"%")),r.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((r.qualityLimitationDurations.cpu/(jd/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return R(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const n=document.createElement("canvas");n.width=1280,n.height=720;const r=n.getContext("2d");if(!r)throw new Error("Could not get canvas context");let o=0;const l=()=>{o=(o+1)%360,r.fillStyle="hsl(".concat(o,", 100%, 50%)"),r.fillRect(0,0,n.width,n.height),requestAnimationFrame(l)};l();const d=n.captureStream(30).getVideoTracks()[0],m=(yield this.room.localParticipant.publishTrack(d,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,g={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},y=setInterval(()=>R(this,void 0,void 0,function*(){const b=yield m.getRTCStatsReport();b==null||b.forEach(T=>{T.type==="outbound-rtp"?(g.packetsSent=T.packetsSent,g.qualityLimitationDurations=T.qualityLimitationDurations,g.bitrateTotal+=T.targetBitrate,g.count++):T.type==="remote-inbound-rtp"&&(g.packetsLost=T.packetsLost,g.rttTotal+=T.roundTripTime,g.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(b=>setTimeout(b,jd)),clearInterval(y),d.stop(),n.remove(),yield this.disconnect(),g})}}function ab(a){return R(this,void 0,void 0,function*(){var e,n;a??(a={}),(e=a.audio)!==null&&e!==void 0||(a.audio={deviceId:"default"}),(n=a.video)!==null&&n!==void 0||(a.video={deviceId:"default"});const{audioProcessor:r,videoProcessor:o}=Ff(a),l=Hy(a,Fy,Yy),u=Qc(l),d=navigator.mediaDevices.getUserMedia(u);a.audio&&(gt.userMediaPromiseMap.set("audioinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("audioinput"))),a.video&&(gt.userMediaPromiseMap.set("videoinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("videoinput")));const h=yield d;return Promise.all(h.getTracks().map(m=>R(this,void 0,void 0,function*(){const g=m.kind==="audio";g?l.audio:l.video;let y;const b=g?u.audio:u.video;typeof b!="boolean"&&(y=b);const T=m.getSettings().deviceId;y!=null&&y.deviceId&&Ii(y.deviceId)!==T?y.deviceId=T:y||(y={deviceId:T});const C=Xy(m,y);return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone),C.mediaStream=h,ti(C)&&r?yield C.setProcessor(r):Er(C)&&o&&(yield C.setProcessor(o)),C})))})}function Z1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:!1,video:a}))[0]})}function J1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:a,video:!1}))[0]})}class W1 extends Hi{get description(){return"Can publish audio"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield J1();if(yield Gy(r,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),n.localParticipant.publishTrack(r),yield new Promise(d=>setTimeout(d,3e3));const l=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!l)throw new Error("Could not get RTCStats");let u=0;if(l.forEach(d=>{d.type==="outbound-rtp"&&(d.kind==="audio"||!d.kind&&d.mediaType==="audio")&&(u=d.packetsSent)}),u===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(u," audio packets"))})}}class $1 extends Hi{get description(){return"Can publish video"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield Z1();yield this.checkForVideo(r.mediaStreamTrack),n.localParticipant.publishTrack(r),yield new Promise(u=>setTimeout(u,5e3));const o=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!o)throw new Error("Could not get RTCStats");let l=0;if(o.forEach(u=>{u.type==="outbound-rtp"&&(u.kind==="video"||!u.kind&&u.mediaType==="video")&&(l+=u.packetsSent)}),l===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(l," video packets"))})}checkForVideo(e){return R(this,void 0,void 0,function*(){const n=new MediaStream;n.addTrack(e.clone());const r=document.createElement("video");r.srcObject=n,r.muted=!0,yield new Promise(o=>{r.onplay=()=>{setTimeout(()=>{var l,u,d,h;const m=document.createElement("canvas"),g=e.getSettings(),y=(u=(l=g.width)!==null&&l!==void 0?l:r.videoWidth)!==null&&u!==void 0?u:1280,b=(h=(d=g.height)!==null&&d!==void 0?d:r.videoHeight)!==null&&h!==void 0?h:720;m.width=y,m.height=b;const T=m.getContext("2d");T.drawImage(r,0,0);const k=T.getImageData(0,0,m.width,m.height).data;let w=!0;for(let O=0;O{setTimeout(m,5e3),l=m}),d=()=>{r=!0};n.on(B.SignalReconnecting,d).on(B.Reconnecting,d).on(B.Reconnected,()=>{o=!0,l(!0)}),(e=n.engine.client.ws)===null||e===void 0||e.close();const h=n.engine.client.onClose;if(h&&h(""),yield u,r){if(!o||n.state!==Te.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class tR extends Hi{get description(){return"Can connect via TURN"}perform(){return R(this,void 0,void 0,function*(){var e,n;const r=new Yf,o=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let l=!1,u=!1,d=!1;for(let h of o.iceServers)for(let m of h.urls)m.startsWith("turn:")?(u=!0,d=!0):m.startsWith("turns:")&&(u=!0,d=!0,l=!0),m.startsWith("stun:")&&(d=!0);d?u&&!l&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((n=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||n===void 0)&&n.iceServers||u?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(h=>setTimeout(h,0)))})}}class nR extends Hi{get description(){return"Establishing WebRTC connection"}perform(){return R(this,void 0,void 0,function*(){let e=!1,n=!1;this.room.on(B.SignalConnected,()=>{const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(o,l)=>{if(o.candidate){const u=new RTCIceCandidate(o);let d="".concat(u.protocol," ").concat(u.address,":").concat(u.port," ").concat(u.type);u.address&&(iR(u.address)?d+=" (private)":u.protocol==="tcp"&&u.tcpType==="passive"?(e=!0,d+=" (passive)"):u.protocol==="udp"&&(n=!0)),this.appendMessage(d)}r&&r(o,l)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=o=>{o instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(o.errorCode," ").concat(o.errorText," ").concat(o.url))})});try{yield this.connect(),ke.info("now the room is connected")}catch(r){throw this.appendWarning("ports need to be open on firewall in order to connect."),r}e||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")})}}function iR(a){const e=a.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const n=parseInt(e[1],10);if(n>=16&&n<=31)return!0}}return!1}class aR extends Hi{get description(){return"Connecting to signal connection via WebSocket"}perform(){return R(this,void 0,void 0,function*(){var e,n,r;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let o=new Yf;const l=yield o.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(l.serverVersion,".")),((e=l.serverInfo)===null||e===void 0?void 0:e.edition)===F0.Cloud&&(!((n=l.serverInfo)===null||n===void 0)&&n.region)&&this.appendMessage("LiveKit Cloud: ".concat((r=l.serverInfo)===null||r===void 0?void 0:r.region)),yield o.close()})}}class bO extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=n,this.options=r}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:fn.IDLE,name:"",description:""}),e}updateCheck(e,n){this.checkResults.set(e,n),this.emit("checkUpdate",e,n)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==fn.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return R(this,void 0,void 0,function*(){const n=this.getNextCheckId(),r=new e(this.url,this.token,this.options),o=u=>{this.updateCheck(n,u)};r.on("update",o);const l=yield r.run();return r.off("update",o),l})}checkWebsocket(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(aR)})}checkWebRTC(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(nR)})}checkTURN(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(tR)})}checkReconnect(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(eR)})}checkPublishAudio(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(W1)})}checkPublishVideo(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck($1)})}checkConnectionProtocol(){return R(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(X1);if(e.data&&"protocol"in e.data){const n=e.data;this.options.protocol=n.protocol}return e})}checkCloudRegion(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(Q1)})}}const kf=Math.min,pr=Math.max,jc=Math.round,zi=a=>({x:a,y:a}),rR={left:"right",right:"left",bottom:"top",top:"bottom"},sR={start:"end",end:"start"};function e0(a,e,n){return pr(a,kf(e,n))}function Zc(a,e){return typeof a=="function"?a(e):a}function ya(a){return a.split("-")[0]}function Jc(a){return a.split("-")[1]}function rb(a){return a==="x"?"y":"x"}function sb(a){return a==="y"?"height":"width"}function Wc(a){return["top","bottom"].includes(ya(a))?"y":"x"}function ob(a){return rb(Wc(a))}function oR(a,e,n){n===void 0&&(n=!1);const r=Jc(a),o=ob(a),l=sb(o);let u=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[l]>e.floating[l]&&(u=Bc(u)),[u,Bc(u)]}function cR(a){const e=Bc(a);return[Cf(a),e,Cf(e)]}function Cf(a){return a.replace(/start|end/g,e=>sR[e])}function lR(a,e,n){const r=["left","right"],o=["right","left"],l=["top","bottom"],u=["bottom","top"];switch(a){case"top":case"bottom":return n?e?o:r:e?r:o;case"left":case"right":return e?l:u;default:return[]}}function uR(a,e,n,r){const o=Jc(a);let l=lR(ya(a),n==="start",r);return o&&(l=l.map(u=>u+"-"+o),e&&(l=l.concat(l.map(Cf)))),l}function Bc(a){return a.replace(/left|right|bottom|top/g,e=>rR[e])}function dR(a){return{top:0,right:0,bottom:0,left:0,...a}}function fR(a){return typeof a!="number"?dR(a):{top:a,right:a,bottom:a,left:a}}function zc(a){const{x:e,y:n,width:r,height:o}=a;return{width:r,height:o,top:n,left:e,right:e+r,bottom:n+o,x:e,y:n}}function t0(a,e,n){let{reference:r,floating:o}=a;const l=Wc(e),u=ob(e),d=sb(u),h=ya(e),m=l==="y",g=r.x+r.width/2-o.width/2,y=r.y+r.height/2-o.height/2,b=r[d]/2-o[d]/2;let T;switch(h){case"top":T={x:g,y:r.y-o.height};break;case"bottom":T={x:g,y:r.y+r.height};break;case"right":T={x:r.x+r.width,y};break;case"left":T={x:r.x-o.width,y};break;default:T={x:r.x,y:r.y}}switch(Jc(e)){case"start":T[u]-=b*(n&&m?-1:1);break;case"end":T[u]+=b*(n&&m?-1:1);break}return T}const hR=async(a,e,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:l=[],platform:u}=n,d=l.filter(Boolean),h=await(u.isRTL==null?void 0:u.isRTL(e));let m=await u.getElementRects({reference:a,floating:e,strategy:o}),{x:g,y}=t0(m,r,h),b=r,T={},C=0;for(let k=0;koe<=0)){var X,J;const oe=(((X=l.flip)==null?void 0:X.index)||0)+1,qe=_[oe];if(qe)return{data:{index:oe,overflows:ie},reset:{placement:qe}};let Fe=(J=ie.filter(Ye=>Ye.overflows[0]<=0).sort((Ye,te)=>Ye.overflows[1]-te.overflows[1])[0])==null?void 0:J.placement;if(!Fe)switch(T){case"bestFit":{var ee;const Ye=(ee=ie.map(te=>[te.placement,te.overflows.filter(he=>he>0).reduce((he,ue)=>he+ue,0)]).sort((te,he)=>te[1]-he[1])[0])==null?void 0:ee[0];Ye&&(Fe=Ye);break}case"initialPlacement":Fe=d;break}if(o!==Fe)return{reset:{placement:Fe}}}return{}}}};async function pR(a,e){const{placement:n,platform:r,elements:o}=a,l=await(r.isRTL==null?void 0:r.isRTL(o.floating)),u=ya(n),d=Jc(n),h=Wc(n)==="y",m=["left","top"].includes(u)?-1:1,g=l&&h?-1:1,y=Zc(e,a);let{mainAxis:b,crossAxis:T,alignmentAxis:C}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...y};return d&&typeof C=="number"&&(T=d==="end"?C*-1:C),h?{x:T*g,y:b*m}:{x:b*m,y:T*g}}const gR=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(e){var n,r;const{x:o,y:l,placement:u,middlewareData:d}=e,h=await pR(e,a);return u===((n=d.offset)==null?void 0:n.placement)&&(r=d.arrow)!=null&&r.alignmentOffset?{}:{x:o+h.x,y:l+h.y,data:{...h,placement:u}}}}},vR=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:l=!0,crossAxis:u=!1,limiter:d={fn:w=>{let{x:O,y:V}=w;return{x:O,y:V}}},...h}=Zc(a,e),m={x:n,y:r},g=await cb(e,h),y=Wc(ya(o)),b=rb(y);let T=m[b],C=m[y];if(l){const w=b==="y"?"top":"left",O=b==="y"?"bottom":"right",V=T+g[w],Q=T-g[O];T=e0(V,T,Q)}if(u){const w=y==="y"?"top":"left",O=y==="y"?"bottom":"right",V=C+g[w],Q=C-g[O];C=e0(V,C,Q)}const k=d.fn({...e,[b]:T,[y]:C});return{...k,data:{x:k.x-n,y:k.y-r}}}}};function $c(){return typeof window<"u"}function Rr(a){return lb(a)?(a.nodeName||"").toLowerCase():"#document"}function Gt(a){var e;return(a==null||(e=a.ownerDocument)==null?void 0:e.defaultView)||window}function ii(a){var e;return(e=(lb(a)?a.ownerDocument:a.document)||window.document)==null?void 0:e.documentElement}function lb(a){return $c()?a instanceof Node||a instanceof Gt(a).Node:!1}function vn(a){return $c()?a instanceof Element||a instanceof Gt(a).Element:!1}function Mn(a){return $c()?a instanceof HTMLElement||a instanceof Gt(a).HTMLElement:!1}function n0(a){return!$c()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof Gt(a).ShadowRoot}function Ys(a){const{overflow:e,overflowX:n,overflowY:r,display:o}=yn(a);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(o)}function yR(a){return["table","td","th"].includes(Rr(a))}function el(a){return[":popover-open",":modal"].some(e=>{try{return a.matches(e)}catch{return!1}})}function Wf(a){const e=$f(),n=vn(a)?yn(a):a;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function bR(a){let e=qi(a);for(;Mn(e)&&!Tr(e);){if(Wf(e))return e;if(el(e))return null;e=qi(e)}return null}function $f(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Tr(a){return["html","body","#document"].includes(Rr(a))}function yn(a){return Gt(a).getComputedStyle(a)}function tl(a){return vn(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function qi(a){if(Rr(a)==="html")return a;const e=a.assignedSlot||a.parentNode||n0(a)&&a.host||ii(a);return n0(e)?e.host:e}function ub(a){const e=qi(a);return Tr(e)?a.ownerDocument?a.ownerDocument.body:a.body:Mn(e)&&Ys(e)?e:ub(e)}function db(a,e,n){var r;e===void 0&&(e=[]);const o=ub(a),l=o===((r=a.ownerDocument)==null?void 0:r.body),u=Gt(o);return l?(Ef(u),e.concat(u,u.visualViewport||[],Ys(o)?o:[],[])):e.concat(o,db(o,[]))}function Ef(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function fb(a){const e=yn(a);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const o=Mn(a),l=o?a.offsetWidth:n,u=o?a.offsetHeight:r,d=jc(n)!==l||jc(r)!==u;return d&&(n=l,r=u),{width:n,height:r,$:d}}function hb(a){return vn(a)?a:a.contextElement}function gr(a){const e=hb(a);if(!Mn(e))return zi(1);const n=e.getBoundingClientRect(),{width:r,height:o,$:l}=fb(e);let u=(l?jc(n.width):n.width)/r,d=(l?jc(n.height):n.height)/o;return(!u||!Number.isFinite(u))&&(u=1),(!d||!Number.isFinite(d))&&(d=1),{x:u,y:d}}const SR=zi(0);function mb(a){const e=Gt(a);return!$f()||!e.visualViewport?SR:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function TR(a,e,n){return e===void 0&&(e=!1),!n||e&&n!==Gt(a)?!1:e}function Gs(a,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const o=a.getBoundingClientRect(),l=hb(a);let u=zi(1);e&&(r?vn(r)&&(u=gr(r)):u=gr(a));const d=TR(l,n,r)?mb(l):zi(0);let h=(o.left+d.x)/u.x,m=(o.top+d.y)/u.y,g=o.width/u.x,y=o.height/u.y;if(l){const b=Gt(l),T=r&&vn(r)?Gt(r):r;let C=b,k=Ef(C);for(;k&&r&&T!==C;){const w=gr(k),O=k.getBoundingClientRect(),V=yn(k),Q=O.left+(k.clientLeft+parseFloat(V.paddingLeft))*w.x,U=O.top+(k.clientTop+parseFloat(V.paddingTop))*w.y;h*=w.x,m*=w.y,g*=w.x,y*=w.y,h+=Q,m+=U,C=Gt(k),k=Ef(C)}}return zc({width:g,height:y,x:h,y:m})}function kR(a){let{elements:e,rect:n,offsetParent:r,strategy:o}=a;const l=o==="fixed",u=ii(r),d=e?el(e.floating):!1;if(r===u||d&&l)return n;let h={scrollLeft:0,scrollTop:0},m=zi(1);const g=zi(0),y=Mn(r);if((y||!y&&!l)&&((Rr(r)!=="body"||Ys(u))&&(h=tl(r)),Mn(r))){const b=Gs(r);m=gr(r),g.x=b.x+r.clientLeft,g.y=b.y+r.clientTop}return{width:n.width*m.x,height:n.height*m.y,x:n.x*m.x-h.scrollLeft*m.x+g.x,y:n.y*m.y-h.scrollTop*m.y+g.y}}function CR(a){return Array.from(a.getClientRects())}function Rf(a,e){const n=tl(a).scrollLeft;return e?e.left+n:Gs(ii(a)).left+n}function ER(a){const e=ii(a),n=tl(a),r=a.ownerDocument.body,o=pr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),l=pr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let u=-n.scrollLeft+Rf(a);const d=-n.scrollTop;return yn(r).direction==="rtl"&&(u+=pr(e.clientWidth,r.clientWidth)-o),{width:o,height:l,x:u,y:d}}function RR(a,e){const n=Gt(a),r=ii(a),o=n.visualViewport;let l=r.clientWidth,u=r.clientHeight,d=0,h=0;if(o){l=o.width,u=o.height;const m=$f();(!m||m&&e==="fixed")&&(d=o.offsetLeft,h=o.offsetTop)}return{width:l,height:u,x:d,y:h}}function _R(a,e){const n=Gs(a,!0,e==="fixed"),r=n.top+a.clientTop,o=n.left+a.clientLeft,l=Mn(a)?gr(a):zi(1),u=a.clientWidth*l.x,d=a.clientHeight*l.y,h=o*l.x,m=r*l.y;return{width:u,height:d,x:h,y:m}}function i0(a,e,n){let r;if(e==="viewport")r=RR(a,n);else if(e==="document")r=ER(ii(a));else if(vn(e))r=_R(e,n);else{const o=mb(a);r={...e,x:e.x-o.x,y:e.y-o.y}}return zc(r)}function pb(a,e){const n=qi(a);return n===e||!vn(n)||Tr(n)?!1:yn(n).position==="fixed"||pb(n,e)}function wR(a,e){const n=e.get(a);if(n)return n;let r=db(a,[]).filter(d=>vn(d)&&Rr(d)!=="body"),o=null;const l=yn(a).position==="fixed";let u=l?qi(a):a;for(;vn(u)&&!Tr(u);){const d=yn(u),h=Wf(u);!h&&d.position==="fixed"&&(o=null),(l?!h&&!o:!h&&d.position==="static"&&o&&["absolute","fixed"].includes(o.position)||Ys(u)&&!h&&pb(a,u))?r=r.filter(m=>m!==u):o=d,u=qi(u)}return e.set(a,r),r}function OR(a){let{element:e,boundary:n,rootBoundary:r,strategy:o}=a;const l=[...n==="clippingAncestors"?el(e)?[]:wR(e,this._c):[].concat(n),r],u=l[0],d=l.reduce((h,m)=>{const g=i0(e,m,o);return h.top=pr(g.top,h.top),h.right=kf(g.right,h.right),h.bottom=kf(g.bottom,h.bottom),h.left=pr(g.left,h.left),h},i0(e,u,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function DR(a){const{width:e,height:n}=fb(a);return{width:e,height:n}}function AR(a,e,n){const r=Mn(e),o=ii(e),l=n==="fixed",u=Gs(a,!0,l,e);let d={scrollLeft:0,scrollTop:0};const h=zi(0);if(r||!r&&!l)if((Rr(e)!=="body"||Ys(o))&&(d=tl(e)),r){const T=Gs(e,!0,l,e);h.x=T.x+e.clientLeft,h.y=T.y+e.clientTop}else o&&(h.x=Rf(o));let m=0,g=0;if(o&&!r&&!l){const T=o.getBoundingClientRect();g=T.top+d.scrollTop,m=T.left+d.scrollLeft-Rf(o,T)}const y=u.left+d.scrollLeft-h.x-m,b=u.top+d.scrollTop-h.y-g;return{x:y,y:b,width:u.width,height:u.height}}function Bd(a){return yn(a).position==="static"}function a0(a,e){if(!Mn(a)||yn(a).position==="fixed")return null;if(e)return e(a);let n=a.offsetParent;return ii(a)===n&&(n=n.ownerDocument.body),n}function gb(a,e){const n=Gt(a);if(el(a))return n;if(!Mn(a)){let o=qi(a);for(;o&&!Tr(o);){if(vn(o)&&!Bd(o))return o;o=qi(o)}return n}let r=a0(a,e);for(;r&&yR(r)&&Bd(r);)r=a0(r,e);return r&&Tr(r)&&Bd(r)&&!Wf(r)?n:r||bR(a)||n}const MR=async function(a){const e=this.getOffsetParent||gb,n=this.getDimensions,r=await n(a.floating);return{reference:AR(a.reference,await e(a.floating),a.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function PR(a){return yn(a).direction==="rtl"}const xR={convertOffsetParentRelativeRectToViewportRelativeRect:kR,getDocumentElement:ii,getClippingRect:OR,getOffsetParent:gb,getElementRects:MR,getClientRects:CR,getDimensions:DR,getScale:gr,isElement:vn,isRTL:PR},NR=gR,UR=vR,LR=mR,IR=(a,e,n)=>{const r=new Map,o={platform:xR,...n},l={...o.platform,_c:r};return hR(a,e,{...o,platform:l})};var Ns=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function jR(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var vb={exports:{}};(function(a){(function(e,n){a.exports?a.exports=n():e.log=n()})(Ns,function(){var e=function(){},n="undefined",r=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],l={},u=null;function d(k,w){var O=k[w];if(typeof O.bind=="function")return O.bind(k);try{return Function.prototype.bind.call(O,k)}catch{return function(){return Function.prototype.apply.apply(O,[k,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function m(k){return k==="debug"&&(k="log"),typeof console===n?!1:k==="trace"&&r?h:console[k]!==void 0?d(console,k):console.log!==void 0?d(console,"log"):e}function g(){for(var k=this.getLevel(),w=0;w=0&&oe<=O.levels.SILENT)return oe;throw new TypeError("log.setLevel() called with invalid level: "+ee)}O.name=k,O.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},O.methodFactory=w||b,O.getLevel=function(){return U??Q??V},O.setLevel=function(ee,oe){return U=X(ee),oe!==!1&&H(U),g.call(O)},O.setDefaultLevel=function(ee){Q=X(ee),$()||O.setLevel(ee,!1)},O.resetLevel=function(){U=null,ie(),g.call(O)},O.enableAll=function(ee){O.setLevel(O.levels.TRACE,ee)},O.disableAll=function(ee){O.setLevel(O.levels.SILENT,ee)},O.rebuild=function(){if(u!==O&&(V=X(u.getLevel())),g.call(O),u===O)for(var ee in l)l[ee].rebuild()},V=X(u?u.getLevel():"WARN");var J=$();J!=null&&(U=X(J)),g.call(O)}u=new T,u.getLogger=function(k){if(typeof k!="symbol"&&typeof k!="string"||k==="")throw new TypeError("You must supply a name when creating a logger.");var w=l[k];return w||(w=l[k]=new T(k,u.methodFactory)),w};var C=typeof window!==n?window.log:void 0;return u.noConflict=function(){return typeof window!==n&&window.log===u&&(window.log=C),u},u.getLoggers=function(){return l},u.default=u,u})})(vb);var BR=vb.exports;const zR=jR(BR);var _f=function(a,e){return _f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},_f(a,e)};function ai(a,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");_f(a,e);function n(){this.constructor=a}a.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}function qR(a,e,n,r){function o(l){return l instanceof n?l:new n(function(u){u(l)})}return new(n||(n=Promise))(function(l,u){function d(g){try{m(r.next(g))}catch(y){u(y)}}function h(g){try{m(r.throw(g))}catch(y){u(y)}}function m(g){g.done?l(g.value):o(g.value).then(d,h)}m((r=r.apply(a,[])).next())})}function yb(a,e){var n={label:0,sent:function(){if(l[0]&1)throw l[1];return l[1]},trys:[],ops:[]},r,o,l,u=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return u.next=d(0),u.throw=d(1),u.return=d(2),typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(m){return function(g){return h([m,g])}}function h(m){if(r)throw new TypeError("Generator is already executing.");for(;u&&(u=0,m[0]&&(n=0)),n;)try{if(r=1,o&&(l=m[0]&2?o.return:m[0]?o.throw||((l=o.return)&&l.call(o),0):o.next)&&!(l=l.call(o,m[1])).done)return l;switch(o=0,l&&(m=[m[0]&2,l.value]),m[0]){case 0:case 1:l=m;break;case 4:return n.label++,{value:m[1],done:!1};case 5:n.label++,o=m[1],m=[0];continue;case 7:m=n.ops.pop(),n.trys.pop();continue;default:if(l=n.trys,!(l=l.length>0&&l[l.length-1])&&(m[0]===6||m[0]===2)){n=0;continue}if(m[0]===3&&(!l||m[1]>l[0]&&m[1]=a.length&&(a=void 0),{value:a&&a[r++],done:!a}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function qc(a,e){var n=typeof Symbol=="function"&&a[Symbol.iterator];if(!n)return a;var r=n.call(a),o,l=[],u;try{for(;(e===void 0||e-- >0)&&!(o=r.next()).done;)l.push(o.value)}catch(d){u={error:d}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(u)throw u.error}}return l}function Vc(a,e,n){if(arguments.length===2)for(var r=0,o=e.length,l;r1||h(T,k)})},C&&(o[T]=C(o[T])))}function h(T,C){try{m(r[T](C))}catch(k){b(l[0][3],k)}}function m(T){T.value instanceof vr?Promise.resolve(T.value.v).then(g,y):b(l[0][2],T)}function g(T){h("next",T)}function y(T){h("throw",T)}function b(T,C){T(C),l.shift(),l.length&&h(l[0][0],l[0][1])}}function HR(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=a[Symbol.asyncIterator],n;return e?e.call(a):(a=typeof kr=="function"?kr(a):a[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(l){n[l]=a[l]&&function(u){return new Promise(function(d,h){u=a[l](u),o(d,h,u.done,u.value)})}}function o(l,u,d,h){Promise.resolve(h).then(function(m){l({value:m,done:d})},u)}}function dt(a){return typeof a=="function"}function eh(a){var e=function(r){Error.call(r),r.stack=new Error().stack},n=a(e);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var zd=eh(function(a){return function(e){a(this),this.message=e?e.length+` errors occurred during unsubscription: `+e.map(function(n,r){return r+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}async function hO(){var e,n,r,o;const a=(r=(n=(e=window.google)==null?void 0:e.colab)==null?void 0:n.kernel)==null?void 0:r.invokeFunction;if(a)return(await a("get_join_token",[])).data["application/json"];if(window.jupyterapp&&window.jupyterapp.shell){const l=window.jupyterapp.shell.currentWidget;if(l&&((o=l.context)!=null&&o.sessionContext)){const u=l.context.sessionContext.session;if(u&&u.kernel)try{const d=u.kernel.createComm("get_join_token_comm");return d.open(),d.send({request:"token"}),new Promise(h=>{d.onMsg=m=>{h(m.content.data)}})}catch(d){throw new Error("Error creating comm channel: "+d)}}}throw new Error("No suitable kernel connection available")}const mO=a=>Pe.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Pe.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Pe.jsxs("div",{className:"content",children:[Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsxs(Wb,{onClick:a,children:[Pe.jsx(mO,{}),"Disconnect"]})})]}),Pe.jsxs("div",{className:"controls",children:[Pe.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Pe.jsx("div",{className:"agent-visualizer",children:Pe.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(null),[o,l]=P.useState(!0);return P.useEffect(()=>{hO().then(u=>e(u)).catch(u=>r(u.message))},[]),n?Pe.jsxs("div",{children:["Error: ",n]}):a?o?Pe.jsxs(_w,{serverUrl:a.url,token:a.token,onError:u=>r(u.message),children:[Pe.jsx(pO,{onDisconnect:()=>l(!1)}),Pe.jsx(sO,{})]}):Pe.jsx("div",{className:"content",children:Pe.jsxs("header",{className:"header",children:[Pe.jsxs("div",{className:"header-left",children:[Pe.jsx("h2",{children:"livekit-rtc"}),Pe.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Pe.jsx("div",{className:"header-controls",children:Pe.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})}):Pe.jsx("div",{children:"Loading..."})};Mk.createRoot(document.getElementById("root")).render(Pe.jsx(P.StrictMode,{children:Pe.jsx(gO,{})})); + `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}function hO(){return{url:"##livekit-url-placeholder##",token:"##livekit-token-placeholder##"}}const mO=a=>Ne.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Ne.jsxs("div",{className:"content",children:[Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsxs(Wb,{onClick:a,children:[Ne.jsx(mO,{}),"Disconnect"]})})]}),Ne.jsxs("div",{className:"controls",children:[Ne.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Ne.jsx("div",{className:"agent-visualizer",children:Ne.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(!0),o=hO();return a?Ne.jsxs("div",{children:["Error: ",a]}):n?Ne.jsxs(_w,{serverUrl:o.url,token:o.token,onError:l=>e(l.message),children:[Ne.jsx(pO,{onDisconnect:()=>r(!1)}),Ne.jsx(sO,{})]}):Ne.jsx("div",{className:"content",children:Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})})};Mk.createRoot(document.getElementById("root")).render(Ne.jsx(P.StrictMode,{children:Ne.jsx(gO,{})})); From 7566c60cc3d00632e1305a98350c5244440e7b82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Mon, 7 Apr 2025 16:05:32 +0200 Subject: [PATCH 11/13] wip --- livekit-rtc/jupyter-html/src/App.tsx | 10 +++++----- livekit-rtc/livekit/rtc/jupyter.py | 3 ++- .../livekit/rtc/resources/jupyter-html/index.html | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/livekit-rtc/jupyter-html/src/App.tsx b/livekit-rtc/jupyter-html/src/App.tsx index 8c9de9d2..76244832 100644 --- a/livekit-rtc/jupyter-html/src/App.tsx +++ b/livekit-rtc/jupyter-html/src/App.tsx @@ -44,8 +44,8 @@ const LeaveIcon = (props: SVGProps) => ( const ConnectedContent: React.FC<{ onDisconnect: () => void }> = ({ onDisconnect }) => { const connectionState = useConnectionState(); - const { state: agentState, audioTrack: agentTrack } = useVoiceAssistant(); const { canPlayAudio } = useStartAudio({ props: {} }); // why do I need props..? + const { state: agentState, audioTrack } = useVoiceAssistant(); return (
@@ -63,16 +63,16 @@ const ConnectedContent: React.FC<{ onDisconnect: () => void }> = ({ onDisconnect
- {canPlayAudio && connectionState == ConnectionState.Connected &&
+ {canPlayAudio && connectionState == ConnectionState.Connected && agentState !== "connecting" &&
}
-
+
); }; diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 0701399d..7251d828 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -31,7 +31,8 @@ def room_html(url: str, token: str) -> HTML: index_path = _resource_stack.enter_context(as_file(index_path)) # turns out that directly replacing the URL/token is necessary, as Colab or Jupyter comms become - # unreliable when the main thread is busy/blocked + # unreliable when the main thread is busy/blocked. + # it also avoid the need to use --expose-app-in-browser when starting jupyter notebook html_text = index_path.read_text() html_text = html_text.replace(token_placeholder, token) html_text = html_text.replace(url_placeholder, url) diff --git a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html index 62f9c473..6e35aa15 100644 --- a/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html +++ b/livekit-rtc/livekit/rtc/resources/jupyter-html/index.html @@ -92,7 +92,7 @@ `)+`\r `},Nd}var Hv;function m1(){if(Hv)return un;Hv=1;var a=f1(),e=h1(),n=Kf();return un.grammar=n,un.write=e,un.parse=a.parse,un.parseParams=a.parseParams,un.parseFmtpConfig=a.parseFmtpConfig,un.parsePayloads=a.parsePayloads,un.parseRemoteCandidates=a.parseRemoteCandidates,un.parseImageAttributes=a.parseImageAttributes,un.parseSimulcastStreamList=a.parseSimulcastStreamList,un}var Mi=m1();function Qf(a,e,n){var r,o,l;e===void 0&&(e=50),n===void 0&&(n={});var u=(r=n.isImmediate)!=null&&r,d=(o=n.callback)!=null&&o,h=n.maxWait,m=Date.now(),g=[];function y(){if(h!==void 0){var T=Date.now()-m;if(T+e>=h)return h-T}return e}var b=function(){var T=[].slice.call(arguments),C=this;return new Promise(function(k,w){var O=u&&l===void 0;if(l!==void 0&&clearTimeout(l),l=setTimeout(function(){if(l=void 0,m=Date.now(),!u){var Q=a.apply(C,T);d&&d(Q),g.forEach(function(U){return(0,U.resolve)(Q)}),g=[]}},y()),O){var V=a.apply(C,T);return d&&d(V),k(V)}g.push({resolve:k,reject:w})})};return b.cancel=function(T){l!==void 0&&clearTimeout(l),g.forEach(function(C){return(0,C.reject)(T)}),g=[]},b}const p1=.7,g1=20,mr={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class Gv extends xn.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var r;super(),this.log=ke,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Qf(o=>R(this,void 0,void 0,function*(){this.emit(mr.NegotiationStarted);try{yield this.createAndSendOffer()}catch(l){if(o)o(l);else throw l}}),g1),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=ei((r=n.loggerName)!==null&&r!==void 0?r:gn.PCTransport),this.loggerOptions=n,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=n=>{var r;n.candidate&&((r=this.onIceCandidate)===null||r===void 0||r.call(this,n.candidate))},e.onicecandidateerror=n=>{var r;(r=this.onIceCandidateError)===null||r===void 0||r.call(this,n)},e.oniceconnectionstatechange=()=>{var n;(n=this.onIceConnectionStateChange)===null||n===void 0||n.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var n;(n=this.onSignalingStatechange)===null||n===void 0||n.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var n;(n=this.onConnectionStateChange)===null||n===void 0||n.call(this,e.connectionState)},e.ondatachannel=n=>{var r;(r=this.onDataChannel)===null||r===void 0||r.call(this,n)},e.ontrack=n=>{var r;(r=this.onTrack)===null||r===void 0||r.call(this,n)},e}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return R(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return R(this,void 0,void 0,function*(){var n;let r;if(e.type==="offer"){let{stereoMids:o,nackMids:l}=v1(e);this.remoteStereoMids=o,this.remoteNackMids=l}else if(e.type==="answer"){const o=Mi.parse((n=e.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{l.type==="audio"&&this.trackBitrates.some(u=>{if(!u.transceiver||l.mid!=u.transceiver.mid)return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0)return!0;let h=!1;for(const m of l.fmtp)if(m.payload===d){m.config=m.config.split(";").filter(g=>!g.includes("maxaveragebitrate")).join(";"),u.maxbr>0&&(m.config+=";maxaveragebitrate=".concat(u.maxbr*1e3)),h=!0;break}return h||u.maxbr>0&&l.fmtp.push({payload:d,config:"maxaveragebitrate=".concat(u.maxbr*1e3)}),!0})}),r=Mi.write(o)}yield this.setMungedSDP(e,r,!0),this.pendingCandidates.forEach(o=>{this.pc.addIceCandidate(o)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(mr.NegotiationComplete),e.sdp&&Mi.parse(e.sdp).media.forEach(l=>{l.type==="video"&&this.emit(mr.RTPVideoPayloadTypes,l.rtp)}))})}createAndSendOffer(e){return R(this,void 0,void 0,function*(){var n;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const l=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&l)yield this._pc.setRemoteDescription(l);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const r=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:r.sdp},this.logContext));const o=Mi.parse((n=r.sdp)!==null&&n!==void 0?n:"");o.media.forEach(l=>{Yv(l),l.type==="audio"?Fv(l,[],[]):l.type==="video"&&this.trackBitrates.some(u=>{if(!l.msid||!u.cid||!l.msid.includes(u.cid))return!1;let d=0;if(l.rtp.some(m=>m.codec.toUpperCase()===u.codec.toUpperCase()?(d=m.payload,!0):!1),d===0||(Is(u.codec)&&this.ensureVideoDDExtensionForSVC(l,o),u.codec!=="av1"))return!0;const h=Math.round(u.maxbr*p1);for(const m of l.fmtp)if(m.payload===d){m.config.includes("x-google-start-bitrate")||(m.config+=";x-google-start-bitrate=".concat(h));break}return!0})}),yield this.setMungedSDP(r,Mi.write(o)),this.onOffer(r)})}createAndSetAnswer(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pc.createAnswer(),r=Mi.parse((e=n.sdp)!==null&&e!==void 0?e:"");return r.media.forEach(o=>{Yv(o),o.type==="audio"&&Fv(o,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(n,Mi.write(r)),n})}createDataChannel(e,n){return this.pc.createDataChannel(e,n)}addTransceiver(e,n){return this.pc.addTransceiver(e,n)}addTrack(e){if(!this._pc)throw new ut("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var n;if(!this._pc)throw new ut("PC closed, cannot configure");return(n=this._pc)===null||n===void 0?void 0:n.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var n;return(n=this._pc)===null||n===void 0?void 0:n.removeTrack(e)}getConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&n!==void 0?n:"closed"}getICEConnectionState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&n!==void 0?n:"closed"}getSignallingState(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&n!==void 0?n:"closed"}getTransceivers(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&n!==void 0?n:[]}getSenders(){var e,n;return(n=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&n!==void 0?n:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return R(this,void 0,void 0,function*(){var e;if(!this._pc)return;let n="";const r=new Map,o=new Map;if((yield this._pc.getStats()).forEach(d=>{switch(d.type){case"transport":n=d.selectedCandidatePairId;break;case"candidate-pair":n===""&&d.selected&&(n=d.id),r.set(d.id,d);break;case"remote-candidate":o.set(d.id,"".concat(d.address,":").concat(d.port));break}}),n==="")return;const u=(e=r.get(n))===null||e===void 0?void 0:e.remoteCandidateId;if(u!==void 0)return o.get(u)})}setMungedSDP(e,n,r){return R(this,void 0,void 0,function*(){if(n){const o=e.sdp;e.sdp=n;try{this.log.debug("setting munged ".concat(r?"remote":"local"," description"),this.logContext),r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(l){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:l,sdp:n})),e.sdp=o}}try{r?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(o){let l="unknown error";o instanceof Error?l=o.message:typeof o=="string"&&(l=o);const u={error:l,sdp:e.sdp};throw!r&&this.pc.remoteDescription&&(u.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:u})),new of(l)}})}ensureVideoDDExtensionForSVC(e,n){var r,o;if(!((r=e.ext)===null||r===void 0?void 0:r.some(u=>u.uri===Mv))){if(this.ddExtID===0){let u=0;n.media.forEach(d=>{var h;d.type==="video"&&((h=d.ext)===null||h===void 0||h.forEach(m=>{m.value>u&&(u=m.value)}))}),this.ddExtID=u+1}(o=e.ext)===null||o===void 0||o.push({value:this.ddExtID,uri:Mv})}}}function Fv(a,e,n){let r=0;a.rtp.some(o=>o.codec==="opus"?(r=o.payload,!0):!1),r>0&&(a.rtcpFb||(a.rtcpFb=[]),n.includes(a.mid)&&!a.rtcpFb.some(o=>o.payload===r&&o.type==="nack")&&a.rtcpFb.push({payload:r,type:"nack"}),e.includes(a.mid)&&a.fmtp.some(o=>o.payload===r?(o.config.includes("stereo=1")||(o.config+=";stereo=1"),!0):!1))}function v1(a){var e;const n=[],r=[],o=Mi.parse((e=a.sdp)!==null&&e!==void 0?e:"");let l=0;return o.media.forEach(u=>{var d;u.type==="audio"&&(u.rtp.some(h=>h.codec==="opus"?(l=h.payload,!0):!1),!((d=u.rtcpFb)===null||d===void 0)&&d.some(h=>h.payload===l&&h.type==="nack")&&r.push(u.mid),u.fmtp.some(h=>h.payload===l?(h.config.includes("sprop-stereo=1")&&n.push(u.mid),!0):!1))}),{stereoMids:n,nackMids:r}}function Yv(a){if(a.connection){const e=a.connection.ip.indexOf(":")>=0;(a.connection.version===4&&e||a.connection.version===6&&!e)&&(a.connection.ip="0.0.0.0",a.connection.version=4)}}const gf="vp8",y1={audioPreset:cf.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Hf.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:gf,backupCodec:!0},Fy={deviceId:"default",autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Yy={deviceId:"default",resolution:Hs.h720.resolution},b1={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new uE,disconnectOnPageLeave:!0,webAudioMix:!1},Xf={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var We;(function(a){a[a.NEW=0]="NEW",a[a.CONNECTING=1]="CONNECTING",a[a.CONNECTED=2]="CONNECTED",a[a.FAILED=3]="FAILED",a[a.CLOSING=4]="CLOSING",a[a.CLOSED=5]="CLOSED"})(We||(We={}));class S1{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,n,r){var o;this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.log=ke,this.updateState=()=>{var l;const u=this.state,d=this.requiredTransports.map(h=>h.getConnectionState());d.every(h=>h==="connected")?this.state=We.CONNECTED:d.some(h=>h==="failed")?this.state=We.FAILED:d.some(h=>h==="connecting")?this.state=We.CONNECTING:d.every(h=>h==="closed")?this.state=We.CLOSED:d.some(h=>h==="closed")?this.state=We.CLOSING:d.every(h=>h==="new")&&(this.state=We.NEW),u!==this.state&&(this.log.debug("pc state change: from ".concat(We[u]," to ").concat(We[this.state]),this.logContext),(l=this.onStateChange)===null||l===void 0||l.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=ei((o=r.loggerName)!==null&&o!==void 0?o:gn.PCManager),this.loggerOptions=r,this.isPublisherConnectionRequired=!n,this.isSubscriberConnectionRequired=n,this.publisher=new Gv(e,r),this.subscriber=new Gv(e,r),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.PUBLISHER)},this.subscriber.onIceCandidate=l=>{var u;(u=this.onIceCandidate)===null||u===void 0||u.call(this,l,mn.SUBSCRIBER)},this.subscriber.onDataChannel=l=>{var u;(u=this.onDataChannel)===null||u===void 0||u.call(this,l)},this.subscriber.onTrack=l=>{var u;(u=this.onTrack)===null||u===void 0||u.call(this,l)},this.publisher.onOffer=l=>{var u;(u=this.onPublisherOffer)===null||u===void 0||u.call(this,l)},this.state=We.NEW,this.connectionLock=new Ht,this.remoteOfferLock=new Ht}get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions).loggerContextCb)===null||n===void 0?void 0:n.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return R(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const n of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(n)}catch(r){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:r}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return R(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,n){return R(this,void 0,void 0,function*(){n===mn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return R(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const n=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{n()}})}updateConfiguration(e,n){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),n&&this.triggerIceRestart()}ensurePCTransportConnection(e,n){return R(this,void 0,void 0,function*(){var r;const o=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((r=this.requiredTransports)===null||r===void 0?void 0:r.map(l=>this.ensureTransportConnected(l,e,n)))}finally{o()}})}negotiate(e){return R(this,void 0,void 0,function*(){return new Promise((n,r)=>R(this,void 0,void 0,function*(){const o=setTimeout(()=>{r("negotiation timed out")},this.peerConnectionTimeout),l=()=>{clearTimeout(o),r("negotiation aborted")};e.signal.addEventListener("abort",l),this.publisher.once(mr.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(mr.NegotiationComplete,()=>{clearTimeout(o),n()})}),yield this.publisher.negotiate(u=>{clearTimeout(o),r(u)})}))})}addPublisherTransceiver(e,n){return this.publisher.addTransceiver(e,n)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,n){return this.publisher.createDataChannel(e,n)}getConnectedAddress(e){return e===mn.PUBLISHER?this.publisher.getConnectedAddress():e===mn.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(r.getConnectionState()!=="connected")return new Promise((h,m)=>R(l,void 0,void 0,function*(){const g=()=>{this.log.warn("abort transport connection",this.logContext),Tt.clearTimeout(y),m(new Ie("room connection has been cancelled",Re.Cancelled))};o!=null&&o.signal.aborted&&g(),o==null||o.signal.addEventListener("abort",g);const y=Tt.setTimeout(()=>{o==null||o.signal.removeEventListener("abort",g),m(new Ie("could not establish pc connection",Re.InternalError))},u);for(;this.state!==We.CONNECTED;)if(yield Nt(50),o!=null&&o.signal.aborted){m(new Ie("room connection has been cancelled",Re.Cancelled));return}Tt.clearTimeout(y),o==null||o.signal.removeEventListener("abort",g),h()}))}()})}}class et extends Error{constructor(e,n,r){super(n),this.code=e,this.message=Kv(n,et.MAX_MESSAGE_BYTES),this.data=r?Kv(r,et.MAX_DATA_BYTES):void 0}static fromProto(e){return new et(e.code,e.message,e.data)}toProto(){return new H0({code:this.code,message:this.message,data:this.data})}static builtIn(e,n){return new et(et.ErrorCode[e],et.ErrorMessage[e],n)}}et.MAX_MESSAGE_BYTES=256;et.MAX_DATA_BYTES=15360;et.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};et.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 Ky=15360;function Zf(a){return new TextEncoder().encode(a).length}function Kv(a,e){if(Zf(a)<=e)return a;let n=0,r=a.length;const o=new TextEncoder;for(;n3&&arguments[3]!==void 0?arguments[3]:!1,l=arguments.length>4?arguments[4]:void 0;super(e,n,l),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=Qf(()=>R(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>R(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(W.Ended,this)},this.reacquireTrack=!1,this.providedByUser=o,this.muteLock=new Ht,this.pauseUpstreamLock=new Ht,this.processorLock=new Ht,this.restartLock=new Ht,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),r&&(this._constraints=r)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==j.Kind.Video)return;const{width:e,height:n}=this._mediaStreamTrack.getSettings();if(e&&n)return{width:e,height:n}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,n;return(n=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&n!==void 0?n:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,n){return R(this,void 0,void 0,function*(){var r;if(e===this._mediaStreamTrack&&!n)return;this._mediaStreamTrack&&(this.attachedElements.forEach(l=>{fr(this._mediaStreamTrack,l)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let o;if(this.processor&&e){const l=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(lr(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),o=this.processor.processedTrack}finally{l()}}this.sender&&((r=this.sender.transport)===null||r===void 0?void 0:r.state)!=="closed"&&(yield this.sender.replaceTrack(o??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(l=>{lr(o??e,l)}))})}waitForDimensions(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:T1;return function*(){var r;if(e.kind===j.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((r=Dn())===null||r===void 0?void 0:r.os)==="iOS"&&(yield Nt(10));const o=Date.now();for(;Date.now()-o0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===j.Source.ScreenShare)return;const{deviceId:r,groupId:o}=e._mediaStreamTrack.getSettings(),l=e.kind===j.Kind.Audio?"audioinput":"videoinput";return n?gt.getInstance().normalizeDeviceId(l,r,o):r}()})}mute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return R(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,n){return R(this,void 0,void 0,function*(){if(!this.sender)throw new $n("unable to replace an unpublished track");let r,o;return typeof n=="boolean"?r=n:n!==void 0&&(r=n.userProvidedTrack,o=n.stopProcessor),this.providedByUser=r??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),o&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return R(this,void 0,void 0,function*(){this.manuallyStopped=!1;const n=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:r}=e,o=dE(e,["deviceId"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const l={audio:!1,video:!1};this.kind===j.Kind.Video?l.video=r?{deviceId:r}:!0:l.audio=r?{deviceId:r}:!0,this.attachedElements.forEach(h=>{fr(this.mediaStreamTrack,h)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const d=(yield navigator.mediaDevices.getUserMedia(l)).getTracks()[0];return yield d.applyConstraints(o),d.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(d),this._constraints=e,this.emit(W.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{n()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(W.UpstreamPaused,this);const r=Dn();if((r==null?void 0:r.name)==="Safari"&&Sr(r.version,"12.0")<0)throw new Vf("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{n()}})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;const n=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(W.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{n()}})}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var l;const u=yield r.processorLock.lock();try{r.log.debug("setting up processor",r.logContext);const d=document.createElement(r.kind),h={kind:r.kind,track:r._mediaStreamTrack,element:d,audioContext:r.audioContext};if(yield n.init(h),r.log.debug("processor initialized",r.logContext),r.processor&&(yield r.stopProcessor()),r.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(lr(r._mediaStreamTrack,d),d.muted=!0,d.play().catch(m=>r.log.error("failed to play processor element",Object.assign(Object.assign({},r.logContext),{error:m}))),r.processor=n,r.processorElement=d,r.processor.processedTrack){for(const m of r.attachedElements)m!==r.processorElement&&o&&(fr(r._mediaStreamTrack,m),lr(r.processor.processedTrack,m));yield(l=r.sender)===null||l===void 0?void 0:l.replaceTrack(r.processor.processedTrack)}r.emit(W.TrackProcessorUpdate,r.processor)}finally{u()}}()})}getProcessor(){return this.processor}stopProcessor(){return R(this,arguments,void 0,function(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var r,o;e.processor&&(e.log.debug("stopping processor",e.logContext),(r=e.processor.processedTrack)===null||r===void 0||r.stop(),yield e.processor.destroy(),e.processor=void 0,n||((o=e.processorElement)===null||o===void 0||o.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(W.TrackProcessorUpdate))}()})}}class Uc extends Qy{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;super(e,j.Kind.Audio,n,r,l),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let u;try{u=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}u&&this.prevStats&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,On.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=o,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const r=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Ii(this._constraints.deviceId);return this.source===j.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||r)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{n()}})}restartTrack(e){return R(this,void 0,void 0,function*(){let n;if(e){const r=Qc({audio:e});typeof r.audio!="boolean"&&(n=r.audio)}yield this.restart(n)})}restart(e){const n=Object.create(null,{restart:{get:()=>super.restart}});return R(this,void 0,void 0,function*(){const r=yield n.restart.call(this,e);return this.checkForSilence(),r})}startMonitor(){xt()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf)))}setProcessor(e){return R(this,void 0,void 0,function*(){var n;const r=yield this.processorLock.lock();try{if(!An()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const o={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(o),this.processor=e,this.processor.processedTrack&&(yield(n=this.sender)===null||n===void 0?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(W.TrackProcessorUpdate,this.processor)}finally{r()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const n=yield this.sender.getStats();let r;return n.forEach(o=>{o.type==="outbound-rtp"&&(r={type:"audio",streamId:o.id,packetsSent:o.packetsSent,packetsLost:o.packetsLost,bytesSent:o.bytesSent,timestamp:o.timestamp,roundTripTime:o.roundTripTime,jitter:o.jitter})}),r})}checkForSilence(){return R(this,void 0,void 0,function*(){const e=yield Gy(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(W.AudioSilenceDetected)),e})}}function Xy(a,e,n){switch(a.kind){case"audio":return new Uc(a,e,!1,void 0,n);case"video":return new Lc(a,e,!1,n);default:throw new $n("unsupported track type: ".concat(a.kind))}}const k1=Object.values(Hs),C1=Object.values(lf),E1=Object.values(Hf),R1=[Hs.h180,Hs.h360],_1=[lf.h180,lf.h360],w1=a=>[{scaleResolutionDownBy:2,fps:a.encoding.maxFramerate}].map(n=>{var r,o;return new Ue(Math.floor(a.width/n.scaleResolutionDownBy),Math.floor(a.height/n.scaleResolutionDownBy),Math.max(15e4,Math.floor(a.encoding.maxBitrate/(Math.pow(n.scaleResolutionDownBy,2)*(((r=a.encoding.maxFramerate)!==null&&r!==void 0?r:30)/((o=n.fps)!==null&&o!==void 0?o:30))))),n.fps,a.encoding.priority)}),vf=["q","h","f"];function yf(a,e,n,r){var o,l;let u=r==null?void 0:r.videoEncoding;a&&(u=r==null?void 0:r.screenShareEncoding);const d=r==null?void 0:r.simulcast,h=r==null?void 0:r.scalabilityMode,m=r==null?void 0:r.videoCodec;if(!u&&!d&&!h||!e||!n)return[{}];u||(u=D1(a,e,n,m),ke.debug("using video encoding",u));const g=u.maxFramerate,y=new Ue(e,n,u.maxBitrate,u.maxFramerate,u.priority);if(h&&Is(m)){const C=new Zy(h),k=[];if(C.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(h));const w=Dn();if(Bi()||An()||(w==null?void 0:w.name)==="Chrome"&&Sr(w==null?void 0:w.version,"113")<0){const O=C.suffix=="h"?2:3;for(let V=0;V0){const C=b[0];b.length>1&&([,T]=b);const k=Math.max(e,n);if(k>=960&&T)return Ud(e,n,[C,T,y],g);if(k>=480)return Ud(e,n,[C,y],g)}return Ud(e,n,[y])}function O1(a,e,n){var r,o,l,u;if(!n.backupCodec||n.backupCodec===!0||n.backupCodec.codec===n.videoCodec)return;e!==n.backupCodec.codec&&ke.warn("requested a different codec than specified as backup",{serverRequested:e,backup:n.backupCodec.codec}),n.videoCodec=e,n.videoEncoding=n.backupCodec.encoding;const d=a.mediaStreamTrack.getSettings(),h=(r=d.width)!==null&&r!==void 0?r:(o=a.dimensions)===null||o===void 0?void 0:o.width,m=(l=d.height)!==null&&l!==void 0?l:(u=a.dimensions)===null||u===void 0?void 0:u.height;return a.source===j.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1),yf(a.source===j.Source.ScreenShare,h,m,n)}function D1(a,e,n,r){const o=A1(a,e,n);let{encoding:l}=o[0];const u=Math.max(e,n);for(let d=0;d=u)break}if(r)switch(r){case"av1":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.7;break;case"vp9":l=Object.assign({},l),l.maxBitrate=l.maxBitrate*.85;break}return l}function A1(a,e,n){if(a)return E1;const r=e>n?e/n:n/e;return Math.abs(r-16/9)r?n/r:r/n;return Math.abs(o-16/9){if(u>=vf.length)return;const d=Math.min(a,e),m={rid:vf[u],scaleResolutionDownBy:Math.max(1,d/Math.min(l.width,l.height)),maxBitrate:l.encoding.maxBitrate},g=r&&l.encoding.maxFramerate?Math.min(r,l.encoding.maxFramerate):l.encoding.maxFramerate;g&&(m.maxFramerate=g);const y=br()||u===0;l.encoding.priority&&y&&(m.priority=l.encoding.priority,m.networkPriority=l.encoding.priority),o.push(m)}),An()&&qy()==="ios"){let l;o.forEach(d=>{l?d.maxFramerate&&d.maxFramerate>l&&(l=d.maxFramerate):l=d.maxFramerate});let u=!0;o.forEach(d=>{var h;d.maxFramerate!=l&&(u&&(u=!1,ke.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),ke.info('Setting framerate of encoding "'.concat((h=d.rid)!==null&&h!==void 0?h:"",'" to ').concat(l)),d.maxFramerate=l)})}return o}function Xv(a){if(a)return a.sort((e,n)=>{const{encoding:r}=e,{encoding:o}=n;return r.maxBitrate>o.maxBitrate?1:r.maxBitrateo.maxFramerate?1:-1:0})}class Zy{constructor(e){const n=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!n)throw new Error("invalid scalability mode");if(this.spatial=parseInt(n[1]),this.temporal=parseInt(n[2]),n.length>3)switch(n[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=n[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function M1(a){return a.source===j.Source.ScreenShare||a.constraints.height&&Ii(a.constraints.height)>=1080?"maintain-resolution":"balanced"}const P1=5e3;class Lc extends Qy{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3?arguments[3]:void 0;super(e,j.Kind.Video,n,r,o),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>R(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let l;try{l=yield this.getSenderStats()}catch(d){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:d}));return}const u=new Map(l.map(d=>[d.rid,d]));if(this.prevStats){let d=0;u.forEach((h,m)=>{var g;const y=(g=this.prevStats)===null||g===void 0?void 0:g.get(m);d+=Xc(h,y)}),this._currentBitrate=d}this.prevStats=u}),this.senderLock=new Ht}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var n;if(this.signalClient=e,!xt())return;const r=(n=this.sender)===null||n===void 0?void 0:n.getParameters();r&&(this.encodings=r.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},Jf))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.pauseUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0)l=m.value,d=!1,yield(u=l.sender)===null||u===void 0?void 0:u.replaceTrack(null)}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return R(this,void 0,void 0,function*(){var n,r,o,l,u;yield e.resumeUpstream.call(this);try{for(var d=!0,h=xi(this.simulcastCodecs.values()),m;m=yield h.next(),n=m.done,!n;d=!0){l=m.value,d=!1;const g=l;yield(u=g.sender)===null||u===void 0?void 0:u.replaceTrack(g.mediaStreamTrack)}}catch(g){r={error:g}}finally{try{!d&&!n&&(o=h.return)&&(yield o.call(h))}finally{if(r)throw r.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{n()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return R(this,void 0,void 0,function*(){const n=yield this.muteLock.lock();try{return this.isMuted?(this.source===j.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{n()}})}setTrackMuted(e){super.setTrackMuted(e);for(const n of this.simulcastCodecs.values())n.mediaStreamTrack.enabled=!e}getSenderStats(){return R(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const n=[],r=yield this.sender.getStats();return r.forEach(o=>{var l;if(o.type==="outbound-rtp"){const u={type:"video",streamId:o.id,frameHeight:o.frameHeight,frameWidth:o.frameWidth,framesPerSecond:o.framesPerSecond,framesSent:o.framesSent,firCount:o.firCount,pliCount:o.pliCount,nackCount:o.nackCount,packetsSent:o.packetsSent,bytesSent:o.bytesSent,qualityLimitationReason:o.qualityLimitationReason,qualityLimitationDurations:o.qualityLimitationDurations,qualityLimitationResolutionChanges:o.qualityLimitationResolutionChanges,rid:(l=o.rid)!==null&&l!==void 0?l:o.id,retransmittedPacketsSent:o.retransmittedPacketsSent,targetBitrate:o.targetBitrate,timestamp:o.timestamp},d=r.get(o.remoteId);d&&(u.jitter=d.jitter,u.packetsLost=d.packetsLost,u.roundTripTime=d.roundTripTime),n.push(u)}}),n.sort((o,l)=>{var u,d;return((u=l.frameWidth)!==null&&u!==void 0?u:0)-((d=o.frameWidth)!==null&&d!==void 0?d:0)}),n})}setPublishingQuality(e){const n=[];for(let r=rn.LOW;r<=rn.HIGH;r+=1)n.push(new Bf({quality:r,enabled:r<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(n)}restartTrack(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u;let d;if(e){const y=Qc({video:e});typeof y.video!="boolean"&&(d=y.video)}yield this.restart(d);try{for(var h=!0,m=xi(this.simulcastCodecs.values()),g;g=yield m.next(),n=g.done,!n;h=!0){l=g.value,h=!1;const y=l;y.sender&&((u=y.sender.transport)===null||u===void 0?void 0:u.state)!=="closed"&&(y.mediaStreamTrack=this.mediaStreamTrack.clone(),yield y.sender.replaceTrack(y.mediaStreamTrack))}}catch(y){r={error:y}}finally{try{!h&&!n&&(o=m.return)&&(yield o.call(m))}finally{if(r)throw r.error}}})}setProcessor(e){const n=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return R(this,arguments,void 0,function(r){var o=this;let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var u,d,h,m,g,y;if(yield n.setProcessor.call(o,r,l),!((g=o.processor)===null||g===void 0)&&g.processedTrack)try{for(var b=!0,T=xi(o.simulcastCodecs.values()),C;C=yield T.next(),u=C.done,!u;b=!0)m=C.value,b=!1,yield(y=m.sender)===null||y===void 0?void 0:y.replaceTrack(o.processor.processedTrack)}catch(k){d={error:k}}finally{try{!b&&!u&&(h=T.return)&&(yield h.call(T))}finally{if(d)throw d.error}}}()})}setDegradationPreference(e){return R(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const n=this.sender.getParameters();n.degradationPreference=e,this.sender.setParameters(n)}catch(n){this.log.warn("failed to set degradationPreference",Object.assign({error:n},this.logContext))}})}addSimulcastTrack(e,n){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const r={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:n};return this.simulcastCodecs.set(e,r),r}setSimulcastTrackSender(e,n){const r=this.simulcastCodecs.get(e);r&&(r.sender=n,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},P1))}setPublishingCodecs(e){return R(this,void 0,void 0,function*(){var n,r,o,l,u,d,h;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(e[0].qualities),[];this.subscribedCodecs=e;const m=[];try{for(n=!0,r=xi(e);o=yield r.next(),l=o.done,!l;n=!0){h=o.value,n=!1;const g=h;if(!this.codec||this.codec===g.codec)yield this.setPublishingLayers(g.qualities);else{const y=this.simulcastCodecs.get(g.codec);if(this.log.debug("try setPublishingCodec for ".concat(g.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:y})),!y||!y.sender){for(const b of g.qualities)if(b.enabled){m.push(g.codec);break}}else y.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(g.codec),this.logContext),yield Zv(y.sender,y.encodings,g.qualities,this.senderLock,this.log,this.logContext))}}}catch(g){u={error:g}}finally{try{!n&&!l&&(d=r.return)&&(yield d.call(r))}finally{if(u)throw u.error}}return m})}setPublishingLayers(e){return R(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield Zv(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),By()&&this.isInBackground&&this.source===j.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function Zv(a,e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=yield r.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},l),{sender:a,qualities:n,senderEncodings:e}));try{const d=a.getParameters(),{encodings:h}=d;if(!h)return;if(h.length!==e.length){o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},l),{encodings:h,senderEncodings:e}));return}let m=!1;!1&&h[0].scalabilityMode||h.forEach((y,b)=>{var T;let C=(T=y.rid)!==null&&T!==void 0?T:"";C===""&&(C="q");const k=Jy(C),w=n.find(O=>O.quality===k);w&&y.active!==w.enabled&&(m=!0,y.active=w.enabled,o.debug("setting layer ".concat(w.quality," to ").concat(y.active?"enabled":"disabled"),l),br()&&(w.enabled?(y.scaleResolutionDownBy=e[b].scaleResolutionDownBy,y.maxBitrate=e[b].maxBitrate,y.maxFrameRate=e[b].maxFrameRate):(y.scaleResolutionDownBy=4,y.maxBitrate=10,y.maxFrameRate=2)))}),m&&(d.encodings=h,o.debug("setting encodings",Object.assign(Object.assign({},l),{encodings:d.encodings})),yield a.setParameters(d))}finally{u()}})}function Jy(a){switch(a){case"f":return rn.HIGH;case"h":return rn.MEDIUM;case"q":return rn.LOW;default:return rn.HIGH}}function Jv(a,e,n,r){if(!n)return[new pa({quality:rn.HIGH,width:a,height:e,bitrate:0,ssrc:0})];if(r){const o=n[0].scalabilityMode,l=new Zy(o),u=[],d=l.suffix=="h"?1.5:2,h=l.suffix=="h"?2:3;for(let m=0;m{var l,u,d;const h=(l=o.scaleResolutionDownBy)!==null&&l!==void 0?l:1;let m=Jy((u=o.rid)!==null&&u!==void 0?u:"");return new pa({quality:m,width:Math.ceil(a/h),height:Math.ceil(e/h),bitrate:(d=o.maxBitrate)!==null&&d!==void 0?d:0,ssrc:0})})}const Wv="_lossy",$v="_reliable",x1=2*1e3,Ld="leave-reconnect";var dn;(function(a){a[a.New=0]="New",a[a.Connected=1]="Connected",a[a.Disconnected=2]="Disconnected",a[a.Reconnecting=3]="Reconnecting",a[a.Closed=4]="Closed"})(dn||(dn={}));class N1 extends xn.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var n;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Xf.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=dn.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=ke,this.handleDataChannel=r=>R(this,[r],void 0,function(o){var l=this;let{channel:u}=o;return function*(){if(u){if(u.label===$v)l.reliableDCSub=u;else if(u.label===Wv)l.lossyDCSub=u;else return;l.log.debug("on data channel ".concat(u.id,", ").concat(u.label),l.logContext),u.onmessage=l.handleDataMessage}}()}),this.handleDataMessage=r=>R(this,void 0,void 0,function*(){var o,l;const u=yield this.dataProcessLock.lock();try{let d;if(r.data instanceof ArrayBuffer)d=r.data;else if(r.data instanceof Blob)d=yield r.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:r.data}));return}const h=Mt.fromBinary(new Uint8Array(d));((o=h.value)===null||o===void 0?void 0:o.case)==="speaker"?this.emit(ne.ActiveSpeakersUpdate,h.value.value.speakers):(((l=h.value)===null||l===void 0?void 0:l.case)==="user"&&L1(h,h.value.value),this.emit(ne.DataPacketReceived,h))}finally{u()}}),this.handleDataError=r=>{const l=r.currentTarget.maxRetransmits===0?"lossy":"reliable";if(r instanceof ErrorEvent&&r.error){const{error:u}=r.error;this.log.error("DataChannel error on ".concat(l,": ").concat(r.message),Object.assign(Object.assign({},this.logContext),{error:u}))}else this.log.error("Unknown DataChannel error on ".concat(l),Object.assign(Object.assign({},this.logContext),{event:r}))},this.handleBufferedAmountLow=r=>{const l=r.currentTarget.maxRetransmits===0?_e.LOSSY:_e.RELIABLE;this.updateAndEmitDCBufferStatus(l)},this.handleDisconnect=(r,o)=>{if(this._isClosed)return;this.log.warn("".concat(r," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const l=h=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(h,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),this.close()},u=Date.now()-this.reconnectStart;let d=this.getNextRetryDelay({elapsedMs:u,retryCount:this.reconnectAttempts});if(d===null){l(u);return}r===Ld&&(d=0),this.log.debug("reconnecting in ".concat(d,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Tt.setTimeout(()=>this.attemptReconnect(o).finally(()=>this.reconnectTimeout=void 0),d)},this.waitForRestarted=()=>new Promise((r,o)=>{this.pcState===dn.Connected&&r();const l=()=>{this.off(ne.Disconnected,u),r()},u=()=>{this.off(ne.Restarted,l),o()};this.once(ne.Restarted,l),this.once(ne.Disconnected,u)}),this.updateAndEmitDCBufferStatus=r=>{const o=this.isBufferStatusLow(r);typeof o<"u"&&o!==this.dcBufferStatus.get(r)&&(this.dcBufferStatus.set(r,o),this.emit(ne.DCBufferStatusChanged,o,r))},this.isBufferStatusLow=r=>{const o=this.dataChannelForKind(r);if(o)return o.bufferedAmount<=o.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===He.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(sr.RR_SIGNAL_DISCONNECTED))},this.log=ei((n=e.loggerName)!==null&&n!==void 0?n:gn.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new Yf(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new Ht,this.dataProcessLock=new Ht,this.dcBufferStatus=new Map([[_e.LOSSY,!0],[_e.RELIABLE,!0]]),this.client.onParticipantUpdate=r=>this.emit(ne.ParticipantUpdate,r),this.client.onConnectionQuality=r=>this.emit(ne.ConnectionQualityUpdate,r),this.client.onRoomUpdate=r=>this.emit(ne.RoomUpdate,r),this.client.onSubscriptionError=r=>this.emit(ne.SubscriptionError,r),this.client.onSubscriptionPermissionUpdate=r=>this.emit(ne.SubscriptionPermissionUpdate,r),this.client.onSpeakersChanged=r=>this.emit(ne.SpeakersChanged,r),this.client.onStreamStateUpdate=r=>this.emit(ne.StreamStateChanged,r),this.client.onRequestResponse=r=>this.emit(ne.SignalRequestResponse,r)}get logContext(){var e,n,r,o,l,u,d,h;return{room:(n=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||n===void 0?void 0:n.name,roomID:(o=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.room)===null||o===void 0?void 0:o.sid,participant:(u=(l=this.latestJoinResponse)===null||l===void 0?void 0:l.participant)===null||u===void 0?void 0:u.identity,pID:(h=(d=this.latestJoinResponse)===null||d===void 0?void 0:d.participant)===null||h===void 0?void 0:h.sid}}join(e,n,r,o){return R(this,void 0,void 0,function*(){this.url=e,this.token=n,this.signalOpts=r,this.maxJoinAttempts=r.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const l=yield this.client.join(e,n,r,o);return this._isClosed=!1,this.latestJoinResponse=l,this.subscriberPrimary=l.subscriberPrimary,this.pcManager||(yield this.configure(l)),(!this.subscriberPrimary||l.fastPublish)&&this.negotiate(),this.clientConfiguration=l.clientConfiguration,l}catch(l){if(l instanceof Ie&&l.reason===Re.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts{r&&(r.close(),r.onbufferedamountlow=null,r.onclose=null,r.onclosing=null,r.onerror=null,r.onmessage=null,r.onopen=null)};n(this.lossyDC),n(this.lossyDCSub),n(this.reliableDC),n(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return R(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $n("a track with the same ID has already been published");return new Promise((n,r)=>{const o=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],r(new Ie("publication of local track timed out, no response from server",Re.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:l=>{clearTimeout(o),n(l)},reject:()=>{clearTimeout(o),r(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:n}=this.pendingTrackResolvers[e.track.id];n&&n(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(n){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:n}))}return!1}updateMuteStatus(e,n){this.client.sendMuteTrack(e,n)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return R(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return R(this,void 0,void 0,function*(){var n,r;if(this.pcManager&&this.pcManager.currentState!==We.NEW)return;this.participantSid=(n=e.participant)===null||n===void 0?void 0:n.sid;const o=this.makeRTCConfiguration(e);this.pcManager=new S1(o,e.subscriberPrimary,this.loggerOptions),this.emit(ne.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(l,u)=>{this.client.sendIceCandidate(l,u)},this.pcManager.onPublisherOffer=l=>{this.client.sendOffer(l)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(l,u,d)=>R(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(l),this.logContext),["closed","disconnected","failed"].includes(u)&&(this.publisherConnectionPromise=void 0),l===We.CONNECTED){const g=this.pcState===dn.New;this.pcState=dn.Connected,g&&this.emit(ne.Connected,e)}else l===We.FAILED&&this.pcState===dn.Connected&&(this.pcState=dn.Disconnected,this.handleDisconnect("peerconnection failed",d==="failed"?sr.RR_SUBSCRIBER_FAILED:sr.RR_PUBLISHER_FAILED));const h=this.client.isDisconnected||this.client.currentState===He.RECONNECTING,m=[We.FAILED,We.CLOSING,We.CLOSED].includes(l);h&&m&&!this._isClosed&&this.emit(ne.Offline)}),this.pcManager.onTrack=l=>{this.emit(ne.MediaTrackAdded,l.track,l.streams[0],l.receiver)},U1((r=e.serverInfo)===null||r===void 0?void 0:r.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>R(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,n)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:n})),this.pcManager.addIceCandidate(e,n))},this.client.onOffer=e=>R(this,void 0,void 0,function*(){if(!this.pcManager)return;const n=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(n)}),this.client.onLocalTrackPublished=e=>{var n;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(n=e.track)===null||n===void 0?void 0:n.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:r}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],r(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(ne.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(ne.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,n)=>{this.emit(ne.RemoteMute,e,n)},this.client.onSubscribedQualityUpdate=e=>{this.emit(ne.SubscribedQualityUpdate,e)},this.client.onClose=()=>{this.handleDisconnect("signal",sr.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case ur.DISCONNECT:this.emit(ne.Disconnected,e==null?void 0:e.reason),this.close();break;case ur.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Ld);break;case ur.RESUME:this.handleDisconnect(Ld)}}}makeRTCConfiguration(e){var n;const r=Object.assign({},this.rtcConfig);if(!((n=this.signalOpts)===null||n===void 0)&&n.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),r.encodedInsertableStreams=!0),e.iceServers&&!r.iceServers){const o=[];e.iceServers.forEach(l=>{const u={urls:l.urls};l.username&&(u.username=l.username),l.credential&&(u.credential=l.credential),o.push(u)}),r.iceServers=o}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Bs.ENABLED&&(r.iceTransportPolicy="relay"),r.sdpSemantics="unified-plan",r.continualGatheringPolicy="gather_continually",r}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(Wv,{ordered:!0,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel($v,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,n,r){return R(this,void 0,void 0,function*(){if(uf())return yield this.createTransceiverRTCRtpSender(e,n,r);if(df())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(uf())return this.createSimulcastTransceiverSender(e,n,r,o);if(df())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new ut("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,n,r){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const o=[];e.mediaStream&&o.push(e.mediaStream),Er(e)&&(e.codec=n.videoCodec);const l={direction:"sendonly",streams:o};return r&&(l.sendEncodings=r),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,l)).sender})}createSimulcastTransceiverSender(e,n,r,o){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");const l={direction:"sendonly"};o&&(l.sendEncodings=o);const u=yield this.pcManager.addPublisherTransceiver(n.mediaStreamTrack,l);if(r.videoCodec)return e.setSimulcastTrackSender(r.videoCodec,u.sender),u.sender})}createRTCRtpSender(e){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return R(this,void 0,void 0,function*(){var n,r,o;if(!this._isClosed){if(this.attemptingReconnect){ke.warn("already attempting reconnect, returning early",this.logContext);return}(((n=this.clientConfiguration)===null||n===void 0?void 0:n.resumeConnection)===Bs.DISABLED||((o=(r=this.pcManager)===null||r===void 0?void 0:r.currentState)!==null&&o!==void 0?o:We.NEW)===We.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(l){this.reconnectAttempts+=1;let u=!0;l instanceof ut?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:l})),u=!1):l instanceof or||(this.fullReconnectOnNext=!0),u?this.handleDisconnect("reconnect",sr.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(ne.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(n){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:n}))}return null}restartConnection(e){return R(this,void 0,void 0,function*(){var n,r,o;try{if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let l;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new or;l=yield this.join(e??this.url,this.token,this.signalOpts)}catch(u){throw u instanceof Ie&&u.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):new or}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(ne.SignalRestarted,l),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");(n=this.regionUrlProvider)===null||n===void 0||n.resetAttempts(),this.emit(ne.Restarted)}catch(l){const u=yield(r=this.regionUrlProvider)===null||r===void 0?void 0:r.getNextBestRegionUrl();if(u){yield this.restartConnection(u);return}else throw(o=this.regionUrlProvider)===null||o===void 0||o.resetAttempts(),l}})}resumeConnection(e){return R(this,void 0,void 0,function*(){var n;if(!this.url||!this.token)throw new ut("could not reconnect, url or token not saved");if(!this.pcManager)throw new ut("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(ne.Resuming);let r;try{this.setupSignalClientCallbacks(),r=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(o){let l="";throw o instanceof Error&&(l=o.message,this.log.error(o.message,Object.assign(Object.assign({},this.logContext),{error:o}))),o instanceof Ie&&o.reason===Re.NotAllowed?new ut("could not reconnect, token might be expired"):o instanceof Ie&&o.reason===Re.LeaveRequest?o:new or(l)}if(this.emit(ne.SignalResumed),r){const o=this.makeRTCConfiguration(r);this.pcManager.updateConfiguration(o)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==He.CONNECTED)throw new or("Signal connection got severed during reconnect");this.client.setReconnected(),((n=this.reliableDC)===null||n===void 0?void 0:n.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(ne.Resumed)})}waitForPCInitialConnection(e,n){return R(this,void 0,void 0,function*(){if(!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(n,e)})}waitForPCReconnected(){return R(this,void 0,void 0,function*(){this.pcState=dn.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Nt(x1),!this.pcManager)throw new ut("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=dn.Connected}catch(e){throw this.pcState=dn.Disconnected,new Ie("could not establish PC connection, ".concat(e.message),Re.InternalError)}})}publishRpcResponse(e,n,r,o){return R(this,void 0,void 0,function*(){const l=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcResponse",value:new V0({requestId:n,value:o?{case:"error",value:o.toProto()}:{case:"payload",value:r??""}})}});yield this.sendDataPacket(l,_e.RELIABLE)})}publishRpcAck(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcAck",value:new q0({requestId:n})}});yield this.sendDataPacket(r,_e.RELIABLE)})}sendDataPacket(e,n){return R(this,void 0,void 0,function*(){const r=e.toBinary();yield this.ensurePublisherConnected(n);const o=this.dataChannelForKind(n);o&&o.send(r),this.updateAndEmitDCBufferStatus(n)})}waitForBufferStatusLow(e){return new Promise((n,r)=>R(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))n();else{const o=()=>r("Engine closed");for(this.once(ne.Closing,o);!this.dcBufferStatus.get(e);)yield Nt(10);this.off(ne.Closing,o),n()}}))}ensureDataTransportConnected(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var l;if(!r.pcManager)throw new ut("PC manager is closed");const u=o?r.pcManager.subscriber:r.pcManager.publisher,d=o?"Subscriber":"Publisher";if(!u)throw new Ie("".concat(d," connection not set"),Re.InternalError);let h=!1;!o&&!r.dataChannelForKind(n,o)&&(r.createDataChannels(),h=!0),!h&&!o&&!r.pcManager.publisher.isICEConnected&&r.pcManager.publisher.getICEConnectionState()!=="checking"&&(h=!0),h&&r.negotiate();const m=r.dataChannelForKind(n,o);if((m==null?void 0:m.readyState)==="open")return;const g=new Date().getTime()+r.peerConnectionTimeout;for(;new Date().getTime()R(this,void 0,void 0,function*(){if(!this.pcManager){n(new of("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const r=new AbortController,o=()=>{r.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&n("cannot negotiate on closed engine"),this.on(ne.Closing,o),this.pcManager.publisher.once(mr.RTPVideoPayloadTypes,l=>{const u=new Map;l.forEach(d=>{const h=d.codec.toLowerCase();XE(h)&&u.set(d.payload,h)}),this.emit(ne.RTPVideoMapUpdate,u)});try{yield this.pcManager.negotiate(r),e()}catch(l){l instanceof of&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",sr.RR_UNKNOWN),n(l)}finally{this.off(ne.Closing,o)}}))})}dataChannelForKind(e,n){if(n){if(e===_e.LOSSY)return this.lossyDCSub;if(e===_e.RELIABLE)return this.reliableDCSub}else{if(e===_e.LOSSY)return this.lossyDC;if(e===_e.RELIABLE)return this.reliableDC}}sendSyncState(e,n){var r,o;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const l=this.pcManager.subscriber.getLocalDescription(),u=this.pcManager.subscriber.getRemoteDescription(),d=(o=(r=this.signalOpts)===null||r===void 0?void 0:r.autoSubscribe)!==null&&o!==void 0?o:!0,h=new Array,m=new Array;e.forEach(g=>{g.isDesired!==d&&h.push(g.trackSid),g.isEnabled||m.push(g.trackSid)}),this.client.sendSyncState(new ay({answer:l?Nc({sdp:l.sdp,type:l.type}):void 0,offer:u?Nc({sdp:u.sdp,type:u.type}):void 0,subscription:new Fc({trackSids:h,subscribe:!d,participantTracks:[]}),publishTracks:i1(n),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:m}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],n=(r,o)=>{(r==null?void 0:r.id)!==void 0&&r.id!==null&&e.push(new ry({label:r.label,id:r.id,target:o}))};return n(this.dataChannelForKind(_e.LOSSY),mn.PUBLISHER),n(this.dataChannelForKind(_e.RELIABLE),mn.PUBLISHER),n(this.dataChannelForKind(_e.LOSSY,!0),mn.SUBSCRIBER),n(this.dataChannelForKind(_e.RELIABLE,!0),mn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Tt.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){xt()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){xt()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class or extends Error{}function U1(a){return a!==void 0&&a>13}function L1(a,e){const n=a.participantIdentity?a.participantIdentity:e.participantIdentity;a.participantIdentity=n,e.participantIdentity=n;const r=a.destinationIdentities.length!==0?a.destinationIdentities:e.destinationIdentities;a.destinationIdentities=r,e.destinationIdentities=r}class bf{constructor(e,n){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=n}updateToken(e){this.token=e}isCloud(){return hf(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return R(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const n=this.regionSettings.regions.filter(r=>!this.attemptedRegions.find(o=>o.url===r.url));if(n.length>0){const r=n[0];return this.attemptedRegions.push(r),ke.debug("next region: ".concat(r.region)),r.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return R(this,void 0,void 0,function*(){const n=yield fetch("".concat(I1(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(n.ok){const r=yield n.json();return this.lastUpdateAt=Date.now(),r}else throw new Ie("Could not fetch region settings: ".concat(n.statusText),n.status===401?Re.NotAllowed:Re.InternalError,n.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function I1(a){return"".concat(a.protocol.replace("ws","http"),"//").concat(a.host,"/settings")}class Wy{get info(){return this._info}constructor(e,n,r){this.reader=n,this.totalByteSize=r,this._info=e,this.bytesReceived=0}}class j1 extends Wy{handleChunkReceived(e){var n;this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>R(this,void 0,void 0,function*(){try{const{done:n,value:r}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(r),{done:!1,value:r.content})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l=new Set;try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0){o=h.value,u=!1;const m=o;l.add(m)}}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return Array.from(l)})}}class B1 extends Wy{constructor(e,n,r){super(e,n,r),this.receivedChunks=new Map}handleChunkReceived(e){var n;const r=Oc(e.chunkIndex),o=this.receivedChunks.get(r);if(o&&o.version>e.version)return;this.receivedChunks.set(r,e),this.bytesReceived+=e.content.byteLength;const l=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(n=this.onProgress)===null||n===void 0||n.call(this,l)}[Symbol.asyncIterator](){const e=this.reader.getReader(),n=new TextDecoder;return{next:()=>R(this,void 0,void 0,function*(){try{const{done:r,value:o}=yield e.read();return r?{done:!0,value:void 0}:(this.handleChunkReceived(o),{done:!1,value:n.decode(o.content)})}catch{return{done:!0,value:void 0}}}),return(){return R(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return R(this,void 0,void 0,function*(){var e,n,r,o;let l="";try{for(var u=!0,d=xi(this),h;h=yield d.next(),e=h.done,!e;u=!0)o=h.value,u=!1,l+=o}catch(m){n={error:m}}finally{try{!u&&!e&&(r=d.return)&&(yield r.call(d))}finally{if(n)throw n.error}}return l})}}class z1{constructor(e,n,r){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=r,this.info=n}write(e){return this.defaultWriter.write(e)}close(){return R(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class q1 extends z1{}class $y extends j{constructor(e,n,r,o,l){super(e,r,l),this.sid=n,this.receiver=o}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?W.Muted:W.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const n=r=>{r.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",n),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(W.Ended,this))};e.addEventListener("removetrack",n)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return R(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),Jf)),a1()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var n;this.timeSyncHandle=requestAnimationFrame(()=>e());const r=(n=this.receiver)===null||n===void 0?void 0:n.getSynchronizationSources()[0];if(r){const{timestamp:o,rtpTimestamp:l}=r;l&&this.rtpTimestamp!==l&&(this.emit(W.TimeSyncUpdate,{timestamp:o,rtpTimestamp:l}),this.rtpTimestamp=l)}};e()}}class eb extends $y{constructor(e,n,r,o,l,u){super(e,n,j.Kind.Audio,r,u),this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const d=yield this.getReceiverStats();d&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(d,this.prevStats)),this.prevStats=d}),this.audioContext=o,this.webAudioPluginNodes=[],l&&(this.sinkId=l.deviceId)}setVolume(e){var n;for(const r of this.attachedElements)this.audioContext?(n=this.gainNode)===null||n===void 0||n.gain.setTargetAtTime(e,0,.1):r.volume=e;An()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(An())return 1;let e=0;return this.attachedElements.forEach(n=>{n.volume>e&&(e=n.volume)}),e}setSinkId(e){return R(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(n=>{if(ff(n))return n.setSinkId(e)}))})}attach(e){const n=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&ff(e)&&e.setSinkId(this.sinkId),this.audioContext&&n&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let n;return e?(n=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(n=super.detach(),this.disconnectWebAudio()),n}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,n){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(n.srcObject);let r=this.sourceNode;this.webAudioPluginNodes.forEach(o=>{r.connect(o),r=o}),this.gainNode=e.createGain(),r.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(W.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(o=>{this.emit(W.AudioPlaybackFailed,o)})}disconnectWebAudio(){var e,n;(e=this.gainNode)===null||e===void 0||e.disconnect(),(n=this.sourceNode)===null||n===void 0||n.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n;return e.forEach(r=>{r.type==="inbound-rtp"&&(n={type:"audio",streamId:r.id,timestamp:r.timestamp,jitter:r.jitter,bytesReceived:r.bytesReceived,concealedSamples:r.concealedSamples,concealmentEvents:r.concealmentEvents,silentConcealedSamples:r.silentConcealedSamples,silentConcealmentEvents:r.silentConcealmentEvents,totalAudioEnergy:r.totalAudioEnergy,totalSamplesDuration:r.totalSamplesDuration})}),n})}}const Id=100;class V1 extends $y{constructor(e,n,r,o,l){super(e,n,j.Kind.Video,r,l),this.elementInfos=[],this.monitorReceiver=()=>R(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const u=yield this.getReceiverStats();u&&this.prevStats&&this.receiver&&(this._currentBitrate=Xc(u,this.prevStats)),this.prevStats=u}),this.debouncedHandleResize=Qf(()=>{this.updateDimensions()},Id),this.adaptiveStreamSettings=o}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(n=>{e?fr(this._mediaStreamTrack,n):lr(this._mediaStreamTrack,n)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(n=>n.element===e)===void 0){const n=new H1(e);this.observeElementInfo(n)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(n=>n===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const n=this.elementInfos.filter(r=>r===e);for(const r of n)r.stopObserving();this.elementInfos=this.elementInfos.filter(r=>r!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let n=[];if(e)return this.stopObservingElement(e),super.detach(e);n=super.detach();for(const r of n)this.stopObservingElement(r);return n}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return R(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let n,r="",o=new Map;return e.forEach(l=>{l.type==="inbound-rtp"?(r=l.codecId,n={type:"video",streamId:l.id,framesDecoded:l.framesDecoded,framesDropped:l.framesDropped,framesReceived:l.framesReceived,packetsReceived:l.packetsReceived,packetsLost:l.packetsLost,frameWidth:l.frameWidth,frameHeight:l.frameHeight,pliCount:l.pliCount,firCount:l.firCount,nackCount:l.nackCount,jitter:l.jitter,timestamp:l.timestamp,bytesReceived:l.bytesReceived,decoderImplementation:l.decoderImplementation}):l.type==="codec"&&o.set(l.id,l)}),n&&r!==""&&o.get(r)&&(n.mimeType=o.get(r).mimeType),n})}stopObservingElement(e){const n=this.elementInfos.filter(r=>r.element===e);for(const r of n)this.stopObservingElementInfo(r)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return R(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,n;const r=this.elementInfos.reduce((d,h)=>Math.max(d,h.visibilityChangedAt||0),0),o=!((n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&n!==void 0)||n?this.isInBackground:!1,l=this.elementInfos.some(d=>d.pictureInPicture),u=this.elementInfos.some(d=>d.visible)&&!o||l;if(this.lastVisible!==u){if(!u&&Date.now()-r{this.updateVisibility()},Id);return}this.lastVisible=u,this.emit(W.VisibilityChanged,u,this)}}updateDimensions(){var e,n;let r=0,o=0;const l=this.getPixelDensity();for(const u of this.elementInfos){const d=u.width()*l,h=u.height()*l;d+h>r+o&&(r=d,o=h)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===r&&((n=this.lastDimensions)===null||n===void 0?void 0:n.height)===o||(this.lastDimensions={width:r,height:o},this.emit(W.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const n=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return n==="screen"?Pv():n||(Pv()>2?2:1)}}class H1{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,n){this.onVisibilityChanged=r=>{var o;const{target:l,isIntersecting:u}=r;l===this.element&&(this.isIntersecting=u,this.isPiP=Ms(this.element),this.visibilityChangedAt=Date.now(),(o=this.handleVisibilityChanged)===null||o===void 0||o.call(this))},this.onEnterPiP=()=>{var r,o,l;(o=(r=window.documentPictureInPicture)===null||r===void 0?void 0:r.window)===null||o===void 0||o.addEventListener("pagehide",this.onLeavePiP),this.isPiP=Ms(this.element),(l=this.handleVisibilityChanged)===null||l===void 0||l.call(this)},this.onLeavePiP=()=>{var r;this.isPiP=Ms(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.element=e,this.isIntersecting=n??Sf(e),this.isPiP=xt()&&Ms(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,n,r;this.isIntersecting=Sf(this.element),this.isPiP=Ms(this.element),this.element.handleResize=()=>{var o;(o=this.handleResize)===null||o===void 0||o.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Nv().observe(this.element),xv().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(r=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||r===void 0||r.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,n,r,o,l;(e=Nv())===null||e===void 0||e.unobserve(this.element),(n=xv())===null||n===void 0||n.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(r=window.documentPictureInPicture)===null||r===void 0||r.removeEventListener("enter",this.onEnterPiP),(l=(o=window.documentPictureInPicture)===null||o===void 0?void 0:o.window)===null||l===void 0||l.removeEventListener("pagehide",this.onLeavePiP)}}function Ms(a){var e,n;return document.pictureInPictureElement===a?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sf(a,(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window):!1}function Sf(a,e){const n=e||window;let r=a.offsetTop,o=a.offsetLeft;const l=a.offsetWidth,u=a.offsetHeight,{hidden:d}=a,{display:h}=getComputedStyle(a);for(;a.offsetParent;)a=a.offsetParent,r+=a.offsetTop,o+=a.offsetLeft;return rn.pageYOffset&&o+l>n.pageXOffset&&!d&&h!=="none"}class Pi extends xn.EventEmitter{constructor(e,n,r,o){var l;super(),this.metadataMuted=!1,this.encryption=Vt.NONE,this.log=ke,this.handleMuted=()=>{this.emit(W.Muted)},this.handleUnmuted=()=>{this.emit(W.Unmuted)},this.log=ei((l=o==null?void 0:o.loggerName)!==null&&l!==void 0?l:gn.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=n,this.trackName=r,this.source=j.Source.Unknown}setTrack(e){this.track&&(this.track.off(W.Muted,this.handleMuted),this.track.off(W.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(W.Muted,this.handleMuted),e.on(W.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),Me(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==Vt.NONE}get audioTrack(){if(ti(this.track))return this.track}get videoTrack(){if(Er(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=j.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===j.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(a){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(a.SubscriptionStatus||(a.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(a.PermissionStatus||(a.PermissionStatus={}))})(Pi);class Tf extends Pi{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.handleTrackEnded=()=>{this.emit(W.Ended)},this.updateInfo(n),this.setTrack(r)}setTrack(e){this.track&&this.track.off(W.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(W.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return R(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return R(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ti(this.track)){const n=this.track.getSourceTrackSettings(),r=new Set;return n.autoGainControl&&r.add(On.TF_AUTO_GAIN_CONTROL),n.echoCancellation&&r.add(On.TF_ECHO_CANCELLATION),n.noiseSuppression&&r.add(On.TF_NOISE_SUPPRESSION),n.channelCount&&n.channelCount>1&&r.add(On.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||r.add(On.TF_NO_DTX),this.track.enhancedNoiseCancellation&&r.add(On.TF_ENHANCED_NOISE_CANCELLATION),Array.from(r.values())}else return[]}}var Ni;(function(a){a.Excellent="excellent",a.Good="good",a.Poor="poor",a.Lost="lost",a.Unknown="unknown"})(Ni||(Ni={}));function G1(a){switch(a){case xs.EXCELLENT:return Ni.Excellent;case xs.GOOD:return Ni.Good;case xs.POOR:return Ni.Poor;case xs.LOST:return Ni.Lost;default:return Ni.Unknown}}class tb extends xn.EventEmitter{get logContext(){var e,n;return Object.assign({},(n=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||n===void 0?void 0:n.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===qs.AGENT}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,n,r,o,l,u){let d=arguments.length>6&&arguments[6]!==void 0?arguments[6]:qs.STANDARD;var h;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Ni.Unknown,this.log=ke,this.log=ei((h=u==null?void 0:u.loggerName)!==null&&h!==void 0?h:gn.Participant),this.loggerOptions=u,this.setMaxListeners(100),this.sid=e,this.identity=n,this.name=r,this.metadata=o,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=d,this._attributes=l??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,n]of this.trackPublications)if(n.source===e)return n}getTrackPublicationByName(e){for(const[,n]of this.trackPublications)if(n.trackName===e)return n}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const n=this.getTrackPublication(j.Source.Camera);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const n=this.getTrackPublication(j.Source.Microphone);return!(!((e=n==null?void 0:n.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(j.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,this.log.trace("update participant info",Object.assign(Object.assign({},this.logContext),{info:e})),!0)}_setMetadata(e){const n=this.metadata!==e,r=this.metadata;this.metadata=e,n&&this.emit(F.ParticipantMetadataChanged,r)}_setName(e){const n=this.name!==e;this.name=e,n&&this.emit(F.ParticipantNameChanged,e)}_setAttributes(e){const n=r1(this.attributes,e);this._attributes=e,Object.keys(n).length>0&&this.emit(F.AttributesChanged,n)}setPermissions(e){var n,r,o,l,u,d;const h=this.permissions,m=e.canPublish!==((n=this.permissions)===null||n===void 0?void 0:n.canPublish)||e.canSubscribe!==((r=this.permissions)===null||r===void 0?void 0:r.canSubscribe)||e.canPublishData!==((o=this.permissions)===null||o===void 0?void 0:o.canPublishData)||e.hidden!==((l=this.permissions)===null||l===void 0?void 0:l.hidden)||e.recorder!==((u=this.permissions)===null||u===void 0?void 0:u.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((g,y)=>{var b;return g!==((b=this.permissions)===null||b===void 0?void 0:b.canPublishSources[y])})||e.canSubscribeMetrics!==((d=this.permissions)===null||d===void 0?void 0:d.canSubscribeMetrics);return this.permissions=e,m&&this.emit(F.ParticipantPermissionsChanged,h),m}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(F.IsSpeakingChanged,e))}setConnectionQuality(e){const n=this._connectionQuality;this._connectionQuality=G1(e),n!==this._connectionQuality&&this.emit(F.ConnectionQualityChanged,this._connectionQuality)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(n=>ti(n.track)&&n.track.setAudioContext(e))}addTrackPublication(e){e.on(W.Muted,()=>{this.emit(F.TrackMuted,e)}),e.on(W.Unmuted,()=>{this.emit(F.TrackUnmuted,e)});const n=e;switch(n.track&&(n.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case j.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case j.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function F1(a){var e,n,r;if(!a.participantSid&&!a.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new ny({participantIdentity:(e=a.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(n=a.participantSid)!==null&&n!==void 0?n:"",allTracks:(r=a.allowAll)!==null&&r!==void 0?r:!1,trackSids:a.allowedTrackSids||[]})}const hc=15e3;class Y1 extends tb{constructor(e,n,r,o,l){super(e,n,void 0,void 0,void 0,{loggerName:o.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=Vt.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Vy)},this.handleReconnected=()=>{var u,d;(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.resolve)===null||d===void 0||d.call(u),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var u,d;this.reconnectFuture&&(this.reconnectFuture.promise.catch(h=>this.log.warn(h.message,this.logContext)),(d=(u=this.reconnectFuture)===null||u===void 0?void 0:u.reject)===null||d===void 0||d.call(u,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=u=>{const{requestId:d,reason:h,message:m}=u,g=this.pendingSignalRequests.get(d);g&&(h!==zf.OK&&g.reject(new Ov(m,h)),this.pendingSignalRequests.delete(d))},this.handleDataPacket=u=>{switch(u.value.case){case"rpcResponse":let d=u.value.value,h=null,m=null;d.value.case==="payload"?h=d.value.value:d.value.case==="error"&&(m=et.fromProto(d.value.value)),this.handleIncomingRpcResponse(d.requestId,h,m);break;case"rpcAck":let g=u.value.value;this.handleIncomingRpcAck(g.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(u=>F1(u)))},this.onTrackUnmuted=u=>{this.onTrackMuted(u,u.isUpstreamPaused)},this.onTrackMuted=(u,d)=>{if(d===void 0&&(d=!0),!u.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Me(u)));return}this.engine.updateMuteStatus(u.sid,d)},this.onTrackUpstreamPaused=u=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,!0)},this.onTrackUpstreamResumed=u=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Me(u))),this.onTrackMuted(u,u.isMuted)},this.onTrackFeatureUpdate=u=>{const d=this.audioTrackPublications.get(u.sid);if(!d){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(u.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(d.trackSid,d.getTrackFeatures())},this.handleSubscribedQualityUpdate=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;if(!(!((y=this.roomOptions)===null||y===void 0)&&y.dynacast))return;const T=this.videoTrackPublications.get(u.trackSid);if(!T){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}if(u.subscribedCodecs.length>0){if(!T.videoTrack)return;const O=yield T.videoTrack.setPublishingCodecs(u.subscribedCodecs);try{for(var C=!0,k=xi(O),w;w=yield k.next(),d=w.done,!d;C=!0){g=w.value,C=!1;const V=g;IE(V)&&(this.log.debug("publish ".concat(V," for ").concat(T.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Me(T))),yield this.publishAdditionalCodecForTrack(T.videoTrack,V,T.options))}}catch(V){h={error:V}}finally{try{!C&&!d&&(m=k.return)&&(yield m.call(k))}finally{if(h)throw h.error}}}else u.subscribedQualities.length>0&&(yield(b=T.videoTrack)===null||b===void 0?void 0:b.setPublishingLayers(u.subscribedQualities))}),this.handleLocalTrackUnpublished=u=>{const d=this.trackPublications.get(u.trackSid);if(!d){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:u.trackSid}));return}this.unpublishTrack(d.track)},this.handleTrackEnded=u=>R(this,void 0,void 0,function*(){if(u.source===j.Source.ScreenShare||u.source===j.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Me(u))),this.unpublishTrack(u);else if(u.isUserProvided)yield u.mute();else if(ha(u)||Ai(u))try{if(xt())try{const d=yield navigator==null?void 0:navigator.permissions.query({name:u.source===j.Source.Camera?"camera":"microphone"});if(d&&d.state==="denied")throw this.log.warn("user has revoked access to ".concat(u.source),Object.assign(Object.assign({},this.logContext),Me(u))),d.onchange=()=>{d.state!=="denied"&&(u.isMuted||u.restartTrack(),d.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}u.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Me(u))),ha(u)?yield u.restartTrack({deviceId:"default"}):yield u.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Me(u))),yield u.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=r,this.roomOptions=o,this.setupEngine(r),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=l}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==Vt.NONE}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setupEngine(e){this.engine=e,this.engine.on(ne.RemoteMute,(n,r)=>{const o=this.trackPublications.get(n);!o||!o.track||(r?o.mute():o.unmute())}),this.engine.on(ne.Connected,this.handleReconnected).on(ne.SignalRestarted,this.handleReconnected).on(ne.SignalResumed,this.handleReconnected).on(ne.Restarting,this.handleReconnecting).on(ne.Resuming,this.handleReconnecting).on(ne.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(ne.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(ne.Disconnected,this.handleDisconnected).on(ne.SignalRequestResponse,this.handleSignalRequestResponse).on(ne.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return R(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return R(this,arguments,void 0,function(n){var r=this;let{metadata:o,name:l,attributes:u}=n;return function*(){return new Promise((d,h)=>R(r,void 0,void 0,function*(){var m,g;try{let y=!1;const b=yield this.engine.client.sendUpdateLocalMetadata((m=o??this.metadata)!==null&&m!==void 0?m:"",(g=l??this.name)!==null&&g!==void 0?g:"",u),T=performance.now();for(this.pendingSignalRequests.set(b,{resolve:d,reject:C=>{h(C),y=!0},values:{name:l,metadata:o,attributes:u}});performance.now()-T<5e3&&!y;){if((!l||this.name===l)&&(!o||this.metadata===o)&&(!u||Object.entries(u).every(C=>{let[k,w]=C;return this.attributes[k]===w||w===""&&!this.attributes[k]}))){this.pendingSignalRequests.delete(b),d();return}yield Nt(50)}h(new Ov("Request to update local metadata timed out","TimeoutError"))}catch(y){y instanceof Error&&h(y)}}))}()})}setCameraEnabled(e,n,r){return this.setTrackEnabled(j.Source.Camera,e,n,r)}setMicrophoneEnabled(e,n,r){return this.setTrackEnabled(j.Source.Microphone,e,n,r)}setScreenShareEnabled(e,n,r){return this.setTrackEnabled(j.Source.ScreenShare,e,n,r)}setPermissions(e){const n=this.permissions,r=super.setPermissions(e);return r&&n&&this.emit(F.ParticipantPermissionsChanged,n),r}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){this.encryptionType=e?Vt.GCM:Vt.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,n,r,o){return R(this,void 0,void 0,function*(){var l,u;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:n})),this.republishPromise&&(yield this.republishPromise);let d=this.getTrackPublication(e);if(n)if(d)yield d.unmute();else{let h;if(this.pendingPublishing.has(e)){const m=yield this.waitForPendingPublicationOfSource(e);return m||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield m==null?void 0:m.unmute(),m}this.pendingPublishing.add(e);try{switch(e){case j.Source.Camera:h=yield this.createTracks({video:(l=r)!==null&&l!==void 0?l:!0});break;case j.Source.Microphone:h=yield this.createTracks({audio:(u=r)!==null&&u!==void 0?u:!0});break;case j.Source.ScreenShare:h=yield this.createScreenTracks(Object.assign({},r));break;default:throw new $n(e)}}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m instanceof Error&&this.emit(F.MediaDevicesError,m),this.pendingPublishing.delete(e),m}try{const m=[];for(const y of h)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Me(y))),m.push(this.publishTrack(y,o));[d]=yield Promise.all(m)}catch(m){throw h==null||h.forEach(g=>{g.stop()}),m}finally{this.pendingPublishing.delete(e)}}else if(!(d!=null&&d.track)&&this.pendingPublishing.has(e)&&(d=yield this.waitForPendingPublicationOfSource(e),d||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),d&&d.track)if(e===j.Source.ScreenShare){d=yield this.unpublishTrack(d.track);const h=this.getTrackPublication(j.Source.ScreenShareAudio);h&&h.track&&this.unpublishTrack(h.track)}else yield d.mute();return d})}enableCameraAndMicrophone(){return R(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(j.Source.Camera)||this.pendingPublishing.has(j.Source.Microphone))){this.pendingPublishing.add(j.Source.Camera),this.pendingPublishing.add(j.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(n=>this.publishTrack(n)))}finally{this.pendingPublishing.delete(j.Source.Camera),this.pendingPublishing.delete(j.Source.Microphone)}}})}createTracks(e){return R(this,void 0,void 0,function*(){var n,r;e??(e={});const o=Hy(e,(n=this.roomOptions)===null||n===void 0?void 0:n.audioCaptureDefaults,(r=this.roomOptions)===null||r===void 0?void 0:r.videoCaptureDefaults),{audioProcessor:l,videoProcessor:u,optionsWithoutProcessor:d}=Ff(o),h=Qc(d);let m;try{m=yield navigator.mediaDevices.getUserMedia(h)}catch(g){throw g instanceof Error&&(h.audio&&(this.microphoneError=g),h.video&&(this.cameraError=g)),g}return h.audio&&(this.microphoneError=void 0,this.emit(F.AudioStreamAcquired)),h.video&&(this.cameraError=void 0),Promise.all(m.getTracks().map(g=>R(this,void 0,void 0,function*(){const y=g.kind==="audio";let b;const T=y?h.audio:h.video;typeof T!="boolean"&&(b=T);const C=Xy(g,b,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone,C.setAudioContext(this.audioContext)),C.mediaStream=m,ti(C)&&l?yield C.setProcessor(l):Er(C)&&u&&(yield C.setProcessor(u)),C})))})}createScreenTracks(e){return R(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Vf("getDisplayMedia not supported");e.resolution===void 0&&!HE()&&(e.resolution=Hf.h1080fps30.resolution);const n=n1(e),r=yield navigator.mediaDevices.getDisplayMedia(n),o=r.getVideoTracks();if(o.length===0)throw new $n("no video track found");const l=new Lc(o[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=j.Source.ScreenShare,e.contentHint&&(l.mediaStreamTrack.contentHint=e.contentHint);const u=[l];if(r.getAudioTracks().length>0){this.emit(F.AudioStreamAcquired);const d=new Uc(r.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});d.source=j.Source.ScreenShareAudio,u.push(d)}return u})}publishTrack(e,n){return R(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,n)})}publishOrRepublishTrack(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g;ha(r)&&r.setAudioContext(l.audioContext),yield(d=l.reconnectFuture)===null||d===void 0?void 0:d.promise,l.republishPromise&&!u&&(yield l.republishPromise),hr(r)&&l.pendingPublishPromises.has(r)&&(yield l.pendingPublishPromises.get(r));let y;if(r instanceof MediaStreamTrack)y=r.getConstraints();else{y=r.constraints;let O;switch(r.source){case j.Source.Microphone:O="audioinput";break;case j.Source.Camera:O="videoinput"}O&&l.activeDeviceMap.has(O)&&(y=Object.assign(Object.assign({},y),{deviceId:l.activeDeviceMap.get(O)}))}if(r instanceof MediaStreamTrack)switch(r.kind){case"audio":r=new Uc(r,y,!0,l.audioContext,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;case"video":r=new Lc(r,y,!0,{loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});break;default:throw new $n("unsupported MediaStreamTrack kind ".concat(r.kind))}else r.updateLoggerOptions({loggerName:l.roomOptions.loggerName,loggerContextCb:()=>l.logContext});let b;if(l.trackPublications.forEach(O=>{O.track&&O.track===r&&(b=O)}),b)return l.log.warn("track has already been published, skipping",Object.assign(Object.assign({},l.logContext),Me(b))),b;const T="channelCount"in r.mediaStreamTrack.getSettings()&&r.mediaStreamTrack.getSettings().channelCount===2||r.mediaStreamTrack.getConstraints().channelCount===2,C=(h=o==null?void 0:o.forceStereo)!==null&&h!==void 0?h:T;C&&(o||(o={}),o.dtx===void 0&&l.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},l.logContext),Me(r))),o.red===void 0&&l.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(m=o.dtx)!==null&&m!==void 0||(o.dtx=!1),(g=o.red)!==null&&g!==void 0||(o.red=!1));const k=Object.assign(Object.assign({},l.roomOptions.publishDefaults),o);!GE()&&l.roomOptions.e2ee&&(l.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},l.logContext)),k.simulcast=!1),k.source&&(r.source=k.source);const w=l.publish(r,k,C);l.pendingPublishPromises.set(r,w);try{return yield w}catch(O){throw O}finally{l.pendingPublishPromises.delete(r)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Me(e))),!1;const{canPublish:n,canPublishSources:r}=this.permissions;return n&&(r.length===0||r.map(o=>s1(o)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Me(e))),!1)}publish(e,n,r){return R(this,void 0,void 0,function*(){var o,l,u,d,h,m,g,y,b,T;if(!this.hasPermissionsToPublish(e))throw new wE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(_=>hr(e)&&_.source===e.source)&&e.source!==j.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),Me(e))),n.stopMicTrackOnMute&&ti(e)&&(e.stopOnMute=!0),e.source===j.Source.ScreenShare&&br()&&(n.simulcast=!1),n.videoCodec==="av1"&&!zE()&&(n.videoCodec=void 0),n.videoCodec==="vp9"&&!qE()&&(n.videoCodec=void 0),n.videoCodec===void 0&&(n.videoCodec=gf),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(_=>n.videoCodec===Dc(_.mime))||(n.videoCodec=Dc(this.enabledPublishVideoCodecs[0].mime)));const k=n.videoCodec;e.on(W.Muted,this.onTrackMuted),e.on(W.Unmuted,this.onTrackUnmuted),e.on(W.Ended,this.handleTrackEnded),e.on(W.UpstreamPaused,this.onTrackUpstreamPaused),e.on(W.UpstreamResumed,this.onTrackUpstreamResumed),e.on(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const w=new Jd({cid:e.mediaStreamTrack.id,name:n.name,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),disableDtx:!(!((o=n.dtx)!==null&&o!==void 0)||o),encryption:this.encryptionType,stereo:r,disableRed:this.isE2EEEnabled||!(!((l=n.red)!==null&&l!==void 0)||l),stream:n==null?void 0:n.stream,backupCodecPolicy:n==null?void 0:n.backupCodecPolicy});let O;if(e.kind===j.Kind.Video){let _={width:0,height:0};try{_=yield e.waitForDimensions()}catch{const $=(d=(u=this.roomOptions.videoCaptureDefaults)===null||u===void 0?void 0:u.resolution)!==null&&d!==void 0?d:Hs.h720.resolution;_={width:$.width,height:$.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{dims:_}))}w.width=_.width,w.height=_.height,Ai(e)&&(Is(k)&&(e.source===j.Source.ScreenShare&&(n.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),Me(e))))),n.scalabilityMode=(h=n.scalabilityMode)!==null&&h!==void 0?h:"L3T3_KEY"),w.simulcastCodecs=[new Zd({codec:k,cid:e.mediaStreamTrack.id})],n.backupCodec===!0&&(n.backupCodec={codec:gf}),n.backupCodec&&k!==n.backupCodec.codec&&w.encryption===Vt.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),w.simulcastCodecs.push(new Zd({codec:n.backupCodec.codec,cid:""})))),O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n),w.layers=Jv(w.width,w.height,O,Is(n.videoCodec))}else e.kind===j.Kind.Audio&&(O=[{maxBitrate:(m=n.audioPreset)===null||m===void 0?void 0:m.maxBitrate,priority:(y=(g=n.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&y!==void 0?y:"high",networkPriority:(T=(b=n.audioPreset)===null||b===void 0?void 0:b.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const V=()=>R(this,void 0,void 0,function*(){var _,H,$;if(!this.engine.pcManager)throw new ut("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,n,O),Ai(e)&&((_=n.degradationPreference)!==null&&_!==void 0||(n.degradationPreference=M1(e)),e.setDegradationPreference(n.degradationPreference)),O)if(br()&&e.kind===j.Kind.Audio){let ie;for(const X of this.engine.pcManager.publisher.getTransceivers())if(X.sender===e.sender){ie=X;break}ie&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:ie,codec:"opus",maxbr:!((H=O[0])===null||H===void 0)&&H.maxBitrate?O[0].maxBitrate/1e3:0})}else e.codec&&Is(e.codec)&&(!(($=O[0])===null||$===void 0)&&$.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:w.cid,codec:e.codec,maxbr:O[0].maxBitrate/1e3});yield this.engine.negotiate()});let Q;if(this.enabledPublishVideoCodecs.length>0)Q=(yield Promise.all([this.engine.addTrack(w),V()]))[0];else{Q=yield this.engine.addTrack(w);let _;if(Q.codecs.forEach(H=>{_===void 0&&(_=H.mimeType)}),_&&e.kind===j.Kind.Video){const H=Dc(_);H!==k&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Me(e)),{codec:H})),n.videoCodec=H,O=yf(e.source===j.Source.ScreenShare,w.width,w.height,n))}yield V()}const U=new Tf(e.kind,Q,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return U.options=n,e.sid=Q.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:O,trackInfo:Q})),Ai(e)?e.startMonitor(this.engine.client):ha(e)&&e.startMonitor(),this.addTrackPublication(U),this.emit(F.LocalTrackPublished,U),U})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,n,r){return R(this,void 0,void 0,function*(){var o;if(this.encryptionType!==Vt.NONE)return;let l;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(l=T)}),!l)throw new $n("track is not published");if(!Ai(e))throw new $n("track is not a video track");const u=Object.assign(Object.assign({},(o=this.roomOptions)===null||o===void 0?void 0:o.publishDefaults),r),d=O1(e,n,u);if(!d){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Me(e)));return}const h=e.addSimulcastTrack(n,d);if(!h)return;const m=new Jd({cid:h.mediaStreamTrack.id,type:j.kindToProto(e.kind),muted:e.isMuted,source:j.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:u.videoCodec,cid:h.mediaStreamTrack.id}]});if(m.layers=Jv(m.width,m.height,d),!this.engine||this.engine.isClosed)throw new ut("cannot publish track when not connected");const g=()=>R(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,h,u,d),yield this.engine.negotiate()}),b=(yield Promise.all([this.engine.addTrack(m),g()]))[0];this.log.debug("published ".concat(n," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:d,trackInfo:b}))})}unpublishTrack(e,n){return R(this,void 0,void 0,function*(){var r,o;if(hr(e)){const m=this.pendingPublishPromises.get(e);m&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Me(e))),yield m)}const l=this.getPublicationForTrack(e),u=l?Me(l):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),u)),!l||!l.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),u));return}e=l.track,e.off(W.Muted,this.onTrackMuted),e.off(W.Unmuted,this.onTrackUnmuted),e.off(W.Ended,this.handleTrackEnded),e.off(W.UpstreamPaused,this.onTrackUpstreamPaused),e.off(W.UpstreamResumed,this.onTrackUpstreamResumed),e.off(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),n===void 0&&(n=(o=(r=this.roomOptions)===null||r===void 0?void 0:r.stopLocalTrackOnUnpublish)!==null&&o!==void 0?o:!0),n?e.stop():e.stopMonitor();let d=!1;const h=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentStatethis.unpublishTrack(r)))).filter(r=>!!r)})}republishAllTracks(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){r.republishPromise&&(yield r.republishPromise),r.republishPromise=new Promise((l,u)=>R(r,void 0,void 0,function*(){try{const d=[];this.trackPublications.forEach(h=>{h.track&&(n&&(h.options=Object.assign(Object.assign({},h.options),n)),d.push(h))}),yield Promise.all(d.map(h=>R(this,void 0,void 0,function*(){const m=h.track;yield this.unpublishTrack(m,!1),o&&!m.isMuted&&m.source!==j.Source.ScreenShare&&m.source!==j.Source.ScreenShareAudio&&(ha(m)||Ai(m))&&!m.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:h.trackSid})),yield m.restartTrack()),yield this.publishOrRepublishTrack(m,h.options,!0)}))),l()}catch(d){u(d)}finally{this.republishPromise=void 0}})),yield r.republishPromise}()})}publishData(e){return R(this,arguments,void 0,function(n){var r=this;let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const l=o.reliable?_e.RELIABLE:_e.LOSSY,u=o.destinationIdentities,d=o.topic,h=new Mt({kind:l,value:{case:"user",value:new j0({participantIdentity:r.identity,payload:n,destinationIdentities:u,topic:d})}});yield r.engine.sendDataPacket(h,l)}()})}publishDtmf(e,n){return R(this,void 0,void 0,function*(){const r=new Mt({kind:_e.RELIABLE,value:{case:"sipDtmf",value:new B0({code:e,digit:n})}});yield this.engine.sendDataPacket(r,_e.RELIABLE)})}sendChatMessage(e,n){return R(this,void 0,void 0,function*(){const r={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:n==null?void 0:n.attachments},o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}editChatMessage(e,n){return R(this,void 0,void 0,function*(){const r=Object.assign(Object.assign({},n),{message:e,editTimestamp:Date.now()}),o=new Mt({value:{case:"chatMessage",value:new Gd(Object.assign(Object.assign({},r),{timestamp:Ge.parse(r.timestamp),editTimestamp:Ge.parse(r.editTimestamp)}))}});return yield this.engine.sendDataPacket(o,_e.RELIABLE),this.emit(F.ChatMessage,r),r})}sendText(e,n){return R(this,void 0,void 0,function*(){var r;const o=crypto.randomUUID(),u=new TextEncoder().encode(e).byteLength,d=(r=n==null?void 0:n.attachments)===null||r===void 0?void 0:r.map(()=>crypto.randomUUID()),h=new Array(d?d.length+1:1).fill(0),m=(y,b)=>{var T;h[b]=y;const C=h.reduce((k,w)=>k+w,0);(T=n==null?void 0:n.onProgress)===null||T===void 0||T.call(n,C)},g=yield this.streamText({streamId:o,totalSize:u,destinationIdentities:n==null?void 0:n.destinationIdentities,topic:n==null?void 0:n.topic,attachedStreamIds:d,attributes:n==null?void 0:n.attributes});return yield g.write(e),m(1,0),yield g.close(),n!=null&&n.attachments&&d&&(yield Promise.all(n.attachments.map((y,b)=>R(this,void 0,void 0,function*(){return this._sendFile(d[b],y,{topic:n.topic,mimeType:y.type,onProgress:T=>{m(T,b+1)}})})))),g.info})}streamText(e){return R(this,void 0,void 0,function*(){var n,r;const o=(n=e==null?void 0:e.streamId)!==null&&n!==void 0?n:crypto.randomUUID(),l={id:o,mimeType:"text/plain",timestamp:Date.now(),topic:(r=e==null?void 0:e.topic)!==null&&r!==void 0?r:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},u=new Yd({streamId:o,mimeType:l.mimeType,topic:l.topic,timestamp:fa(l.timestamp),totalLength:fa(e==null?void 0:e.totalSize),attributes:l.attributes,contentHeader:{case:"textHeader",value:new X0({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?Fd.UPDATE:Fd.CREATE})}}),d=e==null?void 0:e.destinationIdentities,h=new Mt({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,_e.RELIABLE);let m=0;const g=this,y=new WritableStream({write(C){return R(this,void 0,void 0,function*(){for(const k of t1(C,hc)){yield g.engine.waitForBufferStatusLow(_e.RELIABLE);const w=new Kd({content:k,streamId:o,chunkIndex:fa(m)}),O=new Mt({destinationIdentities:d,value:{case:"streamChunk",value:w}});yield g.engine.sendDataPacket(O,_e.RELIABLE),m+=1}})},close(){return R(this,void 0,void 0,function*(){const C=new Qd({streamId:o}),k=new Mt({destinationIdentities:d,value:{case:"streamTrailer",value:C}});yield g.engine.sendDataPacket(k,_e.RELIABLE)})},abort(C){console.log("Sink error:",C)}});let b=()=>R(this,void 0,void 0,function*(){yield T.close()});g.engine.once(ne.Closing,b);const T=new q1(y,l,()=>this.engine.off(ne.Closing,b));return T})}sendFile(e,n){return R(this,void 0,void 0,function*(){const r=crypto.randomUUID();return yield this._sendFile(r,e,n),{id:r}})}_sendFile(e,n,r){return R(this,void 0,void 0,function*(){var o,l;const u=n.size,d=new Yd({totalLength:fa(u),mimeType:(o=r==null?void 0:r.mimeType)!==null&&o!==void 0?o:n.type,streamId:e,topic:r==null?void 0:r.topic,encryptionType:r==null?void 0:r.encryptionType,timestamp:fa(Date.now()),contentHeader:{case:"byteHeader",value:new Z0({name:n.name})}}),h=r==null?void 0:r.destinationIdentities,m=new Mt({destinationIdentities:h,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(m,_e.RELIABLE);function g(C){return new Promise(k=>{const w=new FileReader;w.onload=()=>{k(new Uint8Array(w.result))},w.readAsArrayBuffer(C)})}const y=Math.ceil(u/hc);for(let C=0;CR(r,void 0,void 0,function*(){var y,b,T,C;if(Zf(u)>Ky){g(et.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((b=(y=this.engine.latestJoinResponse)===null||y===void 0?void 0:y.serverInfo)===null||b===void 0)&&b.version&&Sr((C=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||C===void 0?void 0:C.version,"1.8.0")<0){g(et.builtIn("UNSUPPORTED_SERVER"));return}const k=crypto.randomUUID();yield this.publishRpcRequest(o,k,l,u,d-2e3);const w=setTimeout(()=>{this.pendingAcks.delete(k),g(et.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(k),clearTimeout(O)},2e3);this.pendingAcks.set(k,{resolve:()=>{clearTimeout(w)},participantIdentity:o});const O=setTimeout(()=>{this.pendingResponses.delete(k),g(et.builtIn("RESPONSE_TIMEOUT"))},d);this.pendingResponses.set(k,{resolve:(V,Q)=>{clearTimeout(O),this.pendingAcks.has(k)&&(console.warn("RPC response received before ack",k),this.pendingAcks.delete(k),clearTimeout(w)),Q?g(Q):m(V??"")},participantIdentity:o})}))}()})}registerRpcMethod(e,n){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=n,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const n=this.pendingAcks.get(e);n?(n.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,n,r){const o=this.pendingResponses.get(e);o?(o.resolve(n,r),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,n,r,o,l){return R(this,void 0,void 0,function*(){const u=new Mt({destinationIdentities:[e],kind:_e.RELIABLE,value:{case:"rpcRequest",value:new z0({id:n,method:r,payload:o,responseTimeoutMs:l,version:1})}});yield this.engine.sendDataPacket(u,_e.RELIABLE)})}handleParticipantDisconnected(e){for(const[n,{participantIdentity:r}]of this.pendingAcks)r===e&&this.pendingAcks.delete(n);for(const[n,{participantIdentity:r,resolve:o}]of this.pendingResponses)r===e&&(o(null,et.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(n))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(n=>n.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return e.sid!==this.sid||!super.updateInfo(e)?!1:(e.tracks.forEach(n=>{var r,o;const l=this.trackPublications.get(n.sid);if(l){const u=l.isMuted||((o=(r=l.track)===null||r===void 0?void 0:r.isUpstreamPaused)!==null&&o!==void 0?o:!1);u!==n.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Me(l)),{mutedOnServer:u})),this.engine.client.sendMuteTrack(n.sid,u))}}),!0)}getPublicationForTrack(e){let n;return this.trackPublications.forEach(r=>{const o=r.track;o&&(e instanceof MediaStreamTrack?(ha(o)||Ai(o))&&o.mediaStreamTrack===e&&(n=r):e===o&&(n=r))}),n}waitForPendingPublicationOfSource(e){return R(this,void 0,void 0,function*(){const r=Date.now();for(;Date.now(){let[u]=l;return u.source===e});if(o)return o[1];yield Nt(20)}})}}class nb extends Pi{constructor(e,n,r,o){super(e,n.sid,n.name,o),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=rn.HIGH,this.handleEnded=l=>{this.setTrack(void 0),this.emit(W.Ended,l)},this.handleVisibilityChange=l=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(l),this.logContext),this.disabled=!l,this.emitTrackUpdate()},this.handleVideoDimensionsChange=l=>{this.log.debug("adaptivestream video dimensions ".concat(l.width,"x").concat(l.height),this.logContext),this.videoDimensions=l,this.emitTrackUpdate()},this.subscribed=r,this.updateInfo(n)}setSubscribed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const o=new Fc({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new G0({participantSid:"",trackSids:[this.trackSid]})]});this.emit(W.UpdateSubscription,o),this.emitSubscriptionUpdateIfChanged(n),this.emitPermissionUpdateIfChanged(r)}get subscriptionStatus(){return this.subscribed===!1?Pi.SubscriptionStatus.Unsubscribed:super.isSubscribed?Pi.SubscriptionStatus.Subscribed:Pi.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Pi.PermissionStatus.Allowed:Pi.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var n,r;this.isManualOperationAllowed()&&(((n=this.videoDimensions)===null||n===void 0?void 0:n.width)===e.width&&((r=this.videoDimensions)===null||r===void 0?void 0:r.height)===e.height||(Ad(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ad(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const n=this.subscriptionStatus,r=this.permissionStatus,o=this.track;o!==e&&(o&&(o.off(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),o.off(W.VisibilityChanged,this.handleVisibilityChange),o.off(W.Ended,this.handleEnded),o.detach(),o.stopMonitor(),this.emit(W.Unsubscribed,o)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(W.VisibilityChanged,this.handleVisibilityChange),e.on(W.Ended,this.handleEnded),this.emit(W.Subscribed,e)),this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n))}setAllowed(e){const n=this.subscriptionStatus,r=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(r),this.emitSubscriptionUpdateIfChanged(n)}setSubscriptionError(e){this.emit(W.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const n=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):n!==e.muted&&this.emit(e.muted?W.Muted:W.Unmuted)}emitSubscriptionUpdateIfChanged(e){const n=this.subscriptionStatus;e!==n&&this.emit(W.SubscriptionStatusChanged,n,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(W.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===j.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ad(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new J0({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=rn.HIGH,this.emit(W.UpdateSettings,e)}}class Ic extends tb{static fromParticipantInfo(e,n,r){return new Ic(e,n.sid,n.identity,n.name,n.metadata,n.attributes,r,n.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,n,r,o,l,u,d){let h=arguments.length>7&&arguments[7]!==void 0?arguments[7]:qs.STANDARD;super(n,r||"",o,l,u,d,h),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(W.UpdateSettings,n=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),Me(e))),this.signalClient.sendUpdateTrackSettings(n)}),e.on(W.UpdateSubscription,n=>{n.participantTracks.forEach(r=>{r.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(n)}),e.on(W.SubscriptionPermissionChanged,n=>{this.emit(F.TrackSubscriptionPermissionChanged,e,n)}),e.on(W.SubscriptionStatusChanged,n=>{this.emit(F.TrackSubscriptionStatusChanged,e,n)}),e.on(W.Subscribed,n=>{this.emit(F.TrackSubscribed,n,e)}),e.on(W.Unsubscribed,n=>{this.emit(F.TrackUnsubscribed,n,e)}),e.on(W.SubscriptionFailed,n=>{this.emit(F.TrackSubscriptionFailed,e.trackSid,n)})}getTrackPublication(e){const n=super.getTrackPublication(e);if(n)return n}getTrackPublicationByName(e){const n=super.getTrackPublicationByName(e);if(n)return n}setVolume(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.Source.Microphone;this.volumeMap.set(n,e);const r=this.getTrackPublication(n);r&&r.track&&r.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:j.Source.Microphone;const n=this.getTrackPublication(e);return n&&n.track?n.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,n,r,o,l,u){let d=this.getTrackPublicationBySid(n);if(d||n.startsWith("TR")||this.trackPublications.forEach(g=>{!d&&e.kind===g.kind.toString()&&(d=g)}),!d){if(u===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:n})),this.emit(F.TrackSubscriptionFailed,n);return}u===void 0&&(u=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,n,r,o,l,u-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Me(d))),this.emit(F.TrackSubscriptionFailed,n);return}const h=e.kind==="video";let m;return h?m=new V1(e,n,o,l):m=new eb(e,n,o,this.audioContext,this.audioOutput),m.source=d.source,m.isMuted=d.isMuted,m.setMediaStream(r),m.start(),d.setTrack(m),this.volumeMap.has(d.source)&&mf(m)&&ti(m)&&m.setVolume(this.volumeMap.get(d.source)),d}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const n=new Map,r=new Map;return e.tracks.forEach(o=>{var l,u;let d=this.getTrackPublicationBySid(o.sid);if(d)d.updateInfo(o);else{const h=j.kindFromProto(o.type);if(!h)return;d=new nb(h,o,(l=this.signalClient.connectOptions)===null||l===void 0?void 0:l.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(u=this.loggerOptions)===null||u===void 0?void 0:u.loggerName}),d.updateInfo(o),r.set(o.sid,d);const m=Array.from(this.trackPublications.values()).find(g=>g.source===(d==null?void 0:d.source));m&&d.source!==j.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(d.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Me(m),newTrack:Me(d)})),this.addTrackPublication(d)}n.set(o.sid,d)}),this.trackPublications.forEach(o=>{n.has(o.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Me(o))),this.unpublishTrack(o.trackSid,!0))}),r.forEach(o=>{this.emit(F.TrackPublished,o)}),!0}unpublishTrack(e,n){const r=this.trackPublications.get(e);if(!r)return;const{track:o}=r;switch(o&&(o.stop(),r.setTrack(void 0)),this.trackPublications.delete(e),r.kind){case j.Kind.Audio:this.audioTrackPublications.delete(e);break;case j.Kind.Video:this.videoTrackPublications.delete(e);break}n&&this.emit(F.TrackUnpublished,r)}setAudioOutput(e){return R(this,void 0,void 0,function*(){this.audioOutput=e;const n=[];this.audioTrackPublications.forEach(r=>{var o;ti(r.track)&&mf(r.track)&&n.push(r.track.setSinkId((o=e.deviceId)!==null&&o!==void 0?o:"default"))}),yield Promise.all(n)})}emit(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;oR(this,void 0,void 0,function*(){var m;if(!VE())throw An()?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 g=yield this.disconnectLock.lock();if(this.state===Te.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),g(),Promise.resolve();if(this.connectFuture)return g(),this.connectFuture.promise;this.setAndEmitConnectionState(Te.Connecting),((m=this.regionUrlProvider)===null||m===void 0?void 0:m.getServerUrl().toString())!==u&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),hf(new URL(u))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bf(u,d):this.regionUrlProvider.updateToken(d),this.regionUrlProvider.fetchRegionSettings().then(T=>{var C;(C=this.regionUrlProvider)===null||C===void 0||C.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const y=(T,C,k)=>R(this,void 0,void 0,function*(){var w,O;this.abortController&&this.abortController.abort();const V=new AbortController;this.abortController=V,g==null||g();try{yield this.attemptConnection(k??u,d,h,V),this.abortController=void 0,T()}catch(Q){if(this.regionUrlProvider&&Q instanceof Ie&&Q.reason!==Re.Cancelled&&Q.reason!==Re.NotAllowed){let U=null;try{U=yield this.regionUrlProvider.getNextBestRegionUrl((w=this.abortController)===null||w===void 0?void 0:w.signal)}catch(_){if(_ instanceof Ie&&(_.status===401||_.reason===Re.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),C(_);return}}U&&!(!((O=this.abortController)===null||O===void 0)&&O.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(Q.message,". Retrying with another region: ").concat(U),this.logContext),this.recreateEngine(),yield y(T,C,U)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Iv(Q)),C(Q))}else{let U=pn.UNKNOWN_REASON;Q instanceof Ie&&(U=Iv(Q)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,U),C(Q)}}}),b=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Vy((T,C)=>{y(T,C,b)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(u,d,h,m,g,y)=>R(this,void 0,void 0,function*(){var b,T,C;const k=yield h.join(u,d,{autoSubscribe:m.autoSubscribe,adaptiveStream:typeof g.adaptiveStream=="object"?!0:g.adaptiveStream,maxRetries:m.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:m.websocketTimeout},y.signal);let w=k.serverInfo;if(w||(w={version:k.serverVersion,region:k.serverRegion}),this.serverInfo=w,this.log.debug("connected to Livekit Server ".concat(Object.entries(w).map(O=>{let[V,Q]=O;return"".concat(V,": ").concat(Q)}).join(", ")),{room:(b=k.room)===null||b===void 0?void 0:b.name,roomSid:(T=k.room)===null||T===void 0?void 0:T.sid,identity:(C=k.participant)===null||C===void 0?void 0:C.identity}),!w.version)throw new _E("unknown server version");return w.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),g.dynacast=!1),k}),this.applyJoinResponse=u=>{const d=u.participant;if(this.localParticipant.sid=d.sid,this.localParticipant.identity=d.identity,this.localParticipant.setEnabledPublishCodecs(u.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(u.sifTrailer)}catch(h){this.log.error(h instanceof Error?h.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:h}))}this.handleParticipantUpdates([d,...u.otherParticipants]),u.room&&this.handleRoomUpdate(u.room)},this.attemptConnection=(u,d,h,m)=>R(this,void 0,void 0,function*(){var g,y;this.state===Te.Reconnecting||this.isResuming||!((g=this.engine)===null||g===void 0)&&g.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((y=this.regionUrlProvider)===null||y===void 0)&&y.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Xf),h),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const b=yield this.connectSignal(u,d,this.engine,this.connOptions,this.options,m);this.applyJoinResponse(b),this.setupLocalParticipantEvents(),this.emit(B.SignalConnected)}catch(b){yield this.engine.close(),this.recreateEngine();const T=new Ie("could not establish signal connection",Re.ServerUnreachable);throw b instanceof Error&&(T.message="".concat(T.message,": ").concat(b.message)),b instanceof Ie&&(T.reason=b.reason,T.status=b.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:b})),T}if(m.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Ie("Connection attempt aborted",Re.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,m)}catch(b){throw yield this.engine.close(),this.recreateEngine(),b}xt()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),xt()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Te.Connected),this.emit(B.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var u=arguments.length,d=new Array(u),h=0;h0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var y,b,T,C;const k=yield m.disconnectLock.lock();try{if(m.state===Te.Disconnected){m.log.debug("already disconnected",m.logContext);return}m.log.info("disconnect from room",Object.assign({},m.logContext)),(m.state===Te.Connecting||m.state===Te.Reconnecting||m.isResuming)&&(m.log.warn("abort connection attempt",m.logContext),(y=m.abortController)===null||y===void 0||y.abort(),(T=(b=m.connectFuture)===null||b===void 0?void 0:b.reject)===null||T===void 0||T.call(b,new Ie("Client initiated disconnect",Re.Cancelled)),m.connectFuture=void 0),!((C=m.engine)===null||C===void 0)&&C.client.isDisconnected||(yield m.engine.client.sendLeave()),m.engine&&(yield m.engine.close()),m.handleDisconnect(g,pn.CLIENT_INITIATED),m.engine=void 0}finally{k()}}()})},this.onPageLeave=()=>R(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>R(this,void 0,void 0,function*(){const u=[],d=Dn();if(d&&d.os==="iOS"){const h="livekit-dummy-audio-el";let m=document.getElementById(h);if(!m){m=document.createElement("audio"),m.id=h,m.autoplay=!0,m.hidden=!0;const g=Dd();g.enabled=!0;const y=new MediaStream([g]);m.srcObject=y,document.addEventListener("visibilitychange",()=>{m&&(m.srcObject=document.hidden?null:y,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(m),this.once(B.Disconnected,()=>{m==null||m.remove(),m=null})}u.push(m)}this.remoteParticipants.forEach(h=>{h.audioTrackPublications.forEach(m=>{m.track&&m.track.attachedElements.forEach(g=>{u.push(g)})})});try{yield Promise.all([this.acquireAudioContext(),...u.map(h=>(h.muted=!1,h.play()))]),this.handleAudioPlaybackStarted()}catch(h){throw this.handleAudioPlaybackFailed(h),h}}),this.startVideo=()=>R(this,void 0,void 0,function*(){const u=[];for(const d of this.remoteParticipants.values())d.videoTrackPublications.forEach(h=>{var m;(m=h.track)===null||m===void 0||m.attachedElements.forEach(g=>{u.includes(g)||u.push(g)})});yield Promise.all(u.map(d=>d.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(d=>{d.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const u of this.remoteParticipants.values())this.handleParticipantDisconnected(u.identity,u);this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)},this.handleSignalRestarted=u=>R(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(u.serverRegion),Object.assign(Object.assign({},this.logContext),{region:u.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(u);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(d){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:d}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:u.serverRegion}))}catch{return}this.setAndEmitConnectionState(Te.Connected),this.emit(B.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=u=>{u.forEach(d=>{var h;if(d.identity===this.localParticipant.identity){this.localParticipant.updateInfo(d);return}d.identity===""&&(d.identity=(h=this.sidToIdentity.get(d.sid))!==null&&h!==void 0?h:"");let m=this.remoteParticipants.get(d.identity);d.state===Hd.DISCONNECTED?this.handleParticipantDisconnected(d.identity,m):m=this.getOrCreateParticipant(d.identity,d)})},this.handleActiveSpeakersUpdate=u=>{const d=[],h={};u.forEach(m=>{if(h[m.sid]=!0,m.sid===this.localParticipant.sid)this.localParticipant.audioLevel=m.level,this.localParticipant.setIsSpeaking(!0),d.push(this.localParticipant);else{const g=this.getRemoteParticipantBySid(m.sid);g&&(g.audioLevel=m.level,g.setIsSpeaking(!0),d.push(g))}}),h[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(m=>{h[m.sid]||(m.audioLevel=0,m.setIsSpeaking(!1))}),this.activeSpeakers=d,this.emitWhenConnected(B.ActiveSpeakersChanged,d)},this.handleSpeakersChanged=u=>{const d=new Map;this.activeSpeakers.forEach(m=>{const g=this.remoteParticipants.get(m.identity);g&&g.sid!==m.sid||d.set(m.sid,m)}),u.forEach(m=>{let g=this.getRemoteParticipantBySid(m.sid);m.sid===this.localParticipant.sid&&(g=this.localParticipant),g&&(g.audioLevel=m.level,g.setIsSpeaking(m.active),m.active?d.set(m.sid,g):d.delete(m.sid))});const h=Array.from(d.values());h.sort((m,g)=>g.audioLevel-m.audioLevel),this.activeSpeakers=h,this.emitWhenConnected(B.ActiveSpeakersChanged,h)},this.handleStreamStateUpdate=u=>{u.streamStates.forEach(d=>{const h=this.getRemoteParticipantBySid(d.participantSid);if(!h)return;const m=h.getTrackPublicationBySid(d.trackSid);if(!m||!m.track)return;const g=j.streamStateFromProto(d.state);g!==m.track.streamState&&(m.track.streamState=g,h.emit(F.TrackStreamStateChanged,m,m.track.streamState),this.emitWhenConnected(B.TrackStreamStateChanged,m,m.track.streamState,h))})},this.handleSubscriptionPermissionUpdate=u=>{const d=this.getRemoteParticipantBySid(u.participantSid);if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setAllowed(u.allowed)},this.handleSubscriptionError=u=>{const d=Array.from(this.remoteParticipants.values()).find(m=>m.trackPublications.has(u.trackSid));if(!d)return;const h=d.getTrackPublicationBySid(u.trackSid);h&&h.setSubscriptionError(u.err)},this.handleDataPacket=u=>{const d=this.remoteParticipants.get(u.participantIdentity);if(u.value.case==="user")this.handleUserPacket(d,u.value.value,u.kind);else if(u.value.case==="transcription")this.handleTranscription(d,u.value.value);else if(u.value.case==="sipDtmf")this.handleSipDtmf(d,u.value.value);else if(u.value.case==="chatMessage")this.handleChatMessage(d,u.value.value);else if(u.value.case==="metrics")this.handleMetrics(u.value.value,d);else if(u.value.case==="streamHeader")this.handleStreamHeader(u.value.value,u.participantIdentity);else if(u.value.case==="streamChunk")this.handleStreamChunk(u.value.value);else if(u.value.case==="streamTrailer")this.handleStreamTrailer(u.value.value);else if(u.value.case==="rpcRequest"){const h=u.value.value;this.handleIncomingRpcRequest(u.participantIdentity,h.id,h.method,h.payload,h.responseTimeoutMs,h.version)}},this.handleUserPacket=(u,d,h)=>{this.emit(B.DataReceived,d.payload,u,h,d.topic),u==null||u.emit(F.DataReceived,d.payload,h)},this.handleSipDtmf=(u,d)=>{this.emit(B.SipDTMFReceived,d,u),u==null||u.emit(F.SipDTMFReceived,d)},this.bufferedSegments=new Map,this.handleTranscription=(u,d)=>{const h=d.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(d.transcribedParticipantIdentity),m=h==null?void 0:h.trackPublications.get(d.trackId),g=JE(d,this.transcriptionReceivedTimes);m==null||m.emit(W.TranscriptionReceived,g),h==null||h.emit(F.TranscriptionReceived,g,m),this.emit(B.TranscriptionReceived,g,h,m)},this.handleChatMessage=(u,d)=>{const h=WE(d);this.emit(B.ChatMessage,h,u)},this.handleMetrics=(u,d)=>{this.emit(B.MetricsReceived,u,d)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(B.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=u=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:u})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(B.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(B.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(B.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>R(this,void 0,void 0,function*(){var u,d;const h=gt.getInstance().previousDevices,m=yield gt.getInstance().getDevices(void 0,!1),g=Dn();if((g==null?void 0:g.name)==="Chrome"&&g.os!=="iOS")for(let b of m){const T=h.find(C=>C.deviceId===b.deviceId);T&&T.label!==""&&T.kind===b.kind&&T.label!==b.label&&this.getActiveDevice(b.kind)==="default"&&this.emit(B.ActiveDeviceChanged,b.kind,b.deviceId)}const y=["audiooutput","audioinput","videoinput"];for(let b of y){const T=m.filter(k=>k.kind===b),C=this.getActiveDevice(b);if(C===((u=h.filter(k=>k.kind===b)[0])===null||u===void 0?void 0:u.deviceId)&&T.length>0&&((d=T[0])===null||d===void 0?void 0:d.deviceId)!==C){yield this.switchActiveDevice(b,T[0].deviceId);continue}b==="audioinput"&&!Bi()||b==="videoinput"||T.length>0&&!T.find(k=>k.deviceId===this.getActiveDevice(b))&&(yield this.switchActiveDevice(b,T[0].deviceId))}this.emit(B.MediaDevicesChanged)}),this.handleRoomUpdate=u=>{const d=this.roomInfo;this.roomInfo=u,d&&d.metadata!==u.metadata&&this.emitWhenConnected(B.RoomMetadataChanged,u.metadata),(d==null?void 0:d.activeRecording)!==u.activeRecording&&this.emitWhenConnected(B.RecordingStatusChanged,u.activeRecording)},this.handleConnectionQualityUpdate=u=>{u.updates.forEach(d=>{if(d.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(d.quality);return}const h=this.getRemoteParticipantBySid(d.participantSid);h&&h.setConnectionQuality(d.quality)})},this.onLocalParticipantMetadataChanged=u=>{this.emit(B.ParticipantMetadataChanged,u,this.localParticipant)},this.onLocalParticipantNameChanged=u=>{this.emit(B.ParticipantNameChanged,u,this.localParticipant)},this.onLocalAttributesChanged=u=>{this.emit(B.ParticipantAttributesChanged,u,this.localParticipant)},this.onLocalTrackMuted=u=>{this.emit(B.TrackMuted,u,this.localParticipant)},this.onLocalTrackUnmuted=u=>{this.emit(B.TrackUnmuted,u,this.localParticipant)},this.onTrackProcessorUpdate=u=>{var d;(d=u==null?void 0:u.onPublish)===null||d===void 0||d.call(u,this)},this.onLocalTrackPublished=u=>R(this,void 0,void 0,function*(){var d,h,m,g,y,b;(d=u.track)===null||d===void 0||d.on(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.on(W.Restarted,this.onLocalTrackRestarted),(y=(g=(m=u.track)===null||m===void 0?void 0:m.getProcessor())===null||g===void 0?void 0:g.onPublish)===null||y===void 0||y.call(g,this),this.emit(B.LocalTrackPublished,u,this.localParticipant),ha(u.track)&&(yield u.track.checkForSilence())&&this.emit(B.LocalAudioSilenceDetected,u);const T=yield(b=u.track)===null||b===void 0?void 0:b.getDeviceId(!1),C=jv(u.source);C&&T&&T!==this.localParticipant.activeDeviceMap.get(C)&&(this.localParticipant.activeDeviceMap.set(C,T),this.emit(B.ActiveDeviceChanged,C,T))}),this.onLocalTrackUnpublished=u=>{var d,h;(d=u.track)===null||d===void 0||d.off(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(h=u.track)===null||h===void 0||h.off(W.Restarted,this.onLocalTrackRestarted),this.emit(B.LocalTrackUnpublished,u,this.localParticipant)},this.onLocalTrackRestarted=u=>R(this,void 0,void 0,function*(){const d=yield u.getDeviceId(!1),h=jv(u.source);h&&d&&d!==this.localParticipant.activeDeviceMap.get(h)&&(this.log.debug("local track restarted, setting ".concat(h," ").concat(d," active"),this.logContext),this.localParticipant.activeDeviceMap.set(h,d),this.emit(B.ActiveDeviceChanged,h,d))}),this.onLocalConnectionQualityChanged=u=>{this.emit(B.ConnectionQualityChanged,u,this.localParticipant)},this.onMediaDevicesError=u=>{this.emit(B.MediaDevicesError,u)},this.onLocalParticipantPermissionsChanged=u=>{this.emit(B.ParticipantPermissionsChanged,u,this.localParticipant)},this.onLocalChatMessageSent=u=>{this.emit(B.ChatMessage,u,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},b1),e),this.log=ei((r=this.options.loggerName)!==null&&r!==void 0?r:gn.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Fy),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Yy),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},y1),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new Ht,this.localParticipant=new Y1("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Ii(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Ii(this.options.audioCaptureDefaults.deviceId)),!((o=this.options.audioOutput)===null||o===void 0)&&o.deviceId&&this.switchActiveDevice("audiooutput",Ii(this.options.audioOutput.deviceId)).catch(u=>this.log.warn("Could not set audio output: ".concat(u.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),xt()){const u=new AbortController;(l=navigator.mediaDevices)===null||l===void 0||l.addEventListener("devicechange",this.handleDeviceChange,{signal:u.signal}),ni.cleanupRegistry&&ni.cleanupRegistry.register(this,()=>{u.abort()})}}registerTextStreamHandler(e,n){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,n)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,n){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,n)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,n){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,n)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,n,r,o,l,u){return R(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,n),u!==1){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_VERSION"));return}const d=this.rpcHandlers.get(r);if(!d){yield this.engine.publishRpcResponse(e,n,null,et.builtIn("UNSUPPORTED_METHOD"));return}let h=null,m=null;try{const g=yield d({requestId:n,callerIdentity:e,payload:o,responseTimeout:l});Zf(g)>Ky?(h=et.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(r))):m=g}catch(g){g instanceof et?h=g:(console.warn("Uncaught error returned by RPC handler for ".concat(r,". Returning APPLICATION_ERROR instead."),g),h=et.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,n,m,h)})}setE2EEEnabled(e){return R(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new o1(this.options.e2ee),this.e2eeManager.on(Ui.ParticipantEncryptionStatusChanged,(n,r)=>{e1(r)&&(this.isE2EEEnabled=n),this.emit(B.ParticipantEncryptionStatusChanged,n,r)}),this.e2eeManager.on(Ui.EncryptionError,n=>this.emit(B.EncryptionError,n)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&n!==void 0?n:!1}getSid(){return R(this,void 0,void 0,function*(){return this.state===Te.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,n)=>{const r=o=>{o.sid!==""&&(this.engine.off(ne.RoomUpdate,r),e(o.sid))};this.engine.on(ne.RoomUpdate,r),this.once(B.Disconnected,()=>{this.engine.off(ne.RoomUpdate,r),n("Room disconnected before room server id was available")})})})}get name(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&n!==void 0?n:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&n!==void 0?n:0}get numPublishers(){var e,n;return(n=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&n!==void 0?n:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new N1(this.options),this.engine.on(ne.ParticipantUpdate,this.handleParticipantUpdates).on(ne.RoomUpdate,this.handleRoomUpdate).on(ne.SpeakersChanged,this.handleSpeakersChanged).on(ne.StreamStateChanged,this.handleStreamStateUpdate).on(ne.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(ne.SubscriptionError,this.handleSubscriptionError).on(ne.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(ne.MediaTrackAdded,(e,n,r)=>{this.onTrackAdded(e,n,r)}).on(ne.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(ne.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(ne.DataPacketReceived,this.handleDataPacket).on(ne.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Te.SignalReconnecting)&&this.emit(B.SignalReconnecting)}).on(ne.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Te.Connected)&&this.emit(B.Reconnected)}).on(ne.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Te.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(ne.Restarting,this.handleRestarting).on(ne.SignalRestarted,this.handleSignalRestarted).on(ne.Offline,()=>{this.setAndEmitConnectionState(Te.Reconnecting)&&this.emit(B.Reconnecting)}).on(ne.DCBufferStatusChanged,(e,n)=>{this.emit(B.DCBufferStatusChanged,e,n)}).on(ne.LocalTrackSubscribed,e=>{const n=this.localParticipant.getTrackPublications().find(r=>{let{trackSid:o}=r;return o===e});if(!n){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(F.LocalTrackSubscribed,n),this.emitWhenConnected(B.LocalTrackSubscribed,n,this.localParticipant)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gt.getInstance().getDevices(e,n)}prepareConnection(e,n){return R(this,void 0,void 0,function*(){if(this.state===Te.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(hf(new URL(e))&&n){this.regionUrlProvider=new bf(e,n);const r=yield this.regionUrlProvider.getNextBestRegionUrl();r&&this.state===Te.Disconnected&&(this.regionUrl=r,yield fetch(Lv(r),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(r),this.logContext))}else yield fetch(Lv(e),{method:"HEAD"})}catch(r){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:r}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,n){return R(this,void 0,void 0,function*(){let r=()=>{},o;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":o=new _n({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":o=new _n({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":o=new _n({scenario:{case:"serverLeave",value:!0}});break;case"migration":o=new _n({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":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":r=()=>R(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),o=new _n({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":o=new _n({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),r=()=>R(this,void 0,void 0,function*(){const l=this.engine.client.onLeave;l&&l(new Yc({reason:pn.CLIENT_INITIATED,action:ur.RECONNECT}))});break;case"subscriber-bandwidth":if(n===void 0||typeof n!="number")throw new Error("subscriber-bandwidth requires a number as argument");o=new _n({scenario:{case:"subscriberBandwidth",value:fa(n)}});break;case"leave-full-reconnect":o=new _n({scenario:{case:"leaveRequestFullReconnect",value:!0}})}o&&(yield this.engine.client.sendSimulateScenario(o),yield r())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,n){return R(this,arguments,void 0,function(r,o){var l=this;let u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var d,h,m,g,y,b,T,C;let k=!0,w=!1;const O=u?{exact:o}:o;if(r==="audioinput"){w=l.localParticipant.audioTrackPublications.size===0;const V=(d=l.getActiveDevice(r))!==null&&d!==void 0?d:l.options.audioCaptureDefaults.deviceId;l.options.audioCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.audioTrackPublications.values()).filter(U=>U.source===j.Source.Microphone);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.audioTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.audioCaptureDefaults.deviceId=V,U}}else if(r==="videoinput"){w=l.localParticipant.videoTrackPublications.size===0;const V=(h=l.getActiveDevice(r))!==null&&h!==void 0?h:l.options.videoCaptureDefaults.deviceId;l.options.videoCaptureDefaults.deviceId=O;const Q=Array.from(l.localParticipant.videoTrackPublications.values()).filter(U=>U.source===j.Source.Camera);try{k=(yield Promise.all(Q.map(U=>{var _;return(_=U.videoTrack)===null||_===void 0?void 0:_.setDeviceId(O)}))).every(U=>U===!0)}catch(U){throw l.options.videoCaptureDefaults.deviceId=V,U}}else if(r==="audiooutput"){if(!ff()&&!l.options.webAudioMix||l.options.webAudioMix&&l.audioContext&&!("setSinkId"in l.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");l.options.webAudioMix&&(o=(m=yield gt.getInstance().normalizeDeviceId("audiooutput",o))!==null&&m!==void 0?m:""),(g=(C=l.options).audioOutput)!==null&&g!==void 0||(C.audioOutput={});const V=(y=l.getActiveDevice(r))!==null&&y!==void 0?y:l.options.audioOutput.deviceId;l.options.audioOutput.deviceId=o;try{l.options.webAudioMix&&((b=l.audioContext)===null||b===void 0||b.setSinkId(o)),yield Promise.all(Array.from(l.remoteParticipants.values()).map(Q=>Q.setAudioOutput({deviceId:o})))}catch(Q){throw l.options.audioOutput.deviceId=V,Q}}return(w||r==="audiooutput")&&(l.localParticipant.activeDeviceMap.set(r,r==="audiooutput"&&((T=l.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||o),l.emit(B.ActiveDeviceChanged,r,o)),k}()})}setupLocalParticipantEvents(){this.localParticipant.on(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(F.AttributesChanged,this.onLocalAttributesChanged).on(F.TrackMuted,this.onLocalTrackMuted).on(F.TrackUnmuted,this.onLocalTrackUnmuted).on(F.LocalTrackPublished,this.onLocalTrackPublished).on(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(F.MediaDevicesError,this.onMediaDevicesError).on(F.AudioStreamAcquired,this.startAudio).on(F.ChatMessage,this.onLocalChatMessageSent).on(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,n,r){if(this.state===Te.Connecting||this.state===Te.Reconnecting){const g=()=>{this.onTrackAdded(e,n,r),y()},y=()=>{this.off(B.Reconnected,g),this.off(B.Connected,g),this.off(B.Disconnected,y)};this.once(B.Reconnected,g),this.once(B.Connected,g),this.once(B.Disconnected,y);return}if(this.state===Te.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}const o=BE(n.id),l=o[0];let u=o[1],d=e.id;if(u&&u.startsWith("TR")&&(d=u),l===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const h=Array.from(this.remoteParticipants.values()).find(g=>g.sid===l);if(!h){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(l),this.logContext);return}let m;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?m=this.options.adaptiveStream:m={}),h.addSubscribedMediaTrack(e,d,n,r,m)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,n=arguments.length>1?arguments[1]:void 0;var r;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Te.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(o=>{o.trackPublications.forEach(l=>{o.unpublishTrack(l.trackSid)})}),this.localParticipant.trackPublications.forEach(o=>{var l,u,d;o.track&&this.localParticipant.unpublishTrack(o.track,e),e?((l=o.track)===null||l===void 0||l.detach(),(u=o.track)===null||u===void 0||u.stop()):(d=o.track)===null||d===void 0||d.stopMonitor()}),this.localParticipant.off(F.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(F.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(F.AttributesChanged,this.onLocalAttributesChanged).off(F.TrackMuted,this.onLocalTrackMuted).off(F.TrackUnmuted,this.onLocalTrackUnmuted).off(F.LocalTrackPublished,this.onLocalTrackPublished).off(F.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(F.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(F.MediaDevicesError,this.onMediaDevicesError).off(F.AudioStreamAcquired,this.startAudio).off(F.ChatMessage,this.onLocalChatMessageSent).off(F.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),xt()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(r=navigator.mediaDevices)===null||r===void 0||r.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Te.Disconnected),this.emit(B.Disconnected,n)}}}handleParticipantDisconnected(e,n){var r;this.remoteParticipants.delete(e),n&&(n.trackPublications.forEach(o=>{n.unpublishTrack(o.trackSid,!0)}),this.emit(B.ParticipantDisconnected,n),(r=this.localParticipant)===null||r===void 0||r.handleParticipantDisconnected(n.identity))}handleStreamHeader(e,n){return R(this,void 0,void 0,function*(){var r;if(e.contentHeader.case==="byteHeader"){const o=this.byteStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,name:(r=e.contentHeader.value.name)!==null&&r!==void 0?r:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Oc(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.byteStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new j1(u,d,Oc(e.totalLength)),{identity:n})}else if(e.contentHeader.case==="textHeader"){const o=this.textStreamHandlers.get(e.topic);if(!o){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let l;const u={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},d=new ReadableStream({start:h=>{l=h,this.textStreamControllers.set(e.streamId,{info:u,controller:l,startTime:Date.now()})}});o(new B1(u,d,Oc(e.totalLength)),{identity:n})}})}handleStreamChunk(e){const n=this.byteStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e);const r=this.textStreamControllers.get(e.streamId);r&&e.content.length>0&&r.controller.enqueue(e)}handleStreamTrailer(e){const n=this.textStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.textStreamControllers.delete(e.streamId));const r=this.byteStreamControllers.get(e.streamId);r&&(r.info.attributes=Object.assign(Object.assign({},r.info.attributes),e.attributes),r.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return R(this,void 0,void 0,function*(){var e,n;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Gf())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(o=>o.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Nt(200)])}catch(o){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:o}))}const r=((n=this.audioContext)===null||n===void 0?void 0:n.state)==="running";r!==this.canPlaybackAudio&&(this.audioEnabled=r,this.emit(B.AudioPlaybackStatusChanged,r))})}createParticipant(e,n){var r;let o;return n?o=Ic.fromParticipantInfo(this.engine.client,n,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):o=new Ic(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&o.setAudioContext(this.audioContext),!((r=this.options.audioOutput)===null||r===void 0)&&r.deviceId&&o.setAudioOutput(this.options.audioOutput).catch(l=>this.log.warn("Could not set audio output: ".concat(l.message),this.logContext)),o}getOrCreateParticipant(e,n){if(this.remoteParticipants.has(e)){const o=this.remoteParticipants.get(e);return n&&o.updateInfo(n)&&this.sidToIdentity.set(n.sid,n.identity),o}const r=this.createParticipant(e,n);return this.remoteParticipants.set(e,r),this.sidToIdentity.set(n.sid,n.identity),this.emitWhenConnected(B.ParticipantConnected,r),r.on(F.TrackPublished,o=>{this.emitWhenConnected(B.TrackPublished,o,r)}).on(F.TrackSubscribed,(o,l)=>{o.kind===j.Kind.Audio?(o.on(W.AudioPlaybackStarted,this.handleAudioPlaybackStarted),o.on(W.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):o.kind===j.Kind.Video&&(o.on(W.VideoPlaybackFailed,this.handleVideoPlaybackFailed),o.on(W.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(B.TrackSubscribed,o,l,r)}).on(F.TrackUnpublished,o=>{this.emit(B.TrackUnpublished,o,r)}).on(F.TrackUnsubscribed,(o,l)=>{this.emit(B.TrackUnsubscribed,o,l,r)}).on(F.TrackMuted,o=>{this.emitWhenConnected(B.TrackMuted,o,r)}).on(F.TrackUnmuted,o=>{this.emitWhenConnected(B.TrackUnmuted,o,r)}).on(F.ParticipantMetadataChanged,o=>{this.emitWhenConnected(B.ParticipantMetadataChanged,o,r)}).on(F.ParticipantNameChanged,o=>{this.emitWhenConnected(B.ParticipantNameChanged,o,r)}).on(F.AttributesChanged,o=>{this.emitWhenConnected(B.ParticipantAttributesChanged,o,r)}).on(F.ConnectionQualityChanged,o=>{this.emitWhenConnected(B.ConnectionQualityChanged,o,r)}).on(F.ParticipantPermissionsChanged,o=>{this.emitWhenConnected(B.ParticipantPermissionsChanged,o,r)}).on(F.TrackSubscriptionStatusChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionStatusChanged,o,l,r)}).on(F.TrackSubscriptionFailed,(o,l)=>{this.emit(B.TrackSubscriptionFailed,o,r,l)}).on(F.TrackSubscriptionPermissionChanged,(o,l)=>{this.emitWhenConnected(B.TrackSubscriptionPermissionChanged,o,l,r)}),n&&r.updateInfo(n),r}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((r,o)=>(r.push(...o.getTrackPublications()),r),[]),n=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,n)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const n of e.videoTrackPublications.values())n.isSubscribed&&$E(n)&&n.emitTrackUpdate()}getRemoteParticipantBySid(e){const n=this.sidToIdentity.get(e);if(n)return this.remoteParticipants.get(n)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Tt.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,pn.STATE_MISMATCH))):e=0},K1)}clearConnectionReconcile(){this.connectionReconcileInterval&&Tt.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(B.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[n,r]=e;this.emit(n,...r)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;othis.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}if(o.audio){const u=new Tf(j.Kind.Audio,new cr({source:ot.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:hn.AUDIO}),new Uc(o.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Dd(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(u),this.localParticipant.emit(F.LocalTrackPublished,u)}for(let u=0;u1?n-1:0),o=1;ou!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:l}))}return super.emit(e,...r)}}ni.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(a=>{a()});function ib(a){return a.map(e=>{if(e)return Array.isArray(e)?ib(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var fn;(function(a){a[a.IDLE=0]="IDLE",a[a.RUNNING=1]="RUNNING",a[a.SKIPPED=2]="SKIPPED",a[a.SUCCESS=3]="SUCCESS",a[a.FAILED=4]="FAILED"})(fn||(fn={}));class Hi extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=fn.IDLE,this.logs=[],this.options={},this.url=e,this.token=n,this.name=this.constructor.name,this.room=new ni(r.roomOptions),this.connectOptions=r.connectOptions,this.options=r}run(e){return R(this,void 0,void 0,function*(){if(this.status!==fn.IDLE)throw Error("check is running already");this.setStatus(fn.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(n=>setTimeout(n,500)),this.status!==fn.SKIPPED&&this.setStatus(this.isSuccess()?fn.SUCCESS:fn.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return R(this,void 0,void 0,function*(){return this.room.state===Te.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return R(this,void 0,void 0,function*(){this.room&&this.room.state!==Te.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(fn.SKIPPED)}switchProtocol(e){return R(this,void 0,void 0,function*(){let n=!1,r=!1;if(this.room.on(B.Reconnecting,()=>{n=!0}),this.room.once(B.Reconnected,()=>{r=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(l=>setTimeout(l,1e3)),!n)return;const o=Date.now()+1e4;for(;Date.now()(l.duration-u.duration)*.5+(l.rtt-u.rtt)*.5);const o=n[0];this.bestStats=o,this.appendMessage("best Cloud region: ".concat(o.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return R(this,void 0,void 0,function*(){var n,r;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const o=(n=this.room.serverInfo)===null||n===void 0?void 0:n.region;if(!o)throw new Error("Region not found");const l=yield this.room.localParticipant.streamText({topic:"test"}),u=1e3,h=1e6/u,m="A".repeat(u),g=Date.now();for(let C=0;C{C.type==="candidate-pair"&&C.nominated&&(T.rtt=C.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const jd=1e4;class X1 extends Hi{get description(){return"Connection via UDP vs TCP"}perform(){return R(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),n=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-n.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-n.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=n):this.appendMessage("best connection quality via udp");const r=this.bestStats;this.appendMessage("upstream bitrate: ".concat((r.bitrateTotal/r.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((r.rttTotal/r.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((r.jitterTotal/r.count*1e3).toFixed(2)," ms")),r.packetsLost>0&&this.appendWarning("packets lost: ".concat((r.packetsLost/r.packetsSent*100).toFixed(2),"%")),r.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((r.qualityLimitationDurations.bandwidth/(jd/1e3)*100).toFixed(2),"%")),r.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((r.qualityLimitationDurations.cpu/(jd/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return R(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const n=document.createElement("canvas");n.width=1280,n.height=720;const r=n.getContext("2d");if(!r)throw new Error("Could not get canvas context");let o=0;const l=()=>{o=(o+1)%360,r.fillStyle="hsl(".concat(o,", 100%, 50%)"),r.fillRect(0,0,n.width,n.height),requestAnimationFrame(l)};l();const d=n.captureStream(30).getVideoTracks()[0],m=(yield this.room.localParticipant.publishTrack(d,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,g={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},y=setInterval(()=>R(this,void 0,void 0,function*(){const b=yield m.getRTCStatsReport();b==null||b.forEach(T=>{T.type==="outbound-rtp"?(g.packetsSent=T.packetsSent,g.qualityLimitationDurations=T.qualityLimitationDurations,g.bitrateTotal+=T.targetBitrate,g.count++):T.type==="remote-inbound-rtp"&&(g.packetsLost=T.packetsLost,g.rttTotal+=T.roundTripTime,g.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(b=>setTimeout(b,jd)),clearInterval(y),d.stop(),n.remove(),yield this.disconnect(),g})}}function ab(a){return R(this,void 0,void 0,function*(){var e,n;a??(a={}),(e=a.audio)!==null&&e!==void 0||(a.audio={deviceId:"default"}),(n=a.video)!==null&&n!==void 0||(a.video={deviceId:"default"});const{audioProcessor:r,videoProcessor:o}=Ff(a),l=Hy(a,Fy,Yy),u=Qc(l),d=navigator.mediaDevices.getUserMedia(u);a.audio&&(gt.userMediaPromiseMap.set("audioinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("audioinput"))),a.video&&(gt.userMediaPromiseMap.set("videoinput",d),d.catch(()=>gt.userMediaPromiseMap.delete("videoinput")));const h=yield d;return Promise.all(h.getTracks().map(m=>R(this,void 0,void 0,function*(){const g=m.kind==="audio";g?l.audio:l.video;let y;const b=g?u.audio:u.video;typeof b!="boolean"&&(y=b);const T=m.getSettings().deviceId;y!=null&&y.deviceId&&Ii(y.deviceId)!==T?y.deviceId=T:y||(y={deviceId:T});const C=Xy(m,y);return C.kind===j.Kind.Video?C.source=j.Source.Camera:C.kind===j.Kind.Audio&&(C.source=j.Source.Microphone),C.mediaStream=h,ti(C)&&r?yield C.setProcessor(r):Er(C)&&o&&(yield C.setProcessor(o)),C})))})}function Z1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:!1,video:a}))[0]})}function J1(a){return R(this,void 0,void 0,function*(){return(yield ab({audio:a,video:!1}))[0]})}class W1 extends Hi{get description(){return"Can publish audio"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield J1();if(yield Gy(r,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),n.localParticipant.publishTrack(r),yield new Promise(d=>setTimeout(d,3e3));const l=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!l)throw new Error("Could not get RTCStats");let u=0;if(l.forEach(d=>{d.type==="outbound-rtp"&&(d.kind==="audio"||!d.kind&&d.mediaType==="audio")&&(u=d.packetsSent)}),u===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(u," audio packets"))})}}class $1 extends Hi{get description(){return"Can publish video"}perform(){return R(this,void 0,void 0,function*(){var e;const n=yield this.connect(),r=yield Z1();yield this.checkForVideo(r.mediaStreamTrack),n.localParticipant.publishTrack(r),yield new Promise(u=>setTimeout(u,5e3));const o=yield(e=r.sender)===null||e===void 0?void 0:e.getStats();if(!o)throw new Error("Could not get RTCStats");let l=0;if(o.forEach(u=>{u.type==="outbound-rtp"&&(u.kind==="video"||!u.kind&&u.mediaType==="video")&&(l+=u.packetsSent)}),l===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(l," video packets"))})}checkForVideo(e){return R(this,void 0,void 0,function*(){const n=new MediaStream;n.addTrack(e.clone());const r=document.createElement("video");r.srcObject=n,r.muted=!0,yield new Promise(o=>{r.onplay=()=>{setTimeout(()=>{var l,u,d,h;const m=document.createElement("canvas"),g=e.getSettings(),y=(u=(l=g.width)!==null&&l!==void 0?l:r.videoWidth)!==null&&u!==void 0?u:1280,b=(h=(d=g.height)!==null&&d!==void 0?d:r.videoHeight)!==null&&h!==void 0?h:720;m.width=y,m.height=b;const T=m.getContext("2d");T.drawImage(r,0,0);const k=T.getImageData(0,0,m.width,m.height).data;let w=!0;for(let O=0;O{setTimeout(m,5e3),l=m}),d=()=>{r=!0};n.on(B.SignalReconnecting,d).on(B.Reconnecting,d).on(B.Reconnected,()=>{o=!0,l(!0)}),(e=n.engine.client.ws)===null||e===void 0||e.close();const h=n.engine.client.onClose;if(h&&h(""),yield u,r){if(!o||n.state!==Te.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class tR extends Hi{get description(){return"Can connect via TURN"}perform(){return R(this,void 0,void 0,function*(){var e,n;const r=new Yf,o=yield r.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let l=!1,u=!1,d=!1;for(let h of o.iceServers)for(let m of h.urls)m.startsWith("turn:")?(u=!0,d=!0):m.startsWith("turns:")&&(u=!0,d=!0,l=!0),m.startsWith("stun:")&&(d=!0);d?u&&!l&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield r.close(),!((n=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||n===void 0)&&n.iceServers||u?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(h=>setTimeout(h,0)))})}}class nR extends Hi{get description(){return"Establishing WebRTC connection"}perform(){return R(this,void 0,void 0,function*(){let e=!1,n=!1;this.room.on(B.SignalConnected,()=>{const r=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(o,l)=>{if(o.candidate){const u=new RTCIceCandidate(o);let d="".concat(u.protocol," ").concat(u.address,":").concat(u.port," ").concat(u.type);u.address&&(iR(u.address)?d+=" (private)":u.protocol==="tcp"&&u.tcpType==="passive"?(e=!0,d+=" (passive)"):u.protocol==="udp"&&(n=!0)),this.appendMessage(d)}r&&r(o,l)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=o=>{o instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(o.errorCode," ").concat(o.errorText," ").concat(o.url))})});try{yield this.connect(),ke.info("now the room is connected")}catch(r){throw this.appendWarning("ports need to be open on firewall in order to connect."),r}e||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")})}}function iR(a){const e=a.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const n=parseInt(e[1],10);if(n>=16&&n<=31)return!0}}return!1}class aR extends Hi{get description(){return"Connecting to signal connection via WebSocket"}perform(){return R(this,void 0,void 0,function*(){var e,n,r;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let o=new Yf;const l=yield o.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(l.serverVersion,".")),((e=l.serverInfo)===null||e===void 0?void 0:e.edition)===F0.Cloud&&(!((n=l.serverInfo)===null||n===void 0)&&n.region)&&this.appendMessage("LiveKit Cloud: ".concat((r=l.serverInfo)===null||r===void 0?void 0:r.region)),yield o.close()})}}class bO extends xn.EventEmitter{constructor(e,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=n,this.options=r}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:fn.IDLE,name:"",description:""}),e}updateCheck(e,n){this.checkResults.set(e,n),this.emit("checkUpdate",e,n)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==fn.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return R(this,void 0,void 0,function*(){const n=this.getNextCheckId(),r=new e(this.url,this.token,this.options),o=u=>{this.updateCheck(n,u)};r.on("update",o);const l=yield r.run();return r.off("update",o),l})}checkWebsocket(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(aR)})}checkWebRTC(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(nR)})}checkTURN(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(tR)})}checkReconnect(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(eR)})}checkPublishAudio(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(W1)})}checkPublishVideo(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck($1)})}checkConnectionProtocol(){return R(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(X1);if(e.data&&"protocol"in e.data){const n=e.data;this.options.protocol=n.protocol}return e})}checkCloudRegion(){return R(this,void 0,void 0,function*(){return this.createAndRunCheck(Q1)})}}const kf=Math.min,pr=Math.max,jc=Math.round,zi=a=>({x:a,y:a}),rR={left:"right",right:"left",bottom:"top",top:"bottom"},sR={start:"end",end:"start"};function e0(a,e,n){return pr(a,kf(e,n))}function Zc(a,e){return typeof a=="function"?a(e):a}function ya(a){return a.split("-")[0]}function Jc(a){return a.split("-")[1]}function rb(a){return a==="x"?"y":"x"}function sb(a){return a==="y"?"height":"width"}function Wc(a){return["top","bottom"].includes(ya(a))?"y":"x"}function ob(a){return rb(Wc(a))}function oR(a,e,n){n===void 0&&(n=!1);const r=Jc(a),o=ob(a),l=sb(o);let u=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[l]>e.floating[l]&&(u=Bc(u)),[u,Bc(u)]}function cR(a){const e=Bc(a);return[Cf(a),e,Cf(e)]}function Cf(a){return a.replace(/start|end/g,e=>sR[e])}function lR(a,e,n){const r=["left","right"],o=["right","left"],l=["top","bottom"],u=["bottom","top"];switch(a){case"top":case"bottom":return n?e?o:r:e?r:o;case"left":case"right":return e?l:u;default:return[]}}function uR(a,e,n,r){const o=Jc(a);let l=lR(ya(a),n==="start",r);return o&&(l=l.map(u=>u+"-"+o),e&&(l=l.concat(l.map(Cf)))),l}function Bc(a){return a.replace(/left|right|bottom|top/g,e=>rR[e])}function dR(a){return{top:0,right:0,bottom:0,left:0,...a}}function fR(a){return typeof a!="number"?dR(a):{top:a,right:a,bottom:a,left:a}}function zc(a){const{x:e,y:n,width:r,height:o}=a;return{width:r,height:o,top:n,left:e,right:e+r,bottom:n+o,x:e,y:n}}function t0(a,e,n){let{reference:r,floating:o}=a;const l=Wc(e),u=ob(e),d=sb(u),h=ya(e),m=l==="y",g=r.x+r.width/2-o.width/2,y=r.y+r.height/2-o.height/2,b=r[d]/2-o[d]/2;let T;switch(h){case"top":T={x:g,y:r.y-o.height};break;case"bottom":T={x:g,y:r.y+r.height};break;case"right":T={x:r.x+r.width,y};break;case"left":T={x:r.x-o.width,y};break;default:T={x:r.x,y:r.y}}switch(Jc(e)){case"start":T[u]-=b*(n&&m?-1:1);break;case"end":T[u]+=b*(n&&m?-1:1);break}return T}const hR=async(a,e,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:l=[],platform:u}=n,d=l.filter(Boolean),h=await(u.isRTL==null?void 0:u.isRTL(e));let m=await u.getElementRects({reference:a,floating:e,strategy:o}),{x:g,y}=t0(m,r,h),b=r,T={},C=0;for(let k=0;koe<=0)){var X,J;const oe=(((X=l.flip)==null?void 0:X.index)||0)+1,qe=_[oe];if(qe)return{data:{index:oe,overflows:ie},reset:{placement:qe}};let Fe=(J=ie.filter(Ye=>Ye.overflows[0]<=0).sort((Ye,te)=>Ye.overflows[1]-te.overflows[1])[0])==null?void 0:J.placement;if(!Fe)switch(T){case"bestFit":{var ee;const Ye=(ee=ie.map(te=>[te.placement,te.overflows.filter(he=>he>0).reduce((he,ue)=>he+ue,0)]).sort((te,he)=>te[1]-he[1])[0])==null?void 0:ee[0];Ye&&(Fe=Ye);break}case"initialPlacement":Fe=d;break}if(o!==Fe)return{reset:{placement:Fe}}}return{}}}};async function pR(a,e){const{placement:n,platform:r,elements:o}=a,l=await(r.isRTL==null?void 0:r.isRTL(o.floating)),u=ya(n),d=Jc(n),h=Wc(n)==="y",m=["left","top"].includes(u)?-1:1,g=l&&h?-1:1,y=Zc(e,a);let{mainAxis:b,crossAxis:T,alignmentAxis:C}=typeof y=="number"?{mainAxis:y,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...y};return d&&typeof C=="number"&&(T=d==="end"?C*-1:C),h?{x:T*g,y:b*m}:{x:b*m,y:T*g}}const gR=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(e){var n,r;const{x:o,y:l,placement:u,middlewareData:d}=e,h=await pR(e,a);return u===((n=d.offset)==null?void 0:n.placement)&&(r=d.arrow)!=null&&r.alignmentOffset?{}:{x:o+h.x,y:l+h.y,data:{...h,placement:u}}}}},vR=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:l=!0,crossAxis:u=!1,limiter:d={fn:w=>{let{x:O,y:V}=w;return{x:O,y:V}}},...h}=Zc(a,e),m={x:n,y:r},g=await cb(e,h),y=Wc(ya(o)),b=rb(y);let T=m[b],C=m[y];if(l){const w=b==="y"?"top":"left",O=b==="y"?"bottom":"right",V=T+g[w],Q=T-g[O];T=e0(V,T,Q)}if(u){const w=y==="y"?"top":"left",O=y==="y"?"bottom":"right",V=C+g[w],Q=C-g[O];C=e0(V,C,Q)}const k=d.fn({...e,[b]:T,[y]:C});return{...k,data:{x:k.x-n,y:k.y-r}}}}};function $c(){return typeof window<"u"}function Rr(a){return lb(a)?(a.nodeName||"").toLowerCase():"#document"}function Gt(a){var e;return(a==null||(e=a.ownerDocument)==null?void 0:e.defaultView)||window}function ii(a){var e;return(e=(lb(a)?a.ownerDocument:a.document)||window.document)==null?void 0:e.documentElement}function lb(a){return $c()?a instanceof Node||a instanceof Gt(a).Node:!1}function vn(a){return $c()?a instanceof Element||a instanceof Gt(a).Element:!1}function Mn(a){return $c()?a instanceof HTMLElement||a instanceof Gt(a).HTMLElement:!1}function n0(a){return!$c()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof Gt(a).ShadowRoot}function Ys(a){const{overflow:e,overflowX:n,overflowY:r,display:o}=yn(a);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(o)}function yR(a){return["table","td","th"].includes(Rr(a))}function el(a){return[":popover-open",":modal"].some(e=>{try{return a.matches(e)}catch{return!1}})}function Wf(a){const e=$f(),n=vn(a)?yn(a):a;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function bR(a){let e=qi(a);for(;Mn(e)&&!Tr(e);){if(Wf(e))return e;if(el(e))return null;e=qi(e)}return null}function $f(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Tr(a){return["html","body","#document"].includes(Rr(a))}function yn(a){return Gt(a).getComputedStyle(a)}function tl(a){return vn(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function qi(a){if(Rr(a)==="html")return a;const e=a.assignedSlot||a.parentNode||n0(a)&&a.host||ii(a);return n0(e)?e.host:e}function ub(a){const e=qi(a);return Tr(e)?a.ownerDocument?a.ownerDocument.body:a.body:Mn(e)&&Ys(e)?e:ub(e)}function db(a,e,n){var r;e===void 0&&(e=[]);const o=ub(a),l=o===((r=a.ownerDocument)==null?void 0:r.body),u=Gt(o);return l?(Ef(u),e.concat(u,u.visualViewport||[],Ys(o)?o:[],[])):e.concat(o,db(o,[]))}function Ef(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function fb(a){const e=yn(a);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const o=Mn(a),l=o?a.offsetWidth:n,u=o?a.offsetHeight:r,d=jc(n)!==l||jc(r)!==u;return d&&(n=l,r=u),{width:n,height:r,$:d}}function hb(a){return vn(a)?a:a.contextElement}function gr(a){const e=hb(a);if(!Mn(e))return zi(1);const n=e.getBoundingClientRect(),{width:r,height:o,$:l}=fb(e);let u=(l?jc(n.width):n.width)/r,d=(l?jc(n.height):n.height)/o;return(!u||!Number.isFinite(u))&&(u=1),(!d||!Number.isFinite(d))&&(d=1),{x:u,y:d}}const SR=zi(0);function mb(a){const e=Gt(a);return!$f()||!e.visualViewport?SR:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function TR(a,e,n){return e===void 0&&(e=!1),!n||e&&n!==Gt(a)?!1:e}function Gs(a,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const o=a.getBoundingClientRect(),l=hb(a);let u=zi(1);e&&(r?vn(r)&&(u=gr(r)):u=gr(a));const d=TR(l,n,r)?mb(l):zi(0);let h=(o.left+d.x)/u.x,m=(o.top+d.y)/u.y,g=o.width/u.x,y=o.height/u.y;if(l){const b=Gt(l),T=r&&vn(r)?Gt(r):r;let C=b,k=Ef(C);for(;k&&r&&T!==C;){const w=gr(k),O=k.getBoundingClientRect(),V=yn(k),Q=O.left+(k.clientLeft+parseFloat(V.paddingLeft))*w.x,U=O.top+(k.clientTop+parseFloat(V.paddingTop))*w.y;h*=w.x,m*=w.y,g*=w.x,y*=w.y,h+=Q,m+=U,C=Gt(k),k=Ef(C)}}return zc({width:g,height:y,x:h,y:m})}function kR(a){let{elements:e,rect:n,offsetParent:r,strategy:o}=a;const l=o==="fixed",u=ii(r),d=e?el(e.floating):!1;if(r===u||d&&l)return n;let h={scrollLeft:0,scrollTop:0},m=zi(1);const g=zi(0),y=Mn(r);if((y||!y&&!l)&&((Rr(r)!=="body"||Ys(u))&&(h=tl(r)),Mn(r))){const b=Gs(r);m=gr(r),g.x=b.x+r.clientLeft,g.y=b.y+r.clientTop}return{width:n.width*m.x,height:n.height*m.y,x:n.x*m.x-h.scrollLeft*m.x+g.x,y:n.y*m.y-h.scrollTop*m.y+g.y}}function CR(a){return Array.from(a.getClientRects())}function Rf(a,e){const n=tl(a).scrollLeft;return e?e.left+n:Gs(ii(a)).left+n}function ER(a){const e=ii(a),n=tl(a),r=a.ownerDocument.body,o=pr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),l=pr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let u=-n.scrollLeft+Rf(a);const d=-n.scrollTop;return yn(r).direction==="rtl"&&(u+=pr(e.clientWidth,r.clientWidth)-o),{width:o,height:l,x:u,y:d}}function RR(a,e){const n=Gt(a),r=ii(a),o=n.visualViewport;let l=r.clientWidth,u=r.clientHeight,d=0,h=0;if(o){l=o.width,u=o.height;const m=$f();(!m||m&&e==="fixed")&&(d=o.offsetLeft,h=o.offsetTop)}return{width:l,height:u,x:d,y:h}}function _R(a,e){const n=Gs(a,!0,e==="fixed"),r=n.top+a.clientTop,o=n.left+a.clientLeft,l=Mn(a)?gr(a):zi(1),u=a.clientWidth*l.x,d=a.clientHeight*l.y,h=o*l.x,m=r*l.y;return{width:u,height:d,x:h,y:m}}function i0(a,e,n){let r;if(e==="viewport")r=RR(a,n);else if(e==="document")r=ER(ii(a));else if(vn(e))r=_R(e,n);else{const o=mb(a);r={...e,x:e.x-o.x,y:e.y-o.y}}return zc(r)}function pb(a,e){const n=qi(a);return n===e||!vn(n)||Tr(n)?!1:yn(n).position==="fixed"||pb(n,e)}function wR(a,e){const n=e.get(a);if(n)return n;let r=db(a,[]).filter(d=>vn(d)&&Rr(d)!=="body"),o=null;const l=yn(a).position==="fixed";let u=l?qi(a):a;for(;vn(u)&&!Tr(u);){const d=yn(u),h=Wf(u);!h&&d.position==="fixed"&&(o=null),(l?!h&&!o:!h&&d.position==="static"&&o&&["absolute","fixed"].includes(o.position)||Ys(u)&&!h&&pb(a,u))?r=r.filter(m=>m!==u):o=d,u=qi(u)}return e.set(a,r),r}function OR(a){let{element:e,boundary:n,rootBoundary:r,strategy:o}=a;const l=[...n==="clippingAncestors"?el(e)?[]:wR(e,this._c):[].concat(n),r],u=l[0],d=l.reduce((h,m)=>{const g=i0(e,m,o);return h.top=pr(g.top,h.top),h.right=kf(g.right,h.right),h.bottom=kf(g.bottom,h.bottom),h.left=pr(g.left,h.left),h},i0(e,u,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function DR(a){const{width:e,height:n}=fb(a);return{width:e,height:n}}function AR(a,e,n){const r=Mn(e),o=ii(e),l=n==="fixed",u=Gs(a,!0,l,e);let d={scrollLeft:0,scrollTop:0};const h=zi(0);if(r||!r&&!l)if((Rr(e)!=="body"||Ys(o))&&(d=tl(e)),r){const T=Gs(e,!0,l,e);h.x=T.x+e.clientLeft,h.y=T.y+e.clientTop}else o&&(h.x=Rf(o));let m=0,g=0;if(o&&!r&&!l){const T=o.getBoundingClientRect();g=T.top+d.scrollTop,m=T.left+d.scrollLeft-Rf(o,T)}const y=u.left+d.scrollLeft-h.x-m,b=u.top+d.scrollTop-h.y-g;return{x:y,y:b,width:u.width,height:u.height}}function Bd(a){return yn(a).position==="static"}function a0(a,e){if(!Mn(a)||yn(a).position==="fixed")return null;if(e)return e(a);let n=a.offsetParent;return ii(a)===n&&(n=n.ownerDocument.body),n}function gb(a,e){const n=Gt(a);if(el(a))return n;if(!Mn(a)){let o=qi(a);for(;o&&!Tr(o);){if(vn(o)&&!Bd(o))return o;o=qi(o)}return n}let r=a0(a,e);for(;r&&yR(r)&&Bd(r);)r=a0(r,e);return r&&Tr(r)&&Bd(r)&&!Wf(r)?n:r||bR(a)||n}const MR=async function(a){const e=this.getOffsetParent||gb,n=this.getDimensions,r=await n(a.floating);return{reference:AR(a.reference,await e(a.floating),a.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function PR(a){return yn(a).direction==="rtl"}const xR={convertOffsetParentRelativeRectToViewportRelativeRect:kR,getDocumentElement:ii,getClippingRect:OR,getOffsetParent:gb,getElementRects:MR,getClientRects:CR,getDimensions:DR,getScale:gr,isElement:vn,isRTL:PR},NR=gR,UR=vR,LR=mR,IR=(a,e,n)=>{const r=new Map,o={platform:xR,...n},l={...o.platform,_c:r};return hR(a,e,{...o,platform:l})};var Ns=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function jR(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var vb={exports:{}};(function(a){(function(e,n){a.exports?a.exports=n():e.log=n()})(Ns,function(){var e=function(){},n="undefined",r=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],l={},u=null;function d(k,w){var O=k[w];if(typeof O.bind=="function")return O.bind(k);try{return Function.prototype.bind.call(O,k)}catch{return function(){return Function.prototype.apply.apply(O,[k,arguments])}}}function h(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function m(k){return k==="debug"&&(k="log"),typeof console===n?!1:k==="trace"&&r?h:console[k]!==void 0?d(console,k):console.log!==void 0?d(console,"log"):e}function g(){for(var k=this.getLevel(),w=0;w=0&&oe<=O.levels.SILENT)return oe;throw new TypeError("log.setLevel() called with invalid level: "+ee)}O.name=k,O.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},O.methodFactory=w||b,O.getLevel=function(){return U??Q??V},O.setLevel=function(ee,oe){return U=X(ee),oe!==!1&&H(U),g.call(O)},O.setDefaultLevel=function(ee){Q=X(ee),$()||O.setLevel(ee,!1)},O.resetLevel=function(){U=null,ie(),g.call(O)},O.enableAll=function(ee){O.setLevel(O.levels.TRACE,ee)},O.disableAll=function(ee){O.setLevel(O.levels.SILENT,ee)},O.rebuild=function(){if(u!==O&&(V=X(u.getLevel())),g.call(O),u===O)for(var ee in l)l[ee].rebuild()},V=X(u?u.getLevel():"WARN");var J=$();J!=null&&(U=X(J)),g.call(O)}u=new T,u.getLogger=function(k){if(typeof k!="symbol"&&typeof k!="string"||k==="")throw new TypeError("You must supply a name when creating a logger.");var w=l[k];return w||(w=l[k]=new T(k,u.methodFactory)),w};var C=typeof window!==n?window.log:void 0;return u.noConflict=function(){return typeof window!==n&&window.log===u&&(window.log=C),u},u.getLoggers=function(){return l},u.default=u,u})})(vb);var BR=vb.exports;const zR=jR(BR);var _f=function(a,e){return _f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},_f(a,e)};function ai(a,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");_f(a,e);function n(){this.constructor=a}a.prototype=e===null?Object.create(e):(n.prototype=e.prototype,new n)}function qR(a,e,n,r){function o(l){return l instanceof n?l:new n(function(u){u(l)})}return new(n||(n=Promise))(function(l,u){function d(g){try{m(r.next(g))}catch(y){u(y)}}function h(g){try{m(r.throw(g))}catch(y){u(y)}}function m(g){g.done?l(g.value):o(g.value).then(d,h)}m((r=r.apply(a,[])).next())})}function yb(a,e){var n={label:0,sent:function(){if(l[0]&1)throw l[1];return l[1]},trys:[],ops:[]},r,o,l,u=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return u.next=d(0),u.throw=d(1),u.return=d(2),typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(m){return function(g){return h([m,g])}}function h(m){if(r)throw new TypeError("Generator is already executing.");for(;u&&(u=0,m[0]&&(n=0)),n;)try{if(r=1,o&&(l=m[0]&2?o.return:m[0]?o.throw||((l=o.return)&&l.call(o),0):o.next)&&!(l=l.call(o,m[1])).done)return l;switch(o=0,l&&(m=[m[0]&2,l.value]),m[0]){case 0:case 1:l=m;break;case 4:return n.label++,{value:m[1],done:!1};case 5:n.label++,o=m[1],m=[0];continue;case 7:m=n.ops.pop(),n.trys.pop();continue;default:if(l=n.trys,!(l=l.length>0&&l[l.length-1])&&(m[0]===6||m[0]===2)){n=0;continue}if(m[0]===3&&(!l||m[1]>l[0]&&m[1]=a.length&&(a=void 0),{value:a&&a[r++],done:!a}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function qc(a,e){var n=typeof Symbol=="function"&&a[Symbol.iterator];if(!n)return a;var r=n.call(a),o,l=[],u;try{for(;(e===void 0||e-- >0)&&!(o=r.next()).done;)l.push(o.value)}catch(d){u={error:d}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(u)throw u.error}}return l}function Vc(a,e,n){if(arguments.length===2)for(var r=0,o=e.length,l;r1||h(T,k)})},C&&(o[T]=C(o[T])))}function h(T,C){try{m(r[T](C))}catch(k){b(l[0][3],k)}}function m(T){T.value instanceof vr?Promise.resolve(T.value.v).then(g,y):b(l[0][2],T)}function g(T){h("next",T)}function y(T){h("throw",T)}function b(T,C){T(C),l.shift(),l.length&&h(l[0][0],l[0][1])}}function HR(a){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=a[Symbol.asyncIterator],n;return e?e.call(a):(a=typeof kr=="function"?kr(a):a[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(l){n[l]=a[l]&&function(u){return new Promise(function(d,h){u=a[l](u),o(d,h,u.done,u.value)})}}function o(l,u,d,h){Promise.resolve(h).then(function(m){l({value:m,done:d})},u)}}function dt(a){return typeof a=="function"}function eh(a){var e=function(r){Error.call(r),r.stack=new Error().stack},n=a(e);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var zd=eh(function(a){return function(e){a(this),this.message=e?e.length+` errors occurred during unsubscription: `+e.map(function(n,r){return r+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}function hO(){return{url:"##livekit-url-placeholder##",token:"##livekit-token-placeholder##"}}const mO=a=>Ne.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{state:n,audioTrack:r}=Yw(),{canPlayAudio:o}=Jb({props:{}});return Ne.jsxs("div",{className:"content",children:[Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsxs(Wb,{onClick:a,children:[Ne.jsx(mO,{}),"Disconnect"]})})]}),Ne.jsxs("div",{className:"controls",children:[Ne.jsx(fO,{controls:{microphone:!0,leave:!1}}),o&&e==Te.Connected&&Ne.jsx("div",{className:"agent-visualizer",children:Ne.jsx($b,{state:n,barCount:15,trackRef:r,options:{minHeight:30,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(!0),o=hO();return a?Ne.jsxs("div",{children:["Error: ",a]}):n?Ne.jsxs(_w,{serverUrl:o.url,token:o.token,onError:l=>e(l.message),children:[Ne.jsx(pO,{onDisconnect:()=>r(!1)}),Ne.jsx(sO,{})]}):Ne.jsx("div",{className:"content",children:Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})})};Mk.createRoot(document.getElementById("root")).render(Ne.jsx(P.StrictMode,{children:Ne.jsx(gO,{})})); + `):"",this.name="UnsubscriptionError",this.errors=e}});function Hc(a,e){if(a){var n=a.indexOf(e);0<=n&&a.splice(n,1)}}var Ks=function(){function a(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return a.prototype.unsubscribe=function(){var e,n,r,o,l;if(!this.closed){this.closed=!0;var u=this._parentage;if(u)if(this._parentage=null,Array.isArray(u))try{for(var d=kr(u),h=d.next();!h.done;h=d.next()){var m=h.value;m.remove(this)}}catch(k){e={error:k}}finally{try{h&&!h.done&&(n=d.return)&&n.call(d)}finally{if(e)throw e.error}}else u.remove(this);var g=this.initialTeardown;if(dt(g))try{g()}catch(k){l=k instanceof zd?k.errors:[k]}var y=this._finalizers;if(y){this._finalizers=null;try{for(var b=kr(y),T=b.next();!T.done;T=b.next()){var C=T.value;try{r0(C)}catch(k){l=l??[],k instanceof zd?l=Vc(Vc([],qc(l)),qc(k.errors)):l.push(k)}}}catch(k){r={error:k}}finally{try{T&&!T.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}}if(l)throw new zd(l)}},a.prototype.add=function(e){var n;if(e&&e!==this)if(this.closed)r0(e);else{if(e instanceof a){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(e)}},a.prototype._hasParent=function(e){var n=this._parentage;return n===e||Array.isArray(n)&&n.includes(e)},a.prototype._addParent=function(e){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(e),n):n?[n,e]:e},a.prototype._removeParent=function(e){var n=this._parentage;n===e?this._parentage=null:Array.isArray(n)&&Hc(n,e)},a.prototype.remove=function(e){var n=this._finalizers;n&&Hc(n,e),e instanceof a&&e._removeParent(this)},a.EMPTY=function(){var e=new a;return e.closed=!0,e}(),a}(),bb=Ks.EMPTY;function Sb(a){return a instanceof Ks||a&&"closed"in a&&dt(a.remove)&&dt(a.add)&&dt(a.unsubscribe)}function r0(a){dt(a)?a():a.unsubscribe()}var GR={Promise:void 0},FR={setTimeout:function(a,e){for(var n=[],r=2;r0},enumerable:!1,configurable:!0}),e.prototype._trySubscribe=function(n){return this._throwIfClosed(),a.prototype._trySubscribe.call(this,n)},e.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},e.prototype._innerSubscribe=function(n){var r=this,o=this,l=o.hasError,u=o.isStopped,d=o.observers;return l||u?bb:(this.currentObservers=null,d.push(n),new Ks(function(){r.currentObservers=null,Hc(d,n)}))},e.prototype._checkFinalizedStatuses=function(n){var r=this,o=r.hasError,l=r.thrownError,u=r.isStopped;o?n.error(l):u&&n.complete()},e.prototype.asObservable=function(){var n=new vt;return n.source=this,n},e.create=function(n,r){return new c0(n,r)},e}(vt),c0=function(a){ai(e,a);function e(n,r){var o=a.call(this)||this;return o.destination=n,o.source=r,o}return e.prototype.next=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.next)===null||o===void 0||o.call(r,n)},e.prototype.error=function(n){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.error)===null||o===void 0||o.call(r,n)},e.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},e.prototype._subscribe=function(n){var r,o;return(o=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&o!==void 0?o:bb},e}(Cr),t_=function(a){ai(e,a);function e(n){var r=a.call(this)||this;return r._value=n,r}return Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),e.prototype._subscribe=function(n){var r=a.prototype._subscribe.call(this,n);return!r.closed&&n.next(this._value),r},e.prototype.getValue=function(){var n=this,r=n.hasError,o=n.thrownError,l=n._value;if(r)throw o;return this._throwIfClosed(),l},e.prototype.next=function(n){a.prototype.next.call(this,this._value=n)},e}(Cr),n_={now:function(){return Date.now()}},i_=function(a){ai(e,a);function e(n,r){return a.call(this)||this}return e.prototype.schedule=function(n,r){return this},e}(Ks),l0={setInterval:function(a,e){for(var n=[],r=2;re in a?w_(a,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[e]=n,Df=(a,e)=>{for(var n in e||(e={}))A_.call(e,n)&&f0(a,n,e[n]);if(d0)for(var n of d0(e))M_.call(e,n)&&f0(a,n,e[n]);return a},P_=(a,e)=>O_(a,D_(e)),Ta=(a,e,n)=>new Promise((r,o)=>{var l=h=>{try{d(n.next(h))}catch(m){o(m)}},u=h=>{try{d(n.throw(h))}catch(m){o(m)}},d=h=>h.done?r(h.value):Promise.resolve(h.value).then(l,u);d((n=n.apply(a,e)).next())}),jb="lk";function ih(a){return typeof a>"u"?!1:x_(a)||N_(a)}function x_(a){var e;return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("track")&&typeof((e=a.publication)==null?void 0:e.track)<"u":!1}function N_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&a.hasOwnProperty("publication")&&typeof a.publication<"u":!1}function U_(a){return a?a.hasOwnProperty("participant")&&a.hasOwnProperty("source")&&typeof a.publication>"u":!1}function Bb(a){if(typeof a=="string"||typeof a=="number")return`${a}`;if(U_(a))return`${a.participant.identity}_${a.source}_placeholder`;if(ih(a))return`${a.participant.identity}_${a.publication.source}_${a.publication.trackSid}`;throw new Error(`Can't generate a id for the given track reference: ${a}`)}function L_(a,e){return Ta(this,null,function*(){const{x:n,y:r}=yield IR(a,e,{placement:"top",middleware:[NR(6),LR(),UR({padding:5})]});return{x:n,y:r}})}function I_(a,e){return!a.contains(e.target)}var j_=[B.ConnectionStateChanged,B.RoomMetadataChanged,B.ActiveSpeakersChanged,B.ConnectionQualityChanged,B.ParticipantConnected,B.ParticipantDisconnected,B.ParticipantPermissionsChanged,B.ParticipantMetadataChanged,B.ParticipantNameChanged,B.ParticipantAttributesChanged,B.TrackMuted,B.TrackUnmuted,B.TrackPublished,B.TrackUnpublished,B.TrackStreamStateChanged,B.TrackSubscriptionFailed,B.TrackSubscriptionPermissionChanged,B.TrackSubscriptionStatusChanged],zb=[...j_,B.LocalTrackPublished,B.LocalTrackUnpublished],B_=[F.TrackPublished,F.TrackUnpublished,F.TrackMuted,F.TrackUnmuted,F.TrackStreamStateChanged,F.TrackSubscribed,F.TrackUnsubscribed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionFailed,F.LocalTrackPublished,F.LocalTrackUnpublished],z_=[F.ConnectionQualityChanged,F.IsSpeakingChanged,F.ParticipantMetadataChanged,F.ParticipantPermissionsChanged,F.TrackMuted,F.TrackUnmuted,F.TrackPublished,F.TrackUnpublished,F.TrackStreamStateChanged,F.TrackSubscriptionFailed,F.TrackSubscriptionPermissionChanged,F.TrackSubscriptionStatusChanged];[...z_,F.LocalTrackPublished,F.LocalTrackUnpublished];var Ae=zR.getLogger("lk-components-js");Ae.setDefaultLevel("WARN");function q_(a,e){var n;return P_(Df({},a),{receivedAtMediaTimestamp:(n=e.rtpTimestamp)!=null?n:0,receivedAt:e.timestamp})}function V_(a,e,n){return[...a,...e].reduceRight((r,o)=>(r.find(l=>l.id===o.id)||r.unshift(o),r),[]).slice(0-n)}function qb(a){return typeof a=="object"}function Vb(a){return Array.isArray(a)&&a.filter(qb).length>0}function ka(a){return`${jb}-${a}`}function H_(a){const e=Af(a),n=ah(a.participant).pipe(Ft(()=>Af(a)),Nn(e));return{className:ka(a.source===j.Source.Camera||a.source===j.Source.ScreenShare?"participant-media-video":"participant-media-audio"),trackObserver:n}}function Af(a){if(ih(a))return a.publication;{const{source:e,name:n,participant:r}=a;if(e&&n)return r.getTrackPublications().find(o=>o.source===e&&o.trackName===n);if(n)return r.getTrackPublicationByName(n);if(e)return r.getTrackPublication(e);throw new Error("At least one of source and name needs to be defined")}}function nl(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function Hb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function G_(a){return Hb(a,B.ConnectionStateChanged).pipe(Ft(([e])=>e),Nn(a.state))}function F_(a,e,n=!0){var r;const o=()=>Ta(this,null,function*(){try{const d=yield ni.getLocalDevices(a,n);l.next(d)}catch(d){e==null||e(d)}}),l=new Cr,u=l.pipe(__(()=>{var d;(d=navigator==null?void 0:navigator.mediaDevices)==null||d.removeEventListener("devicechange",o)}));if(typeof window<"u"){if(!window.isSecureContext)throw new Error("Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices");(r=navigator==null?void 0:navigator.mediaDevices)==null||r.addEventListener("devicechange",o)}return Of(ni.getLocalDevices(a,n).catch(d=>(e==null||e(d),[])),u)}function Y_(a){return nl(a,B.AudioPlaybackStatusChanged).pipe(Ft(e=>({canPlayAudio:e.canPlaybackAudio})))}function K_(a){return nl(a,B.VideoPlaybackStatusChanged).pipe(Ft(e=>({canPlayVideo:e.canPlaybackVideo})))}function Q_(a,e){return Hb(a,B.ActiveDeviceChanged).pipe(R_(([n])=>n===e),Ft(([n,r])=>(Ae.debug("activeDeviceObservable | RoomEvent.ActiveDeviceChanged",{kind:n,deviceId:r}),r)))}function Gb(a,...e){return new vt(n=>{const r=()=>{n.next(a)};return e.forEach(o=>{a.on(o,r)}),()=>{e.forEach(o=>{a.off(o,r)})}}).pipe(Nn(a))}function ah(a){return Gb(a,F.TrackMuted,F.TrackUnmuted,F.ParticipantPermissionsChanged,F.TrackPublished,F.TrackUnpublished,F.LocalTrackPublished,F.LocalTrackUnpublished,F.MediaDevicesError,F.TrackSubscriptionStatusChanged).pipe(Ft(e=>{const{isMicrophoneEnabled:n,isCameraEnabled:r,isScreenShareEnabled:o}=e,l=e.getTrackPublication(j.Source.Microphone),u=e.getTrackPublication(j.Source.Camera);return{isCameraEnabled:r,isMicrophoneEnabled:n,isScreenShareEnabled:o,cameraTrack:u,microphoneTrack:l,participant:e}}))}function Fb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function X_(a,e={}){var n;let r;const o=new vt(h=>(r=h,()=>d.unsubscribe())).pipe(Nn(Array.from(a.remoteParticipants.values()))),l=(n=e.additionalRoomEvents)!=null?n:zb,u=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,...l])),d=nl(a,...u).subscribe(h=>r==null?void 0:r.next(Array.from(h.remoteParticipants.values())));return a.remoteParticipants.size>0&&(r==null||r.next(Array.from(a.remoteParticipants.values()))),o}function Z_(a){return Fb(a,F.ParticipantPermissionsChanged).pipe(Ft(()=>a.permissions),Nn(a.permissions))}function h0(a){return typeof a>"u"?new vt:Fb(a,F.AttributesChanged).pipe(Ft(([e])=>({changed:e,attributes:a.attributes})),Nn({changed:a.attributes,attributes:a.attributes}))}function J_(a,e,n,r,o){const{localParticipant:l}=e,u=(g,y)=>{let b=!1;switch(g){case j.Source.Camera:b=y.isCameraEnabled;break;case j.Source.Microphone:b=y.isMicrophoneEnabled;break;case j.Source.ScreenShare:b=y.isScreenShareEnabled;break}return b},d=ah(l).pipe(Ft(g=>u(a,g.participant)),Nn(u(a,l))),h=new Cr,m=(g,y)=>Ta(this,null,function*(){try{switch(y??(y=n),h.next(!0),a){case j.Source.Camera:return yield l.setCameraEnabled(g??!l.isCameraEnabled,y,r),l.isCameraEnabled;case j.Source.Microphone:return yield l.setMicrophoneEnabled(g??!l.isMicrophoneEnabled,y,r),l.isMicrophoneEnabled;case j.Source.ScreenShare:return yield l.setScreenShareEnabled(g??!l.isScreenShareEnabled,y,r),l.isScreenShareEnabled;default:throw new TypeError("Tried to toggle unsupported source")}}catch(b){if(o&&b instanceof Error){o==null||o(b);return}else throw b}finally{h.next(!1)}});return{className:ka("button"),toggle:m,enabledObserver:d,pendingObserver:h.asObservable()}}function W_(){let a=!1;const e=new Cr,n=new Cr,r=o=>Ta(this,null,function*(){n.next(!0),a=o??!a,e.next(a),n.next(!1)});return{className:ka("button"),toggle:r,enabledObserver:e.asObservable(),pendingObserver:n.asObservable()}}function $_(a,e,n){const r=new t_(void 0),o=Q_(e,a),l=(u,...d)=>Ta(this,[u,...d],function*(h,m={}){var g,y,b;if(e){Ae.debug(`Switching active device of kind "${a}" with id ${h}.`),yield e.switchActiveDevice(a,h,m.exact);const T=(g=e.getActiveDevice(a))!=null?g:h;T!==h&&h!=="default"&&Ae.info(`We tried to select the device with id (${h}), but the browser decided to select the device with id (${T}) instead.`);let C;a==="audioinput"?C=(y=e.localParticipant.getTrackPublication(j.Source.Microphone))==null?void 0:y.track:a==="videoinput"&&(C=(b=e.localParticipant.getTrackPublication(j.Source.Camera))==null?void 0:b.track);const k=h==="default"&&!C||h==="default"&&(C==null?void 0:C.mediaStreamTrack.label.startsWith("Default"));r.next(k?h:T)}});return{className:ka("media-device-select"),activeDeviceObservable:o,setActiveMediaDevice:l}}function ew(a){const e=n=>{a.disconnect(n)};return{className:ka("disconnect-button"),disconnect:e}}new TextEncoder;new TextDecoder;function tw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Audio for room: ",e),yield e.startAudio()});return{className:ka("start-audio-button"),roomAudioPlaybackAllowedObservable:Y_,handleStartAudioPlayback:a}}function nw(){const a=e=>Ta(this,null,function*(){Ae.info("Start Video for room: ",e),yield e.startVideo()});return{className:ka("start-audio-button"),roomVideoPlaybackAllowedObservable:K_,handleStartVideoPlayback:a}}function iw(){return{className:"lk-room-container"}}function m0(a,e,n=!0){const r=[a.localParticipant,...Array.from(a.remoteParticipants.values())],o=[];return r.forEach(l=>{e.forEach(u=>{const d=Array.from(l.trackPublications.values()).filter(h=>h.source===u&&(!n||h.track)).map(h=>({participant:l,publication:h,source:h.source}));o.push(...d)})}),{trackReferences:o,participants:r}}function p0(a,e,n=!1){const{sources:r,kind:o,name:l}=e;return Array.from(a.trackPublications.values()).filter(u=>(!r||r.includes(u.source))&&(!o||u.kind===o)&&(!l||u.trackName===l)&&(!n||u.track)).map(u=>({participant:a,publication:u,source:u.source}))}function aw(a,e,n){var r,o;const l=(r=n.additionalRoomEvents)!=null?r:zb,u=(o=n.onlySubscribed)!=null?o:!0,d=Array.from(new Set([B.ParticipantConnected,B.ParticipantDisconnected,B.ConnectionStateChanged,B.LocalTrackPublished,B.LocalTrackUnpublished,B.TrackPublished,B.TrackUnpublished,B.TrackSubscriptionStatusChanged,...l]).values());return nl(a,...d).pipe(Ft(h=>{const m=m0(h,e,u);return Ae.debug(`TrackReference[] was updated. (length ${m.trackReferences.length})`,m),m}),Nn(m0(a,e,u)))}function rw(a,e){return Gb(a,...B_).pipe(Ft(n=>{const r=p0(n,e);return Ae.debug(`TrackReference[] was updated. (length ${r.length})`,r),r}),Nn(p0(a,e)))}function Yb(a,e){return new vt(n=>{const r=(...o)=>{n.next(o)};return a.on(e,r),()=>{a.off(e,r)}})}function sw(a){return Yb(a,W.TranscriptionReceived)}function ow(a){return Yb(a,W.TimeSyncUpdate).pipe(Ft(([e])=>e))}function cw(a,e){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{if(e){const n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==""));localStorage.setItem(a,JSON.stringify(n))}}catch(n){Ae.error(`Error setting item to local storage: ${n}`)}}function lw(a){if(typeof localStorage>"u"){Ae.error("Local storage is not available.");return}try{const e=localStorage.getItem(a);if(!e){Ae.warn(`Item with key ${a} does not exist in local storage.`);return}return JSON.parse(e)}catch(e){Ae.error(`Error getting item from local storage: ${e}`);return}}function uw(a){return{load:()=>lw(a),save:e=>cw(a,e)}}var dw=`${jb}-user-choices`,Ps={videoEnabled:!0,audioEnabled:!0,videoDeviceId:"default",audioDeviceId:"default",username:""},{load:fw,save:hw}=uw(dw);function mw(a,e=!1){e!==!0&&hw(a)}function pw(a,e=!1){var n,r,o,l,u;const d={videoEnabled:(n=a==null?void 0:a.videoEnabled)!=null?n:Ps.videoEnabled,audioEnabled:(r=a==null?void 0:a.audioEnabled)!=null?r:Ps.audioEnabled,videoDeviceId:(o=a==null?void 0:a.videoDeviceId)!=null?o:Ps.videoDeviceId,audioDeviceId:(l=a==null?void 0:a.audioDeviceId)!=null?l:Ps.audioDeviceId,username:(u=a==null?void 0:a.username)!=null?u:Ps.username};if(e)return d;{const h=fw();return Df(Df({},d),h??{})}}P.createContext(void 0);const gw=P.createContext(void 0);function Kb(){return P.useContext(gw)}function vw(a){const e=Kb(),n=a??e;if(!n)throw new Error("No TrackRef, make sure you are inside a TrackRefContext or pass the TrackRef explicitly");return n}const yw=P.createContext(void 0);function Qb(){return P.useContext(yw)}const rh=P.createContext(void 0);function il(){const a=P.useContext(rh);if(!a)throw Error("tried to access room context outside of livekit room component");return a}function al(){return P.useContext(rh)}function _r(a){const e=al(),n=a??e;if(!n)throw new Error("No room provided, make sure you are inside a Room context or pass the room explicitly");return n}const bw=P.createContext(void 0);function Xb(a){var e,n,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(e=0;e{for(const n of a)if(typeof n=="function")try{n(...e)}catch(r){console.error(r)}}}function wr(...a){const e={...a[0]};for(let n=1;n=65&&o.charCodeAt(2)<=90?e[o]=Sw(l,u):(o==="className"||o==="UNSAFE_className")&&typeof l=="string"&&typeof u=="string"?e[o]=Zb(l,u):e[o]=u!==void 0?u:l}}return e}function Tw(a){return a!==void 0}function rl(...a){return wr(...a.filter(Tw))}function kw(a,e,n){return P.Children.map(a,r=>P.isValidElement(r)&&P.Children.only(a)?(r.props.class&&(e??(e={}),e.class=Zb(r.props.class,e.class),e.style={...r.props.style,...e.style}),P.cloneElement(r,{...e,key:n})):r)}function Cw(a,e){return a==="processor"&&e&&typeof e=="object"&&"name"in e?e.name:a==="e2ee"&&e?"e2ee-enabled":e}const Ew={connect:!0,audio:!1,video:!1};function Rw(a){const{token:e,serverUrl:n,options:r,room:o,connectOptions:l,connect:u,audio:d,video:h,screen:m,onConnected:g,onDisconnected:y,onError:b,onMediaDeviceFailure:T,onEncryptionError:C,simulateParticipants:k,...w}={...Ew,...a};r&&o&&Ae.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[O,V]=P.useState(),Q=P.useRef(u);P.useEffect(()=>{V(o??new ni(r))},[o,JSON.stringify(r,Cw)]);const U=P.useMemo(()=>{const{className:_}=iw();return wr(w,{className:_})},[w]);return P.useEffect(()=>{if(!O)return;const _=()=>{const J=O.localParticipant;Ae.debug("trying to publish local tracks"),Promise.all([J.setMicrophoneEnabled(!!d,typeof d!="boolean"?d:void 0),J.setCameraEnabled(!!h,typeof h!="boolean"?h:void 0),J.setScreenShareEnabled(!!m,typeof m!="boolean"?m:void 0)]).catch(ee=>{Ae.warn(ee),b==null||b(ee)})},H=J=>{const ee=Vs.getFailure(J);T==null||T(ee)},$=J=>{C==null||C(J)},ie=J=>{y==null||y(J)},X=()=>{g==null||g()};return O.on(B.SignalConnected,_).on(B.MediaDevicesError,H).on(B.EncryptionError,$).on(B.Disconnected,ie).on(B.Connected,X),()=>{O.off(B.SignalConnected,_).off(B.MediaDevicesError,H).off(B.EncryptionError,$).off(B.Disconnected,ie).off(B.Connected,X)}},[O,d,h,m,b,C,T,g,y]),P.useEffect(()=>{if(O){if(k){O.simulateParticipants({participants:{count:k},publish:{audio:!0,useRealTracks:!0}});return}if(u){if(Q.current=!0,Ae.debug("connecting"),!e){Ae.debug("no token yet");return}if(!n){Ae.warn("no livekit url provided"),b==null||b(Error("no livekit url provided"));return}O.connect(n,e,l).catch(_=>{Ae.warn(_),Q.current===!0&&(b==null||b(_))})}else Ae.debug("disconnecting because connect is false"),Q.current=!1,O.disconnect()}},[u,e,JSON.stringify(l),O,b,n,k]),P.useEffect(()=>{if(O)return()=>{Ae.info("disconnecting on onmount"),O.disconnect()}},[O]),{room:O,htmlProps:U}}const _w=P.forwardRef(function(a,e){const{room:n,htmlProps:r}=Rw(a);return P.createElement("div",{ref:e,...r},n&&P.createElement(rh.Provider,{value:n},P.createElement(bw.Provider,{value:a.featureFlags},a.children)))});function Pn(a,e,n=!0){const[r,o]=P.useState(e);return P.useEffect(()=>{if(n&&o(e),typeof window>"u"||!a)return;const l=a.subscribe(o);return()=>l.unsubscribe()},[a,n]),r}function sh(a){const e=_r(a),n=P.useMemo(()=>G_(e),[e]);return Pn(n,e.state)}function ww(a){const e=il(),n=sh(e);return{buttonProps:P.useMemo(()=>{const{className:r,disconnect:o}=ew(e);return wr(a,{className:r,onClick:()=>o(a.stopTracks??!0),disabled:n===Te.Disconnected})},[e,a,n])}}function Ow(a={}){const e=_r(a.room),[n,r]=P.useState(e.localParticipant),[o,l]=P.useState(n.isMicrophoneEnabled),[u,d]=P.useState(n.isMicrophoneEnabled),[h,m]=P.useState(n.lastMicrophoneError),[g,y]=P.useState(n.lastCameraError),[b,T]=P.useState(n.isMicrophoneEnabled),[C,k]=P.useState(void 0),[w,O]=P.useState(void 0),V=Q=>{d(Q.isCameraEnabled),l(Q.isMicrophoneEnabled),T(Q.isScreenShareEnabled),O(Q.cameraTrack),k(Q.microphoneTrack),m(Q.participant.lastMicrophoneError),y(Q.participant.lastCameraError),r(Q.participant)};return P.useEffect(()=>{const Q=ah(e.localParticipant).subscribe(V);return()=>Q.unsubscribe()},[e]),{isMicrophoneEnabled:o,isScreenShareEnabled:b,isCameraEnabled:u,microphoneTrack:C,cameraTrack:w,lastMicrophoneError:h,lastCameraError:g,localParticipant:n}}function Dw(){const a=il(),e=P.useMemo(()=>Z_(a.localParticipant),[a]);return Pn(e,a.localParticipant.permissions)}function Aw({kind:a,room:e,track:n,requestPermissions:r,onError:o}){const l=al(),u=P.useMemo(()=>e??l??new ni,[e,l]),d=P.useMemo(()=>F_(a,o,r),[a,r,o]),h=Pn(d,[]),[m,g]=P.useState((u==null?void 0:u.getActiveDevice(a))??"default"),{className:y,activeDeviceObservable:b,setActiveMediaDevice:T}=P.useMemo(()=>$_(a,u),[a,u,n]);return P.useEffect(()=>{const C=b.subscribe(k=>{k&&(Ae.info("setCurrentDeviceId",k),g(k))});return()=>{C==null||C.unsubscribe()}},[b]),{devices:h,className:y,activeDeviceId:m,setActiveMediaDevice:T}}function Mw(a={}){const e=_r(a.room),[n,r]=P.useState([]);return P.useEffect(()=>{const o=X_(e,{additionalRoomEvents:a.updateOnlyOn}).subscribe(r);return()=>o.unsubscribe()},[e,JSON.stringify(a.updateOnlyOn)]),n}function Jb({room:a,props:e}){const n=_r(a),{className:r,roomAudioPlaybackAllowedObservable:o,handleStartAudioPlayback:l}=P.useMemo(()=>tw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayAudio:d}=Pn(u,{canPlayAudio:n.canPlaybackAudio});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayAudio:d}}function Pw({room:a,props:e}){const n=_r(a),{className:r,roomVideoPlaybackAllowedObservable:o,handleStartVideoPlayback:l}=P.useMemo(()=>nw(),[]),u=P.useMemo(()=>o(n),[n,o]),{canPlayVideo:d}=Pn(u,{canPlayVideo:n.canPlaybackVideo});return{mergedProps:P.useMemo(()=>wr(e,{className:r,onClick:()=>{l(n)},style:{display:d?"none":"block"}}),[e,r,d,l,n]),canPlayVideo:d}}function xw({source:a,onChange:e,initialState:n,captureOptions:r,publishOptions:o,onDeviceError:l,...u}){var d;const h=al(),m=(d=h==null?void 0:h.localParticipant)==null?void 0:d.getTrackPublication(a),g=P.useRef(!1),{toggle:y,className:b,pendingObserver:T,enabledObserver:C}=P.useMemo(()=>h?J_(a,h,r,o,l):W_(),[h,a,JSON.stringify(r),o]),k=Pn(T,!1),w=Pn(C,n??!!(m!=null&&m.isEnabled));P.useEffect(()=>{e==null||e(w,g.current),g.current=!1},[w,e]),P.useEffect(()=>{n!==void 0&&(Ae.debug("forcing initial toggle state",a,n),y(n))},[]);const O=P.useMemo(()=>wr(u,{className:b}),[u,b]),V=P.useCallback(Q=>{var U;g.current=!0,y().catch(()=>g.current=!1),(U=u.onClick)==null||U.call(u,Q)},[u,y]);return{toggle:y,enabled:w,pending:k,track:m,buttonProps:{...O,"aria-pressed":w,"data-lk-source":a,"data-lk-enabled":w,disabled:k,onClick:V}}}function Nw(a=[j.Source.Camera,j.Source.Microphone,j.Source.ScreenShare,j.Source.ScreenShareAudio,j.Source.Unknown],e={}){const n=_r(e.room),[r,o]=P.useState([]),[l,u]=P.useState([]),d=P.useMemo(()=>a.map(h=>qb(h)?h.source:h),[JSON.stringify(a)]);return P.useEffect(()=>{const h=aw(n,d,{additionalRoomEvents:e.updateOnlyOn,onlySubscribed:e.onlySubscribed}).subscribe(({trackReferences:m,participants:g})=>{Ae.debug("setting track bundles",m,g),o(m),u(g)});return()=>h.unsubscribe()},[n,JSON.stringify(e.onlySubscribed),JSON.stringify(e.updateOnlyOn),JSON.stringify(a)]),P.useMemo(()=>{if(Vb(a)){const h=Lw(a,l),m=Array.from(r);return l.forEach(g=>{h.has(g.identity)&&(h.get(g.identity)??[]).forEach(y=>{if(r.find(({participant:T,publication:C})=>g.identity===T.identity&&C.source===y))return;Ae.debug(`Add ${y} placeholder for participant ${g.identity}.`);const b={participant:g,source:y};m.push(b)})}),m}else return r},[r,l,a])}function Uw(a,e){const n=new Set(a);for(const r of e)n.delete(r);return n}function Lw(a,e){const n=new Map;if(Vb(a)){const r=a.filter(o=>o.withPlaceholder).map(o=>o.source);e.forEach(o=>{const l=o.getTrackPublications().map(d=>{var h;return(h=d.track)==null?void 0:h.source}).filter(d=>d!==void 0),u=Array.from(Uw(new Set(r),new Set(l)));u.length>0&&n.set(o.identity,u)})}return n}function Iw(a={}){const[e,n]=P.useState(pw(a.defaults,a.preventLoad??!1)),r=P.useCallback(h=>{n(m=>({...m,audioEnabled:h}))},[]),o=P.useCallback(h=>{n(m=>({...m,videoEnabled:h}))},[]),l=P.useCallback(h=>{n(m=>({...m,audioDeviceId:h}))},[]),u=P.useCallback(h=>{n(m=>({...m,videoDeviceId:h}))},[]),d=P.useCallback(h=>{n(m=>({...m,username:h}))},[]);return P.useEffect(()=>{mw(e,a.preventSave??!1)},[e,a.preventSave]),{userChoices:e,saveAudioInputEnabled:r,saveVideoInputEnabled:o,saveAudioInputDeviceId:l,saveVideoInputDeviceId:u,saveUsername:d}}const jw=a=>{const e=n=>{let r=1-Math.max(-100,Math.min(-10,n))*-1/100;return r=Math.sqrt(r),r};return a.map(n=>n===-1/0?0:e(n))},Bw={bands:5,loPass:100,hiPass:600,updateInterval:32,analyserOptions:{fftSize:2048}};function zw(a,e={}){var n;const r=a instanceof j?a:(n=a==null?void 0:a.publication)==null?void 0:n.track,o={...Bw,...e},[l,u]=P.useState(new Array(o.bands).fill(0));return P.useEffect(()=>{if(!r||!(r!=null&&r.mediaStream))return;const{analyser:d,cleanup:h}=QE(r,o.analyserOptions),m=d.frequencyBinCount,g=new Float32Array(m),y=setInterval(()=>{d.getFloatFrequencyData(g);let b=new Float32Array(g.length);for(let w=0;wV+=Q,0);k.push(O/C)}u(k)},o.updateInterval);return()=>{h(),clearInterval(y)}},[r,r==null?void 0:r.mediaStream,JSON.stringify(e)]),l}function qw(a,e){const n=il(),r=Qb(),o=e?n.getParticipantByIdentity(e):r,l=P.useMemo(()=>o?rw(o,{sources:a}):void 0,[o==null?void 0:o.sid,o==null?void 0:o.identity,JSON.stringify(a)]);return Pn(l,[])}function Vw(a){var e,n,r;const o=P.useMemo(()=>{var l;return(l=a==null?void 0:a.publication)!=null&&l.track?ow(a==null?void 0:a.publication.track):void 0},[(e=a==null?void 0:a.publication)==null?void 0:e.track]);return Pn(o,{timestamp:Date.now(),rtpTimestamp:(r=(n=a==null?void 0:a.publication)==null?void 0:n.track)==null?void 0:r.rtpTimestamp})}const Hw={bufferSize:100};function Gw(a,e){const n={...Hw,...e},[r,o]=P.useState([]),l=Vw(a),u=d=>{var h;(h=n.onTranscription)==null||h.call(n,d),o(m=>V_(m,d.map(g=>q_(g,l)),n.bufferSize))};return P.useEffect(()=>{if(!(a!=null&&a.publication))return;const d=sw(a.publication).subscribe(h=>{u(...h)});return()=>{d.unsubscribe()}},[a&&Bb(a),u]),{segments:r}}function Fw(a={}){const e=Qb(),n=a.participant??e,r=P.useMemo(()=>h0(n),[n]);return Pn(r,{attributes:n==null?void 0:n.attributes})}const g0="lk.agent.state";function Yw(){const a=Mw().find(u=>u.kind===qs.AGENT),e=qw([j.Source.Microphone],a==null?void 0:a.identity)[0],{segments:n}=Gw(e),r=sh(),{attributes:o}=Fw({participant:a}),l=P.useMemo(()=>r===Te.Disconnected?"disconnected":r===Te.Connecting||!a||!(o!=null&&o[g0])?"connecting":o[g0],[o,a,r]);return{agent:a,state:l,audioTrack:e,agentTranscriptions:n,agentAttributes:o}}const Wb=P.forwardRef(function(a,e){const{buttonProps:n}=ww(a);return P.createElement("button",{ref:e,...n},a.children)}),Kw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708L11 10.293V4.5A1.5 1.5 0 0 0 9.5 3H3.707zM0 4.5a1.5 1.5 0 0 1 .943-1.393l9.532 9.533c-.262.224-.603.36-.975.36h-8A1.5 1.5 0 0 1 0 11.5z"}),P.createElement("path",{d:"m15.2 3.6-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Qw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M0 4.5A1.5 1.5 0 0 1 1.5 3h8A1.5 1.5 0 0 1 11 4.5v7A1.5 1.5 0 0 1 9.5 13h-8A1.5 1.5 0 0 1 0 11.5zM15.2 3.6l-2.8 2.1a1 1 0 0 0-.4.8v3a1 1 0 0 0 .4.8l2.8 2.1a.5.5 0 0 0 .8-.4V4a.5.5 0 0 0-.8-.4z"})),Xw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{d:"M12.227 11.52a5.477 5.477 0 0 0 1.246-2.97.5.5 0 0 0-.995-.1 4.478 4.478 0 0 1-.962 2.359l-1.07-1.07C10.794 9.247 11 8.647 11 8V3a3 3 0 0 0-6 0v1.293L1.354.646a.5.5 0 1 0-.708.708l14 14a.5.5 0 0 0 .708-.708zM8 12.5c.683 0 1.33-.152 1.911-.425l.743.743c-.649.359-1.378.59-2.154.66V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .995-.098A4.5 4.5 0 0 0 8 12.5z"}),P.createElement("path",{d:"M8.743 10.907 5 7.164V8a3 3 0 0 0 3.743 2.907z"})),Zw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor",...a},P.createElement("path",{fillRule:"evenodd",d:"M2.975 8.002a.5.5 0 0 1 .547.449 4.5 4.5 0 0 0 8.956 0 .5.5 0 1 1 .995.098A5.502 5.502 0 0 1 8.5 13.478V15h2a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1h2v-1.522a5.502 5.502 0 0 1-4.973-4.929.5.5 0 0 1 .448-.547z",clipRule:"evenodd"}),P.createElement("path",{d:"M5 3a3 3 0 1 1 6 0v5a3 3 0 0 1-6 0z"})),Jw=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M0 2.75A2.75 2.75 0 0 1 2.75 0h14.5A2.75 2.75 0 0 1 20 2.75v10.5A2.75 2.75 0 0 1 17.25 16H2.75A2.75 2.75 0 0 1 0 13.25V2.75ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h14.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25H2.75Z",clipRule:"evenodd"}),P.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M9.47 4.22a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1-1.06 1.06l-.97-.97v4.69a.75.75 0 0 1-1.5 0V6.56l-.97.97a.75.75 0 0 1-1.06-1.06l2.25-2.25Z",clipRule:"evenodd"})),Ww=a=>P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:20,height:16,fill:"none",...a},P.createElement("g",{fill:"currentColor"},P.createElement("path",{d:"M7.28 4.22a.75.75 0 0 0-1.06 1.06L8.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L10 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L11.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L10 6.94z"}),P.createElement("path",{fillRule:"evenodd",d:"M2.75 0A2.75 2.75 0 0 0 0 2.75v10.5A2.75 2.75 0 0 0 2.75 16h14.5A2.75 2.75 0 0 0 20 13.25V2.75A2.75 2.75 0 0 0 17.25 0zM1.5 2.75c0-.69.56-1.25 1.25-1.25h14.5c.69 0 1.25.56 1.25 1.25v10.5c0 .69-.56 1.25-1.25 1.25H2.75c-.69 0-1.25-.56-1.25-1.25z",clipRule:"evenodd"}))),qd=P.forwardRef(function({kind:a,initialSelection:e,onActiveDeviceChange:n,onDeviceListChange:r,onDeviceSelectError:o,exactMatch:l,track:u,requestPermissions:d,onError:h,...m},g){const y=al(),b=P.useCallback(_=>{y&&y.emit(B.MediaDevicesError,_),h==null||h(_)},[y,h]),{devices:T,activeDeviceId:C,setActiveMediaDevice:k,className:w}=Aw({kind:a,room:y,track:u,requestPermissions:d,onError:b});P.useEffect(()=>{e!==void 0&&k(e)},[k]),P.useEffect(()=>{typeof r=="function"&&r(T)},[r,T]),P.useEffect(()=>{C&&C!==""&&(n==null||n(C))},[C]);const O=async _=>{try{await k(_,{exact:l})}catch(H){if(H instanceof Error)o==null||o(H);else throw H}},V=P.useMemo(()=>rl(m,{className:w},{className:"lk-list"}),[w,m]),Q=!!T.find(_=>_.label.toLowerCase().startsWith("default"));function U(_,H,$){return _===H||!Q&&$===0&&H==="default"}return P.createElement("ul",{ref:g,...V},T.map((_,H)=>P.createElement("li",{key:_.deviceId,id:_.deviceId,"data-lk-active":U(_.deviceId,C,H),"aria-selected":U(_.deviceId,C,H),role:"option"},P.createElement("button",{className:"lk-button",onClick:()=>O(_.deviceId)},_.label))))}),$w=P.forwardRef(function({label:a,...e},n){const r=il(),{mergedProps:o,canPlayAudio:l}=Jb({room:r,props:e}),{mergedProps:u,canPlayVideo:d}=Pw({room:r,props:o}),{style:h,...m}=u;return h.display=l&&d?"none":"block",P.createElement("button",{ref:n,style:h,...m},a??`Start ${l?"Video":"Audio"}`)});function eO(a,e){switch(a){case j.Source.Microphone:return e?P.createElement(Zw,null):P.createElement(Xw,null);case j.Source.Camera:return e?P.createElement(Qw,null):P.createElement(Kw,null);case j.Source.ScreenShare:return e?P.createElement(Ww,null):P.createElement(Jw,null);default:return}}const tO=P.forwardRef(function({showIcon:a,...e},n){const{buttonProps:r,enabled:o}=xw(e),[l,u]=P.useState(!1);return P.useEffect(()=>{u(!0)},[]),l&&P.createElement("button",{ref:n,...r},(a??!0)&&eO(e.source,o),e.children)});function nO(a,e={}){const[n,r]=P.useState(Af(a)),[o,l]=P.useState(n==null?void 0:n.isMuted),[u,d]=P.useState(n==null?void 0:n.isSubscribed),[h,m]=P.useState(n==null?void 0:n.track),[g,y]=P.useState("landscape"),b=P.useRef(),{className:T,trackObserver:C}=P.useMemo(()=>H_(a),[a.participant.sid??a.participant.identity,a.source,ih(a)&&a.publication.trackSid]);return P.useEffect(()=>{const k=C.subscribe(w=>{Ae.debug("update track",w),r(w),l(w==null?void 0:w.isMuted),d(w==null?void 0:w.isSubscribed),m(w==null?void 0:w.track)});return()=>k==null?void 0:k.unsubscribe()},[C]),P.useEffect(()=>{var k,w;return h&&(b.current&&h.detach(b.current),(k=e.element)!=null&&k.current&&!(a.participant.isLocal&&(h==null?void 0:h.kind)==="audio")&&h.attach(e.element.current)),b.current=(w=e.element)==null?void 0:w.current,()=>{b.current&&(h==null||h.detach(b.current))}},[h,e.element]),P.useEffect(()=>{var k,w;if(typeof((k=n==null?void 0:n.dimensions)==null?void 0:k.width)=="number"&&typeof((w=n==null?void 0:n.dimensions)==null?void 0:w.height)=="number"){const O=n.dimensions.width>n.dimensions.height?"landscape":"portrait";y(O)}},[n]),{publication:n,isMuted:o,isSubscribed:u,track:h,elementProps:rl(e.props,{className:T,"data-lk-local-participant":a.participant.isLocal,"data-lk-source":n==null?void 0:n.source,...(n==null?void 0:n.kind)==="video"&&{"data-lk-orientation":g}})}}var iO=typeof Ns=="object"&&Ns&&Ns.Object===Object&&Ns,aO=typeof self=="object"&&self&&self.Object===Object&&self;iO||aO||Function("return this")();const rO=P.forwardRef(function({trackRef:a,onSubscriptionStatusChanged:e,volume:n,...r},o){const l=vw(a),u=P.useRef(null);P.useImperativeHandle(o,()=>u.current);const{elementProps:d,isSubscribed:h,track:m,publication:g}=nO(l,{element:u,props:r});return P.useEffect(()=>{e==null||e(!!h)},[h,e]),P.useEffect(()=>{m===void 0||n===void 0||(m instanceof eb?m.setVolume(n):Ae.warn("Volume can only be set on remote audio tracks."))},[n,m]),P.useEffect(()=>{g===void 0||r.muted===void 0||(g instanceof nb?g.setEnabled(!r.muted):Ae.warn("Can only call setEnabled on remote track publications."))},[r.muted,g,m]),P.createElement("audio",{ref:u,...d})});function sO({volume:a,muted:e}){const n=Nw([j.Source.Microphone,j.Source.ScreenShareAudio,j.Source.Unknown],{updateOnlyOn:[],onlySubscribed:!0}).filter(r=>!r.participant.isLocal&&r.publication.kind===j.Kind.Audio);return P.createElement("div",{style:{display:"none"}},n.map(r=>P.createElement(rO,{key:Bb(r),trackRef:r,volume:a,muted:e})))}const oO=a=>{const e=[];for(let n=0;n[[Math.floor(a/2)],[-1]],cO=(a,e,n)=>{const[r,o]=P.useState(0),[l,u]=P.useState([[]]);P.useEffect(()=>{if(a==="thinking")u(v0(e));else if(a==="connecting"||a==="initializing"){const h=[...oO(e)];u(h)}else u(a==="listening"?v0(e):a===void 0?[new Array(e).fill(0).map((h,m)=>m)]:[[]]);o(0)},[a,e]);const d=P.useRef(null);return P.useEffect(()=>{let h=performance.now();const m=g=>{g-h>=n&&(o(y=>y+1),h=g),d.current=requestAnimationFrame(m)};return d.current=requestAnimationFrame(m),()=>{d.current!==null&&cancelAnimationFrame(d.current)}},[n,e,a,l.length]),l[r%l.length]},lO=new Map([["connecting",2e3],["initializing",2e3],["listening",500],["thinking",150]]),uO=(a,e)=>{if(a===void 0)return 1e3;let n=lO.get(a);if(n)switch(a){case"connecting":n/=e;break}return n},$b=P.forwardRef(function({state:a,options:e,barCount:n=15,trackRef:r,children:o,...l},u){const d=rl(l,{className:"lk-audio-bar-visualizer"});let h=Kb();r&&(h=r);const m=zw(h,{bands:n,loPass:100,hiPass:200}),g=(e==null?void 0:e.minHeight)??20,y=(e==null?void 0:e.maxHeight)??100,b=cO(a,n,uO(a,n)??100);return P.createElement("div",{ref:u,...d,"data-lk-va-state":a},m.map((T,C)=>o?kw(o,{"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:"lk-audio-bar",style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}}):P.createElement("span",{key:C,"data-lk-highlighted":b.includes(C),"data-lk-bar-index":C,className:`lk-audio-bar ${b.includes(C)&&"lk-highlighted"}`,style:{height:`${Math.min(y,Math.max(g,T*100+5))}%`}})))});function dO({kind:a,initialSelection:e,onActiveDeviceChange:n,tracks:r,requestPermissions:o=!1,...l}){const[u,d]=P.useState(!1),[h,m]=P.useState([]),[g,y]=P.useState(!0),[b,T]=P.useState(o),C=(V,Q)=>{Ae.debug("handle device change"),d(!1),n==null||n(V,Q)},k=P.useRef(null),w=P.useRef(null);P.useLayoutEffect(()=>{u&&T(!0)},[u]),P.useLayoutEffect(()=>{k.current&&w.current&&(h||g)&&L_(k.current,w.current).then(({x:V,y:Q})=>{w.current&&Object.assign(w.current.style,{left:`${V}px`,top:`${Q}px`})}),y(!1)},[k,w,h,g]);const O=P.useCallback(V=>{w.current&&V.target!==k.current&&u&&I_(w.current,V)&&d(!1)},[u,w,k]);return P.useEffect(()=>(document.addEventListener("click",O),window.addEventListener("resize",()=>y(!0)),()=>{document.removeEventListener("click",O),window.removeEventListener("resize",()=>y(!0))}),[O,y]),P.createElement(P.Fragment,null,P.createElement("button",{className:"lk-button lk-button-menu","aria-pressed":u,...l,onClick:()=>d(!u),ref:k},l.children),!l.disabled&&P.createElement("div",{className:"lk-device-menu",ref:w,style:{visibility:u?"visible":"hidden"}},a?P.createElement(qd,{initialSelection:e,onActiveDeviceChange:V=>C(a,V),onDeviceListChange:m,kind:a,track:r==null?void 0:r[a],requestPermissions:b}):P.createElement(P.Fragment,null,P.createElement("div",{className:"lk-device-menu-heading"},"Audio inputs"),P.createElement(qd,{kind:"audioinput",onActiveDeviceChange:V=>C("audioinput",V),onDeviceListChange:m,track:r==null?void 0:r.audioinput,requestPermissions:b}),P.createElement("div",{className:"lk-device-menu-heading"},"Video inputs"),P.createElement(qd,{kind:"videoinput",onActiveDeviceChange:V=>C("videoinput",V),onDeviceListChange:m,track:r==null?void 0:r.videoinput,requestPermissions:b}))))}function fO({controls:a,saveUserChoices:e=!0,onDeviceError:n,...r}){const o={leave:!0,microphone:!0,...a},l=Dw(),{microphoneTrack:u,localParticipant:d}=Ow(),h=P.useMemo(()=>({participant:d,source:j.Source.Microphone,publication:u}),[d,u]);l?o.microphone??(o.microphone=l.canPublish):o.microphone=!1;const m=rl({className:"lk-agent-control-bar"},r),{saveAudioInputEnabled:g,saveAudioInputDeviceId:y}=Iw({preventSave:!e}),b=P.useCallback((T,C)=>{C&&g(T)},[g]);return P.createElement("div",{...m},o.microphone&&P.createElement("div",{className:"lk-button-group"},P.createElement(tO,{source:j.Source.Microphone,showIcon:!0,onChange:b,onDeviceError:T=>n==null?void 0:n({source:j.Source.Microphone,error:T})},P.createElement($b,{trackRef:h,barCount:7,options:{minHeight:5}})),P.createElement("div",{className:"lk-button-group-menu"},P.createElement(dO,{kind:"audioinput",onActiveDeviceChange:(T,C)=>y(C??"default")}))),o.leave&&P.createElement(Wb,null,"Disconnect"),P.createElement($w,null))}function hO(){return{url:"##livekit-url-placeholder##",token:"##livekit-token-placeholder##"}}const mO=a=>Ne.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",...a,children:[Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M2 2.75A2.75 2.75 0 0 1 4.75 0h6.5A2.75 2.75 0 0 1 14 2.75v10.5A2.75 2.75 0 0 1 11.25 16h-6.5A2.75 2.75 0 0 1 2 13.25v-.5a.75.75 0 0 1 1.5 0v.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25h-6.5c-.69 0-1.25.56-1.25 1.25v.5a.75.75 0 0 1-1.5 0v-.5Z",clipRule:"evenodd"}),Ne.jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M8.78 7.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H1.75a.75.75 0 0 1 0-1.5h4.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25Z",clipRule:"evenodd"})]}),pO=({onDisconnect:a})=>{const e=sh(),{canPlayAudio:n}=Jb({props:{}}),{state:r,audioTrack:o}=Yw();return Ne.jsxs("div",{className:"content",children:[Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:`connection-state ${["connecting","disconnected"].includes(e)?"state-inactive":""}`,children:e})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsxs(Wb,{onClick:a,children:[Ne.jsx(mO,{}),"Disconnect"]})})]}),Ne.jsxs("div",{className:"controls",children:[Ne.jsx(fO,{controls:{microphone:!0,leave:!1}}),n&&e==Te.Connected&&r!=="connecting"&&Ne.jsx("div",{className:"agent-visualizer",children:Ne.jsx($b,{state:r,barCount:15,trackRef:o,options:{minHeight:15,maxHeight:30}})})]})]})},gO=()=>{const[a,e]=P.useState(null),[n,r]=P.useState(!0),o=hO();return a?Ne.jsxs("div",{children:["Error: ",a]}):n?Ne.jsxs(_w,{serverUrl:o.url,token:o.token,onError:l=>e(l.message),children:[Ne.jsx(pO,{onDisconnect:()=>r(!1)}),Ne.jsx(sO,{})]}):Ne.jsx("div",{className:"content",children:Ne.jsxs("header",{className:"header",children:[Ne.jsxs("div",{className:"header-left",children:[Ne.jsx("h2",{children:"livekit-rtc"}),Ne.jsx("span",{className:"state-inactive",children:"disconnected"})]}),Ne.jsx("div",{className:"header-controls",children:Ne.jsx("span",{className:"state-inactive",children:"Re-run the cell to connect"})})]})})};Mk.createRoot(document.getElementById("root")).render(Ne.jsx(P.StrictMode,{children:Ne.jsx(gO,{})})); From a9280c1aa0d0cf364a69cc15766f39ded22a727c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Mon, 7 Apr 2025 16:33:52 +0200 Subject: [PATCH 12/13] ruff --- livekit-rtc/livekit/rtc/jupyter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/livekit-rtc/livekit/rtc/jupyter.py b/livekit-rtc/livekit/rtc/jupyter.py index 7251d828..6a62dbe3 100644 --- a/livekit-rtc/livekit/rtc/jupyter.py +++ b/livekit-rtc/livekit/rtc/jupyter.py @@ -2,9 +2,8 @@ from __future__ import annotations import atexit -import sys import contextlib -from IPython.core.display import HTML, JSON +from IPython.core.display import HTML from IPython.display import display from importlib.resources import as_file, files From 2eee5b3de51537481d033525812f3f161a2e047b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Mon, 7 Apr 2025 16:41:36 +0200 Subject: [PATCH 13/13] include jupyter-html package-data --- livekit-rtc/setup.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/livekit-rtc/setup.py b/livekit-rtc/setup.py index 7cf1508c..83a863e1 100644 --- a/livekit-rtc/setup.py +++ b/livekit-rtc/setup.py @@ -61,7 +61,14 @@ def finalize_options(self): install_requires=["protobuf>=4.25.0", "types-protobuf>=3", "aiofiles>=24"], package_data={ "livekit.rtc": ["_proto/*.py", "py.typed", "*.pyi", "**/*.pyi"], - "livekit.rtc.resources": ["*.so", "*.dylib", "*.dll", "LICENSE.md", "*.h"], + "livekit.rtc.resources": [ + "*.so", + "*.dylib", + "*.dll", + "LICENSE.md", + "*.h", + "jupyter-html/index.html", + ], }, project_urls={ "Documentation": "https://docs.livekit.io",