@convai/web-sdk 0.3.1-beta.3 → 0.3.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +535 -1077
- package/dist/core/AudioManager.d.ts.map +1 -0
- package/dist/core/AudioManager.js +262 -0
- package/dist/core/AudioManager.js.map +1 -0
- package/dist/core/BlendshapeQueue.d.ts +112 -0
- package/dist/core/BlendshapeQueue.d.ts.map +1 -0
- package/dist/core/BlendshapeQueue.js +172 -0
- package/dist/core/BlendshapeQueue.js.map +1 -0
- package/dist/{types/core → core}/ConvaiClient.d.ts +5 -15
- package/dist/core/ConvaiClient.d.ts.map +1 -0
- package/dist/core/ConvaiClient.js +602 -0
- package/dist/core/ConvaiClient.js.map +1 -0
- package/dist/core/EventEmitter.d.ts.map +1 -0
- package/dist/core/EventEmitter.js +68 -0
- package/dist/core/EventEmitter.js.map +1 -0
- package/dist/{types/core → core}/MessageHandler.d.ts +7 -0
- package/dist/core/MessageHandler.d.ts.map +1 -0
- package/dist/core/MessageHandler.js +332 -0
- package/dist/core/MessageHandler.js.map +1 -0
- package/dist/core/ScreenShareManager.d.ts.map +1 -0
- package/dist/core/ScreenShareManager.js +207 -0
- package/dist/core/ScreenShareManager.js.map +1 -0
- package/dist/core/VideoManager.d.ts.map +1 -0
- package/dist/core/VideoManager.js +205 -0
- package/dist/core/VideoManager.js.map +1 -0
- package/dist/{types/core → core}/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -1970
- package/dist/core/index.js.map +1 -0
- package/dist/{types/core → core}/types.d.ts +9 -23
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/dev.d.ts +12 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +12 -0
- package/dist/dev.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lipsync-helpers/arkitOrder61.d.ts.map +1 -0
- package/dist/lipsync-helpers/arkitOrder61.js +287 -0
- package/dist/lipsync-helpers/arkitOrder61.js.map +1 -0
- package/dist/lipsync-helpers/createBlendshapeQueue.d.ts +86 -0
- package/dist/lipsync-helpers/createBlendshapeQueue.d.ts.map +1 -0
- package/dist/lipsync-helpers/createBlendshapeQueue.js +126 -0
- package/dist/lipsync-helpers/createBlendshapeQueue.js.map +1 -0
- package/dist/lipsync-helpers/declarativeMapping.d.ts +93 -0
- package/dist/lipsync-helpers/declarativeMapping.d.ts.map +1 -0
- package/dist/lipsync-helpers/declarativeMapping.js +228 -0
- package/dist/lipsync-helpers/declarativeMapping.js.map +1 -0
- package/dist/lipsync-helpers/index.d.ts +15 -0
- package/dist/lipsync-helpers/index.d.ts.map +1 -0
- package/dist/lipsync-helpers/index.js +31 -1164
- package/dist/lipsync-helpers/index.js.map +1 -0
- package/dist/lipsync-helpers/mappingTypes.d.ts +64 -0
- package/dist/lipsync-helpers/mappingTypes.d.ts.map +1 -0
- package/dist/lipsync-helpers/mappingTypes.js +28 -0
- package/dist/lipsync-helpers/mappingTypes.js.map +1 -0
- package/dist/lipsync-helpers/metahumanOrder251.d.ts +115 -0
- package/dist/lipsync-helpers/metahumanOrder251.d.ts.map +1 -0
- package/dist/lipsync-helpers/metahumanOrder251.js +432 -0
- package/dist/lipsync-helpers/metahumanOrder251.js.map +1 -0
- package/dist/lipsync-helpers/presetMappers.d.ts +24 -0
- package/dist/lipsync-helpers/presetMappers.d.ts.map +1 -0
- package/dist/lipsync-helpers/presetMappers.js +38 -0
- package/dist/lipsync-helpers/presetMappers.js.map +1 -0
- package/dist/react/components/ConvaiWidget.d.ts +68 -0
- package/dist/react/components/ConvaiWidget.d.ts.map +1 -0
- package/dist/react/components/ConvaiWidget.js +505 -0
- package/dist/react/components/ConvaiWidget.js.map +1 -0
- package/dist/react/components/index.d.ts +2 -0
- package/dist/react/components/index.d.ts.map +1 -0
- package/dist/react/components/index.js +3 -0
- package/dist/react/components/index.js.map +1 -0
- package/dist/react/components/rtc-widget/components/AudioSettingsPanel.d.ts +10 -0
- package/dist/react/components/rtc-widget/components/AudioSettingsPanel.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/AudioSettingsPanel.js +316 -0
- package/dist/react/components/rtc-widget/components/AudioSettingsPanel.js.map +1 -0
- package/dist/react/components/rtc-widget/components/AudioVisualizer.d.ts +36 -0
- package/dist/react/components/rtc-widget/components/AudioVisualizer.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/AudioVisualizer.js +259 -0
- package/dist/react/components/rtc-widget/components/AudioVisualizer.js.map +1 -0
- package/dist/react/components/rtc-widget/components/ConviMessage.d.ts +10 -0
- package/dist/react/components/rtc-widget/components/ConviMessage.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/ConviMessage.js +14 -0
- package/dist/react/components/rtc-widget/components/ConviMessage.js.map +1 -0
- package/dist/react/components/rtc-widget/components/FloatingVideo.d.ts +9 -0
- package/dist/react/components/rtc-widget/components/FloatingVideo.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/FloatingVideo.js +122 -0
- package/dist/react/components/rtc-widget/components/FloatingVideo.js.map +1 -0
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.d.ts +7 -0
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.js +68 -0
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.js.map +1 -0
- package/dist/react/components/rtc-widget/components/MessageBubble.d.ts +10 -0
- package/dist/react/components/rtc-widget/components/MessageBubble.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/MessageBubble.js +23 -0
- package/dist/react/components/rtc-widget/components/MessageBubble.js.map +1 -0
- package/dist/react/components/rtc-widget/components/MessageList.d.ts +11 -0
- package/dist/react/components/rtc-widget/components/MessageList.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/MessageList.js +89 -0
- package/dist/react/components/rtc-widget/components/MessageList.js.map +1 -0
- package/dist/react/components/rtc-widget/components/UserMessage.d.ts +9 -0
- package/dist/react/components/rtc-widget/components/UserMessage.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/UserMessage.js +15 -0
- package/dist/react/components/rtc-widget/components/UserMessage.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviButton.d.ts +6 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviButton.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviButton.js +15 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviButton.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.d.ts +25 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.js +172 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviHeader.d.ts +17 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviHeader.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviHeader.js +66 -0
- package/dist/react/components/rtc-widget/components/conviComponents/ConviHeader.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +12 -0
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js +68 -0
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts +12 -0
- package/dist/react/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js +255 -0
- package/dist/react/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/index.d.ts +6 -0
- package/dist/react/components/rtc-widget/components/conviComponents/index.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/conviComponents/index.js +6 -0
- package/dist/react/components/rtc-widget/components/conviComponents/index.js.map +1 -0
- package/dist/react/components/rtc-widget/components/index.d.ts +9 -0
- package/dist/react/components/rtc-widget/components/index.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/components/index.js +15 -0
- package/dist/react/components/rtc-widget/components/index.js.map +1 -0
- package/dist/react/components/rtc-widget/index.d.ts +6 -0
- package/dist/react/components/rtc-widget/index.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/index.js +9 -0
- package/dist/react/components/rtc-widget/index.js.map +1 -0
- package/dist/react/components/rtc-widget/styles/framerConfig.d.ts +116 -0
- package/dist/react/components/rtc-widget/styles/framerConfig.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/styles/framerConfig.js +73 -0
- package/dist/react/components/rtc-widget/styles/framerConfig.js.map +1 -0
- package/dist/react/components/rtc-widget/styles/icons.d.ts +28 -0
- package/dist/react/components/rtc-widget/styles/icons.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/styles/icons.js +257 -0
- package/dist/react/components/rtc-widget/styles/icons.js.map +1 -0
- package/dist/react/components/rtc-widget/styles/index.d.ts +6 -0
- package/dist/react/components/rtc-widget/styles/index.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/styles/index.js +9 -0
- package/dist/react/components/rtc-widget/styles/index.js.map +1 -0
- package/dist/react/components/rtc-widget/styles/styledComponents.d.ts +90 -0
- package/dist/react/components/rtc-widget/styles/styledComponents.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/styles/styledComponents.js +663 -0
- package/dist/react/components/rtc-widget/styles/styledComponents.js.map +1 -0
- package/dist/react/components/rtc-widget/styles/theme.d.ts +188 -0
- package/dist/react/components/rtc-widget/styles/theme.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/styles/theme.js +290 -0
- package/dist/react/components/rtc-widget/styles/theme.js.map +1 -0
- package/dist/react/components/rtc-widget/types/index.d.ts +60 -0
- package/dist/react/components/rtc-widget/types/index.d.ts.map +1 -0
- package/dist/react/components/rtc-widget/types/index.js +2 -0
- package/dist/react/components/rtc-widget/types/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +4 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +6 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useCharacterInfo.d.ts +17 -0
- package/dist/react/hooks/useCharacterInfo.d.ts.map +1 -0
- package/dist/react/hooks/useCharacterInfo.js +60 -0
- package/dist/react/hooks/useCharacterInfo.js.map +1 -0
- package/dist/react/hooks/useConvaiClient.d.ts +35 -0
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -0
- package/dist/react/hooks/useConvaiClient.js +179 -0
- package/dist/react/hooks/useConvaiClient.js.map +1 -0
- package/dist/react/hooks/useLocalCameraTrack.d.ts +22 -0
- package/dist/react/hooks/useLocalCameraTrack.d.ts.map +1 -0
- package/dist/react/hooks/useLocalCameraTrack.js +34 -0
- package/dist/react/hooks/useLocalCameraTrack.js.map +1 -0
- package/dist/react/index.d.ts +7 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +13 -0
- package/dist/react/index.js.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/LatencyMonitor.d.ts.map +1 -0
- package/dist/utils/LatencyMonitor.js +136 -0
- package/dist/utils/LatencyMonitor.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +96 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/speakerManagement.d.ts.map +1 -0
- package/dist/utils/speakerManagement.js +64 -0
- package/dist/utils/speakerManagement.js.map +1 -0
- package/dist/{types/vanilla → vanilla}/AudioRenderer.d.ts +5 -0
- package/dist/vanilla/AudioRenderer.d.ts.map +1 -0
- package/dist/vanilla/AudioRenderer.js +135 -0
- package/dist/vanilla/AudioRenderer.js.map +1 -0
- package/dist/{types/vanilla → vanilla}/ConvaiWidget.d.ts +13 -6
- package/dist/vanilla/ConvaiWidget.d.ts.map +1 -0
- package/dist/vanilla/ConvaiWidget.js +1823 -0
- package/dist/vanilla/ConvaiWidget.js.map +1 -0
- package/dist/vanilla/icons.d.ts.map +1 -0
- package/dist/vanilla/icons.js +222 -0
- package/dist/vanilla/icons.js.map +1 -0
- package/dist/{types/vanilla → vanilla}/index.d.ts +1 -3
- package/dist/vanilla/index.d.ts.map +1 -0
- package/dist/vanilla/index.js +20 -5509
- package/dist/vanilla/index.js.map +1 -0
- package/dist/vanilla/styles.d.ts.map +1 -0
- package/dist/vanilla/styles.js +287 -0
- package/dist/vanilla/styles.js.map +1 -0
- package/dist/vanilla/types.d.ts +63 -0
- package/dist/vanilla/types.d.ts.map +1 -0
- package/dist/vanilla/types.js +2 -0
- package/dist/vanilla/types.js.map +1 -0
- package/package.json +33 -38
- package/CHANGELOG.md +0 -165
- package/dist/core/index.cjs +0 -1977
- package/dist/lipsync-helpers/index.cjs +0 -1195
- package/dist/types/core/AudioManager.d.ts.map +0 -1
- package/dist/types/core/ConvaiClient.d.ts.map +0 -1
- package/dist/types/core/EventEmitter.d.ts.map +0 -1
- package/dist/types/core/MessageHandler.d.ts.map +0 -1
- package/dist/types/core/ScreenShareManager.d.ts.map +0 -1
- package/dist/types/core/VideoManager.d.ts.map +0 -1
- package/dist/types/core/index.d.ts.map +0 -1
- package/dist/types/core/types.d.ts.map +0 -1
- package/dist/types/lipsync-helpers/arkitBlendshapeHelpers.d.ts +0 -80
- package/dist/types/lipsync-helpers/arkitBlendshapeHelpers.d.ts.map +0 -1
- package/dist/types/lipsync-helpers/arkitOrder61.d.ts.map +0 -1
- package/dist/types/lipsync-helpers/arkitPhonemeReference.d.ts +0 -155
- package/dist/types/lipsync-helpers/arkitPhonemeReference.d.ts.map +0 -1
- package/dist/types/lipsync-helpers/index.d.ts +0 -9
- package/dist/types/lipsync-helpers/index.d.ts.map +0 -1
- package/dist/types/lipsync-helpers/neurosyncBlendshapeMapper.d.ts +0 -30
- package/dist/types/lipsync-helpers/neurosyncBlendshapeMapper.d.ts.map +0 -1
- package/dist/types/types/index.d.ts.map +0 -1
- package/dist/types/utils/LatencyMonitor.d.ts.map +0 -1
- package/dist/types/utils/logger.d.ts.map +0 -1
- package/dist/types/utils/speakerManagement.d.ts.map +0 -1
- package/dist/types/vanilla/AudioRenderer.d.ts.map +0 -1
- package/dist/types/vanilla/ConvaiWidget.d.ts.map +0 -1
- package/dist/types/vanilla/icons.d.ts.map +0 -1
- package/dist/types/vanilla/index.d.ts.map +0 -1
- package/dist/types/vanilla/styles.d.ts.map +0 -1
- package/dist/types/vanilla/types.d.ts +0 -106
- package/dist/types/vanilla/types.d.ts.map +0 -1
- package/dist/umd/convai.umd.js +0 -1
- package/dist/vanilla/index.cjs +0 -5559
- /package/dist/{types/core → core}/AudioManager.d.ts +0 -0
- /package/dist/{types/core → core}/EventEmitter.d.ts +0 -0
- /package/dist/{types/core → core}/ScreenShareManager.d.ts +0 -0
- /package/dist/{types/core → core}/VideoManager.d.ts +0 -0
- /package/dist/{types/lipsync-helpers → lipsync-helpers}/arkitOrder61.d.ts +0 -0
- /package/dist/types/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/utils → utils}/LatencyMonitor.d.ts +0 -0
- /package/dist/{types/utils → utils}/logger.d.ts +0 -0
- /package/dist/{types/utils → utils}/speakerManagement.d.ts +0 -0
- /package/dist/{types/vanilla → vanilla}/icons.d.ts +0 -0
- /package/dist/{types/vanilla → vanilla}/styles.d.ts +0 -0
package/dist/umd/convai.umd.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Convai={})}(this,function(e){"use strict";function t(e,t){return t.forEach(function(t){t&&"string"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach(function(n){if("default"!==n&&!(n in e)){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}})}),Object.freeze(e)}var n=Object.defineProperty,i=(e,t,i)=>((e,t,i)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class s{constructor(){i(this,"_locking"),i(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){let e;this._locks+=1;const t=new Promise(t=>e=()=>{this._locks-=1,t()}),n=this._locking.then(()=>e);return this._locking=this._locking.then(()=>t),n}}function o(e,t){if(!e)throw Error(t)}function r(e){if("number"!=typeof e)throw Error("invalid int 32: "+typeof e);if(!Number.isInteger(e)||e>2147483647||-2147483648>e)throw Error("invalid int 32: "+e)}function a(e){if("number"!=typeof e)throw Error("invalid uint 32: "+typeof e);if(!Number.isInteger(e)||e>4294967295||0>e)throw Error("invalid uint 32: "+e)}function c(e){if("number"!=typeof e)throw Error("invalid float 32: "+typeof e);if(Number.isFinite(e)&&(e>34028234663852886e22||-34028234663852886e22>e))throw Error("invalid float 32: "+e)}const d=Symbol("@bufbuild/protobuf/enum-type");function l(e){const t=e[d];return o(t,"missing enum type on enum object"),t}function u(e,t,n,i){e[d]=h(t,n.map(t=>({no:t.no,name:t.name,localName:e[t.no]})))}function h(e,t,n){const i=Object.create(null),s=Object.create(null),o=[];for(const e of t){const t=m(e);o.push(t),i[e.name]=t,s[e.no]=t}return{typeName:e,values:o,findName:e=>i[e],findNumber:e=>s[e]}}function p(e,t,n){const i={};for(const e of t){const t=m(e);i[t.localName]=t.no,i[t.no]=t.localName}return u(i,e,t),i}function m(e){return"localName"in e?e:Object.assign(Object.assign({},e),{localName:e.name})}class g{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,t){const n=this.getType().runtime.bin,i=n.makeReadOptions(t);return n.readMessage(this,i.readerFactory(e),e.byteLength,i),this}fromJson(e,t){const n=this.getType(),i=n.runtime.json,s=i.makeReadOptions(t);return i.readMessage(n,e,s,this),this}fromJsonString(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(e instanceof Error?e.message:e+""))}return this.fromJson(n,t)}toBinary(e){const t=this.getType().runtime.bin,n=t.makeWriteOptions(e),i=n.writerFactory();return t.writeMessage(this,i,n),i.finish()}toJson(e){const t=this.getType().runtime.json,n=t.makeWriteOptions(e);return t.writeMessage(this,n)}toJsonString(e){var t;const n=this.toJson(e);return JSON.stringify(n,null,null!==(t=null==e?void 0:e.prettySpaces)&&void 0!==t?t:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function f(){let e=0,t=0;for(let n=0;28>n;n+=7){let i=this.buf[this.pos++];if(e|=(127&i)<<n,!(128&i))return this.assertBounds(),[e,t]}let n=this.buf[this.pos++];if(e|=(15&n)<<28,t=(112&n)>>4,!(128&n))return this.assertBounds(),[e,t];for(let n=3;31>=n;n+=7){let i=this.buf[this.pos++];if(t|=(127&i)<<n,!(128&i))return this.assertBounds(),[e,t]}throw Error("invalid varint")}function v(e,t,n){for(let i=0;28>i;i+=7){const s=e>>>i,o=!(s>>>7==0&&0==t);if(n.push(255&(o?128|s:s)),!o)return}const i=e>>>28&15|(7&t)<<4,s=!!(t>>3);if(n.push(255&(s?128|i:i)),s){for(let e=3;31>e;e+=7){const i=t>>>e,s=!(i>>>7==0);if(n.push(255&(s?128|i:i)),!s)return}n.push(t>>>31&1)}}const y=4294967296;function b(e){const t="-"===e[0];t&&(e=e.slice(1));const n=1e6;let i=0,s=0;function o(t,o){const r=Number(e.slice(t,o));s*=n,i=i*n+r,y>i||(s+=i/y|0,i%=y)}return o(-24,-18),o(-18,-12),o(-12,-6),o(-6),t?T(i,s):C(i,s)}function k(e,t){if(({lo:e,hi:t}=function(e,t){return{lo:e>>>0,hi:t>>>0}}(e,t)),2097151>=t)return y*t+e+"";const n=16777215&(e>>>24|t<<8),i=t>>16&65535;let s=(16777215&e)+6777216*n+6710656*i,o=n+8147497*i,r=2*i;const a=1e7;return a>s||(o+=Math.floor(s/a),s%=a),a>o||(r+=Math.floor(o/a),o%=a),""+r+S(o)+S(s)}function C(e,t){return{lo:0|e,hi:0|t}}function T(e,t){return t=~t,e?e=1+~e:t+=1,C(e,t)}const S=e=>{const t=e+"";return"0000000".slice(t.length)+t};function w(e,t){if(e<0){for(let n=0;9>n;n++)t.push(127&e|128),e>>=7;t.push(1)}else{for(;e>127;)t.push(127&e|128),e>>>=7;t.push(e)}}function E(){let e=this.buf[this.pos++],t=127&e;if(!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<7,!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<14,!(128&e))return this.assertBounds(),t;if(e=this.buf[this.pos++],t|=(127&e)<<21,!(128&e))return this.assertBounds(),t;e=this.buf[this.pos++],t|=(15&e)<<28;for(let t=5;128&e&&10>t;t++)e=this.buf[this.pos++];if(128&e)throw Error("invalid varint");return this.assertBounds(),t>>>0}const R=function(){const e=new DataView(new ArrayBuffer(8));if("function"==typeof BigInt&&"function"==typeof e.getBigInt64&&"function"==typeof e.getBigUint64&&"function"==typeof e.setBigInt64&&"function"==typeof e.setBigUint64&&("object"!=typeof process||"object"!=typeof process.env||"1"!==process.env.BUF_BIGINT_DISABLE)){const t=BigInt("-9223372036854775808"),n=BigInt("9223372036854775807"),i=BigInt("0"),s=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(e){const i="bigint"==typeof e?e:BigInt(e);if(i>n||t>i)throw Error("int64 invalid: ".concat(e));return i},uParse(e){const t="bigint"==typeof e?e:BigInt(e);if(t>s||i>t)throw Error("uint64 invalid: ".concat(e));return t},enc(t){return e.setBigInt64(0,this.parse(t),!0),{lo:e.getInt32(0,!0),hi:e.getInt32(4,!0)}},uEnc(t){return e.setBigInt64(0,this.uParse(t),!0),{lo:e.getInt32(0,!0),hi:e.getInt32(4,!0)}},dec:(t,n)=>(e.setInt32(0,t,!0),e.setInt32(4,n,!0),e.getBigInt64(0,!0)),uDec:(t,n)=>(e.setInt32(0,t,!0),e.setInt32(4,n,!0),e.getBigUint64(0,!0))}}const t=e=>o(/^-?[0-9]+$/.test(e),"int64 invalid: ".concat(e)),n=e=>o(/^[0-9]+$/.test(e),"uint64 invalid: ".concat(e));return{zero:"0",supported:!1,parse:e=>("string"!=typeof e&&(e=""+e),t(e),e),uParse:e=>("string"!=typeof e&&(e=""+e),n(e),e),enc:e=>("string"!=typeof e&&(e=""+e),t(e),b(e)),uEnc:e=>("string"!=typeof e&&(e=""+e),n(e),b(e)),dec:(e,t)=>function(e,t){let n=C(e,t);const i=2147483648&n.hi;i&&(n=T(n.lo,n.hi));const s=k(n.lo,n.hi);return i?"-"+s:s}(e,t),uDec:(e,t)=>k(e,t)}}();var _,P,I;function x(e,t,n){if(t===n)return!0;if(e==_.BYTES){if(!(t instanceof Uint8Array&&n instanceof Uint8Array))return!1;if(t.length!==n.length)return!1;for(let e=0;t.length>e;e++)if(t[e]!==n[e])return!1;return!0}switch(e){case _.UINT64:case _.FIXED64:case _.INT64:case _.SFIXED64:case _.SINT64:return t==n}return!1}function M(e,t){switch(e){case _.BOOL:return!1;case _.UINT64:case _.FIXED64:case _.INT64:case _.SFIXED64:case _.SINT64:return 0==t?R.zero:"0";case _.DOUBLE:case _.FLOAT:return 0;case _.BYTES:return new Uint8Array(0);case _.STRING:return"";default:return 0}}function O(e,t){switch(e){case _.BOOL:return!1===t;case _.STRING:return""===t;case _.BYTES:return t instanceof Uint8Array&&!t.byteLength;default:return 0==t}}!function(e){e[e.DOUBLE=1]="DOUBLE",e[e.FLOAT=2]="FLOAT",e[e.INT64=3]="INT64",e[e.UINT64=4]="UINT64",e[e.INT32=5]="INT32",e[e.FIXED64=6]="FIXED64",e[e.FIXED32=7]="FIXED32",e[e.BOOL=8]="BOOL",e[e.STRING=9]="STRING",e[e.BYTES=12]="BYTES",e[e.UINT32=13]="UINT32",e[e.SFIXED32=15]="SFIXED32",e[e.SFIXED64=16]="SFIXED64",e[e.SINT32=17]="SINT32",e[e.SINT64=18]="SINT64"}(_||(_={})),function(e){e[e.BIGINT=0]="BIGINT",e[e.STRING=1]="STRING"}(P||(P={})),function(e){e[e.Varint=0]="Varint",e[e.Bit64=1]="Bit64",e[e.LengthDelimited=2]="LengthDelimited",e[e.StartGroup=3]="StartGroup",e[e.EndGroup=4]="EndGroup",e[e.Bit32=5]="Bit32"}(I||(I={}));class L{constructor(e){this.stack=[],this.textEncoder=null!=e?e:new TextEncoder,this.chunks=[],this.buf=[]}finish(){this.chunks.push(new Uint8Array(this.buf));let e=0;for(let t=0;this.chunks.length>t;t++)e+=this.chunks[t].length;let t=new Uint8Array(e),n=0;for(let e=0;this.chunks.length>e;e++)t.set(this.chunks[e],n),n+=this.chunks[e].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let e=this.finish(),t=this.stack.pop();if(!t)throw Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(e.byteLength),this.raw(e)}tag(e,t){return this.uint32((e<<3|t)>>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(a(e);e>127;)this.buf.push(127&e|128),e>>>=7;return this.buf.push(e),this}int32(e){return r(e),w(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.textEncoder.encode(e);return this.uint32(t.byteLength),this.raw(t)}float(e){c(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){a(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){r(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return r(e),w(e=(e<<1^e>>31)>>>0,this.buf),this}sfixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),i=R.enc(e);return n.setInt32(0,i.lo,!0),n.setInt32(4,i.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),i=R.uEnc(e);return n.setInt32(0,i.lo,!0),n.setInt32(4,i.hi,!0),this.raw(t)}int64(e){let t=R.enc(e);return v(t.lo,t.hi,this.buf),this}sint64(e){let t=R.enc(e),n=t.hi>>31;return v(t.lo<<1^n,(t.hi<<1|t.lo>>>31)^n,this.buf),this}uint64(e){let t=R.uEnc(e);return v(t.lo,t.hi,this.buf),this}}class D{constructor(e,t){this.varint64=f,this.uint32=E,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=null!=t?t:new TextDecoder}tag(){let e=this.uint32(),t=e>>>3,n=7&e;if(0>=t||0>n||n>5)throw Error("illegal tag: field no "+t+" wire type "+n);return[t,n]}skip(e,t){let n=this.pos;switch(e){case I.Varint:for(;128&this.buf[this.pos++];);break;case I.Bit64:this.pos+=4;case I.Bit32:this.pos+=4;break;case I.LengthDelimited:let n=this.uint32();this.pos+=n;break;case I.StartGroup:for(;;){const[e,n]=this.tag();if(n===I.EndGroup){if(void 0!==t&&e!==t)throw Error("invalid end group tag");break}this.skip(n,e)}break;default:throw Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return 0|this.uint32()}sint32(){let e=this.uint32();return e>>>1^-(1&e)}int64(){return R.dec(...this.varint64())}uint64(){return R.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),n=-(1&e);return e=(e>>>1|(1&t)<<31)^n,t=t>>>1^n,R.dec(e,t)}bool(){let[e,t]=this.varint64();return 0!==e||0!==t}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return R.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return R.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.textDecoder.decode(this.bytes())}}function A(e){const t=e.field.localName,n=Object.create(null);return n[t]=function(e){const t=e.field;if(t.repeated)return[];if(void 0!==t.default)return t.default;switch(t.kind){case"enum":return t.T.values[0].no;case"scalar":return M(t.T,t.L);case"message":const e=t.T,n=new e;return e.fieldWrapper?e.fieldWrapper.unwrapField(n):n;case"map":throw"map fields are not allowed to be extensions"}}(e),[n,()=>n[t]]}let N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),U=[];for(let e=0;N.length>e;e++)U[N[e].charCodeAt(0)]=e;U[45]=N.indexOf("+"),U[95]=N.indexOf("/");const j={dec(e){let t=3*e.length/4;"="==e[e.length-2]?t-=2:"="==e[e.length-1]&&(t-=1);let n,i=new Uint8Array(t),s=0,o=0,r=0;for(let t=0;e.length>t;t++){if(n=U[e.charCodeAt(t)],void 0===n)switch(e[t]){case"=":o=0;case"\n":case"\r":case"\t":case" ":continue;default:throw Error("invalid base64 string.")}switch(o){case 0:r=n,o=1;break;case 1:i[s++]=r<<2|(48&n)>>4,r=n,o=2;break;case 2:i[s++]=(15&r)<<4|(60&n)>>2,r=n,o=3;break;case 3:i[s++]=(3&r)<<6|n,o=0}}if(1==o)throw Error("invalid base64 string.");return i.subarray(0,s)},enc(e){let t,n="",i=0,s=0;for(let o=0;e.length>o;o++)switch(t=e[o],i){case 0:n+=N[t>>2],s=(3&t)<<4,i=1;break;case 1:n+=N[s|t>>4],s=(15&t)<<2,i=2;break;case 2:n+=N[s|t>>6],n+=N[63&t],i=0}return i&&(n+=N[s],n+="=",1==i&&(n+="=")),n}};function F(e,t,n){q(t,e);const i=t.runtime.bin.makeReadOptions(n),s=function(e,t){if(!t.repeated&&("enum"==t.kind||"scalar"==t.kind)){for(let n=e.length-1;n>=0;--n)if(e[n].no==t.no)return[e[n]];return[]}return e.filter(e=>e.no===t.no)}(e.getType().runtime.bin.listUnknownFields(e),t.field),[o,r]=A(t);for(const e of s)t.runtime.bin.readField(o,i.readerFactory(e.data),t.field,e.wireType,i);return r()}function B(e,t,n,i){q(t,e);const s=t.runtime.bin.makeReadOptions(i),o=t.runtime.bin.makeWriteOptions(i);if(V(e,t)){const n=e.getType().runtime.bin.listUnknownFields(e).filter(e=>e.no!=t.field.no);e.getType().runtime.bin.discardUnknownFields(e);for(const t of n)e.getType().runtime.bin.onUnknownField(e,t.no,t.wireType,t.data)}const r=o.writerFactory();let a=t.field;a.opt||a.repeated||"enum"!=a.kind&&"scalar"!=a.kind||(a=Object.assign(Object.assign({},t.field),{opt:!0})),t.runtime.bin.writeField(a,n,r,o);const c=s.readerFactory(r.finish());for(;c.len>c.pos;){const[t,n]=c.tag(),i=c.skip(n,t);e.getType().runtime.bin.onUnknownField(e,t,n,i)}}function V(e,t){const n=e.getType();return t.extendee.typeName===n.typeName&&!!n.runtime.bin.listUnknownFields(e).find(e=>e.no==t.field.no)}function q(e,t){o(e.extendee.typeName==t.getType().typeName,"extension ".concat(e.typeName," can only be applied to message ").concat(e.extendee.typeName))}function H(e,t){const n=e.localName;if(e.repeated)return t[n].length>0;if(e.oneof)return t[e.oneof.localName].case===n;switch(e.kind){case"enum":case"scalar":return e.opt||e.req?void 0!==t[n]:"enum"==e.kind?t[n]!==e.T.values[0].no:!O(e.T,t[n]);case"message":return void 0!==t[n];case"map":return Object.keys(t[n]).length>0}}function W(e,t){const n=e.localName,i=!e.opt&&!e.req;if(e.repeated)t[n]=[];else if(e.oneof)t[e.oneof.localName]={case:void 0};else switch(e.kind){case"map":t[n]={};break;case"enum":t[n]=i?e.T.values[0].no:void 0;break;case"scalar":t[n]=i?M(e.T,e.L):void 0;break;case"message":t[n]=void 0}}function z(e,t){if(null===e||"object"!=typeof e)return!1;if(!Object.getOwnPropertyNames(g.prototype).every(t=>t in e&&"function"==typeof e[t]))return!1;const n=e.getType();return null!==n&&"function"==typeof n&&"typeName"in n&&"string"==typeof n.typeName&&(void 0===t||n.typeName==t.typeName)}function K(e,t){return z(t)||!e.fieldWrapper?t:e.fieldWrapper.wrapField(t)}const G={ignoreUnknownFields:!1},J={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function $(e){return e?Object.assign(Object.assign({},G),e):G}function Y(e){return e?Object.assign(Object.assign({},J),e):J}const Q=Symbol(),X=Symbol();function Z(e){if(null===e)return"null";switch(typeof e){case"object":return Array.isArray(e)?"array":"object";case"string":return e.length>100?"string":'"'.concat(e.split('"').join('\\"'),'"');default:return e+""}}function ee(e,t,n,i,s){let r=n.localName;if(n.repeated){if(o("map"!=n.kind),null===t)return;if(!Array.isArray(t))throw Error("cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(t)));const a=e[r];for(const e of t){if(null===e)throw Error("cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(e)));switch(n.kind){case"message":a.push(n.T.fromJson(e,i));break;case"enum":const t=ie(n.T,e,i.ignoreUnknownFields,!0);t!==X&&a.push(t);break;case"scalar":try{a.push(ne(n.T,e,n.L,!0))}catch(t){let i="cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(e));throw t instanceof Error&&t.message.length>0&&(i+=": ".concat(t.message)),Error(i)}}}}else if("map"==n.kind){if(null===t)return;if("object"!=typeof t||Array.isArray(t))throw Error("cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(t)));const o=e[r];for(const[e,r]of Object.entries(t)){if(null===r)throw Error("cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: map value null"));let a;try{a=te(n.K,e)}catch(e){let i="cannot decode map key for field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(t));throw e instanceof Error&&e.message.length>0&&(i+=": ".concat(e.message)),Error(i)}switch(n.V.kind){case"message":o[a]=n.V.T.fromJson(r,i);break;case"enum":const e=ie(n.V.T,r,i.ignoreUnknownFields,!0);e!==X&&(o[a]=e);break;case"scalar":try{o[a]=ne(n.V.T,r,P.BIGINT,!0)}catch(e){let i="cannot decode map value for field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(t));throw e instanceof Error&&e.message.length>0&&(i+=": ".concat(e.message)),Error(i)}}}}else switch(n.oneof&&(e=e[n.oneof.localName]={case:r},r="value"),n.kind){case"message":const o=n.T;if(null===t&&"google.protobuf.Value"!=o.typeName)return;let a=e[r];z(a)?a.fromJson(t,i):(e[r]=a=o.fromJson(t,i),o.fieldWrapper&&!n.oneof&&(e[r]=o.fieldWrapper.unwrapField(a)));break;case"enum":const c=ie(n.T,t,i.ignoreUnknownFields,!1);switch(c){case Q:W(n,e);break;case X:break;default:e[r]=c}break;case"scalar":try{const i=ne(n.T,t,n.L,!1);if(i===Q)W(n,e);else e[r]=i}catch(e){let i="cannot decode field ".concat(s.typeName,".").concat(n.name," from JSON: ").concat(Z(t));throw e instanceof Error&&e.message.length>0&&(i+=": ".concat(e.message)),Error(i)}}}function te(e,t){if(e===_.BOOL)switch(t){case"true":t=!0;break;case"false":t=!1}return""+ne(e,t,P.BIGINT,!0)}function ne(e,t,n,i){if(null===t)return i?M(e,n):Q;switch(e){case _.DOUBLE:case _.FLOAT:if("NaN"===t)return NaN;if("Infinity"===t)return 1/0;if("-Infinity"===t)return-1/0;if(""===t)break;if("string"==typeof t&&t.trim().length!==t.length)break;if("string"!=typeof t&&"number"!=typeof t)break;const i=Number(t);if(Number.isNaN(i))break;if(!Number.isFinite(i))break;return e==_.FLOAT&&c(i),i;case _.INT32:case _.FIXED32:case _.SFIXED32:case _.SINT32:case _.UINT32:let s;if("number"==typeof t?s=t:"string"==typeof t&&t.length>0&&t.trim().length===t.length&&(s=Number(t)),void 0===s)break;return e==_.UINT32||e==_.FIXED32?a(s):r(s),s;case _.INT64:case _.SFIXED64:case _.SINT64:if("number"!=typeof t&&"string"!=typeof t)break;const o=R.parse(t);return n?""+o:o;case _.FIXED64:case _.UINT64:if("number"!=typeof t&&"string"!=typeof t)break;const d=R.uParse(t);return n?""+d:d;case _.BOOL:if("boolean"!=typeof t)break;return t;case _.STRING:if("string"!=typeof t)break;return t;case _.BYTES:if(""===t)return new Uint8Array(0);if("string"!=typeof t)break;return j.dec(t)}throw Error()}function ie(e,t,n,i){if(null===t)return"google.protobuf.NullValue"==e.typeName?0:i?e.values[0].no:Q;switch(typeof t){case"number":if(Number.isInteger(t))return t;break;case"string":const i=e.findName(t);if(void 0!==i)return i.no;if(n)return X}throw Error("cannot decode enum ".concat(e.typeName," from JSON: ").concat(Z(t)))}function se(e){return!(!e.repeated&&"map"!=e.kind)||!e.oneof&&("message"!=e.kind&&(!e.opt&&!e.req))}function oe(e,t,n){if("map"==e.kind){o("object"==typeof t&&null!=t);const i={},s=Object.entries(t);switch(e.V.kind){case"scalar":for(const[t,n]of s)i[""+t]=ae(e.V.T,n);break;case"message":for(const[e,t]of s)i[""+e]=t.toJson(n);break;case"enum":const t=e.V.T;for(const[e,o]of s)i[""+e]=re(t,o,n.enumAsInteger)}return n.emitDefaultValues||s.length>0?i:void 0}if(e.repeated){o(Array.isArray(t));const i=[];switch(e.kind){case"scalar":for(let n=0;t.length>n;n++)i.push(ae(e.T,t[n]));break;case"enum":for(let s=0;t.length>s;s++)i.push(re(e.T,t[s],n.enumAsInteger));break;case"message":for(let e=0;t.length>e;e++)i.push(t[e].toJson(n))}return n.emitDefaultValues||i.length>0?i:void 0}switch(e.kind){case"scalar":return ae(e.T,t);case"enum":return re(e.T,t,n.enumAsInteger);case"message":return K(e.T,t).toJson(n)}}function re(e,t,n){var i;if(o("number"==typeof t),"google.protobuf.NullValue"==e.typeName)return null;if(n)return t;const s=e.findNumber(t);return null!==(i=null==s?void 0:s.name)&&void 0!==i?i:t}function ae(e,t){switch(e){case _.INT32:case _.SFIXED32:case _.SINT32:case _.FIXED32:case _.UINT32:return o("number"==typeof t),t;case _.FLOAT:case _.DOUBLE:return o("number"==typeof t),Number.isNaN(t)?"NaN":t===1/0?"Infinity":t===-1/0?"-Infinity":t;case _.STRING:return o("string"==typeof t),t;case _.BOOL:return o("boolean"==typeof t),t;case _.UINT64:case _.FIXED64:case _.INT64:case _.SFIXED64:case _.SINT64:return o("bigint"==typeof t||"string"==typeof t||"number"==typeof t),""+t;case _.BYTES:return o(t instanceof Uint8Array),j.enc(t)}}const ce=Symbol("@bufbuild/protobuf/unknown-fields"),de={readUnknownFields:!0,readerFactory:e=>new D(e)},le={writeUnknownFields:!0,writerFactory:()=>new L};function ue(e){return e?Object.assign(Object.assign({},de),e):de}function he(e){return e?Object.assign(Object.assign({},le),e):le}function pe(e,t,n,i,s){let{repeated:o,localName:r}=n;switch(n.oneof&&((e=e[n.oneof.localName]).case!=r&&delete e.value,e.case=r,r="value"),n.kind){case"scalar":case"enum":const a="enum"==n.kind?_.INT32:n.T;let c=fe;if("scalar"==n.kind&&n.L>0&&(c=ge),o){let n=e[r];if(i==I.LengthDelimited&&a!=_.STRING&&a!=_.BYTES){let e=t.uint32()+t.pos;for(;e>t.pos;)n.push(c(t,a))}else n.push(c(t,a))}else e[r]=c(t,a);break;case"message":const d=n.T;o?e[r].push(me(t,new d,s,n)):z(e[r])?me(t,e[r],s,n):(e[r]=me(t,new d,s,n),!d.fieldWrapper||n.oneof||n.repeated||(e[r]=d.fieldWrapper.unwrapField(e[r])));break;case"map":let[l,u]=function(e,t,n){const i=t.uint32(),s=t.pos+i;let o,r;for(;s>t.pos;){const[i]=t.tag();switch(i){case 1:o=fe(t,e.K);break;case 2:switch(e.V.kind){case"scalar":r=fe(t,e.V.T);break;case"enum":r=t.int32();break;case"message":r=me(t,new e.V.T,n,void 0)}}}void 0===o&&(o=M(e.K,P.BIGINT));"string"!=typeof o&&"number"!=typeof o&&(o=""+o);if(void 0===r)switch(e.V.kind){case"scalar":r=M(e.V.T,P.BIGINT);break;case"enum":r=e.V.T.values[0].no;break;case"message":r=new e.V.T}return[o,r]}(n,t,s);e[r][l]=u}}function me(e,t,n,i){const s=t.getType().runtime.bin,o=null==i?void 0:i.delimited;return s.readMessage(t,e,o?i.no:e.uint32(),n,o),t}function ge(e,t){const n=fe(e,t);return"bigint"==typeof n?""+n:n}function fe(e,t){switch(t){case _.STRING:return e.string();case _.BOOL:return e.bool();case _.DOUBLE:return e.double();case _.FLOAT:return e.float();case _.INT32:return e.int32();case _.INT64:return e.int64();case _.UINT64:return e.uint64();case _.FIXED64:return e.fixed64();case _.BYTES:return e.bytes();case _.FIXED32:return e.fixed32();case _.SFIXED32:return e.sfixed32();case _.SFIXED64:return e.sfixed64();case _.SINT64:return e.sint64();case _.UINT32:return e.uint32();case _.SINT32:return e.sint32()}}function ve(e,t,n,i){o(void 0!==t);const s=e.repeated;switch(e.kind){case"scalar":case"enum":let r="enum"==e.kind?_.INT32:e.T;if(s)if(o(Array.isArray(t)),e.packed)!function(e,t,n,i){if(!i.length)return;e.tag(n,I.LengthDelimited).fork();let[,s]=Ce(t);for(let t=0;i.length>t;t++)e[s](i[t]);e.join()}(n,r,e.no,t);else for(const i of t)ke(n,r,e.no,i);else ke(n,r,e.no,t);break;case"message":if(s){o(Array.isArray(t));for(const s of t)be(n,i,e,s)}else be(n,i,e,t);break;case"map":o("object"==typeof t&&null!=t);for(const[s,o]of Object.entries(t))ye(n,i,e,s,o)}}function ye(e,t,n,i,s){e.tag(n.no,I.LengthDelimited),e.fork();let r=i;switch(n.K){case _.INT32:case _.FIXED32:case _.UINT32:case _.SFIXED32:case _.SINT32:r=Number.parseInt(i);break;case _.BOOL:o("true"==i||"false"==i),r="true"==i}switch(ke(e,n.K,1,r),n.V.kind){case"scalar":ke(e,n.V.T,2,s);break;case"enum":ke(e,_.INT32,2,s);break;case"message":o(void 0!==s),e.tag(2,I.LengthDelimited).bytes(s.toBinary(t))}e.join()}function be(e,t,n,i){const s=K(n.T,i);n.delimited?e.tag(n.no,I.StartGroup).raw(s.toBinary(t)).tag(n.no,I.EndGroup):e.tag(n.no,I.LengthDelimited).bytes(s.toBinary(t))}function ke(e,t,n,i){o(void 0!==i);let[s,r]=Ce(t);e.tag(n,s)[r](i)}function Ce(e){let t=I.Varint;switch(e){case _.BYTES:case _.STRING:t=I.LengthDelimited;break;case _.DOUBLE:case _.FIXED64:case _.SFIXED64:t=I.Bit64;break;case _.FIXED32:case _.SFIXED32:case _.FLOAT:t=I.Bit32}return[t,_[e].toLowerCase()]}function Te(e){if(void 0===e)return e;if(z(e))return e.clone();if(e instanceof Uint8Array){const t=new Uint8Array(e.byteLength);return t.set(e),t}return e}function Se(e){return e instanceof Uint8Array?e:new Uint8Array(e)}class we{constructor(e,t){this._fields=e,this._normalizer=t}findJsonName(e){if(!this.jsonNames){const e={};for(const t of this.list())e[t.jsonName]=e[t.name]=t;this.jsonNames=e}return this.jsonNames[e]}find(e){if(!this.numbers){const e={};for(const t of this.list())e[t.no]=t;this.numbers=e}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,t)=>e.no-t.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let t;for(const n of this.list())n.oneof?n.oneof!==t&&(t=n.oneof,e.push(t)):e.push(n)}return this.members}}function Ee(e,t){const n=_e(e);return t?n:Oe(Me(n))}const Re=_e;function _e(e){let t=!1;const n=[];for(let i=0;e.length>i;i++){let s=e.charAt(i);switch(s){case"_":t=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":n.push(s),t=!1;break;default:t&&(t=!1,s=s.toUpperCase()),n.push(s)}}return n.join("")}const Pe=new Set(["constructor","toString","toJSON","valueOf"]),Ie=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]),xe=e=>"".concat(e,"$"),Me=e=>Ie.has(e)?xe(e):e,Oe=e=>Pe.has(e)?xe(e):e;class Le{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=Ee(e,!1)}addField(e){o(e.oneof===this,"field ".concat(e.name," not one of ").concat(this.name)),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let e=0;this.fields.length>e;e++)this._lookup[this.fields[e].localName]=this.fields[e]}return this._lookup[e]}}const De=(Ae=e=>new we(e,e=>function(e){var t,n,i,s,o,r;const a=[];let c;for(const d of"function"==typeof e?e():e){const e=d;if(e.localName=Ee(d.name,void 0!==d.oneof),e.jsonName=null!==(t=d.jsonName)&&void 0!==t?t:Re(d.name),e.repeated=null!==(n=d.repeated)&&void 0!==n&&n,"scalar"==d.kind&&(e.L=null!==(i=d.L)&&void 0!==i?i:P.BIGINT),e.delimited=null!==(s=d.delimited)&&void 0!==s&&s,e.req=null!==(o=d.req)&&void 0!==o&&o,e.opt=null!==(r=d.opt)&&void 0!==r&&r,void 0===d.packed&&(e.packed="enum"==d.kind||"scalar"==d.kind&&d.T!=_.BYTES&&d.T!=_.STRING),void 0!==d.oneof){const t="string"==typeof d.oneof?d.oneof:d.oneof.name;c&&c.name==t||(c=new Le(t)),e.oneof=c,c.addField(e)}a.push(e)}return a}(e)),Ne=e=>{for(const t of e.getType().fields.byMember()){if(t.opt)continue;const n=t.localName,i=e;if(t.repeated)i[n]=[];else switch(t.kind){case"oneof":i[n]={case:void 0};break;case"enum":i[n]=0;break;case"map":i[n]={};break;case"scalar":i[n]=M(t.T,t.L)}}},{syntax:"proto3",json:{makeReadOptions:$,makeWriteOptions:Y,readMessage(e,t,n,i){if(null==t||Array.isArray(t)||"object"!=typeof t)throw Error("cannot decode message ".concat(e.typeName," from JSON: ").concat(Z(t)));i=null!=i?i:new e;const s=new Map,o=n.typeRegistry;for(const[r,a]of Object.entries(t)){const t=e.fields.findJsonName(r);if(t){if(t.oneof){if(null===a&&"scalar"==t.kind)continue;const n=s.get(t.oneof);if(void 0!==n)throw Error("cannot decode message ".concat(e.typeName,' from JSON: multiple keys for oneof "').concat(t.oneof.name,'" present: "').concat(n,'", "').concat(r,'"'));s.set(t.oneof,r)}ee(i,a,t,n,e)}else{let t=!1;if((null==o?void 0:o.findExtension)&&r.startsWith("[")&&r.endsWith("]")){const s=o.findExtension(r.substring(1,r.length-1));if(s&&s.extendee.typeName==e.typeName){t=!0;const[e,o]=A(s);ee(e,a,s.field,n,s),B(i,s,o(),n)}}if(!t&&!n.ignoreUnknownFields)throw Error("cannot decode message ".concat(e.typeName,' from JSON: key "').concat(r,'" is unknown'))}}return i},writeMessage(e,t){const n=e.getType(),i={};let s;try{for(s of n.fields.byNumber()){if(!H(s,e)){if(s.req)throw"required field not set";if(!t.emitDefaultValues)continue;if(!se(s))continue}const n=oe(s,s.oneof?e[s.oneof.localName].value:e[s.localName],t);void 0!==n&&(i[t.useProtoFieldName?s.name:s.jsonName]=n)}const o=t.typeRegistry;if(null==o?void 0:o.findExtensionFor)for(const s of n.runtime.bin.listUnknownFields(e)){const r=o.findExtensionFor(n.typeName,s.no);if(r&&V(e,r)){const n=F(e,r,t),s=oe(r.field,n,t);void 0!==s&&(i[r.field.jsonName]=s)}}}catch(e){const t=s?"cannot encode field ".concat(n.typeName,".").concat(s.name," to JSON"):"cannot encode message ".concat(n.typeName," to JSON"),i=e instanceof Error?e.message:e+"";throw Error(t+(i.length>0?": ".concat(i):""))}return i},readScalar:(e,t,n)=>ne(e,t,null!=n?n:P.BIGINT,!0),writeScalar(e,t,n){if(void 0!==t)return n||O(e,t)?ae(e,t):void 0},debug:Z},bin:{makeReadOptions:ue,makeWriteOptions:he,listUnknownFields(e){var t;return null!==(t=e[ce])&&void 0!==t?t:[]},discardUnknownFields(e){delete e[ce]},writeUnknownFields(e,t){const n=e[ce];if(n)for(const e of n)t.tag(e.no,e.wireType).raw(e.data)},onUnknownField(e,t,n,i){const s=e;Array.isArray(s[ce])||(s[ce]=[]),s[ce].push({no:t,wireType:n,data:i})},readMessage(e,t,n,i,s){const o=e.getType(),r=s?t.len:t.pos+n;let a,c;for(;r>t.pos&&([a,c]=t.tag(),!0!==s||c!=I.EndGroup);){const n=o.fields.find(a);if(!n){const n=t.skip(c,a);i.readUnknownFields&&this.onUnknownField(e,a,c,n);continue}pe(e,t,n,c,i)}if(s&&(c!=I.EndGroup||a!==n))throw Error("invalid end group tag")},readField:pe,writeMessage(e,t,n){const i=e.getType();for(const s of i.fields.byNumber())if(H(s,e))ve(s,s.oneof?e[s.oneof.localName].value:e[s.localName],t,n);else if(s.req)throw Error("cannot encode field ".concat(i.typeName,".").concat(s.name," to binary: required field not set"));return n.writeUnknownFields&&this.writeUnknownFields(e,t),t},writeField(e,t,n,i){void 0!==t&&ve(e,t,n,i)}},util:Object.assign(Object.assign({},{setEnumType:u,initPartial(e,t){if(void 0===e)return;const n=t.getType();for(const i of n.fields.byMember()){const n=i.localName,s=t,o=e;if(null!=o[n])switch(i.kind){case"oneof":const e=o[n].case;if(void 0===e)continue;const t=i.findField(e);let r=o[n].value;t&&"message"==t.kind&&!z(r,t.T)?r=new t.T(r):t&&"scalar"===t.kind&&t.T===_.BYTES&&(r=Se(r)),s[n]={case:e,value:r};break;case"scalar":case"enum":let a=o[n];i.T===_.BYTES&&(a=i.repeated?a.map(Se):Se(a)),s[n]=a;break;case"map":switch(i.V.kind){case"scalar":case"enum":if(i.V.T===_.BYTES)for(const[e,t]of Object.entries(o[n]))s[n][e]=Se(t);else Object.assign(s[n],o[n]);break;case"message":const e=i.V.T;for(const t of Object.keys(o[n])){let i=o[n][t];e.fieldWrapper||(i=new e(i)),s[n][t]=i}}break;case"message":const c=i.T;if(i.repeated)s[n]=o[n].map(e=>z(e,c)?e:new c(e));else{const e=o[n];s[n]=c.fieldWrapper?"google.protobuf.BytesValue"===c.typeName?Se(e):e:z(e,c)?e:new c(e)}}}},equals:(e,t,n)=>t===n||!(!t||!n)&&e.fields.byMember().every(e=>{const i=t[e.localName],s=n[e.localName];if(e.repeated){if(i.length!==s.length)return!1;switch(e.kind){case"message":return i.every((t,n)=>e.T.equals(t,s[n]));case"scalar":return i.every((t,n)=>x(e.T,t,s[n]));case"enum":return i.every((e,t)=>x(_.INT32,e,s[t]))}throw Error("repeated cannot contain ".concat(e.kind))}switch(e.kind){case"message":let t=i,n=s;return e.T.fieldWrapper&&(void 0===t||z(t)||(t=e.T.fieldWrapper.wrapField(t)),void 0===n||z(n)||(n=e.T.fieldWrapper.wrapField(n))),e.T.equals(t,n);case"enum":return x(_.INT32,i,s);case"scalar":return x(e.T,i,s);case"oneof":if(i.case!==s.case)return!1;const o=e.findField(i.case);if(void 0===o)return!0;switch(o.kind){case"message":return o.T.equals(i.value,s.value);case"enum":return x(_.INT32,i.value,s.value);case"scalar":return x(o.T,i.value,s.value)}throw Error("oneof cannot contain ".concat(o.kind));case"map":const r=Object.keys(i).concat(Object.keys(s));switch(e.V.kind){case"message":const t=e.V.T;return r.every(e=>t.equals(i[e],s[e]));case"enum":return r.every(e=>x(_.INT32,i[e],s[e]));case"scalar":const n=e.V.T;return r.every(e=>x(n,i[e],s[e]))}}}),clone(e){const t=e.getType(),n=new t,i=n;for(const n of t.fields.byMember()){const t=e[n.localName];let s;if(n.repeated)s=t.map(Te);else if("map"==n.kind){s=i[n.localName];for(const[e,n]of Object.entries(t))s[e]=Te(n)}else s="oneof"==n.kind?n.findField(t.case)?{case:t.case,value:Te(t.value)}:{case:void 0}:Te(t);i[n.localName]=s}for(const n of t.runtime.bin.listUnknownFields(e))t.runtime.bin.onUnknownField(i,n.no,n.wireType,n.data);return n}}),{newFieldList:Ae,initFields:Ne}),makeMessageType(e,t,n){return function(e,t,n,i){var s;const o=null!==(s=null==i?void 0:i.localName)&&void 0!==s?s:t.substring(t.lastIndexOf(".")+1),r={[o]:function(t){e.util.initFields(this),e.util.initPartial(t,this)}}[o];return Object.setPrototypeOf(r.prototype,new g),Object.assign(r,{runtime:e,typeName:t,fields:e.util.newFieldList(n),fromBinary:(e,t)=>(new r).fromBinary(e,t),fromJson:(e,t)=>(new r).fromJson(e,t),fromJsonString:(e,t)=>(new r).fromJsonString(e,t),equals:(t,n)=>e.util.equals(r,t,n)}),r}(this,e,t,n)},makeEnum:p,makeEnumType:h,getEnumType:l,makeExtension(e,t,n){return function(e,t,n,i){let s;return{typeName:t,extendee:n,get field(){if(!s){const n="function"==typeof i?i():i;n.name=t.split(".").pop(),n.jsonName="[".concat(t,"]"),s=e.util.newFieldList([n]).list()[0]}return s},runtime:e}}(this,e,t,n)}});var Ae,Ne;class Ue extends g{constructor(e){super(),this.seconds=R.zero,this.nanos=0,De.util.initPartial(e,this)}fromJson(e,t){if("string"!=typeof e)throw Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(De.json.debug(e)));const n=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!n)throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const i=Date.parse(n[1]+"-"+n[2]+"-"+n[3]+"T"+n[4]+":"+n[5]+":"+n[6]+(n[8]?n[8]:"Z"));if(Number.isNaN(i))throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(i<Date.parse("0001-01-01T00:00:00Z")||i>Date.parse("9999-12-31T23:59:59Z"))throw Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=R.parse(i/1e3),this.nanos=0,n[7]&&(this.nanos=parseInt("1"+n[7]+"0".repeat(9-n[7].length))-1e9),this}toJson(e){const t=1e3*Number(this.seconds);if(t<Date.parse("0001-01-01T00:00:00Z")||t>Date.parse("9999-12-31T23:59:59Z"))throw Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(0>this.nanos)throw Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let n="Z";if(this.nanos>0){const e=(""+(this.nanos+1e9)).substring(1);n="000000"===e.substring(3)?"."+e.substring(0,3)+"Z":"000"===e.substring(6)?"."+e.substring(0,6)+"Z":"."+e+"Z"}return new Date(t).toISOString().replace(".000Z",n)}toDate(){return new Date(1e3*Number(this.seconds)+Math.ceil(this.nanos/1e6))}static now(){return Ue.fromDate(new Date)}static fromDate(e){const t=e.getTime();return new Ue({seconds:R.parse(Math.floor(t/1e3)),nanos:t%1e3*1e6})}static fromBinary(e,t){return(new Ue).fromBinary(e,t)}static fromJson(e,t){return(new Ue).fromJson(e,t)}static fromJsonString(e,t){return(new Ue).fromJsonString(e,t)}static equals(e,t){return De.util.equals(Ue,e,t)}}Ue.runtime=De,Ue.typeName="google.protobuf.Timestamp",Ue.fields=De.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);const je=De.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ue},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:Fe,repeated:!0},{no:5,name:"events",kind:"message",T:Ve,repeated:!0}]),Fe=De.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:Be,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),Be=De.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ue},{no:3,name:"value",kind:"scalar",T:2}]),Ve=De.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:Ue},{no:7,name:"normalized_end_timestamp",kind:"message",T:Ue,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),qe=De.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),He=De.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),We=De.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"}]),ze=De.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),Ke=De.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),Ge=De.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Je=De.makeEnum("livekit.DisconnectReason",[{no:0,name:"UNKNOWN_REASON"},{no:1,name:"CLIENT_INITIATED"},{no:2,name:"DUPLICATE_IDENTITY"},{no:3,name:"SERVER_SHUTDOWN"},{no:4,name:"PARTICIPANT_REMOVED"},{no:5,name:"ROOM_DELETED"},{no:6,name:"STATE_MISMATCH"},{no:7,name:"JOIN_FAILURE"},{no:8,name:"MIGRATION"},{no:9,name:"SIGNAL_CLOSE"},{no:10,name:"ROOM_CLOSED"},{no:11,name:"USER_UNAVAILABLE"},{no:12,name:"USER_REJECTED"},{no:13,name:"SIP_TRUNK_FAILURE"},{no:14,name:"CONNECTION_TIMEOUT"},{no:15,name:"MEDIA_FAILURE"}]),$e=De.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"}]),Ye=De.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),Qe=De.makeEnum("livekit.AudioTrackFeature",[{no:0,name:"TF_STEREO"},{no:1,name:"TF_NO_DTX"},{no:2,name:"TF_AUTO_GAIN_CONTROL"},{no:3,name:"TF_ECHO_CANCELLATION"},{no:4,name:"TF_NOISE_SUPPRESSION"},{no:5,name:"TF_ENHANCED_NOISE_CANCELLATION"},{no:6,name:"TF_PRECONNECT_BUFFER"}]),Xe=De.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:Ze,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:Lt}]),Ze=De.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),et=De.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:De.getEnumType(We),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}]),tt=De.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:De.getEnumType(nt)},{no:4,name:"tracks",kind:"message",T:at,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:et},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:De.getEnumType(it)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:De.getEnumType(Je)},{no:18,name:"kind_details",kind:"enum",T:De.getEnumType(st),repeated:!0}]),nt=De.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),it=De.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"},{no:7,name:"CONNECTOR"}]),st=De.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"}]),ot=De.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),rt=De.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:ct,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:De.getEnumType(dt)},{no:6,name:"sdp_cid",kind:"scalar",T:9}]),at=De.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:De.getEnumType(He)},{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:De.getEnumType(We)},{no:10,name:"layers",kind:"message",T:ct,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:rt,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:De.getEnumType(ot)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:Lt},{no:19,name:"audio_features",kind:"enum",T:De.getEnumType(Qe),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:De.getEnumType(qe)}]),ct=De.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:De.getEnumType(ze)},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13},{no:4,name:"bitrate",kind:"scalar",T:13},{no:5,name:"ssrc",kind:"scalar",T:13},{no:6,name:"spatial_layer",kind:"scalar",T:5},{no:7,name:"rid",kind:"scalar",T:9}]),dt=De.makeEnum("livekit.VideoLayer.Mode",[{no:0,name:"MODE_UNUSED"},{no:1,name:"ONE_SPATIAL_LAYER_PER_STREAM"},{no:2,name:"MULTIPLE_SPATIAL_LAYERS_PER_STREAM"},{no:3,name:"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR"}]),lt=De.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:De.getEnumType(ut)},{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:ft,oneof:"value"},{no:3,name:"speaker",kind:"message",T:mt,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:vt,oneof:"value"},{no:7,name:"transcription",kind:"message",T:yt,oneof:"value"},{no:8,name:"metrics",kind:"message",T:je,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:kt,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:Ct,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:Tt,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:St,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:Ut,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:jt,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:Ft,oneof:"value"},{no:18,name:"encrypted_packet",kind:"message",T:ht,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),ut=De.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),ht=De.makeMessageType("livekit.EncryptedPacket",()=>[{no:1,name:"encryption_type",kind:"enum",T:De.getEnumType(ot)},{no:2,name:"iv",kind:"scalar",T:12},{no:3,name:"key_index",kind:"scalar",T:13},{no:4,name:"encrypted_value",kind:"scalar",T:12}]),pt=De.makeMessageType("livekit.EncryptedPacketPayload",()=>[{no:1,name:"user",kind:"message",T:ft,oneof:"value"},{no:3,name:"chat_message",kind:"message",T:kt,oneof:"value"},{no:4,name:"rpc_request",kind:"message",T:Ct,oneof:"value"},{no:5,name:"rpc_ack",kind:"message",T:Tt,oneof:"value"},{no:6,name:"rpc_response",kind:"message",T:St,oneof:"value"},{no:7,name:"stream_header",kind:"message",T:Ut,oneof:"value"},{no:8,name:"stream_chunk",kind:"message",T:jt,oneof:"value"},{no:9,name:"stream_trailer",kind:"message",T:Ft,oneof:"value"}]),mt=De.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:gt,repeated:!0}]),gt=De.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}]),ft=De.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}]),vt=De.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),yt=De.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:bt,repeated:!0}]),bt=De.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}]),kt=De.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}]),Ct=De.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}]),Tt=De.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),St=De.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:wt,oneof:"value"}]),wt=De.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}]),Et=De.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),Rt=De.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:De.getEnumType(_t)},{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}]),_t=De.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),Pt=De.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:De.getEnumType(It)},{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}]),It=De.makeEnum("livekit.ClientInfo.SDK",[{no:0,name:"UNKNOWN"},{no:1,name:"JS"},{no:2,name:"SWIFT"},{no:3,name:"ANDROID"},{no:4,name:"FLUTTER"},{no:5,name:"GO"},{no:6,name:"UNITY"},{no:7,name:"REACT_NATIVE"},{no:8,name:"RUST"},{no:9,name:"PYTHON"},{no:10,name:"CPP"},{no:11,name:"UNITY_WEB"},{no:12,name:"NODE"},{no:13,name:"UNREAL"},{no:14,name:"ESP32"}]),xt=De.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:Mt},{no:2,name:"screen",kind:"message",T:Mt},{no:3,name:"resume_connection",kind:"enum",T:De.getEnumType(Ge)},{no:4,name:"disabled_codecs",kind:"message",T:Ot},{no:5,name:"force_relay",kind:"enum",T:De.getEnumType(Ge)}]),Mt=De.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:De.getEnumType(Ge)}]),Ot=De.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:Ze,repeated:!0},{no:2,name:"publish",kind:"message",T:Ze,repeated:!0}]),Lt=De.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Dt=De.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),At=De.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:De.getEnumType(Dt)},{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"}),Nt=De.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),Ut=De.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:De.getEnumType(ot)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:At,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:Nt,oneof:"content_header"}],{localName:"DataStream_Header"}),jt=De.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"}),Ft=De.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"}),Bt=De.makeMessageType("livekit.SubscribedAudioCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"enabled",kind:"scalar",T:8}]),Vt=De.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),qt=De.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),Ht=De.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),Wt=De.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:en,oneof:"message"},{no:2,name:"answer",kind:"message",T:en,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Jt,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Gt,oneof:"message"},{no:5,name:"mute",kind:"message",T:$t,oneof:"message"},{no:6,name:"subscription",kind:"message",T:nn,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:sn,oneof:"message"},{no:8,name:"leave",kind:"message",T:an,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:dn,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:Sn,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:Rn,oneof:"message"},{no:13,name:"simulate",kind:"message",T:In,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:ln,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:xn,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:on,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:rn,oneof:"message"}]),zt=De.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:Yt,oneof:"message"},{no:2,name:"answer",kind:"message",T:en,oneof:"message"},{no:3,name:"offer",kind:"message",T:en,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Jt,oneof:"message"},{no:5,name:"update",kind:"message",T:tn,oneof:"message"},{no:6,name:"track_published",kind:"message",T:Xt,oneof:"message"},{no:8,name:"leave",kind:"message",T:an,oneof:"message"},{no:9,name:"mute",kind:"message",T:$t,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:hn,oneof:"message"},{no:11,name:"room_update",kind:"message",T:pn,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:gn,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:vn,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:kn,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:wn,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:Zt,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:Qt,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:Mn,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:Dn,oneof:"message"},{no:22,name:"request_response",kind:"message",T:An,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:Un,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:En,oneof:"message"},{no:25,name:"media_sections_requirement",kind:"message",T:qn,oneof:"message"},{no:26,name:"subscribed_audio_codec_update",kind:"message",T:Cn,oneof:"message"}]),Kt=De.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:ct,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:De.getEnumType(dt)}]),Gt=De.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:De.getEnumType(He)},{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:De.getEnumType(We)},{no:9,name:"layers",kind:"message",T:ct,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:Kt,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:De.getEnumType(ot)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:De.getEnumType(qe)},{no:17,name:"audio_features",kind:"enum",T:De.getEnumType(Qe),repeated:!0}]),Jt=De.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:De.getEnumType(Vt)},{no:3,name:"final",kind:"scalar",T:8}]),$t=De.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),Yt=De.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Xe},{no:2,name:"participant",kind:"message",T:tt},{no:3,name:"other_participants",kind:"message",T:tt,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:un,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:xt},{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:Rt},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:Ze,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),Qt=De.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:un,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:xt},{no:3,name:"server_info",kind:"message",T:Rt},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),Xt=De.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:at}]),Zt=De.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),en=De.makeMessageType("livekit.SessionDescription",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9},{no:3,name:"id",kind:"scalar",T:13},{no:4,name:"mid_to_track_id",kind:"map",K:9,V:{kind:"scalar",T:9}}]),tn=De.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:tt,repeated:!0}]),nn=De.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:Et,repeated:!0}]),sn=De.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:De.getEnumType(ze)},{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}]),on=De.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:De.getEnumType(Qe),repeated:!0}]),rn=De.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}]),an=De.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:De.getEnumType(Je)},{no:3,name:"action",kind:"enum",T:De.getEnumType(cn)},{no:4,name:"regions",kind:"message",T:On}]),cn=De.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),dn=De.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:ct,repeated:!0}]),ln=De.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}]),un=De.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}]),hn=De.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:gt,repeated:!0}]),pn=De.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Xe}]),mn=De.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:De.getEnumType(Ke)},{no:3,name:"score",kind:"scalar",T:2}]),gn=De.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:mn,repeated:!0}]),fn=De.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:De.getEnumType(qt)}]),vn=De.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:fn,repeated:!0}]),yn=De.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:De.getEnumType(ze)},{no:2,name:"enabled",kind:"scalar",T:8}]),bn=De.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:yn,repeated:!0}]),kn=De.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:yn,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:bn,repeated:!0}]),Cn=De.makeMessageType("livekit.SubscribedAudioCodecUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_audio_codecs",kind:"message",T:Bt,repeated:!0}]),Tn=De.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}]),Sn=De.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:Tn,repeated:!0}]),wn=De.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}]),En=De.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Xe},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:tt},{no:4,name:"other_participants",kind:"message",T:tt,repeated:!0}]),Rn=De.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:en},{no:2,name:"subscription",kind:"message",T:nn},{no:3,name:"publish_tracks",kind:"message",T:Xt,repeated:!0},{no:4,name:"data_channels",kind:"message",T:Pn,repeated:!0},{no:5,name:"offer",kind:"message",T:en},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:_n,repeated:!0}]),_n=De.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),Pn=De.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:De.getEnumType(Vt)}]),In=De.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:De.getEnumType(Ht),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"}]),xn=De.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),Mn=De.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),On=De.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:Ln,repeated:!0}]),Ln=De.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}]),Dn=De.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:De.getEnumType(Ye)}]),An=De.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:De.getEnumType(Nn)},{no:3,name:"message",kind:"scalar",T:9},{no:4,name:"trickle",kind:"message",T:Jt,oneof:"request"},{no:5,name:"add_track",kind:"message",T:Gt,oneof:"request"},{no:6,name:"mute",kind:"message",T:$t,oneof:"request"},{no:7,name:"update_metadata",kind:"message",T:ln,oneof:"request"},{no:8,name:"update_audio_track",kind:"message",T:on,oneof:"request"},{no:9,name:"update_video_track",kind:"message",T:rn,oneof:"request"}]),Nn=De.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"},{no:4,name:"QUEUED"},{no:5,name:"UNSUPPORTED_TYPE"},{no:6,name:"UNCLASSIFIED_ERROR"}]),Un=De.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),jn=De.makeMessageType("livekit.ConnectionSettings",()=>[{no:1,name:"auto_subscribe",kind:"scalar",T:8},{no:2,name:"adaptive_stream",kind:"scalar",T:8},{no:3,name:"subscriber_allow_pause",kind:"scalar",T:8,opt:!0},{no:4,name:"disable_ice_lite",kind:"scalar",T:8}]),Fn=De.makeMessageType("livekit.JoinRequest",()=>[{no:1,name:"client_info",kind:"message",T:Pt},{no:2,name:"connection_settings",kind:"message",T:jn},{no:3,name:"metadata",kind:"scalar",T:9},{no:4,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:5,name:"add_track_requests",kind:"message",T:Gt,repeated:!0},{no:6,name:"publisher_offer",kind:"message",T:en},{no:7,name:"reconnect",kind:"scalar",T:8},{no:8,name:"reconnect_reason",kind:"enum",T:De.getEnumType($e)},{no:9,name:"participant_sid",kind:"scalar",T:9},{no:10,name:"sync_state",kind:"message",T:Rn}]),Bn=De.makeMessageType("livekit.WrappedJoinRequest",()=>[{no:1,name:"compression",kind:"enum",T:De.getEnumType(Vn)},{no:2,name:"join_request",kind:"scalar",T:12}]),Vn=De.makeEnum("livekit.WrappedJoinRequest.Compression",[{no:0,name:"NONE"},{no:1,name:"GZIP"}]),qn=De.makeMessageType("livekit.MediaSectionsRequirement",()=>[{no:1,name:"num_audios",kind:"scalar",T:13},{no:2,name:"num_videos",kind:"scalar",T:13}]);function Hn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Wn,zn={exports:{}},Kn=zn.exports;var Gn,Jn,$n=(Wn||(Wn=1,function(e){var t,n;t=Kn,n=function(){var e=function(){},t="undefined",n=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),i=["trace","debug","info","warn","error"],s={},o=null;function r(e,t){var n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.call(n,e,arguments)}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.call(console.log,console,arguments)),console.trace&&console.trace()}function c(){for(var n=this.getLevel(),s=0;i.length>s;s++){var o=i[s];this[o]=n>s?e:this.methodFactory(o,n,this.name)}if(this.log=this.debug,typeof console===t&&this.levels.SILENT>n)return"No console available for logging"}function d(e){return function(){typeof console!==t&&(c.call(this),this[e].apply(this,arguments))}}function l(i,s,o){return function(i){return"debug"===i&&(i="log"),typeof console!==t&&("trace"===i&&n?a:void 0!==console[i]?r(console,i):void 0!==console.log?r(console,"log"):e)}(i)||d.apply(this,arguments)}function u(e,n){var r,a,d,u=this,h="loglevel";function p(){var e;if(typeof window!==t&&h){try{e=window.localStorage[h]}catch(e){}if(typeof e===t)try{var n=window.document.cookie,i=encodeURIComponent(h),s=n.indexOf(i+"=");-1!==s&&(e=/^([^;]+)/.exec(n.slice(s+i.length+1))[1])}catch(e){}return void 0===u.levels[e]&&(e=void 0),e}}function m(e){var t=e;if("string"==typeof t&&void 0!==u.levels[t.toUpperCase()]&&(t=u.levels[t.toUpperCase()]),"number"!=typeof t||0>t||t>u.levels.SILENT)throw new TypeError("log.setLevel() called with invalid level: "+e);return t}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||l,u.getLevel=function(){return null!=d?d:null!=a?a:r},u.setLevel=function(e,n){return d=m(e),!1!==n&&function(e){var n=(i[e]||"silent").toUpperCase();if(typeof window!==t&&h){try{return void(window.localStorage[h]=n)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"="+n+";"}catch(e){}}}(d),c.call(u)},u.setDefaultLevel=function(e){a=m(e),p()||u.setLevel(e,!1)},u.resetLevel=function(){d=null,function(){if(typeof window!==t&&h){try{window.localStorage.removeItem(h)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(o!==u&&(r=m(o.getLevel())),c.call(u),o===u)for(var e in s)s[e].rebuild()},r=m(o?o.getLevel():"WARN");var g=p();null!=g&&(d=m(g)),c.call(u)}(o=new u).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=s[e];return t||(t=s[e]=new u(e,o.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=h),o},o.getLoggers=function(){return s},o.default=o,o},e.exports?e.exports=n():t.log=n()}(zn)),zn.exports);!function(e){e[e.trace=0]="trace",e[e.debug=1]="debug",e[e.info=2]="info",e[e.warn=3]="warn",e[e.error=4]="error",e[e.silent=5]="silent"}(Gn||(Gn={})),function(e){e.Default="livekit",e.Room="livekit-room",e.TokenSource="livekit-token-source",e.Participant="livekit-participant",e.Track="livekit-track",e.Publication="livekit-track-publication",e.Engine="livekit-engine",e.Signal="livekit-signal",e.PCManager="livekit-pc-manager",e.PCTransport="livekit-pc-transport",e.E2EE="lk-e2ee"}(Jn||(Jn={}));let Yn=$n.getLogger("livekit");function Qn(e){const t=$n.getLogger(e);return t.setDefaultLevel(Yn.getLevel()),t}Object.values(Jn).map(e=>$n.getLogger(e)),Yn.setDefaultLevel(Gn.info);const Xn=$n.getLogger("lk-e2ee"),Zn=7e3,ei=[0,300,1200,2700,4800,Zn,Zn,Zn,Zn,Zn];function ti(e,t,n,i){return new(n||(n=Promise))(function(s,o){function r(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(r,a)}c((i=i.apply(e,t||[])).next())})}function ni(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function ii(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=ni(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise(function(i,s){(function(e,t,n,i){Promise.resolve(i).then(function(t){e({value:t,done:n})},t)})(i,s,(t=e[n](t)).done,t.value)})}}}"function"==typeof SuppressedError&&SuppressedError;var si,oi={exports:{}};var ri=function(){if(si)return oi.exports;si=1;var e,t="object"==typeof Reflect?Reflect:null,n=t&&"function"==typeof t.apply?t.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}oi.exports=s,oi.exports.once=function(e,t){return new Promise(function(n,i){function s(n){e.removeListener(t,o),i(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",s),n([].slice.call(arguments))}m(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,s,{once:!0})})},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function r(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function a(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function c(e,t,n,i){var s,o,c,d;if(r(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),c=o[t]),void 0===c)c=o[t]=n,++e._eventsCount;else if("function"==typeof c?c=o[t]=i?[n,c]:[c,n]:i?c.unshift(n):c.push(n),(s=a(e))>0&&c.length>s&&!c.warned){c.warned=!0;var l=Error("Possible EventEmitter memory leak detected. "+c.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=c.length,d=l,console&&console.warn&&console.warn(d)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},s=d.bind(i);return s.listener=n,i.wrapFn=s,s}function u(e,t,n){var i=e._events;if(void 0===i)return[];var s=i[t];return void 0===s?[]:"function"==typeof s?n?[s.listener||s]:[s]:n?function(e){for(var t=Array(e.length),n=0;t.length>n;++n)t[n]=e[n].listener||e[n];return t}(s):p(s,s.length)}function h(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function p(e,t){for(var n=Array(t),i=0;t>i;++i)n[i]=e[i];return n}function m(e,t,n,i){if("function"==typeof e.on)i.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function s(o){i.once&&e.removeEventListener(t,s),n(o)})}}return Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||0>e||i(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if("number"!=typeof e||0>e||i(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return a(this)},s.prototype.emit=function(e){for(var t=[],i=1;arguments.length>i;i++)t.push(arguments[i]);var s="error"===e,o=this._events;if(void 0!==o)s=s&&void 0===o.error;else if(!s)return!1;if(s){var r;if(t.length>0&&(r=t[0]),r instanceof Error)throw r;var a=Error("Unhandled error."+(r?" ("+r.message+")":""));throw a.context=r,a}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)n(c,this,t);else{var d=c.length,l=p(c,d);for(i=0;d>i;++i)n(l[i],this,t)}return!0},s.prototype.on=s.prototype.addListener=function(e,t){return c(this,e,t,!1)},s.prototype.prependListener=function(e,t){return c(this,e,t,!0)},s.prototype.once=function(e,t){return r(t),this.on(e,l(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return r(t),this.prependListener(e,l(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,i,s,o,a;if(r(t),void 0===(i=this._events))return this;if(void 0===(n=i[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(s=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,s=o;break}if(0>s)return this;0===s?n.shift():function(e,t){for(;e.length>t+1;t++)e[t]=e[t+1];e.pop()}(n,s),1===n.length&&(i[e]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",e,a||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var s,o=Object.keys(n);for(i=0;o.length>i;++i)"removeListener"!==(s=o[i])&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},s.prototype.listeners=function(e){return u(this,e,!0)},s.prototype.rawListeners=function(e){return u(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},s.prototype.listenerCount=h,s.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},oi.exports}();let ai=!0,ci=!0;function di(e,t,n){const i=e.match(t);return i&&i.length>=n&&parseFloat(i[n],10)}function li(e,t,n){if(!e.RTCPeerConnection)return;const i=e.RTCPeerConnection.prototype,s=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return s.apply(this,arguments);const o=e=>{const t=n(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,o),s.call(this,e,o)};const o=i.removeEventListener;i.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const i=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.call(this,e,i)},Object.defineProperty(i,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function ui(e){return"boolean"!=typeof e?Error("Argument type: "+typeof e+". Please use a boolean."):(ai=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function hi(e){return"boolean"!=typeof e?Error("Argument type: "+typeof e+". Please use a boolean."):(ci=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function pi(){if("object"==typeof window){if(ai)return;void 0!==console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function mi(e,t){ci&&console.warn(e+" is deprecated, please use "+t+" instead.")}function gi(e){return"[object Object]"===Object.prototype.toString.call(e)}function fi(e){return gi(e)?Object.keys(e).reduce(function(t,n){const i=gi(e[n]),s=i?fi(e[n]):e[n];return void 0===s||i&&!Object.keys(s).length?t:Object.assign(t,{[n]:s})},{}):e}function vi(e,t,n){t&&!n.has(t.id)&&(n.set(t.id,t),Object.keys(t).forEach(i=>{i.endsWith("Id")?vi(e,e.get(t[i]),n):i.endsWith("Ids")&&t[i].forEach(t=>{vi(e,e.get(t),n)})}))}function yi(e,t,n){const i=n?"outbound-rtp":"inbound-rtp",s=new Map;if(null===t)return s;const o=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)}),o.forEach(t=>{e.forEach(n=>{n.type===i&&n.trackId===t.id&&vi(e,n,s)})}),s}const bi=pi;function ki(e,t){const n=e&&e.navigator;if(!n.mediaDevices)return;const i=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach(n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const i="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);const s=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[s("min",n)]=i.ideal,t.optional.push(e),e={},e[s("max",n)]=i.ideal,t.optional.push(e)):(e[s("",n)]=i.ideal,t.optional.push(e))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[s("",n)]=i.exact):["min","max"].forEach(e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[s(e,n)]=i[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},s=function(e,s){if(t.version>=61)return s(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=i(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const r=66>t.version;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!n.mediaDevices.getSupportedConstraints||!n.mediaDevices.getSupportedConstraints().facingMode||r)){let t;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?t=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(t=["front"]),t)return n.mediaDevices.enumerateDevices().then(n=>{let r=(n=n.filter(e=>"videoinput"===e.kind)).find(e=>t.some(t=>e.label.toLowerCase().includes(t)));return!r&&n.length&&t.includes("back")&&(r=n[n.length-1]),r&&(e.video.deviceId=o.exact?{exact:r.deviceId}:{ideal:r.deviceId}),e.video=i(e.video),bi("chrome: "+JSON.stringify(e)),s(e)})}e.video=i(e.video)}return bi("chrome: "+JSON.stringify(e)),s(e)},o=function(e){return 64>t.version?{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}:e};if(n.getUserMedia=function(e,t,i){s(e,e=>{n.webkitGetUserMedia(e,t,e=>{i&&i(o(e))})})}.bind(n),n.mediaDevices.getUserMedia){const e=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(t){return s(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return e},e=>Promise.reject(o(e))))}}}function Ci(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function Ti(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};const s=new Event("track");s.track=n.track,s.receiver=i,s.transceiver={receiver:i},s.streams=[t.stream],this.dispatchEvent(s)}),t.stream.getTracks().forEach(n=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};const s=new Event("track");s.track=n,s.receiver=i,s.transceiver={receiver:i},s.streams=[t.stream],this.dispatchEvent(s)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else li(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function Si(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&(this._dtmf="audio"===t.kind?e.createDTMFSender(t):null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,i){let s=n.apply(this,arguments);return s||(s=t(this,e),this._senders.push(s)),s};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.call(this,e),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.call(this,e),e.getTracks().forEach(e=>{const t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.call(this);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&(this._dtmf="audio"===this.track.kind?this._pc.createDTMFSender(this.track):null),this._dtmf}})}}function wi(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.call(this);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>yi(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.call(this);return e.forEach(e=>e._pc=this),e}),li(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>yi(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,i;return this.getSenders().forEach(n=>{n.track===e&&(t?i=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?i=!0:n=t),t.track===e)),i||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function Ei(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(i)&&this._shimmedLocalStreams[n.id].push(i):this._shimmedLocalStreams[n.id]=[n,i],i};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const t=this.getSenders();n.apply(this,arguments);const i=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(i)};const i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};const s=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),s.apply(this,arguments)}}function Ri(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return Ei(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};const i=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}i.call(this,t)};const s=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const i=e._reverseStreams[t];n=n.replace(RegExp(e._streams[i.id].id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},s.call(this,this._streams[e.id]||e),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const i=[].slice.call(arguments,1);if(1!==i.length||!i[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(e=>e.track===t))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const s=this._streams[n.id];if(s)s.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const i=new e.MediaStream([t]);this._streams[n.id]=i,this._reverseStreams[i.id]=n,this.addStream(i)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.call(this,t=>{const n=o(this,t);e[0].call(null,n)},t=>{e[1]&&e[1].apply(null,t)},arguments[2]):n.apply(this,arguments).then(e=>o(this,e))}};e.RTCPeerConnection.prototype[t]=i[t]});const r=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const i=e._reverseStreams[t],s=e._streams[i.id];n=n.replace(RegExp(i.id,"g"),s.id)}),new RTCSessionDescription({type:t.type,sdp:n})}(this,arguments[0]),r.apply(this,arguments)):r.apply(this,arguments)};const a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=a.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function _i(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&53>t.version&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]})}function Pi(e,t){li(e,"negotiationneeded",e=>{const n=e.target;if(!(72>t.version||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e})}var Ii=Object.freeze({__proto__:null,fixNegotiationNeeded:Pi,shimAddTrackRemoveTrack:Ri,shimAddTrackRemoveTrackWithNative:Ei,shimGetSendersWithDtmf:Si,shimGetUserMedia:ki,shimMediaStream:Ci,shimOnTrack:Ti,shimPeerConnection:_i,shimSenderReceiverGetStats:wi});function xi(e,t){const n=e&&e.navigator,i=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,i){mi("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,i)},55>=t.version||!("autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},i&&i.prototype.getSettings){const t=i.prototype.getSettings;i.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(i&&i.prototype.applyConstraints){const t=i.prototype.applyConstraints;i.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.call(this,n)}}}}function Mi(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Oi(e,t){if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),53>t.version&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){const n=e.RTCPeerConnection.prototype[t],i={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=i[t]});const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,s,o]=arguments;return i.call(this,e||null).then(e=>{if(53>t.version&&!s)try{e.forEach(e=>{e.type=n[e.type]||e.type})}catch(t){if("TypeError"!==t.name)throw t;e.forEach((t,i)=>{e.set(i,Object.assign({},t,{type:n[t.type]||t.type}))})}return e}).then(s,o)}}function Li(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.call(this);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Di(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.call(this);return e.forEach(e=>e._pc=this),e}),li(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Ai(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){mi("removeStream","removeTrack"),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function Ni(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function Ui(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1]&&arguments[1].sendEncodings;void 0===e&&(e=[]),e=[...e];const n=e.length>0;n&&e.forEach(e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&parseFloat(e.scaleResolutionDownBy)<1)throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&parseFloat(e.maxFramerate)<0)throw new RangeError("max_framerate must be >= 0.0")});const i=t.apply(this,arguments);if(n){const{sender:t}=i,n=t.getParameters();(!("encodings"in n)||1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e,t.sendEncodings=e,this.setParametersPromises.push(t.setParameters(n).then(()=>{delete t.sendEncodings}).catch(()=>{delete t.sendEncodings})))}return i})}function ji(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function Fi(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function Bi(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}var Vi=Object.freeze({__proto__:null,shimAddTransceiver:Ui,shimCreateAnswer:Bi,shimCreateOffer:Fi,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})},shimGetParameters:ji,shimGetUserMedia:xi,shimOnTrack:Mi,shimPeerConnection:Oi,shimRTCDataChannel:Ni,shimReceiverGetStats:Di,shimRemoveStream:Ai,shimSenderGetStats:Li});function qi(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach(n=>t.call(this,n,e)),e.getVideoTracks().forEach(n=>t.call(this,n,e))},e.RTCPeerConnection.prototype.addTrack=function(e){for(var n=arguments.length,i=Array(n>1?n-1:0),s=1;n>s;s++)i[s-1]=arguments[s];return i&&i.forEach(e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach(e=>{n.includes(e.track)&&this.removeTrack(e)})})}}function Hi(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)})})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)})}),t.apply(e,arguments)}}}function Wi(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,i=t.createAnswer,s=t.setLocalDescription,o=t.setRemoteDescription,r=t.addIceCandidate;t.createOffer=function(e,t){const i=n.call(this,2>arguments.length?arguments[0]:arguments[2]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const n=i.call(this,2>arguments.length?arguments[0]:arguments[2]);return t?(n.then(e,t),Promise.resolve()):n};let a=function(e,t,n){const i=s.call(this,e);return n?(i.then(t,n),Promise.resolve()):i};t.setLocalDescription=a,a=function(e,t,n){const i=o.call(this,e);return n?(i.then(t,n),Promise.resolve()):i},t.setRemoteDescription=a,a=function(e,t,n){const i=r.call(this,e);return n?(i.then(t,n),Promise.resolve()):i},t.addIceCandidate=a}function zi(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(Ki(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,i){t.mediaDevices.getUserMedia(e).then(n,i)}.bind(t))}function Ki(e){return e&&void 0!==e.video?Object.assign({},e,{video:fi(e.video)}):e}function Gi(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;e.iceServers.length>n;n++){let i=e.iceServers[n];void 0===i.urls&&i.url?(mi("RTCIceServer.url","RTCIceServer.urls"),i=JSON.parse(JSON.stringify(i)),i.urls=i.url,delete i.url,t.push(i)):t.push(e.iceServers[n])}e.iceServers=t}return new t(e,n)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get:()=>t.generateCertificate})}function Ji(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function $i(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find(e=>"audio"===e.receiver.track.kind);!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find(e=>"video"===e.receiver.track.kind);!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function Yi(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var Qi,Xi=Object.freeze({__proto__:null,shimAudioContext:Yi,shimCallbacksAPI:Wi,shimConstraints:Ki,shimCreateOfferLegacy:$i,shimGetUserMedia:zi,shimLocalStreamsAPI:qi,shimRTCIceServerUrls:Gi,shimRemoteStreamsAPI:Hi,shimTrackEventTransceiver:Ji}),Zi={exports:{}};var es=(Qi||(Qi=1,function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map(e=>e.trim())},t.splitSections=function(e){return e.split("\nm=").map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},t.getDescription=function(e){const n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){const n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter(e=>0===e.indexOf(n))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const n={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;t.length>e;e+=2)switch(t[e]){case"raddr":n.relatedAddress=t[e+1];break;case"rport":n.relatedPort=parseInt(t[e+1],10);break;case"tcptype":n.tcpType=t[e+1];break;case"ufrag":n.ufrag=t[e+1],n.usernameFragment=t[e+1];break;default:void 0===n[t[e]]&&(n[t[e]]=t[e+1])}return n},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const n=e.component;t.push("rtp"===n?1:"rtcp"===n?2:n),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const i=e.type;return t.push("typ"),t.push(i),"host"!==i&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substring(14).split(" ")},t.parseRtpMap=function(e){let t=e.substring(9).split(" ");const n={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),n.name=t[0],n.clockRate=parseInt(t[1],10),n.channels=3===t.length?parseInt(t[2],10):1,n.numChannels=n.channels,n},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const n=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==n?"/"+n:"")+"\r\n"},t.parseExtmap=function(e){const t=e.substring(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let n;const i=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;i.length>e;e++)n=i[e].trim().split("="),t[n[0].trim()]=n[1];return t},t.writeFmtp=function(e){let t="",n=e.payloadType;if(void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const i=[];Object.keys(e.parameters).forEach(t=>{i.push(void 0!==e.parameters[t]?t+"="+e.parameters[t]:t)}),t+="a=fmtp:"+n+" "+i.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach(e=>{t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"}),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),n={ssrc:parseInt(e.substring(7,t),10)},i=e.indexOf(":",t);return i>-1?(n.attribute=e.substring(t+1,i),n.value=e.substring(i+1)):n.attribute=e.substring(t+1),n},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map(e=>parseInt(e,10))}},t.getMid=function(e){const n=t.matchPrefix(e,"a=mid:")[0];if(n)return n.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let n="a=setup:"+t+"\r\n";return e.fingerprints.forEach(e=>{n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),n},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,n){return t.matchPrefix(e+n,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,n){const i=t.matchPrefix(e+n,"a=ice-ufrag:")[0],s=t.matchPrefix(e+n,"a=ice-pwd:")[0];return i&&s?{usernameFragment:i.substring(12),password:s.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");n.profile=i[2];for(let s=3;i.length>s;s++){const o=i[s],r=t.matchPrefix(e,"a=rtpmap:"+o+" ")[0];if(r){const i=t.parseRtpMap(r),s=t.matchPrefix(e,"a=fmtp:"+o+" ");switch(i.parameters=s.length?t.parseFmtp(s[0]):{},i.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+o+" ").map(t.parseRtcpFb),n.codecs.push(i),i.name.toUpperCase()){case"RED":case"ULPFEC":n.fecMechanisms.push(i.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach(e=>{n.headerExtensions.push(t.parseExtmap(e))});const s=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return n.codecs.forEach(e=>{s.forEach(t=>{e.rtcpFeedback.find(e=>e.type===t.type&&e.parameter===t.parameter)||e.rtcpFeedback.push(t)})}),n},t.writeRtpDescription=function(e,n){let i="";i+="m="+e+" ",i+=n.codecs.length>0?"9":"0",i+=" "+(n.profile||"UDP/TLS/RTP/SAVPF")+" ",i+=n.codecs.map(e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType).join(" ")+"\r\n",i+="c=IN IP4 0.0.0.0\r\n",i+="a=rtcp:9 IN IP4 0.0.0.0\r\n",n.codecs.forEach(e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)});let s=0;return n.codecs.forEach(e=>{e.maxptime>s&&(s=e.maxptime)}),s>0&&(i+="a=maxptime:"+s+"\r\n"),n.headerExtensions&&n.headerExtensions.forEach(e=>{i+=t.writeExtmap(e)}),i},t.parseRtpEncodingParameters=function(e){const n=[],i=t.parseRtpParameters(e),s=-1!==i.fecMechanisms.indexOf("RED"),o=-1!==i.fecMechanisms.indexOf("ULPFEC"),r=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute),a=r.length>0&&r[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map(e=>e.substring(17).split(" ").map(e=>parseInt(e,10)));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),i.codecs.forEach(e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),n.push(t),s&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:o?"red+ulpfec":"red"},n.push(t))}}),0===n.length&&a&&n.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substring(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substring(5),10)*.95-16e3:void 0,n.forEach(e=>{e.maxBitrate=l})),n},t.parseRtcpParameters=function(e){const n={},i=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute)[0];i&&(n.cname=i.value,n.ssrc=i.ssrc);const s=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=s.length>0,n.compound=0===s.length;const o=t.matchPrefix(e,"a=rtcp-mux");return n.mux=o.length>0,n},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let n;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return n=i[0].substring(7).split(" "),{stream:n[0],track:n[1]};const s=t.matchPrefix(e,"a=ssrc:").map(e=>t.parseSsrcMedia(e)).filter(e=>"msid"===e.attribute);return s.length>0?(n=s[0].value.split(" "),{stream:n[0],track:n[1]}):void 0},t.parseSctpDescription=function(e){const n=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let s;i.length>0&&(s=parseInt(i[0].substring(19),10)),isNaN(s)&&(s=65536);const o=t.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substring(12),10),protocol:n.fmt,maxMessageSize:s};const r=t.matchPrefix(e,"a=sctpmap:");if(r.length>0){const e=r[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:s}}},t.writeSctpDescription=function(e,t){let n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),n.join("")},t.generateSessionId=function(){return(""+Math.random()).substr(2,22)},t.writeSessionBoilerplate=function(e,n,i){let s;const o=void 0!==n?n:2;return s=e||t.generateSessionId(),"v=0\r\no="+(i||"thisisadapterortc")+" "+s+" "+o+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,n){const i=t.splitLines(e);for(let e=0;i.length>e;e++)switch(i[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return i[e].substring(2)}return n?t.getDirection(n):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substring(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const n=t.splitLines(e)[0].substring(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}},t.parseOLine=function(e){const n=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const n=t.splitLines(e);for(let e=0;n.length>e;e++)if(2>n[e].length||"="!==n[e].charAt(1))return!1;return!0},e.exports=t}(Zi)),Zi.exports),ts=Hn(es),ns=t({__proto__:null,default:ts},[es]);function is(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substring(2)),e.candidate&&e.candidate.length){const n=new t(e),i=ts.parseCandidate(e.candidate);for(const e in i)e in n||Object.defineProperty(n,e,{value:i[e]});return n.toJSON=function(){return{candidate:n.candidate,sdpMid:n.sdpMid,sdpMLineIndex:n.sdpMLineIndex,usernameFragment:n.usernameFragment}},n}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,li(e,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t))}function ss(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||li(e,"icecandidate",e=>{if(e.candidate){const t=ts.parseCandidate(e.candidate.candidate);"relay"===t.type&&(e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[t.priority>>24])}return e})}function os(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(function(e){if(!e||!e.sdp)return!1;const t=ts.splitSections(e.sdp);return t.shift(),t.some(e=>{const t=ts.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")})}(arguments[0])){const e=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||2>t.length)return-1;const n=parseInt(t[1],10);return n!=n?-1:n}(arguments[0]),n=function(e){let n=65536;return"firefox"===t.browser&&(n=57>t.version?-1===e?16384:2147483637:60>t.version?57===t.version?65535:65536:2147483637),n}(e),i=function(e,n){let i=65536;"firefox"===t.browser&&57===t.version&&(i=65535);const s=ts.matchPrefix(e.sdp,"a=max-message-size:");return s.length>0?i=parseInt(s[0].substring(19),10):"firefox"===t.browser&&-1!==n&&(i=2147483637),i}(arguments[0],e);let s;s=0===n&&0===i?1/0:0===n||0===i?Math.max(n,i):Math.min(n,i);const o={};Object.defineProperty(o,"maxMessageSize",{get:()=>s}),this._sctp=o}return n.apply(this,arguments)}}function rs(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const i=arguments[0];if("open"===e.readyState&&t.sctp&&(i.length||i.size||i.byteLength)>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},li(e,"datachannel",e=>(t(e.channel,e.target),e))}function as(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}})}function cs(e,t){if(!e.RTCPeerConnection)return;if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t._safariVersion>=13.1)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){const n=t.sdp.split("\n").filter(e=>"a=extmap-allow-mixed"!==e.trim()).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:n}):t.sdp=n}return n.apply(this,arguments)}}function ds(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.addIceCandidate;n&&0!==n.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&78>t.version||"firefox"===t.browser&&68>t.version||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function ls(e,t){if(!e.RTCPeerConnection||!e.RTCPeerConnection.prototype)return;const n=e.RTCPeerConnection.prototype.setLocalDescription;n&&0!==n.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return n.apply(this,arguments);if(e={type:e.type,sdp:e.sdp},!e.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}if(e.sdp||"offer"!==e.type&&"answer"!==e.type)return n.call(this,e);return("offer"===e.type?this.createOffer:this.createAnswer).apply(this).then(e=>n.call(this,e))})}var us=Object.freeze({__proto__:null,removeExtmapAllowMixed:cs,shimAddIceCandidateNullOrEmpty:ds,shimConnectionState:as,shimMaxMessageSize:os,shimParameterlessSetLocalDescription:ls,shimRTCIceCandidate:is,shimRTCIceCandidateRelayProtocol:ss,shimSendThrowTypeError:rs});!function(){let{window:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const n=pi,i=function(e){const t={browser:null,version:null};if(void 0===e||!e.navigator||!e.navigator.userAgent)return t.browser="Not a browser.",t;const{navigator:n}=e;if(n.userAgentData&&n.userAgentData.brands){const e=n.userAgentData.brands.find(e=>"Chromium"===e.brand);if(e)return{browser:"chrome",version:parseInt(e.version,10)}}if(n.mozGetUserMedia)t.browser="firefox",t.version=parseInt(di(n.userAgent,/Firefox\/(\d+)\./,1));else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection)t.browser="chrome",t.version=parseInt(di(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=parseInt(di(n.userAgent,/AppleWebKit\/(\d+)\./,1)),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype,t._safariVersion=di(n.userAgent,/Version\/(\d+(\.?\d+))/,1)}return t}(e),s={browserDetails:i,commonShim:us,extractVersion:di,disableLog:ui,disableWarnings:hi,sdp:ns};switch(i.browser){case"chrome":if(!Ii||!_i||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),s;if(null===i.version)return n("Chrome shim can not determine version, not shimming."),s;n("adapter.js shimming chrome."),s.browserShim=Ii,ds(e,i),ls(e),ki(e,i),Ci(e),_i(e,i),Ti(e),Ri(e,i),Si(e),wi(e),Pi(e,i),is(e),ss(e),as(e),os(e,i),rs(e),cs(e,i);break;case"firefox":if(!Vi||!Oi||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),s;n("adapter.js shimming firefox."),s.browserShim=Vi,ds(e,i),ls(e),xi(e,i),Oi(e,i),Mi(e),Ai(e),Li(e),Di(e),Ni(e),Ui(e),ji(e),Fi(e),Bi(e),is(e),as(e),os(e,i),rs(e);break;case"safari":if(!Xi||!t.shimSafari)return n("Safari shim is not included in this adapter release."),s;n("adapter.js shimming safari."),s.browserShim=Xi,ds(e,i),ls(e),Gi(e),$i(e),Wi(e),qi(e),Hi(e),Ji(e),zi(e),Yi(e),is(e),ss(e),os(e,i),rs(e),cs(e,i);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});const hs="lk_e2ee";var ps,ms,gs,fs,vs,ys,bs,ks,Cs,Ts,Ss,ws;function Es(){return void 0!==window.RTCRtpSender&&void 0!==window.RTCRtpSender.prototype.createEncodedStreams||Rs()}function Rs(){return void 0!==window.RTCRtpScriptTransform}!function(e){e.SetKey="setKey",e.RatchetRequest="ratchetRequest",e.KeyRatcheted="keyRatcheted"}(ps||(ps={})),function(e){e.KeyRatcheted="keyRatcheted"}(ms||(ms={})),function(e){e.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",e.EncryptionError="encryptionError"}(gs||(gs={})),function(e){e.Error="cryptorError"}(fs||(fs={}));class _s extends Error{constructor(e,t){super(t||"an error has occured"),this.name="LiveKitError",this.code=e}}!function(e){e[e.NotAllowed=0]="NotAllowed",e[e.ServerUnreachable=1]="ServerUnreachable",e[e.InternalError=2]="InternalError",e[e.Cancelled=3]="Cancelled",e[e.LeaveRequest=4]="LeaveRequest",e[e.Timeout=5]="Timeout"}(vs||(vs={}));class Ps extends _s{constructor(e,t,n,i){super(1,e),this.name="ConnectionError",this.status=n,this.reason=t,this.context=i,this.reasonName=vs[t]}}class Is extends _s{constructor(e){super(21,null!=e?e:"device is unsupported"),this.name="DeviceUnsupportedError"}}class xs extends _s{constructor(e){super(20,null!=e?e:"track is invalid"),this.name="TrackInvalidError"}}class Ms extends _s{constructor(e){super(10,null!=e?e:"unsupported server"),this.name="UnsupportedServer"}}class Os extends _s{constructor(e){super(12,null!=e?e:"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Ls extends _s{constructor(e){super(13,null!=e?e:"unable to negotiate"),this.name="NegotiationError"}}class Ds extends _s{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class As extends _s{constructor(e,t){super(15,e),this.reason=t,this.reasonName="string"==typeof t?t:Nn[t]}}!function(e){e[e.AlreadyOpened=0]="AlreadyOpened",e[e.AbnormalEnd=1]="AbnormalEnd",e[e.DecodeFailed=2]="DecodeFailed",e[e.LengthExceeded=3]="LengthExceeded",e[e.Incomplete=4]="Incomplete",e[e.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered",e[e.EncryptionTypeMismatch=8]="EncryptionTypeMismatch"}(ys||(ys={}));class Ns extends _s{constructor(e,t){super(16,e),this.name="DataStreamError",this.reason=t,this.reasonName=ys[t]}}!function(e){e.PermissionDenied="PermissionDenied",e.NotFound="NotFound",e.DeviceInUse="DeviceInUse",e.Other="Other"}(bs||(bs={})),function(e){e.getFailure=function(t){if(t&&"name"in t)return"NotFoundError"===t.name||"DevicesNotFoundError"===t.name?e.NotFound:"NotAllowedError"===t.name||"PermissionDeniedError"===t.name?e.PermissionDenied:"NotReadableError"===t.name||"TrackStartError"===t.name?e.DeviceInUse:e.Other}}(bs||(bs={})),function(e){e[e.InvalidKey=0]="InvalidKey",e[e.MissingKey=1]="MissingKey",e[e.InternalError=2]="InternalError"}(ks||(ks={})),function(e){e.Connected="connected",e.Reconnecting="reconnecting",e.SignalReconnecting="signalReconnecting",e.Reconnected="reconnected",e.Disconnected="disconnected",e.ConnectionStateChanged="connectionStateChanged",e.Moved="moved",e.MediaDevicesChanged="mediaDevicesChanged",e.ParticipantConnected="participantConnected",e.ParticipantDisconnected="participantDisconnected",e.TrackPublished="trackPublished",e.TrackSubscribed="trackSubscribed",e.TrackSubscriptionFailed="trackSubscriptionFailed",e.TrackUnpublished="trackUnpublished",e.TrackUnsubscribed="trackUnsubscribed",e.TrackMuted="trackMuted",e.TrackUnmuted="trackUnmuted",e.LocalTrackPublished="localTrackPublished",e.LocalTrackUnpublished="localTrackUnpublished",e.LocalAudioSilenceDetected="localAudioSilenceDetected",e.ActiveSpeakersChanged="activeSpeakersChanged",e.ParticipantMetadataChanged="participantMetadataChanged",e.ParticipantNameChanged="participantNameChanged",e.ParticipantAttributesChanged="participantAttributesChanged",e.ParticipantActive="participantActive",e.RoomMetadataChanged="roomMetadataChanged",e.DataReceived="dataReceived",e.SipDTMFReceived="sipDTMFReceived",e.TranscriptionReceived="transcriptionReceived",e.ConnectionQualityChanged="connectionQualityChanged",e.TrackStreamStateChanged="trackStreamStateChanged",e.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",e.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",e.AudioPlaybackStatusChanged="audioPlaybackChanged",e.VideoPlaybackStatusChanged="videoPlaybackChanged",e.MediaDevicesError="mediaDevicesError",e.ParticipantPermissionsChanged="participantPermissionsChanged",e.SignalConnected="signalConnected",e.RecordingStatusChanged="recordingStatusChanged",e.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",e.EncryptionError="encryptionError",e.DCBufferStatusChanged="dcBufferStatusChanged",e.ActiveDeviceChanged="activeDeviceChanged",e.ChatMessage="chatMessage",e.LocalTrackSubscribed="localTrackSubscribed",e.MetricsReceived="metricsReceived"}(Cs||(Cs={})),function(e){e.TrackPublished="trackPublished",e.TrackSubscribed="trackSubscribed",e.TrackSubscriptionFailed="trackSubscriptionFailed",e.TrackUnpublished="trackUnpublished",e.TrackUnsubscribed="trackUnsubscribed",e.TrackMuted="trackMuted",e.TrackUnmuted="trackUnmuted",e.LocalTrackPublished="localTrackPublished",e.LocalTrackUnpublished="localTrackUnpublished",e.LocalTrackCpuConstrained="localTrackCpuConstrained",e.LocalSenderCreated="localSenderCreated",e.ParticipantMetadataChanged="participantMetadataChanged",e.ParticipantNameChanged="participantNameChanged",e.DataReceived="dataReceived",e.SipDTMFReceived="sipDTMFReceived",e.TranscriptionReceived="transcriptionReceived",e.IsSpeakingChanged="isSpeakingChanged",e.ConnectionQualityChanged="connectionQualityChanged",e.TrackStreamStateChanged="trackStreamStateChanged",e.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",e.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",e.TrackCpuConstrained="trackCpuConstrained",e.MediaDevicesError="mediaDevicesError",e.AudioStreamAcquired="audioStreamAcquired",e.ParticipantPermissionsChanged="participantPermissionsChanged",e.PCTrackAdded="pcTrackAdded",e.AttributesChanged="attributesChanged",e.LocalTrackSubscribed="localTrackSubscribed",e.ChatMessage="chatMessage",e.Active="active"}(Ts||(Ts={})),function(e){e.TransportsCreated="transportsCreated",e.Connected="connected",e.Disconnected="disconnected",e.Resuming="resuming",e.Resumed="resumed",e.Restarting="restarting",e.Restarted="restarted",e.SignalResumed="signalResumed",e.SignalRestarted="signalRestarted",e.Closing="closing",e.MediaTrackAdded="mediaTrackAdded",e.ActiveSpeakersUpdate="activeSpeakersUpdate",e.DataPacketReceived="dataPacketReceived",e.RTPVideoMapUpdate="rtpVideoMapUpdate",e.DCBufferStatusChanged="dcBufferStatusChanged",e.ParticipantUpdate="participantUpdate",e.RoomUpdate="roomUpdate",e.SpeakersChanged="speakersChanged",e.StreamStateChanged="streamStateChanged",e.ConnectionQualityUpdate="connectionQualityUpdate",e.SubscriptionError="subscriptionError",e.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",e.RemoteMute="remoteMute",e.SubscribedQualityUpdate="subscribedQualityUpdate",e.LocalTrackUnpublished="localTrackUnpublished",e.LocalTrackSubscribed="localTrackSubscribed",e.Offline="offline",e.SignalRequestResponse="signalRequestResponse",e.SignalConnected="signalConnected",e.RoomMoved="roomMoved"}(Ss||(Ss={})),function(e){e.Message="message",e.Muted="muted",e.Unmuted="unmuted",e.Restarted="restarted",e.Ended="ended",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed",e.CpuConstrained="cpuConstrained",e.UpdateSettings="updateSettings",e.UpdateSubscription="updateSubscription",e.AudioPlaybackStarted="audioPlaybackStarted",e.AudioPlaybackFailed="audioPlaybackFailed",e.AudioSilenceDetected="audioSilenceDetected",e.VisibilityChanged="visibilityChanged",e.VideoDimensionsChanged="videoDimensionsChanged",e.VideoPlaybackStarted="videoPlaybackStarted",e.VideoPlaybackFailed="videoPlaybackFailed",e.ElementAttached="elementAttached",e.ElementDetached="elementDetached",e.UpstreamPaused="upstreamPaused",e.UpstreamResumed="upstreamResumed",e.SubscriptionPermissionChanged="subscriptionPermissionChanged",e.SubscriptionStatusChanged="subscriptionStatusChanged",e.SubscriptionFailed="subscriptionFailed",e.TrackProcessorUpdate="trackProcessorUpdate",e.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",e.TranscriptionReceived="transcriptionReceived",e.TimeSyncUpdate="timeSyncUpdate",e.PreConnectBufferFlushed="preConnectBufferFlushed"}(ws||(ws={}));const Us=/version\/(\d+(\.?_?\d+)+)/i;let js;function Fs(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];if("undefined"==typeof navigator)return;const n=navigator.userAgent.toLowerCase();if(void 0===js||t){const e=Bs.find(e=>{let{test:t}=e;return t.test(n)});js=null==e?void 0:e.describe(n)}return js}const Bs=[{test:/firefox|iceweasel|fxios/i,describe:e=>({name:"Firefox",version:Vs(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e),os:e.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:qs(e)})},{test:/chrom|crios|crmo/i,describe:e=>({name:"Chrome",version:Vs(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e),os:e.toLowerCase().includes("crios")?"iOS":void 0,osVersion:qs(e)})},{test:/safari|applewebkit/i,describe:e=>({name:"Safari",version:Vs(Us,e),os:e.includes("mobile/")?"iOS":"macOS",osVersion:qs(e)})}];function Vs(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const i=t.match(e);return i&&i.length>=n&&i[n]||""}function qs(e){return e.includes("mac os")?Vs(/\(.+?(\d+_\d+(:?_\d+)?)/,e,1).replace(/_/g,"."):void 0}class Hs{}Hs.setTimeout=function(){return setTimeout(...arguments)},Hs.setInterval=function(){return setInterval(...arguments)},Hs.clearTimeout=function(){return clearTimeout(...arguments)},Hs.clearInterval=function(){return clearInterval(...arguments)};const Ws=[];var zs;!function(e){e[e.LOW=0]="LOW",e[e.MEDIUM=1]="MEDIUM",e[e.HIGH=2]="HIGH"}(zs||(zs={}));class Ks extends ri.EventEmitter{get streamState(){return this._streamState}setStreamState(e){this._streamState=e}constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var i;super(),this.attachedElements=[],this.isMuted=!1,this._streamState=Ks.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=Yn,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),"hidden"===document.visibilityState?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),5e3):this.handleAppVisibilityChanged()},this.log=Qn(null!==(i=n.loggerName)&&void 0!==i?i:Jn.Track),this.loggerContextCb=n.loggerContextCb,this.setMaxListeners(100),this.kind=t,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=Ks.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this)),nr(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let t="audio";this.kind===Ks.Kind.Video&&(t="video"),0===this.attachedElements.length&&this.kind===Ks.Kind.Video&&this.addAppVisibilityListener(),e||("audio"===t&&(Ws.forEach(t=>{null!==t.parentElement||e||(e=t)}),e&&Ws.splice(Ws.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),Gs(this.mediaStreamTrack,e);const n=e.srcObject.getTracks(),i=n.some(e=>"audio"===e.kind);return e.play().then(()=>{this.emit(i?ws.AudioPlaybackStarted:ws.VideoPlaybackStarted)}).catch(t=>{"NotAllowedError"===t.name?this.emit(i?ws.AudioPlaybackFailed:ws.VideoPlaybackFailed,t):"AbortError"===t.name?Yn.debug("".concat(i?"audio":"video"," playback aborted, likely due to new play request")):Yn.warn("could not playback ".concat(i?"audio":"video"),t),i&&e&&n.some(e=>"video"===e.kind)&&"NotAllowedError"===t.name&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(ws.ElementAttached,e),e}detach(e){try{if(e){Js(this.mediaStreamTrack,e);const t=this.attachedElements.indexOf(e);return 0>t||(this.attachedElements.splice(t,1),this.recycleElement(e),this.emit(ws.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(e=>{Js(this.mediaStreamTrack,e),t.push(e),this.recycleElement(e),this.emit(ws.ElementDetached,e)}),this.attachedElements=[],t}finally{0===this.attachedElements.length&&this.removeAppVisibilityListener()}}stop(){this.stopMonitor(),this._mediaStreamTrack.stop()}enable(){this._mediaStreamTrack.enabled=!0}disable(){this._mediaStreamTrack.enabled=!1}stopMonitor(){this.monitorInterval&&clearInterval(this.monitorInterval),this.timeSyncHandle&&cancelAnimationFrame(this.timeSyncHandle)}updateLoggerOptions(e){e.loggerName&&(this.log=Qn(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),Ws.forEach(e=>{e.parentElement||(t=!1)}),t&&Ws.push(e)}}handleAppVisibilityChanged(){return ti(this,void 0,void 0,function*(){this.isInBackground="hidden"===document.visibilityState,this.isInBackground||this.kind!==Ks.Kind.Video||setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){fo()?(this.isInBackground="hidden"===document.visibilityState,document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){fo()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Gs(e,t){let n,i;n=t.srcObject instanceof MediaStream?t.srcObject:new MediaStream,i="audio"===e.kind?n.getAudioTracks():n.getVideoTracks(),i.includes(e)||(i.forEach(e=>{n.removeTrack(e)}),n.addTrack(e)),po()&&t instanceof HTMLVideoElement||(t.autoplay=!0),t.muted=0===n.getAudioTracks().length,t instanceof HTMLVideoElement&&(t.playsInline=!0),t.srcObject!==n&&(t.srcObject=n,(po()||uo())&&t instanceof HTMLVideoElement&&setTimeout(()=>{t.srcObject=n,t.play().catch(()=>{})},0))}function Js(e,t){if(t.srcObject instanceof MediaStream){const n=t.srcObject;n.removeTrack(e),t.srcObject=n.getTracks().length>0?n:null}}!function(e){let t,n,i;!function(e){e.Audio="audio",e.Video="video",e.Unknown="unknown"}(t=e.Kind||(e.Kind={})),function(e){e.Camera="camera",e.Microphone="microphone",e.ScreenShare="screen_share",e.ScreenShareAudio="screen_share_audio",e.Unknown="unknown"}(n=e.Source||(e.Source={})),function(e){e.Active="active",e.Paused="paused",e.Unknown="unknown"}(i=e.StreamState||(e.StreamState={})),e.kindToProto=function(e){switch(e){case t.Audio:return He.AUDIO;case t.Video:return He.VIDEO;default:return He.DATA}},e.kindFromProto=function(e){switch(e){case He.AUDIO:return t.Audio;case He.VIDEO:return t.Video;default:return t.Unknown}},e.sourceToProto=function(e){switch(e){case n.Camera:return We.CAMERA;case n.Microphone:return We.MICROPHONE;case n.ScreenShare:return We.SCREEN_SHARE;case n.ScreenShareAudio:return We.SCREEN_SHARE_AUDIO;default:return We.UNKNOWN}},e.sourceFromProto=function(e){switch(e){case We.CAMERA:return n.Camera;case We.MICROPHONE:return n.Microphone;case We.SCREEN_SHARE:return n.ScreenShare;case We.SCREEN_SHARE_AUDIO:return n.ScreenShareAudio;default:return n.Unknown}},e.streamStateFromProto=function(e){switch(e){case qt.ACTIVE:return i.Active;case qt.PAUSED:return i.Paused;default:return i.Unknown}}}(Ks||(Ks={}));class $s{constructor(e,t,n,i,s){if("object"==typeof e)this.width=e.width,this.height=e.height,this.aspectRatio=e.aspectRatio,this.encoding={maxBitrate:e.maxBitrate,maxFramerate:e.maxFramerate,priority:e.priority};else{if(void 0===t||void 0===n)throw new TypeError("Unsupported options: provide at least width, height and maxBitrate");this.width=e,this.height=t,this.aspectRatio=e/t,this.encoding={maxBitrate:n,maxFramerate:i,priority:s}}}get resolution(){return{width:this.width,height:this.height,frameRate:this.encoding.maxFramerate,aspectRatio:this.aspectRatio}}}const Ys=["vp8","h264"],Qs=["vp8","h264","vp9","av1","h265"];const Xs=function(e){return!!Ys.find(t=>t===e)};var Zs,eo;!function(e){e[e.PREFER_REGRESSION=0]="PREFER_REGRESSION",e[e.SIMULCAST=1]="SIMULCAST",e[e.REGRESSION=2]="REGRESSION"}(Zs||(Zs={})),function(e){e.telephone={maxBitrate:12e3},e.speech={maxBitrate:24e3},e.music={maxBitrate:48e3},e.musicStereo={maxBitrate:64e3},e.musicHighQuality={maxBitrate:96e3},e.musicHighQualityStereo={maxBitrate:128e3}}(eo||(eo={}));const to={h90:new $s(160,90,9e4,20),h180:new $s(320,180,16e4,20),h216:new $s(384,216,18e4,20),h360:new $s(640,360,45e4,20),h540:new $s(960,540,8e5,25),h720:new $s(1280,720,17e5,30),h1080:new $s(1920,1080,3e6,30),h1440:new $s(2560,1440,5e6,30),h2160:new $s(3840,2160,8e6,30)},no={h120:new $s(160,120,7e4,20),h180:new $s(240,180,125e3,20),h240:new $s(320,240,14e4,20),h360:new $s(480,360,33e4,20),h480:new $s(640,480,5e5,20),h540:new $s(720,540,6e5,25),h720:new $s(960,720,13e5,30),h1080:new $s(1440,1080,23e5,30),h1440:new $s(1920,1440,38e5,30)},io={h360fps3:new $s(640,360,2e5,3,"medium"),h360fps15:new $s(640,360,4e5,15,"medium"),h720fps5:new $s(1280,720,8e5,5,"medium"),h720fps15:new $s(1280,720,15e5,15,"medium"),h720fps30:new $s(1280,720,2e6,30,"medium"),h1080fps15:new $s(1920,1080,25e5,15,"medium"),h1080fps30:new $s(1920,1080,5e6,30,"medium"),original:new $s(0,0,7e6,30,"medium")},so="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function oo(e){return ti(this,void 0,void 0,function*(){return new Promise(t=>Hs.setTimeout(t,e))})}function ro(){return"addTransceiver"in RTCPeerConnection.prototype}function ao(){return"addTrack"in RTCPeerConnection.prototype}function co(e){return"av1"===e||"vp9"===e}function lo(e){return!(!document||mo())&&(e||(e=document.createElement("audio")),"setSinkId"in e)}function uo(){var e;return"Firefox"===(null===(e=Fs())||void 0===e?void 0:e.name)}function ho(){const e=Fs();return!!e&&"Chrome"===e.name&&"iOS"!==e.os}function po(){var e;return"Safari"===(null===(e=Fs())||void 0===e?void 0:e.name)}function mo(){const e=Fs();return"Safari"===(null==e?void 0:e.name)||"iOS"===(null==e?void 0:e.os)}function go(){var e,t;return!!fo()&&(null!==(t=null===(e=navigator.userAgentData)||void 0===e?void 0:e.mobile)&&void 0!==t?t:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent))}function fo(){return"undefined"!=typeof document}function vo(){return"ReactNative"==navigator.product}function yo(e){return e.hostname.endsWith(".livekit.cloud")||e.hostname.endsWith(".livekit.run")}function bo(e){return yo(e)?e.hostname.split(".")[0]:null}function ko(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function Co(){if(!vo())return;let e=ko();return e?e.platform:void 0}function To(){if(fo())return window.devicePixelRatio;if(vo()){let e=ko();if(e)return e.devicePixelRatio}return 1}function So(e,t){const n=e.split("."),i=t.split("."),s=Math.min(n.length,i.length);for(let e=0;s>e;++e){const t=parseInt(n[e],10),o=parseInt(i[e],10);if(t>o)return 1;if(o>t)return-1;if(e===s-1&&t===o)return 0}return""===e&&""!==t?-1:""===t?1:n.length==i.length?0:i.length>n.length?-1:1}function wo(e){for(const t of e)t.target.handleResize(t)}function Eo(e){for(const t of e)t.target.handleVisibilityChanged(t)}let Ro=null;const _o=()=>(Ro||(Ro=new ResizeObserver(wo)),Ro);let Po=null;const Io=()=>(Po||(Po=new IntersectionObserver(Eo,{root:null,rootMargin:"0px"})),Po);function xo(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=document.createElement("canvas");s.width=e,s.height=t;const o=s.getContext("2d");null==o||o.fillRect(0,0,s.width,s.height),i&&o&&(o.beginPath(),o.arc(e/2,t/2,50,0,2*Math.PI,!0),o.closePath(),o.fillStyle="grey",o.fill());const r=s.captureStream(),[a]=r.getTracks();if(!a)throw Error("Could not get empty media stream video track");return a.enabled=n,a}let Mo;function Oo(){if(!Mo){const e=new AudioContext,t=e.createOscillator(),n=e.createGain();n.gain.setValueAtTime(0,0);const i=e.createMediaStreamDestination();if(t.connect(n),n.connect(i),t.start(),[Mo]=i.stream.getAudioTracks(),!Mo)throw Error("Could not get empty media stream audio track");Mo.enabled=!1}return Mo.clone()}class Lo{get isResolved(){return this._isResolved}constructor(e,t){this._isResolved=!1,this.onFinally=t,this.promise=new Promise((t,n)=>ti(this,void 0,void 0,function*(){this.resolve=t,this.reject=n,e&&(yield e(t,n))})).finally(()=>{var e;this._isResolved=!0,null===(e=this.onFinally)||void 0===e||e.call(this)})}}function Do(e){if("string"==typeof e||"number"==typeof e)return e;if(Array.isArray(e))return e[0];if(void 0!==e.exact)return Array.isArray(e.exact)?e.exact[0]:e.exact;if(void 0!==e.ideal)return Array.isArray(e.ideal)?e.ideal[0]:e.ideal;throw Error("could not unwrap constraint")}function Ao(e){return e.startsWith("ws")?e.replace(/^(ws)/,"http"):e}function No(e){switch(e.reason){case vs.LeaveRequest:return e.context;case vs.Cancelled:return Je.CLIENT_INITIATED;case vs.NotAllowed:return Je.USER_REJECTED;case vs.ServerUnreachable:return Je.JOIN_FAILURE;default:return Je.UNKNOWN_REASON}}function Uo(e){return void 0!==e?Number(e):void 0}function jo(e){return void 0!==e?BigInt(e):void 0}function Fo(e){return!!e&&!(e instanceof MediaStreamTrack)&&e.isLocal}function Bo(e){return!!e&&e.kind==Ks.Kind.Audio}function Vo(e){return!!e&&e.kind==Ks.Kind.Video}function qo(e){return Fo(e)&&Vo(e)}function Ho(e){return Fo(e)&&Bo(e)}function Wo(e){return!!e&&!e.isLocal}function zo(e){return!!e&&!e.isLocal}function Ko(e){return Wo(e)&&Vo(e)}function Go(e,t,n){var i,s,o,r;const{optionsWithoutProcessor:a,audioProcessor:c,videoProcessor:d}=ir(null!=e?e:{}),l=null==t?void 0:t.processor,u=null==n?void 0:n.processor,h=null!=a?a:{};return!0===h.audio&&(h.audio={}),!0===h.video&&(h.video={}),h.audio&&(Jo(h.audio,t),null!==(i=(o=h.audio).deviceId)&&void 0!==i||(o.deviceId={ideal:"default"}),(c||l)&&(h.audio.processor=null!=c?c:l)),h.video&&(Jo(h.video,n),null!==(s=(r=h.video).deviceId)&&void 0!==s||(r.deviceId={ideal:"default"}),(d||u)&&(h.video.processor=null!=d?d:u)),h}function Jo(e,t){return Object.keys(t).forEach(n=>{void 0===e[n]&&(e[n]=t[n])}),e}function $o(e){var t,n,i,s;const o={};if(e.video)if("object"==typeof e.video){const n={},s=n,r=e.video;Object.keys(r).forEach(e=>{if("resolution"===e)Jo(s,r.resolution);else s[e]=r[e]}),o.video=n,null!==(t=(i=o.video).deviceId)&&void 0!==t||(i.deviceId={ideal:"default"})}else o.video=!!e.video&&{deviceId:{ideal:"default"}};else o.video=!1;return e.audio?"object"==typeof e.audio?(o.audio=e.audio,null!==(n=(s=o.audio).deviceId)&&void 0!==n||(s.deviceId={ideal:"default"})):o.audio={deviceId:{ideal:"default"}}:o.audio=!1,o}function Yo(e){return ti(this,arguments,void 0,function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200;return function*(){const n=Qo();if(n){const i=n.createAnalyser();i.fftSize=2048;const s=new Uint8Array(i.frequencyBinCount);n.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(i),yield oo(t),i.getByteTimeDomainData(s);const o=s.some(e=>128!==e&&0!==e);return n.close(),!o}return!1}()})}function Qo(){var e;const t="undefined"!=typeof window&&(window.AudioContext||window.webkitAudioContext);if(t){const n=new t({latencyHint:"interactive"});if("suspended"===n.state&&"undefined"!=typeof window&&(null===(e=window.document)||void 0===e?void 0:e.body)){const e=()=>ti(this,void 0,void 0,function*(){var t;try{"suspended"===n.state&&(yield n.resume())}catch(e){console.warn("Error trying to auto-resume audio context",e)}finally{null===(t=window.document.body)||void 0===t||t.removeEventListener("click",e)}});n.addEventListener("statechange",()=>{var t;"closed"===n.state&&(null===(t=window.document.body)||void 0===t||t.removeEventListener("click",e))}),window.document.body.addEventListener("click",e)}return n}}function Xo(e){return"audioinput"===e?Ks.Source.Microphone:"videoinput"===e?Ks.Source.Camera:Ks.Source.Unknown}function Zo(e){return e===Ks.Source.Microphone?"audioinput":e===Ks.Source.Camera?"videoinput":void 0}function er(e){return e.split("/")[1].toLowerCase()}function tr(e){const t=[];return e.forEach(e=>{void 0!==e.track&&t.push(new Xt({cid:e.track.mediaStreamID,track:e.trackInfo}))}),t}function nr(e){return"mediaStreamTrack"in e?{trackID:e.sid,source:e.source,muted:e.isMuted,enabled:e.mediaStreamTrack.enabled,kind:e.kind,streamID:e.mediaStreamID,streamTrackID:e.mediaStreamTrack.id}:{trackID:e.trackSid,enabled:e.isEnabled,muted:e.isMuted,trackInfo:Object.assign({mimeType:e.mimeType,name:e.trackName,encrypted:e.isEncrypted,kind:e.kind,source:e.source},e.track?nr(e.track):{})}}function ir(e){const t=Object.assign({},e);let n,i;return"object"==typeof t.audio&&t.audio.processor&&(n=t.audio.processor,t.audio=Object.assign(Object.assign({},t.audio),{processor:void 0})),"object"==typeof t.video&&t.video.processor&&(i=t.video.processor,t.video=Object.assign(Object.assign({},t.video),{processor:void 0})),{audioProcessor:n,videoProcessor:i,optionsWithoutProcessor:(s=t,void 0===s?s:"function"==typeof structuredClone?"object"==typeof s&&null!==s?structuredClone(Object.assign({},s)):structuredClone(s):JSON.parse(JSON.stringify(s)))};var s}function sr(e,t){return t.width*t.height>e.width*e.height}class or extends ri.EventEmitter{constructor(e,t){super(),this.decryptDataRequests=new Map,this.encryptDataRequests=new Map,this.onWorkerMessage=e=>{var t,n;const{kind:i,data:s}=e.data;switch(i){case"error":if(Yn.error(s.error.message),s.uuid){const e=this.decryptDataRequests.get(s.uuid);if(null==e?void 0:e.reject){e.reject(s.error);break}const t=this.encryptDataRequests.get(s.uuid);if(null==t?void 0:t.reject){t.reject(s.error);break}}this.emit(gs.EncryptionError,s.error,s.participantIdentity);break;case"initAck":s.enabled&&this.keyProvider.getKeys().forEach(e=>{this.postKey(e)});break;case"enable":if(s.enabled&&this.keyProvider.getKeys().forEach(e=>{this.postKey(e)}),this.encryptionEnabled!==s.enabled&&s.participantIdentity===(null===(t=this.room)||void 0===t?void 0:t.localParticipant.identity))this.emit(gs.ParticipantEncryptionStatusChanged,s.enabled,this.room.localParticipant),this.encryptionEnabled=s.enabled;else if(s.participantIdentity){const e=null===(n=this.room)||void 0===n?void 0:n.getParticipantByIdentity(s.participantIdentity);if(!e)throw TypeError("couldn't set encryption status, participant not found".concat(s.participantIdentity));this.emit(gs.ParticipantEncryptionStatusChanged,s.enabled,e)}break;case"ratchetKey":this.keyProvider.emit(ps.KeyRatcheted,s.ratchetResult,s.participantIdentity,s.keyIndex);break;case"decryptDataResponse":const e=this.decryptDataRequests.get(s.uuid);(null==e?void 0:e.resolve)&&e.resolve(s);break;case"encryptDataResponse":const i=this.encryptDataRequests.get(s.uuid);(null==i?void 0:i.resolve)&&i.resolve(s)}},this.onWorkerError=e=>{Yn.error("e2ee worker encountered an error:",{error:e.error}),this.emit(gs.EncryptionError,e.error,void 0)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1,this.dataChannelEncryptionEnabled=t}get isEnabled(){return this.encryptionEnabled}get isDataChannelEncryptionEnabled(){return this.isEnabled&&this.dataChannelEncryptionEnabled}setup(e){if(!Es())throw new Is("tried to setup end-to-end encryption on an unsupported browser");if(Yn.info("setting up e2ee"),e!==this.room){this.room=e,this.setupEventListeners(e,this.keyProvider);const t={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:Xn.getLevel()}};this.worker&&(Yn.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){Yn.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){e&&0!==e.length?this.postSifTrailer(e):Yn.warn("ignoring server sent trailer as it's empty")}setupEngine(e){e.on(Ss.RTPVideoMapUpdate,e=>{this.postRTPMap(e)})}setupEventListeners(e,t){e.on(Cs.TrackPublished,(e,t)=>this.setParticipantCryptorEnabled(e.trackInfo.encryption!==ot.NONE,t.identity)),e.on(Cs.ConnectionStateChanged,t=>{t===Ka.Connected&&e.remoteParticipants.forEach(e=>{e.trackPublications.forEach(t=>{this.setParticipantCryptorEnabled(t.trackInfo.encryption!==ot.NONE,e.identity)})})}).on(Cs.TrackUnsubscribed,(e,t,n)=>{var i;null===(i=this.worker)||void 0===i||i.postMessage({kind:"removeTransform",data:{participantIdentity:n.identity,trackId:e.mediaStreamID}})}).on(Cs.TrackSubscribed,(e,t,n)=>{this.setupE2EEReceiver(e,n.identity,t.trackInfo)}).on(Cs.SignalConnected,()=>{if(!this.room)throw new TypeError("expected room to be present on signal connect");t.getKeys().forEach(e=>{this.postKey(e)}),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)}),e.localParticipant.on(Ts.LocalSenderCreated,(e,t)=>ti(this,void 0,void 0,function*(){this.setupE2EESender(t,e)})),e.localParticipant.on(Ts.LocalTrackPublished,e=>{if(!Vo(e.track)||!mo())return;const t={kind:"updateCodec",data:{trackId:e.track.mediaStreamID,codec:er(e.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(t)}),t.on(ps.SetKey,e=>this.postKey(e)).on(ps.RatchetRequest,(e,t)=>this.postRatchetRequest(e,t))}encryptData(e){return ti(this,void 0,void 0,function*(){if(!this.worker)throw Error("could not encrypt data, worker is missing");const t=crypto.randomUUID(),n={kind:"encryptDataRequest",data:{uuid:t,payload:e,participantIdentity:this.room.localParticipant.identity}},i=new Lo;return i.onFinally=()=>{this.encryptDataRequests.delete(t)},this.encryptDataRequests.set(t,i),this.worker.postMessage(n),i.promise})}handleEncryptedData(e,t,n,i){if(!this.worker)throw Error("could not handle encrypted data, worker is missing");const s=crypto.randomUUID(),o={kind:"decryptDataRequest",data:{uuid:s,payload:e,iv:t,participantIdentity:n,keyIndex:i}},r=new Lo;return r.onFinally=()=>{this.decryptDataRequests.delete(s)},this.decryptDataRequests.set(s,r),this.worker.postMessage(o),r.promise}postRatchetRequest(e,t){if(!this.worker)throw Error("could not ratchet key, worker is missing");this.worker.postMessage({kind:"ratchetRequest",data:{participantIdentity:e,keyIndex:t}})}postKey(e){let{key:t,participantIdentity:n,keyIndex:i}=e;var s;if(!this.worker)throw Error("could not set key, worker is missing");const o={kind:"setKey",data:{participantIdentity:n,isPublisher:n===(null===(s=this.room)||void 0===s?void 0:s.localParticipant.identity),key:t,keyIndex:i}};this.worker.postMessage(o)}postEnable(e,t){if(!this.worker)throw new ReferenceError("failed to enable e2ee, worker is not ready");this.worker.postMessage({kind:"enable",data:{enabled:e,participantIdentity:t}})}postRTPMap(e){var t;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!(null===(t=this.room)||void 0===t?void 0:t.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");this.worker.postMessage({kind:"setRTPMap",data:{map:e,participantIdentity:this.room.localParticipant.identity}})}postSifTrailer(e){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");this.worker.postMessage({kind:"setSifTrailer",data:{trailer:e}})}setupE2EEReceiver(e,t,n){if(e.receiver){if(!(null==n?void 0:n.mimeType)||""===n.mimeType)throw new TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");this.handleReceiver(e.receiver,e.mediaStreamID,t,"video"===e.kind?er(n.mimeType):void 0)}}setupE2EESender(e,t){Fo(e)&&t?this.handleSender(t,e.mediaStreamID,void 0):t||Yn.warn("early return because sender is not ready")}handleReceiver(e,t,n,i){return ti(this,void 0,void 0,function*(){if(this.worker){if(Rs()&&!ho()){e.transform=new RTCRtpScriptTransform(this.worker,{kind:"decode",participantIdentity:n,trackId:t,codec:i})}else{if(hs in e&&i){return void this.worker.postMessage({kind:"updateCodec",data:{trackId:t,codec:i,participantIdentity:n}})}let s=e.writableStream,o=e.readableStream;if(!s||!o){const t=e.createEncodedStreams();e.writableStream=t.writable,s=t.writable,e.readableStream=t.readable,o=t.readable}this.worker.postMessage({kind:"decode",data:{readableStream:o,writableStream:s,trackId:t,codec:i,participantIdentity:n,isReuse:hs in e}},[o,s])}e[hs]=!0}})}handleSender(e,t,n){var i;if(!(hs in e)&&this.worker){if(!(null===(i=this.room)||void 0===i?void 0:i.localParticipant.identity)||""===this.room.localParticipant.identity)throw TypeError("local identity needs to be known in order to set up encrypted sender");if(Rs()&&!ho()){Yn.info("initialize script transform");e.transform=new RTCRtpScriptTransform(this.worker,{kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:t,codec:n})}else{Yn.info("initialize encoded streams");const i=e.createEncodedStreams();this.worker.postMessage({kind:"encode",data:{readableStream:i.readable,writableStream:i.writable,codec:n,trackId:t,participantIdentity:this.room.localParticipant.identity,isReuse:!1}},[i.readable,i.writable])}e[hs]=!0}}}class rr{constructor(){this.failedConnectionAttempts=new Map,this.backOffPromises=new Map}static getInstance(){return this._instance||(this._instance=new rr),this._instance}addFailedConnectionAttempt(e){var t;const n=bo(new URL(e));if(!n)return;let i=null!==(t=this.failedConnectionAttempts.get(n))&&void 0!==t?t:0;this.failedConnectionAttempts.set(n,i+1),this.backOffPromises.set(n,oo(Math.min(500*Math.pow(2,i),15e3)))}getBackOffPromise(e){const t=new URL(e),n=t&&bo(t);return n&&this.backOffPromises.get(n)||Promise.resolve()}resetFailedConnectionAttempts(e){const t=new URL(e),n=t&&bo(t);n&&(this.failedConnectionAttempts.set(n,0),this.backOffPromises.set(n,Promise.resolve()))}resetAll(){this.backOffPromises.clear(),this.failedConnectionAttempts.clear()}}rr._instance=null;const ar="default";class cr{constructor(){this._previousDevices=[]}static getInstance(){return void 0===this.instance&&(this.instance=new cr),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return ti(this,arguments,void 0,function(e){var t=this;let n=1>=arguments.length||void 0===arguments[1]||arguments[1];return function*(){var i;if((null===(i=cr.userMediaPromiseMap)||void 0===i?void 0:i.size)>0){Yn.debug("awaiting getUserMedia promise");try{e?yield cr.userMediaPromiseMap.get(e):yield Promise.all(cr.userMediaPromiseMap.values())}catch(e){Yn.warn("error waiting for media permissons")}}let s=yield navigator.mediaDevices.enumerateDevices();if(n&&(!po()||!t.hasDeviceInUse(e))){if(0===s.filter(t=>t.kind===e).length||s.some(t=>""===t.label&&(!e||t.kind===e))){const t={video:"audioinput"!==e&&"audiooutput"!==e,audio:"videoinput"!==e&&{deviceId:{ideal:"default"}}},n=yield navigator.mediaDevices.getUserMedia(t);s=yield navigator.mediaDevices.enumerateDevices(),n.getTracks().forEach(e=>{e.stop()})}}return t._previousDevices=s,e&&(s=s.filter(t=>t.kind===e)),s}()})}normalizeDeviceId(e,t,n){return ti(this,void 0,void 0,function*(){if(t!==ar)return t;const i=yield this.getDevices(e),s=i.find(e=>e.deviceId===ar);if(!s)return void Yn.warn("could not reliably determine default device");const o=i.find(e=>e.deviceId!==ar&&e.groupId===(null!=n?n:s.groupId));if(o)return null==o?void 0:o.deviceId;Yn.warn("could not reliably determine default device")})}hasDeviceInUse(e){return e?cr.userMediaPromiseMap.has(e):cr.userMediaPromiseMap.size>0}}var dr;cr.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],cr.userMediaPromiseMap=new Map,function(e){e[e.WAITING=0]="WAITING",e[e.RUNNING=1]="RUNNING",e[e.COMPLETED=2]="COMPLETED"}(dr||(dr={}));class lr{constructor(){this.pendingTasks=new Map,this.taskMutex=new s,this.nextTaskIndex=0}run(e){return ti(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:dr.WAITING};this.pendingTasks.set(t.id,t);const n=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=dr.RUNNING,yield e()}finally{t.status=dr.COMPLETED,this.pendingTasks.delete(t.id),n()}})}flush(){return ti(this,void 0,void 0,function*(){return this.run(()=>ti(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}class ur{get readyState(){return this.ws.readyState}constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n,i;if(null===(n=t.signal)||void 0===n?void 0:n.aborted)throw new DOMException("This operation was aborted","AbortError");this.url=e;const s=new WebSocket(e,null!==(i=t.protocols)&&void 0!==i?i:[]);s.binaryType="arraybuffer",this.ws=s;const o=function(){let{closeCode:e,reason:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return s.close(e,t)};this.opened=new Promise((e,t)=>{s.onopen=()=>{e({readable:new ReadableStream({start(e){s.onmessage=t=>{let{data:n}=t;return e.enqueue(n)},s.onerror=t=>e.error(t)},cancel:o}),writable:new WritableStream({write(e){s.send(e)},abort(){s.close()},close:o}),protocol:s.protocol,extensions:s.extensions}),s.removeEventListener("error",t)},s.addEventListener("error",t)}),this.closed=new Promise((e,t)=>{const n=()=>ti(this,void 0,void 0,function*(){const n=new Promise(e=>{s.readyState!==WebSocket.CLOSED&&s.addEventListener("close",t=>{e(t)},{once:!0})}),i=yield Promise.race([oo(250),n]);i?e(i):t(Error("Encountered unspecified websocket error without a timely close event"))});s.onclose=t=>{let{code:i,reason:o}=t;e({closeCode:i,reason:o}),s.removeEventListener("error",n)},s.addEventListener("error",n)}),t.signal&&(t.signal.onabort=()=>s.close()),this.close=o}}function hr(e,t){return e.pathname="".concat(function(e){return e.endsWith("/")?e:"".concat(e,"/")}(e.pathname)).concat(t),""+e}function pr(e){if("string"==typeof e)return zt.fromJson(JSON.parse(e),{ignoreUnknownFields:!0});if(e instanceof ArrayBuffer)return zt.fromBinary(new Uint8Array(e));throw Error("could not decode websocket message: ".concat(typeof e))}const mr=["syncState","trickle","offer","answer","simulate","leave"];var gr;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTING=3]="DISCONNECTING",e[e.DISCONNECTED=4]="DISCONNECTED"}(gr||(gr={}));class fr{get currentState(){return this.state}get isDisconnected(){return this.state===gr.DISCONNECTING||this.state===gr.DISCONNECTED}get isEstablishingConnection(){return this.state===gr.CONNECTING||this.state===gr.RECONNECTING}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n;this.rtt=0,this.state=gr.DISCONNECTED,this.log=Yn,this._requestId=0,this.resetCallbacks=()=>{this.onAnswer=void 0,this.onLeave=void 0,this.onLocalTrackPublished=void 0,this.onLocalTrackUnpublished=void 0,this.onNegotiateRequested=void 0,this.onOffer=void 0,this.onRemoteMuteChanged=void 0,this.onSubscribedQualityUpdate=void 0,this.onTokenRefresh=void 0,this.onTrickle=void 0,this.onClose=void 0,this.onMediaSectionsRequirement=void 0},this.log=Qn(null!==(n=t.loggerName)&&void 0!==n?n:Jn.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new lr,this.queuedRequests=[],this.closingLock=new s,this.connectionLock=new s,this.state=gr.DISCONNECTED}get logContext(){var e,t;return null!==(t=null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this))&&void 0!==t?t:{}}join(e,t,n,i){return ti(this,void 0,void 0,function*(){this.state=gr.CONNECTING,this.options=n;return yield this.connect(e,t,n,i)})}reconnect(e,t,n,i){return ti(this,void 0,void 0,function*(){if(!this.options)return void this.log.warn("attempted to reconnect without signal options being set, ignoring",this.logContext);this.state=gr.RECONNECTING,this.clearPingInterval();return yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:n,reconnectReason:i}))})}connect(e,t,n,i){return ti(this,void 0,void 0,function*(){const s=yield this.connectionLock.lock();this.connectOptions=n;const o=function(){var e;const t=new Pt({sdk:It.JS,protocol:16,version:"2.16.0"});return vo()&&(t.os=null!==(e=Co())&&void 0!==e?e:""),t}(),r=n.singlePeerConnection?function(e,t,n){const i=new URLSearchParams;i.set("access_token",e);const s=new Fn({clientInfo:t,connectionSettings:new jn({autoSubscribe:!!n.autoSubscribe,adaptiveStream:!!n.adaptiveStream}),reconnect:!!n.reconnect,participantSid:n.sid?n.sid:void 0});n.reconnectReason&&(s.reconnectReason=n.reconnectReason);const o=new Bn({joinRequest:s.toBinary()});return i.set("join_request",btoa(new TextDecoder("utf-8").decode(o.toBinary()))),i}(t,o,n):function(e,t,n){var i;const s=new URLSearchParams;s.set("access_token",e),n.reconnect&&(s.set("reconnect","1"),n.sid&&s.set("sid",n.sid));s.set("auto_subscribe",n.autoSubscribe?"1":"0"),s.set("sdk",vo()?"reactnative":"js"),s.set("version",t.version),s.set("protocol",""+t.protocol),t.deviceModel&&s.set("device_model",t.deviceModel);t.os&&s.set("os",t.os);t.osVersion&&s.set("os_version",t.osVersion);t.browser&&s.set("browser",t.browser);t.browserVersion&&s.set("browser_version",t.browserVersion);n.adaptiveStream&&s.set("adaptive_stream","1");n.reconnectReason&&s.set("reconnect_reason",""+n.reconnectReason);(null===(i=navigator.connection)||void 0===i?void 0:i.type)&&s.set("network",navigator.connection.type);return s}(t,o,n),a=function(e,t){const n=new URL(function(e){return e.startsWith("http")?e.replace(/^(http)/,"ws"):e}(e));return t.forEach((e,t)=>{n.searchParams.set(t,e)}),hr(n,"rtc")}(e,r),c=hr(new URL(Ao(a)),"validate");return new Promise((e,t)=>ti(this,void 0,void 0,function*(){var o,r;try{let s=!1;const d=e=>ti(this,void 0,void 0,function*(){if(s)return;s=!0;const n=e instanceof Event?e.currentTarget:e,i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Unknown reason";if(!(e instanceof AbortSignal))return t;const n=e.reason;switch(typeof n){case"string":return n;case"object":return n instanceof Error?n.message:t;default:return"toString"in n?""+n:t}}(n,"Abort handler called");this.streamWriter&&!this.isDisconnected?this.sendLeave().then(()=>this.close(i)).catch(e=>{this.log.error(e),this.close()}):this.close(),l(),t(n instanceof AbortSignal?n.reason:n)});null==i||i.addEventListener("abort",d);const l=()=>{clearTimeout(u),null==i||i.removeEventListener("abort",d)},u=setTimeout(()=>{d(new Ps("room connection has timed out (signal)",vs.ServerUnreachable))},n.websocketTimeout),h=(e,t)=>{this.handleSignalConnected(e,u,t)},p=new URL(a);p.searchParams.has("access_token")&&p.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(p),Object.assign({reconnect:n.reconnect,reconnectReason:n.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new ur(a);try{this.ws.closed.then(e=>{var n;this.isEstablishingConnection&&t(new Ps("Websocket got closed during a (re)connection attempt: ".concat(e.reason),vs.InternalError)),1e3!==e.closeCode&&(this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:e.reason,code:e.closeCode,wasClean:1e3===e.closeCode,state:this.state})),this.state===gr.CONNECTED&&this.handleOnClose(null!==(n=e.reason)&&void 0!==n?n:"Unexpected WS error"))}).catch(e=>{this.isEstablishingConnection&&t(new Ps("Websocket error during a (re)connection attempt: ".concat(e),vs.InternalError))});const i=yield this.ws.opened.catch(e=>ti(this,void 0,void 0,function*(){if(this.state!==gr.CONNECTED){this.state=gr.DISCONNECTED,clearTimeout(u);const n=yield this.handleConnectionError(e,c);return void t(n)}this.handleWSError(e),t(e)}));if(clearTimeout(u),!i)return;const s=i.readable.getReader();this.streamWriter=i.writable.getWriter();const a=yield s.read();if(s.releaseLock(),!a.value)throw new Ps("no message received as first message",vs.InternalError);const d=pr(a.value),l=this.validateFirstMessage(d,null!==(o=n.reconnect)&&void 0!==o&&o);if(!l.isValid)return void t(l.error);"join"===(null===(r=d.message)||void 0===r?void 0:r.case)&&(this.pingTimeoutDuration=d.message.value.pingTimeout,this.pingIntervalDuration=d.message.value.pingInterval,this.pingTimeoutDuration&&this.pingTimeoutDuration>0&&this.log.debug("ping config",Object.assign(Object.assign({},this.logContext),{timeout:this.pingTimeoutDuration,interval:this.pingIntervalDuration})));h(i,l.shouldProcessFirstMessage?d:void 0),e(l.response)}catch(e){t(e)}finally{l()}}finally{s()}}))})}startReadingLoop(e,t){return ti(this,void 0,void 0,function*(){for(t&&this.handleSignalResponse(t);;){this.signalLatency&&(yield oo(this.signalLatency));const{done:t,value:n}=yield e.read();if(t)break;const i=pr(n);this.handleSignalResponse(i)}})}close(){return ti(this,arguments,void 0,function(){var e=this;let t=0>=arguments.length||void 0===arguments[0]||arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Close method called on signal client";return function*(){if([gr.DISCONNECTING||gr.DISCONNECTED].includes(e.state))return void e.log.debug("ignoring signal close as it's already in disconnecting state");const i=yield e.closingLock.lock();try{if(e.clearPingInterval(),t&&(e.state=gr.DISCONNECTING),e.ws){e.ws.close({closeCode:1e3,reason:n});const t=e.ws.closed;e.ws=void 0,e.streamWriter=void 0,yield Promise.race([t,oo(250)])}}catch(t){e.log.debug("websocket error while closing",Object.assign(Object.assign({},e.logContext),{error:t}))}finally{t&&(e.state=gr.DISCONNECTED),i()}}()})}sendOffer(e,t){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:yr(e,t)})}sendAnswer(e,t){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:e.sdp})),this.sendRequest({case:"answer",value:yr(e,t)})}sendIceCandidate(e,t){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:e})),this.sendRequest({case:"trickle",value:new Jt({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new $t({sid:e,muted:t})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,t){return ti(this,arguments,void 0,function(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){const s=n.getNextRequestId();return yield n.sendRequest({case:"updateMetadata",value:new ln({requestId:s,metadata:e,name:t,attributes:i})}),s}()})}sendUpdateTrackSettings(e){this.sendRequest({case:"trackSetting",value:e})}sendUpdateSubscription(e){return this.sendRequest({case:"subscription",value:e})}sendSyncState(e){return this.sendRequest({case:"syncState",value:e})}sendUpdateVideoLayers(e,t){return this.sendRequest({case:"updateLayers",value:new dn({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new Sn({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:R.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new xn({timestamp:R.parse(Date.now()),rtt:R.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new on({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new an({reason:Je.CLIENT_INITIATED,action:cn.DISCONNECT})})}sendRequest(e){return ti(this,arguments,void 0,function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function*(){const i=!n&&!function(e){const t=mr.indexOf(e.case)>=0;return Yn.trace("request allowed to bypass queue:",{canPass:t,req:e}),t}(e);if(i&&t.state===gr.RECONNECTING)return void t.queuedRequests.push(()=>ti(t,void 0,void 0,function*(){yield this.sendRequest(e,!0)}));if(n||(yield t.requestQueue.flush()),t.signalLatency&&(yield oo(t.signalLatency)),t.isDisconnected)return void t.log.debug("skipping signal request (type: ".concat(e.case,") - SignalClient disconnected"));if(!t.streamWriter)return void t.log.error("cannot send signal request before connected, type: ".concat(null==e?void 0:e.case),t.logContext);const s=new Wt({message:e});try{t.useJSON?yield t.streamWriter.write(s.toJsonString()):yield t.streamWriter.write(s.toBinary())}catch(e){t.log.error("error sending signal message",Object.assign(Object.assign({},t.logContext),{error:e}))}}()})}handleSignalResponse(e){var t,n;const i=e.message;if(null==i)return void this.log.debug("received unsupported message",this.logContext);let s=!1;if("answer"===i.case){const e=vr(i.value);this.onAnswer&&this.onAnswer(e,i.value.id,i.value.midToTrackId)}else if("offer"===i.case){const e=vr(i.value);this.onOffer&&this.onOffer(e,i.value.id,i.value.midToTrackId)}else if("trickle"===i.case){const e=JSON.parse(i.value.candidateInit);this.onTrickle&&this.onTrickle(e,i.value.target)}else"update"===i.case?this.onParticipantUpdate&&this.onParticipantUpdate(null!==(t=i.value.participants)&&void 0!==t?t:[]):"trackPublished"===i.case?this.onLocalTrackPublished&&this.onLocalTrackPublished(i.value):"speakersChanged"===i.case?this.onSpeakersChanged&&this.onSpeakersChanged(null!==(n=i.value.speakers)&&void 0!==n?n:[]):"leave"===i.case?this.onLeave&&this.onLeave(i.value):"mute"===i.case?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(i.value.sid,i.value.muted):"roomUpdate"===i.case?this.onRoomUpdate&&i.value.room&&this.onRoomUpdate(i.value.room):"connectionQuality"===i.case?this.onConnectionQuality&&this.onConnectionQuality(i.value):"streamStateUpdate"===i.case?this.onStreamStateUpdate&&this.onStreamStateUpdate(i.value):"subscribedQualityUpdate"===i.case?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(i.value):"subscriptionPermissionUpdate"===i.case?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(i.value):"refreshToken"===i.case?this.onTokenRefresh&&this.onTokenRefresh(i.value):"trackUnpublished"===i.case?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(i.value):"subscriptionResponse"===i.case?this.onSubscriptionError&&this.onSubscriptionError(i.value):"pong"===i.case||("pongResp"===i.case?(this.rtt=Date.now()-Number.parseInt(""+i.value.lastPingTimestamp),this.resetPingTimeout(),s=!0):"requestResponse"===i.case?this.onRequestResponse&&this.onRequestResponse(i.value):"trackSubscribed"===i.case?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(i.value.trackSid):"roomMoved"===i.case?(this.onTokenRefresh&&this.onTokenRefresh(i.value.token),this.onRoomMoved&&this.onRoomMoved(i.value)):"mediaSectionsRequirement"===i.case?this.onMediaSectionsRequirement&&this.onMediaSectionsRequirement(i.value):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:i.case})));s||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return ti(this,void 0,void 0,function*(){if(this.state===gr.DISCONNECTED)return;const t=this.onClose;yield this.close(void 0,e),this.log.debug("websocket connection closed: ".concat(e),Object.assign(Object.assign({},this.logContext),{reason:e})),t&&t(e)})}handleWSError(e){this.log.error("websocket error",Object.assign(Object.assign({},this.logContext),{error:e}))}resetPingTimeout(){this.clearPingTimeout(),this.pingTimeoutDuration?this.pingTimeout=Hs.setTimeout(()=>{this.log.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now()-1e3*this.pingTimeoutDuration).toUTCString()),this.logContext),this.handleOnClose("ping timeout")},1e3*this.pingTimeoutDuration):this.log.warn("ping timeout duration not set",this.logContext)}clearPingTimeout(){this.pingTimeout&&Hs.clearTimeout(this.pingTimeout)}startPingInterval(){this.clearPingInterval(),this.resetPingTimeout(),this.pingIntervalDuration?(this.log.debug("start ping interval",this.logContext),this.pingInterval=Hs.setInterval(()=>{this.sendPing()},1e3*this.pingIntervalDuration)):this.log.warn("ping interval duration not set",this.logContext)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&Hs.clearInterval(this.pingInterval)}handleSignalConnected(e,t,n){this.state=gr.CONNECTED,clearTimeout(t),this.startPingInterval(),this.startReadingLoop(e.readable.getReader(),n)}validateFirstMessage(e,t){var n,i,s,o,r;return"join"===(null===(n=e.message)||void 0===n?void 0:n.case)?{isValid:!0,response:e.message.value}:this.state===gr.RECONNECTING&&"leave"!==(null===(i=e.message)||void 0===i?void 0:i.case)?"reconnect"===(null===(s=e.message)||void 0===s?void 0:s.case)?{isValid:!0,response:e.message.value}:(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),{isValid:!0,response:void 0,shouldProcessFirstMessage:!0}):this.isEstablishingConnection&&"leave"===(null===(o=e.message)||void 0===o?void 0:o.case)?{isValid:!1,error:new Ps("Received leave request while trying to (re)connect",vs.LeaveRequest,void 0,e.message.value.reason)}:t?{isValid:!1,error:new Ps("Unexpected first message",vs.InternalError)}:{isValid:!1,error:new Ps("did not receive join response, got ".concat(null===(r=e.message)||void 0===r?void 0:r.case," instead"),vs.InternalError)}}handleConnectionError(e,t){return ti(this,void 0,void 0,function*(){try{const n=yield fetch(t);if(n.status.toFixed(0).startsWith("4")){const e=yield n.text();return new Ps(e,vs.NotAllowed,n.status)}return e instanceof Ps?e:new Ps("Encountered unknown websocket error during connection: ".concat(e),vs.InternalError,n.status)}catch(e){return e instanceof Ps?e:new Ps(e instanceof Error?e.message:"server was not reachable",vs.ServerUnreachable)}})}}function vr(e){const t={type:"offer",sdp:e.sdp};switch(e.type){case"answer":case"offer":case"pranswer":case"rollback":t.type=e.type}return t}function yr(e,t){return new en({sdp:e.sdp,type:e.type,id:t})}class br{constructor(){this.buffer=[],this._totalSize=0}push(e){this.buffer.push(e),this._totalSize+=e.data.byteLength}pop(){const e=this.buffer.shift();return e&&(this._totalSize-=e.data.byteLength),e}getAll(){return this.buffer.slice()}popToSequence(e){for(;this.buffer.length>0;){if(this.buffer[0].sequence>e)break;this.pop()}}alignBufferedAmount(e){for(;this.buffer.length>0;){if(e>=this._totalSize-this.buffer[0].data.byteLength)break;this.pop()}}get length(){return this.buffer.length}}class kr{constructor(e){this._map=new Map,this._lastCleanup=0,this.ttl=e}set(e,t){const n=Date.now();n-this._lastCleanup>this.ttl/2&&this.cleanup();return this._map.set(e,{value:t,expiresAt:n+this.ttl}),this}get(e){const t=this._map.get(e);if(t){if(t.expiresAt>=Date.now())return t.value;this._map.delete(e)}}has(e){const t=this._map.get(e);return!!t&&(t.expiresAt>=Date.now()||(this._map.delete(e),!1))}delete(e){return this._map.delete(e)}clear(){this._map.clear()}cleanup(){const e=Date.now();for(const[t,n]of this._map.entries())e>n.expiresAt&&this._map.delete(t);this._lastCleanup=e}get size(){return this.cleanup(),this._map.size}forEach(e){this.cleanup();for(const[t,n]of this._map.entries())n.expiresAt<Date.now()||e(n.value,t,this.asValueMap())}map(e){this.cleanup();const t=[],n=this.asValueMap();for(const[i,s]of n.entries())t.push(e(s,i,n));return t}asValueMap(){const e=new Map;for(const[t,n]of this._map.entries())n.expiresAt<Date.now()||e.set(t,n.value);return e}}var Cr,Tr,Sr,wr,Er,Rr={},_r={},Pr={exports:{}};function Ir(){if(Cr)return Pr.exports;Cr=1;var e=Pr.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};return Object.keys(e).forEach(function(t){e[t].forEach(function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")})}),Pr.exports}function xr(){return Tr||(Tr=1,function(e){var t=function(e){return Number(e)+""===e?Number(e):e},n=function(e,n,i){var s=e.name&&e.names;e.push&&!n[e.push]?n[e.push]=[]:s&&!n[e.name]&&(n[e.name]={});var o=e.push?{}:s?n[e.name]:n;!function(e,n,i,s){if(s&&!i)n[s]=t(e[1]);else for(var o=0;i.length>o;o+=1)null!=e[o+1]&&(n[i[o]]=t(e[o+1]))}(i.match(e.reg),o,e.names,e.name),e.push&&n[e.push].push(o)},i=Ir(),s=RegExp.prototype.test.bind(/^([a-z])=(.*)/);e.parse=function(e){var t={},o=[],r=t;return e.split(/(\r\n|\r|\n)/).filter(s).forEach(function(e){var t=e[0],s=e.slice(2);"m"===t&&(o.push({rtp:[],fmtp:[]}),r=o[o.length-1]);for(var a=0;(i[t]||[]).length>a;a+=1){var c=i[t][a];if(c.reg.test(s))return n(c,r,s)}}),t.media=o,t};var o=function(e,n){var i=n.split(/=(.+)/,2);return 2===i.length?e[i[0]]=t(i[1]):1===i.length&&n.length>1&&(e[i[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(o,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return(""+e).split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var n=[],i=e.split(" ").map(t),s=0;i.length>s;s+=3)n.push({component:i[s],ip:i[s+1],port:i[s+2]});return n},e.parseImageAttributes=function(e){return e.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(o,{})})},e.parseSimulcastStreamList=function(e){return e.split(";").map(function(e){return e.split(",").map(function(e){var n,i=!1;return"~"!==e[0]?n=t(e):(n=t(e.substring(1,e.length)),i=!0),{scid:n,paused:i}})})}}(_r)),_r}function Mr(){if(wr)return Sr;wr=1;var e=Ir(),t=/%[sdv%]/g,n=function(e){var n=1,i=arguments,s=i.length;return e.replace(t,function(e){if(n>=s)return e;var t=i[n];switch(n+=1,e){case"%%":return"%";case"%s":return t+"";case"%d":return Number(t);case"%v":return""}})},i=function(e,t,i){var s=[e+"="+(t.format instanceof Function?t.format(t.push?i:i[t.name]):t.format)];if(t.names)for(var o=0;t.names.length>o;o+=1){s.push(t.name?i[t.name][t.names[o]]:i[t.names[o]])}else s.push(i[t.name]);return n.apply(null,s)},s=["v","o","s","i","u","e","p","c","b","t","r","z","a"],o=["i","c","b","a"];return Sr=function(t,n){n=n||{},null==t.version&&(t.version=0),null==t.name&&(t.name=" "),t.media.forEach(function(e){null==e.payloads&&(e.payloads="")});var r=n.innerOrder||o,a=[];return(n.outerOrder||s).forEach(function(n){e[n].forEach(function(e){e.name in t&&null!=t[e.name]?a.push(i(n,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach(function(t){a.push(i(n,e,t))})})}),t.media.forEach(function(t){a.push(i("m",e.m[0],t)),r.forEach(function(n){e[n].forEach(function(e){e.name in t&&null!=t[e.name]?a.push(i(n,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach(function(t){a.push(i(n,e,t))})})})}),a.join("\r\n")+"\r\n"},Sr}var Or=function(){if(Er)return Rr;Er=1;var e=xr(),t=Mr(),n=Ir();return Rr.grammar=n,Rr.write=t,Rr.parse=e.parse,Rr.parseParams=e.parseParams,Rr.parseFmtpConfig=e.parseFmtpConfig,Rr.parsePayloads=e.parsePayloads,Rr.parseRemoteCandidates=e.parseRemoteCandidates,Rr.parseImageAttributes=e.parseImageAttributes,Rr.parseSimulcastStreamList=e.parseSimulcastStreamList,Rr}();function Lr(e,t,n){var i,s,o;void 0===t&&(t=50),void 0===n&&(n={});var r=null!=(i=n.isImmediate)&&i,a=null!=(s=n.callback)&&s,c=n.maxWait,d=Date.now(),l=[];function u(){if(void 0!==c){var e=Date.now()-d;if(e+t>=c)return c-e}return t}var h=function(){var t=[].slice.call(arguments),n=this;return new Promise(function(i,s){var c=r&&void 0===o;if(void 0!==o&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,d=Date.now(),!r){var i=e.apply(n,t);a&&a(i),l.forEach(function(e){return(0,e.resolve)(i)}),l=[]}},u()),c){var h=e.apply(n,t);return a&&a(h),i(h)}l.push({resolve:i,reject:s})})};return h.cancel=function(e){void 0!==o&&clearTimeout(o),l.forEach(function(t){return(0,t.reject)(e)}),l=[]},h}const Dr="negotiationStarted",Ar="negotiationComplete",Nr="rtpVideoPayloadTypes";class Ur extends ri.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n;super(),this.log=Yn,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=Lr(e=>ti(this,void 0,void 0,function*(){this.emit(Dr);try{yield this.createAndSendOffer()}catch(t){if(!e)throw t;e(t)}}),20),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=Qn(null!==(n=t.loggerName)&&void 0!==n?n:Jn.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC(),this.offerLock=new s}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=e=>{var t;e.candidate&&(null===(t=this.onIceCandidate)||void 0===t||t.call(this,e.candidate))},e.onicecandidateerror=e=>{var t;null===(t=this.onIceCandidateError)||void 0===t||t.call(this,e)},e.oniceconnectionstatechange=()=>{var t;null===(t=this.onIceConnectionStateChange)||void 0===t||t.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var t;null===(t=this.onSignalingStatechange)||void 0===t||t.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var t;null===(t=this.onConnectionStateChange)||void 0===t||t.call(this,e.connectionState)},e.ondatachannel=e=>{var t;null===(t=this.onDataChannel)||void 0===t||t.call(this,e)},e.ontrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)},e}get logContext(){var e,t;return Object.assign({},null===(t=(e=this.loggerOptions).loggerContextCb)||void 0===t?void 0:t.call(e))}get isICEConnected(){return null!==this._pc&&("connected"===this.pc.iceConnectionState||"completed"===this.pc.iceConnectionState)}addIceCandidate(e){return ti(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e,t){return ti(this,void 0,void 0,function*(){var n;if("answer"===e.type&&this.latestOfferId>0&&t>0&&t!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",Object.assign(Object.assign({},this.logContext),{offerId:t,latestOfferId:this.latestOfferId})),!1;let i;if("offer"===e.type){let{stereoMids:t,nackMids:n}=function(e){var t;const n=[],i=[],s=Or.parse(null!==(t=e.sdp)&&void 0!==t?t:"");let o=0;return s.media.forEach(e=>{var t;const s=Br(e.mid);"audio"===e.type&&(e.rtp.some(e=>"opus"===e.codec&&(o=e.payload,!0)),(null===(t=e.rtcpFb)||void 0===t?void 0:t.some(e=>e.payload===o&&"nack"===e.type))&&i.push(s),e.fmtp.some(e=>e.payload===o&&(e.config.includes("sprop-stereo=1")&&n.push(s),!0)))}),{stereoMids:n,nackMids:i}}(e);this.remoteStereoMids=t,this.remoteNackMids=n}else if("answer"===e.type){const t=Or.parse(null!==(n=e.sdp)&&void 0!==n?n:"");t.media.forEach(e=>{const t=Br(e.mid);"audio"===e.type&&this.trackBitrates.some(n=>{if(!n.transceiver||t!=n.transceiver.mid)return!1;let i=0;if(e.rtp.some(e=>e.codec.toUpperCase()===n.codec.toUpperCase()&&(i=e.payload,!0)),0===i)return!0;let s=!1;for(const t of e.fmtp)if(t.payload===i){t.config=t.config.split(";").filter(e=>!e.includes("maxaveragebitrate")).join(";"),n.maxbr>0&&(t.config+=";maxaveragebitrate=".concat(1e3*n.maxbr)),s=!0;break}return s||n.maxbr>0&&e.fmtp.push({payload:i,config:"maxaveragebitrate=".concat(1e3*n.maxbr)}),!0})}),i=Or.write(t)}if(yield this.setMungedSDP(e,i,!0),this.pendingCandidates.forEach(e=>{this.pc.addIceCandidate(e)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate)this.renegotiate=!1,yield this.createAndSendOffer();else if("answer"===e.type&&(this.emit(Ar),e.sdp)){Or.parse(e.sdp).media.forEach(e=>{"video"===e.type&&this.emit(Nr,e.rtp)})}return!0})}createAndSendOffer(e){return ti(this,void 0,void 0,function*(){var t;const n=yield this.offerLock.lock();try{if(void 0===this.onOffer)return;if((null==e?void 0:e.iceRestart)&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&"have-local-offer"===this._pc.signalingState){const t=this._pc.remoteDescription;if(!(null==e?void 0:e.iceRestart)||!t)return void(this.renegotiate=!0);yield this._pc.setRemoteDescription(t)}else if(!this._pc||"closed"===this._pc.signalingState)return void this.log.warn("could not createOffer with closed peer connection",this.logContext);this.log.debug("starting to negotiate",this.logContext);const n=this.latestOfferId+1;this.latestOfferId=n;const i=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:i.sdp},this.logContext));const s=Or.parse(null!==(t=i.sdp)&&void 0!==t?t:"");if(s.media.forEach(e=>{Fr(e),"audio"===e.type?jr(e,["all"],[]):"video"===e.type&&this.trackBitrates.some(t=>{if(!e.msid||!t.cid||!e.msid.includes(t.cid))return!1;let n=0;if(e.rtp.some(e=>e.codec.toUpperCase()===t.codec.toUpperCase()&&(n=e.payload,!0)),0===n)return!0;if(co(t.codec)&&!po()&&this.ensureVideoDDExtensionForSVC(e,s),!co(t.codec))return!0;const i=Math.round(.7*t.maxbr);for(const t of e.fmtp)if(t.payload===n){t.config.includes("x-google-start-bitrate")||(t.config+=";x-google-start-bitrate=".concat(i));break}return!0})}),this.latestOfferId>n)return void this.log.warn("latestOfferId mismatch",Object.assign(Object.assign({},this.logContext),{latestOfferId:this.latestOfferId,offerId:n}));yield this.setMungedSDP(i,Or.write(s)),this.onOffer(i,this.latestOfferId)}finally{n()}})}createAndSetAnswer(){return ti(this,void 0,void 0,function*(){var e;const t=yield this.pc.createAnswer(),n=Or.parse(null!==(e=t.sdp)&&void 0!==e?e:"");return n.media.forEach(e=>{Fr(e),"audio"===e.type&&jr(e,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,Or.write(n)),t})}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTransceiverOfKind(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new Os("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var t;if(!this._pc)throw new Os("PC closed, cannot configure");return null===(t=this._pc)||void 0===t?void 0:t.setConfiguration(e)}canRemoveTrack(){var e;return!!(null===(e=this._pc)||void 0===e?void 0:e.removeTrack)}removeTrack(e){var t;return null===(t=this._pc)||void 0===t?void 0:t.removeTrack(e)}getConnectionState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.connectionState)&&void 0!==t?t:"closed"}getICEConnectionState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.iceConnectionState)&&void 0!==t?t:"closed"}getSignallingState(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.signalingState)&&void 0!==t?t:"closed"}getTransceivers(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.getTransceivers())&&void 0!==t?t:[]}getSenders(){var e,t;return null!==(t=null===(e=this._pc)||void 0===e?void 0:e.getSenders())&&void 0!==t?t:[]}getLocalDescription(){var e;return null===(e=this._pc)||void 0===e?void 0:e.localDescription}getRemoteDescription(){var e;return null===(e=this.pc)||void 0===e?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return ti(this,void 0,void 0,function*(){var e;if(!this._pc)return;let t="";const n=new Map,i=new Map;if((yield this._pc.getStats()).forEach(e=>{switch(e.type){case"transport":t=e.selectedCandidatePairId;break;case"candidate-pair":""===t&&e.selected&&(t=e.id),n.set(e.id,e);break;case"remote-candidate":i.set(e.id,"".concat(e.address,":").concat(e.port))}}),""===t)return;const s=null===(e=n.get(t))||void 0===e?void 0:e.remoteCandidateId;return void 0!==s?i.get(s):void 0})}setMungedSDP(e,t,n){return ti(this,void 0,void 0,function*(){if(t){const i=e.sdp;e.sdp=t;try{return this.log.debug("setting munged ".concat(n?"remote":"local"," description"),this.logContext),void(n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e))}catch(n){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:n,sdp:t})),e.sdp=i}}try{n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(t){let i="unknown error";t instanceof Error?i=t.message:"string"==typeof t&&(i=t);const s={error:i,sdp:e.sdp};throw!n&&this.pc.remoteDescription&&(s.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:s})),new Ls(i)}})}ensureVideoDDExtensionForSVC(e,t){var n,i;if(!(null===(n=e.ext)||void 0===n?void 0:n.some(e=>e.uri===so))){if(0===this.ddExtID){let e=0;t.media.forEach(t=>{var n;"video"===t.type&&(null===(n=t.ext)||void 0===n||n.forEach(t=>{t.value>e&&(e=t.value)}))}),this.ddExtID=e+1}null===(i=e.ext)||void 0===i||i.push({value:this.ddExtID,uri:so})}}}function jr(e,t,n){const i=Br(e.mid);let s=0;e.rtp.some(e=>"opus"===e.codec&&(s=e.payload,!0)),s>0&&(e.rtcpFb||(e.rtcpFb=[]),n.includes(i)&&!e.rtcpFb.some(e=>e.payload===s&&"nack"===e.type)&&e.rtcpFb.push({payload:s,type:"nack"}),(t.includes(i)||1===t.length&&"all"===t[0])&&e.fmtp.some(e=>e.payload===s&&(e.config.includes("stereo=1")||(e.config+=";stereo=1"),!0)))}function Fr(e){if(e.connection){const t=e.connection.ip.indexOf(":")>=0;(4===e.connection.version&&t||6===e.connection.version&&!t)&&(e.connection.ip="0.0.0.0",e.connection.version=4)}}function Br(e){return"number"==typeof e?e.toFixed(0):e}const Vr="vp8",qr={audioPreset:eo.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:io.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Vr,backupCodec:!0,preConnectBuffer:!1},Hr={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Wr={deviceId:{ideal:"default"},resolution:to.h720.resolution},zr={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new class{constructor(e){this._retryDelays=void 0!==e?[...e]:ei}nextRetryDelayInMs(e){if(e.retryCount>=this._retryDelays.length)return null;const t=this._retryDelays[e.retryCount];return e.retryCount>1?t+1e3*Math.random():t}},disconnectOnPageLeave:!0,webAudioMix:!1,singlePeerConnection:!1},Kr={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var Gr;!function(e){e[e.NEW=0]="NEW",e[e.CONNECTING=1]="CONNECTING",e[e.CONNECTED=2]="CONNECTED",e[e.FAILED=3]="FAILED",e[e.CLOSING=4]="CLOSING",e[e.CLOSED=5]="CLOSED"}(Gr||(Gr={}));class Jr{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,t,n){var i;this.peerConnectionTimeout=Kr.peerConnectionTimeout,this.log=Yn,this.updateState=()=>{var e,t;const n=this.state,i=this.requiredTransports.map(e=>e.getConnectionState());i.every(e=>"connected"===e)?this.state=Gr.CONNECTED:i.some(e=>"failed"===e)?this.state=Gr.FAILED:i.some(e=>"connecting"===e)?this.state=Gr.CONNECTING:i.every(e=>"closed"===e)?this.state=Gr.CLOSED:i.some(e=>"closed"===e)?this.state=Gr.CLOSING:i.every(e=>"new"===e)&&(this.state=Gr.NEW),n!==this.state&&(this.log.debug("pc state change: from ".concat(Gr[n]," to ").concat(Gr[this.state]),this.logContext),null===(e=this.onStateChange)||void 0===e||e.call(this,this.state,this.publisher.getConnectionState(),null===(t=this.subscriber)||void 0===t?void 0:t.getConnectionState()))},this.log=Qn(null!==(i=n.loggerName)&&void 0!==i?i:Jn.PCManager),this.loggerOptions=n,this.isPublisherConnectionRequired="subscriber-primary"!==t,this.isSubscriberConnectionRequired="subscriber-primary"===t,this.publisher=new Ur(e,n),"publisher-only"!==t&&(this.subscriber=new Ur(e,n),this.subscriber.onConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.subscriber.onIceCandidate=e=>{var t;null===(t=this.onIceCandidate)||void 0===t||t.call(this,e,Vt.SUBSCRIBER)},this.subscriber.onDataChannel=e=>{var t;null===(t=this.onDataChannel)||void 0===t||t.call(this,e)},this.subscriber.onTrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)}),this.publisher.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=e=>{var t;null===(t=this.onIceCandidate)||void 0===t||t.call(this,e,Vt.PUBLISHER)},this.publisher.onTrack=e=>{var t;null===(t=this.onTrack)||void 0===t||t.call(this,e)},this.publisher.onOffer=(e,t)=>{var n;null===(n=this.onPublisherOffer)||void 0===n||n.call(this,e,t)},this.state=Gr.NEW,this.connectionLock=new s,this.remoteOfferLock=new s}get logContext(){var e,t;return Object.assign({},null===(t=(e=this.loggerOptions).loggerContextCb)||void 0===t?void 0:t.call(e))}requirePublisher(){this.isPublisherConnectionRequired=0>=arguments.length||void 0===arguments[0]||arguments[0],this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e,t){return this.publisher.setRemoteDescription(e,t)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return ti(this,void 0,void 0,function*(){var e;if(this.publisher&&"closed"!==this.publisher.getSignallingState()){const e=this.publisher;for(const t of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(t)}catch(e){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:e}))}}yield Promise.all([this.publisher.close(),null===(e=this.subscriber)||void 0===e?void 0:e.close()]),this.updateState()})}triggerIceRestart(){return ti(this,void 0,void 0,function*(){this.subscriber&&(this.subscriber.restartingIce=!0),this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return ti(this,void 0,void 0,function*(){var n;t===Vt.PUBLISHER?yield this.publisher.addIceCandidate(e):yield null===(n=this.subscriber)||void 0===n?void 0:n.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e,t){return ti(this,void 0,void 0,function*(){var n,i,s;this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:null===(n=this.subscriber)||void 0===n?void 0:""+n.getSignallingState()}));const o=yield this.remoteOfferLock.lock();try{if(!(yield null===(i=this.subscriber)||void 0===i?void 0:i.setRemoteDescription(e,t)))return;return yield null===(s=this.subscriber)||void 0===s?void 0:s.createAndSetAnswer()}finally{o()}})}updateConfiguration(e,t){var n;this.publisher.setConfiguration(e),null===(n=this.subscriber)||void 0===n||n.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return ti(this,void 0,void 0,function*(){var n;const i=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&"connected"!==this.publisher.getConnectionState()&&"connecting"!==this.publisher.getConnectionState()&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all(null===(n=this.requiredTransports)||void 0===n?void 0:n.map(n=>this.ensureTransportConnected(n,e,t)))}finally{i()}})}negotiate(e){return ti(this,void 0,void 0,function*(){return new Promise((t,n)=>ti(this,void 0,void 0,function*(){const i=setTimeout(()=>{n("negotiation timed out")},this.peerConnectionTimeout);e.signal.addEventListener("abort",()=>{clearTimeout(i),n("negotiation aborted")}),this.publisher.once(Dr,()=>{e.signal.aborted||this.publisher.once(Ar,()=>{clearTimeout(i),t()})}),yield this.publisher.negotiate(e=>{clearTimeout(i),n(e)})}))})}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTransceiverOfKind(e,t){return this.publisher.addTransceiverOfKind(e,t)}getMidForReceiver(e){const t=(this.subscriber?this.subscriber.getTransceivers():this.publisher.getTransceivers()).find(t=>t.receiver===e);return null==t?void 0:t.mid}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===Vt.PUBLISHER||e===Vt.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&this.subscriber&&e.push(this.subscriber),e}ensureTransportConnected(e,t){return ti(this,arguments,void 0,function(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.peerConnectionTimeout;return function*(){if("connected"!==e.getConnectionState())return new Promise((e,s)=>ti(n,void 0,void 0,function*(){const n=()=>{this.log.warn("abort transport connection",this.logContext),Hs.clearTimeout(o),s(new Ps("room connection has been cancelled",vs.Cancelled))};(null==t?void 0:t.signal.aborted)&&n(),null==t||t.signal.addEventListener("abort",n);const o=Hs.setTimeout(()=>{null==t||t.signal.removeEventListener("abort",n),s(new Ps("could not establish pc connection",vs.InternalError))},i);for(;this.state!==Gr.CONNECTED;)if(yield oo(50),null==t?void 0:t.signal.aborted)return void s(new Ps("room connection has been cancelled",vs.Cancelled));Hs.clearTimeout(o),null==t||t.signal.removeEventListener("abort",n),e()}))}()})}}class $r{static fetchRegionSettings(e,t,n){return ti(this,void 0,void 0,function*(){const i=yield $r.fetchLock.lock();try{const i=yield fetch("".concat(function(e){return"".concat(e.protocol.replace("ws","http"),"//").concat(e.host,"/settings")}(e),"/regions"),{headers:{authorization:"Bearer ".concat(t)},signal:n});if(i.ok){const e=function(e){var t;const n=e.get("Cache-Control");if(n){const e=null===(t=n.match(/(?:^|[,\s])max-age=(\d+)/))||void 0===t?void 0:t[1];if(e)return parseInt(e,10)}}(i.headers),t=e?1e3*e:5e3;return{regionSettings:yield i.json(),updatedAtInMs:Date.now(),maxAgeInMs:t}}throw new Ps("Could not fetch region settings: ".concat(i.statusText),401===i.status?vs.NotAllowed:vs.InternalError,i.status)}catch(e){throw e instanceof Ps?e:(null==n?void 0:n.aborted)?new Ps("Region fetching was aborted",vs.Cancelled):new Ps("Could not fetch region settings, ".concat(e instanceof Error?"".concat(e.name,": ").concat(e.message):e),vs.ServerUnreachable,500)}finally{i()}})}static scheduleRefetch(e,t,n){return ti(this,void 0,void 0,function*(){const i=$r.settingsTimeouts.get(e.hostname);clearTimeout(i),$r.settingsTimeouts.set(e.hostname,setTimeout(()=>ti(this,void 0,void 0,function*(){try{const n=yield $r.fetchRegionSettings(e,t);$r.updateCachedRegionSettings(e,t,n)}catch(i){if(i instanceof Ps&&i.reason===vs.NotAllowed)return void Yn.debug("token is not valid, cancelling auto region refresh");Yn.debug("auto refetching of region settings failed",{error:i}),$r.scheduleRefetch(e,t,n)}}),n))})}static updateCachedRegionSettings(e,t,n){$r.cache.set(e.hostname,n),$r.scheduleRefetch(e,t,n.maxAgeInMs)}static stopRefetch(e){const t=$r.settingsTimeouts.get(e);t&&(clearTimeout(t),$r.settingsTimeouts.delete(e))}static scheduleCleanup(e){let t=$r.connectionTrackers.get(e);t&&(t.cleanupTimeout&&clearTimeout(t.cleanupTimeout),t.cleanupTimeout=setTimeout(()=>{const t=$r.connectionTrackers.get(e);t&&0===t.connectionCount&&(Yn.debug("stopping region refetch after disconnect delay",{hostname:e}),$r.stopRefetch(e)),t&&(t.cleanupTimeout=void 0)},3e4))}static cancelCleanup(e){const t=$r.connectionTrackers.get(e);(null==t?void 0:t.cleanupTimeout)&&(clearTimeout(t.cleanupTimeout),t.cleanupTimeout=void 0)}notifyConnected(){const e=this.serverUrl.hostname;let t=$r.connectionTrackers.get(e);t||(t={connectionCount:0},$r.connectionTrackers.set(e,t)),t.connectionCount++,$r.cancelCleanup(e)}notifyDisconnected(){const e=this.serverUrl.hostname,t=$r.connectionTrackers.get(e);t&&(t.connectionCount=Math.max(0,t.connectionCount-1),0===t.connectionCount&&$r.scheduleCleanup(e))}constructor(e,t){this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){this.token=e}isCloud(){return yo(this.serverUrl)}getServerUrl(){return this.serverUrl}fetchRegionSettings(e){return ti(this,void 0,void 0,function*(){return $r.fetchRegionSettings(this.serverUrl,this.token,e)})}getNextBestRegionUrl(e){return ti(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");let t=$r.cache.get(this.serverUrl.hostname);t&&Date.now()-t.updatedAtInMs<=t.maxAgeInMs||(t=yield this.fetchRegionSettings(e),$r.updateCachedRegionSettings(this.serverUrl,this.token,t));const n=t.regionSettings.regions.filter(e=>!this.attemptedRegions.find(t=>t.url===e.url));if(n.length>0){const e=n[0];return this.attemptedRegions.push(e),Yn.debug("next region: ".concat(e.region)),e.url}return null})}resetAttempts(){this.attemptedRegions=[]}setServerReportedRegions(e){$r.updateCachedRegionSettings(this.serverUrl,this.token,e)}}$r.cache=new Map,$r.settingsTimeouts=new Map,$r.connectionTrackers=new Map,$r.fetchLock=new s;class Yr extends Error{constructor(e,t,n){super(t),this.code=e,this.message=Xr(t,Yr.MAX_MESSAGE_BYTES),this.data=n?Xr(n,Yr.MAX_DATA_BYTES):void 0}static fromProto(e){return new Yr(e.code,e.message,e.data)}toProto(){return new wt({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new Yr(Yr.ErrorCode[e],Yr.ErrorMessage[e],t)}}Yr.MAX_MESSAGE_BYTES=256,Yr.MAX_DATA_BYTES=15360,Yr.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},Yr.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"};function Qr(e){return(new TextEncoder).encode(e).length}function Xr(e,t){if(Qr(e)<=t)return e;let n=0,i=e.length;const s=new TextEncoder;for(;i>n;){const o=Math.floor((n+i+1)/2);s.encode(e.slice(0,o)).length>t?i=o-1:n=o}return e.slice(0,n)}const Zr=2e3;function ea(e,t){if(!t)return 0;let n,i;return"bytesReceived"in e?(n=e.bytesReceived,i=t.bytesReceived):"bytesSent"in e&&(n=e.bytesSent,i=t.bytesSent),void 0===n||void 0===i||void 0===e.timestamp||void 0===t.timestamp?0:8*(n-i)*1e3/(e.timestamp-t.timestamp)}const ta="undefined"!=typeof MediaRecorder;const na=ta?MediaRecorder:class{constructor(){throw Error("MediaRecorder is not available in this environment")}};class ia extends na{constructor(e,t){if(!ta)throw Error("MediaRecorder is not available in this environment");let n,i;super(new MediaStream([e.mediaStreamTrack]),t);const s=()=>{this.removeEventListener("dataavailable",n),this.removeEventListener("stop",s),this.removeEventListener("error",o),null==i||i.close(),i=void 0},o=e=>{null==i||i.error(e),this.removeEventListener("dataavailable",n),this.removeEventListener("stop",s),this.removeEventListener("error",o),i=void 0};this.byteStream=new ReadableStream({start:e=>{i=e,n=t=>ti(this,void 0,void 0,function*(){let n;if(t.data.arrayBuffer){const e=yield t.data.arrayBuffer();n=new Uint8Array(e)}else{if(!t.data.byteArray)throw Error("no data available!");n=t.data.byteArray}void 0!==i&&e.enqueue(n)}),this.addEventListener("dataavailable",n)},cancel:()=>{s()}}),this.addEventListener("stop",s),this.addEventListener("error",o)}}class sa extends Ks{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];super(e,t,arguments.length>4?arguments[4]:void 0),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=Lr(()=>ti(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>ti(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(ws.Ended,this)},this.reacquireTrack=!1,this.providedByUser=i,this.muteLock=new s,this.pauseUpstreamLock=new s,this.trackChangeLock=new s,this.trackChangeLock.lock().then(t=>ti(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(e,!0)}finally{t()}})),this._constraints=e.getConstraints(),n&&(this._constraints=n)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==Ks.Kind.Video)return;const{width:e,height:t}=this._mediaStreamTrack.getSettings();return e&&t?{width:e,height:t}:void 0}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,t;return null!==(t=null===(e=this.processor)||void 0===e?void 0:e.processedTrack)&&void 0!==t?t:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,t){return ti(this,void 0,void 0,function*(){var n;if(e===this._mediaStreamTrack&&!t)return;let i;if(this._mediaStreamTrack&&(this.attachedElements.forEach(e=>{Js(this._mediaStreamTrack,e)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints()),this.processor&&e){if(this.log.debug("restarting processor",this.logContext),"unknown"===this.kind)throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Gs(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),i=this.processor.processedTrack}this.sender&&"closed"!==(null===(n=this.sender.transport)||void 0===n?void 0:n.state)&&(yield this.sender.replaceTrack(null!=i?i:e)),this.providedByUser||this._mediaStreamTrack===e||this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(t=>{Gs(null!=i?i:e,t)}))})}waitForDimensions(){return ti(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;return function*(){var n;if(e.kind===Ks.Kind.Audio)throw Error("cannot get dimensions for audio tracks");"iOS"===(null===(n=Fs())||void 0===n?void 0:n.os)&&(yield oo(10));const i=Date.now();for(;Date.now()-i<t;){const t=e.dimensions;if(t)return t;yield oo(50)}throw new xs("unable to get track dimensions after timeout")}()})}setDeviceId(e){return ti(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===Do(e)||(this._constraints.deviceId=e,!!this.isMuted||(yield this.restartTrack(),Do(e)===this._mediaStreamTrack.getSettings().deviceId))})}getDeviceId(){return ti(this,arguments,void 0,function(){var e=this;let t=0>=arguments.length||void 0===arguments[0]||arguments[0];return function*(){if(e.source===Ks.Source.ScreenShare)return;const{deviceId:n,groupId:i}=e._mediaStreamTrack.getSettings(),s=e.kind===Ks.Kind.Audio?"audioinput":"videoinput";return t?cr.getInstance().normalizeDeviceId(s,n,i):n}()})}mute(){return ti(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return ti(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,t){return ti(this,void 0,void 0,function*(){const n=yield this.trackChangeLock.lock();try{if(!this.sender)throw new xs("unable to replace an unpublished track");let n,i;return"boolean"==typeof t?n=t:void 0!==t&&(n=t.userProvidedTrack,i=t.stopProcessor),this.providedByUser=null==n||n,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),i&&this.processor&&(yield this.internalStopProcessor()),this}finally{n()}})}restart(e){return ti(this,void 0,void 0,function*(){this.manuallyStopped=!1;const t=yield this.trackChangeLock.lock();try{e||(e=this._constraints);const{deviceId:t,facingMode:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);i.length>s;s++)0>t.indexOf(i[s])&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const s={audio:!1,video:!1};this.kind===Ks.Kind.Video?s.video=!t&&!n||{deviceId:t,facingMode:n}:s.audio=!t||Object.assign({deviceId:t},i),this.attachedElements.forEach(e=>{Js(this.mediaStreamTrack,e)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const o=(yield navigator.mediaDevices.getUserMedia(s)).getTracks()[0];return this.kind===Ks.Kind.Video&&(yield o.applyConstraints(i)),o.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(o),this._constraints=e,this.emit(ws.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{t()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),this.isMuted===e&&this._mediaStreamTrack.enabled!==e||(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?ws.Muted:ws.Unmuted,this))}get needsReAcquisition(){return"live"!==this._mediaStreamTrack.readyState||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ti(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),go()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),this.isInBackground||!this.needsReAcquisition||this.isUserProvided||this.isMuted||(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),null===(e=this.processor)||void 0===e||e.destroy(),this.processor=void 0}pauseUpstream(){return ti(this,void 0,void 0,function*(){var e;const t=yield this.pauseUpstreamLock.lock();try{if(!0===this._isUpstreamPaused)return;if(!this.sender)return void this.log.warn("unable to pause upstream for an unpublished track",this.logContext);this._isUpstreamPaused=!0,this.emit(ws.UpstreamPaused,this);const t=Fs();if("Safari"===(null==t?void 0:t.name)&&0>So(t.version,"12.0"))throw new Is("pauseUpstream is not supported on Safari < 12.");"closed"!==(null===(e=this.sender.transport)||void 0===e?void 0:e.state)&&(yield this.sender.replaceTrack(null))}finally{t()}})}resumeUpstream(){return ti(this,void 0,void 0,function*(){var e;const t=yield this.pauseUpstreamLock.lock();try{if(!1===this._isUpstreamPaused)return;if(!this.sender)return void this.log.warn("unable to resume upstream for an unpublished track",this.logContext);this._isUpstreamPaused=!1,this.emit(ws.UpstreamResumed,this),"closed"!==(null===(e=this.sender.transport)||void 0===e?void 0:e.state)&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{t()}})}getRTCStatsReport(){return ti(this,void 0,void 0,function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return;return yield this.sender.getStats()})}setProcessor(e){return ti(this,arguments,void 0,function(e){var t=this;let n=1>=arguments.length||void 0===arguments[1]||arguments[1];return function*(){var i;const s=yield t.trackChangeLock.lock();try{t.log.debug("setting up processor",t.logContext);const s=document.createElement(t.kind),o={kind:t.kind,track:t._mediaStreamTrack,element:s,audioContext:t.audioContext};if(yield e.init(o),t.log.debug("processor initialized",t.logContext),t.processor&&(yield t.internalStopProcessor()),"unknown"===t.kind)throw TypeError("cannot set processor on track of unknown kind");if(Gs(t._mediaStreamTrack,s),s.muted=!0,s.play().catch(e=>{e instanceof DOMException&&"AbortError"===e.name?(t.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},t.logContext),{error:e})),setTimeout(()=>{s.play().catch(e=>{t.log.error("failed to play processor element",Object.assign(Object.assign({},t.logContext),{err:e}))})},100)):t.log.error("failed to play processor element",Object.assign(Object.assign({},t.logContext),{error:e}))}),t.processor=e,t.processorElement=s,t.processor.processedTrack){for(const e of t.attachedElements)e!==t.processorElement&&n&&(Js(t._mediaStreamTrack,e),Gs(t.processor.processedTrack,e));yield null===(i=t.sender)||void 0===i?void 0:i.replaceTrack(t.processor.processedTrack)}t.emit(ws.TrackProcessorUpdate,t.processor)}finally{s()}}()})}getProcessor(){return this.processor}stopProcessor(){return ti(this,arguments,void 0,function(){var e=this;let t=0>=arguments.length||void 0===arguments[0]||arguments[0];return function*(){const n=yield e.trackChangeLock.lock();try{yield e.internalStopProcessor(t)}finally{n()}}()})}internalStopProcessor(){return ti(this,arguments,void 0,function(){var e=this;let t=0>=arguments.length||void 0===arguments[0]||arguments[0];return function*(){var n,i;e.processor&&(e.log.debug("stopping processor",e.logContext),null===(n=e.processor.processedTrack)||void 0===n||n.stop(),yield e.processor.destroy(),e.processor=void 0,t||(null===(i=e.processorElement)||void 0===i||i.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(ws.TrackProcessorUpdate))}()})}startPreConnectBuffer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;if(ta)if(this.localTrackRecorder)this.log.warn("preconnect buffer already started");else{{let e="audio/webm;codecs=opus";MediaRecorder.isTypeSupported(e)||(e="video/mp4"),this.localTrackRecorder=new ia(this,{mimeType:e})}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},1e4)}else this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext)}stopPreConnectBuffer(){clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder&&(this.localTrackRecorder.stop(),this.localTrackRecorder=void 0)}getPreConnectBuffer(){var e;return null===(e=this.localTrackRecorder)||void 0===e?void 0:e.byteStream}getPreConnectBufferMimeType(){var e;return null===(e=this.localTrackRecorder)||void 0===e?void 0:e.mimeType}}class oa extends sa{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,t){let n=arguments.length>3?arguments[3]:void 0;super(e,Ks.Kind.Audio,t,2>=arguments.length||void 0===arguments[2]||arguments[2],arguments.length>4?arguments[4]:void 0),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>ti(this,void 0,void 0,function*(){if(!this.sender)return void(this._currentBitrate=0);let e;try{e=yield this.getSenderStats()}catch(e){return void this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:e}))}e&&this.prevStats&&(this._currentBitrate=ea(e,this.prevStats)),this.prevStats=e}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(ws.AudioTrackFeatureUpdate,this,Qe.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(ws.AudioTrackFeatureUpdate,this,Qe.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=n,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ti(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Ks.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ti(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const t=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Do(this._constraints.deviceId);return this.source!==Ks.Source.Microphone||!this.stopOnMute&&"ended"!==this._mediaStreamTrack.readyState&&!t||this.isUserProvided||(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{t()}})}restartTrack(e){return ti(this,void 0,void 0,function*(){let t;if(e){const n=$o({audio:e});"boolean"!=typeof n.audio&&(t=n.audio)}yield this.restart(t)})}restart(e){const t=Object.create(null,{restart:{get:()=>super.restart}});return ti(this,void 0,void 0,function*(){const n=yield t.restart.call(this,e);return this.checkForSilence(),n})}startMonitor(){fo()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Zr)))}setProcessor(e){return ti(this,void 0,void 0,function*(){var t;const n=yield this.trackChangeLock.lock();try{if(!vo()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.internalStopProcessor());const n={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(n),this.processor=e,this.processor.processedTrack&&(yield null===(t=this.sender)||void 0===t?void 0:t.replaceTrack(this.processor.processedTrack),this.processor.processedTrack.addEventListener("enable-lk-krisp-noise-filter",this.handleKrispNoiseFilterEnable),this.processor.processedTrack.addEventListener("disable-lk-krisp-noise-filter",this.handleKrispNoiseFilterDisable)),this.emit(ws.TrackProcessorUpdate,this.processor)}finally{n()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return ti(this,void 0,void 0,function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return;let t;return(yield this.sender.getStats()).forEach(e=>{"outbound-rtp"===e.type&&(t={type:"audio",streamId:e.id,packetsSent:e.packetsSent,packetsLost:e.packetsLost,bytesSent:e.bytesSent,timestamp:e.timestamp,roundTripTime:e.roundTripTime,jitter:e.jitter})}),t})}checkForSilence(){return ti(this,void 0,void 0,function*(){const e=yield Yo(this);return e&&(this.isMuted||this.log.debug("silence detected on local audio track",this.logContext),this.emit(ws.AudioSilenceDetected)),e})}}const ra=Object.values(to),aa=Object.values(no),ca=Object.values(io),da=[to.h180,to.h360],la=[no.h180,no.h360],ua=["q","h","f"];function ha(e,t,n,i){var s,o;let r=null==i?void 0:i.videoEncoding;e&&(r=null==i?void 0:i.screenShareEncoding);const a=null==i?void 0:i.simulcast,c=null==i?void 0:i.scalabilityMode,d=null==i?void 0:i.videoCodec;if(!r&&!a&&!c||!t||!n)return[{}];r||(r=function(e,t,n,i){const s=function(e,t,n){if(e)return ca;const i=t>n?t/n:n/t;if(Math.abs(i-4/3)>Math.abs(i-16/9))return ra;return aa}(e,t,n);let{encoding:o}=s[0];const r=Math.max(t,n);for(let e=0;s.length>e;e+=1){const t=s[e];if(o=t.encoding,t.width>=r)break}if(i)switch(i){case"av1":case"h265":o=Object.assign({},o),o.maxBitrate=.7*o.maxBitrate;break;case"vp9":o=Object.assign({},o),o.maxBitrate=.85*o.maxBitrate}return o}(e,t,n,d),Yn.debug("using video encoding",r));const l=r.maxFramerate,u=new $s(t,n,r.maxBitrate,r.maxFramerate,r.priority);if(c&&co(d)){const e=new fa(c),t=[];if(e.spatial>3)throw Error("unsupported scalabilityMode: ".concat(c));const n=Fs();if(mo()||vo()||"Chrome"===(null==n?void 0:n.name)&&0>So(null==n?void 0:n.version,"113")){const i="h"==e.suffix?2:3,s=function(e){return e||(e=Fs()),"Safari"===(null==e?void 0:e.name)&&So(e.version,"18.3")>0||"iOS"===(null==e?void 0:e.os)&&!!(null==e?void 0:e.osVersion)&&So(e.osVersion,"18.3")>0}(n);for(let n=0;e.spatial>n;n+=1)t.push({rid:ua[2-n],maxBitrate:r.maxBitrate/Math.pow(i,n),maxFramerate:u.encoding.maxFramerate,scaleResolutionDownBy:s?Math.pow(2,n):void 0});t[0].scalabilityMode=c}else t.push({maxBitrate:r.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:c});return u.encoding.priority&&(t[0].priority=u.encoding.priority,t[0].networkPriority=u.encoding.priority),Yn.debug("using svc encoding",{encodings:t}),t}if(!a)return[r];let h,p=[];if(p=e?null!==(s=ga(null==i?void 0:i.screenShareSimulcastLayers))&&void 0!==s?s:pa(e,u):null!==(o=ga(null==i?void 0:i.videoSimulcastLayers))&&void 0!==o?o:pa(e,u),p.length>0){const e=p[0];p.length>1&&([,h]=p);const i=Math.max(t,n);if(i>=960&&h)return ma(t,n,[e,h,u],l);if(i>=480)return ma(t,n,[e,u],l)}return ma(t,n,[u])}function pa(e,t){if(e)return[{scaleResolutionDownBy:2,fps:(n=t).encoding.maxFramerate}].map(e=>{var t,i;return new $s(Math.floor(n.width/e.scaleResolutionDownBy),Math.floor(n.height/e.scaleResolutionDownBy),Math.max(15e4,Math.floor(n.encoding.maxBitrate/(Math.pow(e.scaleResolutionDownBy,2)*((null!==(t=n.encoding.maxFramerate)&&void 0!==t?t:30)/(null!==(i=e.fps)&&void 0!==i?i:30))))),e.fps,n.encoding.priority)});var n;const{width:i,height:s}=t,o=i>s?i/s:s/i;return Math.abs(o-4/3)>Math.abs(o-16/9)?da:la}function ma(e,t,n,i){const s=[];if(n.forEach((n,o)=>{if(o>=ua.length)return;const r={rid:ua[o],scaleResolutionDownBy:Math.max(1,Math.min(e,t)/Math.min(n.width,n.height)),maxBitrate:n.encoding.maxBitrate},a=i&&n.encoding.maxFramerate?Math.min(i,n.encoding.maxFramerate):n.encoding.maxFramerate;a&&(r.maxFramerate=a);const c=uo()||0===o;n.encoding.priority&&c&&(r.priority=n.encoding.priority,r.networkPriority=n.encoding.priority),s.push(r)}),vo()&&"ios"===Co()){let e;s.forEach(t=>{e?t.maxFramerate&&t.maxFramerate>e&&(e=t.maxFramerate):e=t.maxFramerate});let t=!0;s.forEach(n=>{var i;n.maxFramerate!=e&&(t&&(t=!1,Yn.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),Yn.info('Setting framerate of encoding "'.concat(null!==(i=n.rid)&&void 0!==i?i:"",'" to ').concat(e)),n.maxFramerate=e)})}return s}function ga(e){if(e)return e.sort((e,t)=>{const{encoding:n}=e,{encoding:i}=t;return n.maxBitrate>i.maxBitrate?1:i.maxBitrate>n.maxBitrate?-1:n.maxBitrate===i.maxBitrate&&n.maxFramerate&&i.maxFramerate?n.maxFramerate>i.maxFramerate?1:-1:0})}class fa{constructor(e){const t=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!t)throw Error("invalid scalability mode");if(this.spatial=parseInt(t[1]),this.temporal=parseInt(t[2]),t.length>3)switch(t[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=t[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat(null!==(e=this.suffix)&&void 0!==e?e:"")}}class va extends sa{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,t){super(e,Ks.Kind.Video,t,2>=arguments.length||void 0===arguments[2]||arguments[2],arguments.length>3?arguments[3]:void 0),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>ti(this,void 0,void 0,function*(){if(!this.sender)return void(this._currentBitrate=0);let e;try{e=yield this.getSenderStats()}catch(e){return void this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:e}))}const t=new Map(e.map(e=>[e.rid,e])),n=e.some(e=>"cpu"===e.qualityLimitationReason);if(n!==this.isCpuConstrained&&(this.isCpuConstrained=n,this.isCpuConstrained&&this.emit(ws.CpuConstrained)),this.prevStats){let e=0;t.forEach((t,n)=>{var i;const s=null===(i=this.prevStats)||void 0===i?void 0:i.get(n);e+=ea(t,s)}),this._currentBitrate=e}this.prevStats=t}),this.senderLock=new s}get isSimulcast(){return!(!this.sender||1>=this.sender.getParameters().encodings.length)}startMonitor(e){var t;if(this.signalClient=e,!fo())return;const n=null===(t=this.sender)||void 0===t?void 0:t.getParameters();n&&(this.encodings=n.encodings),this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},Zr))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return ti(this,void 0,void 0,function*(){var t,n,i,s;yield e.pauseUpstream.call(this);try{for(var o,r=!0,a=ii(this.simulcastCodecs.values());!(t=(o=yield a.next()).done);r=!0){r=!1;const e=o.value;yield null===(s=e.sender)||void 0===s?void 0:s.replaceTrack(null)}}catch(e){n={error:e}}finally{try{r||t||!(i=a.return)||(yield i.call(a))}finally{if(n)throw n.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return ti(this,void 0,void 0,function*(){var t,n,i,s;yield e.resumeUpstream.call(this);try{for(var o,r=!0,a=ii(this.simulcastCodecs.values());!(t=(o=yield a.next()).done);r=!0){r=!1;const e=o.value;yield null===(s=e.sender)||void 0===s?void 0:s.replaceTrack(e.mediaStreamTrack)}}catch(e){n={error:e}}finally{try{r||t||!(i=a.return)||(yield i.call(a))}finally{if(n)throw n.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ti(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source!==Ks.Source.Camera||this.isUserProvided||(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ti(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source!==Ks.Source.Camera||this.isUserProvided||(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{t()}})}setTrackMuted(e){super.setTrackMuted(e);for(const t of this.simulcastCodecs.values())t.mediaStreamTrack.enabled=!e}getSenderStats(){return ti(this,void 0,void 0,function*(){var e;if(!(null===(e=this.sender)||void 0===e?void 0:e.getStats))return[];const t=[],n=yield this.sender.getStats();return n.forEach(e=>{var i;if("outbound-rtp"===e.type){const s={type:"video",streamId:e.id,frameHeight:e.frameHeight,frameWidth:e.frameWidth,framesPerSecond:e.framesPerSecond,framesSent:e.framesSent,firCount:e.firCount,pliCount:e.pliCount,nackCount:e.nackCount,packetsSent:e.packetsSent,bytesSent:e.bytesSent,qualityLimitationReason:e.qualityLimitationReason,qualityLimitationDurations:e.qualityLimitationDurations,qualityLimitationResolutionChanges:e.qualityLimitationResolutionChanges,rid:null!==(i=e.rid)&&void 0!==i?i:e.id,retransmittedPacketsSent:e.retransmittedPacketsSent,targetBitrate:e.targetBitrate,timestamp:e.timestamp},o=n.get(e.remoteId);o&&(s.jitter=o.jitter,s.packetsLost=o.packetsLost,s.roundTripTime=o.roundTripTime),t.push(s)}}),t.sort((e,t)=>{var n,i;return(null!==(n=t.frameWidth)&&void 0!==n?n:0)-(null!==(i=e.frameWidth)&&void 0!==i?i:0)}),t})}setPublishingQuality(e){const t=[];for(let n=zs.LOW;zs.HIGH>=n;n+=1)t.push(new yn({quality:n,enabled:e>=n}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(co(this.codec),t)}restartTrack(e){return ti(this,void 0,void 0,function*(){var t,n,i,s;let o;if(e){const t=$o({video:e});"boolean"!=typeof t.video&&(o=t.video)}yield this.restart(o),this.isCpuConstrained=!1;try{for(var r,a=!0,c=ii(this.simulcastCodecs.values());!(t=(r=yield c.next()).done);a=!0){a=!1;const e=r.value;e.sender&&"closed"!==(null===(s=e.sender.transport)||void 0===s?void 0:s.state)&&(e.mediaStreamTrack=this.mediaStreamTrack.clone(),yield e.sender.replaceTrack(e.mediaStreamTrack))}}catch(e){n={error:e}}finally{try{a||t||!(i=c.return)||(yield i.call(c))}finally{if(n)throw n.error}}})}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return ti(this,arguments,void 0,function(e){var n=this;let i=1>=arguments.length||void 0===arguments[1]||arguments[1];return function*(){var s,o,r,a,c;if(yield t.setProcessor.call(n,e,i),null===(a=n.processor)||void 0===a?void 0:a.processedTrack)try{for(var d,l=!0,u=ii(n.simulcastCodecs.values());!(s=(d=yield u.next()).done);l=!0){l=!1;const e=d.value;yield null===(c=e.sender)||void 0===c?void 0:c.replaceTrack(n.processor.processedTrack)}}catch(e){o={error:e}}finally{try{l||s||!(r=u.return)||(yield r.call(u))}finally{if(o)throw o.error}}}()})}setDegradationPreference(e){return ti(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const t=this.sender.getParameters();t.degradationPreference=e,this.sender.setParameters(t)}catch(e){this.log.warn("failed to set degradationPreference",Object.assign({error:e},this.logContext))}})}addSimulcastTrack(e,t){if(this.simulcastCodecs.has(e))return void this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);const n={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:t};return this.simulcastCodecs.set(e,n),n}setSimulcastTrackSender(e,t){const n=this.simulcastCodecs.get(e);n&&(n.sender=t,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},5e3))}setPublishingCodecs(e){return ti(this,void 0,void 0,function*(){var t,n,i,s,o,r;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(co(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const a=[];try{for(t=!0,n=ii(e);!(s=(i=yield n.next()).done);t=!0){t=!1;const e=i.value;if(this.codec&&this.codec!==e.codec){const t=this.simulcastCodecs.get(e.codec);if(this.log.debug("try setPublishingCodec for ".concat(e.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:t})),t&&t.sender)t.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(e.codec),this.logContext),yield ya(t.sender,t.encodings,e.qualities,this.senderLock,co(e.codec),this.log,this.logContext));else for(const t of e.qualities)if(t.enabled){a.push(e.codec);break}}else yield this.setPublishingLayers(co(e.codec),e.qualities)}}catch(e){o={error:e}}finally{try{t||s||!(r=n.return)||(yield r.call(n))}finally{if(o)throw o.error}}return a})}setPublishingLayers(e,t){return ti(this,void 0,void 0,function*(){this.optimizeForPerformance?this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:t})):(this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),this.sender&&this.encodings&&(yield ya(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext)))})}prioritizePerformance(){return ti(this,void 0,void 0,function*(){if(!this.sender)throw Error("sender not found");const e=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;const e=this.sender.getParameters();e.encodings=e.encodings.map((e,t)=>{var n;return Object.assign(Object.assign({},e),{active:0===t,scaleResolutionDownBy:Math.max(1,Math.ceil((null!==(n=this.mediaStreamTrack.getSettings().height)&&void 0!==n?n:360)/360)),scalabilityMode:0===t&&co(this.codec)?"L1T3":void 0,maxFramerate:0===t?15:0,maxBitrate:0===t?e.maxBitrate:0})}),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:e.encodings})),this.encodings=e.encodings,yield this.sender.setParameters(e)}catch(e){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:e})),this.optimizeForPerformance=!1}finally{e()}})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ti(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),go()&&this.isInBackground&&this.source===Ks.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function ya(e,t,n,i,s,o,r){return ti(this,void 0,void 0,function*(){const a=yield i.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},r),{sender:e,qualities:n,senderEncodings:t}));try{const i=e.getParameters(),{encodings:a}=i;if(!a)return;if(a.length!==t.length)return void o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},r),{encodings:a,senderEncodings:t}));let c=!1;if(!1&&a[0].scalabilityMode);else{if(s){n.some(e=>e.enabled)&&n.forEach(e=>e.enabled=!0)}a.forEach((e,i)=>{var s;let a=null!==(s=e.rid)&&void 0!==s?s:"";""===a&&(a="q");const d=ba(a),l=n.find(e=>e.quality===d);l&&e.active!==l.enabled&&(c=!0,e.active=l.enabled,o.debug("setting layer ".concat(l.quality," to ").concat(e.active?"enabled":"disabled"),r),uo()&&(l.enabled?(e.scaleResolutionDownBy=t[i].scaleResolutionDownBy,e.maxBitrate=t[i].maxBitrate,e.maxFrameRate=t[i].maxFrameRate):(e.scaleResolutionDownBy=4,e.maxBitrate=10,e.maxFrameRate=2)))})}c&&(i.encodings=a,o.debug("setting encodings",Object.assign(Object.assign({},r),{encodings:i.encodings})),yield e.setParameters(i))}finally{a()}})}function ba(e){switch(e){case"f":default:return zs.HIGH;case"h":return zs.MEDIUM;case"q":return zs.LOW}}function ka(e,t,n,i){if(!n)return[new ct({quality:zs.HIGH,width:e,height:t,bitrate:0,ssrc:0})];if(i){const i=new fa(n[0].scalabilityMode),s=[],o="h"==i.suffix?1.5:2,r="h"==i.suffix?2:3;for(let a=0;i.spatial>a;a+=1)s.push(new ct({quality:Math.min(zs.HIGH,i.spatial-1)-a,width:Math.ceil(e/Math.pow(o,a)),height:Math.ceil(t/Math.pow(o,a)),bitrate:n[0].maxBitrate?Math.ceil(n[0].maxBitrate/Math.pow(r,a)):0,ssrc:0}));return s}return n.map(n=>{var i,s,o;const r=null!==(i=n.scaleResolutionDownBy)&&void 0!==i?i:1;let a=ba(null!==(s=n.rid)&&void 0!==s?s:"");return new ct({quality:a,width:Math.ceil(e/r),height:Math.ceil(t/r),bitrate:null!==(o=n.maxBitrate)&&void 0!==o?o:0,ssrc:0})})}const Ca="_lossy",Ta="_reliable",Sa="leave-reconnect";var wa;!function(e){e[e.New=0]="New",e[e.Connected=1]="Connected",e[e.Disconnected=2]="Disconnected",e[e.Reconnecting=3]="Reconnecting",e[e.Closed=4]="Closed"}(wa||(wa={}));class Ea extends ri.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=Kr.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=wa.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=Yn,this.reliableDataSequence=1,this.reliableMessageBuffer=new br,this.reliableReceivedState=new kr(3e4),this.midToTrackId={},this.isWaitingForNetworkReconnect=!1,this.handleDataChannel=e=>ti(this,[e],void 0,function(e){var t=this;let{channel:n}=e;return function*(){if(n){if(n.label===Ta)t.reliableDCSub=n;else{if(n.label!==Ca)return;t.lossyDCSub=n}t.log.debug("on data channel ".concat(n.id,", ").concat(n.label),t.logContext),n.onmessage=t.handleDataMessage}}()}),this.handleDataMessage=e=>ti(this,void 0,void 0,function*(){var t,n,i,s,o;const r=yield this.dataProcessLock.lock();try{let r;if(e.data instanceof ArrayBuffer)r=e.data;else{if(!(e.data instanceof Blob))return void this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:e.data}));r=yield e.data.arrayBuffer()}const a=lt.fromBinary(new Uint8Array(r));if(a.sequence>0&&""!==a.participantSid){const e=this.reliableReceivedState.get(a.participantSid);if(e&&e>=a.sequence)return;this.reliableReceivedState.set(a.participantSid,a.sequence)}if("speaker"===(null===(t=a.value)||void 0===t?void 0:t.case))this.emit(Ss.ActiveSpeakersUpdate,a.value.value.speakers);else if("encryptedPacket"===(null===(n=a.value)||void 0===n?void 0:n.case)){if(!this.e2eeManager)return void this.log.error("Received encrypted packet but E2EE not set up",this.logContext);const e=yield null===(i=this.e2eeManager)||void 0===i?void 0:i.handleEncryptedData(a.value.value.encryptedValue,a.value.value.iv,a.participantIdentity,a.value.value.keyIndex),t=pt.fromBinary(e.payload),n=new lt({value:t.value,participantIdentity:a.participantIdentity,participantSid:a.participantSid});"user"===(null===(s=n.value)||void 0===s?void 0:s.case)&&_a(n,n.value.value),this.emit(Ss.DataPacketReceived,n,a.value.value.encryptionType)}else"user"===(null===(o=a.value)||void 0===o?void 0:o.case)&&_a(a,a.value.value),this.emit(Ss.DataPacketReceived,a,ot.NONE)}finally{r()}}),this.handleDataError=e=>{const t=0===e.currentTarget.maxRetransmits?"lossy":"reliable";if(e instanceof ErrorEvent&&e.error){const{error:n}=e.error;this.log.error("DataChannel error on ".concat(t,": ").concat(e.message),Object.assign(Object.assign({},this.logContext),{error:n}))}else this.log.error("Unknown DataChannel error on ".concat(t),Object.assign(Object.assign({},this.logContext),{event:e}))},this.handleBufferedAmountLow=e=>{this.updateAndEmitDCBufferStatus(0===e.currentTarget.maxRetransmits?ut.LOSSY:ut.RELIABLE)},this.handleDisconnect=(e,t)=>{if(this._isClosed)return;this.log.warn("".concat(e," disconnected"),this.logContext),0===this.reconnectAttempts&&(this.reconnectStart=Date.now());const n=e=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(e,"ms. giving up"),this.logContext),this.emit(Ss.Disconnected),this.close()},i=Date.now()-this.reconnectStart;let s=this.getNextRetryDelay({elapsedMs:i,retryCount:this.reconnectAttempts});null!==s?(e===Sa&&(s=0),this.log.debug("reconnecting in ".concat(s,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Hs.setTimeout(()=>this.attemptReconnect(t).finally(()=>this.reconnectTimeout=void 0),s)):n(i)},this.waitForRestarted=()=>new Promise((e,t)=>{this.pcState===wa.Connected&&e();const n=()=>{this.off(Ss.Disconnected,i),e()},i=()=>{this.off(Ss.Restarted,n),t()};this.once(Ss.Restarted,n),this.once(Ss.Disconnected,i)}),this.updateAndEmitDCBufferStatus=e=>{if(e===ut.RELIABLE){const t=this.dataChannelForKind(e);t&&this.reliableMessageBuffer.alignBufferedAmount(t.bufferedAmount)}const t=this.isBufferStatusLow(e);void 0!==t&&t!==this.dcBufferStatus.get(e)&&(this.dcBufferStatus.set(e,t),this.emit(Ss.DCBufferStatusChanged,t,e))},this.isBufferStatusLow=e=>{const t=this.dataChannelForKind(e);if(t)return t.bufferedAmountLowThreshold>=t.bufferedAmount},this.handleBrowserOnLine=()=>ti(this,void 0,void 0,function*(){if(!this.url)return;(yield fetch(Ao(this.url),{method:"HEAD"}).then(e=>e.ok).catch(()=>!1))&&(this.log.info("detected network reconnected"),(this.client.currentState===gr.RECONNECTING||this.isWaitingForNetworkReconnect&&this.client.currentState===gr.CONNECTED)&&(this.clearReconnectTimeout(),this.attemptReconnect($e.RR_SIGNAL_DISCONNECTED),this.isWaitingForNetworkReconnect=!1))}),this.handleBrowserOffline=()=>ti(this,void 0,void 0,function*(){if(this.url)try{yield Promise.race([fetch(Ao(this.url),{method:"HEAD"}),oo(4e3).then(()=>Promise.reject())])}catch(e){!1===window.navigator.onLine&&(this.log.info("detected network interruption"),this.isWaitingForNetworkReconnect=!0)}}),this.log=Qn(null!==(t=e.loggerName)&&void 0!==t?t:Jn.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new fr(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.closingLock=new s,this.dataProcessLock=new s,this.dcBufferStatus=new Map([[ut.LOSSY,!0],[ut.RELIABLE,!0]]),this.client.onParticipantUpdate=e=>this.emit(Ss.ParticipantUpdate,e),this.client.onConnectionQuality=e=>this.emit(Ss.ConnectionQualityUpdate,e),this.client.onRoomUpdate=e=>this.emit(Ss.RoomUpdate,e),this.client.onSubscriptionError=e=>this.emit(Ss.SubscriptionError,e),this.client.onSubscriptionPermissionUpdate=e=>this.emit(Ss.SubscriptionPermissionUpdate,e),this.client.onSpeakersChanged=e=>this.emit(Ss.SpeakersChanged,e),this.client.onStreamStateUpdate=e=>this.emit(Ss.StreamStateChanged,e),this.client.onRequestResponse=e=>this.emit(Ss.SignalRequestResponse,e)}get logContext(){var e,t,n,i,s,o;return{room:null===(t=null===(e=this.latestJoinResponse)||void 0===e?void 0:e.room)||void 0===t?void 0:t.name,roomID:null===(i=null===(n=this.latestJoinResponse)||void 0===n?void 0:n.room)||void 0===i?void 0:i.sid,participant:null===(o=null===(s=this.latestJoinResponse)||void 0===s?void 0:s.participant)||void 0===o?void 0:o.identity,pID:this.participantSid}}join(e,t,n,i){return ti(this,void 0,void 0,function*(){this.url=e,this.token=t,this.signalOpts=n,this.maxJoinAttempts=n.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const s=yield this.client.join(e,t,n,i);return this._isClosed=!1,this.latestJoinResponse=s,this.subscriberPrimary=s.subscriberPrimary,this.pcManager||(yield this.configure(s)),this.subscriberPrimary&&!s.fastPublish||this.negotiate().catch(e=>{Yn.error(e,this.logContext)}),this.registerOnLineListener(),this.clientConfiguration=s.clientConfiguration,this.emit(Ss.SignalConnected,s),s}catch(s){if(s instanceof Ps&&s.reason===vs.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.maxJoinAttempts>this.joinAttempts))return this.join(e,t,n,i);throw s}})}close(){return ti(this,void 0,void 0,function*(){const e=yield this.closingLock.lock();if(this.isClosed)e();else try{this._isClosed=!0,this.joinAttempts=0,this.emit(Ss.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return ti(this,void 0,void 0,function*(){var e;yield null===(e=this.pcManager)||void 0===e?void 0:e.close(),this.pcManager=void 0;const t=e=>{e&&(e.close(),e.onbufferedamountlow=null,e.onclose=null,e.onclosing=null,e.onerror=null,e.onmessage=null,e.onopen=null)};t(this.lossyDC),t(this.lossyDCSub),t(this.reliableDC),t(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0,this.reliableMessageBuffer=new br,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupClient(){return ti(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new xs("a track with the same ID has already been published");return new Promise((t,n)=>{const i=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],n(new Ps("publication of local track timed out, no response from server",vs.Timeout))},1e4);this.pendingTrackResolvers[e.cid]={resolve:e=>{clearTimeout(i),t(e)},reject:()=>{clearTimeout(i),n(Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:t}=this.pendingTrackResolvers[e.track.id];t&&t(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(e){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:e}))}return!1}updateMuteStatus(e,t){this.client.sendMuteTrack(e,t)}get dataSubscriberReadyState(){var e;return null===(e=this.reliableDCSub)||void 0===e?void 0:e.readyState}getConnectedServerAddress(){return ti(this,void 0,void 0,function*(){var e;return null===(e=this.pcManager)||void 0===e?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return ti(this,void 0,void 0,function*(){var t,n;if(this.pcManager&&this.pcManager.currentState!==Gr.NEW)return;this.participantSid=null===(t=e.participant)||void 0===t?void 0:t.sid;const i=this.makeRTCConfiguration(e);var s;this.pcManager=new Jr(i,this.options.singlePeerConnection?"publisher-only":e.subscriberPrimary?"subscriber-primary":"publisher-primary",this.loggerOptions),this.emit(Ss.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(e,t)=>{this.client.sendIceCandidate(e,t)},this.pcManager.onPublisherOffer=(e,t)=>{this.client.sendOffer(e,t)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(t,n,i)=>ti(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(t),this.logContext),["closed","disconnected","failed"].includes(n)&&(this.publisherConnectionPromise=void 0),t===Gr.CONNECTED){const t=this.pcState===wa.New;this.pcState=wa.Connected,t&&this.emit(Ss.Connected,e)}else t===Gr.FAILED&&(this.pcState!==wa.Connected&&this.pcState!==wa.Reconnecting||(this.pcState=wa.Disconnected,this.handleDisconnect("peerconnection failed","failed"===i?$e.RR_SUBSCRIBER_FAILED:$e.RR_PUBLISHER_FAILED)));(this.client.isDisconnected||this.client.currentState===gr.RECONNECTING)&&[Gr.FAILED,Gr.CLOSING,Gr.CLOSED].includes(t)&&!this._isClosed&&this.emit(Ss.Offline)}),this.pcManager.onTrack=e=>{0!==e.streams.length&&this.emit(Ss.MediaTrackAdded,e.track,e.streams[0],e.receiver)},void 0!==(s=null===(n=e.serverInfo)||void 0===n?void 0:n.protocol)&&s>13||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=(e,t,n)=>ti(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,midToTrackId:n})),this.midToTrackId=n,yield this.pcManager.setPublisherAnswer(e,t))}),this.client.onTrickle=(e,t)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:t})),this.pcManager.addIceCandidate(e,t))},this.client.onOffer=(e,t,n)=>ti(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=t,!this.pcManager)return;this.midToTrackId=n;const i=yield this.pcManager.createSubscriberAnswerFromOffer(e,t);i&&this.client.sendAnswer(i,t)}),this.client.onLocalTrackPublished=e=>{var t;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:null===(t=e.track)||void 0===t?void 0:t.sid})),!this.pendingTrackResolvers[e.cid])return void this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));const{resolve:n}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],n(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(Ss.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(Ss.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{var t;this.token=e,null===(t=this.regionUrlProvider)||void 0===t||t.updateToken(e)},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(Ss.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(Ss.SubscribedQualityUpdate,e)},this.client.onRoomMoved=e=>{var t;this.participantSid=null===(t=e.participant)||void 0===t?void 0:t.sid,this.latestJoinResponse&&(this.latestJoinResponse.room=e.room),this.emit(Ss.RoomMoved,e)},this.client.onMediaSectionsRequirement=e=>{var t,n;const i={direction:"recvonly"};for(let n=0;e.numAudios>n;n++)null===(t=this.pcManager)||void 0===t||t.addPublisherTransceiverOfKind("audio",i);for(let t=0;e.numVideos>t;t++)null===(n=this.pcManager)||void 0===n||n.addPublisherTransceiverOfKind("video",i);this.negotiate()},this.client.onClose=()=>{this.handleDisconnect("signal",$e.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:null==e?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions({updatedAtInMs:Date.now(),maxAgeInMs:5e3,regionSettings:e.regions})),e.action){case cn.DISCONNECT:this.emit(Ss.Disconnected,null==e?void 0:e.reason),this.close();break;case cn.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(Sa);break;case cn.RESUME:this.handleDisconnect(Sa)}}}makeRTCConfiguration(e){var t;const n=Object.assign({},this.rtcConfig);if((null===(t=this.signalOpts)||void 0===t?void 0:t.e2eeEnabled)&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),n.encodedInsertableStreams=!0),e.iceServers&&!n.iceServers){const t=[];e.iceServers.forEach(e=>{const n={urls:e.urls};e.username&&(n.username=e.username),e.credential&&(n.credential=e.credential),t.push(n)}),n.iceServers=t}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Ge.ENABLED&&(n.iceTransportPolicy="relay"),n.sdpSemantics="unified-plan",n.continualGatheringPolicy="gather_continually",n}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(Ca,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(Ta,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,t,n){return ti(this,void 0,void 0,function*(){if(ro()){return yield this.createTransceiverRTCRtpSender(e,t,n)}if(ao()){this.log.warn("using add-track fallback",this.logContext);return yield this.createRTCRtpSender(e.mediaStreamTrack)}throw new Os("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,n,i){return ti(this,void 0,void 0,function*(){if(ro())return this.createSimulcastTransceiverSender(e,t,n,i);if(ao())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Os("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,n){return ti(this,void 0,void 0,function*(){if(!this.pcManager)throw new Os("publisher is closed");const i=[];e.mediaStream&&i.push(e.mediaStream),Vo(e)&&(e.codec=t.videoCodec);const s={direction:"sendonly",streams:i};n&&(s.sendEncodings=n);return(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,s)).sender})}createSimulcastTransceiverSender(e,t,n,i){return ti(this,void 0,void 0,function*(){if(!this.pcManager)throw new Os("publisher is closed");const s={direction:"sendonly"};i&&(s.sendEncodings=i);const o=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,s);if(n.videoCodec)return e.setSimulcastTrackSender(n.videoCodec,o.sender),o.sender})}createRTCRtpSender(e){return ti(this,void 0,void 0,function*(){if(!this.pcManager)throw new Os("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return ti(this,void 0,void 0,function*(){var t,n,i;if(!this._isClosed)if(this.attemptingReconnect)Yn.warn("already attempting reconnect, returning early",this.logContext);else{(null===(t=this.clientConfiguration)||void 0===t?void 0:t.resumeConnection)!==Ge.DISABLED&&(null!==(i=null===(n=this.pcManager)||void 0===n?void 0:n.currentState)&&void 0!==i?i:Gr.NEW)!==Gr.NEW||(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(e){this.reconnectAttempts+=1;let t=!0;e instanceof Os?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:e})),t=!1):e instanceof Ra||(this.fullReconnectOnNext=!0),t?this.handleDisconnect("reconnect",$e.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(Ss.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(e){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:e}))}return null}restartConnection(e){return ti(this,void 0,void 0,function*(){var t,n,i;try{if(!this.url||!this.token)throw new Os("could not reconnect, url or token not saved");let n;this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(Ss.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new Ra;n=yield this.join(null!=e?e:this.url,this.token,this.signalOpts)}catch(e){if(e instanceof Ps&&e.reason===vs.NotAllowed)throw new Os("could not reconnect, token might be expired");throw new Ra}if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(this.client.setReconnected(),this.emit(Ss.SignalRestarted,n),yield this.waitForPCReconnected(),this.client.currentState!==gr.CONNECTED)throw new Ra("Signal connection got severed during reconnect");null===(t=this.regionUrlProvider)||void 0===t||t.resetAttempts(),this.emit(Ss.Restarted)}catch(e){const t=yield null===(n=this.regionUrlProvider)||void 0===n?void 0:n.getNextBestRegionUrl();if(t)return void(yield this.restartConnection(t));throw null===(i=this.regionUrlProvider)||void 0===i||i.resetAttempts(),e}})}resumeConnection(e){return ti(this,void 0,void 0,function*(){var t;if(!this.url||!this.token)throw new Os("could not reconnect, url or token not saved");if(!this.pcManager)throw new Os("publisher and subscriber connections unset");let n;this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(Ss.Resuming);try{this.setupSignalClientCallbacks(),n=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(e){let t="";if(e instanceof Error&&(t=e.message,this.log.error(e.message,Object.assign(Object.assign({},this.logContext),{error:e}))),e instanceof Ps&&e.reason===vs.NotAllowed)throw new Os("could not reconnect, token might be expired");if(e instanceof Ps&&e.reason===vs.LeaveRequest)throw e;throw new Ra(t)}if(this.emit(Ss.SignalResumed),n){const e=this.makeRTCConfiguration(n);this.pcManager.updateConfiguration(e),this.latestJoinResponse&&(this.latestJoinResponse.serverInfo=n.serverInfo)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==gr.CONNECTED)throw new Ra("Signal connection got severed during reconnect");this.client.setReconnected(),"open"===(null===(t=this.reliableDC)||void 0===t?void 0:t.readyState)&&null===this.reliableDC.id&&this.createDataChannels(),(null==n?void 0:n.lastMessageSeq)&&this.resendReliableMessagesForResume(n.lastMessageSeq),this.emit(Ss.Resumed)})}waitForPCInitialConnection(e,t){return ti(this,void 0,void 0,function*(){if(!this.pcManager)throw new Os("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return ti(this,void 0,void 0,function*(){this.pcState=wa.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield oo(2e3),!this.pcManager)throw new Os("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=wa.Connected}catch(e){throw this.pcState=wa.Disconnected,new Ps("could not establish PC connection, ".concat(e.message),vs.InternalError)}})}publishRpcResponse(e,t,n,i){return ti(this,void 0,void 0,function*(){const s=new lt({destinationIdentities:[e],kind:ut.RELIABLE,value:{case:"rpcResponse",value:new St({requestId:t,value:i?{case:"error",value:i.toProto()}:{case:"payload",value:null!=n?n:""}})}});yield this.sendDataPacket(s,ut.RELIABLE)})}publishRpcAck(e,t){return ti(this,void 0,void 0,function*(){const n=new lt({destinationIdentities:[e],kind:ut.RELIABLE,value:{case:"rpcAck",value:new Tt({requestId:t})}});yield this.sendDataPacket(n,ut.RELIABLE)})}sendDataPacket(e,t){return ti(this,void 0,void 0,function*(){if(yield this.ensurePublisherConnected(t),this.e2eeManager&&this.e2eeManager.isDataChannelEncryptionEnabled){const t=function(e){var t,n,i,s,o;if("sipDtmf"!==(null===(t=e.value)||void 0===t?void 0:t.case)&&"metrics"!==(null===(n=e.value)||void 0===n?void 0:n.case)&&"speaker"!==(null===(i=e.value)||void 0===i?void 0:i.case)&&"transcription"!==(null===(s=e.value)||void 0===s?void 0:s.case)&&"encryptedPacket"!==(null===(o=e.value)||void 0===o?void 0:o.case))return new pt({value:e.value})}(e);if(t){const n=yield this.e2eeManager.encryptData(t.toBinary());e.value={case:"encryptedPacket",value:new ht({encryptedValue:n.payload,iv:n.iv,keyIndex:n.keyIndex})}}}t===ut.RELIABLE&&(e.sequence=this.reliableDataSequence,this.reliableDataSequence+=1);const n=e.toBinary();yield this.waitForBufferStatusLow(t);const i=this.dataChannelForKind(t);if(i){if(t===ut.RELIABLE&&this.reliableMessageBuffer.push({data:n,sequence:e.sequence}),this.attemptingReconnect)return;i.send(n)}this.updateAndEmitDCBufferStatus(t)})}resendReliableMessagesForResume(e){return ti(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(ut.RELIABLE);const t=this.dataChannelForKind(ut.RELIABLE);t&&(this.reliableMessageBuffer.popToSequence(e),this.reliableMessageBuffer.getAll().forEach(e=>{t.send(e.data)})),this.updateAndEmitDCBufferStatus(ut.RELIABLE)})}waitForBufferStatusLow(e){return new Promise((t,n)=>ti(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const i=()=>n("Engine closed");for(this.once(Ss.Closing,i);!this.dcBufferStatus.get(e);)yield oo(10);this.off(Ss.Closing,i),t()}}))}ensureDataTransportConnected(e){return ti(this,arguments,void 0,function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.subscriberPrimary;return function*(){var i;if(!t.pcManager)throw new Os("PC manager is closed");const s=n?t.pcManager.subscriber:t.pcManager.publisher,o=n?"Subscriber":"Publisher";if(!s)throw new Ps("".concat(o," connection not set"),vs.InternalError);let r=!1;n||t.dataChannelForKind(e,n)||(t.createDataChannels(),r=!0),r||n||t.pcManager.publisher.isICEConnected||"checking"===t.pcManager.publisher.getICEConnectionState()||(r=!0),r&&t.negotiate().catch(e=>{Yn.error(e,t.logContext)});const a=t.dataChannelForKind(e,n);if("open"===(null==a?void 0:a.readyState))return;const c=(new Date).getTime()+t.peerConnectionTimeout;for(;(new Date).getTime()<c;){if(s.isICEConnected&&"open"===(null===(i=t.dataChannelForKind(e,n))||void 0===i?void 0:i.readyState))return;yield oo(50)}throw new Ps("could not establish ".concat(o," connection, state: ").concat(s.getICEConnectionState()),vs.InternalError)}()})}ensurePublisherConnected(e){return ti(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!!this.pcManager&&(this.pcManager.currentState===Gr.CONNECTED&&!(!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED))}negotiate(){return ti(this,void 0,void 0,function*(){return new Promise((e,t)=>ti(this,void 0,void 0,function*(){if(!this.pcManager)return void t(new Ls("PC manager is closed"));this.pcManager.requirePublisher(),0!=this.pcManager.publisher.getTransceivers().length||this.lossyDC||this.reliableDC||this.createDataChannels();const n=new AbortController,i=()=>{n.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&t("cannot negotiate on closed engine"),this.on(Ss.Closing,i),this.pcManager.publisher.once(Nr,e=>{const t=new Map;e.forEach(e=>{const n=e.codec.toLowerCase();Qs.includes(n)&&t.set(e.payload,n)}),this.emit(Ss.RTPVideoMapUpdate,t)});try{yield this.pcManager.negotiate(n),e()}catch(e){e instanceof Ls&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",$e.RR_UNKNOWN),t(e)}finally{this.off(Ss.Closing,i)}}))})}dataChannelForKind(e,t){if(t){if(e===ut.LOSSY)return this.lossyDCSub;if(e===ut.RELIABLE)return this.reliableDCSub}else{if(e===ut.LOSSY)return this.lossyDC;if(e===ut.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var n,i,s,o;if(!this.pcManager)return void this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);const r=this.pcManager.publisher.getLocalDescription(),a=this.pcManager.publisher.getRemoteDescription(),c=null===(n=this.pcManager.subscriber)||void 0===n?void 0:n.getRemoteDescription(),d=null===(i=this.pcManager.subscriber)||void 0===i?void 0:i.getLocalDescription(),l=null===(o=null===(s=this.signalOpts)||void 0===s?void 0:s.autoSubscribe)||void 0===o||o,u=[],h=[];e.forEach(e=>{e.isDesired!==l&&u.push(e.trackSid),e.isEnabled||h.push(e.trackSid)}),this.client.sendSyncState(new Rn({answer:this.options.singlePeerConnection?a?yr({sdp:a.sdp,type:a.type}):void 0:d?yr({sdp:d.sdp,type:d.type}):void 0,offer:this.options.singlePeerConnection?r?yr({sdp:r.sdp,type:r.type}):void 0:c?yr({sdp:c.sdp,type:c.type}):void 0,subscription:new nn({trackSids:u,subscribe:!l,participantTracks:[]}),publishTracks:tr(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:h,datachannelReceiveStates:this.reliableReceivedState.map((e,t)=>new _n({publisherSid:t,lastSeq:e}))}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(t,n)=>{void 0!==(null==t?void 0:t.id)&&null!==t.id&&e.push(new Pn({label:t.label,id:t.id,target:n}))};return t(this.dataChannelForKind(ut.LOSSY),Vt.PUBLISHER),t(this.dataChannelForKind(ut.RELIABLE),Vt.PUBLISHER),t(this.dataChannelForKind(ut.LOSSY,!0),Vt.SUBSCRIBER),t(this.dataChannelForKind(ut.RELIABLE,!0),Vt.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Hs.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){fo()&&(window.addEventListener("online",this.handleBrowserOnLine),window.addEventListener("offline",this.handleBrowserOffline))}deregisterOnLineListener(){fo()&&(window.removeEventListener("online",this.handleBrowserOnLine),window.removeEventListener("offline",this.handleBrowserOffline))}getTrackIdForReceiver(e){var t;const n=null===(t=this.pcManager)||void 0===t?void 0:t.getMidForReceiver(e);if(n){const e=Object.entries(this.midToTrackId).find(e=>{let[t]=e;return t===n});if(e)return e[1]}}}class Ra extends Error{}function _a(e,t){const n=e.participantIdentity?e.participantIdentity:t.participantIdentity;e.participantIdentity=n,t.participantIdentity=n;const i=0!==e.destinationIdentities.length?e.destinationIdentities:t.destinationIdentities;e.destinationIdentities=i,t.destinationIdentities=i}class Pa{get info(){return this._info}validateBytesReceived(){if("number"==typeof this.totalByteSize&&0!==this.totalByteSize){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.totalByteSize>this.bytesReceived)throw new Ns("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),ys.Incomplete);if(this.bytesReceived>this.totalByteSize)throw new Ns("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),ys.LengthExceeded)}}constructor(e,t,n,i){this.reader=t,this.totalByteSize=n,this._info=e,this.bytesReceived=0,this.outOfBandFailureRejectingFuture=i}}class Ia extends Pa{handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();null===(t=this.onProgress)||void 0===t||t.call(this,this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0)}[Symbol.asyncIterator](){const e=this.reader.getReader();let t=new Lo,n=null,i=null;if(this.signal){const e=this.signal;i=()=>{var n;null===(n=t.reject)||void 0===n||n.call(t,e.reason)},e.addEventListener("abort",i),n=e}const s=()=>{e.releaseLock(),n&&i&&n.removeEventListener("abort",i),this.signal=void 0};return{next:()=>ti(this,void 0,void 0,function*(){var n,i;try{const{done:s,value:o}=yield Promise.race([e.read(),t.promise,null!==(i=null===(n=this.outOfBandFailureRejectingFuture)||void 0===n?void 0:n.promise)&&void 0!==i?i:new Promise(()=>{})]);return s?(this.validateBytesReceived(!0),{done:!0,value:void 0}):(this.handleChunkReceived(o),{done:!1,value:o.content})}catch(e){throw s(),e}}),return(){return ti(this,void 0,void 0,function*(){return s(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return ti(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var n,i,s;let o=new Set;const r=t.signal?e.withAbortSignal(t.signal):e;try{for(var a,c=!0,d=ii(r);!(n=(a=yield d.next()).done);c=!0){c=!1;o.add(a.value)}}catch(e){i={error:e}}finally{try{c||n||!(s=d.return)||(yield s.call(d))}finally{if(i)throw i.error}}return Array.from(o)}()})}}class xa extends Pa{constructor(e,t,n,i){super(e,t,n,i),this.receivedChunks=new Map}handleChunkReceived(e){var t;const n=Uo(e.chunkIndex),i=this.receivedChunks.get(n);if(i&&i.version>e.version)return;this.receivedChunks.set(n,e),this.bytesReceived+=e.content.byteLength,this.validateBytesReceived();null===(t=this.onProgress)||void 0===t||t.call(this,this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0)}[Symbol.asyncIterator](){const e=this.reader.getReader(),t=new TextDecoder("utf-8",{fatal:!0});let n=new Lo,i=null,s=null;if(this.signal){const e=this.signal;s=()=>{var t;null===(t=n.reject)||void 0===t||t.call(n,e.reason)},e.addEventListener("abort",s),i=e}const o=()=>{e.releaseLock(),i&&s&&i.removeEventListener("abort",s),this.signal=void 0};return{next:()=>ti(this,void 0,void 0,function*(){var i,s;try{const{done:o,value:r}=yield Promise.race([e.read(),n.promise,null!==(s=null===(i=this.outOfBandFailureRejectingFuture)||void 0===i?void 0:i.promise)&&void 0!==s?s:new Promise(()=>{})]);if(o)return this.validateBytesReceived(!0),{done:!0,value:void 0};{let e;this.handleChunkReceived(r);try{e=t.decode(r.content)}catch(e){throw new Ns("Cannot decode datastream chunk ".concat(r.chunkIndex," as text: ").concat(e),ys.DecodeFailed)}return{done:!1,value:e}}}catch(e){throw o(),e}}),return(){return ti(this,void 0,void 0,function*(){return o(),{done:!0,value:void 0}})}}}withAbortSignal(e){return this.signal=e,this}readAll(){return ti(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function*(){var n,i,s;let o="";const r=t.signal?e.withAbortSignal(t.signal):e;try{for(var a,c=!0,d=ii(r);!(n=(a=yield d.next()).done);c=!0){c=!1;o+=a.value}}catch(e){i={error:e}}finally{try{c||n||!(s=d.return)||(yield s.call(d))}finally{if(i)throw i.error}}return o}()})}}class Ma{constructor(){this.log=Yn,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map}registerTextStreamHandler(e,t){if(this.textStreamHandlers.has(e))throw new Ns('A text stream handler for topic "'.concat(e,'" has already been set.'),ys.HandlerAlreadyRegistered);this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new Ns('A byte stream handler for topic "'.concat(e,'" has already been set.'),ys.HandlerAlreadyRegistered);this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}clearControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear()}validateParticipantHasNoActiveDataStreams(e){var t,n,i,s;const o=Array.from(this.textStreamControllers.entries()).filter(t=>t[1].sendingParticipantIdentity===e),r=Array.from(this.byteStreamControllers.entries()).filter(t=>t[1].sendingParticipantIdentity===e);if(o.length>0||r.length>0){const a=new Ns("Participant ".concat(e," unexpectedly disconnected in the middle of sending data"),ys.AbnormalEnd);for(const[e,i]of r)null===(n=(t=i.outOfBandFailureRejectingFuture).reject)||void 0===n||n.call(t,a),this.byteStreamControllers.delete(e);for(const[e,t]of o)null===(s=(i=t.outOfBandFailureRejectingFuture).reject)||void 0===s||s.call(i,a),this.textStreamControllers.delete(e)}}handleDataStreamPacket(e,t){return ti(this,void 0,void 0,function*(){switch(e.value.case){case"streamHeader":return this.handleStreamHeader(e.value.value,e.participantIdentity,t);case"streamChunk":return this.handleStreamChunk(e.value.value,t);case"streamTrailer":return this.handleStreamTrailer(e.value.value,t);default:throw Error('DataPacket of value "'.concat(e.value.case,'" is not data stream related!'))}})}handleStreamHeader(e,t,n){return ti(this,void 0,void 0,function*(){var i;if("byteHeader"===e.contentHeader.case){const s=this.byteStreamHandlers.get(e.topic);if(!s)return void this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);let o;const r=new Lo;r.promise.catch(e=>{this.log.error(e)});const a={id:e.streamId,name:null!==(i=e.contentHeader.value.name)&&void 0!==i?i:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Uo(e.timestamp),attributes:e.attributes,encryptionType:n},c=new ReadableStream({start:n=>{if(o=n,this.textStreamControllers.has(e.streamId))throw new Ns("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),ys.AlreadyOpened);this.byteStreamControllers.set(e.streamId,{info:a,controller:o,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:r})}});s(new Ia(a,c,Uo(e.totalLength),r),{identity:t})}else if("textHeader"===e.contentHeader.case){const i=this.textStreamHandlers.get(e.topic);if(!i)return void this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);let s;const o=new Lo;o.promise.catch(e=>{this.log.error(e)});const r={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes,encryptionType:n},a=new ReadableStream({start:n=>{if(s=n,this.textStreamControllers.has(e.streamId))throw new Ns("A data stream read is already in progress for a stream with id ".concat(e.streamId,"."),ys.AlreadyOpened);this.textStreamControllers.set(e.streamId,{info:r,controller:s,startTime:Date.now(),sendingParticipantIdentity:t,outOfBandFailureRejectingFuture:o})}});i(new xa(r,a,Uo(e.totalLength),o),{identity:t})}})}handleStreamChunk(e,t){const n=this.byteStreamControllers.get(e.streamId);n&&(n.info.encryptionType!==t?(n.controller.error(new Ns("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(n.info.encryptionType),ys.EncryptionTypeMismatch)),this.byteStreamControllers.delete(e.streamId)):e.content.length>0&&n.controller.enqueue(e));const i=this.textStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?(i.controller.error(new Ns("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),ys.EncryptionTypeMismatch)),this.textStreamControllers.delete(e.streamId)):e.content.length>0&&i.controller.enqueue(e))}handleStreamTrailer(e,t){const n=this.textStreamControllers.get(e.streamId);n&&(n.info.encryptionType!==t?n.controller.error(new Ns("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(n.info.encryptionType),ys.EncryptionTypeMismatch)):(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.textStreamControllers.delete(e.streamId)));const i=this.byteStreamControllers.get(e.streamId);i&&(i.info.encryptionType!==t?i.controller.error(new Ns("Encryption type mismatch for stream ".concat(e.streamId,". Expected ").concat(t,", got ").concat(i.info.encryptionType),ys.EncryptionTypeMismatch)):(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),e.attributes),i.controller.close()),this.byteStreamControllers.delete(e.streamId))}}class Oa{constructor(e,t,n){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=n,this.info=t}write(e){return this.defaultWriter.write(e)}close(){return ti(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),null===(e=this.onClose)||void 0===e||e.call(this)})}}class La extends Oa{}class Da extends Oa{}class Aa{constructor(e,t){this.engine=e,this.log=t}setupEngine(e){this.engine=e}sendText(e,t){return ti(this,void 0,void 0,function*(){var n;const i=crypto.randomUUID(),s=(new TextEncoder).encode(e).byteLength,o=null===(n=null==t?void 0:t.attachments)||void 0===n?void 0:n.map(()=>crypto.randomUUID()),r=Array(o?o.length+1:1).fill(0),a=(e,n)=>{var i;r[n]=e;const s=r.reduce((e,t)=>e+t,0);null===(i=null==t?void 0:t.onProgress)||void 0===i||i.call(t,s)},c=yield this.streamText({streamId:i,totalSize:s,destinationIdentities:null==t?void 0:t.destinationIdentities,topic:null==t?void 0:t.topic,attachedStreamIds:o,attributes:null==t?void 0:t.attributes});return yield c.write(e),a(1,0),yield c.close(),(null==t?void 0:t.attachments)&&o&&(yield Promise.all(t.attachments.map((e,n)=>ti(this,void 0,void 0,function*(){return this._sendFile(o[n],e,{topic:t.topic,mimeType:e.type,onProgress:e=>{a(e,n+1)}})})))),c.info})}streamText(e){return ti(this,void 0,void 0,function*(){var t,n,i;const s=null!==(t=null==e?void 0:e.streamId)&&void 0!==t?t:crypto.randomUUID(),o={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:null!==(n=null==e?void 0:e.topic)&&void 0!==n?n:"",size:null==e?void 0:e.totalSize,attributes:null==e?void 0:e.attributes,encryptionType:(null===(i=this.engine.e2eeManager)||void 0===i?void 0:i.isDataChannelEncryptionEnabled)?ot.GCM:ot.NONE},r=new Ut({streamId:s,mimeType:o.mimeType,topic:o.topic,timestamp:jo(o.timestamp),totalLength:jo(null==e?void 0:e.totalSize),attributes:o.attributes,contentHeader:{case:"textHeader",value:new At({version:null==e?void 0:e.version,attachedStreamIds:null==e?void 0:e.attachedStreamIds,replyToStreamId:null==e?void 0:e.replyToStreamId,operationType:"update"===(null==e?void 0:e.type)?Dt.UPDATE:Dt.CREATE})}}),a=null==e?void 0:e.destinationIdentities,c=new lt({destinationIdentities:a,value:{case:"streamHeader",value:r}});yield this.engine.sendDataPacket(c,ut.RELIABLE);let d=0;const l=this.engine,u=new WritableStream({write(e){return ti(this,void 0,void 0,function*(){for(const t of function(e,t){const n=[];let i=(new TextEncoder).encode(e);for(;i.length>t;){let e=t;for(;e>0;){const t=i[e];if(void 0!==t&&128!=(192&t))break;e--}n.push(i.slice(0,e)),i=i.slice(e)}return i.length>0&&n.push(i),n}(e,15e3)){const e=new jt({content:t,streamId:s,chunkIndex:jo(d)}),n=new lt({destinationIdentities:a,value:{case:"streamChunk",value:e}});yield l.sendDataPacket(n,ut.RELIABLE),d+=1}})},close(){return ti(this,void 0,void 0,function*(){const e=new Ft({streamId:s}),t=new lt({destinationIdentities:a,value:{case:"streamTrailer",value:e}});yield l.sendDataPacket(t,ut.RELIABLE)})},abort(e){console.log("Sink error:",e)}});let h=()=>ti(this,void 0,void 0,function*(){yield p.close()});l.once(Ss.Closing,h);const p=new La(u,o,()=>this.engine.off(Ss.Closing,h));return p})}sendFile(e,t){return ti(this,void 0,void 0,function*(){const n=crypto.randomUUID();return yield this._sendFile(n,e,t),{id:n}})}_sendFile(e,t,n){return ti(this,void 0,void 0,function*(){var i;const s=yield this.streamBytes({streamId:e,totalSize:t.size,name:t.name,mimeType:null!==(i=null==n?void 0:n.mimeType)&&void 0!==i?i:t.type,topic:null==n?void 0:n.topic,destinationIdentities:null==n?void 0:n.destinationIdentities}),o=t.stream().getReader();for(;;){const{done:e,value:t}=yield o.read();if(e)break;yield s.write(t)}return yield s.close(),s.info})}streamBytes(e){return ti(this,void 0,void 0,function*(){var t,n,i,o,r,a;const c=null!==(t=null==e?void 0:e.streamId)&&void 0!==t?t:crypto.randomUUID(),d=null==e?void 0:e.destinationIdentities,l={id:c,mimeType:null!==(n=null==e?void 0:e.mimeType)&&void 0!==n?n:"application/octet-stream",topic:null!==(i=null==e?void 0:e.topic)&&void 0!==i?i:"",timestamp:Date.now(),attributes:null==e?void 0:e.attributes,size:null==e?void 0:e.totalSize,name:null!==(o=null==e?void 0:e.name)&&void 0!==o?o:"unknown",encryptionType:(null===(r=this.engine.e2eeManager)||void 0===r?void 0:r.isDataChannelEncryptionEnabled)?ot.GCM:ot.NONE},u=new Ut({totalLength:jo(null!==(a=l.size)&&void 0!==a?a:0),mimeType:l.mimeType,streamId:c,topic:l.topic,timestamp:jo(Date.now()),attributes:l.attributes,contentHeader:{case:"byteHeader",value:new Nt({name:l.name})}}),h=new lt({destinationIdentities:d,value:{case:"streamHeader",value:u}});yield this.engine.sendDataPacket(h,ut.RELIABLE);let p=0;const m=new s,g=this.engine,f=this.log,v=new WritableStream({write(e){return ti(this,void 0,void 0,function*(){const t=yield m.lock();let n=0;try{for(;e.byteLength>n;){const t=e.slice(n,n+15e3),i=new lt({destinationIdentities:d,value:{case:"streamChunk",value:new jt({content:t,streamId:c,chunkIndex:jo(p)})}});yield g.sendDataPacket(i,ut.RELIABLE),p+=1,n+=t.byteLength}}finally{t()}})},close(){return ti(this,void 0,void 0,function*(){const e=new Ft({streamId:c}),t=new lt({destinationIdentities:d,value:{case:"streamTrailer",value:e}});yield g.sendDataPacket(t,ut.RELIABLE)})},abort(e){f.error("Sink error:",e)}});return new Da(v,l)})}}class Na extends Ks{constructor(e,t,n,i,s){super(e,n,s),this.sid=t,this.receiver=i}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?ws.Muted:ws.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const t=n=>{n.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",t),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(ws.Ended,this))};e.addEventListener("removetrack",t)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return ti(this,void 0,void 0,function*(){var e;if(!(null===(e=this.receiver)||void 0===e?void 0:e.getStats))return;return yield this.receiver.getStats()})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),Zr)),"undefined"!=typeof RTCRtpReceiver&&"getSynchronizationSources"in RTCRtpReceiver&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var t;this.timeSyncHandle=requestAnimationFrame(()=>e());const n=null===(t=this.receiver)||void 0===t?void 0:t.getSynchronizationSources()[0];if(n){const{timestamp:e,rtpTimestamp:t}=n;t&&this.rtpTimestamp!==t&&(this.emit(ws.TimeSyncUpdate,{timestamp:e,rtpTimestamp:t}),this.rtpTimestamp=t)}};e()}}class Ua extends Na{constructor(e,t,n,i,s,o){super(e,t,Ks.Kind.Audio,n,o),this.monitorReceiver=()=>ti(this,void 0,void 0,function*(){if(!this.receiver)return void(this._currentBitrate=0);const e=yield this.getReceiverStats();e&&this.prevStats&&this.receiver&&(this._currentBitrate=ea(e,this.prevStats)),this.prevStats=e}),this.audioContext=i,this.webAudioPluginNodes=[],s&&(this.sinkId=s.deviceId)}setVolume(e){var t;for(const n of this.attachedElements)this.audioContext?null===(t=this.gainNode)||void 0===t||t.gain.setTargetAtTime(e,0,.1):n.volume=e;vo()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(vo())return 1;let e=0;return this.attachedElements.forEach(t=>{t.volume>e&&(e=t.volume)}),e}setSinkId(e){return ti(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(t=>{if(lo(t))return t.setSinkId(e)}))})}attach(e){const t=0===this.attachedElements.length;return e?super.attach(e):e=super.attach(),this.sinkId&&lo(e)&&e.setSinkId(this.sinkId).catch(e=>{this.log.error("Failed to set sink id on remote audio track",e,this.logContext)}),this.audioContext&&t&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let t;return e?(t=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(t=super.detach(),this.disconnectWebAudio()),t}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,t){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(t.srcObject);let n=this.sourceNode;this.webAudioPluginNodes.forEach(e=>{n.connect(e),n=e}),this.gainNode=e.createGain(),n.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),"running"!==e.state&&e.resume().then(()=>{"running"!==e.state&&this.emit(ws.AudioPlaybackFailed,Error("Audio Context couldn't be started automatically"))}).catch(e=>{this.emit(ws.AudioPlaybackFailed,e)})}disconnectWebAudio(){var e,t;null===(e=this.gainNode)||void 0===e||e.disconnect(),null===(t=this.sourceNode)||void 0===t||t.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return ti(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;let e;return(yield this.receiver.getStats()).forEach(t=>{"inbound-rtp"===t.type&&(e={type:"audio",streamId:t.id,timestamp:t.timestamp,jitter:t.jitter,bytesReceived:t.bytesReceived,concealedSamples:t.concealedSamples,concealmentEvents:t.concealmentEvents,silentConcealedSamples:t.silentConcealedSamples,silentConcealmentEvents:t.silentConcealmentEvents,totalAudioEnergy:t.totalAudioEnergy,totalSamplesDuration:t.totalSamplesDuration})}),e})}}class ja extends Na{constructor(e,t,n,i,s){super(e,t,Ks.Kind.Video,n,s),this.elementInfos=[],this.monitorReceiver=()=>ti(this,void 0,void 0,function*(){if(!this.receiver)return void(this._currentBitrate=0);const e=yield this.getReceiverStats();e&&this.prevStats&&this.receiver&&(this._currentBitrate=ea(e,this.prevStats)),this.prevStats=e}),this.debouncedHandleResize=Lr(()=>{this.updateDimensions()},100),this.adaptiveStreamSettings=i}get isAdaptiveStream(){return void 0!==this.adaptiveStreamSettings}setStreamState(e){super.setStreamState(e),this.log.debug("setStreamState",e),this.isAdaptiveStream&&e===Ks.StreamState.Active&&this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?Js(this._mediaStreamTrack,t):Gs(this._mediaStreamTrack,t)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&void 0===this.elementInfos.find(t=>t.element===e)){const t=new Fa(e);this.observeElementInfo(t)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&void 0===this.elementInfos.find(t=>t===e)?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream)return void this.log.warn("stopObservingElementInfo ignored",this.logContext);const t=this.elementInfos.filter(t=>t===e);for(const e of t)e.stopObserving();this.elementInfos=this.elementInfos.filter(t=>t!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let t=[];if(e)return this.stopObservingElement(e),super.detach(e);t=super.detach();for(const e of t)this.stopObservingElement(e);return t}getDecoderImplementation(){var e;return null===(e=this.prevStats)||void 0===e?void 0:e.decoderImplementation}getReceiverStats(){return ti(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,n="",i=new Map;return e.forEach(e=>{"inbound-rtp"===e.type?(n=e.codecId,t={type:"video",streamId:e.id,framesDecoded:e.framesDecoded,framesDropped:e.framesDropped,framesReceived:e.framesReceived,packetsReceived:e.packetsReceived,packetsLost:e.packetsLost,frameWidth:e.frameWidth,frameHeight:e.frameHeight,pliCount:e.pliCount,firCount:e.firCount,nackCount:e.nackCount,jitter:e.jitter,timestamp:e.timestamp,bytesReceived:e.bytesReceived,decoderImplementation:e.decoderImplementation}):"codec"===e.type&&i.set(e.id,e)}),t&&""!==n&&i.get(n)&&(t.mimeType=i.get(n).mimeType),t})}stopObservingElement(e){const t=this.elementInfos.filter(t=>t.element===e);for(const e of t)this.stopObservingElementInfo(e)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ti(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(e){var t,n;const i=this.elementInfos.reduce((e,t)=>Math.max(e,t.visibilityChangedAt||0),0),s=!(null!==(n=null===(t=this.adaptiveStreamSettings)||void 0===t?void 0:t.pauseVideoInBackground)&&void 0!==n&&!n)&&this.isInBackground,o=this.elementInfos.some(e=>e.pictureInPicture),r=this.elementInfos.some(e=>e.visible)&&!s||o;(this.lastVisible!==r||e)&&(r||Date.now()-i>=100?(this.lastVisible=r,this.emit(ws.VisibilityChanged,r,this)):Hs.setTimeout(()=>{this.updateVisibility()},100))}updateDimensions(){var e,t;let n=0,i=0;const s=this.getPixelDensity();for(const e of this.elementInfos){const t=e.width()*s,o=e.height()*s;t+o>n+i&&(n=t,i=o)}(null===(e=this.lastDimensions)||void 0===e?void 0:e.width)===n&&(null===(t=this.lastDimensions)||void 0===t?void 0:t.height)===i||(this.lastDimensions={width:n,height:i},this.emit(ws.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=null===(e=this.adaptiveStreamSettings)||void 0===e?void 0:e.pixelDensity;if("screen"===t)return To();if(!t){return To()>2?2:1}return t}}class Fa{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=e=>{var t;const{target:n,isIntersecting:i}=e;n===this.element&&(this.isIntersecting=i,this.isPiP=Ba(this.element),this.visibilityChangedAt=Date.now(),null===(t=this.handleVisibilityChanged)||void 0===t||t.call(this))},this.onEnterPiP=()=>{var e,t,n;null===(t=null===(e=window.documentPictureInPicture)||void 0===e?void 0:e.window)||void 0===t||t.addEventListener("pagehide",this.onLeavePiP),this.isPiP=Ba(this.element),null===(n=this.handleVisibilityChanged)||void 0===n||n.call(this)},this.onLeavePiP=()=>{var e;this.isPiP=Ba(this.element),null===(e=this.handleVisibilityChanged)||void 0===e||e.call(this)},this.element=e,this.isIntersecting=null!=t?t:Va(e),this.isPiP=fo()&&Ba(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,n;this.isIntersecting=Va(this.element),this.isPiP=Ba(this.element),this.element.handleResize=()=>{var e;null===(e=this.handleResize)||void 0===e||e.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Io().observe(this.element),_o().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),null===(e=window.documentPictureInPicture)||void 0===e||e.addEventListener("enter",this.onEnterPiP),null===(n=null===(t=window.documentPictureInPicture)||void 0===t?void 0:t.window)||void 0===n||n.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,t,n,i,s;null===(e=Io())||void 0===e||e.unobserve(this.element),null===(t=_o())||void 0===t||t.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),null===(n=window.documentPictureInPicture)||void 0===n||n.removeEventListener("enter",this.onEnterPiP),null===(s=null===(i=window.documentPictureInPicture)||void 0===i?void 0:i.window)||void 0===s||s.removeEventListener("pagehide",this.onLeavePiP)}}function Ba(e){var t,n;return document.pictureInPictureElement===e||!!(null===(t=window.documentPictureInPicture)||void 0===t?void 0:t.window)&&Va(e,null===(n=window.documentPictureInPicture)||void 0===n?void 0:n.window)}function Va(e,t){const n=t||window;let i=e.offsetTop,s=e.offsetLeft;const o=e.offsetWidth,r=e.offsetHeight,{hidden:a}=e,{display:c}=getComputedStyle(e);for(;e.offsetParent;)i+=(e=e.offsetParent).offsetTop,s+=e.offsetLeft;return n.pageYOffset+n.innerHeight>i&&n.pageXOffset+n.innerWidth>s&&i+r>n.pageYOffset&&s+o>n.pageXOffset&&!a&&"none"!==c}class qa extends ri.EventEmitter{constructor(e,t,n,i){var s;super(),this.metadataMuted=!1,this.encryption=ot.NONE,this.log=Yn,this.handleMuted=()=>{this.emit(ws.Muted)},this.handleUnmuted=()=>{this.emit(ws.Unmuted)},this.log=Qn(null!==(s=null==i?void 0:i.loggerName)&&void 0!==s?s:Jn.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=n,this.source=Ks.Source.Unknown}setTrack(e){this.track&&(this.track.off(ws.Muted,this.handleMuted),this.track.off(ws.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(ws.Muted,this.handleMuted),e.on(ws.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},null===(e=this.loggerContextCb)||void 0===e?void 0:e.call(this)),nr(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return void 0!==this.track}get isEncrypted(){return this.encryption!==ot.NONE}get audioTrack(){if(Bo(this.track))return this.track}get videoTrack(){if(Vo(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=Ks.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===Ks.Kind.Video&&e.width>0&&(this.dimensions={width:e.width,height:e.height},this.simulcasted=e.simulcast),this.encryption=e.encryption,this.trackInfo=e,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:e}))}}!function(e){var t,n;(t=e.SubscriptionStatus||(e.SubscriptionStatus={})).Desired="desired",t.Subscribed="subscribed",t.Unsubscribed="unsubscribed",(n=e.PermissionStatus||(e.PermissionStatus={})).Allowed="allowed",n.NotAllowed="not_allowed"}(qa||(qa={}));class Ha extends qa{get isUpstreamPaused(){var e;return null===(e=this.track)||void 0===e?void 0:e.isUpstreamPaused}constructor(e,t,n,i){super(e,t.sid,t.name,i),this.track=void 0,this.handleTrackEnded=()=>{this.emit(ws.Ended)},this.handleCpuConstrained=()=>{this.track&&Vo(this.track)&&this.emit(ws.CpuConstrained,this.track)},this.updateInfo(t),this.setTrack(n)}setTrack(e){this.track&&(this.track.off(ws.Ended,this.handleTrackEnded),this.track.off(ws.CpuConstrained,this.handleCpuConstrained)),super.setTrack(e),e&&(e.on(ws.Ended,this.handleTrackEnded),e.on(ws.CpuConstrained,this.handleCpuConstrained))}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return ti(this,void 0,void 0,function*(){var e;return null===(e=this.track)||void 0===e?void 0:e.mute()})}unmute(){return ti(this,void 0,void 0,function*(){var e;return null===(e=this.track)||void 0===e?void 0:e.unmute()})}pauseUpstream(){return ti(this,void 0,void 0,function*(){var e;yield null===(e=this.track)||void 0===e?void 0:e.pauseUpstream()})}resumeUpstream(){return ti(this,void 0,void 0,function*(){var e;yield null===(e=this.track)||void 0===e?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(Bo(this.track)){const t=this.track.getSourceTrackSettings(),n=new Set;return t.autoGainControl&&n.add(Qe.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&n.add(Qe.TF_ECHO_CANCELLATION),t.noiseSuppression&&n.add(Qe.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&n.add(Qe.TF_STEREO),(null===(e=this.options)||void 0===e?void 0:e.dtx)||n.add(Qe.TF_NO_DTX),this.track.enhancedNoiseCancellation&&n.add(Qe.TF_ENHANCED_NOISE_CANCELLATION),Array.from(n.values())}return[]}}function Wa(e,t){return ti(this,void 0,void 0,function*(){null!=e||(e={});let n=!1;const{audioProcessor:i,videoProcessor:s,optionsWithoutProcessor:o}=ir(e);let r=o.audio,a=o.video;if(i&&"object"==typeof o.audio&&(o.audio.processor=i),s&&"object"==typeof o.video&&(o.video.processor=s),e.audio&&"object"==typeof o.audio&&"string"==typeof o.audio.deviceId){const e=o.audio.deviceId;o.audio.deviceId={exact:e},n=!0,r=Object.assign(Object.assign({},o.audio),{deviceId:{ideal:e}})}if(o.video&&"object"==typeof o.video&&"string"==typeof o.video.deviceId){const e=o.video.deviceId;o.video.deviceId={exact:e},n=!0,a=Object.assign(Object.assign({},o.video),{deviceId:{ideal:e}})}!0===o.audio?o.audio={deviceId:"default"}:"object"==typeof o.audio&&null!==o.audio&&(o.audio=Object.assign(Object.assign({},o.audio),{deviceId:o.audio.deviceId||"default"})),!0===o.video?o.video={deviceId:"default"}:"object"!=typeof o.video||o.video.deviceId||(o.video.deviceId="default");const c=Go(o,Hr,Wr),d=$o(c),l=navigator.mediaDevices.getUserMedia(d);o.audio&&(cr.userMediaPromiseMap.set("audioinput",l),l.catch(()=>cr.userMediaPromiseMap.delete("audioinput"))),o.video&&(cr.userMediaPromiseMap.set("videoinput",l),l.catch(()=>cr.userMediaPromiseMap.delete("videoinput")));try{const e=yield l;return yield Promise.all(e.getTracks().map(n=>ti(this,void 0,void 0,function*(){const o="audio"===n.kind;let r,a=o?c.audio:c.video;"boolean"!=typeof a&&a||(a={});const l=o?d.audio:d.video;"boolean"!=typeof l&&(r=l);const u=n.getSettings().deviceId;(null==r?void 0:r.deviceId)&&Do(r.deviceId)!==u?r.deviceId=u:r||(r={deviceId:u});const h=function(e,t,n){switch(e.kind){case"audio":return new oa(e,t,!1,void 0,n);case"video":return new va(e,t,!1,n);default:throw new xs("unsupported track type: ".concat(e.kind))}}(n,r,t);return h.kind===Ks.Kind.Video?h.source=Ks.Source.Camera:h.kind===Ks.Kind.Audio&&(h.source=Ks.Source.Microphone),h.mediaStream=e,Bo(h)&&i?yield h.setProcessor(i):Vo(h)&&s&&(yield h.setProcessor(s)),h})))}catch(i){if(!n)throw i;return Wa(Object.assign(Object.assign({},e),{audio:r,video:a}),t)}})}var za,Ka;!function(e){e.Excellent="excellent",e.Good="good",e.Poor="poor",e.Lost="lost",e.Unknown="unknown"}(za||(za={}));class Ga extends ri.EventEmitter{get logContext(){var e,t;return Object.assign({},null===(t=null===(e=this.loggerOptions)||void 0===e?void 0:e.loggerContextCb)||void 0===t?void 0:t.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return(null===(e=this.permissions)||void 0===e?void 0:e.agent)||this.kind===it.AGENT}get isActive(){var e;return(null===(e=this.participantInfo)||void 0===e?void 0:e.state)===nt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,n,i,s,o){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:it.STANDARD;var a;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=za.Unknown,this.log=Yn,this.log=Qn(null!==(a=null==o?void 0:o.loggerName)&&void 0!==a?a:Jn.Participant),this.loggerOptions=o,this.setMaxListeners(100),this.sid=e,this.identity=t,this.name=n,this.metadata=i,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=r,this._attributes=null!=s?s:{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,t]of this.trackPublications)if(t.source===e)return t}getTrackPublicationByName(e){for(const[,t]of this.trackPublications)if(t.trackName===e)return t}waitUntilActive(){return this.isActive?Promise.resolve():(this.activeFuture||(this.activeFuture=new Lo,this.once(Ts.Active,()=>{var e,t;null===(t=null===(e=this.activeFuture)||void 0===e?void 0:e.resolve)||void 0===t||t.call(e),this.activeFuture=void 0})),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const t=this.getTrackPublication(Ks.Source.Camera);return!(null===(e=null==t?void 0:t.isMuted)||void 0===e||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(Ks.Source.Microphone);return!(null===(e=null==t?void 0:t.isMuted)||void 0===e||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(Ks.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(1e3*Number.parseInt(""+this.participantInfo.joinedAt)):new Date}updateInfo(e){var t;return(!this.participantInfo||this.participantInfo.sid!==e.sid||e.version>=this.participantInfo.version)&&(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.state===nt.ACTIVE&&(null===(t=this.participantInfo)||void 0===t?void 0:t.state)!==nt.ACTIVE&&this.emit(Ts.Active),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,!0)}_setMetadata(e){const t=this.metadata!==e,n=this.metadata;this.metadata=e,t&&this.emit(Ts.ParticipantMetadataChanged,n)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(Ts.ParticipantNameChanged,e)}_setAttributes(e){const t=function(e,t){var n;void 0===e&&(e={}),void 0===t&&(t={});const i=[...Object.keys(t),...Object.keys(e)],s={};for(const o of i)e[o]!==t[o]&&(s[o]=null!==(n=t[o])&&void 0!==n?n:"");return s}(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(Ts.AttributesChanged,t)}setPermissions(e){var t,n,i,s,o,r;const a=this.permissions,c=e.canPublish!==(null===(t=this.permissions)||void 0===t?void 0:t.canPublish)||e.canSubscribe!==(null===(n=this.permissions)||void 0===n?void 0:n.canSubscribe)||e.canPublishData!==(null===(i=this.permissions)||void 0===i?void 0:i.canPublishData)||e.hidden!==(null===(s=this.permissions)||void 0===s?void 0:s.hidden)||e.recorder!==(null===(o=this.permissions)||void 0===o?void 0:o.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((e,t)=>{var n;return e!==(null===(n=this.permissions)||void 0===n?void 0:n.canPublishSources[t])})||e.canSubscribeMetrics!==(null===(r=this.permissions)||void 0===r?void 0:r.canSubscribeMetrics);return this.permissions=e,c&&this.emit(Ts.ParticipantPermissionsChanged,a),c}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(Ts.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=function(e){switch(e){case Ke.EXCELLENT:return za.Excellent;case Ke.GOOD:return za.Good;case Ke.POOR:return za.Poor;case Ke.LOST:return za.Lost;default:return za.Unknown}}(e),t!==this._connectionQuality&&this.emit(Ts.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,t;this.activeFuture&&(null===(t=(e=this.activeFuture).reject)||void 0===t||t.call(e,Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(t=>Bo(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(ws.Muted,()=>{this.emit(Ts.TrackMuted,e)}),e.on(ws.Unmuted,()=>{this.emit(Ts.TrackUnmuted,e)});switch(e.track&&(e.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case Ks.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case Ks.Kind.Video:this.videoTrackPublications.set(e.trackSid,e)}}}class Ja extends Ga{constructor(e,t,n,i,s,o){super(e,t,void 0,void 0,void 0,{loggerName:i.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=ot.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Lo)},this.handleReconnected=()=>{var e,t;null===(t=null===(e=this.reconnectFuture)||void 0===e?void 0:e.resolve)||void 0===t||t.call(e),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var e,t,n,i,s,o;this.reconnectFuture&&(this.reconnectFuture.promise.catch(e=>this.log.warn(e.message,this.logContext)),null===(t=null===(e=this.reconnectFuture)||void 0===e?void 0:e.reject)||void 0===t||t.call(e,Error("Got disconnected during reconnection attempt")),this.reconnectFuture=void 0),this.signalConnectedFuture&&(null===(i=(n=this.signalConnectedFuture).reject)||void 0===i||i.call(n,Error("Got disconnected without signal connected")),this.signalConnectedFuture=void 0),null===(o=null===(s=this.activeAgentFuture)||void 0===s?void 0:s.reject)||void 0===o||o.call(s,Error("Got disconnected without active agent present")),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=e=>{var t,n;e.participant&&this.updateInfo(e.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new Lo),null===(n=(t=this.signalConnectedFuture).resolve)||void 0===n||n.call(t)},this.handleSignalRequestResponse=e=>{const{requestId:t,reason:n,message:i}=e,s=this.pendingSignalRequests.get(t);s&&(n!==Nn.OK&&s.reject(new As(i,n)),this.pendingSignalRequests.delete(t))},this.handleDataPacket=e=>{switch(e.value.case){case"rpcResponse":let t=e.value.value,n=null,i=null;"payload"===t.value.case?n=t.value.value:"error"===t.value.case&&(i=Yr.fromProto(t.value.value)),this.handleIncomingRpcResponse(t.requestId,n,i);break;case"rpcAck":this.handleIncomingRpcAck(e.value.value.requestId)}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(e=>function(e){var t,n,i;if(!e.participantSid&&!e.participantIdentity)throw Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new Tn({participantIdentity:null!==(t=e.participantIdentity)&&void 0!==t?t:"",participantSid:null!==(n=e.participantSid)&&void 0!==n?n:"",allTracks:null!==(i=e.allowAll)&&void 0!==i&&i,trackSids:e.allowedTrackSids||[]})}(e)))},this.onTrackUnmuted=e=>{this.onTrackMuted(e,e.isUpstreamPaused)},this.onTrackMuted=(e,t)=>{void 0===t&&(t=!0),e.sid?this.engine.updateMuteStatus(e.sid,t):this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),nr(e)))},this.onTrackUpstreamPaused=e=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),nr(e))),this.onTrackMuted(e,!0)},this.onTrackUpstreamResumed=e=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),nr(e))),this.onTrackMuted(e,e.isMuted)},this.onTrackFeatureUpdate=e=>{const t=this.audioTrackPublications.get(e.sid);t?this.engine.client.sendUpdateLocalAudioTrack(t.trackSid,t.getTrackFeatures()):this.log.warn("Could not update local audio track settings, missing publication for track ".concat(e.sid),this.logContext)},this.onTrackCpuConstrained=(e,t)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),nr(t))),this.emit(Ts.LocalTrackCpuConstrained,e,t)},this.handleSubscribedQualityUpdate=e=>ti(this,void 0,void 0,function*(){var t,n,i,s;if(!(null===(s=this.roomOptions)||void 0===s?void 0:s.dynacast))return;const o=this.videoTrackPublications.get(e.trackSid);if(!o)return void this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:e.trackSid}));if(!o.videoTrack)return;const r=yield o.videoTrack.setPublishingCodecs(e.subscribedCodecs);try{for(var a,c=!0,d=ii(r);!(t=(a=yield d.next()).done);c=!0){c=!1;const e=a.value;Xs(e)&&(this.log.debug("publish ".concat(e," for ").concat(o.videoTrack.sid),Object.assign(Object.assign({},this.logContext),nr(o))),yield this.publishAdditionalCodecForTrack(o.videoTrack,e,o.options))}}catch(e){n={error:e}}finally{try{c||t||!(i=d.return)||(yield i.call(d))}finally{if(n)throw n.error}}}),this.handleLocalTrackUnpublished=e=>{const t=this.trackPublications.get(e.trackSid);t?this.unpublishTrack(t.track):this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:e.trackSid}))},this.handleTrackEnded=e=>ti(this,void 0,void 0,function*(){if(e.source===Ks.Source.ScreenShare||e.source===Ks.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),nr(e))),this.unpublishTrack(e);else if(e.isUserProvided)yield e.mute();else if(Ho(e)||qo(e))try{if(fo())try{const t=yield null===navigator||void 0===navigator?void 0:navigator.permissions.query({name:e.source===Ks.Source.Camera?"camera":"microphone"});if(t&&"denied"===t.state)throw this.log.warn("user has revoked access to ".concat(e.source),Object.assign(Object.assign({},this.logContext),nr(e))),t.onchange=()=>{"denied"!==t.state&&(e.isMuted||e.restartTrack(),t.onchange=null)},Error("GetUserMedia Permission denied")}catch(e){}e.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),nr(e))),Ho(e)?yield e.restartTrack({deviceId:"default"}):yield e.restartTrack())}catch(t){this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),nr(e))),yield e.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=n,this.roomOptions=i,this.setupEngine(n),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=s,this.roomOutgoingDataStreamManager=o}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==ot.NONE}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setupEngine(e){var t;this.engine=e,this.engine.on(Ss.RemoteMute,(e,t)=>{const n=this.trackPublications.get(e);n&&n.track&&(t?n.mute():n.unmute())}),(null===(t=this.signalConnectedFuture)||void 0===t?void 0:t.isResolved)&&(this.signalConnectedFuture=void 0),this.engine.on(Ss.Connected,this.handleReconnected).on(Ss.SignalConnected,this.handleSignalConnected).on(Ss.SignalRestarted,this.handleReconnected).on(Ss.SignalResumed,this.handleReconnected).on(Ss.Restarting,this.handleReconnecting).on(Ss.Resuming,this.handleReconnecting).on(Ss.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(Ss.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(Ss.Closing,this.handleClosing).on(Ss.SignalRequestResponse,this.handleSignalRequestResponse).on(Ss.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return ti(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return ti(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return ti(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return ti(this,arguments,void 0,function(e){var t=this;let{metadata:n,name:i,attributes:s}=e;return function*(){return new Promise((e,o)=>ti(t,void 0,void 0,function*(){var t,r;try{let a=!1;const c=yield this.engine.client.sendUpdateLocalMetadata(null!==(t=null!=n?n:this.metadata)&&void 0!==t?t:"",null!==(r=null!=i?i:this.name)&&void 0!==r?r:"",s),d=performance.now();for(this.pendingSignalRequests.set(c,{resolve:e,reject:e=>{o(e),a=!0},values:{name:i,metadata:n,attributes:s}});5e3>performance.now()-d&&!a;){if((!i||this.name===i)&&(!n||this.metadata===n)&&(!s||Object.entries(s).every(e=>{let[t,n]=e;return this.attributes[t]===n||""===n&&!this.attributes[t]})))return this.pendingSignalRequests.delete(c),void e();yield oo(50)}o(new As("Request to update local metadata timed out","TimeoutError"))}catch(e){e instanceof Error&&o(e)}}))}()})}setCameraEnabled(e,t,n){return this.setTrackEnabled(Ks.Source.Camera,e,t,n)}setMicrophoneEnabled(e,t,n){return this.setTrackEnabled(Ks.Source.Microphone,e,t,n)}setScreenShareEnabled(e,t,n){return this.setTrackEnabled(Ks.Source.ScreenShare,e,t,n)}setE2EEEnabled(e){return ti(this,void 0,void 0,function*(){this.encryptionType=e?ot.GCM:ot.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,n,i){return ti(this,void 0,void 0,function*(){var s,o;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let r=this.getTrackPublication(e);if(t)if(r)yield r.unmute();else{let t;if(this.pendingPublishing.has(e)){const t=yield this.waitForPendingPublicationOfSource(e);return t||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield null==t?void 0:t.unmute(),t}this.pendingPublishing.add(e);try{switch(e){case Ks.Source.Camera:t=yield this.createTracks({video:null===(s=n)||void 0===s||s});break;case Ks.Source.Microphone:t=yield this.createTracks({audio:null===(o=n)||void 0===o||o});break;case Ks.Source.ScreenShare:t=yield this.createScreenTracks(Object.assign({},n));break;default:throw new xs(e)}}catch(n){throw null==t||t.forEach(e=>{e.stop()}),n instanceof Error&&this.emit(Ts.MediaDevicesError,n,Zo(e)),this.pendingPublishing.delete(e),n}for(const i of t){const t=Object.assign(Object.assign({},this.roomOptions.publishDefaults),n);e===Ks.Source.Microphone&&Bo(i)&&t.preConnectBuffer&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),i.startPreConnectBuffer())}try{const e=[];for(const n of t)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),nr(n))),e.push(this.publishTrack(n,i));const n=yield Promise.all(e);[r]=n}catch(e){throw null==t||t.forEach(e=>{e.stop()}),e}finally{this.pendingPublishing.delete(e)}}else if(!(null==r?void 0:r.track)&&this.pendingPublishing.has(e)&&(r=yield this.waitForPendingPublicationOfSource(e),r||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),r&&r.track)if(e===Ks.Source.ScreenShare){r=yield this.unpublishTrack(r.track);const e=this.getTrackPublication(Ks.Source.ScreenShareAudio);e&&e.track&&this.unpublishTrack(e.track)}else yield r.mute();return r})}enableCameraAndMicrophone(){return ti(this,void 0,void 0,function*(){if(!this.pendingPublishing.has(Ks.Source.Camera)&&!this.pendingPublishing.has(Ks.Source.Microphone)){this.pendingPublishing.add(Ks.Source.Camera),this.pendingPublishing.add(Ks.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(e=>this.publishTrack(e)))}finally{this.pendingPublishing.delete(Ks.Source.Camera),this.pendingPublishing.delete(Ks.Source.Microphone)}}})}createTracks(e){return ti(this,void 0,void 0,function*(){var t,n;null!=e||(e={});const i=Go(e,null===(t=this.roomOptions)||void 0===t?void 0:t.audioCaptureDefaults,null===(n=this.roomOptions)||void 0===n?void 0:n.videoCaptureDefaults);try{const e=yield Wa(i,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return e.map(e=>(Bo(e)&&(this.microphoneError=void 0,e.setAudioContext(this.audioContext),e.source=Ks.Source.Microphone,this.emit(Ts.AudioStreamAcquired)),Vo(e)&&(this.cameraError=void 0,e.source=Ks.Source.Camera),e))}catch(t){throw t instanceof Error&&(e.audio&&(this.microphoneError=t),e.video&&(this.cameraError=t)),t}})}createScreenTracks(e){return ti(this,void 0,void 0,function*(){if(void 0===e&&(e={}),void 0===navigator.mediaDevices.getDisplayMedia)throw new Is("getDisplayMedia not supported");void 0!==e.resolution||function(){const e=Fs();return"Safari"===(null==e?void 0:e.name)&&e.version.startsWith("17.")||"iOS"===(null==e?void 0:e.os)&&!!(null==e?void 0:e.osVersion)&&So(e.osVersion,"17")>=0}()||(e.resolution=io.h1080fps30.resolution);const t=function(e){var t,n;let i=null===(t=e.video)||void 0===t||t;return e.resolution&&e.resolution.width>0&&e.resolution.height>0&&(i="boolean"==typeof i?{}:i,i=po()?Object.assign(Object.assign({},i),{width:{max:e.resolution.width},height:{max:e.resolution.height},frameRate:e.resolution.frameRate}):Object.assign(Object.assign({},i),{width:{ideal:e.resolution.width},height:{ideal:e.resolution.height},frameRate:e.resolution.frameRate})),{audio:null!==(n=e.audio)&&void 0!==n&&n,video:i,controller:e.controller,selfBrowserSurface:e.selfBrowserSurface,surfaceSwitching:e.surfaceSwitching,systemAudio:e.systemAudio,preferCurrentTab:e.preferCurrentTab}}(e),n=yield navigator.mediaDevices.getDisplayMedia(t),i=n.getVideoTracks();if(0===i.length)throw new xs("no video track found");const s=new va(i[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=Ks.Source.ScreenShare,e.contentHint&&(s.mediaStreamTrack.contentHint=e.contentHint);const o=[s];if(n.getAudioTracks().length>0){this.emit(Ts.AudioStreamAcquired);const e=new oa(n.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});e.source=Ks.Source.ScreenShareAudio,o.push(e)}return o})}publishTrack(e,t){return ti(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,t)})}publishOrRepublishTrack(e,t){return ti(this,arguments,void 0,function(e,t){var n=this;let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function*(){var s,o,r,a;let c,d;if(Ho(e)&&e.setAudioContext(n.audioContext),yield null===(s=n.reconnectFuture)||void 0===s?void 0:s.promise,n.republishPromise&&!i&&(yield n.republishPromise),Fo(e)&&n.pendingPublishPromises.has(e)&&(yield n.pendingPublishPromises.get(e)),e instanceof MediaStreamTrack)c=e.getConstraints();else{let t;switch(c=e.constraints,e.source){case Ks.Source.Microphone:t="audioinput";break;case Ks.Source.Camera:t="videoinput"}t&&n.activeDeviceMap.has(t)&&(c=Object.assign(Object.assign({},c),{deviceId:n.activeDeviceMap.get(t)}))}if(e instanceof MediaStreamTrack)switch(e.kind){case"audio":e=new oa(e,c,!0,n.audioContext,{loggerName:n.roomOptions.loggerName,loggerContextCb:()=>n.logContext});break;case"video":e=new va(e,c,!0,{loggerName:n.roomOptions.loggerName,loggerContextCb:()=>n.logContext});break;default:throw new xs("unsupported MediaStreamTrack kind ".concat(e.kind))}else e.updateLoggerOptions({loggerName:n.roomOptions.loggerName,loggerContextCb:()=>n.logContext});if(n.trackPublications.forEach(t=>{t.track&&t.track===e&&(d=t)}),d)return n.log.warn("track has already been published, skipping",Object.assign(Object.assign({},n.logContext),nr(d))),d;const l=Object.assign(Object.assign({},n.roomOptions.publishDefaults),t),u="channelCount"in e.mediaStreamTrack.getSettings()&&2===e.mediaStreamTrack.getSettings().channelCount||2===e.mediaStreamTrack.getConstraints().channelCount,h=null!==(o=l.forceStereo)&&void 0!==o?o:u;h&&(void 0===l.dtx&&n.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},n.logContext),nr(e))),void 0===l.red&&n.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),null!==(r=l.dtx)&&void 0!==r||(l.dtx=!1),null!==(a=l.red)&&void 0!==a||(l.red=!1)),!function(){const e=Fs(),t="17.2";if(e)return"Safari"!==e.name&&"iOS"!==e.os||!("iOS"!==e.os||!e.osVersion||0>So(e.osVersion,t))||"Safari"===e.name&&So(e.version,t)>=0}()&&n.roomOptions.e2ee&&(n.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({},n.logContext)),l.simulcast=!1),l.source&&(e.source=l.source);const p=new Promise((t,i)=>ti(n,void 0,void 0,function*(){try{if(this.engine.client.currentState!==gr.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:nr(e)}));let n=!1;const s=setTimeout(()=>{n=!0,e.stop(),i(new Ds("publishing rejected as engine not connected within timeout",408))},15e3);if(yield this.waitUntilEngineConnected(),clearTimeout(s),n)return;const o=yield this.publish(e,l,h);t(o)}else try{const n=yield this.publish(e,l,h);t(n)}catch(e){i(e)}}catch(e){i(e)}}));n.pendingPublishPromises.set(e,p);try{return yield p}catch(e){throw e}finally{n.pendingPublishPromises.delete(e)}}()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new Lo),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),nr(e))),!1;const{canPublish:t,canPublishSources:n}=this.permissions;return!(!t||0!==n.length&&!n.map(e=>function(e){switch(e){case We.CAMERA:return Ks.Source.Camera;case We.MICROPHONE:return Ks.Source.Microphone;case We.SCREEN_SHARE:return Ks.Source.ScreenShare;case We.SCREEN_SHARE_AUDIO:return Ks.Source.ScreenShareAudio;default:return Ks.Source.Unknown}}(e)).includes(e.source))||(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),nr(e))),!1)}publish(e,t,n){return ti(this,void 0,void 0,function*(){var i,s,o,r,a,c,d,l,u,h;if(!this.hasPermissionsToPublish(e))throw new Ds("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(t=>Fo(e)&&t.source===e.source)&&e.source!==Ks.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),nr(e))),t.stopMicTrackOnMute&&Bo(e)&&(e.stopOnMute=!0),e.source===Ks.Source.ScreenShare&&uo()&&(t.simulcast=!1),"av1"!==t.videoCodec||function(){if(!("getCapabilities"in RTCRtpSender))return!1;if(po()||uo())return!1;const e=RTCRtpSender.getCapabilities("video");let t=!1;if(e)for(const n of e.codecs)if("video/av1"===n.mimeType.toLowerCase()){t=!0;break}return t}()||(t.videoCodec=void 0),"vp9"!==t.videoCodec||function(){if(!("getCapabilities"in RTCRtpSender))return!1;if(uo())return!1;if(po()){const e=Fs();if((null==e?void 0:e.version)&&0>So(e.version,"16"))return!1;if("iOS"===(null==e?void 0:e.os)&&(null==e?void 0:e.osVersion)&&0>So(e.osVersion,"16"))return!1}const e=RTCRtpSender.getCapabilities("video");let t=!1;if(e)for(const n of e.codecs)if("video/vp9"===n.mimeType.toLowerCase()){t=!0;break}return t}()||(t.videoCodec=void 0),void 0===t.videoCodec&&(t.videoCodec=Vr),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(e=>t.videoCodec===er(e.mime))||(t.videoCodec=er(this.enabledPublishVideoCodecs[0].mime)));const p=t.videoCodec;e.on(ws.Muted,this.onTrackMuted),e.on(ws.Unmuted,this.onTrackUnmuted),e.on(ws.Ended,this.handleTrackEnded),e.on(ws.UpstreamPaused,this.onTrackUpstreamPaused),e.on(ws.UpstreamResumed,this.onTrackUpstreamResumed),e.on(ws.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const m=[],g=!(null===(i=t.dtx)||void 0===i||i),f=e.getSourceTrackSettings();f.autoGainControl&&m.push(Qe.TF_AUTO_GAIN_CONTROL),f.echoCancellation&&m.push(Qe.TF_ECHO_CANCELLATION),f.noiseSuppression&&m.push(Qe.TF_NOISE_SUPPRESSION),f.channelCount&&f.channelCount>1&&m.push(Qe.TF_STEREO),g&&m.push(Qe.TF_NO_DTX),Ho(e)&&e.hasPreConnectBuffer&&m.push(Qe.TF_PRECONNECT_BUFFER);const v=new Gt({cid:e.mediaStreamTrack.id,name:t.name,type:Ks.kindToProto(e.kind),muted:e.isMuted,source:Ks.sourceToProto(e.source),disableDtx:g,encryption:this.encryptionType,stereo:n,disableRed:this.isE2EEEnabled||!(null===(s=t.red)||void 0===s||s),stream:null==t?void 0:t.stream,backupCodecPolicy:null==t?void 0:t.backupCodecPolicy,audioFeatures:m});let y;if(e.kind===Ks.Kind.Video){let n={width:0,height:0};try{n=yield e.waitForDimensions()}catch(t){const i=null!==(r=null===(o=this.roomOptions.videoCaptureDefaults)||void 0===o?void 0:o.resolution)&&void 0!==r?r:to.h720.resolution;n={width:i.width,height:i.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),nr(e)),{dims:n}))}v.width=n.width,v.height=n.height,qo(e)&&(co(p)&&(e.source===Ks.Source.ScreenShare&&(t.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),nr(e))))),t.scalabilityMode=null!==(a=t.scalabilityMode)&&void 0!==a?a:"L3T3_KEY"),v.simulcastCodecs=[new Kt({codec:p,cid:e.mediaStreamTrack.id})],!0===t.backupCodec&&(t.backupCodec={codec:Vr}),t.backupCodec&&p!==t.backupCodec.codec&&v.encryption===ot.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),v.simulcastCodecs.push(new Kt({codec:t.backupCodec.codec,cid:""})))),y=ha(e.source===Ks.Source.ScreenShare,v.width,v.height,t),v.layers=ka(v.width,v.height,y,co(t.videoCodec))}else e.kind===Ks.Kind.Audio&&(y=[{maxBitrate:null===(c=t.audioPreset)||void 0===c?void 0:c.maxBitrate,priority:null!==(l=null===(d=t.audioPreset)||void 0===d?void 0:d.priority)&&void 0!==l?l:"high",networkPriority:null!==(h=null===(u=t.audioPreset)||void 0===u?void 0:u.priority)&&void 0!==h?h:"high"}]);if(!this.engine||this.engine.isClosed)throw new Os("cannot publish track when not connected");const b=()=>ti(this,void 0,void 0,function*(){var n,i,s;if(!this.engine.pcManager)throw new Os("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,y),this.emit(Ts.LocalSenderCreated,e.sender,e),qo(e)&&(null!==(n=t.degradationPreference)&&void 0!==n||(t.degradationPreference=function(e){return e.source===Ks.Source.ScreenShare||e.constraints.height&&Do(e.constraints.height)>=1080?"maintain-resolution":"balanced"}(e)),e.setDegradationPreference(t.degradationPreference)),y)if(uo()&&e.kind===Ks.Kind.Audio){let t;for(const n of this.engine.pcManager.publisher.getTransceivers())if(n.sender===e.sender){t=n;break}t&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:t,codec:"opus",maxbr:(null===(i=y[0])||void 0===i?void 0:i.maxBitrate)?y[0].maxBitrate/1e3:0})}else e.codec&&co(e.codec)&&(null===(s=y[0])||void 0===s?void 0:s.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:v.cid,codec:e.codec,maxbr:y[0].maxBitrate/1e3});yield this.engine.negotiate()});let k;const C=new Promise((t,n)=>ti(this,void 0,void 0,function*(){var i;try{k=yield this.engine.addTrack(v),t(k)}catch(t){e.sender&&(null===(i=this.engine.pcManager)||void 0===i?void 0:i.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(t=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),nr(e)),{error:t}))})),n(t)}}));if(this.enabledPublishVideoCodecs.length>0){const e=yield Promise.all([C,b()]);k=e[0]}else{let n;if(k=yield C,k.codecs.forEach(e=>{void 0===n&&(n=e.mimeType)}),n&&e.kind===Ks.Kind.Video){const i=er(n);i!==p&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),nr(e)),{codec:i})),t.videoCodec=i,y=ha(e.source===Ks.Source.ScreenShare,v.width,v.height,t))}yield b()}const T=new Ha(e.kind,k,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(T.on(ws.CpuConstrained,e=>this.onTrackCpuConstrained(e,T)),T.options=t,e.sid=k.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:y,trackInfo:k})),qo(e)?e.startMonitor(this.engine.client):Ho(e)&&e.startMonitor(),this.addTrackPublication(T),this.emit(Ts.LocalTrackPublished,T),Ho(e)&&k.audioFeatures.includes(Qe.TF_PRECONNECT_BUFFER)){const t=e.getPreConnectBuffer(),n=e.getPreConnectBufferMimeType();if(this.on(Ts.LocalTrackSubscribed,t=>{if(t.trackSid===k.sid){if(!e.hasPreConnectBuffer)return void this.log.warn("subscribe event came to late, buffer already closed",this.logContext);this.log.debug("finished recording preconnect buffer",Object.assign(Object.assign({},this.logContext),nr(e))),e.stopPreConnectBuffer()}}),t){const i=new Promise((i,s)=>ti(this,void 0,void 0,function*(){var o,r,a,c,d;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),nr(e)));const p=setTimeout(()=>{s(Error("agent not active within 10 seconds"))},1e4),m=yield this.waitUntilActiveAgentPresent();clearTimeout(p),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),nr(e)));const g=yield this.streamBytes({name:"preconnect-buffer",mimeType:n,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[m.identity],attributes:{trackId:T.trackSid,sampleRate:(null!==(c=f.sampleRate)&&void 0!==c?c:"48000")+"",channels:(null!==(d=f.channelCount)&&void 0!==d?d:"1")+""}});try{for(var l,u=!0,h=ii(t);!(o=(l=yield h.next()).done);u=!0){u=!1;const e=l.value;yield g.write(e)}}catch(e){r={error:e}}finally{try{u||o||!(a=h.return)||(yield a.call(h))}finally{if(r)throw r.error}}yield g.close(),i()}catch(e){s(e)}}));i.then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),nr(e)))}).catch(t=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),nr(e)),{error:t}))})}}return T})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,n){return ti(this,void 0,void 0,function*(){var i;if(this.encryptionType!==ot.NONE)return;let s;if(this.trackPublications.forEach(t=>{t.track&&t.track===e&&(s=t)}),!s)throw new xs("track is not published");if(!qo(e))throw new xs("track is not a video track");const o=Object.assign(Object.assign({},null===(i=this.roomOptions)||void 0===i?void 0:i.publishDefaults),n),r=function(e,t,n){var i,s,o,r;if(!n.backupCodec||!0===n.backupCodec||n.backupCodec.codec===n.videoCodec)return;t!==n.backupCodec.codec&&Yn.warn("requested a different codec than specified as backup",{serverRequested:t,backup:n.backupCodec.codec}),n.videoCodec=t,n.videoEncoding=n.backupCodec.encoding;const a=e.mediaStreamTrack.getSettings(),c=null!==(i=a.width)&&void 0!==i?i:null===(s=e.dimensions)||void 0===s?void 0:s.width,d=null!==(o=a.height)&&void 0!==o?o:null===(r=e.dimensions)||void 0===r?void 0:r.height;return e.source===Ks.Source.ScreenShare&&n.simulcast&&(n.simulcast=!1),ha(e.source===Ks.Source.ScreenShare,c,d,n)}(e,t,o);if(!r)return void this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),nr(e)));const a=e.addSimulcastTrack(t,r);if(!a)return;const c=new Gt({cid:a.mediaStreamTrack.id,type:Ks.kindToProto(e.kind),muted:e.isMuted,source:Ks.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:o.videoCodec,cid:a.mediaStreamTrack.id}]});if(c.layers=ka(c.width,c.height,r),!this.engine||this.engine.isClosed)throw new Os("cannot publish track when not connected");const d=(yield Promise.all([this.engine.addTrack(c),(()=>ti(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,a,o,r),yield this.engine.negotiate()}))()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:r,trackInfo:d}))})}unpublishTrack(e,t){return ti(this,void 0,void 0,function*(){var n,i;if(Fo(e)){const t=this.pendingPublishPromises.get(e);t&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),nr(e))),yield t)}const s=this.getPublicationForTrack(e),o=s?nr(s):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),o)),!s||!s.track)return void this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),o));(e=s.track).off(ws.Muted,this.onTrackMuted),e.off(ws.Unmuted,this.onTrackUnmuted),e.off(ws.Ended,this.handleTrackEnded),e.off(ws.UpstreamPaused,this.onTrackUpstreamPaused),e.off(ws.UpstreamResumed,this.onTrackUpstreamResumed),e.off(ws.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),void 0===t&&(t=null===(i=null===(n=this.roomOptions)||void 0===n?void 0:n.stopLocalTrackOnUnpublish)||void 0===i||i),t?e.stop():e.stopMonitor();let r=!1;const a=e.sender;if(e.sender=void 0,this.engine.pcManager&&Gr.FAILED>this.engine.pcManager.currentState&&a)try{for(const e of this.engine.pcManager.publisher.getTransceivers())e.sender===a&&(e.direction="inactive",r=!0);if(this.engine.removeTrack(a)&&(r=!0),qo(e)){for(const[,t]of e.simulcastCodecs)t.sender&&(this.engine.removeTrack(t.sender)&&(r=!0),t.sender=void 0);e.simulcastCodecs.clear()}}catch(e){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),o),{error:e}))}switch(this.trackPublications.delete(s.trackSid),s.kind){case Ks.Kind.Audio:this.audioTrackPublications.delete(s.trackSid);break;case Ks.Kind.Video:this.videoTrackPublications.delete(s.trackSid)}return this.emit(Ts.LocalTrackUnpublished,s),s.setTrack(void 0),r&&(yield this.engine.negotiate()),s})}unpublishTracks(e){return ti(this,void 0,void 0,function*(){return(yield Promise.all(e.map(e=>this.unpublishTrack(e)))).filter(e=>!!e)})}republishAllTracks(e){return ti(this,arguments,void 0,function(e){var t=this;let n=1>=arguments.length||void 0===arguments[1]||arguments[1];return function*(){t.republishPromise&&(yield t.republishPromise),t.republishPromise=new Promise((i,s)=>ti(t,void 0,void 0,function*(){try{const t=[];this.trackPublications.forEach(n=>{n.track&&(e&&(n.options=Object.assign(Object.assign({},n.options),e)),t.push(n))}),yield Promise.all(t.map(e=>ti(this,void 0,void 0,function*(){const t=e.track;yield this.unpublishTrack(t,!1),!n||t.isMuted||t.source===Ks.Source.ScreenShare||t.source===Ks.Source.ScreenShareAudio||!Ho(t)&&!qo(t)||t.isUserProvided||(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:e.trackSid})),yield t.restartTrack()),yield this.publishOrRepublishTrack(t,e.options,!0)}))),i()}catch(e){s(e)}finally{this.republishPromise=void 0}})),yield t.republishPromise}()})}publishData(e){return ti(this,arguments,void 0,function(e){var t=this;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){const i=n.reliable?ut.RELIABLE:ut.LOSSY;let s=new ft({participantIdentity:t.identity,payload:e,destinationIdentities:n.destinationIdentities,topic:n.topic});const o=new lt({kind:i,value:{case:"user",value:s}});yield t.engine.sendDataPacket(o,i)}()})}publishDtmf(e,t){return ti(this,void 0,void 0,function*(){const n=new lt({kind:ut.RELIABLE,value:{case:"sipDtmf",value:new vt({code:e,digit:t})}});yield this.engine.sendDataPacket(n,ut.RELIABLE)})}sendChatMessage(e,t){return ti(this,void 0,void 0,function*(){const n={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:null==t?void 0:t.attachments},i=new lt({value:{case:"chatMessage",value:new kt(Object.assign(Object.assign({},n),{timestamp:R.parse(n.timestamp)}))}});return yield this.engine.sendDataPacket(i,ut.RELIABLE),this.emit(Ts.ChatMessage,n),n})}editChatMessage(e,t){return ti(this,void 0,void 0,function*(){const n=Object.assign(Object.assign({},t),{message:e,editTimestamp:Date.now()}),i=new lt({value:{case:"chatMessage",value:new kt(Object.assign(Object.assign({},n),{timestamp:R.parse(n.timestamp),editTimestamp:R.parse(n.editTimestamp)}))}});return yield this.engine.sendDataPacket(i,ut.RELIABLE),this.emit(Ts.ChatMessage,n),n})}sendText(e,t){return ti(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendText(e,t)})}streamText(e){return ti(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamText(e)})}sendFile(e,t){return ti(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendFile(e,t)})}streamBytes(e){return ti(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamBytes(e)})}performRpc(e){return ti(this,arguments,void 0,function(e){var t=this;let{destinationIdentity:n,method:i,payload:s,responseTimeout:o=15e3}=e;return function*(){return new Promise((e,r)=>ti(t,void 0,void 0,function*(){var t,a,c,d;if(Qr(s)>15360)return void r(Yr.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));if((null===(a=null===(t=this.engine.latestJoinResponse)||void 0===t?void 0:t.serverInfo)||void 0===a?void 0:a.version)&&0>So(null===(d=null===(c=this.engine.latestJoinResponse)||void 0===c?void 0:c.serverInfo)||void 0===d?void 0:d.version,"1.8.0"))return void r(Yr.builtIn("UNSUPPORTED_SERVER"));const l=Math.max(o,8e3),u=crypto.randomUUID();yield this.publishRpcRequest(n,u,i,s,l);const h=setTimeout(()=>{this.pendingAcks.delete(u),r(Yr.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(u),clearTimeout(p)},7e3);this.pendingAcks.set(u,{resolve:()=>{clearTimeout(h)},participantIdentity:n});const p=setTimeout(()=>{this.pendingResponses.delete(u),r(Yr.builtIn("RESPONSE_TIMEOUT"))},o);this.pendingResponses.set(u,{resolve:(t,n)=>{clearTimeout(p),this.pendingAcks.has(u)&&(console.warn("RPC response received before ack",u),this.pendingAcks.delete(u),clearTimeout(h)),n?r(n):e(null!=t?t:"")},participantIdentity:n})}))}()})}registerRpcMethod(e,t){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){this.participantTrackPermissions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const t=this.pendingAcks.get(e);t?(t.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,t,n){const i=this.pendingResponses.get(e);i?(i.resolve(t,n),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,t,n,i,s){return ti(this,void 0,void 0,function*(){const o=new lt({destinationIdentities:[e],kind:ut.RELIABLE,value:{case:"rpcRequest",value:new Ct({id:t,method:n,payload:i,responseTimeoutMs:s,version:1})}});yield this.engine.sendDataPacket(o,ut.RELIABLE)})}handleParticipantDisconnected(e){for(const[t,{participantIdentity:n}]of this.pendingAcks)n===e&&this.pendingAcks.delete(t);for(const[t,{participantIdentity:n,resolve:i}]of this.pendingResponses)n===e&&(i(null,Yr.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(t))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(e=>"video"===e.mime.split("/")[0].toLowerCase())}updateInfo(e){return!!super.updateInfo(e)&&(e.tracks.forEach(e=>{var t,n;const i=this.trackPublications.get(e.sid);if(i){const s=i.isMuted||null!==(n=null===(t=i.track)||void 0===t?void 0:t.isUpstreamPaused)&&void 0!==n&&n;s!==e.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),nr(i)),{mutedOnServer:s})),this.engine.client.sendMuteTrack(e.sid,s))}}),!0)}setActiveAgent(e){var t,n,i,s;this.firstActiveAgent=e,e&&!this.firstActiveAgent&&(this.firstActiveAgent=e),e?null===(n=null===(t=this.activeAgentFuture)||void 0===t?void 0:t.resolve)||void 0===n||n.call(t,e):null===(s=null===(i=this.activeAgentFuture)||void 0===i?void 0:i.reject)||void 0===s||s.call(i,Error("Agent disconnected")),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new Lo),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(n=>{const i=n.track;i&&(e instanceof MediaStreamTrack?(Ho(i)||qo(i))&&i.mediaStreamTrack===e&&(t=n):e===i&&(t=n))}),t}waitForPendingPublicationOfSource(e){return ti(this,void 0,void 0,function*(){const t=Date.now();for(;Date.now()<t+1e4;){const t=Array.from(this.pendingPublishPromises.entries()).find(t=>{let[n]=t;return n.source===e});if(t)return t[1];yield oo(20)}})}}class $a extends qa{constructor(e,t,n,i){super(e,t.sid,t.name,i),this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=e=>{this.setTrack(void 0),this.emit(ws.Ended,e)},this.handleVisibilityChange=e=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(e),this.logContext),this.visible=e,this.emitTrackUpdate()},this.handleVideoDimensionsChange=e=>{this.log.debug("adaptivestream video dimensions ".concat(e.width,"x").concat(e.height),this.logContext),this.videoDimensionsAdaptiveStream=e,this.emitTrackUpdate()},this.subscribed=n,this.updateInfo(t)}setSubscribed(e){const t=this.subscriptionStatus,n=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const i=new nn({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new Et({participantSid:"",trackSids:[this.trackSid]})]});this.emit(ws.UpdateSubscription,i),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(n)}get subscriptionStatus(){return!1===this.subscribed?qa.SubscriptionStatus.Unsubscribed:super.isSubscribed?qa.SubscriptionStatus.Subscribed:qa.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?qa.PermissionStatus.Allowed:qa.PermissionStatus.NotAllowed}get isSubscribed(){return!1!==this.subscribed&&super.isSubscribed}get isDesired(){return!1!==this.subscribed}get isEnabled(){return void 0!==this.requestedDisabled?!this.requestedDisabled:!this.isAdaptiveStream||this.visible}get isLocal(){return!1}setEnabled(e){this.isManualOperationAllowed()&&this.requestedDisabled!==!e&&(this.requestedDisabled=!e,this.emitTrackUpdate())}setVideoQuality(e){this.isManualOperationAllowed()&&this.requestedMaxQuality!==e&&(this.requestedMaxQuality=e,this.requestedVideoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var t,n;this.isManualOperationAllowed()&&((null===(t=this.requestedVideoDimensions)||void 0===t?void 0:t.width)===e.width&&(null===(n=this.requestedVideoDimensions)||void 0===n?void 0:n.height)===e.height||(Ko(this.track)&&(this.requestedVideoDimensions=e),this.requestedMaxQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Ko(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){var e;return null!==(e=this.requestedMaxQuality)&&void 0!==e?e:zs.HIGH}setTrack(e){const t=this.subscriptionStatus,n=this.permissionStatus,i=this.track;i!==e&&(i&&(i.off(ws.VideoDimensionsChanged,this.handleVideoDimensionsChange),i.off(ws.VisibilityChanged,this.handleVisibilityChange),i.off(ws.Ended,this.handleEnded),i.detach(),i.stopMonitor(),this.emit(ws.Unsubscribed,i)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(ws.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(ws.VisibilityChanged,this.handleVisibilityChange),e.on(ws.Ended,this.handleEnded),this.emit(ws.Subscribed,e)),this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(t))}setAllowed(e){const t=this.subscriptionStatus,n=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(t)}setSubscriptionError(e){this.emit(ws.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const t=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):t!==e.muted&&this.emit(e.muted?ws.Muted:ws.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(ws.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(ws.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return!!this.isDesired||(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return Ko(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new sn({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===Ks.Kind.Video){let i=this.requestedVideoDimensions;if(void 0!==this.videoDimensionsAdaptiveStream)if(i){sr(this.videoDimensionsAdaptiveStream,i)&&(this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),i=this.videoDimensionsAdaptiveStream)}else if(void 0!==this.requestedMaxQuality&&this.trackInfo){const e=(t=this.requestedMaxQuality,null===(n=this.trackInfo.layers)||void 0===n?void 0:n.find(e=>e.quality===t));e&&sr(this.videoDimensionsAdaptiveStream,e)&&(this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),i=this.videoDimensionsAdaptiveStream)}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),i=this.videoDimensionsAdaptiveStream;i?(e.width=Math.ceil(i.width),e.height=Math.ceil(i.height)):void 0!==this.requestedMaxQuality?(this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),e.quality=this.requestedMaxQuality):(this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:zs.HIGH})),e.quality=zs.HIGH)}var t,n;this.emit(ws.UpdateSettings,e)}}class Ya extends Ga{static fromParticipantInfo(e,t,n){return new Ya(e,t.sid,t.identity,t.name,t.metadata,t.attributes,n,t.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,t,n,i,s,o,r){super(t,n||"",i,s,o,r,arguments.length>7&&void 0!==arguments[7]?arguments[7]:it.STANDARD),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(ws.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),nr(e)),{settings:t})),this.signalClient.sendUpdateTrackSettings(t)}),e.on(ws.UpdateSubscription,e=>{e.participantTracks.forEach(e=>{e.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(e)}),e.on(ws.SubscriptionPermissionChanged,t=>{this.emit(Ts.TrackSubscriptionPermissionChanged,e,t)}),e.on(ws.SubscriptionStatusChanged,t=>{this.emit(Ts.TrackSubscriptionStatusChanged,e,t)}),e.on(ws.Subscribed,t=>{this.emit(Ts.TrackSubscribed,t,e)}),e.on(ws.Unsubscribed,t=>{this.emit(Ts.TrackUnsubscribed,t,e)}),e.on(ws.SubscriptionFailed,t=>{this.emit(Ts.TrackSubscriptionFailed,e.trackSid,t)})}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setVolume(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ks.Source.Microphone;this.volumeMap.set(t,e);const n=this.getTrackPublication(t);n&&n.track&&n.track.setVolume(e)}getVolume(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ks.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,n,i,s,o){let r=this.getTrackPublicationBySid(t);if(r||t.startsWith("TR")||this.trackPublications.forEach(t=>{r||e.kind!==""+t.kind||(r=t)}),!r)return 0===o?(this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),void this.emit(Ts.TrackSubscriptionFailed,t)):(void 0===o&&(o=20),void setTimeout(()=>{this.addSubscribedMediaTrack(e,t,n,i,s,o-1)},150));if("ended"===e.readyState)return this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),nr(r))),void this.emit(Ts.TrackSubscriptionFailed,t);let a;return a="video"===e.kind?new ja(e,t,i,s):new Ua(e,t,i,this.audioContext,this.audioOutput),a.source=r.source,a.isMuted=r.isMuted,a.setMediaStream(n),a.start(),r.setTrack(a),this.volumeMap.has(r.source)&&Wo(a)&&Bo(a)&&a.setVolume(this.volumeMap.get(r.source)),r}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const t=new Map,n=new Map;return e.tracks.forEach(e=>{var i,s;let o=this.getTrackPublicationBySid(e.sid);if(o)o.updateInfo(e);else{const t=Ks.kindFromProto(e.type);if(!t)return;o=new $a(t,e,null===(i=this.signalClient.connectOptions)||void 0===i?void 0:i.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:null===(s=this.loggerOptions)||void 0===s?void 0:s.loggerName}),o.updateInfo(e),n.set(e.sid,o);const r=Array.from(this.trackPublications.values()).find(e=>e.source===(null==o?void 0:o.source));r&&o.source!==Ks.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(o.source),Object.assign(Object.assign({},this.logContext),{oldTrack:nr(r),newTrack:nr(o)})),this.addTrackPublication(o)}t.set(e.sid,o)}),this.trackPublications.forEach(e=>{t.has(e.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),nr(e))),this.unpublishTrack(e.trackSid,!0))}),n.forEach(e=>{this.emit(Ts.TrackPublished,e)}),!0}unpublishTrack(e,t){const n=this.trackPublications.get(e);if(!n)return;const{track:i}=n;switch(i&&(i.stop(),n.setTrack(void 0)),this.trackPublications.delete(e),n.kind){case Ks.Kind.Audio:this.audioTrackPublications.delete(e);break;case Ks.Kind.Video:this.videoTrackPublications.delete(e)}t&&this.emit(Ts.TrackUnpublished,n)}setAudioOutput(e){return ti(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(n=>{var i;Bo(n.track)&&Wo(n.track)&&t.push(n.track.setSinkId(null!==(i=e.deviceId)&&void 0!==i?i:"default"))}),yield Promise.all(t)})}emit(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;t>i;i++)n[i-1]=arguments[i];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:n})),super.emit(e,...n)}}!function(e){e.Disconnected="disconnected",e.Connecting="connecting",e.Connected="connected",e.Reconnecting="reconnecting",e.SignalReconnecting="signalReconnecting"}(Ka||(Ka={}));class Qa extends ri.EventEmitter{get hasE2EESetup(){return void 0!==this.e2eeManager}constructor(e){var t,n,i,o;if(super(),t=this,this.state=Ka.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=Yn,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(e,t,n)=>ti(this,void 0,void 0,function*(){var i;if("undefined"==typeof RTCPeerConnection||!ro()&&!ao())throw vo()?Error("WebRTC isn't detected, have you called registerGlobals?"):Error("LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.");const s=yield this.disconnectLock.lock();if(this.state===Ka.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),s(),Promise.resolve();if(this.connectFuture)return s(),this.connectFuture.promise;this.setAndEmitConnectionState(Ka.Connecting),(null===(i=this.regionUrlProvider)||void 0===i?void 0:""+i.getServerUrl())!==e&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),yo(new URL(e))&&(void 0===this.regionUrlProvider?this.regionUrlProvider=new $r(e,t):this.regionUrlProvider.updateToken(t),this.regionUrlProvider.fetchRegionSettings().then(e=>{var t;null===(t=this.regionUrlProvider)||void 0===t||t.setServerReportedRegions(e)}).catch(e=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:e}))}));const o=(i,r,a)=>ti(this,void 0,void 0,function*(){var c,d;this.abortController&&this.abortController.abort();const l=new AbortController;this.abortController=l,null==s||s();try{if(yield rr.getInstance().getBackOffPromise(e),l.signal.aborted)throw new Ps("Connection attempt aborted",vs.Cancelled);yield this.attemptConnection(null!=a?a:e,t,n,l),this.abortController=void 0,i()}catch(t){if(this.regionUrlProvider&&t instanceof Ps&&t.reason!==vs.Cancelled&&t.reason!==vs.NotAllowed){let n=null;try{this.log.debug("Fetching next region"),n=yield this.regionUrlProvider.getNextBestRegionUrl(null===(c=this.abortController)||void 0===c?void 0:c.signal)}catch(e){if(e instanceof Ps&&(401===e.status||e.reason===vs.Cancelled))return this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),void r(e)}[vs.InternalError,vs.ServerUnreachable,vs.Timeout].includes(t.reason)&&(this.log.debug("Adding failed connection attempt to back off"),rr.getInstance().addFailedConnectionAttempt(e)),n&&!(null===(d=this.abortController)||void 0===d?void 0:d.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(t.message,". Retrying with another region: ").concat(n),this.logContext),this.recreateEngine(),yield o(i,r,n)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,No(t)),r(t))}else{let e=Je.UNKNOWN_REASON;t instanceof Ps&&(e=No(t)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e),r(t)}}}),r=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Lo((e,t)=>{o(e,t,r)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(e,t,n,i,s,o)=>ti(this,void 0,void 0,function*(){var r,a,c;const d=yield n.join(e,t,{autoSubscribe:i.autoSubscribe,adaptiveStream:"object"==typeof s.adaptiveStream||s.adaptiveStream,maxRetries:i.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:i.websocketTimeout,singlePeerConnection:s.singlePeerConnection},o.signal);let l=d.serverInfo;if(l||(l={version:d.serverVersion,region:d.serverRegion}),this.serverInfo=l,this.log.debug("connected to Livekit Server ".concat(Object.entries(l).map(e=>{let[t,n]=e;return"".concat(t,": ").concat(n)}).join(", ")),{room:null===(r=d.room)||void 0===r?void 0:r.name,roomSid:null===(a=d.room)||void 0===a?void 0:a.sid,identity:null===(c=d.participant)||void 0===c?void 0:c.identity}),!l.version)throw new Ms("unknown server version");return"0.15.1"===l.version&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),s.dynacast=!1),d}),this.applyJoinResponse=e=>{const t=e.participant;if(this.localParticipant.sid=t.sid,this.localParticipant.identity=t.identity,this.localParticipant.setEnabledPublishCodecs(e.enabledPublishCodecs),this.e2eeManager)try{this.e2eeManager.setSifTrailer(e.sifTrailer)}catch(e){this.log.error(e instanceof Error?e.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:e}))}this.handleParticipantUpdates([t,...e.otherParticipants]),e.room&&this.handleRoomUpdate(e.room)},this.attemptConnection=(e,t,n,i)=>ti(this,void 0,void 0,function*(){var s,o;this.state===Ka.Reconnecting||this.isResuming||(null===(s=this.engine)||void 0===s?void 0:s.pendingReconnect)?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),(null===(o=this.regionUrlProvider)||void 0===o?void 0:o.isCloud())&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Kr),n),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const n=yield this.connectSignal(e,t,this.engine,this.connOptions,this.options,i);this.applyJoinResponse(n),this.setupLocalParticipantEvents(),this.emit(Cs.SignalConnected)}catch(e){yield this.engine.close(),this.recreateEngine();const t=new Ps("could not establish signal connection",i.signal.aborted?vs.Cancelled:vs.ServerUnreachable);throw e instanceof Error&&(t.message="".concat(t.message,": ").concat(e.message)),e instanceof Ps&&(t.reason=e.reason,t.status=e.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:e})),t}if(i.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Ps("Connection attempt aborted",vs.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,i)}catch(e){throw yield this.engine.close(),this.recreateEngine(),e}fo()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),fo()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Ka.Connected),this.emit(Cs.Connected),rr.getInstance().resetFailedConnectionAttempts(e),this.registerConnectionReconcile(),this.regionUrlProvider&&this.regionUrlProvider.notifyConnected()}),this.disconnect=function(){for(var e=arguments.length,n=Array(e),i=0;e>i;i++)n[i]=arguments[i];return ti(t,[...n],void 0,function(){var e=this;let t=0>=arguments.length||void 0===arguments[0]||arguments[0];return function*(){var n,i,s;const o=yield e.disconnectLock.lock();try{if(e.state===Ka.Disconnected)return void e.log.debug("already disconnected",e.logContext);if(e.log.info("disconnect from room",Object.assign({},e.logContext)),e.state===Ka.Connecting||e.state===Ka.Reconnecting||e.isResuming){const t="Abort connection attempt due to user initiated disconnect";e.log.warn(t,e.logContext),null===(n=e.abortController)||void 0===n||n.abort(t),null===(s=null===(i=e.connectFuture)||void 0===i?void 0:i.reject)||void 0===s||s.call(i,new Ps("Client initiated disconnect",vs.Cancelled)),e.connectFuture=void 0}e.engine&&(e.engine.client.isDisconnected||(yield e.engine.client.sendLeave()),yield e.engine.close()),e.handleDisconnect(t,Je.CLIENT_INITIATED),e.engine=void 0}finally{o()}}()})},this.onPageLeave=()=>ti(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>ti(this,void 0,void 0,function*(){const e=[],t=Fs();if(t&&"iOS"===t.os){const t="livekit-dummy-audio-el";let n=document.getElementById(t);if(!n){n=document.createElement("audio"),n.id=t,n.autoplay=!0,n.hidden=!0;const e=Oo();e.enabled=!0;const i=new MediaStream([e]);n.srcObject=i,document.addEventListener("visibilitychange",()=>{n&&(n.srcObject=document.hidden?null:i,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(n),this.once(Cs.Disconnected,()=>{null==n||n.remove(),n=null})}e.push(n)}this.remoteParticipants.forEach(t=>{t.audioTrackPublications.forEach(t=>{t.track&&t.track.attachedElements.forEach(t=>{e.push(t)})})});try{yield Promise.all([this.acquireAudioContext(),...e.map(e=>(e.muted=!1,e.play()))]),this.handleAudioPlaybackStarted()}catch(e){throw this.handleAudioPlaybackFailed(e),e}}),this.startVideo=()=>ti(this,void 0,void 0,function*(){const e=[];for(const t of this.remoteParticipants.values())t.videoTrackPublications.forEach(t=>{var n;null===(n=t.track)||void 0===n||n.attachedElements.forEach(t=>{e.includes(t)||e.push(t)})});yield Promise.all(e.map(e=>e.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(e=>{"NotAllowedError"===e.name?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const e of this.remoteParticipants.values())this.handleParticipantDisconnected(e.identity,e);this.setAndEmitConnectionState(Ka.Reconnecting)&&this.emit(Cs.Reconnecting)},this.handleSignalRestarted=e=>ti(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(e.serverRegion),Object.assign(Object.assign({},this.logContext),{region:e.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(e);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(e){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:e}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:e.serverRegion}))}catch(e){return}this.setAndEmitConnectionState(Ka.Connected),this.emit(Cs.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=e=>{e.forEach(e=>{var t;if(e.identity===this.localParticipant.identity)return void this.localParticipant.updateInfo(e);""===e.identity&&(e.identity=null!==(t=this.sidToIdentity.get(e.sid))&&void 0!==t?t:"");let n=this.remoteParticipants.get(e.identity);e.state===nt.DISCONNECTED?this.handleParticipantDisconnected(e.identity,n):n=this.getOrCreateParticipant(e.identity,e)})},this.handleActiveSpeakersUpdate=e=>{const t=[],n={};e.forEach(e=>{if(n[e.sid]=!0,e.sid===this.localParticipant.sid)this.localParticipant.audioLevel=e.level,this.localParticipant.setIsSpeaking(!0),t.push(this.localParticipant);else{const n=this.getRemoteParticipantBySid(e.sid);n&&(n.audioLevel=e.level,n.setIsSpeaking(!0),t.push(n))}}),n[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(e=>{n[e.sid]||(e.audioLevel=0,e.setIsSpeaking(!1))}),this.activeSpeakers=t,this.emitWhenConnected(Cs.ActiveSpeakersChanged,t)},this.handleSpeakersChanged=e=>{const t=new Map;this.activeSpeakers.forEach(e=>{const n=this.remoteParticipants.get(e.identity);n&&n.sid!==e.sid||t.set(e.sid,e)}),e.forEach(e=>{let n=this.getRemoteParticipantBySid(e.sid);e.sid===this.localParticipant.sid&&(n=this.localParticipant),n&&(n.audioLevel=e.level,n.setIsSpeaking(e.active),e.active?t.set(e.sid,n):t.delete(e.sid))});const n=Array.from(t.values());n.sort((e,t)=>t.audioLevel-e.audioLevel),this.activeSpeakers=n,this.emitWhenConnected(Cs.ActiveSpeakersChanged,n)},this.handleStreamStateUpdate=e=>{e.streamStates.forEach(e=>{const t=this.getRemoteParticipantBySid(e.participantSid);if(!t)return;const n=t.getTrackPublicationBySid(e.trackSid);if(!n||!n.track)return;const i=Ks.streamStateFromProto(e.state);n.track.setStreamState(i),i!==n.track.streamState&&(t.emit(Ts.TrackStreamStateChanged,n,n.track.streamState),this.emitWhenConnected(Cs.TrackStreamStateChanged,n,n.track.streamState,t))})},this.handleSubscriptionPermissionUpdate=e=>{const t=this.getRemoteParticipantBySid(e.participantSid);if(!t)return;const n=t.getTrackPublicationBySid(e.trackSid);n&&n.setAllowed(e.allowed)},this.handleSubscriptionError=e=>{const t=Array.from(this.remoteParticipants.values()).find(t=>t.trackPublications.has(e.trackSid));if(!t)return;const n=t.getTrackPublicationBySid(e.trackSid);n&&n.setSubscriptionError(e.err)},this.handleDataPacket=(e,t)=>{const n=this.remoteParticipants.get(e.participantIdentity);if("user"===e.value.case)this.handleUserPacket(n,e.value.value,e.kind,t);else if("transcription"===e.value.case)this.handleTranscription(n,e.value.value);else if("sipDtmf"===e.value.case)this.handleSipDtmf(n,e.value.value);else if("chatMessage"===e.value.case)this.handleChatMessage(n,e.value.value);else if("metrics"===e.value.case)this.handleMetrics(e.value.value,n);else if("streamHeader"===e.value.case||"streamChunk"===e.value.case||"streamTrailer"===e.value.case)this.handleDataStream(e,t);else if("rpcRequest"===e.value.case){const t=e.value.value;this.handleIncomingRpcRequest(e.participantIdentity,t.id,t.method,t.payload,t.responseTimeoutMs,t.version)}},this.handleUserPacket=(e,t,n,i)=>{this.emit(Cs.DataReceived,t.payload,e,n,t.topic,i),null==e||e.emit(Ts.DataReceived,t.payload,n,i)},this.handleSipDtmf=(e,t)=>{this.emit(Cs.SipDTMFReceived,t,e),null==e||e.emit(Ts.SipDTMFReceived,t)},this.handleTranscription=(e,t)=>{const n=t.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(t.transcribedParticipantIdentity),i=null==n?void 0:n.trackPublications.get(t.trackId),s=function(e,t){return e.segments.map(e=>{let{id:n,text:i,language:s,startTime:o,endTime:r,final:a}=e;var c;const d=null!==(c=t.get(n))&&void 0!==c?c:Date.now(),l=Date.now();return a?t.delete(n):t.set(n,d),{id:n,text:i,startTime:Number.parseInt(""+o),endTime:Number.parseInt(""+r),final:a,language:s,firstReceivedTime:d,lastReceivedTime:l}})}(t,this.transcriptionReceivedTimes);null==i||i.emit(ws.TranscriptionReceived,s),null==n||n.emit(Ts.TranscriptionReceived,s,i),this.emit(Cs.TranscriptionReceived,s,n,i)},this.handleChatMessage=(e,t)=>{const n=function(e){const{id:t,timestamp:n,message:i,editTimestamp:s}=e;return{id:t,timestamp:Number.parseInt(""+n),editTimestamp:s?Number.parseInt(""+s):void 0,message:i}}(t);this.emit(Cs.ChatMessage,n,e)},this.handleMetrics=(e,t)=>{this.emit(Cs.MetricsReceived,e,t)},this.handleDataStream=(e,t)=>{this.incomingDataStreamManager.handleDataStreamPacket(e,t)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(Cs.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=e=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:e})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(Cs.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(Cs.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(Cs.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>ti(this,void 0,void 0,function*(){var e;"iOS"!==(null===(e=Fs())||void 0===e?void 0:e.os)&&(yield this.selectDefaultDevices()),this.emit(Cs.MediaDevicesChanged)}),this.handleRoomUpdate=e=>{const t=this.roomInfo;this.roomInfo=e,t&&t.metadata!==e.metadata&&this.emitWhenConnected(Cs.RoomMetadataChanged,e.metadata),(null==t?void 0:t.activeRecording)!==e.activeRecording&&this.emitWhenConnected(Cs.RecordingStatusChanged,e.activeRecording)},this.handleConnectionQualityUpdate=e=>{e.updates.forEach(e=>{if(e.participantSid===this.localParticipant.sid)return void this.localParticipant.setConnectionQuality(e.quality);const t=this.getRemoteParticipantBySid(e.participantSid);t&&t.setConnectionQuality(e.quality)})},this.onLocalParticipantMetadataChanged=e=>{this.emit(Cs.ParticipantMetadataChanged,e,this.localParticipant)},this.onLocalParticipantNameChanged=e=>{this.emit(Cs.ParticipantNameChanged,e,this.localParticipant)},this.onLocalAttributesChanged=e=>{this.emit(Cs.ParticipantAttributesChanged,e,this.localParticipant)},this.onLocalTrackMuted=e=>{this.emit(Cs.TrackMuted,e,this.localParticipant)},this.onLocalTrackUnmuted=e=>{this.emit(Cs.TrackUnmuted,e,this.localParticipant)},this.onTrackProcessorUpdate=e=>{var t;null===(t=null==e?void 0:e.onPublish)||void 0===t||t.call(e,this)},this.onLocalTrackPublished=e=>ti(this,void 0,void 0,function*(){var t,n,i,s,o,r;if(null===(t=e.track)||void 0===t||t.on(ws.TrackProcessorUpdate,this.onTrackProcessorUpdate),null===(n=e.track)||void 0===n||n.on(ws.Restarted,this.onLocalTrackRestarted),null===(o=null===(s=null===(i=e.track)||void 0===i?void 0:i.getProcessor())||void 0===s?void 0:s.onPublish)||void 0===o||o.call(s,this),this.emit(Cs.LocalTrackPublished,e,this.localParticipant),Ho(e.track)){(yield e.track.checkForSilence())&&this.emit(Cs.LocalAudioSilenceDetected,e)}const a=yield null===(r=e.track)||void 0===r?void 0:r.getDeviceId(!1),c=Zo(e.source);c&&a&&a!==this.localParticipant.activeDeviceMap.get(c)&&(this.localParticipant.activeDeviceMap.set(c,a),this.emit(Cs.ActiveDeviceChanged,c,a))}),this.onLocalTrackUnpublished=e=>{var t,n;null===(t=e.track)||void 0===t||t.off(ws.TrackProcessorUpdate,this.onTrackProcessorUpdate),null===(n=e.track)||void 0===n||n.off(ws.Restarted,this.onLocalTrackRestarted),this.emit(Cs.LocalTrackUnpublished,e,this.localParticipant)},this.onLocalTrackRestarted=e=>ti(this,void 0,void 0,function*(){const t=yield e.getDeviceId(!1),n=Zo(e.source);n&&t&&t!==this.localParticipant.activeDeviceMap.get(n)&&(this.log.debug("local track restarted, setting ".concat(n," ").concat(t," active"),this.logContext),this.localParticipant.activeDeviceMap.set(n,t),this.emit(Cs.ActiveDeviceChanged,n,t))}),this.onLocalConnectionQualityChanged=e=>{this.emit(Cs.ConnectionQualityChanged,e,this.localParticipant)},this.onMediaDevicesError=(e,t)=>{this.emit(Cs.MediaDevicesError,e,t)},this.onLocalParticipantPermissionsChanged=e=>{this.emit(Cs.ParticipantPermissionsChanged,e,this.localParticipant)},this.onLocalChatMessageSent=e=>{this.emit(Cs.ChatMessage,e,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},zr),e),this.log=Qn(null!==(n=this.options.loggerName)&&void 0!==n?n:Jn.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},Hr),null==e?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Wr),null==e?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},qr),null==e?void 0:e.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new Ma,this.outgoingDataStreamManager=new Aa(this.engine,this.log),this.disconnectLock=new s,this.localParticipant=new Ja("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager),(this.options.e2ee||this.options.encryption)&&this.setupE2EE(),this.engine.e2eeManager=this.e2eeManager,this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Do(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Do(this.options.audioCaptureDefaults.deviceId)),(null===(i=this.options.audioOutput)||void 0===i?void 0:i.deviceId)&&this.switchActiveDevice("audiooutput",Do(this.options.audioOutput.deviceId)).catch(e=>this.log.warn("Could not set audio output: ".concat(e.message),this.logContext)),fo()){const e=new AbortController;null===(o=navigator.mediaDevices)||void 0===o||o.addEventListener("devicechange",this.handleDeviceChange,{signal:e.signal}),Qa.cleanupRegistry&&Qa.cleanupRegistry.register(this,()=>{e.abort()})}}registerTextStreamHandler(e,t){return this.incomingDataStreamManager.registerTextStreamHandler(e,t)}unregisterTextStreamHandler(e){return this.incomingDataStreamManager.unregisterTextStreamHandler(e)}registerByteStreamHandler(e,t){return this.incomingDataStreamManager.registerByteStreamHandler(e,t)}unregisterByteStreamHandler(e){return this.incomingDataStreamManager.unregisterByteStreamHandler(e)}registerRpcMethod(e,t){if(this.rpcHandlers.has(e))throw Error("RPC handler already registered for method ".concat(e,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setE2EEEnabled(e){return ti(this,void 0,void 0,function*(){if(!this.e2eeManager)throw Error("e2ee not configured, please set e2ee settings within the room options");yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),""!==this.localParticipant.identity&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity)})}setupE2EE(){var e;const t=!!this.options.encryption,n=this.options.encryption||this.options.e2ee;n&&("e2eeManager"in n?(this.e2eeManager=n.e2eeManager,this.e2eeManager.isDataChannelEncryptionEnabled=t):this.e2eeManager=new or(n,t),this.e2eeManager.on(gs.ParticipantEncryptionStatusChanged,(e,t)=>{t.isLocal&&(this.isE2EEEnabled=e),this.emit(Cs.ParticipantEncryptionStatusChanged,e,t)}),this.e2eeManager.on(gs.EncryptionError,(e,t)=>{const n=t?this.getParticipantByIdentity(t):void 0;this.emit(Cs.EncryptionError,e,n)}),null===(e=this.e2eeManager)||void 0===e||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:null===(e=this.roomInfo)||void 0===e?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.activeRecording)&&void 0!==t&&t}getSid(){return ti(this,void 0,void 0,function*(){return this.state===Ka.Disconnected?"":this.roomInfo&&""!==this.roomInfo.sid?this.roomInfo.sid:new Promise((e,t)=>{const n=t=>{""!==t.sid&&(this.engine.off(Ss.RoomUpdate,n),e(t.sid))};this.engine.on(Ss.RoomUpdate,n),this.once(Cs.Disconnected,()=>{this.engine.off(Ss.RoomUpdate,n),t("Room disconnected before room server id was available")})})})}get name(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.name)&&void 0!==t?t:""}get metadata(){var e;return null===(e=this.roomInfo)||void 0===e?void 0:e.metadata}get numParticipants(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.numParticipants)&&void 0!==t?t:0}get numPublishers(){var e,t;return null!==(t=null===(e=this.roomInfo)||void 0===e?void 0:e.numPublishers)&&void 0!==t?t:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new Ea(this.options),this.engine.e2eeManager=this.e2eeManager,this.engine.on(Ss.ParticipantUpdate,this.handleParticipantUpdates).on(Ss.RoomUpdate,this.handleRoomUpdate).on(Ss.SpeakersChanged,this.handleSpeakersChanged).on(Ss.StreamStateChanged,this.handleStreamStateUpdate).on(Ss.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(Ss.SubscriptionError,this.handleSubscriptionError).on(Ss.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(Ss.MediaTrackAdded,(e,t,n)=>{this.onTrackAdded(e,t,n)}).on(Ss.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(Ss.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(Ss.DataPacketReceived,this.handleDataPacket).on(Ss.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Ka.SignalReconnecting)&&this.emit(Cs.SignalReconnecting)}).on(Ss.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Ka.Connected)&&this.emit(Cs.Reconnected)}).on(Ss.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Ka.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(Ss.Restarting,this.handleRestarting).on(Ss.SignalRestarted,this.handleSignalRestarted).on(Ss.Offline,()=>{this.setAndEmitConnectionState(Ka.Reconnecting)&&this.emit(Cs.Reconnecting)}).on(Ss.DCBufferStatusChanged,(e,t)=>{this.emit(Cs.DCBufferStatusChanged,e,t)}).on(Ss.LocalTrackSubscribed,e=>{const t=this.localParticipant.getTrackPublications().find(t=>{let{trackSid:n}=t;return n===e});t?(this.localParticipant.emit(Ts.LocalTrackSubscribed,t),this.emitWhenConnected(Cs.LocalTrackSubscribed,t,this.localParticipant)):this.log.warn("could not find local track subscription for subscribed event",this.logContext)}).on(Ss.RoomMoved,e=>{this.log.debug("room moved",e),e.room&&this.handleRoomUpdate(e.room),this.remoteParticipants.forEach((e,t)=>{this.handleParticipantDisconnected(t,e)}),this.emit(Cs.Moved,e.room.name),this.handleParticipantUpdates(e.participant?[e.participant,...e.otherParticipants]:e.otherParticipants)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine),this.outgoingDataStreamManager&&this.outgoingDataStreamManager.setupEngine(this.engine))}static getLocalDevices(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];return cr.getInstance().getDevices(e,t)}prepareConnection(e,t){return ti(this,void 0,void 0,function*(){if(this.state===Ka.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(yo(new URL(e))&&t){this.regionUrlProvider=new $r(e,t);const n=yield this.regionUrlProvider.getNextBestRegionUrl();n&&this.state===Ka.Disconnected&&(this.regionUrl=n,yield fetch(Ao(n),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(n),this.logContext))}else yield fetch(Ao(e),{method:"HEAD"})}catch(e){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:e}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,t){return ti(this,void 0,void 0,function*(){let n,i=()=>ti(this,void 0,void 0,function*(){});switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":n=new In({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":n=new In({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":n=new In({scenario:{case:"serverLeave",value:!0}});break;case"migration":n=new In({scenario:{case:"migration",value:!0}});break;case"resume-reconnect":this.engine.failNext(),yield this.engine.client.handleOnClose("simulate resume-disconnect");break;case"disconnect-signal-on-resume":i=()=>ti(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),n=new In({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>ti(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),n=new In({scenario:{case:"disconnectSignalOnResumeNoMessages",value:!0}});break;case"full-reconnect":this.engine.fullReconnectOnNext=!0,yield this.engine.client.handleOnClose("simulate full-reconnect");break;case"force-tcp":case"force-tls":n=new In({scenario:{case:"switchCandidateProtocol",value:"force-tls"===e?2:1}}),i=()=>ti(this,void 0,void 0,function*(){const e=this.engine.client.onLeave;e&&e(new an({reason:Je.CLIENT_INITIATED,action:cn.RECONNECT}))});break;case"subscriber-bandwidth":if(void 0===t||"number"!=typeof t)throw Error("subscriber-bandwidth requires a number as argument");n=new In({scenario:{case:"subscriberBandwidth",value:jo(t)}});break;case"leave-full-reconnect":n=new In({scenario:{case:"leaveRequestFullReconnect",value:!0}})}n&&(yield this.engine.client.sendSimulateScenario(n),yield i())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,t){return ti(this,arguments,void 0,function(e,t){var n=this;let i=2>=arguments.length||void 0===arguments[2]||arguments[2];return function*(){var s,o,r,a,c,d,l;let u=!0,h=!1;const p=i?{exact:t}:t;if("audioinput"===e){h=0===n.localParticipant.audioTrackPublications.size;const t=null!==(s=n.getActiveDevice(e))&&void 0!==s?s:n.options.audioCaptureDefaults.deviceId;n.options.audioCaptureDefaults.deviceId=p;const i=Array.from(n.localParticipant.audioTrackPublications.values()).filter(e=>e.source===Ks.Source.Microphone);try{u=(yield Promise.all(i.map(e=>{var t;return null===(t=e.audioTrack)||void 0===t?void 0:t.setDeviceId(p)}))).every(e=>!0===e)}catch(e){throw n.options.audioCaptureDefaults.deviceId=t,e}const o=i.some(e=>{var t,n;return null!==(n=null===(t=e.track)||void 0===t?void 0:t.isMuted)&&void 0!==n&&n});u&&o&&(h=!0)}else if("videoinput"===e){h=0===n.localParticipant.videoTrackPublications.size;const t=null!==(o=n.getActiveDevice(e))&&void 0!==o?o:n.options.videoCaptureDefaults.deviceId;n.options.videoCaptureDefaults.deviceId=p;const i=Array.from(n.localParticipant.videoTrackPublications.values()).filter(e=>e.source===Ks.Source.Camera);try{u=(yield Promise.all(i.map(e=>{var t;return null===(t=e.videoTrack)||void 0===t?void 0:t.setDeviceId(p)}))).every(e=>!0===e)}catch(e){throw n.options.videoCaptureDefaults.deviceId=t,e}const s=i.some(e=>{var t,n;return null!==(n=null===(t=e.track)||void 0===t?void 0:t.isMuted)&&void 0!==n&&n});u&&s&&(h=!0)}else if("audiooutput"===e){if(h=!0,!lo()&&!n.options.webAudioMix||n.options.webAudioMix&&n.audioContext&&!("setSinkId"in n.audioContext))throw Error("cannot switch audio output, the current browser does not support it");n.options.webAudioMix&&(t=null!==(r=yield cr.getInstance().normalizeDeviceId("audiooutput",t))&&void 0!==r?r:""),null!==(a=(l=n.options).audioOutput)&&void 0!==a||(l.audioOutput={});const i=null!==(c=n.getActiveDevice(e))&&void 0!==c?c:n.options.audioOutput.deviceId;n.options.audioOutput.deviceId=t;try{n.options.webAudioMix&&(null===(d=n.audioContext)||void 0===d||d.setSinkId(t)),yield Promise.all(Array.from(n.remoteParticipants.values()).map(e=>e.setAudioOutput({deviceId:t})))}catch(e){throw n.options.audioOutput.deviceId=i,e}}return h&&(n.localParticipant.activeDeviceMap.set(e,t),n.emit(Cs.ActiveDeviceChanged,e,t)),u}()})}setupLocalParticipantEvents(){this.localParticipant.on(Ts.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(Ts.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(Ts.AttributesChanged,this.onLocalAttributesChanged).on(Ts.TrackMuted,this.onLocalTrackMuted).on(Ts.TrackUnmuted,this.onLocalTrackUnmuted).on(Ts.LocalTrackPublished,this.onLocalTrackPublished).on(Ts.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(Ts.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(Ts.MediaDevicesError,this.onMediaDevicesError).on(Ts.AudioStreamAcquired,this.startAudio).on(Ts.ChatMessage,this.onLocalChatMessageSent).on(Ts.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;null===(e=this.engine)||void 0===e||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,t,n){if(this.state===Ka.Connecting||this.state===Ka.Reconnecting){const i=()=>{this.log.debug("deferring on track for later",{mediaTrackId:e.id,mediaStreamId:t.id,tracksInStream:t.getTracks().map(e=>e.id)}),this.onTrackAdded(e,t,n),s()},s=()=>{this.off(Cs.Reconnected,i),this.off(Cs.Connected,i),this.off(Cs.Disconnected,s)};return this.once(Cs.Reconnected,i),this.once(Cs.Connected,i),void this.once(Cs.Disconnected,s)}if(this.state===Ka.Disconnected)return void this.log.warn("skipping incoming track after Room disconnected",this.logContext);if("ended"===e.readyState)return void this.log.info("skipping incoming track as it already ended",this.logContext);const i=function(e){const t=e.split("|");return t.length>1?[t[0],e.substr(t[0].length+1)]:[e,""]}(t.id),s=i[0];let o=i[1],r=e.id;if(o&&o.startsWith("TR")&&(r=o),s===this.localParticipant.sid)return void this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);const a=Array.from(this.remoteParticipants.values()).find(e=>e.sid===s);if(!a)return void this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(s),this.logContext);if(!r.startsWith("TR")){const e=this.engine.getTrackIdForReceiver(n);if(!e)return void this.log.error("Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ".concat(s),this.logContext);r=e}let c;r.startsWith("TR")||this.log.warn("Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ".concat(s,", streamId: ").concat(o,", trackId: ").concat(r),Object.assign(Object.assign({},this.logContext),{rpID:s,streamId:o,trackId:r})),this.options.adaptiveStream&&(c="object"==typeof this.options.adaptiveStream?this.options.adaptiveStream:{});const d=a.addSubscribedMediaTrack(e,r,t,n,c);(null==d?void 0:d.isEncrypted)&&!this.e2eeManager&&this.emit(Cs.EncryptionError,Error("Encrypted ".concat(d.source," track received from participant ").concat(a.sid,", but room does not have encryption enabled!")))}handleDisconnect(){let e=0>=arguments.length||void 0===arguments[0]||arguments[0],t=arguments.length>1?arguments[1]:void 0;var n;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearControllers(),this.state!==Ka.Disconnected){this.regionUrl=void 0,this.regionUrlProvider&&this.regionUrlProvider.notifyDisconnected();try{this.remoteParticipants.forEach(e=>{e.trackPublications.forEach(t=>{e.unpublishTrack(t.trackSid)})}),this.localParticipant.trackPublications.forEach(t=>{var n,i,s;t.track&&this.localParticipant.unpublishTrack(t.track,e),e?(null===(n=t.track)||void 0===n||n.detach(),null===(i=t.track)||void 0===i||i.stop()):null===(s=t.track)||void 0===s||s.stopMonitor()}),this.localParticipant.off(Ts.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(Ts.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(Ts.AttributesChanged,this.onLocalAttributesChanged).off(Ts.TrackMuted,this.onLocalTrackMuted).off(Ts.TrackUnmuted,this.onLocalTrackUnmuted).off(Ts.LocalTrackPublished,this.onLocalTrackPublished).off(Ts.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(Ts.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(Ts.MediaDevicesError,this.onMediaDevicesError).off(Ts.AudioStreamAcquired,this.startAudio).off(Ts.ChatMessage,this.onLocalChatMessageSent).off(Ts.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&"boolean"==typeof this.options.webAudioMix&&(this.audioContext.close(),this.audioContext=void 0),fo()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),null===(n=navigator.mediaDevices)||void 0===n||n.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Ka.Disconnected),this.emit(Cs.Disconnected,t)}}}handleParticipantDisconnected(e,t){var n;this.remoteParticipants.delete(e),t&&(this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(e),t.trackPublications.forEach(e=>{t.unpublishTrack(e.trackSid,!0)}),this.emit(Cs.ParticipantDisconnected,t),t.setDisconnected(),null===(n=this.localParticipant)||void 0===n||n.handleParticipantDisconnected(t.identity))}handleIncomingRpcRequest(e,t,n,i,s,o){return ti(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),1!==o)return void(yield this.engine.publishRpcResponse(e,t,null,Yr.builtIn("UNSUPPORTED_VERSION")));const r=this.rpcHandlers.get(n);if(!r)return void(yield this.engine.publishRpcResponse(e,t,null,Yr.builtIn("UNSUPPORTED_METHOD")));let a=null,c=null;try{const o=yield r({requestId:t,callerIdentity:e,payload:i,responseTimeout:s});Qr(o)>15360?(a=Yr.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(n))):c=o}catch(e){e instanceof Yr?a=e:(console.warn("Uncaught error returned by RPC handler for ".concat(n,". Returning APPLICATION_ERROR instead."),e),a=Yr.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,t,c,a)})}selectDefaultDevices(){return ti(this,void 0,void 0,function*(){var e,t,n;const i=cr.getInstance().previousDevices,s=yield cr.getInstance().getDevices(void 0,!1),o=Fs();if("Chrome"===(null==o?void 0:o.name)&&"iOS"!==o.os)for(let e of s){const t=i.find(t=>t.deviceId===e.deviceId);t&&""!==t.label&&t.kind===e.kind&&t.label!==e.label&&"default"===this.getActiveDevice(e.kind)&&this.emit(Cs.ActiveDeviceChanged,e.kind,e.deviceId)}const r=["audiooutput","audioinput","videoinput"];for(let o of r){const r=Xo(o),a=this.localParticipant.getTrackPublication(r);if(a&&(null===(e=a.track)||void 0===e?void 0:e.isUserProvided))continue;const c=s.filter(e=>e.kind===o),d=this.getActiveDevice(o);d===(null===(t=i.filter(e=>e.kind===o)[0])||void 0===t?void 0:t.deviceId)&&0<c.length&&(null===(n=c[0])||void 0===n?void 0:n.deviceId)!==d?yield this.switchActiveDevice(o,c[0].deviceId):"audioinput"===o&&!mo()||"videoinput"===o||0>=c.length||c.find(e=>e.deviceId===this.getActiveDevice(o))||"audiooutput"===o&&mo()||(yield this.switchActiveDevice(o,c[0].deviceId))}})}acquireAudioContext(){return ti(this,void 0,void 0,function*(){var e,t;if("boolean"!=typeof this.options.webAudioMix&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:this.audioContext&&"closed"!==this.audioContext.state||(this.audioContext=null!==(e=Qo())&&void 0!==e?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(e=>e.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&"suspended"===this.audioContext.state)try{yield Promise.race([this.audioContext.resume(),oo(200)])}catch(e){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:e}))}const n="running"===(null===(t=this.audioContext)||void 0===t?void 0:t.state);n!==this.canPlaybackAudio&&(this.audioEnabled=n,this.emit(Cs.AudioPlaybackStatusChanged,n))})}createParticipant(e,t){var n;let i;return i=t?Ya.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):new Ya(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&i.setAudioContext(this.audioContext),(null===(n=this.options.audioOutput)||void 0===n?void 0:n.deviceId)&&i.setAudioOutput(this.options.audioOutput).catch(e=>this.log.warn("Could not set audio output: ".concat(e.message),this.logContext)),i}getOrCreateParticipant(e,t){if(this.remoteParticipants.has(e)){const n=this.remoteParticipants.get(e);if(t){n.updateInfo(t)&&this.sidToIdentity.set(t.sid,t.identity)}return n}const n=this.createParticipant(e,t);return this.remoteParticipants.set(e,n),this.sidToIdentity.set(t.sid,t.identity),this.emitWhenConnected(Cs.ParticipantConnected,n),n.on(Ts.TrackPublished,e=>{this.emitWhenConnected(Cs.TrackPublished,e,n)}).on(Ts.TrackSubscribed,(e,t)=>{e.kind===Ks.Kind.Audio?(e.on(ws.AudioPlaybackStarted,this.handleAudioPlaybackStarted),e.on(ws.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):e.kind===Ks.Kind.Video&&(e.on(ws.VideoPlaybackFailed,this.handleVideoPlaybackFailed),e.on(ws.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(Cs.TrackSubscribed,e,t,n)}).on(Ts.TrackUnpublished,e=>{this.emit(Cs.TrackUnpublished,e,n)}).on(Ts.TrackUnsubscribed,(e,t)=>{this.emit(Cs.TrackUnsubscribed,e,t,n)}).on(Ts.TrackMuted,e=>{this.emitWhenConnected(Cs.TrackMuted,e,n)}).on(Ts.TrackUnmuted,e=>{this.emitWhenConnected(Cs.TrackUnmuted,e,n)}).on(Ts.ParticipantMetadataChanged,e=>{this.emitWhenConnected(Cs.ParticipantMetadataChanged,e,n)}).on(Ts.ParticipantNameChanged,e=>{this.emitWhenConnected(Cs.ParticipantNameChanged,e,n)}).on(Ts.AttributesChanged,e=>{this.emitWhenConnected(Cs.ParticipantAttributesChanged,e,n)}).on(Ts.ConnectionQualityChanged,e=>{this.emitWhenConnected(Cs.ConnectionQualityChanged,e,n)}).on(Ts.ParticipantPermissionsChanged,e=>{this.emitWhenConnected(Cs.ParticipantPermissionsChanged,e,n)}).on(Ts.TrackSubscriptionStatusChanged,(e,t)=>{this.emitWhenConnected(Cs.TrackSubscriptionStatusChanged,e,t,n)}).on(Ts.TrackSubscriptionFailed,(e,t)=>{this.emit(Cs.TrackSubscriptionFailed,e,n,t)}).on(Ts.TrackSubscriptionPermissionChanged,(e,t)=>{this.emitWhenConnected(Cs.TrackSubscriptionPermissionChanged,e,t,n)}).on(Ts.Active,()=>{this.emitWhenConnected(Cs.ParticipantActive,n),n.kind===it.AGENT&&this.localParticipant.setActiveAgent(n)}),t&&n.updateInfo(t),n}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((e,t)=>(e.push(...t.getTrackPublications()),e),[]),t=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,t)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const t of e.videoTrackPublications.values())t.isSubscribed&&zo(t)&&t.emitTrackUpdate()}getRemoteParticipantBySid(e){const t=this.sidToIdentity.get(e);if(t)return this.remoteParticipants.get(t)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Hs.setInterval(()=>{this.engine&&!this.engine.isClosed&&this.engine.verifyTransport()?e=0:(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})),3>e||(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Je.STATE_MISMATCH)))},4e3)}clearConnectionReconcile(){this.connectionReconcileInterval&&Hs.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e!==this.state&&(this.state=e,this.emit(Cs.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[t,n]=e;this.emit(t,...n)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;t>i;i++)n[i-1]=arguments[i];if(this.state===Ka.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,n]);else if(this.state===Ka.Connected)return this.emit(e,...n);return!1}simulateParticipants(e){return ti(this,void 0,void 0,function*(){var t,n;const i=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),s=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new Xe({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:R.parse((new Date).getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new tt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(Cs.SignalConnected),this.emit(Cs.Connected),this.setAndEmitConnectionState(Ka.Connected),i.video){const e=new Ha(Ks.Kind.Video,new at({source:We.CAMERA,sid:""+Math.floor(1e4*Math.random()),type:He.AUDIO,name:"video-dummy"}),new va(i.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:xo(160*(null!==(t=s.aspectRatios[0])&&void 0!==t?t:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(e),this.localParticipant.emit(Ts.LocalTrackPublished,e)}if(i.audio){const e=new Ha(Ks.Kind.Audio,new at({source:We.MICROPHONE,sid:""+Math.floor(1e4*Math.random()),type:He.AUDIO}),new oa(i.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Oo(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(e),this.localParticipant.emit(Ts.LocalTrackPublished,e)}for(let e=0;s.count-1>e;e+=1){let t=new tt({sid:""+Math.floor(1e4*Math.random()),identity:"simulated-".concat(e),state:nt.ACTIVE,tracks:[],joinedAt:R.parse(Date.now())});const i=this.getOrCreateParticipant(t.identity,t);if(s.video){const o=xo(160*(null!==(n=s.aspectRatios[e%s.aspectRatios.length])&&void 0!==n?n:1),160,!1,!0),r=new at({source:We.CAMERA,sid:""+Math.floor(1e4*Math.random()),type:He.AUDIO});i.addSubscribedMediaTrack(o,r.sid,new MediaStream([o]),new RTCRtpReceiver),t.tracks=[...t.tracks,r]}if(s.audio){const e=Oo(),n=new at({source:We.MICROPHONE,sid:""+Math.floor(1e4*Math.random()),type:He.AUDIO});i.addSubscribedMediaTrack(e,n.sid,new MediaStream([e]),new RTCRtpReceiver),t.tracks=[...t.tracks,n]}i.updateInfo(t)}})}emit(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;t>i;i++)n[i-1]=arguments[i];if(e!==Cs.ActiveSpeakersChanged&&e!==Cs.TranscriptionReceived){const t=Xa(n).filter(e=>void 0!==e);e!==Cs.TrackSubscribed&&e!==Cs.TrackUnsubscribed||this.log.trace("subscribe trace: ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:t})),this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:t}))}return super.emit(e,...n)}}function Xa(e){return e.map(e=>{if(e)return Array.isArray(e)?Xa(e):"object"==typeof e?"logContext"in e?e.logContext:void 0:e})}var Za;Qa.cleanupRegistry="undefined"!=typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()}),function(e){e[e.IDLE=0]="IDLE",e[e.RUNNING=1]="RUNNING",e[e.SKIPPED=2]="SKIPPED",e[e.SUCCESS=3]="SUCCESS",e[e.FAILED=4]="FAILED"}(Za||(Za={}));function ec(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}new TextEncoder,new TextDecoder;class tc extends Error{constructor(e,t){var n;super(e,t),ec(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,null===(n=Error.captureStackTrace)||void 0===n||n.call(Error,this,this.constructor)}}ec(tc,"code","ERR_JOSE_GENERIC");ec(class extends tc{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unspecified";super(e,{cause:{claim:n,reason:i,payload:t}}),ec(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),ec(this,"claim",void 0),ec(this,"reason",void 0),ec(this,"payload",void 0),this.claim=n,this.reason=i,this.payload=t}},"code","ERR_JWT_CLAIM_VALIDATION_FAILED");ec(class extends tc{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"unspecified";super(e,{cause:{claim:n,reason:i,payload:t}}),ec(this,"code","ERR_JWT_EXPIRED"),ec(this,"claim",void 0),ec(this,"reason",void 0),ec(this,"payload",void 0),this.claim=n,this.reason=i,this.payload=t}},"code","ERR_JWT_EXPIRED");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}},"code","ERR_JOSE_ALG_NOT_ALLOWED");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JOSE_NOT_SUPPORTED")}},"code","ERR_JOSE_NOT_SUPPORTED");ec(class extends tc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"decryption operation failed",arguments.length>1?arguments[1]:void 0),ec(this,"code","ERR_JWE_DECRYPTION_FAILED")}},"code","ERR_JWE_DECRYPTION_FAILED");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JWE_INVALID")}},"code","ERR_JWE_INVALID");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JWS_INVALID")}},"code","ERR_JWS_INVALID");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JWT_INVALID")}},"code","ERR_JWT_INVALID");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JWK_INVALID")}},"code","ERR_JWK_INVALID");ec(class extends tc{constructor(){super(...arguments),ec(this,"code","ERR_JWKS_INVALID")}},"code","ERR_JWKS_INVALID");ec(class extends tc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"no applicable key found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),ec(this,"code","ERR_JWKS_NO_MATCHING_KEY")}},"code","ERR_JWKS_NO_MATCHING_KEY");ec(class extends tc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"multiple matching keys found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),ec(this,Symbol.asyncIterator,void 0),ec(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}},"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");ec(class extends tc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"request timed out",arguments.length>1?arguments[1]:void 0),ec(this,"code","ERR_JWKS_TIMEOUT")}},"code","ERR_JWKS_TIMEOUT");ec(class extends tc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"signature verification failed",arguments.length>1?arguments[1]:void 0),ec(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}},"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");const nc=()=>{},ic="development"===(()=>{const e="undefined"!=typeof window,t=e=>{try{return"undefined"!=typeof process&&process.env?process.env[e]:void 0}catch{return}},n=t("NEXT_PUBLIC_ENVIRONMENT");if("PRODUCTION"===n)return"production";if("PREVIEW"===n||"STAGING"===n)return"development";const i=t("NODE_ENV"),s=t("REACT_APP_ENV");if("production"===i||"production"===s)return"production";if("development"===i||"development"===s)return"development";if(void 0!==t("VITE_DEV_SERVER_URL"))return"development";if(e){if("localhost"===window.location?.hostname||"127.0.0.1"===window.location?.hostname)return"development";if(window.location?.port&&["3000","3001","5173","8080"].includes(window.location.port))return"development"}return"production"})()?{log:(...e)=>console.log("[Convai]",...e),warn:(...e)=>console.warn("[Convai]",...e),error:(...e)=>console.error("[Convai]",...e),info:(...e)=>console.info("[Convai]",...e),debug:(...e)=>console.debug("[Convai]",...e),trace:(...e)=>console.trace("[Convai]",...e)}:{log:nc,warn:nc,error:nc,info:nc,debug:nc,trace:nc};class sc{constructor(){this.events=new Map}on(e,t){return this.events.has(e)||this.events.set(e,new Set),this.events.get(e).add(t),()=>{this.off(e,t)}}off(e,t){const n=this.events.get(e);n&&(n.delete(t),0===n.size&&this.events.delete(e))}emit(e,...t){const n=this.events.get(e);n&&n.forEach(n=>{try{n(...t)}catch(t){console.error(`Error in event handler for "${e}":`,t)}})}removeAllListeners(){this.events.clear()}listenerCount(e){return this.events.get(e)?.size??0}}class oc extends sc{constructor(e){super(),this.room=null,this._isAudioEnabled=!1,this._isAudioMuted=!1,this._audioLevel=0,e&&this.setRoom(e)}get isAudioEnabled(){return this._isAudioEnabled}get isAudioMuted(){return this._isAudioMuted}get audioLevel(){return this._audioLevel}setRoom(e){this.room&&this.cleanupListeners(),this.room=e,e&&"disconnected"!==e.state&&(this.setupListeners(),this.updateState())}setupListeners(){if(!this.room)return;const e=this.room.localParticipant;e.on("trackMuted",e=>{"microphone"===e.source&&(this._isAudioMuted=!0,this._isAudioEnabled=!1,this.emit("audioStateChange",{isAudioMuted:!0,isAudioEnabled:!1}))}),e.on("trackUnmuted",e=>{"microphone"===e.source&&(this._isAudioMuted=!1,this._isAudioEnabled=!0,this.emit("audioStateChange",{isAudioMuted:!1,isAudioEnabled:!0}))}),e.on("trackPublished",e=>{"microphone"===e.source&&(this._isAudioEnabled=!0,this._isAudioMuted=!1,this.emit("audioStateChange",{isAudioMuted:!1,isAudioEnabled:!0}))}),e.on("trackUnpublished",e=>{"microphone"===e.source&&(this._isAudioEnabled=!1,this._isAudioMuted=!0,this.emit("audioStateChange",{isAudioMuted:!0,isAudioEnabled:!1}))})}cleanupListeners(){}syncStateFromRoom(e={}){const{emit:t=!1}=e;if(!this.room||"disconnected"===this.room.state){const e=!1!==this._isAudioEnabled||!0!==this._isAudioMuted||0!==this._audioLevel;return this._isAudioEnabled=!1,this._isAudioMuted=!0,this._audioLevel=0,void(t&&e&&this.emit("audioStateChange",{isAudioMuted:this._isAudioMuted,isAudioEnabled:this._isAudioEnabled,audioLevel:this._audioLevel}))}const n=this.room.localParticipant,i=n?.isMicrophoneEnabled??!1,s=!i,o=this._isAudioEnabled!==i||this._isAudioMuted!==s;this._isAudioEnabled=i,this._isAudioMuted=s,t&&o&&this.emit("audioStateChange",{isAudioMuted:this._isAudioMuted,isAudioEnabled:this._isAudioEnabled,audioLevel:this._audioLevel})}updateState(){this.syncStateFromRoom()}async enableAudio(){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setMicrophoneEnabled(!0),this._isAudioEnabled=!0,this._isAudioMuted=!1,this.emit("audioStateChange",{isAudioMuted:!1,isAudioEnabled:!0,audioLevel:this._audioLevel})}catch(e){throw ic.error("Failed to enable audio:",e),e}}async disableAudio(){if(!this.room)throw Error("Room not initialized");try{const e=Array.from(this.room.localParticipant.audioTrackPublications.values()).find(e=>"microphone"===e.source&&e.track)?.track;await this.room.localParticipant.setMicrophoneEnabled(!1),e&&e.stop(),this._isAudioEnabled=!1,this._isAudioMuted=!0,this.emit("audioStateChange",{isAudioMuted:!0,isAudioEnabled:!1,audioLevel:0})}catch(e){throw ic.error("Failed to disable audio:",e),e}}async muteAudio(){await this.disableAudio()}async unmuteAudio(){await this.enableAudio()}async toggleAudio(){this._isAudioMuted?await this.unmuteAudio():await this.muteAudio()}async setAudioDevice(e){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setMicrophoneEnabled(!0,{deviceId:e})}catch(e){throw ic.error("Failed to set audio device:",e),e}}async getAudioDevices(){try{const e=await navigator.mediaDevices.enumerateDevices();return e.filter(e=>"audioinput"===e.kind)}catch(e){throw ic.error("Failed to get audio devices:",e),e}}startAudioLevelMonitoring(){}stopAudioLevelMonitoring(){this._audioLevel=0}reset(){this._isAudioEnabled=!1,this._isAudioMuted=!1,this._audioLevel=0,this.emit("audioStateChange",{isAudioMuted:!1,isAudioEnabled:!1,audioLevel:0})}}class rc extends sc{constructor(e){super(),this.room=null,this._isVideoEnabled=!1,this._isVideoHidden=!1,e&&this.setRoom(e)}get isVideoEnabled(){return this._isVideoEnabled}get isVideoHidden(){return this._isVideoHidden}setRoom(e){this.room&&this.cleanupListeners(),this.room=e,e&&"disconnected"!==e.state&&(this.setupListeners(),this.updateState())}setupListeners(){if(!this.room)return;const e=this.room.localParticipant;e.on("trackMuted",e=>{"camera"===e.source&&(this._isVideoHidden=!0,this.emit("videoStateChange",{isVideoHidden:!0}))}),e.on("trackUnmuted",e=>{"camera"===e.source&&(this._isVideoHidden=!1,this.emit("videoStateChange",{isVideoHidden:!1}))}),e.on("trackPublished",e=>{"camera"===e.source&&(this._isVideoEnabled=!0,this.emit("videoStateChange",{isVideoEnabled:!0}))}),e.on("trackUnpublished",e=>{"camera"===e.source&&(this._isVideoEnabled=!1,this.emit("videoStateChange",{isVideoEnabled:!1}))})}cleanupListeners(){}updateState(){if(!this.room||"disconnected"===this.room.state)return this._isVideoEnabled=!1,void(this._isVideoHidden=!1);this._isVideoEnabled=this.room.localParticipant.isCameraEnabled,this._isVideoHidden=!1}async enableVideo(){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setCameraEnabled(!0),this._isVideoEnabled=!0,this.emit("videoStateChange",{isVideoEnabled:!0})}catch(e){throw ic.error("Failed to enable video:",e),e}}async disableVideo(){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setCameraEnabled(!1),this._isVideoEnabled=!1,this.emit("videoStateChange",{isVideoEnabled:!1})}catch(e){throw ic.error("Failed to disable video:",e),e}}async hideVideo(){await this.disableVideo()}async showVideo(){await this.enableVideo()}async toggleVideo(){this._isVideoEnabled?await this.disableVideo():await this.enableVideo()}async setVideoDevice(e){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setCameraEnabled(!0,{deviceId:e})}catch(e){throw ic.error("Failed to set video device:",e),e}}async getVideoDevices(){try{const e=await navigator.mediaDevices.enumerateDevices();return e.filter(e=>"videoinput"===e.kind)}catch(e){throw ic.error("Failed to get video devices:",e),e}}async setVideoQuality(e){if(!this.room)throw Error("Room not initialized");try{ic.warn("Video quality setting not yet implemented")}catch(e){throw ic.error("Failed to set video quality:",e),e}}reset(){this._isVideoEnabled=!1,this._isVideoHidden=!1,this.emit("videoStateChange",{isVideoEnabled:!1,isVideoHidden:!1})}}class ac extends sc{constructor(e){super(),this.room=null,this._isScreenShareEnabled=!1,this._isScreenShareActive=!1,e&&this.setRoom(e)}get isScreenShareEnabled(){return this._isScreenShareEnabled}get isScreenShareActive(){return this._isScreenShareActive}setRoom(e){this.room&&this.cleanupListeners(),this.room=e,e&&"disconnected"!==e.state&&(this.setupListeners(),this.updateState())}setupListeners(){if(!this.room)return;const e=this.room.localParticipant;e.on("trackPublished",e=>{"screen_share"===e.source&&(this._isScreenShareActive=!0,this.emit("screenShareStateChange",{isScreenShareActive:!0}))}),e.on("trackUnpublished",e=>{"screen_share"===e.source&&(this._isScreenShareActive=!1,this.emit("screenShareStateChange",{isScreenShareActive:!1}))}),e.on("trackMuted",e=>{"screen_share"===e.source&&(this._isScreenShareActive=!1,this.emit("screenShareStateChange",{isScreenShareActive:!1}))}),e.on("trackUnmuted",e=>{"screen_share"===e.source&&(this._isScreenShareActive=!0,this.emit("screenShareStateChange",{isScreenShareActive:!0}))})}cleanupListeners(){}updateState(){if(!this.room||"disconnected"===this.room.state)return this._isScreenShareEnabled=!1,void(this._isScreenShareActive=!1);const e=this.room.localParticipant;this._isScreenShareEnabled=e.isScreenShareEnabled,this._isScreenShareActive=e.isScreenShareEnabled}async enableScreenShare(){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setScreenShareEnabled(!0,{selfBrowserSurface:"include",surfaceSwitching:"include",systemAudio:"include"}),this._isScreenShareEnabled=!0,this._isScreenShareActive=!0,this.emit("screenShareStateChange",{isScreenShareEnabled:!0,isScreenShareActive:!0})}catch(e){throw ic.error("Failed to enable screen share:",e),e}}async disableScreenShare(){if(!this.room)throw Error("Room not initialized");try{await this.room.localParticipant.setScreenShareEnabled(!1),this._isScreenShareEnabled=!1,this._isScreenShareActive=!1,this.emit("screenShareStateChange",{isScreenShareEnabled:!1,isScreenShareActive:!1})}catch(e){throw ic.error("Failed to disable screen share:",e),e}}async toggleScreenShare(){this._isScreenShareEnabled?await this.disableScreenShare():await this.enableScreenShare()}async enableScreenShareWithAudio(){if(!this.room)throw Error("Room not initialized");try{(await this.room.localParticipant.createScreenTracks({audio:!0,selfBrowserSurface:"include",surfaceSwitching:"include",systemAudio:"include"})).forEach(e=>{this.room.localParticipant.publishTrack(e)}),this._isScreenShareEnabled=!0}catch(e){throw ic.error("Failed to enable screen share with audio:",e),e}}async getScreenShareTracks(){if(!this.room)return[];try{const e=[];return this.room.localParticipant.trackPublications.forEach(t=>{"screen_share"===t.source&&t.track&&e.push(t.track)}),e}catch(e){throw ic.error("Failed to get screen share tracks:",e),e}}reset(){this._isScreenShareEnabled=!1,this._isScreenShareActive=!1,this.emit("screenShareStateChange",{isScreenShareEnabled:!1,isScreenShareActive:!1})}}class cc extends sc{constructor(e,t){super(),this.room=null,this.chatMessages=[],this.userTranscription="",this.isBotResponding=!1,this.isSpeaking=!1,this.latencyMonitor=null,t&&(this.latencyMonitor=t),e&&this.setRoom(e)}setLatencyMonitor(e){this.latencyMonitor=e}getChatMessages(){return this.chatMessages}getUserTranscription(){return this.userTranscription}getIsBotResponding(){return this.isBotResponding}getIsSpeaking(){return this.isSpeaking}setRoom(e){this.room&&this.cleanupListeners(),this.room=e,this.setupListeners()}setupListeners(){this.room&&this.room.on(Cs.DataReceived,this.handleDataReceived.bind(this))}cleanupListeners(){this.room&&this.room.off(Cs.DataReceived,this.handleDataReceived.bind(this))}handleDataReceived(e,t){try{const t=(new TextDecoder).decode(e),n=JSON.parse(t),i=(new Date).toISOString(),s=`${n.type}-${Date.now()}-${Math.random()}`;switch(n.type){case"user_text_message":case"user-llm-text":case"text-input":case"user-input":case"text-message":case"chat-message":case"input-text":case"message":case"moderation-response":case"trigger-message":case"update-template-keys":case"update-dynamic-info":case"interrupt-bot":break;case"bot-ready":this.emit("botReady");break;case"bot-llm-started":this.isBotResponding=!0,this.emit("botRespondingChange",!0);const e=this.chatMessages[this.chatMessages.length-1];e&&"user-transcription"===e.type&&e.isFinal&&(this.chatMessages[this.chatMessages.length-1]={...e,isFinal:!1});this.chatMessages.push({id:s,type:"bot-llm-text",content:"",timestamp:i,isFinal:!0}),this.emit("messagesChange",this.chatMessages);break;case"bot-llm-text":if(n.data?.text){const e=n.data.text,t=this.chatMessages[this.chatMessages.length-1];if(t&&t.isFinal)this.chatMessages[this.chatMessages.length-1]={...t,content:t.content+e};else{const t={id:`${n.type}-${Date.now()}-${Math.random()}`,type:"bot-llm-text",content:e,timestamp:(new Date).toISOString(),isFinal:!0};this.chatMessages.push(t)}this.emit("messagesChange",this.chatMessages)}break;case"bot-llm-stopped":const t=this.chatMessages[this.chatMessages.length-1];t&&t.isFinal&&(this.chatMessages[this.chatMessages.length-1]={...t,isFinal:!1}),this.isBotResponding=!1,this.emit("botRespondingChange",!1),this.emit("messagesChange",this.chatMessages);break;case"user-transcription":if(n.data?.text){const e=n.data.text;if(n.data?.final){const t=this.chatMessages[this.chatMessages.length-1];if(this.latencyMonitor&&this.latencyMonitor.startMeasurement("voice",e),t&&"user-transcription"===t.type&&!0===t.isFinal){const n=t.content.trim()+" "+e.trim();this.chatMessages[this.chatMessages.length-1]={...t,content:n,timestamp:i}}else{this.chatMessages.push({id:s,type:"user-transcription",content:e,timestamp:i,isFinal:!0})}this.emit("messagesChange",this.chatMessages),this.userTranscription="",this.emit("userTranscriptionChange","")}else this.userTranscription=e,this.emit("userTranscriptionChange",e)}break;case"bot-emotion":if(n.data?.emotion){const e={id:s,type:"bot-emotion",content:`${n.data.emotion} (scale: ${n.data.scale||1})`,timestamp:i};this.chatMessages.push(e),console.log("BotEmotions",e),this.emit("messagesChange",this.chatMessages)}break;case"bot-started-speaking":this.isSpeaking=!0,this.emit("speakingChange",!0);break;case"bot-stopped-speaking":this.isSpeaking=!1,this.emit("speakingChange",!1);break;case"action-response":if(n.data?.actions){const e={id:s,type:"action",content:"Actions: "+n.data.actions.join(", "),timestamp:i};this.chatMessages.push(e),this.emit("messagesChange",this.chatMessages)}break;case"behavior-tree-response":if(n.data?.narrative_section_id){this.chatMessages.push({id:s,type:"behavior-tree",content:"Narrative Section: "+n.data.narrative_section_id,timestamp:i}),this.emit("messagesChange",this.chatMessages)}break;case"server-message":if(n.data){const e=n.data;"chunked-neurosync-blendshapes"===e.type&&e.blendshapes?this.emit("blendshapes",e):ic.info("[MessageHandler] Server message:",{type:e.type,dataKeys:Object.keys(e)})}}}catch(e){ic.error("Failed to parse data message:",e)}}reset(){this.chatMessages=[],this.userTranscription="",this.isBotResponding=!1,this.isSpeaking=!1,this.emit("messagesChange",this.chatMessages),this.emit("userTranscriptionChange",""),this.emit("botRespondingChange",!1),this.emit("speakingChange",!1)}}async function dc(e,t){if(!e)return ic.info("Anonymous mode: No endUserId provided, speaker ID will not be sent"),null;try{const n=await async function(e,t){const n="https://api.convai.com/user/speaker/new";ic.info(`Requesting speaker ID for endUserId: ${e.substring(0,8)}...`);try{const i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","CONVAI-API-KEY":t},body:JSON.stringify({deviceId:e})});if(!i.ok){const e=await i.text();throw Error(`Speaker API request failed: ${i.status} ${i.statusText} - ${e}`)}const s=await i.json();if(!s.speakerId)throw Error("Speaker API did not return a speaker ID");return s.speakerId}catch(e){if(e instanceof Error)throw Error("Failed to get speaker ID: "+e.message);throw Error("Failed to get speaker ID: Unknown error")}}(e,t);return ic.info(`Resolved speaker ID: ${n.substring(0,8)}...`),n}catch(e){throw ic.error("Failed to resolve speaker ID:",e),e}}class lc extends sc{constructor(e=!1){super(),this.measurements=[],this.pendingMeasurement=null,this.maxMeasurements=100,this.isEnabled=!1,this.isEnabled=e}enable(){this.isEnabled=!0,this.emit("enabledChange",!0)}disable(){this.isEnabled=!1,this.emit("enabledChange",!1)}get enabled(){return this.isEnabled}startMeasurement(e,t){if(!this.isEnabled)return;const n=`${e}-${Date.now()}-${Math.random()}`;this.pendingMeasurement={id:n,startTime:Date.now(),type:e,userMessage:t?.substring(0,50)}}endMeasurement(){if(!this.isEnabled||!this.pendingMeasurement)return;const e=Date.now(),t={id:this.pendingMeasurement.id,startTime:this.pendingMeasurement.startTime,endTime:e,latency:e-this.pendingMeasurement.startTime,type:this.pendingMeasurement.type,userMessage:this.pendingMeasurement.userMessage};this.measurements.push(t),this.measurements.length>this.maxMeasurements&&this.measurements.shift(),this.pendingMeasurement=null,this.emit("measurement",t),this.emit("measurementsChange",this.measurements)}cancelMeasurement(){this.pendingMeasurement=null}getMeasurements(){return[...this.measurements]}getLatestMeasurement(){return this.measurements.length>0?this.measurements[this.measurements.length-1]:null}getStats(){if(0===this.measurements.length)return null;const e=this.measurements.map(e=>e.latency).sort((e,t)=>e-t),t=e.reduce((e,t)=>e+t,0),n=Math.floor(.95*e.length);return{average:t/e.length,min:e[0],max:e[e.length-1],median:e[Math.floor(e.length/2)],p95:e[n],count:e.length}}clear(){this.measurements=[],this.pendingMeasurement=null,this.emit("measurementsChange",this.measurements)}get hasPendingMeasurement(){return null!==this.pendingMeasurement}getPendingMeasurement(){return this.pendingMeasurement?{...this.pendingMeasurement}:null}}class uc{constructor(e){this.audioElements=new Map,this.room=e,this.container=document.createElement("div"),this.container.id="convai-audio-renderer",this.container.style.display="none",document.body.appendChild(this.container),this.setupEventListeners(),this.attachExistingTracks()}setupEventListeners(){this.room.on(Cs.TrackSubscribed,this.handleTrackSubscribed.bind(this)),this.room.on(Cs.TrackUnsubscribed,this.handleTrackUnsubscribed.bind(this)),this.room.on(Cs.ParticipantDisconnected,this.handleParticipantDisconnected.bind(this))}attachExistingTracks(){this.room.remoteParticipants.forEach(e=>{e.audioTrackPublications.forEach(t=>{t.track&&t.isSubscribed&&this.attachAudioTrack(t,e)})})}handleTrackSubscribed(e,t,n){"audio"===e.kind&&this.attachAudioTrack(t,n)}handleTrackUnsubscribed(e,t,n){"audio"===e.kind&&this.detachAudioTrack(t.trackSid)}handleParticipantDisconnected(e){e.audioTrackPublications.forEach(e=>{this.detachAudioTrack(e.trackSid)})}attachAudioTrack(e,t){const n=e.track;if(!n||"audio"!==n.kind)return;const i=e.trackSid;if(!this.audioElements.has(i))try{const e=document.createElement("audio");e.id="audio-"+i,e.autoplay=!0,n.attach(e),this.container.appendChild(e),this.audioElements.set(i,e),ic.info(`Audio track attached: ${i} from ${t.identity}`)}catch(e){ic.error("Failed to attach audio track:",e)}}detachAudioTrack(e){const t=this.audioElements.get(e);t&&(t.remove(),this.audioElements.delete(e),ic.info("Audio track detached: "+e))}destroy(){this.audioElements.forEach((e,t)=>{e.remove()}),this.audioElements.clear(),this.container&&this.container.parentElement&&this.container.remove(),this.room.off(Cs.TrackSubscribed,this.handleTrackSubscribed.bind(this)),this.room.off(Cs.TrackUnsubscribed,this.handleTrackUnsubscribed.bind(this)),this.room.off(Cs.ParticipantDisconnected,this.handleParticipantDisconnected.bind(this)),ic.info("AudioRenderer destroyed")}}const hc={convai:{light:"#1EB453",dark:"#084c3a"},neutral:{100:"#f5f5f5",200:"#e5e5e5",300:"#d4d4d4",400:"#a3a3a3",700:"#404040"},glass:{medium:"rgba(255, 255, 255, 0.15)",backdrop:"rgba(255, 255, 255, 0.8)"},error:{500:"#ef4444"},text:{primary:"#1f2937",secondary:"#6b7280"}},pc={fontFamily:{primary:'"Noto Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',body:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},fontSize:{sm:"0.875rem",base:"1rem"},fontWeight:{semibold:600}},mc={xs:"0.25rem"},gc={md:"0.5rem",lg:"0.75rem",xl:"1rem",full:"9999px"},fc={xl:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)",glass:"0 8px 32px rgba(0, 0, 0, 0.1)"},vc={backdrop:"blur(20px)",border:"1px solid rgba(255, 255, 255, 0.2)"},yc={fast:"0.15s ease-in-out"},bc={modal:1040};let kc=!1;const Cc=()=>{if(kc)return;const e=document.createElement("style");e.id="convai-widget-styles",e.textContent=`\n @keyframes convai-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes convai-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes convai-bounce {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-10px);\n }\n }\n\n @keyframes convai-slide-up {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes convai-slide-down {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @keyframes convai-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes convai-scale-in {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n .convai-widget * {\n box-sizing: border-box;\n }\n\n .convai-widget {\n font-family: ${pc.fontFamily.primary};\n color: ${hc.text.primary};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .convai-widget button {\n font-family: inherit;\n cursor: pointer;\n border: none;\n outline: none;\n background: none;\n padding: 0;\n margin: 0;\n }\n\n .convai-widget input {\n font-family: inherit;\n border: none;\n outline: none;\n background: none;\n }\n\n .convai-widget::-webkit-scrollbar {\n width: 6px;\n }\n\n .convai-widget::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.05);\n border-radius: 3px;\n }\n\n .convai-widget::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n }\n\n .convai-widget::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n`,document.head.appendChild(e),kc=!0},Tc={xs:"0.75rem",sm:"1rem",md:"1.25rem",lg:"1.5rem",xl:"2rem","2xl":"2.5rem"},Sc={idle:"#1EB453",connecting:"#f59e0b",connected:"#1EB453",disconnected:"#ef4444",typing:"#8b5cf6",listening:"#3b82f6",processing:"#6366f1"};function wc(e,t,n,i){const s=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=Tc[e];return s.setAttribute("width",o),s.setAttribute("height",o),s.setAttribute("viewBox",t),s.setAttribute("fill","none"),s.setAttribute("stroke","currentColor"),s.setAttribute("stroke-width","2"),s.setAttribute("stroke-linecap","round"),s.setAttribute("stroke-linejoin","round"),i&&(s.className.baseVal=i),n.forEach(e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("d",e),s.appendChild(t)}),s}function Ec(e,t,n,i){const s=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=Tc[e];return s.setAttribute("width",o),s.setAttribute("height",o),s.setAttribute("viewBox",t),s.setAttribute("fill","currentColor"),i&&(s.className.baseVal=i),n.forEach(e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("d",e.d),e.fill&&t.setAttribute("fill",e.fill),e.transform&&t.setAttribute("transform",e.transform),s.appendChild(t)}),s}const Rc=(e="md",t="idle",n)=>Ec(e,"0 0 384 384",[{d:"M0 0 C0.69959839 -0.0065712 1.39919678 -0.0131424 2.11999512 -0.01991272 C4.43522251 -0.03962096 6.75038501 -0.05130455 9.06567383 -0.0612793 C9.85831446 -0.06535482 10.65095509 -0.06943035 11.46761513 -0.07362938 C15.66541914 -0.0944825 19.86319057 -0.10878583 24.06103516 -0.11816406 C28.38410215 -0.12920936 32.70665171 -0.16358924 37.02953625 -0.20333576 C40.36427221 -0.22956171 43.69888619 -0.23786131 47.0337162 -0.24144554 C48.62643224 -0.24629839 50.21914331 -0.2578751 51.81175804 -0.27648354 C69.26930263 -0.46773456 69.26930263 -0.46773456 75.58610535 5.6245575 C80.21645647 10.85588298 81.33540199 14.49016989 81.35986328 21.4206543 C81.36497421 22.14311844 81.37008514 22.86558258 81.37535095 23.60993958 C81.38923214 25.99435754 81.38829113 28.37848592 81.38598633 30.76293945 C81.38987448 32.42436836 81.39420939 34.08579627 81.39897156 35.7472229 C81.40643089 39.22905703 81.40614488 42.71078976 81.40087891 46.19262695 C81.39508893 50.64694813 81.41200506 55.10085286 81.43522358 59.55510521 C81.44998192 62.98670871 81.4508297 66.41821245 81.44771385 69.84984207 C81.44822615 71.49163258 81.45344672 73.1334288 81.46352577 74.77518845 C81.47591195 77.07525124 81.46908575 79.37450987 81.45751953 81.67456055 C81.45814896 82.981539 81.45877838 84.28851746 81.45942688 85.63510132 C80.84254452 91.47371365 78.52732357 95.26249723 74.08520508 98.98950195 C73.40458008 99.57344727 72.72395508 100.15739258 72.02270508 100.7590332 C68.47350615 103.35653161 65.36290965 103.30519544 61.10424805 103.31884766 C59.87221649 103.32588211 58.64018494 103.33291656 57.37081909 103.34016418 C56.7124493 103.34198008 56.05407951 103.34379597 55.37575912 103.34566689 C53.30624131 103.35285669 51.23695729 103.36854441 49.16751099 103.38700867 C43.28366424 103.43934056 37.3999433 103.4873775 31.51586914 103.50292969 C27.91355676 103.5130737 24.3118307 103.54256243 20.70975113 103.5842495 C19.34402042 103.59647838 17.97820656 103.60169572 16.61242294 103.59945107 C8.73090231 103.58969075 1.87263728 103.81383569 -4.91479492 108.17700195 C-7.72384754 111.13052013 -9.15477197 114.52324306 -10.91479492 118.17700195 C-11.28512344 118.93435638 -11.65545197 119.69171082 -12.03700256 120.47201538 C-16.07726993 130.41632989 -15.43823163 140.76281367 -15.37008476 151.32646561 C-15.34801891 154.90096301 -15.35197296 158.47462262 -15.36256409 162.04916382 C-15.38412577 170.92003422 -15.36687668 179.79071265 -15.34106445 188.66156006 C-15.31962039 196.17710783 -15.31776573 203.69211414 -15.34398079 211.20765305 C-15.34831203 214.71647808 -15.32375642 218.22434564 -15.29844666 221.73306274 C-15.30371999 223.89748554 -15.31044419 226.06190545 -15.31884766 228.22631836 C-15.30393784 229.19074356 -15.28902802 230.15516876 -15.27366638 231.14881897 C-15.34508206 238.01141921 -16.9480351 243.5040945 -20.91479492 249.17700195 C-26.0538927 253.49142781 -30.93587496 255.28530317 -37.61843872 255.3309021 C-38.56028519 255.33950256 -39.50213165 255.34810303 -40.47251892 255.35696411 C-41.49906082 255.36122406 -42.52560272 255.36548401 -43.58325195 255.36987305 C-44.66992661 255.37805054 -45.75660126 255.38622803 -46.87620544 255.39465332 C-50.47500054 255.41947905 -54.07375621 255.43601739 -57.67260742 255.45043945 C-58.90313717 255.45576313 -60.13366692 255.46108681 -61.40148544 255.46657181 C-67.24488135 255.49053877 -73.08826109 255.5097802 -78.93169224 255.52259386 C-84.98841103 255.53614167 -91.04475988 255.56242227 -97.10131836 255.60913086 C-103.60933706 255.65850314 -110.11701183 255.68322666 -116.62520981 255.69032669 C-119.10105009 255.69703038 -121.57688297 255.71222923 -124.05261612 255.7362175 C-127.52547148 255.76794397 -130.99700762 255.7678936 -134.4699707 255.76049805 C-135.48436722 255.77690338 -136.49876373 255.79330872 -137.54389954 255.81021118 C-144.58516525 255.74911945 -150.0594436 254.18666177 -155.91479492 250.17700195 C-160.11922437 245.7740819 -162.02935988 241.44006577 -162.06869507 235.39033508 C-162.08159576 233.91218575 -162.08159576 233.91218575 -162.09475708 232.4041748 C-162.09901703 231.32414185 -162.10327698 230.24410889 -162.10766602 229.13134766 C-162.11584351 227.99283859 -162.124021 226.85432953 -162.13244629 225.68132019 C-162.15730395 221.90514656 -162.17381777 218.12901055 -162.18823242 214.3527832 C-162.1935561 213.06367727 -162.19887978 211.77457134 -162.20436478 210.4464016 C-162.22559522 205.02735272 -162.24472449 199.60831609 -162.25598717 194.18923664 C-162.27221051 186.43543753 -162.30535181 178.68214076 -162.36238801 170.92853099 C-162.40584504 164.81123062 -162.42174109 158.6941264 -162.42811966 152.57668114 C-162.43483541 149.9791729 -162.45006568 147.38167207 -162.47401047 144.78426552 C-162.50563862 141.14566586 -162.50570126 137.50833002 -162.49829102 133.86962891 C-162.51469635 132.7997171 -162.53110168 131.7298053 -162.54800415 130.62747192 C-162.49171427 123.86379339 -161.30224231 119.40867493 -156.91479492 114.17700195 C-150.70048633 108.27340879 -145.09496666 107.88810653 -136.89892578 107.9375 C-135.89334625 107.93548584 -134.88776672 107.93347168 -133.85171509 107.93139648 C-131.67026481 107.92785441 -129.48880427 107.92861384 -127.30735588 107.93317223 C-123.84643147 107.93877446 -120.38584111 107.92958995 -116.92494202 107.91596985 C-107.08536336 107.87889048 -97.24589659 107.86026615 -87.40625 107.87158203 C-81.38322548 107.87745814 -75.36066903 107.85904709 -69.33773994 107.82569313 C-67.05060701 107.81777476 -64.76342257 107.81896733 -62.47630119 107.82971764 C-43.45245929 108.09017669 -43.45245929 108.09017669 -26.78979492 99.73950195 C-23.10917107 94.70931602 -22.66695746 89.8832171 -22.67529297 83.76977539 C-22.67327881 83.05344437 -22.67126465 82.33711334 -22.66918945 81.59907532 C-22.66565984 80.05224746 -22.66639133 78.50540513 -22.67096519 76.95858002 C-22.67659236 74.50202502 -22.66734352 72.0459363 -22.65376282 69.5894165 C-22.61678347 62.60801088 -22.59805845 55.62676468 -22.609375 48.64526367 C-22.61525918 44.36517663 -22.59680667 40.08574677 -22.5634861 35.80579376 C-22.55558359 34.18408293 -22.55673851 32.56229947 -22.5675106 30.94060516 C-22.62477994 21.92945939 -22.61028477 13.70058716 -16.91479492 6.17700195 C-11.68775031 1.25109893 -7.03157131 0.05467437 0 0 Z",fill:"#1EB453",transform:"translate(275.914794921875,92.822998046875)"},{d:"M0 0 C0.70949799 -0.0065712 1.41899597 -0.0131424 2.1499939 -0.01991272 C4.49224974 -0.03958252 6.83444162 -0.05129463 9.17675781 -0.0612793 C9.97951393 -0.06535482 10.78227005 -0.06943035 11.60935211 -0.07362938 C15.85903157 -0.09446397 20.10867901 -0.10877652 24.35839844 -0.11816406 C28.73412049 -0.12921848 33.10933265 -0.16361435 37.48487473 -0.20333576 C40.86164252 -0.22955602 44.23828982 -0.2378607 47.61515045 -0.24144554 C49.22740367 -0.24629814 50.83965199 -0.25787412 52.45180511 -0.27648354 C61.87754315 -0.37851798 69.22600258 -0.40722527 76.90332031 5.81762695 C77.34933594 6.3487207 77.79535156 6.87981445 78.25488281 7.42700195 C78.94710937 8.20817383 78.94710937 8.20817383 79.65332031 9.00512695 C84.02596265 16.74776753 83.1900497 25.91727112 83.18066406 34.5168457 C83.18455855 36.00842913 83.18889475 37.50001147 83.19364929 38.99159241 C83.20108066 42.10738735 83.20084254 45.22306892 83.19555664 48.33886719 C83.189763 52.31076588 83.20670518 56.28219809 83.22990131 60.25401974 C83.24470727 63.33145309 83.24550113 66.40877581 83.24239159 69.48623848 C83.24290125 70.94971198 83.24807164 72.41319226 83.25820351 73.87663078 C83.37438765 93.0006229 83.37438765 93.0006229 77.12988281 100.05200195 C76.68128906 100.58567383 76.23269531 101.1193457 75.77050781 101.66918945 C70.71771348 105.69889733 65.71373184 106.5516213 59.38745117 106.56176758 C58.67430252 106.56714035 57.96115387 106.57251312 57.22639465 106.57804871 C55.69051241 106.58777157 54.15457559 106.5907876 52.6186657 106.58769226 C50.18403577 106.58318589 47.75012185 106.59729184 45.31556702 106.61608887 C39.27289347 106.65895188 33.23023785 106.67011114 27.18743896 106.68231201 C22.07081894 106.69385979 16.95452773 106.71746947 11.83804512 106.75700378 C9.4460817 106.7705322 7.05456878 106.76641182 4.6625824 106.76159668 C3.1893558 106.77094038 1.71613413 106.78110998 0.24291992 106.79223633 C-1.03724503 106.79429077 -2.31740997 106.79634521 -3.6363678 106.79846191 C-7.41637293 107.20919275 -9.82064532 108.34953123 -13.12011719 110.17700195 C-13.78011719 110.17700195 -14.44011719 110.17700195 -15.12011719 110.17700195 C-17.52280099 115.83889015 -17.41598579 121.16057712 -17.42871094 127.20043945 C-17.45386958 129.37752548 -17.47926763 131.55460875 -17.50488281 133.73168945 C-17.53360338 137.14379163 -17.55763834 140.55584604 -17.57641602 143.96801758 C-17.59814672 147.27490607 -17.63758849 150.58124339 -17.67871094 153.88793945 C-17.67882675 154.89964203 -17.67894257 155.9113446 -17.67906189 156.95370483 C-17.7841159 164.52274898 -19.03497091 169.98795471 -23.24511719 176.42700195 C-29.45623238 182.36806866 -36.31490332 183.78705333 -44.68652344 183.6730957 C-46.00401833 183.67527855 -46.00401833 183.67527855 -47.34812927 183.67750549 C-49.19102319 183.67585714 -51.03393241 183.66441631 -52.87670898 183.64355469 C-55.67914918 183.61453786 -58.47969965 183.62298099 -61.28222656 183.63598633 C-63.08366794 183.62974909 -64.88510341 183.62135826 -66.68652344 183.6105957 C-67.51382462 183.61353134 -68.34112579 183.61646698 -69.1934967 183.61949158 C-75.59165864 183.51691869 -81.40132888 182.53204156 -86.39746094 178.2043457 C-86.9453125 177.51469727 -87.49316406 176.82504883 -88.05761719 176.11450195 C-88.62351562 175.42227539 -89.18941406 174.73004883 -89.77246094 174.0168457 C-91.95579877 171.03611492 -92.25725067 169.22772898 -92.31298828 165.57885742 C-92.32905121 164.62381317 -92.34511414 163.66876892 -92.36166382 162.68478394 C-92.40618833 158.30003565 -92.44720831 153.91543939 -92.47021484 149.53051758 C-92.48674024 147.22214655 -92.51398466 144.91382596 -92.55224609 142.60571289 C-92.60721123 139.27243575 -92.62892302 135.94035974 -92.64355469 132.60668945 C-92.66622406 131.58243866 -92.68889343 130.55818787 -92.71224976 129.50289917 C-92.69275809 122.84191599 -91.55490715 118.27254494 -87.12011719 113.17700195 C-82.85713484 109.85187572 -79.42315905 108.06794719 -74.01928711 108.01928711 C-73.19800827 108.00902496 -72.37672943 107.99876282 -71.53056335 107.9881897 C-70.64617081 107.98088837 -69.76177826 107.97358704 -68.85058594 107.96606445 C-66.97362414 107.93799282 -65.09667113 107.90932834 -63.21972656 107.88012695 C-60.26391881 107.83890024 -57.30827464 107.80200782 -54.35229492 107.77563477 C-51.49721474 107.74795955 -48.64287792 107.70208605 -45.78808594 107.65356445 C-44.47060616 107.64868515 -44.47060616 107.64868515 -43.12651062 107.64370728 C-38.07403193 107.54295109 -34.47561603 107.02250373 -30.12011719 104.17700195 C-28.38692337 101.61731491 -28.38692337 101.61731491 -27.30761719 98.67700195 C-26.90929687 97.71793945 -26.51097656 96.75887695 -26.10058594 95.77075195 C-24.41267145 91.30551203 -23.99587525 87.9866657 -23.99414062 83.20214844 C-23.99227249 82.49600906 -23.99040436 81.78986969 -23.98847961 81.06233215 C-23.9844771 79.52854718 -23.98240091 77.99475626 -23.98201752 76.46096611 C-23.97859338 73.18930997 -23.95721325 69.91785101 -23.93678665 66.64626408 C-23.89884548 60.55842138 -23.86749302 54.47078699 -23.86962891 48.3828125 C-23.87042015 44.14504806 -23.84687404 39.90800348 -23.80774689 35.67042732 C-23.79734392 34.06268623 -23.79572049 32.45486145 -23.80339813 30.84710503 C-23.84202858 21.8556044 -23.77030332 13.69524181 -18.12011719 6.17700195 C-12.50415323 0.77468343 -7.52615394 0.05781024 0 0 Z",fill:Sc[t],transform:"translate(92.1201171875,53.822998046875)"},{d:"M0 0 C0.66 0.33 1.32 0.66 2 1 C0.90033225 2.29549899 -0.20491801 3.58626071 -1.3125 4.875 C-1.92738281 5.59429687 -2.54226563 6.31359375 -3.17578125 7.0546875 C-5 9 -5 9 -8 11 C-6.60366572 6.55711819 -4.39598172 4.13475236 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z",fill:"currentColor",transform:"translate(264,95)"},{d:"M0 0 C0.66 0.33 1.32 0.66 2 1 C-0.64 3.64 -3.28 6.28 -6 9 C-6 6 -6 6 -3.5625 3.375 C-2.716875 2.59125 -1.87125 1.8075 -1 1 C-0.67 0.67 -0.34 0.34 0 0 Z",fill:"currentColor",transform:"translate(79,56)"}],n),_c=(e="md",t)=>wc(e,"0 0 24 24",["M6 9l6 6 6-6"],t),Pc=(e="md",t)=>wc(e,"0 0 24 24",["M18 6L6 18M6 6l12 12"],t),Ic=(e="md",t)=>wc(e,"0 0 24 24",["M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"],t),xc=(e="md",t)=>wc(e,"0 0 24 24",["M2 12h2M6 8v8M10 4v16M14 8v8M18 6v12M22 12h-2"],t),Mc=(e="md",t)=>wc(e,"0 0 24 24",["M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91","M23 1L1 23"],t),Oc=(e="md",t)=>wc(e,"0 0 24 24",["M23 7l-7 5 7 5V7zM16 5H2C.9 5 0 5.9 0 7v10c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2z"],t),Lc=(e="md",t)=>wc(e,"0 0 24 24",["M1 1l22 22M16 16v1a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2h2m5.66 0H14a2 2 0 012 2v3.34l1 1L23 7v10"],t),Dc=(e="md",t)=>wc(e,"0 0 24 24",["M11 5L6 9H2v6h4l5 4V5zM23 9l-6 6M17 9l6 6"],t),Ac=(e="md",t)=>wc(e,"0 0 24 24",["M11 5L6 9H2v6h4l5 4V5z","M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07"],t),Nc=(e="md",t)=>{const n=wc(e,"0 0 24 24",[],t);for(let e of[12,5,19]){const t=document.createElementNS("http://www.w3.org/2000/svg","circle");t.setAttribute("cx","12"),t.setAttribute("cy",""+e),t.setAttribute("r","1"),t.setAttribute("fill","currentColor"),n.appendChild(t)}return n},Uc=(e="md",t)=>wc(e,"0 0 24 24",["M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.11-.9-2-2-2H4c-1.11 0-2 .89-2 2v10c0 1.1.89 2 2 2H0v2h24v-2h-4zM13 14.47v-2.19c-2.78 0-4.61.85-6 2.72.56-2.67 2.11-5.33 6-5.87V7l4 3.73-4 3.74z"],t),jc=(e="md",t)=>wc(e,"0 0 24 24",["M21.22 18.02l2 2H24v-2h-2.78zm-1.13-1.13l1.54 1.54c.15-.34.24-.72.24-1.12L21.88 7c0-1.11-.9-2-2-2H7.8l5.88 5.88L13 12 6.97 6.97 2.39 2.39 1.11 3.67l.8.8c-.01.01-.01.02-.01.02L2 17.33c0 1.11.89 2 1.99 2H0v2h18.13l2.71 2.71 1.27-1.27L2.39 2.39zM7 15.13c.96-1.29 2.13-2.08 3.67-2.46l3.46 3.46H7v-1z"],t),Fc=(e="md",t)=>wc(e,"0 0 24 24",["M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0118.8-4.3M22 12.5a10 10 0 01-18.8 4.2"],t),Bc=(e="md",t)=>{const n=Ec(e,"0 0 24 24",[{d:"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}],t);return n.removeAttribute("stroke"),n.removeAttribute("stroke-width"),n},Vc=(e="md",t)=>wc(e,"0 0 24 24",["M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2","M12 11a4 4 0 100-8 4 4 0 000 8z"],t);const qc=["EyeBlinkLeft","EyeLookDownLeft","EyeLookInLeft","EyeLookOutLeft","EyeLookUpLeft","EyeSquintLeft","EyeWideLeft","EyeBlinkRight","EyeLookDownRight","EyeLookInRight","EyeLookOutRight","EyeLookUpRight","EyeSquintRight","EyeWideRight","JawForward","JawRight","JawLeft","JawOpen","MouthClose","MouthFunnel","MouthPucker","MouthRight","MouthLeft","MouthSmileLeft","MouthSmileRight","MouthFrownLeft","MouthFrownRight","MouthDimpleLeft","MouthDimpleRight","MouthStretchLeft","MouthStretchRight","MouthRollLower","MouthRollUpper","MouthShrugLower","MouthShrugUpper","MouthPressLeft","MouthPressRight","MouthLowerDownLeft","MouthLowerDownRight","MouthUpperUpLeft","MouthUpperUpRight","BrowDownLeft","BrowDownRight","BrowInnerUp","BrowOuterUpLeft","BrowOuterUpRight","CheekPuff","CheekSquintLeft","CheekSquintRight","NoseSneerLeft","NoseSneerRight","TongueOut","HeadYaw","HeadPitch","HeadRoll","LeftEyeYaw","LeftEyePitch","LeftEyeRoll","RightEyeYaw","RightEyePitch","RightEyeRoll"],Hc=["BrowDownLeft","BrowDownRight","BrowInnerUp","BrowOuterUpLeft","BrowOuterUpRight","CheekPuff","CheekSquintLeft","CheekSquintRight","EyeBlinkLeft","EyeBlinkRight","EyeLookDownLeft","EyeLookDownRight","EyeLookInLeft","EyeLookInRight","EyeLookOutLeft","EyeLookOutRight","EyeLookUpLeft","EyeLookUpRight","EyeSquintLeft","EyeSquintRight","EyeWideLeft","EyeWideRight","JawForward","JawLeft","JawOpen","JawRight","MouthClose","MouthDimpleLeft","MouthDimpleRight","MouthFrownLeft","MouthFrownRight","MouthFunnel","MouthLeft","MouthLowerDownLeft","MouthLowerDownRight","MouthPressLeft","MouthPressRight","MouthPucker","MouthRight","MouthRollLower","MouthRollUpper","MouthShrugLower","MouthShrugUpper","MouthSmileLeft","MouthSmileRight","MouthStretchLeft","MouthStretchRight","MouthUpperUpLeft","MouthUpperUpRight","NoseSneerLeft","NoseSneerRight","TongueOut"],Wc=new Map;for(let e=0;qc.length>e;e++){if(52>e){const t=Hc.indexOf(qc[e]);-1!==t&&Wc.set(e,t)}}function zc(e){return{yaw:e[52]||0,pitch:e[53]||0,roll:e[54]||0}}function Kc(e){return{left:{yaw:e[55]||0,pitch:e[56]||0,roll:e[57]||0},right:{yaw:e[58]||0,pitch:e[59]||0,roll:e[60]||0}}}function Gc(e,t=.01){const n=[];for(let i=0;Math.min(e.length,qc.length)>i;i++)if(Math.abs(e[i])>t){const t=qc[i],s=t.charAt(0).toLowerCase()+t.slice(1);n.push({name:s,value:e[i],index:i})}return n.sort((e,t)=>Math.abs(t.value)-Math.abs(e.value))}const Jc=["browDownLeft","browDownRight","browInnerUp","browOuterUpLeft","browOuterUpRight","cheekPuff","cheekSquintLeft","cheekSquintRight","eyeBlinkLeft","eyeBlinkRight","eyeLookDownLeft","eyeLookDownRight","eyeLookInLeft","eyeLookInRight","eyeLookOutLeft","eyeLookOutRight","eyeLookUpLeft","eyeLookUpRight","eyeSquintLeft","eyeSquintRight","eyeWideLeft","eyeWideRight","jawForward","jawLeft","jawOpen","jawRight","mouthClose","mouthDimpleLeft","mouthDimpleRight","mouthFrownLeft","mouthFrownRight","mouthFunnel","mouthLeft","mouthLowerDownLeft","mouthLowerDownRight","mouthPressLeft","mouthPressRight","mouthPucker","mouthRight","mouthRollLower","mouthRollUpper","mouthShrugLower","mouthShrugUpper","mouthSmileLeft","mouthSmileRight","mouthStretchLeft","mouthStretchRight","mouthUpperUpLeft","mouthUpperUpRight","noseSneerLeft","noseSneerRight","tongueOut"],$c=["eyeDilation","eyeConstriction","mouthShrug","lipSuckUpper","lipSuckLower","lipFunnel","lipPress","reserved"];function Yc(e,t=.01){const n=[];for(let i=0;Math.min(e.length,Jc.length)>i;i++)Math.abs(e[i])>t&&n.push({name:Jc[i],value:e[i],index:i});if(e.length>52)for(let i=52;Math.min(e.length,52+$c.length)>i;i++)Math.abs(e[i])>t&&n.push({name:$c[i-52],value:e[i],index:i});return n.sort((e,t)=>Math.abs(t.value)-Math.abs(e.value))}const Qc={sil:{jawOpen:0,mouthClose:1,description:"Silence - mouth closed, neutral expression"},aa:{jawOpen:.7,mouthFunnel:0,mouthPucker:0,tongueOut:.1,description:"Open back vowel - 'ah' (father, hot)"},ae:{jawOpen:.5,mouthStretchLeft:.4,mouthStretchRight:.4,description:"Near-open front vowel - 'a' (cat, bat)"},E:{jawOpen:.4,mouthStretchLeft:.3,mouthStretchRight:.3,mouthSmileLeft:.2,mouthSmileRight:.2,description:"Open-mid front vowel - 'eh' (bed, get)"},I:{jawOpen:.1,mouthStretchLeft:.6,mouthStretchRight:.6,mouthSmileLeft:.5,mouthSmileRight:.5,mouthClose:.3,description:"Close front vowel - 'ee' (see, feet)"},ih:{jawOpen:.2,mouthStretchLeft:.4,mouthStretchRight:.4,mouthSmileLeft:.3,mouthSmileRight:.3,description:"Near-close front vowel - 'i' (sit, bit)"},O:{jawOpen:.5,mouthFunnel:.6,mouthPucker:.3,description:"Close-mid back rounded vowel - 'oh' (go, boat)"},aw:{jawOpen:.6,mouthFunnel:.4,mouthPucker:.2,description:"Open-mid back rounded vowel - 'aw' (thought, caught)"},U:{jawOpen:.2,mouthFunnel:.8,mouthPucker:.9,description:"Close back rounded vowel - 'oo' (food, boot)"},uh:{jawOpen:.25,mouthFunnel:.5,mouthPucker:.6,description:"Near-close back rounded vowel - 'u' (book, foot)"},er:{jawOpen:.35,mouthFunnel:.3,mouthPucker:.1,description:"R-colored mid-central vowel - 'er' (her, bird)"},ah:{jawOpen:.4,mouthFunnel:.1,description:"Open-mid back vowel - 'uh' (but, cup)"},ow:{jawOpen:.6,mouthFunnel:.3,mouthPucker:.2,description:"Diphthong - 'ow' (cow, house)"},ay:{jawOpen:.5,mouthStretchLeft:.3,mouthStretchRight:.3,description:"Diphthong - 'ai' (eye, my)"},oy:{jawOpen:.5,mouthFunnel:.4,mouthPucker:.3,description:"Diphthong - 'oy' (boy, coin)"},PP:{jawOpen:0,mouthClose:1,mouthPressLeft:.5,mouthPressRight:.5,description:"Bilabial stops/nasal - 'p', 'b', 'm' (pat, bat, mat)"},FF:{jawOpen:.15,mouthRollLower:.6,mouthUpperUpLeft:.3,mouthUpperUpRight:.3,description:"Labiodental fricatives - 'f', 'v' (fat, vat)"},TH:{jawOpen:.2,tongueOut:.4,mouthUpperUpLeft:.2,mouthUpperUpRight:.2,mouthRollLower:.2,description:"Dental fricatives - 'th' (think, this)"},DD:{jawOpen:.3,mouthClose:.2,description:"Alveolar stops - 't', 'd' (tap, dap)"},SS:{jawOpen:.15,mouthStretchLeft:.4,mouthStretchRight:.4,mouthClose:.4,description:"Alveolar sibilants - 's', 'z' (sap, zap)"},nn:{jawOpen:.2,mouthClose:.3,description:"Alveolar nasal - 'n' (nap)"},l:{jawOpen:.25,tongueOut:.2,description:"Alveolar lateral approximant - 'l' (lap)"},CH:{jawOpen:.2,mouthFunnel:.3,mouthPucker:.2,description:"Postalveolar affricates - 'ch', 'j' (church, judge)"},sh:{jawOpen:.2,mouthFunnel:.4,mouthPucker:.3,description:"Postalveolar fricatives - 'sh', 'zh' (shoe, measure)"},RR:{jawOpen:.3,mouthFunnel:.2,mouthPucker:.15,tongueOut:.1,description:"Alveolar approximant - 'r' (red)"},y:{jawOpen:.2,mouthStretchLeft:.35,mouthStretchRight:.35,mouthSmileLeft:.2,mouthSmileRight:.2,description:"Palatal approximant - 'y' (yes)"},kk:{jawOpen:.35,description:"Velar stops/nasal - 'k', 'g', 'ng' (kite, go, sing)"},hh:{jawOpen:.3,description:"Glottal fricative - 'h' (hat)"},w:{jawOpen:.15,mouthPucker:.8,mouthFunnel:.6,description:"Labio-velar approximant - 'w' (wet)"}},Xc={browDownLeft:0,browDownRight:1,browInnerUp:2,browOuterUpLeft:3,browOuterUpRight:4,cheekPuff:5,cheekSquintLeft:6,cheekSquintRight:7,eyeBlinkLeft:8,eyeBlinkRight:9,eyeLookDownLeft:10,eyeLookDownRight:11,eyeLookInLeft:12,eyeLookInRight:13,eyeLookOutLeft:14,eyeLookOutRight:15,eyeLookUpLeft:16,eyeLookUpRight:17,eyeSquintLeft:18,eyeSquintRight:19,eyeWideLeft:20,eyeWideRight:21,jawForward:22,jawLeft:23,jawOpen:24,jawRight:25,mouthClose:26,mouthDimpleLeft:27,mouthDimpleRight:28,mouthFrownLeft:29,mouthFrownRight:30,mouthFunnel:31,mouthLeft:32,mouthLowerDownLeft:33,mouthLowerDownRight:34,mouthPressLeft:35,mouthPressRight:36,mouthPucker:37,mouthRight:38,mouthRollLower:39,mouthRollUpper:40,mouthShrugLower:41,mouthShrugUpper:42,mouthSmileLeft:43,mouthSmileRight:44,mouthStretchLeft:45,mouthStretchRight:46,mouthUpperUpLeft:47,mouthUpperUpRight:48,noseSneerLeft:49,noseSneerRight:50,tongueOut:51};function Zc(e){const t=Array(251).fill(0),n=Qc[e];for(const[e,i]of Object.entries(n))if("description"!==e&&e in Xc){t[Xc[e]]=i}return t}const ed={Silence:Zc("sil"),"A (ah - father)":Zc("aa"),"E (eh - bed)":Zc("E"),"I (ee - see)":Zc("I"),"O (oh - go)":Zc("O"),"U (oo - food)":Zc("U"),"P/B/M":Zc("PP"),"F/V":Zc("FF"),"TH (think)":Zc("TH"),"S/Z":Zc("SS"),"SH (shoe)":Zc("sh"),"CH (church)":Zc("CH"),"W (wet)":Zc("w"),"R (red)":Zc("RR"),"L (lap)":Zc("l"),"K/G":Zc("kk")};const td=["browDownLeft","browDownRight","browInnerUp","browOuterUpLeft","browOuterUpRight","cheekPuff","cheekSquintLeft","cheekSquintRight","eyeBlinkLeft","eyeBlinkRight","eyeLookDownLeft","eyeLookDownRight","eyeLookInLeft","eyeLookInRight","eyeLookOutLeft","eyeLookOutRight","eyeLookUpLeft","eyeLookUpRight","eyeSquintLeft","eyeSquintRight","eyeWideLeft","eyeWideRight","jawForward","jawLeft","jawOpen","jawRight","mouthClose","mouthDimpleLeft","mouthDimpleRight","mouthFrownLeft","mouthFrownRight","mouthFunnel","mouthLeft","mouthLowerDownLeft","mouthLowerDownRight","mouthPressLeft","mouthPressRight","mouthPucker","mouthRight","mouthRollLower","mouthRollUpper","mouthShrugLower","mouthShrugUpper","mouthSmileLeft","mouthSmileRight","mouthStretchLeft","mouthStretchRight","mouthUpperUpLeft","mouthUpperUpRight","noseSneerLeft","noseSneerRight","tongueOut","head_forward","head_upDown","head_tilt","head_turn","neck_stretch","neck_tilt","eyebrow_raiseInner_L","eyebrow_raiseInner_R","eyebrow_raiseOuter_L","eyebrow_raiseOuter_R","eyebrow_down_L","eyebrow_down_R","eye_blink_L","eye_blink_R","eye_wide_L","eye_wide_R","eye_squint_L","eye_squint_R","eye_look_up_L","eye_look_up_R","eye_look_down_L","eye_look_down_R","eye_look_in_L","eye_look_in_R","eye_look_out_L","eye_look_out_R","pupil_dilate_L","pupil_dilate_R","cheek_puff_L","cheek_puff_R","cheek_squint_L","cheek_squint_R","cheek_raiser_L","cheek_raiser_R","nose_wrinkle_L","nose_wrinkle_R","nose_nostril_raise_L","nose_nostril_raise_R","nose_nostril_compress_L","nose_nostril_compress_R","nose_nostril_dilate_L","nose_nostril_dilate_R","lip_upper_raise_L","lip_upper_raise_R","lip_upper_raiseInner_L","lip_upper_raiseInner_R","lip_upper_close","lip_lower_close","lip_lower_down_L","lip_lower_down_R","lip_lower_downInner_L","lip_lower_downInner_R","lip_corner_puller_L","lip_corner_puller_R","lip_corner_depressor_L","lip_corner_depressor_R","lip_stretcher_L","lip_stretcher_R","lip_funneler_LT","lip_funneler_RT","lip_funneler_LB","lip_funneler_RB","lip_pucker_L","lip_pucker_R","lip_press_L","lip_press_R","lip_tightener_L","lip_tightener_R","lip_suck_LT","lip_suck_RT","lip_suck_LB","lip_suck_RB","mouth_left","mouth_right","mouth_smile_L","mouth_smile_R","mouth_frown_L","mouth_frown_R","mouth_dimpler_L","mouth_dimpler_R","mouth_stretch_L","mouth_stretch_R","mouth_shrug_upper","mouth_shrug_lower","mouth_roll_upper_L","mouth_roll_upper_R","mouth_roll_lower_L","mouth_roll_lower_R","jaw_open","jaw_forward","jaw_left","jaw_right","jaw_clench","jaw_thrust","tongue_out","tongue_up","tongue_down","tongue_wide","tongue_narrow","tongue_curl_up","tongue_roll","tongue_bulge_L","tongue_bulge_R","tongue_press","midLipLowerDown_L","midLipLowerDown_R","midLipUpperUp_L","midLipUpperUp_R","midNostrilSharpener_L","midNostrilSharpener_R","viseme_sil","viseme_PP","viseme_FF","viseme_TH","viseme_DD","viseme_kk","viseme_CH","viseme_SS","viseme_nn","viseme_RR","viseme_aa","viseme_E","viseme_I","viseme_O","viseme_U","lid_tightener_L","lid_tightener_R","eyelid_upper_raise_L","eyelid_upper_raise_R","eyelid_lower_down_L","eyelid_lower_down_R","eye_parallel_look_down","eye_parallel_look_up","innerBrow_raiser_L","innerBrow_raiser_R","outerBrow_raiser_L","outerBrow_raiser_R","lipCorner_down_L","lipCorner_down_R","lipCorner_wide_L","lipCorner_wide_R","lipLower_down_L","lipLower_down_R","lipUpper_up_L","lipUpper_up_R","wrinkler","chin_raiser","chin_raiser_T","chin_raiser_B","lips_toward","lips_blow","puff_suck_lower","puff_suck_upper","puff_suck_upper_L","puff_suck_upper_R","puff_suck_lower_L","puff_suck_lower_R","phone_aa","phone_ow","phone_ee","phone_er","phone_uw","phone_l","phone_w","phone_m","phone_f","phone_th","phone_s","phone_sh","phone_t","phone_k","phone_b","phone_d","phone_g","phone_n","phone_r","phone_y","expression_neutral","expression_happy","expression_sad","expression_angry","expression_surprised","expression_disgusted","expression_afraid","expression_contempt","occlusion_upper","occlusion_lower","teeth_upper","teeth_lower","teeth_fwdBack_upper","teeth_fwdBack_lower","teeth_width_upper","teeth_width_lower","gums_upper","gums_lower","tongue_tip","tongue_thickness","soft_palate","emotion_intensity"];function nd(e){const t={};return e.forEach((e,n)=>{if(td.length>n){t[td[n]]=e}else t["unknown_"+n]=e}),t}e.ARKIT_BLENDSHAPE_INDICES=Xc,e.ARKIT_BLENDSHAPE_NAMES=Jc,e.ARKIT_EXTENDED_NAMES=$c,e.ARKIT_ORDER_61=qc,e.ARKIT_PHONEME_REFERENCE_VALUES=Qc,e.AudioRenderer=uc,e.BLENDSHAPE_QUICK_GUIDE={"Open mouth":["jawOpen"],"Close mouth":["mouthClose"],"Round lips (O, oo)":["mouthFunnel","mouthPucker"],"Smile (ee)":["mouthSmileLeft","mouthSmileRight","mouthStretchLeft","mouthStretchRight"],"Lips pressed (p, b, m)":["mouthPressLeft","mouthPressRight","mouthClose"],"Teeth on lip (f, v)":["mouthRollLower","mouthUpperUpLeft","mouthUpperUpRight"],"Tongue visible (th, l)":["tongueOut"]},e.ConvaiClient=class extends sc{constructor(e){super(),this._connectionType=null,this._apiKey=null,this._characterId=null,this._speakerId=null,this._characterSessionId="-1",this._isBotReady=!1,this._participantSid="",this._storedConfig=null,e&&(this._storedConfig=e),this._room=new Qa,this._state={isConnected:!1,isConnecting:!1,isListening:!1,isThinking:!1,isSpeaking:!1,agentState:"disconnected"},this._audioSettings={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,sampleRate:48e3,channelCount:1},this._audioManager=new oc(this._room),this._videoManager=new rc(this._room),this._screenShareManager=new ac(this._room),this._latencyMonitor=new lc(!1),this._messageHandler=new cc(this._room,this._latencyMonitor),this.setupEventListeners()}get state(){return{...this._state}}get connectionType(){return this._connectionType}get apiKey(){return this._apiKey}get characterId(){return this._characterId}get speakerId(){return this._speakerId}get room(){return this._room}get chatMessages(){return this._messageHandler.getChatMessages()}get userTranscription(){return this._messageHandler.getUserTranscription()}get characterSessionId(){return this._characterSessionId}get isBotReady(){return this._isBotReady}get audioControls(){return this._audioManager}get videoControls(){return this._videoManager}get screenShareControls(){return this._screenShareManager}get latencyMonitor(){return this._latencyMonitor}get isAudioMuted(){return this._audioManager.isAudioMuted}get isVideoEnabled(){return this._videoManager.isVideoEnabled}get isScreenShareActive(){return this._screenShareManager.isScreenShareActive}setupEventListeners(){this._room.on(Cs.Disconnected,this.handleDisconnected.bind(this)),this._room.on(Cs.ConnectionStateChanged,this.handleConnectionStateChanged.bind(this)),this._messageHandler.on("botReady",()=>{this._isBotReady=!0,this.updateState({isConnected:!0}),this.emit("botReady")}),this._messageHandler.on("messagesChange",e=>{this.emit("message",e[e.length-1]),this.emit("messagesChange",e)}),this._messageHandler.on("userTranscriptionChange",e=>{this.emit("userTranscriptionChange",e)}),this._messageHandler.on("speakingChange",e=>{this.updateState({isSpeaking:e}),this.emit("speakingChange",e),e&&this._latencyMonitor.endMeasurement()}),this._messageHandler.on("blendshapes",e=>{this.emit("blendshapes",e)}),this._messageHandler.on("botRespondingChange",e=>{this.updateState({isThinking:e})}),this._latencyMonitor.on("measurement",e=>{this.emit("latencyMeasurement",e)})}handleDisconnected(){this.updateState({isConnected:!1,isConnecting:!1,isSpeaking:!1,isThinking:!1,isListening:!1}),this._isBotReady=!1,this._messageHandler.reset(),this.emit("disconnect")}handleConnectionStateChanged(e){"disconnected"===e?(this.updateState({isConnected:!1,isConnecting:!1}),this._isBotReady=!1,this._messageHandler.reset()):"connected"===e?(this.updateState({isConnected:!0,isConnecting:!1}),this._isBotReady=!1):"connecting"===e&&(this.updateState({isConnecting:!0,isConnected:!1}),this._isBotReady=!1)}updateState(e){const t={...this._state};this._state={...this._state,...e},this._state.agentState=this._state.isConnected?this._state.isSpeaking?"speaking":this._state.isThinking?"thinking":this._state.isListening?"listening":"connected":"disconnected",JSON.stringify(t)!==JSON.stringify(this._state)&&this.emit("stateChange",this._state)}async connect(e){const t=e||this._storedConfig;if(!t)throw Error("No configuration provided. Pass config to connect() or store it in the client");this._storedConfig=t;const n={url:"https://realtime-api-stg.convai.com",...t};if(!n.apiKey||!n.characterId)throw Error("apiKey and characterId are required");this.updateState({isConnecting:!0});try{this._apiKey=n.apiKey,this._characterId=n.characterId,ic.info(n.endUserId?"Resolving speaker ID for endUserId: "+n.endUserId:"Connecting in anonymous mode (no endUserId provided)");const e=await dc(n.endUserId,n.apiKey);this._speakerId=e,ic.info(e?`Speaker ID resolved: ${e.substring(0,8)}...`:"No speaker ID - connecting without persistent memory");const t=n.enableVideo?"video":"audio";this._connectionType=t;const i={character_id:n.characterId,...e&&{speaker_id:e},transport:"livekit",connection_type:t,use_dynamic_pipeline:!1,blendshape_provider:n.blendshapeProvider||"neurosync",blendshape_config:{enable_chunking:!0,format:n.blendshapeConfig?.format||"mha",output_fps:60},llm_provider:"dynamic",default_tts_enabled:void 0===n.ttsEnabled||n.ttsEnabled,...this._characterSessionId&&"-1"!==this._characterSessionId&&{character_session_id:this._characterSessionId},...n.actionConfig&&{action_config:n.actionConfig}},s=await fetch(n.url+"/connect",{method:"POST",headers:{"x-api-key":n.apiKey,"Content-Type":"application/json"},body:JSON.stringify(i)});if(!s.ok){const e=await s.text();ic.error("API Error Response:",{status:s.status,statusText:s.statusText,body:e});let t="HTTP error! status: "+s.status;try{const n=JSON.parse(e);n.message?t=n.message:n.error?t=n.error:n.detail&&(t=n.detail)}catch(n){e&&(t=`${t}: ${e}`)}throw Error(t)}const o=await s.json();o.character_session_id&&(this._characterSessionId=o.character_session_id),await this._room.connect(o.room_url,o.token,{rtcConfig:{iceTransportPolicy:"relay"}}),n.startWithAudioOn&&await this._room.localParticipant.setMicrophoneEnabled(!0,{echoCancellation:this._audioSettings.echoCancellation,noiseSuppression:this._audioSettings.noiseSuppression,autoGainControl:this._audioSettings.autoGainControl,sampleRate:this._audioSettings.sampleRate,channelCount:this._audioSettings.channelCount}),n.enableVideo&&n.startWithVideoOn&&await this._room.localParticipant.setCameraEnabled(!0),this._audioManager.syncStateFromRoom({emit:!0}),this._participantSid=this._room.localParticipant.sid,this.updateState({isConnected:!0,isConnecting:!1}),this.emit("connect")}catch(e){throw ic.error("Connection failed:",e),this.updateState({isConnected:!1,isConnecting:!1}),this.emit("error",e),e}}async disconnect(){if(this._room&&"disconnected"!==this._room.state)try{await this._room.disconnect(),this.resetConnectionState()}catch(e){e instanceof Error&&e.message.includes("disconnect")||ic.error("Disconnect error:",e),this.resetConnectionState()}}resetConnectionState(){this.updateState({isConnected:!1,isConnecting:!1,isSpeaking:!1,isThinking:!1,isListening:!1}),this._isBotReady=!1,this._connectionType=null,this._apiKey=null,this._characterId=null,this._speakerId=null,this._messageHandler.reset(),this._audioManager.reset(),this._videoManager.reset(),this._screenShareManager.reset()}async reconnect(){if(!this._storedConfig)throw Error("No stored config available for reconnection");await this.disconnect(),await this.connect(this._storedConfig)}resetSession(){this._characterSessionId="-1",this._messageHandler.reset()}sendUserTextMessage(e){if(this._room&&"disconnected"!==this._room.state&&this._room.localParticipant){if(e&&e.trim())try{this._latencyMonitor.startMeasurement("text",e.trim());const t={type:"user_text_message",data:{text:e.trim(),participant_sid:this._participantSid||this._room.localParticipant.sid}},n=(new TextEncoder).encode(JSON.stringify(t));this._room.localParticipant.publishData(n,{reliable:!0})}catch(e){throw ic.error("Failed to send user text message:",e),this._latencyMonitor.cancelMeasurement(),e}}else ic.warn("Cannot send message: not connected")}sendTriggerMessage(e,t){if(this._room&&this._room.localParticipant){const n={type:"trigger-message",data:{...e&&{trigger_name:e},...t&&{trigger_message:t},participant_sid:this._participantSid||this._room.localParticipant.sid}},i=(new TextEncoder).encode(JSON.stringify(n));this._room.localParticipant.publishData(i,{reliable:!0})}}sendInterruptMessage(){if(this._room&&"disconnected"!==this._room.state&&this._room.localParticipant)try{const e={type:"interrupt-bot",data:{participant_sid:this._participantSid||this._room.localParticipant.sid}},t=(new TextEncoder).encode(JSON.stringify(e));this._room.localParticipant.publishData(t,{reliable:!0}),ic.info("Interrupt message sent")}catch(e){throw ic.error("Failed to send interrupt message:",e),e}else ic.warn("Cannot send interrupt message: not connected")}updateTemplateKeys(e){if(this._room&&this._room.localParticipant&&Object.keys(e).length>0){const t={type:"update-template-keys",data:{template_keys:e,participant_sid:this._participantSid||this._room.localParticipant.sid}},n=(new TextEncoder).encode(JSON.stringify(t));this._room.localParticipant.publishData(n,{reliable:!0})}}updateDynamicInfo(e){if(this._room&&this._room.localParticipant&&e.text?.trim()){const t={type:"update-dynamic-info",data:{dynamic_info:{text:e.text.trim()},participant_sid:this._participantSid||this._room.localParticipant.sid}},n=(new TextEncoder).encode(JSON.stringify(t));this._room.localParticipant.publishData(n,{reliable:!0})}}toggleTts(e){if(this._room&&"disconnected"!==this._room.state&&this._room.localParticipant)try{const t={type:"tts-toggle",data:{enabled:e}},n=(new TextEncoder).encode(JSON.stringify(t));this._room.localParticipant.publishData(n,{reliable:!0})}catch(e){throw ic.error("Failed to toggle TTS:",e),e}}},e.KEY_LIPSYNC_BLENDSHAPES={jaw:[24],lips:[26,31,37,39,40],smile:[43,44,45,46],tongue:[51]},e.NEUROSYNC_BLENDSHAPE_NAMES=td,e.SAMPLE_PHONEME_TESTS=ed,e.STANDARD_ARKIT_ORDER=Hc,e.convertOrder61ToStandard=function(e){const t=Array(52).fill(0);for(let n=0;Math.min(52,e.length)>n;n++){const i=Wc.get(n);void 0!==i&&(t[i]=e[n])}return t},e.createConvaiWidget=function(e,t){const{convaiClient:n,showVideo:i=!0,showScreenShare:s=!0,defaultVoiceMode:o=!0}=t;Cc();let r,a,c,d,l,u,h,p,m,g,f,v,y,b=!1,k=!1,C=o,T=!1,S=!1,w="",E="Character",R="",_=null,P=!1,I=null,x=null,M=null,O=null,L=null;const D=async()=>{if(n.apiKey&&n.characterId)try{const e=await fetch("https://api-stg.convai.com/character/get",{method:"POST",headers:{"Content-Type":"application/json","CONVAI-API-KEY":n.apiKey},body:JSON.stringify({charID:n.characterId})});if(e.ok){const t=await e.json();E=t.character_name||"Convi",R=t.model_details?.METAHUMAN?.avatar_image_square||t.model_details?.METAHUMAN?.avatar_image||t.model_details?.modelPlaceholder||"",H()}}catch(e){console.error("Failed to fetch character info:",e)}},A=()=>{const e=document.createElement("div");e.style.cssText="\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n padding: 1rem;\n z-index: 10;\n pointer-events: auto;\n display: none;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n ";const t=document.createElement("div");t.id="voice-bars-container",t.style.cssText="\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 2px;\n height: 80px;\n max-width: 300px;\n ";for(let e=0;40>e;e++){const e=document.createElement("div");e.className="voice-bar",e.style.cssText=`\n width: 3px;\n height: 15px;\n background-color: ${hc.neutral[400]};\n border-radius: 1.5px;\n transition: height 0.08s ease-out, background-color 0.2s;\n transform-origin: center;\n `,t.appendChild(e)}e.appendChild(t);const n=document.createElement("div"),i=document.createElement("div");i.id="voice-mode-title",i.style.cssText=`\n font-size: 14px;\n font-weight: 500;\n color: ${hc.text.primary};\n margin-bottom: 0.5rem;\n `,i.textContent="Voice Only Mode";const s=document.createElement("div");return s.id="voice-mode-subtitle",s.style.cssText=`\n font-size: 12px;\n color: ${hc.text.secondary};\n `,s.textContent="Press and hold the microphone to talk",n.appendChild(i),n.appendChild(s),e.appendChild(n),e},N=()=>{const e=document.createElement("div");e.id="connecting-overlay",e.style.cssText="\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: none;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background-color: rgba(255, 255, 255, 0.95);\n z-index: 100;\n gap: 1rem;\n opacity: 0;\n transition: opacity 0.3s ease;\n ";const t=document.createElement("div");t.id="connecting-logo",t.style.cssText="\n animation: convai-spin 2s linear infinite;\n ";const n=Rc("xl","connecting");n.style.color=hc.convai.light,t.appendChild(n);const i=document.createElement("div");if(i.id="connecting-text",i.style.cssText=`\n font-size: 14px;\n font-weight: 500;\n color: ${hc.text.secondary};\n animation: convai-pulse-opacity 2s ease-in-out infinite;\n `,i.textContent="Connecting to Character...",e.appendChild(t),e.appendChild(i),!document.getElementById("convai-connecting-keyframes")){const e=document.createElement("style");e.id="convai-connecting-keyframes",e.textContent="\n @keyframes convai-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes convai-pulse-opacity {\n 0%, 100% { opacity: 0.5; }\n 50% { opacity: 1; }\n }\n ",document.head.appendChild(e)}return e},U=()=>{if(!y)return;if(n.state.isConnected&&!n.isBotReady){y.style.display="flex",y.style.opacity="1";const e=document.getElementById("connecting-text");e&&(e.textContent=`Connecting to ${E}...`)}else y.style.opacity="0",setTimeout(()=>{n.state.isConnected&&!n.isBotReady||(y.style.display="none")},300)};Array(40).fill(0);let j=Array(40).fill(.05),F=Array(40).fill(.05),B=0;const V=()=>{if(!v)return;const e=v.querySelectorAll(".voice-bar"),t=n.state.isSpeaking,i=!n.audioControls.isAudioMuted;e.forEach(e=>{e.style.backgroundColor=t?hc.convai.light:i?hc.text.primary:hc.neutral[400]});const s=document.getElementById("voice-mode-title"),o=document.getElementById("voice-mode-subtitle");if(s&&(s.textContent=t?"Character Speaking...":i?"Listening...":"Voice Only Mode"),o&&(o.textContent=i||t?"Audio active":"Press and hold the microphone to talk"),i&&x&&M){x.getByteTimeDomainData(M);let t=0;for(let e=0;M.length>e;e++){const n=(M[e]-128)/128;t+=n*n}const n=Math.min(1,3*Math.sqrt(t/M.length)),i=8,s=70;e.forEach((e,t)=>{const o=t/40,r=Date.now()/300+o*Math.PI*2;e.style.height=Math.max(i,i+n*(.15*Math.sin(r)+.85)*(s-i))+"px"})}else if(t){const t=(Date.now()-B)/1e3;.08>Math.random()&&(j=Array(40).fill(0).map((e,t)=>{const n=1-.5*Math.abs(t/40-.5),i=.2+.7*Math.random();return(.4*(j[t]||.3)+.6*i)*n})),F=F.map((e,t)=>e+.2*(j[t]-e));const n=Math.min(1,t/.3),i=8,s=70;e.forEach((e,t)=>{const o=.95+.1*Math.random();e.style.height=Math.max(i,i+Math.max(.05,Math.min(1,F[t]*n*o))*(s-i))+"px"})}else e.forEach(e=>{e.style.height="15px"});O=requestAnimationFrame(V)},q=()=>{const e=document.createElement("div");e.style.cssText=`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem;\n border-bottom: 1px solid ${hc.neutral[200]};\n background: white;\n position: relative;\n `;const t=document.createElement("button"),n=_c("md");t.appendChild(n),t.style.cssText=`\n font-size: 1.25rem;\n color: ${hc.text.secondary};\n cursor: pointer;\n padding: 0.25rem;\n transition: ${yc.fast};\n background: transparent;\n border: none;\n `,t.addEventListener("click",e=>{e.stopPropagation(),$()});const i=document.createElement("div");i.style.cssText=`\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: ${pc.fontSize.base};\n font-weight: ${pc.fontWeight.semibold};\n color: ${hc.text.primary};\n `,i.id="convai-widget-title";const s=document.createElement("button"),o=Nc("md");return s.appendChild(o),s.style.cssText=`\n font-size: 1.5rem;\n color: ${hc.text.secondary};\n cursor: pointer;\n padding: 0.25rem;\n transition: ${yc.fast};\n background: transparent;\n border: none;\n margin-left: auto;\n `,s.addEventListener("click",e=>{e.stopPropagation(),ne()}),e.appendChild(t),e.appendChild(i),e.appendChild(s),e},H=()=>{const e=document.getElementById("convai-widget-title");if(!e)return;if(e.innerHTML="",R){const t=document.createElement("img");t.src=R,t.alt=E,t.style.cssText=`\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 50%;\n object-fit: cover;\n border: 1.5px solid ${ce().color};\n box-shadow: 0 0 6px ${ce().color}40;\n transition: all 0.3s ease;\n `,e.appendChild(t)}const t=document.createElement("span");t.textContent=E,e.appendChild(t);const n=document.createElement("button");n.innerHTML="";const i=T?Dc("sm"):Ac("sm");if(i.style.color=T?"#919EABA6":"#0E7360",n.appendChild(i),n.style.cssText="\n cursor: pointer;\n background: transparent;\n border: none;\n box-shadow: none;\n width: auto;\n height: auto;\n padding: 0;\n display: inline-flex;\n align-items: center;\n margin-left: 0.5rem;\n outline: none;\n transition: transform 0.1s ease-out;\n ",n.addEventListener("click",e=>{e.stopPropagation(),Q()}),n.addEventListener("mouseenter",()=>{n.style.transform="scale(1.1)"}),n.addEventListener("mouseleave",()=>{n.style.transform="scale(1)"}),e.appendChild(n),C){const t=document.createElement("span");t.textContent="VOICE",t.style.cssText=`\n font-size: 10px;\n color: ${hc.convai.light};\n font-weight: 500;\n margin-left: 8px;\n padding: 2px 6px;\n border-radius: 4px;\n background-color: ${hc.convai.light}20;\n `,e.appendChild(t)}},W=()=>{const e=document.createElement("div");return e.id="convai-message-list",e.style.cssText="\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n min-height: 100%;\n ",e},z=()=>{const e=document.createElement("div");e.style.cssText=`\n padding: 1rem;\n border-top: 1px solid ${hc.neutral[200]};\n background: white;\n display: flex;\n gap: 0.5rem;\n align-items: center;\n position: relative;\n `;const t=document.createElement("button");t.id="convai-voice-exit-btn";const i=Mc("md");t.appendChild(i),t.style.cssText=`\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n background: ${hc.error[500]};\n color: white;\n display: none; /* Hidden by default */\n align-items: center;\n justify-content: center;\n cursor: pointer;\n margin: 0 auto;\n border: none;\n `,t.addEventListener("click",async()=>{n.sendInterruptMessage(),await n.audioControls.muteAudio(),C=!1,re()}),e.appendChild(t);const s=document.createElement("div");s.id="convai-footer-standard",s.style.cssText="\n display: flex;\n gap: 0.5rem;\n align-items: center;\n width: 100%;\n ";const o=document.createElement("div");o.style.cssText="\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n ",p=document.createElement("input"),p.type="text",p.placeholder="Conversation",p.style.cssText=`\n width: 100%;\n padding: 0.75rem 3rem 0.75rem 1rem;\n border-radius: ${gc.full};\n border: 1px solid ${hc.neutral[300]};\n background: ${hc.glass.medium};\n color: ${hc.text.primary};\n font-size: ${pc.fontSize.sm};\n transition: ${yc.fast};\n outline: none;\n `,p.addEventListener("input",e=>{w=e.target.value,oe()}),p.addEventListener("keypress",e=>{"Enter"===e.key&&Y()});const r=document.createElement("button");r.id="convai-send-button";const a=Ic("md");return r.appendChild(a),r.style.cssText=`\n position: absolute;\n right: 0.375rem;\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n background: transparent; /* Initial transparent for voice toggle */\n color: ${hc.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: ${yc.fast};\n border: none;\n `,r.addEventListener("click",async()=>{w.length>0?Y():(n.sendInterruptMessage(),await n.audioControls.unmuteAudio(),C=!0,re())}),o.appendChild(p),o.appendChild(r),s.appendChild(o),e.appendChild(s),e},K=()=>{const e=document.createElement("div");if(e.setAttribute("data-settings-tray","true"),e.style.cssText=`\n position: absolute;\n top: 60px;\n right: 16px;\n background: white;\n border-radius: ${gc.xl};\n box-shadow: ${fc.xl};\n padding: 0;\n display: none;\n flex-direction: row;\n align-items: center;\n gap: 0;\n z-index: 9999;\n min-width: auto;\n transform-origin: top right;\n animation: popIn 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n overflow: hidden;\n `,!document.getElementById("convai-widget-keyframes")){const e=document.createElement("style");e.id="convai-widget-keyframes",e.textContent="\n @keyframes popIn {\n from { opacity: 0; transform: scale(0.95) translateY(-10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n ",document.head.appendChild(e)}const t=document.createElement("div");t.style.cssText="\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 8px;\n gap: 4px;\n ";const o=(e,t,n,i=!1,s=!1)=>{const o=document.createElement("div");o.style.cssText=`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n cursor: pointer;\n border-radius: ${gc.md};\n background-color: ${i?"rgba(16, 185, 129, 0.15)":s?"rgba(239, 68, 68, 0.1)":"transparent"};\n color: ${i?"#10b981":s?"#ef4444":hc.text.primary};\n transition: ${yc.fast};\n min-width: 50px;\n `;const r=document.createElement("div");r.appendChild(e),o.appendChild(r);const a=document.createElement("span");return a.textContent=t,a.style.cssText="\n font-size: 10px;\n font-weight: 500;\n ",o.appendChild(a),o.addEventListener("click",e=>{e.stopPropagation(),n()}),o.addEventListener("mouseover",()=>{o.style.transform="scale(1.02)",i||s||(o.style.backgroundColor=hc.neutral[100])}),o.addEventListener("mouseout",()=>{o.style.transform="scale(1)",o.style.backgroundColor=i?"rgba(16, 185, 129, 0.15)":s?"rgba(239, 68, 68, 0.1)":"transparent"}),o},r=Fc("md");if(r.style.width="18px",r.style.height="18px",t.appendChild(o(r,"Reset",X)),"video"===n.connectionType&&i){const e=S?Oc("md"):Lc("md");e.style.width="18px",e.style.height="18px";const n=o(e,"Video",ee,S);n.id="convai-settings-video-btn",t.appendChild(n)}if("video"===n.connectionType&&s){const e=n.screenShareControls.isScreenShareActive,i=e?jc("md"):Uc("md");i.style.width="18px",i.style.height="18px";const s=o(i,"Screen",te,e);s.id="convai-settings-share-btn",t.appendChild(s)}const a=document.createElement("span");return a.innerHTML="⏻",a.style.fontSize="18px",t.appendChild(o(a,"Disconnect",Z,!1,!0)),e.appendChild(t),e},G=()=>{const e=document.createElement("div");e.id="floating-video-container",e.style.cssText=`\n position: fixed;\n left: 20px;\n top: 20px;\n z-index: 10000;\n width: 320px;\n border-radius: ${gc.lg};\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n cursor: grab;\n display: none;\n transition: opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1), transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `;const t=document.createElement("div");t.style.cssText=`\n background: rgba(15, 23, 42, 0.95);\n backdrop-filter: blur(20px);\n border: 1px solid ${hc.neutral[700]};\n border-radius: ${gc.lg};\n overflow: hidden;\n `;const i=document.createElement("div");i.style.cssText=`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.3);\n border-bottom: 1px solid ${hc.neutral[700]};\n `;const s=document.createElement("div");s.style.cssText=`\n display: flex;\n align-items: center;\n gap: 8px;\n color: ${hc.neutral[300]};\n font-size: 12px;\n font-weight: 500;\n `;const o=Bc("sm");o.style.width="16px",o.style.height="16px",s.appendChild(o);const r=document.createElement("span");r.textContent="Your Camera",s.appendChild(r);const a=document.createElement("button");a.innerHTML="";const c=Pc("md");c.style.width="20px",c.style.height="20px",a.appendChild(c),a.style.cssText=`\n background: transparent;\n border: none;\n color: ${hc.neutral[400]};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n transition: transform 0.1s ease-out;\n `,a.addEventListener("click",e=>{e.stopPropagation(),n.videoControls.disableVideo()}),a.addEventListener("mouseenter",()=>{a.style.transform="scale(1.1)"}),a.addEventListener("mouseleave",()=>{a.style.transform="scale(1)"}),i.appendChild(s),i.appendChild(a);const d=document.createElement("div");d.style.cssText="\n position: relative;\n width: 100%;\n padding-bottom: 75%;\n background: #000;\n ";const l=document.createElement("div");l.id="floating-video-wrapper",l.style.cssText="\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n ";const u=document.createElement("video");u.id="floating-video-element",u.autoplay=!0,u.playsInline=!0,u.muted=!0,u.style.cssText="\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n ";const h=document.createElement("div");h.id="camera-off-placeholder",h.style.cssText=`\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: ${hc.neutral[400]};\n gap: 12px;\n background: #000;\n `;const p=Lc("lg");p.style.width="48px",p.style.height="48px",h.appendChild(p);const m=document.createElement("span");m.textContent="Camera is off",m.style.cssText="\n font-size: 14px;\n text-align: center;\n ",h.appendChild(m),l.appendChild(u),l.appendChild(h),d.appendChild(l),t.appendChild(i),t.appendChild(d),e.appendChild(t);let g=!1,f=0,v=0,y=20,b=20;return e.addEventListener("mousedown",t=>{if(t.target.closest("button"))return;g=!0,f=t.clientX,v=t.clientY;const n=window.getComputedStyle(e);y=parseInt(n.left),b=parseInt(n.top),e.style.cursor="grabbing",t.preventDefault()}),document.addEventListener("mousemove",t=>{if(!g)return;const n=b+(t.clientY-v),i=window.innerWidth-320,s=window.innerHeight-240,o=Math.max(0,Math.min(y+(t.clientX-f),i)),r=Math.max(0,Math.min(n,s));e.style.left=o+"px",e.style.top=r+"px"}),document.addEventListener("mouseup",()=>{g&&(g=!1,e.style.cursor="grab")}),e},J=async()=>{if(!b)if(n.state.isConnected||n.state.isConnecting)ie(!b);else try{await n.connect(),ie(!0)}catch(e){console.error("Failed to connect:",e)}},$=()=>{ie(!1)},Y=()=>{w.trim()&&n.state.isConnected&&(n.sendUserTextMessage(w),w="",p.value="",oe())},Q=()=>{if(T=!T,n.room){Array.from(n.room.remoteParticipants.values()).forEach(e=>{e.audioTrackPublications.forEach(e=>{e.track&&e.track.setMuted(T)})})}H()},X=async()=>{se(!1);try{await n.disconnect(),n.resetSession(),T=!1,C=!1,P=!1,H(),re(),oe()}catch(e){console.error("Failed to reset:",e)}},Z=async()=>{se(!1),await n.disconnect(),T=!1,C=!1,P=!1,H(),re(),oe()},ee=async()=>{if("video"===n.connectionType)try{S?await n.videoControls.disableVideo():await n.videoControls.enableVideo()}catch(e){console.error("Failed to toggle video:",e)}},te=async()=>{try{await n.screenShareControls.toggleScreenShare()}catch(e){console.error("Failed to toggle screen share:",e)}},ne=()=>{k||(()=>{const e=g.querySelector("div");if(!e)return;e.innerHTML="";const t=(e,t,n,i=!1,s=!1)=>{const o=document.createElement("div");o.style.cssText=`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n cursor: pointer;\n border-radius: ${gc.md};\n background-color: ${i?"rgba(16, 185, 129, 0.15)":s?"rgba(239, 68, 68, 0.1)":"transparent"};\n color: ${i?"#10b981":s?"#ef4444":hc.text.primary};\n transition: ${yc.fast};\n min-width: 50px;\n `;const r=document.createElement("div");r.appendChild(e),o.appendChild(r);const a=document.createElement("span");return a.textContent=t,a.style.cssText="\n font-size: 10px;\n font-weight: 500;\n ",o.appendChild(a),o.addEventListener("click",e=>{e.stopPropagation(),n()}),o.addEventListener("mouseover",()=>{o.style.transform="scale(1.02)",i||s||(o.style.backgroundColor=hc.neutral[100])}),o.addEventListener("mouseout",()=>{o.style.transform="scale(1)",o.style.backgroundColor=i?"rgba(16, 185, 129, 0.15)":s?"rgba(239, 68, 68, 0.1)":"transparent"}),o},o=Fc("md");if(o.style.width="18px",o.style.height="18px",e.appendChild(t(o,"Reset",X)),"video"===n.connectionType&&i){const n=S?Oc("md"):Lc("md");n.style.width="18px",n.style.height="18px";const i=t(n,"Video",ee,S);i.id="convai-settings-video-btn",e.appendChild(i)}if("video"===n.connectionType&&s){const i=n.screenShareControls.isScreenShareActive,s=i?jc("md"):Uc("md");s.style.width="18px",s.style.height="18px";const o=t(s,"Screen",te,i);o.id="convai-settings-share-btn",e.appendChild(o)}const r=document.createElement("span");r.innerHTML="⏻",r.style.fontSize="18px",e.appendChild(t(r,"Disconnect",Z,!1,!0))})(),se(!k)},ie=async e=>{b=e,e?(a.style.width="400px",a.style.height="600px",a.style.borderRadius=gc.xl,a.style.cursor="default",c.style.opacity="0",c.style.transform="scale(0.8)",c.style.pointerEvents="none",d.style.opacity="1",d.style.transform="scale(1)",d.style.pointerEvents="auto",o&&!P&&n.state.isConnected&&setTimeout(async()=>{try{await n.audioControls.unmuteAudio(),C=!0,P=!0,re()}catch(e){console.error("Failed to enter voice mode on open:",e)}},100)):(a.style.width="4rem",a.style.height="4rem",a.style.borderRadius="50%",a.style.cursor="pointer",c.style.opacity="1",c.style.transform="scale(1)",c.style.pointerEvents="auto",d.style.opacity="0",d.style.transform="scale(0.8)",d.style.pointerEvents="none")},se=e=>{k=e,g.style.display=e?"flex":"none"},oe=()=>{const e=document.getElementById("convai-send-button");e&&(e.innerHTML="",w.length>0?(e.appendChild(Ic("md")),e.style.background=hc.text.primary,e.style.color="white",e.style.border="none",e.title="Send"):(e.appendChild(xc("md")),e.style.background="transparent",e.style.color=hc.text.primary,e.style.border="1px solid "+hc.neutral[300],e.title="Voice Mode"))},re=async()=>{const e=document.getElementById("convai-footer-standard"),t=document.getElementById("convai-voice-exit-btn");C?(v&&(v.style.display="flex"),m&&(m.style.display="none"),f&&(f.style.display="none"),e&&(e.style.display="none"),t&&(t.style.display="flex"),h&&(h.style.justifyContent="center"),H(),B=Date.now(),F=Array(40).fill(.05),j=Array(40).fill(.05),(async()=>{try{I||(I=new(window.AudioContext||window.webkitAudioContext)),"suspended"===I.state&&await I.resume();const e=await navigator.mediaDevices.getUserMedia({audio:!0});x=I.createAnalyser(),x.fftSize=256,x.smoothingTimeConstant=.7,L=I.createMediaStreamSource(e),L.connect(x),M=new Uint8Array(x.fftSize),V()}catch(e){console.error("Audio analysis setup failed:",e)}})()):(n.audioControls.isAudioMuted||await n.audioControls.muteAudio(),v&&(v.style.display="none"),S?(m&&(m.style.display="none"),f&&(f.style.display="block"),(()=>{if(!f||!n.room||!n.room.localParticipant)return;const e=f.querySelector("#floating-video-element"),t=f.querySelector("#camera-off-placeholder");if(e&&t)if(S&&!C){const i=Array.from(n.room.localParticipant.videoTrackPublications.values()).find(e=>"video"===e.kind);i&&i.track?(i.track.attach(e),e.style.display="block",t.style.display="none"):(e.style.display="none",t.style.display="flex")}else e.style.display="none",t.style.display="flex"})()):(m&&(m.style.display="flex"),f&&(f.style.display="none")),e&&(e.style.display="flex"),t&&(t.style.display="none"),h&&(h.style.justifyContent="flex-start"),H(),O&&cancelAnimationFrame(O),L&&(L.disconnect(),L.mediaStream.getTracks().forEach(e=>e.stop()),L=null))},ae=()=>{if(!m)return;const e=de();if(m.innerHTML="",0===e.length){const e=document.createElement("div");return e.style.cssText=`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${hc.text.secondary};\n text-align: center;\n padding: 2rem;\n `,e.innerHTML='\n <p style="font-weight: 500; margin-bottom: 8px;">Start a conversation</p>\n <p style="font-size: 12px;">Type a message below to begin chatting</p>\n ',void m.appendChild(e)}e.forEach(e=>{const t=document.createElement("div");t.style.cssText=`\n display: flex;\n flex-direction: column;\n max-width: 70%;\n margin-left: ${e.isUser?"auto":"0"};\n width: 100%;\n isolation: isolate;\n contain: layout style paint;\n `;const n=document.createElement("div");e.isUser&&n.setAttribute("data-message-type","user");const i="rgba(252, 252, 253, 0.95)";if(n.style.cssText=`\n padding: 12px;\n border-radius: ${e.isUser?"12px 12px 4px 12px":"12px 12px 12px 4px"};\n background: ${i};\n background-color: ${i};\n backdrop-filter: blur(20px) saturate(180%);\n border: 1px solid rgba(0, 0, 0, 0.06);\n box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.8) inset, 0 2px 8px rgba(0, 0, 0, 0.08);\n color: ${hc.text.primary};\n font-family: ${pc.fontFamily.body};\n font-size: 14px;\n line-height: 1.5;\n word-wrap: break-word;\n max-width: 100%;\n display: flex;\n flex-direction: column;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n isolation: isolate;\n contain: layout style paint;\n `,n.style.setProperty("background",i,"important"),n.style.setProperty("background-color",i,"important"),e.sender){const t=document.createElement("div");t.style.cssText=`\n display: flex;\n align-items: center;\n gap: ${mc.xs};\n margin-bottom: ${mc.xs};\n isolation: isolate;\n contain: layout style paint;\n `;const i=document.createElement("div");if(i.style.cssText="\n width: 1rem;\n height: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n isolation: isolate;\n contain: layout style paint;\n ",e.isUser){const e=Vc("sm");e.style.width="16px",e.style.height="16px",e.style.color=hc.convai.dark,i.appendChild(e)}else{const e=Rc("sm","connected");e.style.width="16px",e.style.height="16px",e.style.color="#10b981",i.appendChild(e)}const s=document.createElement("span");s.textContent="User"===e.sender?"You":e.sender,s.style.cssText=`\n font-size: 0.75rem;\n color: ${e.isUser?hc.convai.dark:"#10b981"};\n font-weight: 500;\n font-family: ${pc.fontFamily.body};\n isolation: isolate;\n contain: layout style paint;\n `,t.appendChild(i),t.appendChild(s),n.appendChild(t)}const s=document.createElement("div");if(s.style.cssText="\n white-space: pre-wrap;\n word-wrap: break-word;\n ",((e,t)=>{if(!e)return;const n=e.replace(/\\n/g,"\n").split("\n");n.forEach((e,i)=>{const s=(e=>{const t=[];let n=e;const i=/(\*\*|__)(.*?)\1|\*([^*]+)\*|_([^_]+)_/g;let s,o=0;for(;null!==(s=i.exec(n));){if(s.index>o){const e=n.substring(o,s.index);e&&t.push(document.createTextNode(e))}if(s[1]&&s[2]){const e=document.createElement("strong");e.textContent=s[2],e.style.cssText=`\n font-weight: 600;\n color: ${hc.text.primary};\n `,t.push(e)}else if(s[3]){const e=document.createElement("em");e.textContent=s[3],e.style.cssText="\n font-style: italic;\n ",t.push(e)}else if(s[4]){const e=document.createElement("em");e.textContent=s[4],e.style.cssText="\n font-style: italic;\n ",t.push(e)}o=s.index+s[0].length}if(n.length>o){const e=n.substring(o);e&&t.push(document.createTextNode(e))}return t})(e);""===e.trim()&&i>0?t.appendChild(document.createElement("br")):(s.length>0?s.forEach(e=>t.appendChild(e)):t.appendChild(document.createTextNode(e)),n.length-1>i&&t.appendChild(document.createElement("br")))})})(e.text,s),n.appendChild(s),t.appendChild(n),e.timestamp){const n=document.createElement("span");n.textContent=e.timestamp,n.style.cssText=`\n font-size: 0.75rem;\n color: ${hc.text.secondary};\n margin-top: 4px;\n align-self: ${e.isUser?"flex-end":"flex-start"};\n font-family: ${pc.fontFamily.body};\n `,t.appendChild(n)}m.appendChild(t)}),m.scrollTop=m.scrollHeight},ce=()=>n.state.isConnected?n.state.isConnecting||!n.isBotReady?{color:"#f59e0b",label:"Connecting"}:{color:"#10b981",label:"Connected"}:{color:"#ef4444",label:"Disconnected"},de=()=>n.chatMessages.filter(e=>("user-transcription"===e.type||"user-llm-text"===e.type||"bot-llm-text"===e.type||"bot-emotion"===e.type)&&e.content&&e.content.trim().length>0).map(e=>({id:e.id,text:e.content,isUser:e.type.includes("user"),timestamp:new Date(e.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),sender:e.type.includes("user")?"You":E,showLogo:e.type.includes("bot")}));return(()=>{r=document.createElement("div"),r.className="convai-widget",r.style.cssText=`\n position: fixed;\n bottom: 1.5rem;\n right: 1.5rem;\n z-index: ${bc.modal};\n font-family: ${pc.fontFamily.primary};\n `,a=document.createElement("div"),a.style.cssText=`\n position: relative;\n width: 4rem;\n height: 4rem;\n background: ${hc.glass.backdrop};\n backdrop-filter: ${vc.backdrop};\n border: ${vc.border};\n border-radius: 50%;\n box-shadow: ${fc.glass};\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n `,c=document.createElement("div"),c.style.cssText="\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity 0.3s, transform 0.3s;\n opacity: 1;\n transform: scale(1);\n ";const t=Rc("xl","idle");t.style.color=hc.convai.light,c.appendChild(t),d=document.createElement("div"),d.style.cssText="\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n opacity: 0;\n transform: scale(0.8);\n transition: opacity 0.2s, transform 0.2s;\n pointer-events: none;\n ",v=A(),d.appendChild(v),y=N(),d.appendChild(y),l=q(),u=document.createElement("div"),u.style.cssText="\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n background: transparent;\n ",m=W(),u.appendChild(m),h=z(),d.appendChild(l),d.appendChild(u),d.appendChild(h),a.appendChild(c),a.appendChild(d),r.appendChild(a),g=K(),r.appendChild(g),f=G(),e.appendChild(f),e.appendChild(r),a.addEventListener("click",J)})(),n.on("stateChange",()=>{H(),U(),a.style.animation=n.state.isConnecting?"convai-pulse 2s ease-in-out infinite":"none",n.state.isSpeaking?B||(B=Date.now()):B&&!n.state.isSpeaking&&(B=0,F=Array(40).fill(.05),j=Array(40).fill(.05)),n.state.isConnected||n.state.isConnecting||(b&&ie(!1),T=!1,C=!1,S=!1,P=!1,H(),re()),n.state.isConnected&&o&&b&&!P&&!C&&setTimeout(async()=>{try{await n.audioControls.unmuteAudio(),C=!0,P=!0,re()}catch(e){console.error("Failed to enter voice mode:",e)}},100)}),n.videoControls.on("videoStateChange",e=>{if(void 0!==e.isVideoEnabled){S=e.isVideoEnabled,re();const t=document.getElementById("convai-settings-video-btn");if(t){const e=S;t.style.backgroundColor=e?"rgba(16, 185, 129, 0.15)":"transparent",t.style.color=e?"#10b981":hc.text.primary;const n=t.querySelector("div");if(n){n.innerHTML="";const t=e?Oc("md"):Lc("md");t.style.width="18px",t.style.height="18px",n.appendChild(t)}}}}),n.screenShareControls.on("screenShareStateChange",e=>{if(void 0!==e.isScreenShareActive){const t=e.isScreenShareActive,n=document.getElementById("convai-settings-share-btn");if(n){const e=t;n.style.backgroundColor=e?"rgba(16, 185, 129, 0.15)":"transparent",n.style.color=e?"#10b981":hc.text.primary;const i=n.querySelector("div");if(i){i.innerHTML="";const t=e?jc("md"):Uc("md");t.style.width="18px",t.style.height="18px",i.appendChild(t)}}}}),n.on("messagesChange",()=>{ae()}),n.on("botReady",()=>{H(),U()}),n.on("connect",()=>{n.room&&!_&&(_=new uc(n.room)),D()}),n.on("disconnect",()=>{_&&(_.destroy(),_=null),ae()}),oe(),o&&re(),n.state.isConnected&&n.room&&(_=new uc(n.room),D()),{element:r,destroy:()=>{_&&(_.destroy(),_=null),a.removeEventListener("click",J),r.parentElement&&r.remove(),f.parentElement&&f.remove(),n.off("stateChange",()=>{}),n.off("messagesChange",()=>{}),n.off("botReady",()=>{}),n.off("connect",()=>{}),n.off("disconnect",()=>{})}}},e.destroyConvaiWidget=function(e){e.destroy()},e.formatARKitBlendshapesForLogging=function(e,t=.01,n=20){const i=Yc(e,t).slice(0,n).reduce((e,t)=>(e[t.name]=Number(t.value.toFixed(4)),e),{});return{active:i,total:e.length,activeCount:Object.keys(i).length}},e.formatBlendshapesForLogging=function(e,t=.01,n=20){const i=nd(e),s=Object.entries(i).filter(([e,n])=>Math.abs(n)>t).sort(([,e],[,t])=>Math.abs(t)-Math.abs(e)).slice(0,n).reduce((e,[t,n])=>(e[t]=Number(n.toFixed(4)),e),{});return{active:s,total:e.length,activeCount:Object.keys(s).length}},e.formatOrder61ForLogging=function(e,t=.01,n=20){const i=Gc(e,t).slice(0,n).reduce((e,t)=>(e[t.name]=Number(t.value.toFixed(4)),e),{});return{active:i,total:e.length,activeCount:Object.keys(i).length,headRotation:zc(e),eyeRotations:Kc(e)}},e.generatePhonemeBlendshapes=Zc,e.getARKitBlendshapeValue=function(e,t){const n=Jc.indexOf(t);if(-1!==n&&e.length>n)return e[n];const i=$c.indexOf(t);if(-1!==i){const t=52+i;if(e.length>t)return e[t]}return 0},e.getActiveARKitBlendshapes=Yc,e.getActiveBlendshapesFromOrder61=Gc,e.getBlendshapeValueFromOrder61=function(e,t){const n=t.charAt(0).toUpperCase()+t.slice(1),i=qc.indexOf(n);return-1!==i&&e.length>i?e[i]:0},e.getEyeRotations=Kc,e.getHeadRotation=zc,e.getLipSyncBlendshapes=function(e){return{jaw:e[24]||0,mouthClose:e[26]||0,mouthFunnel:e[31]||0,mouthPucker:e[37]||0,mouthRollLower:e[39]||0,mouthRollUpper:e[40]||0,mouthSmileLeft:e[43]||0,mouthSmileRight:e[44]||0,mouthStretchLeft:e[45]||0,mouthStretchRight:e[46]||0,tongueOut:e[51]||0}},e.getLipSyncValuesFromOrder61=function(e){return{jawOpen:e[17]||0,mouthClose:e[18]||0,mouthFunnel:e[19]||0,mouthPucker:e[20]||0,mouthSmileLeft:e[23]||0,mouthSmileRight:e[24]||0,mouthStretchLeft:e[29]||0,mouthStretchRight:e[30]||0,mouthRollLower:e[31]||0,mouthRollUpper:e[32]||0,tongueOut:e[51]||0}},e.getPhonemeDescription=function(e){const t=Qc[e],n=[t.description,""];for(const[e,i]of Object.entries(t))"description"!==e&&n.push(` ${e}: ${i}`);return n.join("\n")},e.getTopBlendshapes=function(e,t=10){return e.map((e,t)=>({name:td[t]||"unknown_"+t,value:e,index:t})).filter(e=>Math.abs(e.value)>.001).sort((e,t)=>Math.abs(t.value)-Math.abs(e.value)).slice(0,t)},e.mapARKitBlendshapesToNames=function(e){const t={};for(let n=0;Math.min(e.length,Jc.length)>n;n++)t[Jc[n]]=e[n];if(e.length>52){const n=52;for(let i=0;Math.min(e.length-n,$c.length)>i;i++)t[$c[i]]=e[n+i]}return t},e.mapBlendshapesToNames=nd,e.mapOrder61ToNames=function(e){const t={};for(let n=0;Math.min(e.length,qc.length)>n;n++){const i=qc[n];t[i.charAt(0).toLowerCase()+i.slice(1)]=e[n]}return t}});
|