@signalwire/js 3.28.0 → 3.28.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/dist/core/src/BaseSession.d.ts +1 -1
- package/dist/core/src/RPCMessages/VertoMessages.d.ts +7 -0
- package/dist/core/src/RPCMessages/VertoMessages.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +2 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/redux/features/component/componentSlice.d.ts +96 -0
- package/dist/core/src/redux/features/component/componentSlice.d.ts.map +1 -1
- package/dist/core/src/redux/rootReducer.d.ts +16 -0
- package/dist/core/src/redux/rootReducer.d.ts.map +1 -1
- package/dist/core/src/types/common.d.ts +16 -10
- package/dist/core/src/types/common.d.ts.map +1 -1
- package/dist/core/src/types/fabric.d.ts +0 -27
- package/dist/core/src/types/fabric.d.ts.map +1 -1
- package/dist/core/src/types/index.d.ts +67 -1
- package/dist/core/src/types/index.d.ts.map +1 -1
- package/dist/core/src/types/videoPlayback.d.ts +1 -7
- package/dist/core/src/types/videoPlayback.d.ts.map +1 -1
- package/dist/core/src/types/videoRecording.d.ts +1 -7
- package/dist/core/src/types/videoRecording.d.ts.map +1 -1
- package/dist/core/src/types/voice.d.ts +13 -2
- package/dist/core/src/types/voice.d.ts.map +1 -1
- package/dist/core/src/types/voiceCall.d.ts +96 -964
- package/dist/core/src/types/voiceCall.d.ts.map +1 -1
- package/dist/core/src/types/voiceCollect.d.ts +166 -0
- package/dist/core/src/types/voiceCollect.d.ts.map +1 -0
- package/dist/core/src/types/voiceConnect.d.ts +77 -0
- package/dist/core/src/types/voiceConnect.d.ts.map +1 -0
- package/dist/core/src/types/voiceDetect.d.ts +127 -0
- package/dist/core/src/types/voiceDetect.d.ts.map +1 -0
- package/dist/core/src/types/voicePlayback.d.ts +141 -0
- package/dist/core/src/types/voicePlayback.d.ts.map +1 -0
- package/dist/core/src/types/voicePrompt.d.ts +105 -0
- package/dist/core/src/types/voicePrompt.d.ts.map +1 -0
- package/dist/core/src/types/voiceRecording.d.ts +107 -0
- package/dist/core/src/types/voiceRecording.d.ts.map +1 -0
- package/dist/core/src/types/voiceSendDigits.d.ts +21 -0
- package/dist/core/src/types/voiceSendDigits.d.ts.map +1 -0
- package/dist/core/src/types/voiceTap.d.ts +116 -0
- package/dist/core/src/types/voiceTap.d.ts.map +1 -0
- package/dist/core/src/utils/constants.d.ts.map +1 -1
- package/dist/core/src/utils/eventUtils.d.ts +0 -2
- package/dist/core/src/utils/eventUtils.d.ts.map +1 -1
- package/dist/core/src/utils/interfaces.d.ts +19 -2
- package/dist/core/src/utils/interfaces.d.ts.map +1 -1
- package/dist/index.esm.js +636 -223
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +655 -233
- package/dist/index.js.map +4 -4
- package/dist/index.umd.js +26 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/js/src/fabric/Conversation.d.ts +2 -2
- package/dist/js/src/fabric/Conversation.d.ts.map +1 -1
- package/dist/js/src/fabric/FabricRoomSession.d.ts +5 -4
- package/dist/js/src/fabric/FabricRoomSession.d.ts.map +1 -1
- package/dist/js/src/fabric/SignalWire.d.ts.map +1 -1
- package/dist/js/src/fabric/WSClient.d.ts +2 -2
- package/dist/js/src/fabric/WSClient.d.ts.map +1 -1
- package/dist/js/src/fabric/createWSClient.d.ts +1 -1
- package/dist/js/src/fabric/createWSClient.d.ts.map +1 -1
- package/dist/js/src/fabric/interfaces/capabilities.d.ts +28 -0
- package/dist/js/src/fabric/interfaces/capabilities.d.ts.map +1 -0
- package/dist/js/src/fabric/interfaces/conversation.d.ts +4 -4
- package/dist/js/src/fabric/interfaces/conversation.d.ts.map +1 -1
- package/dist/js/src/fabric/interfaces/index.d.ts +1 -0
- package/dist/js/src/fabric/interfaces/index.d.ts.map +1 -1
- package/dist/js/src/fabric/interfaces/wsClient.d.ts +2 -2
- package/dist/js/src/fabric/interfaces/wsClient.d.ts.map +1 -1
- package/dist/js/src/fabric/utils/capabilitiesHelpers.d.ts +28 -0
- package/dist/js/src/fabric/utils/capabilitiesHelpers.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/callJoinWorker.d.ts.map +1 -1
- package/dist/js/src/fabric/workers/wsClientWorker.d.ts.map +1 -1
- package/dist/js/src/index.d.ts +2 -2
- package/dist/js/src/index.d.ts.map +1 -1
- package/dist/js/src/utils/interfaces/fabric.d.ts +6 -3
- package/dist/js/src/utils/interfaces/fabric.d.ts.map +1 -1
- package/dist/js/src/utils/paginatedResult.d.ts +4 -4
- package/dist/js/tsconfig.build.tsbuildinfo +1 -1
- package/dist/webrtc/src/BaseConnection.d.ts +78 -19
- package/dist/webrtc/src/BaseConnection.d.ts.map +1 -1
- package/dist/webrtc/src/RTCPeer.d.ts +11 -0
- package/dist/webrtc/src/RTCPeer.d.ts.map +1 -1
- package/dist/webrtc/src/utils/helpers.d.ts.map +1 -1
- package/dist/webrtc/src/utils/interfaces.d.ts +6 -0
- package/dist/webrtc/src/utils/interfaces.d.ts.map +1 -1
- package/dist/webrtc/src/utils/sdpHelpers.d.ts +27 -2
- package/dist/webrtc/src/utils/sdpHelpers.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/fabric/Conversation.ts +9 -7
- package/src/fabric/FabricRoomSession.ts +32 -32
- package/src/fabric/SignalWire.test.ts +2 -0
- package/src/fabric/SignalWire.ts +2 -0
- package/src/fabric/WSClient.ts +6 -10
- package/src/fabric/interfaces/capabilities.ts +30 -0
- package/src/fabric/interfaces/conversation.ts +5 -4
- package/src/fabric/interfaces/index.ts +2 -1
- package/src/fabric/interfaces/wsClient.ts +2 -2
- package/src/fabric/utils/capabilitiesHelpers.test.ts +201 -0
- package/src/fabric/utils/capabilitiesHelpers.ts +190 -0
- package/src/fabric/workers/callJoinWorker.ts +7 -6
- package/src/fabric/workers/wsClientWorker.ts +35 -12
- package/src/index.ts +1 -1
- package/src/utils/interfaces/fabric.ts +10 -3
- package/dist/core/src/utils/eventUtils.test.d.ts +0 -2
- package/dist/core/src/utils/eventUtils.test.d.ts.map +0 -1
package/dist/index.umd.js
CHANGED
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SignalWire JS SDK v3.28.
|
|
2
|
+
* SignalWire JS SDK v3.28.1 (https://signalwire.com)
|
|
3
3
|
* Copyright 2018-2025 SignalWire
|
|
4
4
|
* Licensed under MIT(https://github.com/signalwire/signalwire-js/blob/main/LICENSE)
|
|
5
5
|
*/
|
|
6
|
-
!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).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,o;r=t,o=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"];function i(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function n(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(t,r){for(var i=0;i<o.length;i++){var n=o[i];this[n]=i<t?e:this.methodFactory(n,t,r)}this.log=this.debug}function a(e,r,o){return function(){typeof console!==t&&(s.call(this,r,o),this[e].apply(this,arguments))}}function c(o,s,c){return function(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?n:void 0!==console[o]?i(console,o):void 0!==console.log?i(console,"log"):e)}(o)||a.apply(this,arguments)}function d(e,r,i){var n,a=this;r=null==r?"WARN":r;var d="loglevel";function l(){var e;if(typeof window!==t&&d){try{e=window.localStorage[d]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,o=r.indexOf(encodeURIComponent(d)+"=");-1!==o&&(e=/^([^;]+)/.exec(r.slice(o))[1])}catch(e){}return void 0===a.levels[e]&&(e=void 0),e}}"string"==typeof e?d+=":"+e:"symbol"==typeof e&&(d=void 0),a.name=e,a.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},a.methodFactory=i||c,a.getLevel=function(){return n},a.setLevel=function(r,i){if("string"==typeof r&&void 0!==a.levels[r.toUpperCase()]&&(r=a.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=a.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(n=r,!1!==i&&function(e){var r=(o[e]||"silent").toUpperCase();if(typeof window!==t&&d){try{return void(window.localStorage[d]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"="+r+";"}catch(e){}}}(r),s.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,l()||a.setLevel(e,!1)},a.resetLevel=function(){a.setLevel(r,!1),function(){if(typeof window!==t&&d){try{return void window.localStorage.removeItem(d)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},a.enableAll=function(e){a.setLevel(a.levels.TRACE,e)},a.disableAll=function(e){a.setLevel(a.levels.SILENT,e)};var u=l();null==u&&(u=r),a.setLevel(u,!1)}var l=new d,u={};l.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=u[e];return t||(t=u[e]=new d(e,l.getLevel(),l.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return l.noConflict=function(){return typeof window!==t&&window.log===l&&(window.log=h),l},l.getLoggers=function(){return u},l.default=l,l},e.exports?e.exports=o():r.log=o()}(r);var o=r.exports;let i;const n=new Uint8Array(16);function s(){if(!i&&(i="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!i))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return i(n)}var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));function d(e,t=0){return(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase()}const l="6ba7b810-9dad-11d1-80b4-00c04fd430c8",u="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function h(e,t,r){function o(e,o,i,n){var s;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof o&&(o=function(e){if(!function(e){return"string"==typeof e&&a.test(e)}(e))throw TypeError("Invalid UUID");let t;const r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}(o)),16!==(null===(s=o)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(o),c.set(e,o.length),c=r(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,i){n=n||0;for(let e=0;e<16;++e)i[n+e]=c[e];return i}return d(c)}try{o.name=e}catch(e){}return o.DNS=l,o.URL=u,o}function m(e){return 14+(e+64>>>9<<4)+1}function p(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function g(e,t,r,o,i,n){return p((s=p(p(t,e),p(o,n)))<<(a=i)|s>>>32-a,r);var s,a}function f(e,t,r,o,i,n,s){return g(t&r|~t&o,e,t,i,n,s)}function v(e,t,r,o,i,n,s){return g(t&o|r&~o,e,t,i,n,s)}function y(e,t,r,o,i,n,s){return g(t^r^o,e,t,i,n,s)}function b(e,t,r,o,i,n,s){return g(r^(t|~o),e,t,i,n,s)}h("v3",48,(function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){const t=[],r=32*e.length,o="0123456789abcdef";for(let i=0;i<r;i+=8){const r=e[i>>5]>>>i%32&255,n=parseInt(o.charAt(r>>>4&15)+o.charAt(15&r),16);t.push(n)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[m(t)-1]=t;let r=1732584193,o=-271733879,i=-1732584194,n=271733878;for(let t=0;t<e.length;t+=16){const s=r,a=o,c=i,d=n;r=f(r,o,i,n,e[t],7,-680876936),n=f(n,r,o,i,e[t+1],12,-389564586),i=f(i,n,r,o,e[t+2],17,606105819),o=f(o,i,n,r,e[t+3],22,-1044525330),r=f(r,o,i,n,e[t+4],7,-176418897),n=f(n,r,o,i,e[t+5],12,1200080426),i=f(i,n,r,o,e[t+6],17,-1473231341),o=f(o,i,n,r,e[t+7],22,-45705983),r=f(r,o,i,n,e[t+8],7,1770035416),n=f(n,r,o,i,e[t+9],12,-1958414417),i=f(i,n,r,o,e[t+10],17,-42063),o=f(o,i,n,r,e[t+11],22,-1990404162),r=f(r,o,i,n,e[t+12],7,1804603682),n=f(n,r,o,i,e[t+13],12,-40341101),i=f(i,n,r,o,e[t+14],17,-1502002290),o=f(o,i,n,r,e[t+15],22,1236535329),r=v(r,o,i,n,e[t+1],5,-165796510),n=v(n,r,o,i,e[t+6],9,-1069501632),i=v(i,n,r,o,e[t+11],14,643717713),o=v(o,i,n,r,e[t],20,-373897302),r=v(r,o,i,n,e[t+5],5,-701558691),n=v(n,r,o,i,e[t+10],9,38016083),i=v(i,n,r,o,e[t+15],14,-660478335),o=v(o,i,n,r,e[t+4],20,-405537848),r=v(r,o,i,n,e[t+9],5,568446438),n=v(n,r,o,i,e[t+14],9,-1019803690),i=v(i,n,r,o,e[t+3],14,-187363961),o=v(o,i,n,r,e[t+8],20,1163531501),r=v(r,o,i,n,e[t+13],5,-1444681467),n=v(n,r,o,i,e[t+2],9,-51403784),i=v(i,n,r,o,e[t+7],14,1735328473),o=v(o,i,n,r,e[t+12],20,-1926607734),r=y(r,o,i,n,e[t+5],4,-378558),n=y(n,r,o,i,e[t+8],11,-2022574463),i=y(i,n,r,o,e[t+11],16,1839030562),o=y(o,i,n,r,e[t+14],23,-35309556),r=y(r,o,i,n,e[t+1],4,-1530992060),n=y(n,r,o,i,e[t+4],11,1272893353),i=y(i,n,r,o,e[t+7],16,-155497632),o=y(o,i,n,r,e[t+10],23,-1094730640),r=y(r,o,i,n,e[t+13],4,681279174),n=y(n,r,o,i,e[t],11,-358537222),i=y(i,n,r,o,e[t+3],16,-722521979),o=y(o,i,n,r,e[t+6],23,76029189),r=y(r,o,i,n,e[t+9],4,-640364487),n=y(n,r,o,i,e[t+12],11,-421815835),i=y(i,n,r,o,e[t+15],16,530742520),o=y(o,i,n,r,e[t+2],23,-995338651),r=b(r,o,i,n,e[t],6,-198630844),n=b(n,r,o,i,e[t+7],10,1126891415),i=b(i,n,r,o,e[t+14],15,-1416354905),o=b(o,i,n,r,e[t+5],21,-57434055),r=b(r,o,i,n,e[t+12],6,1700485571),n=b(n,r,o,i,e[t+3],10,-1894986606),i=b(i,n,r,o,e[t+10],15,-1051523),o=b(o,i,n,r,e[t+1],21,-2054922799),r=b(r,o,i,n,e[t+8],6,1873313359),n=b(n,r,o,i,e[t+15],10,-30611744),i=b(i,n,r,o,e[t+6],15,-1560198380),o=b(o,i,n,r,e[t+13],21,1309151649),r=b(r,o,i,n,e[t+4],6,-145523070),n=b(n,r,o,i,e[t+11],10,-1120210379),i=b(i,n,r,o,e[t+2],15,718787259),o=b(o,i,n,r,e[t+9],21,-343485551),r=p(r,s),o=p(o,a),i=p(i,c),n=p(n,d)}return[r,o,i,n]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(m(t));for(let o=0;o<t;o+=8)r[o>>5]|=(255&e[o/8])<<o%32;return r}(e),8*e.length))}));var _={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function w(e,t,r){if(_.randomUUID&&!t&&!e)return _.randomUUID();const o=(e=e||{}).random||(e.rng||s)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=o[e];return t}return d(o)}function S(e,t,r,o){switch(e){case 0:return t&r^~t&o;case 1:case 3:return t^r^o;case 2:return t&r^t&o^r&o}}function k(e,t){return e<<t|e>>>32-t}function I(e){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},I(e)}function C(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==I(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==I(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===I(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function M(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach((function(t){C(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function P(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}h("v5",80,(function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const o=Math.ceil((e.length/4+2)/16),i=new Array(o);for(let t=0;t<o;++t){const r=new Uint32Array(16);for(let o=0;o<16;++o)r[o]=e[64*t+4*o]<<24|e[64*t+4*o+1]<<16|e[64*t+4*o+2]<<8|e[64*t+4*o+3];i[t]=r}i[o-1][14]=8*(e.length-1)/Math.pow(2,32),i[o-1][14]=Math.floor(i[o-1][14]),i[o-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<o;++e){const o=new Uint32Array(80);for(let t=0;t<16;++t)o[t]=i[e][t];for(let e=16;e<80;++e)o[e]=k(o[e-3]^o[e-8]^o[e-14]^o[e-16],1);let n=r[0],s=r[1],a=r[2],c=r[3],d=r[4];for(let e=0;e<80;++e){const r=Math.floor(e/20),i=k(n,5)+S(r,s,a,c)+d+t[r]+o[e]>>>0;d=c,c=a,a=k(s,30)>>>0,s=n,n=i}r[0]=r[0]+n>>>0,r[1]=r[1]+s>>>0,r[2]=r[2]+a>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+d>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var T="function"==typeof Symbol&&Symbol.observable||"@@observable",x=function(){return Math.random().toString(36).substring(7).split("").join(".")},R={INIT:"@@redux/INIT"+x(),REPLACE:"@@redux/REPLACE"+x(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+x()}};function O(e,t,r){var o;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(P(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(P(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(P(2));var i=e,n=t,s=[],a=s,c=!1;function d(){a===s&&(a=s.slice())}function l(){if(c)throw new Error(P(3));return n}function u(e){if("function"!=typeof e)throw new Error(P(4));if(c)throw new Error(P(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(P(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),s=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(P(7));if(void 0===e.type)throw new Error(P(8));if(c)throw new Error(P(9));try{c=!0,n=i(n,e)}finally{c=!1}for(var t=s=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:R.INIT}),(o={dispatch:h,subscribe:u,getState:l,replaceReducer:function(e){if("function"!=typeof e)throw new Error(P(10));i=e,h({type:R.REPLACE})}})[T]=function(){var e,t=u;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(P(11));function r(){e.next&&e.next(l())}return r(),{unsubscribe:t(r)}}})[T]=function(){return this},e},o}function A(e){for(var t=Object.keys(e),r={},o=0;o<t.length;o++){var i=t[o];"function"==typeof e[i]&&(r[i]=e[i])}var n,s=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:R.INIT}))throw new Error(P(12));if(void 0===r(void 0,{type:R.PROBE_UNKNOWN_ACTION()}))throw new Error(P(13))}))}(r)}catch(e){n=e}return function(e,t){if(void 0===e&&(e={}),n)throw n;for(var o=!1,i={},a=0;a<s.length;a++){var c=s[a],d=e[c],l=(0,r[c])(d,t);if(void 0===l)throw new Error(P(14));i[c]=l,o=o||l!==d}return(o=o||s.length!==Object.keys(e).length)?i:e}}function j(e,t){return function(){return t(e.apply(this,arguments))}}function L(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function D(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),o=function(){throw new Error(P(15))},i={getState:r.getState,dispatch:function(){return o.apply(void 0,arguments)}},n=t.map((function(e){return e(i)}));return o=L.apply(void 0,n)(r.dispatch),M(M({},r),{},{dispatch:o})}}}var V=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:R,applyMiddleware:D,bindActionCreators:function(e,t){if("function"==typeof e)return j(e,t);if("object"!=typeof e||null===e)throw new Error(P(16));var r={};for(var o in e){var i=e[o];"function"==typeof i&&(r[o]=j(i,t))}return r},combineReducers:A,compose:L,createStore:O,legacy_createStore:O}),W=function(e){return"@@redux-saga/"+e},N=W("CANCEL_PROMISE"),U=W("CHANNEL_END"),$=W("IO"),z=W("MATCH"),B=W("MULTICAST"),H=W("SAGA_ACTION"),F=W("SELF_CANCELLATION"),q=W("TASK"),K=W("TASK_CANCEL"),J=W("TERMINATE"),G=W("LOCATION");function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},Q.apply(this,arguments)}var X=function(e){return null==e},Y=function(e){return null!=e},Z=function(e){return"function"==typeof e},ee=function(e){return"string"==typeof e},te=Array.isArray,re=function(e){return e&&Z(e.then)},oe=function(e){return e&&Z(e.next)&&Z(e.throw)},ie=function e(t){return t&&(ee(t)||ae(t)||Z(t)||te(t)&&t.every(e))},ne=function(e){return e&&Z(e.take)&&Z(e.close)},se=function(e){return Z(e)&&e.hasOwnProperty("toString")},ae=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},ce=function(e){return ne(e)&&e[B]},de=function(e){return function(){return!0}}(),le=function(){},ue=function(e){return e},he=function(e,t){Q(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))},me=function(e,t){var r;return(r=[]).concat.apply(r,t.map(e))};function pe(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function ge(e){var t=!1;return function(){t||(t=!0,e())}}var fe=function(e){throw e},ve=function(e){return{value:e,done:!0}};function ye(e,t,r){void 0===t&&(t=fe),void 0===r&&(r="iterator");var o={meta:{name:r},next:e,throw:t,return:ve,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function be(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var _e=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},Se=function(e){return e===J},ke=function(e){return e===K},Ie=function(e){return Se(e)||ke(e)};function Ce(e,t){var r,o=Object.keys(e),i=o.length,n=0,s=te(e)?_e(i):{},a={};return o.forEach((function(e){var o=function(o,a){r||(a||Ie(o)?(t.cancel(),t(o,a)):(s[e]=o,++n===i&&(r=!0,t(s))))};o.cancel=le,a[e]=o})),t.cancel=function(){r||(r=!0,o.forEach((function(e){return a[e].cancel()})))},a}function Ee(e){return{name:e.name||"anonymous",location:Me(e)}}function Me(e){return e[G]}var Pe={isEmpty:de,put:le,take:le},Te=function(){return Pe},xe=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),o=0,i=0,n=0,s=function(){if(0!=o){var t=r[n];return r[n]=null,o--,n=(n+1)%e,t}},a=function(){for(var e=[];o;)e.push(s());return e};return{isEmpty:function(){return 0==o},put:function(t){var s;o<e||(s=2*e,r=a(),o=r.length,i=r.length,n=0,r.length=s,e=s),function(t){r[i]=t,i=(i+1)%e,o++}(t)},take:s,flush:a}}(e)},Re="TAKE",Oe="PUT",Ae="ALL",je="CALL",Le="FORK",De="JOIN",Ve="SELECT",We="CANCELLED",Ne=function(e,t){var r;return(r={})[$]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function Ue(e,t){return void 0===e&&(e="*"),ie(e)?(Y(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ne(Re,{pattern:e})):ce(e)&&Y(t)&&ie(t)?Ne(Re,{channel:e,pattern:t}):ne(e)?(Y(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ne(Re,{channel:e})):void 0}function $e(e,t){return X(t)&&(t=e,e=void 0),Ne(Oe,{channel:e,action:t})}function ze(e,t){var r,o=null;return Z(e)?r=e:(te(e)?(o=e[0],r=e[1]):(o=e.context,r=e.fn),o&&ee(r)&&Z(o[r])&&(r=o[r])),{context:o,fn:r,args:t}}function Be(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(je,ze(e,r))}function He(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(Le,ze(e,r))}function Fe(e){void 0===e&&(e=ue);for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(Ve,{selector:e,args:r})}function qe(){return Ne(We,{})}var Ke=[],Je=0;function Ge(e){try{Ye(),e()}finally{Ze()}}function Qe(e){Ke.push(e),Je||(Ye(),et())}function Xe(e){try{return Ye(),e()}finally{et()}}function Ye(){Je++}function Ze(){Je--}function et(){var e;for(Ze();!Je&&void 0!==(e=Ke.shift());)Ge(e)}var tt=function(e){return function(t){return e.some((function(e){return st(e)(t)}))}},rt=function(e){return function(t){return e(t)}},ot=function(e){return function(t){return t.type===String(e)}},it=function(e){return function(t){return t.type===e}},nt=function(){return de};function st(e){var t="*"===e?nt:ee(e)?ot:te(e)?tt:se(e)?ot:Z(e)?rt:ae(e)?it:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var at={type:U},ct=function(e){return e&&e.type===U};function dt(e){void 0===e&&(e=xe());var t=!1,r=[];return{take:function(o){t&&e.isEmpty()?o(at):e.isEmpty()?(r.push(o),o.cancel=function(){pe(r,o)}):o(e.take())},put:function(o){if(!t){if(0===r.length)return e.put(o);r.shift()(o)}},flush:function(r){t&&e.isEmpty()?r(at):r(e.flush())},close:function(){if(!t){t=!0;var e=r;r=[];for(var o=0,i=e.length;o<i;o++)(0,e[o])(at)}}}}function lt(e,t){void 0===t&&(t=Te());var r,o=!1,i=dt(t),n=function(){o||(o=!0,Z(r)&&r(),i.close())};return r=ge(r=e((function(e){ct(e)?n():i.put(e)}))),o&&r(),{take:i.take,flush:i.flush,close:n}}function ut(){var e,t=!1,r=[],o=r,i=function(){o===r&&(o=r.slice())},n=function(){t=!0;var e=r=o;o=[],e.forEach((function(e){e(at)}))};return(e={})[B]=!0,e.put=function(e){if(!t)if(ct(e))n();else for(var i=r=o,s=0,a=i.length;s<a;s++){var c=i[s];c[z](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=nt),t?e(at):(e[z]=r,i(),o.push(e),e.cancel=ge((function(){i(),pe(o,e)})))},e.close=n,e}function ht(){var e=ut(),t=e.put;return e.put=function(e){e[H]?t(e):Qe((function(){t(e)}))},e}var mt=0,pt=1,gt=2,ft=3;function vt(e,t){var r=e[N];Z(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var yt,bt=0,_t=function(){return++bt};function wt(e){e.isRunning()&&e.cancel()}var St=((yt={})[Re]=function(e,t,r){var o=t.channel,i=void 0===o?e.channel:o,n=t.pattern,s=t.maybe,a=function(e){e instanceof Error?r(e,!0):!ct(e)||s?r(e):r(J)};try{i.take(a,Y(n)?st(n):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},yt[Oe]=function(e,t,r){var o=t.channel,i=t.action,n=t.resolve;Qe((function(){var t;try{t=(o?o.put:e.dispatch)(i)}catch(e){return void r(e,!0)}n&&re(t)?vt(t,r):r(t)}))},yt[Ae]=function(e,t,r,o){var i=o.digestEffect,n=bt,s=Object.keys(t);if(0!==s.length){var a=Ce(t,r);s.forEach((function(e){i(t[e],n,a[e],e)}))}else r(te(t)?[]:{})},yt.RACE=function(e,t,r,o){var i=o.digestEffect,n=bt,s=Object.keys(t),a=te(t)?_e(s.length):{},c={},d=!1;s.forEach((function(e){var t=function(t,o){d||(o||Ie(t)?(r.cancel(),r(t,o)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=le,c[e]=t})),r.cancel=function(){d||(d=!0,s.forEach((function(e){return c[e].cancel()})))},s.forEach((function(e){d||i(t[e],n,c[e],e)}))},yt[je]=function(e,t,r,o){var i=t.context,n=t.fn,s=t.args,a=o.task;try{var c=n.apply(i,s);if(re(c))return void vt(c,r);if(oe(c))return void Ot(e,c,a.context,bt,Ee(n),!1,r);r(c)}catch(e){r(e,!0)}},yt.CPS=function(e,t,r){var o=t.context,i=t.fn,n=t.args;try{var s=function(e,t){X(e)?r(t):r(e,!0)};i.apply(o,n.concat(s)),s.cancel&&(r.cancel=s.cancel)}catch(e){r(e,!0)}},yt[Le]=function(e,t,r,o){var i=t.fn,n=t.detached,s=o.task,a=function(e){var t=e.context,r=e.fn,o=e.args;try{var i=r.apply(t,o);if(oe(i))return i;var n=!1;return ye((function(e){return n?{value:e,done:!0}:(n=!0,{value:i,done:!re(i)})}))}catch(e){return ye((function(){throw e}))}}({context:t.context,fn:i,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Ee(t)}(a,i);Xe((function(){var t=Ot(e,a,s.context,bt,c,n,void 0);n?r(t):t.isRunning()?(s.queue.addTask(t),r(t)):t.isAborted()?s.queue.abort(t.error()):r(t)}))},yt[De]=function(e,t,r,o){var i=o.task,n=function(e,t){if(e.isRunning()){var r={task:i,cb:t};t.cancel=function(){e.isRunning()&&pe(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(te(t)){if(0===t.length)return void r([]);var s=Ce(t,r);t.forEach((function(e,t){n(e,s[t])}))}else n(t,r)},yt.CANCEL=function(e,t,r,o){t===F?wt(o.task):te(t)?t.forEach(wt):wt(t),r()},yt[Ve]=function(e,t,r){var o=t.selector,i=t.args;try{r(o.apply(void 0,[e.getState()].concat(i)))}catch(e){r(e,!0)}},yt.ACTION_CHANNEL=function(e,t,r){var o=t.pattern,i=dt(t.buffer),n=st(o),s=function t(r){ct(r)||e.channel.take(t,n),i.put(r)},a=i.close;i.close=function(){s.cancel(),a()},e.channel.take(s,n),r(i)},yt[We]=function(e,t,r,o){r(o.task.isCancelled())},yt.FLUSH=function(e,t,r){t.flush(r)},yt.GET_CONTEXT=function(e,t,r,o){r(o.task.context[t])},yt.SET_CONTEXT=function(e,t,r,o){he(o.task.context,t),r()},yt);function kt(e,t){return e+"?"+t}function It(e){var t=e.name,r=e.location;return r?t+" "+kt(r.fileName,r.lineNumber):t}function Ct(e){var t=me((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var Et=null,Mt=[],Pt=function(e){e.crashedEffect=Et,Mt.push(e)},Tt=function(){Et=null,Mt.length=0},xt=function(e){Et=e},Rt=function(){var e,t=Mt[0],r=Mt.slice(1),o=t.crashedEffect?(e=Me(t.crashedEffect))?e.code+" "+kt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+It(t.meta)+(o?" \n when executing effect "+o:"")].concat(r.map((function(e){return" created by "+It(e.meta)})),[Ct(Mt)]).join("\n")};function Ot(e,t,r,o,i,n,s){var a=e.finalizeRunEffect((function(t,r,o){re(t)?vt(t,o):oe(t)?Ot(e,t,d.context,r,i,!1,o):t&&t[$]?(0,St[t.type])(e,t.payload,o,l):o(t)}));u.cancel=le;var c={meta:i,cancel:function(){c.status===mt&&(c.status=pt,u(K))},status:mt},d=function(e,t,r,o,i,n,s){var a;void 0===s&&(s=le);var c,d,l=mt,u=null,h=[],m=Object.create(r),p=function(e,t,r){var o,i=[],n=!1;function s(e){h.push.apply(h,p.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){i.push(t),t.cont=function(a,c){n||(pe(i,t),t.cont=le,c?s(a):(t===e&&(o=a),i.length||(n=!0,r(o))))}}function c(){n||(n=!0,i.forEach((function(e){e.cont=le,e.cancel()})),i=[])}return a(e),{addTask:a,cancelAll:c,abort:s,getTasks:function(){return i}}}(t,0,g);function g(t,r){if(r){if(l=gt,Pt({meta:i,cancelledTasks:h}),f.isRoot){var o=Rt();Tt(),e.onError(t,{sagaStack:o})}d=t,u&&u.reject(t)}else t===K?l=pt:l!==pt&&(l=ft),c=t,u&&u.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[q]=!0,a.id=o,a.meta=i,a.isRoot=n,a.context=m,a.joiners=[],a.queue=p,a.cancel=function(){l===mt&&(l=pt,p.cancelAll(),g(K,!1))},a.cont=s,a.end=g,a.setContext=function(e){he(m,e)},a.toPromise=function(){return u||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),u=e,l===gt?u.reject(d):l!==mt&&u.resolve(c)),u.promise;var e},a.isRunning=function(){return l===mt},a.isCancelled=function(){return l===pt||l===mt&&t.status===pt},a.isAborted=function(){return l===gt},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,o,i,n,s),l={task:d,digestEffect:h};return s&&(s.cancel=d.cancel),u(),d;function u(e,r){try{var i;r?(i=t.throw(e),Tt()):ke(e)?(c.status=pt,u.cancel(),i=Z(t.return)?t.return(K):{done:!0,value:K}):i=Se(e)?Z(t.return)?t.return():{done:!0}:t.next(e),i.done?(c.status!==pt&&(c.status=ft),c.cont(i.value)):h(i.value,o,u)}catch(e){if(c.status===pt)throw e;c.status=gt,c.cont(e,!0)}}function h(t,r,o,i){void 0===i&&(i="");var n,s=_t();function c(r,i){n||(n=!0,o.cancel=le,e.sagaMonitor&&(i?e.sagaMonitor.effectRejected(s,r):e.sagaMonitor.effectResolved(s,r)),i&&xt(t),o(r,i))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:s,parentEffectId:r,label:i,effect:t}),c.cancel=le,o.cancel=function(){n||(n=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(s))},a(t,s,c)}}function At(e,t){for(var r=e.channel,o=void 0===r?ht():r,i=e.dispatch,n=e.getState,s=e.context,a=void 0===s?{}:s,c=e.sagaMonitor,d=e.effectMiddlewares,l=e.onError,u=void 0===l?be:l,h=arguments.length,m=new Array(h>2?h-2:0),p=2;p<h;p++)m[p-2]=arguments[p];var g,f=t.apply(void 0,m),v=_t();if(c&&(c.rootSagaStarted=c.rootSagaStarted||le,c.effectTriggered=c.effectTriggered||le,c.effectResolved=c.effectResolved||le,c.effectRejected=c.effectRejected||le,c.effectCancelled=c.effectCancelled||le,c.actionDispatched=c.actionDispatched||le,c.rootSagaStarted({effectId:v,saga:t,args:m})),d){var y=L.apply(void 0,d);g=function(e){return function(t,r,o){return y((function(t){return e(t,r,o)}))(t)}}}else g=ue;var b={channel:o,dispatch:we(i),getState:n,sagaMonitor:c,onError:u,finalizeRunEffect:g};return Xe((function(){var e=Ot(b,f,a,v,Ee(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function jt(e){var t,r=void 0===e?{}:e,o=r.context,i=void 0===o?{}:o,n=r.channel,s=void 0===n?ht():n,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,o,i={},n=Object.keys(e);for(o=0;o<n.length;o++)t.indexOf(r=n[o])>=0||(i[r]=e[r]);return i}(r,["context","channel","sagaMonitor"]);function d(e){return t=At.bind(null,Q({},c,{context:i,channel:s,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return s.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){he(i,e)},d}var Lt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function o(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function n(e,t,o,n,s){if("function"!=typeof o)throw new TypeError("The listener must be a function");var a=new i(o,n||e,s),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new o:delete e._events[t]}function a(){this._events=new o,this._eventsCount=0}Object.create&&(o.prototype=Object.create(null),(new o).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,o,i=[];if(0===this._eventsCount)return i;for(o in e=this._events)t.call(e,o)&&i.push(r?o.slice(1):o);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},a.prototype.listeners=function(e){var t=this._events[r?r+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var o=0,i=t.length,n=new Array(i);o<i;o++)n[o]=t[o].fn;return n},a.prototype.listenerCount=function(e){var t=this._events[r?r+e:e];return t?t.fn?1:t.length:0},a.prototype.emit=function(e,t,o,i,n,s){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,l=this._events[a],u=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),u){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,o),!0;case 4:return l.fn.call(l.context,t,o,i),!0;case 5:return l.fn.call(l.context,t,o,i,n),!0;case 6:return l.fn.call(l.context,t,o,i,n,s),!0}for(d=1,c=new Array(u-1);d<u;d++)c[d-1]=arguments[d];l.fn.apply(l.context,c)}else{var h,m=l.length;for(d=0;d<m;d++)switch(l[d].once&&this.removeListener(e,l[d].fn,void 0,!0),u){case 1:l[d].fn.call(l[d].context);break;case 2:l[d].fn.call(l[d].context,t);break;case 3:l[d].fn.call(l[d].context,t,o);break;case 4:l[d].fn.call(l[d].context,t,o,i);break;default:if(!c)for(h=1,c=new Array(u-1);h<u;h++)c[h-1]=arguments[h];l[d].fn.apply(l[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return n(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return n(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,o,i){var n=r?r+e:e;if(!this._events[n])return this;if(!t)return s(this,n),this;var a=this._events[n];if(a.fn)a.fn!==t||i&&!a.once||o&&a.context!==o||s(this,n);else{for(var c=0,d=[],l=a.length;c<l;c++)(a[c].fn!==t||i&&!a[c].once||o&&a[c].context!==o)&&d.push(a[c]);d.length?this._events[n]=1===d.length?d[0]:d:s(this,n)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&s(this,t):(this._events=new o,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=r,a.EventEmitter=a,e.exports=a}(Lt);var Dt=Lt.exports,Vt=Object.defineProperty,Wt=Object.defineProperties,Nt=Object.getOwnPropertyDescriptor,Ut=Object.getOwnPropertyDescriptors,$t=Object.getOwnPropertyNames,zt=Object.getOwnPropertySymbols,Bt=Object.prototype.hasOwnProperty,Ht=Object.prototype.propertyIsEnumerable,Ft=(e,t,r)=>t in e?Vt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qt=(e,t)=>{for(var r in t||(t={}))Bt.call(t,r)&&Ft(e,r,t[r]);if(zt)for(var r of zt(t))Ht.call(t,r)&&Ft(e,r,t[r]);return e},Kt=(e,t)=>Wt(e,Ut(t)),Jt=(e,t)=>{var r={};for(var o in e)Bt.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&zt)for(var o of zt(e))t.indexOf(o)<0&&Ht.call(e,o)&&(r[o]=e[o]);return r},Gt=(e,t)=>{for(var r in t)Vt(e,r,{get:t[r],enumerable:!0})},Qt=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of $t(t))Bt.call(e,i)||i===r||Vt(e,i,{get:()=>t[i],enumerable:!(o=Nt(t,i))||o.enumerable});return e},Xt=(e,t,r)=>(Qt(e,t,"default"),r&&Qt(r,t,"default")),Yt=(e,t,r)=>(Ft(e,"symbol"!=typeof t?t+"":t,r),r),Zt="__local__",er="__synthetic__",tr="chat",rr=o.getLogger("signalwire"),or=rr.methodFactory;rr.methodFactory=(e,t,r)=>{const o=or(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),o.apply(void 0,e)}};var ir,nr=rr.getLevel();rr.setLevel(nr);var sr={},ar=()=>null!=ir?ir:rr,cr=({type:e,payload:t})=>{const r=ar(),{logWsTraffic:o}=sr||{};if(!o)return;const i=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,i,"\n")},dr=()=>{const e=ar();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?cr:Reflect.get(e,t,r)})},lr=/[A-Z]/g,ur=["webrtc.message"],hr=e=>ur.includes(e),mr=/^2[0-9][0-9]$/,pr=(e,t)=>{const{result:r={},error:o}=e;if(o)return{error:o};const{code:i,node_id:n,result:s=null}=r;return i&&!mr.test(i)?{error:r}:null===s?(t&&(r.node_id=t),{result:r}):s?s.jsonrpc?pr(s,n):{result:s}:{result:r}},gr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},fr=(e,t=gr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,o])=>{const i=vr(r);return e[i]="object"==typeof o&&o?Array.isArray(o)?t.propsToUpdateValue.includes(r)?o.map((e=>"string"==typeof e?vr(e):fr(e))):o:fr(o):(e=>e.endsWith("At"))(i)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(o):o,e}),{}),vr=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const o=t.trim().charAt(0),i=t.substr(1).toLowerCase();return`${e}${0===r?o.toLowerCase():o.toUpperCase()}${i}`}),""):e,yr=e=>{const{event_type:t,params:r,node_id:o}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(hr(t)&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=o),{type:t,payload:e}}return{type:t,payload:r}},br=(e,t)=>(Object.keys(t).forEach((t=>{if(e.prototype.hasOwnProperty(t))throw new Error(`[extendComponent] Duplicated method name: ${t}`)})),Object.defineProperties(e.prototype,t),e),_r=(e,t)=>{if(t&&"string"==typeof t){const r=new RegExp(`^${t}.`);return e.replace(r,"")}const r=e.split(".");return r.length>1?(r.shift(),r.join(".")):e},wr={device:{device:!0},"digit.send":{sendDigit:!0},end:{end:!0},"layout.set":{setLayout:!0},screenshare:{screenshare:!0},"vmuted.hide.on":{vmutedHide:{on:!0}},"vmuted.hide.off":{vmutedHide:{off:!0}},"lock.on":{lock:{on:!0}},"lock.off":{lock:{off:!0}},"member.position.set":{member:{position:!0}},"member.meta":{member:{meta:!0}},"member.remove":{member:{remove:!0}},"member.microphone.volume.set":{member:{microphoneVolume:!0}},"member.microphone.sensitivity.set":{member:{microphoneSensitivity:!0}},"member.speaker.volume.set":{member:{speakerVolume:!0}},"member.deaf.on":{member:{deaf:{on:!0}}},"member.deaf.off":{member:{deaf:{off:!0}}},"member.mute.audio.on":{member:{muteAudio:{on:!0}}},"member.mute.audio.off":{member:{muteAudio:{off:!0}}},"member.mute.video.on":{member:{muteVideo:{on:!0}}},"member.mute.video.off":{member:{muteVideo:{off:!0}}},"member.raisehand.on":{member:{raisehand:{on:!0}}},"member.raisehand.off":{member:{raisehand:{off:!0}}},"self.position.set":{self:{position:!0}},"self.meta":{self:{meta:!0}},"self.remove":{self:{remove:!0}},"self.microphone":{self:{microphoneVolume:!0,microphoneSensitivity:!0}},"self.microphone.volume.set":{self:{microphoneVolume:!0}},"self.microphone.sensitivity.set":{self:{microphoneSensitivity:!0}},"self.speaker.volume.set":{self:{speakerVolume:!0}},"self.deaf.on":{self:{deaf:{on:!0}}},"self.deaf.off":{self:{deaf:{off:!0}}},"self.mute.audio.on":{self:{muteAudio:{on:!0}}},"self.mute.audio.off":{self:{muteAudio:{off:!0}}},"self.mute.video.on":{self:{muteVideo:{on:!0}}},"self.mute.video.off":{self:{muteVideo:{off:!0}}},"self.raisehand.on":{self:{raisehand:{on:!0}}},"self.raisehand.off":{self:{raisehand:{off:!0}}}},Sr=e=>e instanceof Object,kr=e=>Object.entries(wr).filter((([t])=>t.startsWith(e))).map((([e,t])=>t)),Ir=(e,t)=>{const r=qt({},e);for(const o in t)r[o]=r[o]&&Sr(e[o])&&Sr(t[o])?Ir(e[o],t[o]):t[o];return r},Cr=/^(ws|wss):\/\//,Er=(e,t,r)=>{let o=null;return Promise.race([e,new Promise(((e,i)=>o=setTimeout(i,t,r)))]).finally((()=>clearTimeout(o)))},Mr=["video.member.updated","video.member.talking"],Pr=["video.room.joined","video.track","video.active","video.answering","video.destroy","video.early","video.hangup","video.held","video.new","video.purge","video.recovering","video.requesting","video.ringing","video.trying","video.media.connected","video.media.reconnecting","video.media.disconnected","video.microphone.updated","video.camera.updated","video.speaker.updated","video.microphone.disconnected","video.camera.disconnected","video.speaker.disconnected"],Tr=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Pr.includes(t)||(e=>e.includes(er))(t)||xr(t)||(e=>e.includes("session."))(t)?null:Mr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},xr=e=>e.includes(Zt),Rr=e=>void 0!==e&&"jti"in e,Or=e=>{var t;return qt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Ar=e=>qt({jsonrpc:"2.0"},e),jr={major:3,minor:0,revision:0},Lr={major:4,minor:0,revision:0},Dr=e=>Or({method:"signalwire.connect",params:qt({version:jr,event_acks:!0},e)}),Vr=e=>Or({method:"signalwire.reauthenticate",params:{authentication:e}}),Wr={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},Nr=e=>{if(e.hasOwnProperty("dialogParams")){const t=Jt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in Wr)e&&t.hasOwnProperty(e)&&(t[Wr[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Ur=e=>(t={})=>Or({method:e,params:Nr(t)}),$r=Ur("verto.invite"),zr=Ur("verto.bye"),Br=Ur("verto.modify"),Hr=Ur("verto.info"),Fr=Ur("verto.answer"),qr=Ur("verto.subscribe"),Kr=Ur("verto.pong"),Jr=(e,t)=>Ar({id:e,result:{method:t}}),Gr={};Gt(Gr,{authErrorAction:()=>io,authExpiringAction:()=>so,authSuccessAction:()=>no,createAction:()=>Xr,destroyAction:()=>ro,getCustomSagaActionType:()=>po,initAction:()=>to,makeCustomSagaAction:()=>mo,reauthAction:()=>oo,sessionDisconnectedAction:()=>co,sessionForceCloseAction:()=>uo,sessionReconnectingAction:()=>lo,socketMessageAction:()=>ao});var Qr={};function Xr(e,t){function r(...r){if(t){let o=t(...r);if(!o)throw new Error("prepareAction did not return an object");return qt(qt({type:e,payload:o.payload},"meta"in o&&{meta:o.meta}),"error"in o&&{error:o.error})}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>t.type===e,r}Gt(Qr,{configureStore:()=>eo,createAction:()=>Xr}),Xt(Qr,V);var Yr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?L:L.apply(null,arguments)},Zr=!0;function eo(e){const t=function(){return[]},{reducer:r,middleware:o=t(),devTools:i=!0,preloadedState:n,enhancers:s}=e||{};let a;if("function"==typeof r)a=r;else{if(!function(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=t;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return t===r}(r))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');a=A(r)}let c=o;"function"==typeof c&&(c=c(t));const d=D(...c);let l=L;i&&(l=Yr(qt({trace:!Zr},"object"==typeof i&&i)));let u=[d];return Array.isArray(s)?u=[d,...s]:"function"==typeof s&&(u=s(u)),O(a,n,l(...u))}var to=Xr("swSdk/init"),ro=Xr("swSdk/destroy"),oo=Xr("swSdk/reauth"),io=Xr("auth/error"),no=Xr("auth/success"),so=Xr("auth/expiring"),ao=Xr("socket/message"),co=Xr("session.disconnected"),lo=Xr("session.reconnecting"),uo=Xr("session.forceClose"),ho=(e,t)=>`${t.type}/${e}`,mo=(e,t)=>Kt(qt({},t),{type:ho(e,t)}),po=(e,t)=>ho(e,t);function go(e){const t={},r=[];let o;const i={addCase(e,r){const o="string"==typeof e?e:e.type;if(o in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[o]=r,i},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),i),addDefaultCase:e=>(o=e,i)};return e(i),[t,r,o]}var fo=({name:e="",initialState:t,reducers:r,extraReducers:o})=>function(e){const{name:t}=e;if(!t)throw new Error("`name` is a required option for createSlice");const r=e.initialState,o=e.reducers||{},i=Object.keys(o),n={},s={},a={};function c(){const[t={},o=[],i]="function"==typeof e.extraReducers?go(e.extraReducers):[e.extraReducers],n=qt(qt({},t),s);return function(e,t,r=[],o){let i,[n,s,a]="function"==typeof t?go(t):[t,r,o];function c(e=i(),t){let r=[n[t.type],...s.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===r.filter((e=>!!e)).length&&(r=[a]),r.reduce(((e,r)=>r?r(e,t):e),e)}return i="function"==typeof e?()=>e():()=>e,c.getInitialState=i,c}(r,n,o,i)}let d;return i.forEach((e=>{const r=o[e],i=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,n[e]=c,s[i]=c,a[e]=d?Xr(i,d):Xr(i)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:n,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(ro.type,(()=>t)),"function"==typeof o&&o(e)}});function vo(e){return[to.type,oo.type].includes(e.type)}var yo=fo({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,o;return Kt(qt({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(o=null==t?void 0:t.ice_servers)?o:[]})},authStatus:(e,{payload:t})=>Kt(qt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Kt(qt({},e),{authState:t})},extraReducers:e=>{e.addCase(io.type,((e,{payload:t})=>Kt(qt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(vo,(e=>Kt(qt({},e),{authStatus:"authorizing"})))}}),{actions:bo,reducer:_o}=yo,wo=Symbol("BaseSession"),So=class{constructor(e){var t,r;this.options=e,Yt(this,"__sw_symbol",wo),Yt(this,"uuid",w()),Yt(this,"WebSocketConstructor"),Yt(this,"CloseEventConstructor"),Yt(this,"agent"),Yt(this,"connectVersion",jr),Yt(this,"_rpcConnectResult"),Yt(this,"_requests",new Map),Yt(this,"_socket",null),Yt(this,"_host","wss://relay.signalwire.com"),Yt(this,"_executeTimeoutMs",1e4),Yt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Yt(this,"_executeQueue",new Set),Yt(this,"_swConnectError",Symbol.for("sw-connect-error")),Yt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Yt(this,"_checkPingDelay",15e3),Yt(this,"_checkPingTimer",null),Yt(this,"_reconnectTimer"),Yt(this,"_status","unknown"),Yt(this,"_sessionChannel"),Yt(this,"wsOpenHandler"),Yt(this,"wsCloseHandler"),Yt(this,"wsErrorHandler");const{host:o,logLevel:i="info",sessionChannel:n}=e;o&&(this._host=(e=>`${Cr.test(e)?"":"wss://"}${e}`)(o)),n&&(this._sessionChannel=n),i&&(null==(r=(t=this.logger).setLevel)||r.call(t,i)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return e.signature}}get logger(){return dr()}get connecting(){var e;return 0===(null==(e=this._socket)?void 0:e.readyState)}get connected(){var e;return 1===(null==(e=this._socket)?void 0:e.readyState)}get closing(){var e;return 2===(null==(e=this._socket)?void 0:e.readyState)}get closed(){return!this._socket||3===this._socket.readyState}get status(){return this._status}get idle(){return"idle"===this._status}get ready(){return!Boolean(this.idle||!this.connected)}set token(e){this.options.token=e}connect(){if(!(null==this?void 0:this.WebSocketConstructor))throw new Error("Missing WebSocketConstructor");if(!(null==this?void 0:this.CloseEventConstructor))throw new Error("Missing CloseEventConstructor");this._clearTimers(),this.connecting||this.connected?this.logger.warn("Session already connected."):(this._removeSocketListeners(),this.destroySocket(),this._clearCheckPingTimer(),this._socket=this._createSocket(),this._addSocketListeners())}_createSocket(){return new this.WebSocketConstructor(this._host)}destroySocket(){this._socket&&(this._socket.close(),this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"})),this._socket=null)}_addSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to add listeners");this._removeSocketListeners(),this._socket.addEventListener("open",this.wsOpenHandler),this._socket.addEventListener("close",this.wsCloseHandler),this._socket.addEventListener("error",this.wsErrorHandler),this._socket.addEventListener("message",this._onSocketMessage)}_removeSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to remove listeners");this._socket.removeEventListener("open",this.wsOpenHandler),this._socket.removeEventListener("close",this.wsCloseHandler),this._socket.removeEventListener("error",this.wsErrorHandler),this._socket.removeEventListener("message",this._onSocketMessage)}disconnect(){this._socket&&!this.closing?(this._status="disconnecting",this._checkCurrentStatus()):this.logger.debug("Session not connected or already in closing state.")}execute(e){if("disconnecting"===this._status)return this.logger.warn("Reject request because the session is disconnecting",e),Promise.reject({code:"400",message:"The SDK session is disconnecting"});if("disconnected"===this._status)return Promise.reject({code:"400",message:"The SDK is disconnected"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),Er(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this._checkCurrentStatus(),this.logger.error("Request Timeout",e),"disconnected"===this.status)return this.logger.debug("Request failed because the session is disconnected",this.status,this._socket);this._closeConnection("reconnecting")}))):(this._addToExecuteQueue(e),this.connect(),t)}get _connectParams(){return{agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}}}async authenticate(){var e,t;const r=this._connectParams;this._relayProtocolIsValid()&&(r.protocol=this.relayProtocol),(null==(e=this.options.topics)?void 0:e.length)?r.contexts=this.options.topics:(null==(t=this.options.contexts)?void 0:t.length)&&(r.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(Dr(r))}authError(e){this._removeSocketListeners(),this.dispatch(io({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._status="unknown",this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(no())}catch(e){if(e===this._swConnectError||e===this._executeConnectionClosed)return void this.logger.debug("Invalid connect or connection closed. Waiting for retry.");this.logger.error("Auth Error",e),this.authError(e)}}_onSocketError(e){this.logger.debug("_onSocketError",e)}_onSocketClose(e){this.logger.debug("_onSocketClose",e.type,e.code,e.reason),"disconnected"!==this._status&&(this._status="reconnecting",this.dispatch(lo()),this._clearTimers(),this._clearPendingRequests(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_clearPendingRequests(){this.logger.debug("_clearPendingRequests",this._requests.size),this._requests.forEach((({reject:e})=>{e(this._executeConnectionClosed)}))}_onSocketMessage(e){const t=this.decode(e.data);if(this.logger.wsTraffic({type:"recv",payload:t}),(e=>!(e=>Boolean(e.method))(e))(t)){const e=this._requests.get(t.id);if(e){const{rpcRequest:r,resolve:o,reject:i}=e;this._requests.delete(t.id);const{result:n,error:s}=(({response:e,request:t})=>{const{result:r={},error:o}=e;return o?{error:o}:"signalwire.connect"===t.method?{result:r}:pr(e)})({response:t,request:r});return this._checkCurrentStatus(),s?i(s):o(n)}return this.logger.warn("Unknown request for",t)}switch(t.method){case"signalwire.ping":return this._pingHandler(t);case"signalwire.disconnect":this.execute((r=t.id,Ar({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this._eventAcknowledgingHandler(t).catch((e=>this.logger.error("Event Acknowledging Error",e))),this.dispatch(ao(t))}var r}dispatch(e){if(!this._sessionChannel)throw new Error("Session channel does not exist");this._sessionChannel.put(e)}_relayProtocolIsValid(){var e;return this.signature&&(null==(e=null==this?void 0:this.relayProtocol)?void 0:e.split("_")[1])===this.signature}encode(e){return JSON.stringify(e)}decode(e){return(e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}})(e)}async onSwAuthorizationState(e){this.persistSwAuthorizationState(e)}async retrieveSwAuthorizationState(){return""}async persistSwAuthorizationState(e){}_send(e){this.logger.wsTraffic({type:"send",payload:e}),this._socket.send(this.encode(e))}_addToExecuteQueue(e){this.logger.warn("Request queued waiting for session to reconnect",e),this._executeQueue.add(e)}_flushExecuteQueue(){if(this._executeQueue.size){if(!this.ready)return this.logger.warn("Session not ready to flush the queue."),void this._closeConnection("reconnecting");this.logger.debug(`${this._executeQueue.size} messages to flush`),this._executeQueue.forEach((e=>{this._send(e),this._executeQueue.delete(e)})),this._executeQueue.clear()}}_clearCheckPingTimer(){clearTimeout(this._checkPingTimer)}async _pingHandler(e){var t,r,o;this._clearCheckPingTimer(),this._checkPingTimer=setTimeout((()=>{this.logger.debug("Timeout waiting for ping"),this._closeConnection("reconnecting")}),this._checkPingDelay),await this.execute((r=e.id,o=null==(t=null==e?void 0:e.params)?void 0:t.timestamp,Ar({id:r,result:{timestamp:o||Date.now()/1e3}})))}async _eventAcknowledgingHandler(e){const{method:t,id:r}=e;return"signalwire.event"===t?this.execute((e=>Ar({id:e,result:{}}))(r)):Promise.resolve()}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(co());break;case"reconnecting":this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"}))}}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection:",e),this._status=e,this.dispatch(bo.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},ko=class extends So{constructor(e){super(e),this.options=e,Yt(this,"_expiredDiffSeconds",0),Yt(this,"_refreshTokenNotificationDiff",120),Yt(this,"_checkTokenExpirationDelay",2e4),Yt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e;if(!(null==this?void 0:this._rpcConnectResult))return 0;const{authorization:t}=this._rpcConnectResult,r=null!=(e=Rr(t)?t.fabric_subscriber.expires_at:null==t?void 0:t.expires_at)?e:0;if("string"==typeof r){const e=Date.parse(r);if(!isNaN(e))return Math.floor(e/1e3)}return r}get expiresIn(){const e=Math.floor(Date.now()/1e3);return this.expiresAt-e}get expired(){return this.expiresAt>0&&this.expiresIn<=this._expiredDiffSeconds}async authenticate(){const e=Kt(qt({},this._connectParams),{authentication:{jwt_token:this.options.token}});if(this._relayProtocolIsValid())e.protocol=this.relayProtocol;else{const t=await this.retrieveRelayProtocol();t&&(e.protocol=t)}if(e.protocol){const t=await this.retrieveSwAuthorizationState();t&&(e.authorization_state=t)}try{this._rpcConnectResult=await this.execute(Dr(e)),await this.persistRelayProtocol(),await this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute(Vr(e))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}async _checkTokenExpiration(){if(!this.expiresAt)return;const e=this.options.onRefreshToken;if(this.expiresIn<=this._refreshTokenNotificationDiff)if(this.dispatch(so()),"function"==typeof e)try{const t=await e();this.dispatch(oo({token:t}))}catch(e){this.logger.error(e)}else this.logger.warn("The token is going to expire!");clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay))}},Io={};Gt(Io,{authErrorAction:()=>io,authExpiringAction:()=>so,authSuccessAction:()=>no,configureStore:()=>Xo,connect:()=>Go,createAction:()=>Xr,createCatchableSaga:()=>Oo,createRestartableSaga:()=>xo,destroyAction:()=>ro,eventChannel:()=>lt,getCustomSagaActionType:()=>po,initAction:()=>to,makeCustomSagaAction:()=>mo,reauthAction:()=>oo,sessionDisconnectedAction:()=>co,sessionForceCloseAction:()=>uo,sessionReconnectingAction:()=>lo,socketMessageAction:()=>ao});var Co=fo({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Kt(qt({},e),t.id in e.byId?{byId:Kt(qt({},e.byId),{[t.id]:qt(qt({},e.byId[t.id]),t)})}:{byId:Kt(qt({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>Kt(qt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,o])=>(t.ids.includes(r)||(e[r]=o),e)),{})})}}),{actions:Eo,reducer:Mo}=Co,Po=(0,Qr.combineReducers)({components:Mo,session:_o}),To={};Gt(To,{createCatchableSaga:()=>Oo,createRestartableSaga:()=>xo,eventChannel:()=>lt});var xo=e=>function*(){!function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];var i;i=He.apply(void 0,[e].concat(r)),Ne(Le,Q({},i.payload,{detached:!0}))}((function*(){for(;;)try{dr().debug("Run a restartable saga"),yield Be(e),dr().debug("One of the restartable saga has ended. Restarting..")}catch(e){dr().error("Restartable Saga Error",e)}}))},Ro=e=>dr().error("Catchable Saga Error",e),Oo=(e,t=Ro)=>function*(...r){try{yield Be(e,...r)}catch(e){t(e)}},Ao=e=>hr(null==e?void 0:e.event_type),jo=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},Lo=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*Do({sessionChannel:e,swEventChannel:t,session:r}){function*o(e){yield $e(t,yr(e)),Ao(e)||jo(e)||(Lo(e)?r.onSwAuthorizationState(e.params.authorization_state):yield $e({type:e.event_type,payload:e}))}dr().debug("sessionChannelWatcher [started]");const i=Oo((function*(e){if(e.type!==ao.type)return void(yield $e(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return dr().debug(`Unknown message: ${t}`,e);yield He(o,r)}),(e=>{dr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield He(i,t)}}catch(e){dr().error("sessionChannelWorker error:",e)}finally{dr().debug("sessionChannelWorker [finally]")}}var Vo=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Yt(this,"name","AuthError"),Object.setPrototypeOf(this,Vo.prototype)}},Wo=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Yt(this,"name","HttpError"),Object.setPrototypeOf(this,Wo.prototype)}};function*No({initSession:e,sessionEmitter:t,userOptions:r,channels:o}){var i;dr().debug("sessionSaga [started]");const n=e(),s=o.swEventChannel,a=o.sessionChannel;let c=[];if(null==(i=r.workers)?void 0:i.length)try{const e=r.workers.map((e=>Be(xo(e))));c=yield function(e){var t=Ne(Ae,e);return t.combinator=!0,t}(e)}catch(e){dr().error("Error running custom workers",e)}const d=yield He(Do,{session:n,sessionChannel:a,swEventChannel:s}),l=yield He($o,{session:n,sessionEmitter:t,sessionChannel:a,userOptions:r});n.connect(),yield Ue(ro.type),n.disconnect(),yield Ue(co.type),t.emit("session.disconnected"),l.cancel(),d.cancel(),c.forEach((e=>e.cancel())),s.close(),a.close(),dr().debug("sessionSaga [ended]")}function*Uo({session:e,token:t,sessionEmitter:r}){try{e.reauthenticate&&(e.token=t,yield Be(e.reauthenticate),yield $e(bo.connected(e.rpcConnectResult)),r.emit("session.connected"))}catch(t){dr().error("Reauthenticate Error",t),e.authError(t)}}function*$o(e){dr().debug("sessionStatusWatcher [started]");const{session:t,sessionEmitter:r}=e;try{for(;;){const o=yield Ue([no.type,io.type,so.type,oo.type,lo.type,uo.type]);switch(dr().debug("sessionStatusWatcher",o.type,o.payload),o.type){case no.type:yield $e(bo.connected(t.rpcConnectResult)),r.emit("session.connected");break;case io.type:yield He(zo,Kt(qt({},e),{action:o}));break;case so.type:r.emit("session.expiring");break;case oo.type:yield He(Uo,{session:t,token:o.payload.token,sessionEmitter:r});break;case lo.type:r.emit("session.reconnecting");break;case uo.type:t.forceClose()}}}finally{(yield qe())&&dr().debug("sessionStatusWatcher [cancelled]")}}function*zo(e){dr().debug("sessionAuthErrorSaga [started]");try{const{action:t,sessionEmitter:r}=e,{error:o}=t.payload,i=o?new Vo(o.code,o.message):new Error("Unauthorized");r.emit("session.auth_error",i)}finally{(yield qe())&&dr().debug("sessionAuthErrorSaga [cancelled]")}}var Bo={};Gt(Bo,{getAuthError:()=>Ko,getAuthState:()=>Jo,getAuthStatus:()=>qo,getIceServers:()=>Ho,getSession:()=>Fo});var Ho=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Fo=e=>e.session,qo=({session:e})=>e.authStatus,Ko=({session:e})=>e.authError,Jo=({session:e})=>e.authState,Go=e=>{const{sessionListeners:t={},store:r,Component:o,customSagas:i=[]}=e,n=Object.keys(t);return e=>{const s=new o(Kt(qt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),o=Fo(e);for(const e of n){if(!1===c)return;const r=`session.${e}`,i=a.get(r),n=o[e];if(void 0!==n&&i!==n){a.set(r,n);const i=t[e];"string"==typeof i?s[i](o):"function"==typeof i&&i(o)}}})),l=null==i?void 0:i.map((e=>r.runSaga(e,{instance:s,runSaga:r.runSaga})));return s.destroyer=()=>{c=!1,d(),a.clear(),(null==l?void 0:l.length)&&l.forEach((e=>e.cancel()))},s}},Qo=()=>new Dt;Xt(Io,Qr);var Xo=e=>{var t;const{userOptions:r,SessionConstructor:o,preloadedState:i={},runRootSaga:n=!0}=e,s=jt({sagaMonitor:r.sagaMonitor}),a=ut(),c=dt(),d={swEventChannel:a,sessionChannel:c},l=eo({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:Po,preloadedState:i,middleware:e=>e().concat(s)}),u=(()=>{const e=new Map;return{get:t=>e.get(t),set:(t,r)=>(e.set(t,r),e),remove:t=>(e.delete(t),e),getAll:()=>Array.from(e.entries()),deleteAll:()=>(e.clear(),e)}})(),{initSession:h,getSession:m,sessionEmitter:p}=(e=>{const{SessionConstructor:t,userOptions:r,sessionChannel:o}=e,i=Qo();let n=null;return{session:n,initSession:()=>(n=new t(Kt(qt({},r),{sessionChannel:o})),n),getSession:()=>(n||dr().warn("Session does not exist!"),n),sessionEmitter:i}})({userOptions:r,sessionChannel:c,SessionConstructor:o});if(n){const e=(e=>function*({userOptions:t,channels:r}){for(dr().debug("rootSaga [started]"),t.logger&&(ir=t.logger),t.debug&&(e=>{null!=e?Object.assign(sr,e):sr={}})(t.debug);;){yield Ue(to.type);try{yield Be(No,Kt(qt({},e),{userOptions:t,channels:r}));break}catch(e){dr().error("RootSaga Error:",e)}finally{(yield qe())&&dr().debug("rootSaga [cancelled]"),dr().debug("Reboot rootSaga")}}dr().debug("rootSaga [finished]")})({initSession:h,sessionEmitter:p});s.run(e,{userOptions:r,channels:d})}return Kt(qt({},l),{runSaga:(e,t)=>s.run(e,Kt(qt({},t),{channels:d,getSession:m,instanceMap:u})),channels:d,instanceMap:u,sessionEmitter:p})},Yo=function*(e){const{initialState:t,onDone:r,onFail:o,getSession:i}=e,{requestId:n,method:s,params:a}=t,c=i();if(!c){const e=new Error("Session does not exist!");return dr().error(e),void(null==o||o(e))}try{let e=(({method:e,params:t})=>Or({method:e,params:t}))({id:n,method:s,params:a});const t=yield Be(c.execute,e);null==r||r(t)}catch(e){dr().warn("Execute error: ",e),null==o||o(e)}},Zo=e=>e,ei=Symbol("BaseComponent"),ti=class{constructor(e){this.options=e,Yt(this,"__sw_symbol",ei),Yt(this,"uuid",w()),Yt(this,"_customSagaTriggers",new Map),Yt(this,"_destroyer"),Yt(this,"eventEmitter"),Yt(this,"_runningWorkers",[]),Yt(this,"_workers",new Map),this.eventEmitter=new Dt}get __uuid(){return this.uuid}get logger(){return dr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.store.instanceMap}get emitter(){return this.eventEmitter}get sessionEmitter(){return this.store.sessionEmitter}get session(){return this.sessionEmitter}on(e,t){return this.emitter.on(e,t)}once(e,t){return this.emitter.once(e,t)}off(e,t){return this.emitter.off(e,t)}removeAllListeners(e){return e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.emitter)}eventNames(){return this.emitter.eventNames()}sessionEventNames(){return this.sessionEmitter.eventNames()}getSubscriptions(){return Tr(this.eventNames())}emit(e,...t){return this.emitter.emit(e,...t)}listenerCount(e){return this.emitter.listenerCount(e)}destroy(){var e;null==(e=this._destroyer)||e.call(this),this.removeAllListeners(),this.detachWorkers()}execute({method:e,params:t},{transformParams:r=Zo,transformResolve:o=Zo,transformReject:i=Zo}={transformParams:Zo,transformResolve:Zo,transformReject:Zo}){return new Promise(((n,s)=>{const a=w();this.runWorker("executeActionWorker",{worker:Yo,onDone:e=>n(o(e)),onFail:e=>s(i(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const o=w();this._customSagaTriggers.set(o,{resolve:t,reject:r}),this.store.dispatch(qt({dispatchId:o},mo(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const o=this._customSagaTriggers.get(e);o&&(o[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}getStateProperty(e){return this[e]}get _sessionAuthStatus(){return qo(this.store.getState())}get _sessionAuthState(){return Jo(this.store.getState())}_waitUntilSessionAuthorized(){switch(qo(this.store.getState())){case"authorized":return Promise.resolve(this);case"unknown":case"authorizing":return new Promise(((e,t)=>{const r=this.store.subscribe((()=>{const o=qo(this.store.getState()),i=Ko(this.store.getState());if("authorized"===o)e(this),r();else if("unauthorized"===o){const e=i?new Vo(i.code,i.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}runWorker(e,t){return this._workers.has(e)?dr().warn(`[runWorker] Worker with name ${e} has already been registerd.`):this._setWorker(e,t),this._attachWorker(e,t)}_setWorker(e,t){this._workers.set(e,t)}_attachWorker(e,t){var r=t,{worker:o}=r,i=Jt(r,["worker"]);const n=this.store.runSaga(o,qt({instance:this,runSaga:this.store.runSaga},i));return this._runningWorkers.push(n),this._workers.delete(e),n}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},ri=class extends ti{constructor(e){super(e),this.options=e}connect(){const e=qo(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(to()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(ro())}removeAllListeners(e){return this.sessionEventNames().forEach((e=>{this.sessionEmitter.off(e)})),super.removeAllListeners(e)}},oi=class extends ti{constructor(e){super(e),this.options=e,Yt(this,"subscribeMethod","signalwire.subscribe"),Yt(this,"subscribeParams",{}),Yt(this,"_latestExecuteParams");const t=()=>{this._latestExecuteParams=void 0};super.session.on("session.connected",t),super.session.on("session.disconnected",t),super.session.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:Kt(qt({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},ii={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(ii).map((e=>`video.member.updated.${e}`));var ni=fr(ii);Object.keys(ni).map((e=>`member.updated.${e}`));var si={};Gt(si,{getComponent:()=>ai,getComponentsById:()=>ci,getComponentsToCleanup:()=>di});var ai=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},ci=({components:e})=>e.byId,di=e=>{const t=ci(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r};Object.keys({audioMuted:!0,videoMuted:!0,deaf:!0,visible:!0,inputVolume:1,outputVolume:1,inputSensitivity:1}).map((e=>`member.updated.${e}`));var li={};Gt(li,{RoomSessionPlaybackAPI:()=>on,RoomSessionRecordingAPI:()=>tn,RoomSessionStreamAPI:()=>sn,audioMuteMember:()=>Li,audioUnmuteMember:()=>Di,createRoomSessionPlaybackObject:()=>nn,createRoomSessionRecordingObject:()=>rn,createRoomSessionStreamObject:()=>an,deafMember:()=>Ni,deleteMemberMeta:()=>Zi,deleteMeta:()=>Ri,demote:()=>qi,getLayouts:()=>pi,getMemberMeta:()=>Qi,getMembers:()=>gi,getMeta:()=>Pi,getPlaybacks:()=>Ci,getRecordings:()=>ki,getStreams:()=>Oi,hideVideoMuted:()=>yi,lock:()=>_i,play:()=>Ei,promote:()=>Fi,removeAllMembers:()=>Gi,removeMember:()=>Ji,setDeaf:()=>$i,setHideVideoMuted:()=>Si,setInputSensitivityMember:()=>Hi,setInputVolumeMember:()=>zi,setLayout:()=>fi,setMemberMeta:()=>Xi,setMemberPosition:()=>Ki,setMeta:()=>Ti,setOutputVolumeMember:()=>Bi,setPositions:()=>vi,setPrioritizeHandraise:()=>ji,setRaisedHand:()=>en,showVideoMuted:()=>bi,startRecording:()=>Ii,startStream:()=>Ai,undeafMember:()=>Ui,unlock:()=>wi,updateMemberMeta:()=>Yi,updateMeta:()=>xi,videoMuteMember:()=>Vi,videoUnmuteMember:()=>Wi});var ui=()=>{},hi=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:qt({room_session_id:this.roomSessionId},r)},t)}}),mi=(e,t={})=>({value:function(r={}){var o=r,{memberId:i}=o,n=Jt(o,["memberId"]);return this.execute({method:e,params:qt({room_session_id:this.roomSessionId,member_id:i||this.memberId},n)},t)}}),pi=hi("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),gi=hi("video.members.get",{transformResolve:e=>({members:e.members})}),fi=hi("video.set_layout",{transformResolve:ui}),vi=hi("video.set_position",{transformResolve:ui}),yi=hi("video.hide_video_muted",{transformResolve:ui}),bi=hi("video.show_video_muted",{transformResolve:ui}),_i=hi("video.lock",{transformResolve:ui}),wi=hi("video.unlock",{transformResolve:ui}),Si={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:ui})}},ki={value:function(){return new Promise((async(e,t)=>{try{const{recordings:t}=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}):t=rn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({recordings:r})}catch(e){t(e)}}))}},Ii={value:function(){return new Promise((async(e,t)=>{try{const{recording:t}=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}}),r=rn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},Ci={value:function(){return new Promise((async(e,t)=>{try{const{playbacks:t}=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}):t=nn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({playbacks:r})}catch(e){t(e)}}))}},Ei={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,i=Jt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||o,{playback:n}=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:t},i)}),s=nn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:n}});this.instanceMap.set(s.id,s),e(s)}catch(e){t(e)}}))}},Mi=e=>hi(e,{transformResolve:ui,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Jt(t,["room_session_id"])}}}),Pi=hi("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Ti=Mi("video.set_meta"),xi=Mi("video.update_meta"),Ri={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},Oi={value:function(){return new Promise((async(e,t)=>{try{const{streams:t}=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}):t=an({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({streams:r})}catch(e){t(e)}}))}},Ai={value:function(e){return new Promise((async(t,r)=>{try{const{stream:r}=await this.execute({method:"video.stream.start",params:qt({room_session_id:this.roomSessionId},e)}),o=an({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:r}});this.instanceMap.set(o.id,o),t({stream:o})}catch(e){r(e)}}))}},ji={value:function(e){return this.execute({method:"video.prioritize_handraise",params:{room_session_id:this.roomSessionId,enable:e}})}},Li=mi("video.member.audio_mute",{transformResolve:ui}),Di=mi("video.member.audio_unmute",{transformResolve:ui}),Vi=mi("video.member.video_mute",{transformResolve:ui}),Wi=mi("video.member.video_unmute",{transformResolve:ui}),Ni=mi("video.member.deaf",{transformResolve:ui}),Ui=mi("video.member.undeaf",{transformResolve:ui}),$i={value:function(e){return this.execute({method:e?"video.member.deaf":"video.member.undeaf",params:{room_session_id:this.roomSessionId,member_id:this.memberId}},{transformResolve:ui})}},zi=mi("video.member.set_input_volume",{transformResolve:ui}),Bi=mi("video.member.set_output_volume",{transformResolve:ui}),Hi=mi("video.member.set_input_sensitivity",{transformResolve:ui}),Fi={value:function(e){var t=e,{memberId:r,mediaAllowed:o,joinAudioMuted:i,joinVideoMuted:n}=t,s=Jt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:qt({room_session_id:this.roomSessionId,member_id:r,media_allowed:o,join_audio_muted:i,join_video_muted:n},s)},{transformResolve:ui})}},qi={value:function({memberId:e,mediaAllowed:t}){return this.execute({method:"video.member.demote",params:{room_session_id:this.roomSessionId,member_id:e,media_allowed:t}},{transformResolve:ui})}},Ki=mi("video.member.set_position",{transformResolve:ui}),Ji={value:function(e){var t=e,{memberId:r}=t,o=Jt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:qt({room_session_id:this.roomSessionId,member_id:r},o)},{transformResolve:ui})}},Gi={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:ui})}},Qi=mi("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Xi=mi("video.member.set_meta",{transformResolve:ui}),Yi=mi("video.member.update_meta",{transformResolve:ui}),Zi=mi("video.member.delete_meta",{transformResolve:ui}),en={value:function(e){const{raised:t=!0,memberId:r=this.memberId}=e||{};if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:t?"video.member.raisehand":"video.member.lowerhand",params:{room_session_id:this.roomSessionId,member_id:r}},{transformResolve:ui})}},tn=class extends ti{constructor(e){super(e),Yt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.recording.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.recording.state}get duration(){return this._payload.recording.duration}get startedAt(){if(this._payload.recording.started_at)return new Date(1e3*this._payload.recording.started_at)}get endedAt(){if(this._payload.recording.ended_at)return new Date(1e3*this._payload.recording.ended_at)}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.recording.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.recording.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.recording.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}},rn=e=>Go({store:e.store,Component:tn})(e),on=class extends ti{constructor(e){super(e),Yt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.playback.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get url(){return this._payload.playback.url}get state(){return this._payload.playback.state}get volume(){return this._payload.playback.volume}get startedAt(){if(this._payload.playback.started_at)return new Date(1e3*this._payload.playback.started_at)}get endedAt(){if(this._payload.playback.ended_at)return new Date(1e3*this._payload.playback.ended_at)}get position(){return this._payload.playback.position}get seekable(){return this._payload.playback.seekable}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.playback.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.playback.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.playback.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async setVolume(e){await this.execute({method:"video.playback.set_volume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),volume:e}})}async seek(e){await this.execute({method:"video.playback.seek_absolute",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async forward(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async rewind(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:-Math.abs(e)}})}},nn=e=>Go({store:e.store,Component:on})(e),sn=class extends ti{constructor(e){super(e),Yt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.stream.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.stream.state}get duration(){return this._payload.stream.duration}get url(){return this._payload.stream.url}get startedAt(){if(this._payload.stream.started_at)return new Date(1e3*this._payload.stream.started_at)}get endedAt(){if(this._payload.stream.ended_at)return new Date(1e3*this._payload.stream.ended_at)}setPayload(e){this._payload=e}async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},an=e=>Go({store:e.store,Component:sn})(e),cn={};Gt(cn,{BaseChatAPI:()=>Pn,BaseChatConsumer:()=>Mn,ChatMember:()=>Rn,ChatMessage:()=>xn,applyCommonMethods:()=>jn,createBaseChatObject:()=>Tn,getMemberState:()=>bn,getMembers:()=>fn,getMessages:()=>gn,publish:()=>pn,setMemberState:()=>yn});var dn=e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]},ln=e=>Array.isArray(e)||"string"==typeof e,un=()=>{},hn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),mn=(e,t={})=>({value:function(r={}){var o=r,{memberId:i}=o,n=Jt(o,["memberId"]);return this.execute({method:e,params:qt({member_id:i},n)},t)}}),pn=hn("chat.publish",{transformResolve:un}),gn=hn("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>fr(e))),cursor:e.cursor})}),fn=hn("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>fr(e)))})}),vn=e=>{const t=ln(null==e?void 0:e.channels)?dn(e.channels):void 0;return Kt(qt({},e),{channels:t})},yn=mn("chat.member.set_state",{transformResolve:un,transformParams:vn}),bn=mn("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:vn}),_n={};Gt(_n,{BasePubSubConsumer:()=>kn,PubSubMessage:()=>Cn,createBasePubSubObject:()=>In});var wn=function*(e){dr().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case`${tr}.channel.message`:{const{channel:e,message:r}=o,i=Jt(r,["member"]),n=fr(Kt(qt({},i),{channel:e})),s=new Cn(n);t.emit("message",s);break}default:dr().warn(`Unknown pubsub event: "${r}"`)}}const i=e=>e.type.startsWith(`${tr}.`);for(;;){const e=yield Ue(r,i);yield He(o,e)}dr().trace("pubSubWorker ended")},Sn=e=>e.map((e=>({name:e}))),kn=class extends oi{constructor(e){super(e),Yt(this,"subscribeMethod",`${tr}.subscribe`),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:wn})}_getChannelsParam(e,t){const r=!e||Array.isArray(e)?e:[e];if(!Array.isArray(r)||0===r.length)throw new Error(`Please specify one or more channels when calling .${t}()`);return{channels:Sn(r)}}_setSubscribeParams(e){this.subscribeParams=qt(qt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return qt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return qt({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}getSubscriptions(){const e=this.eventNames().map((e=>`${tr}.${String(e)}`));return Tr(e)}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const o=this.getSubscriptions();if(o.length>0){const e={method:`${tr}.unsubscribe`,params:Kt(qt({},t),{events:o})};try{await this.execute(e)}catch(e){return r(e)}}else this.logger.warn("`unsubscribe()` was called without any listeners attached.");return e()}))}updateToken(e){return new Promise(((t,r)=>{this.session.once("session.auth_error",(e=>{r(e)})),this.session.once("session.connected",(()=>{t()})),this.store.dispatch(Gr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${tr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(Jo);return e&&"channels"in e&&e.channels?e.channels:{}}},In=e=>Go({store:e.store,Component:kn})(e),Cn=class{constructor(e){this.payload=e}get id(){return this.payload.id}get channel(){return this.payload.channel}get content(){return this.payload.content}get meta(){return this.payload.meta}get publishedAt(){return this.payload.publishedAt}},En=function*(e){dr().trace("chatWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case"chat.channel.message":{const{channel:e,message:r}=o,i=fr(Kt(qt({},r),{channel:e})),n=new xn(i);t.emit("message",n);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=o,i=fr(e),n=new Rn(i),s=_r(r);t.emit(s,n);break}default:dr().warn(`Unknown chat event: "${r}"`)}}const i=e=>e.type.startsWith("chat.");for(;;){const e=yield Ue(r,i);yield He(o,e)}dr().trace("chatWorker ended")},Mn=class extends kn{constructor(e){super(e),Yt(this,"subscribeMethod","chat.subscribe")}initWorker(){this.runWorker("chat",{worker:En})}},Pn=br(Mn,{publish:pn,getMembers:fn,getMessages:gn,setMemberState:yn,getMemberState:bn}),Tn=e=>Go({store:e.store,Component:Pn})(e),xn=class extends Cn{get member(){return this.payload.member}},Rn=class{constructor(e){this.payload=e}get id(){return this.payload.id}get channel(){return this.payload.channel}get state(){var e;return null!=(e=this.payload.state)?e:{}}},On=e=>{const t=ln(null==e?void 0:e.channels)?dn(e.channels):void 0;return Kt(qt({},e),{channels:t})},An=()=>{};function jn(e){return class extends e{getMembers(e){return this._client.execute({method:"chat.members.get",params:e},{transformResolve:e=>({members:e.members.map((e=>fr(e)))})})}getMessages(e){return this._client.execute({method:"chat.messages.get",params:e},{transformResolve:e=>({messages:e.messages.map((e=>fr(e))),cursor:e.cursor})})}setMemberState(e={}){var t=e,{memberId:r}=t,o=Jt(t,["memberId"]);return this._client.execute({method:"chat.member.set_state",params:qt({member_id:r},o)},{transformResolve:An,transformParams:On})}getMemberState(e={}){var t=e,{memberId:r}=t,o=Jt(t,["memberId"]);return this._client.execute({method:"chat.member.get_state",params:qt({member_id:r},o)},{transformResolve:e=>({channels:e.channels}),transformParams:On})}}}var Ln={};Gt(Ln,{memberPositionWorker:()=>Nn,memberUpdatedWorker:()=>Wn});var Dn=function*(e,t,r){const o=_r(e);r.emit(o,t)};function*Vn(e){const{action:t,memberList:r,instance:o,dispatcher:i=Dn}=e,n={};t.payload.layout.layers.forEach((e=>{var t;const o=e.member_id;if(!o)return;const i=r.get(o);i&&e.position!==(null==(t=i.member)?void 0:t.current_position)?(Un({memberList:r,memberId:o,currentPosition:e.position}),n[o]=!0):n[o]=!1}));for(const[e,t]of r)if(n[e])yield null==i?void 0:i("video.member.updated",t,o);else if(void 0===n[e]){const t=Un({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==i?void 0:i("video.member.updated",t,o)}}function*Wn({action:e,memberList:t,instance:r,dispatcher:o=Dn}){var i,n;const s=e.payload.member.id,a=Un({memberList:t,memberId:s,currentPosition:null==(n=null==(i=t.get(s))?void 0:i.member)?void 0:n.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=Kt(qt({},a),{member:qt(qt({},a.member),e.payload.member)});t.set(s,d);for(const t of c){const i=`${e.type}.${t}`;yield null==o?void 0:o(i,d,r)}yield null==o?void 0:o(e.type,d,r)}var Nn=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:i,dispatcher:n=Dn}){if(!r)return;const{swEventChannel:s}=t;let a=$n(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield Ue(s,(e=>"video.member.joined"===e.type||"video.member.updated"===e.type||"video.member.left"===e.type||"video.layout.changed"===e.type));switch(r.type){case"video.member.joined":c(r.payload);break;case"video.member.updated":c(r.payload),yield He(Wn,{action:r,channels:t,memberList:a,instance:e,getSession:o,instanceMap:i,dispatcher:n});break;case"video.member.left":a.delete(r.payload.member.id);break;case"video.layout.changed":yield He(Vn,{action:r,channels:t,memberList:a,instance:e,dispatcher:n})}}},Un=({memberList:e,memberId:t,currentPosition:r})=>{const o=e.get(t);if(!o)return;if(!r)return o;const i=Kt(qt({},o),{member:Kt(qt({},null==o?void 0:o.member),{current_position:r})});return e.set(t,i),i},$n=e=>{const t=e.room_session.members,r=new Map;return t.forEach((t=>{r.set(t.id,{room_id:e.room_session.room_id,room_session_id:e.room_session.id||e.room_session.room_session_id,member:t})})),r};Gt({},{configureFullStack:()=>qn,configureJestStore:()=>Fn,createMockedLogger:()=>Hn,createSessionChannel:()=>Qn,createSwEventChannel:()=>Gn,rpcConnectResultVRT:()=>Jn,wait:()=>Kn});var zn="8f0a119a-cda7-4497-a47d-c81493b824d4",Bn="<VRT>",Hn=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),Fn=e=>Xo(qt({userOptions:{project:zn,token:Bn,devTools:!1},SessionConstructor:So,runRootSaga:!1},e)),qn=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Dt,r=Xo({userOptions:{project:zn,token:Bn,devTools:!1},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Gr.initAction()),r.dispatch(Gr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Gr.destroyAction())}},Kn=e=>new Promise((t=>{setTimeout(t,e)})),Jn={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",project_id:"8f0a119a-cda7-4497-a47d-c81493b824d4",project:"8f0a119a-cda7-4497-a47d-c81493b824d4",scopes:["video"],scope_id:"26675883-8499-4ee9-85eb-691c4aa209f8",resource:"9c80f1e8-9430-4070-a043-937eb3a96b38",join_as:"member",user_name:"Joe",room:{name:"lobby",display_name:"Lobby",scopes:["room.self.audio_mute","room.self.audio_unmute"],meta:{}},signature:"SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q",media_allowed:"all",audio_allowed:"both",video_allowed:"both",meta:{}},protocol:"signalwire_SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q_03e8c927-8ea3-4661-86d5-778c3e03296a_8f0a119a-cda7-4497-a47d-c81493b824d4",ice_servers:[{urls:"turn.swire.io:443",credential:"sFTwvi8ShXcYNOcyYjFy3ATIUpQ=",credentialType:"password",username:"1619521908:8f0a119a-cda7-4497-a47d-c81493b824d4"}]},Gn=()=>ut(),Qn=()=>dt(),Xn=qt({},Bo);const Yn=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Zn=()=>{if(!Yn())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},es=()=>Zn().getSupportedConstraints(),ts=e=>e&&e instanceof MediaStream,rs=()=>"sinkId"in HTMLMediaElement.prototype,os=async(e,t)=>{if(null!==e)if("string"==typeof t)if(rs())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?dr().error(`You need to use HTTPS for selecting audio output device: ${e}`):dr().error(`Error: ${e}`),e}else dr().warn("Browser does not support output device selection.");else dr().warn(`Invalid speaker deviceId: '${t}'`);else dr().warn("No HTMLMediaElement to attach the speakerId")},is=e=>{var t;ts(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(ns))},ns=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},ss={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},as=e=>{if(e)return ss[e]},cs=()=>Zn().enumerateDevices(),ds=async e=>{let t=await cs().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},ls=async e=>{if("permissions"in navigator&&"function"==typeof navigator.permissions.query&&e)try{return"granted"===(await navigator.permissions.query({name:e})).state}catch(e){}return(async e=>{const t=await ds(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(dr().warn(`No ${e} devices to check for permissions!`),null)})(as(e))},us=()=>ls("camera"),hs=()=>ls("microphone"),ms=()=>ls("speaker"),ps=async(e={audio:!0,video:!0})=>{var t;try{const t=Zn().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(hs()),(null==e?void 0:e.video)&&t.push(us()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Er(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":dr().error(null!==(t=null==r?void 0:r.message)&&void 0!==t?t:"navigator.mediaDevices.getUserMedia doesn't seem to be supported.");break;case"NotFoundError":dr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":dr().error("Hardware error occurred at the operating system, browser, or Web page level which prevented access to the device. This could have been caused by having the Camera or Mic being user by another application.");break;case"OverconstrainedError":dr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),dr().info("List of available constraints:",es());break;case"NotAllowedError":dr().error("The user has mostly likely denied access to the device. This could also happen if the browsing context is insecure (using HTTP rather than HTTPS)");break;case"TypeError":0===Object.keys(e).length?dr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):dr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":dr().error("User media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.")}throw r}},gs=e=>Zn().getDisplayMedia(e),fs=async(e,t=!1)=>ys(e,t),vs=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:o,groupId:i})=>{var n;if(!e||t.targets&&!(null===(n=t.targets)||void 0===n?void 0:n.includes(o)))return!1;if(!i)return!0;const s=`${o}-${i}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(s)||!a||(r.push(s),0))}))},ys=async(e,t=!1)=>{let r;if(!1===await ls(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await ps(t)}var o;const i=await ds(as(e));return r&&is(r),!0===t?i:vs(i)},bs=()=>ys("speaker"),_s=async(e,t,r)=>{const o=await ys(r,!0);for(let r=0;r<o.length;r++){const{deviceId:i,label:n}=o[r];if(e===i||t===n)return i}return null},ws=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Ss={camera:us,microphone:hs,speaker:ms},ks=["camera","microphone","speaker"],Is=`Allowed targets are: '${ks.join("', '")}'`,Cs={speaker:rs},Es=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:ks).filter((e=>!!ks.includes(e)||(dr().warn(`We'll ignore the "${e}" target as it is not allowed. ${Is}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${Is}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Ss[e]())))).reduce(((e,r,o)=>{var i;const n=t[o];return e[!(n in Cs)||(null===(i=Cs[n])||void 0===i?void 0:i.call(Cs))?"supported":"unsupported"].push([n,!!r]),e}),{supported:[],unsupported:[]})})({targets:r});if(o.unsupported.length>0&&r.length===o.unsupported.length)throw new Error(`The platform doesn't support "${r.join(", ")}" as target/s, which means it's not possible to watch for changes on those devices.`);if(o.supported.every((([e,t])=>!t)))throw new Error("You must ask the user for permissions before being able to listen for device changes. Try calling getUserMedia() before calling `createDeviceWatcher()`.");let i=[];const n=o.supported.reduce(((e,[t,r])=>(r?e.push(t):i.push(t),e)),[]);if(n.length!==r.length){const e=o.unsupported.length>0?`The platform doesn't support "${o.unsupported.map((([e])=>e)).join(", ")}" as target/s, which means it's not possible to watch for changes on those devices. `:"",t=i.length>0?`The user hasn't granted permissions for the following targets: ${i.join(", ")}. `:"";dr().warn(`${e}${t}We'll be watching for the following targets instead: "${n.join(", ")}"`)}return dr().debug(`Watching these targets: "${n.join(", ")}"`),n})({targets:e.targets}),r=new Dt,o=await cs(),i=null==t?void 0:t.reduce(((e,t)=>{const r=as(t);return r&&e.push(r),e}),[]);let n=vs(o,{excludeDefault:!0,targets:i});return Zn().addEventListener("devicechange",(async()=>{const e=await cs(),t=n,o=vs(e,{excludeDefault:!0,targets:i});n=o;const s=((e,t)=>{const r=ws(e),o=ws(e),i=[];dr().debug("[_getDeviceListDiff] <- oldDevices",e),dr().debug("[_getDeviceListDiff] -> newDevices",t);const n=t.filter((e=>{const t=e.deviceId,n=r.get(t);return n&&(o.delete(t),e.label!==n.label&&i.push(e)),void 0===n}));return{updated:i.map((e=>({type:"updated",payload:e}))),removed:Array.from(o,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:n.map((e=>({type:"added",payload:e})))}})(t,o),a=s.added.length>0,c=s.removed.length>0,d=s.updated.length>0;(a||c||d)&&r.emit("changed",{changes:s,devices:o}),a&&r.emit("added",{changes:s.added,devices:o}),c&&r.emit("removed",{changes:s.removed,devices:o}),d&&r.emit("updated",{changes:s.updated,devices:o})})),r},Ms=()=>Es({targets:["speaker"]}),Ps=e=>"function"==typeof(null==e?void 0:e.getTracks),Ts=async e=>(await bs()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e));var xs={exports:{}};!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 r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={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;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;t.push("rtp"===r?1:"rtcp"===r?2:r),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const o=e.type;return t.push("typ"),t.push(o),"host"!==o&&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 r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\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 r;const o=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e<o.length;e++)r=o[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const o=[];Object.keys(e.parameters).forEach((t=>{o.push(void 0!==e.parameters[t]?t+"="+e.parameters[t]:t)})),t+="a=fmtp:"+r+" "+o.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="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},o=e.indexOf(":",t);return o>-1?(r.attribute=e.substring(t+1,o),r.value=e.substring(o+1)):r.attribute=e.substring(t+1),r},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 r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.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,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},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,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const o=t.matchPrefix(e+r,"a=ice-ufrag:")[0],i=t.matchPrefix(e+r,"a=ice-pwd:")[0];return o&&i?{usernameFragment:o.substring(12),password:i.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 r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},o=t.splitLines(e)[0].split(" ");r.profile=o[2];for(let i=3;i<o.length;i++){const n=o[i],s=t.matchPrefix(e,"a=rtpmap:"+n+" ")[0];if(s){const o=t.parseRtpMap(s),i=t.matchPrefix(e,"a=fmtp:"+n+" ");switch(o.parameters=i.length?t.parseFmtp(i[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+n+" ").map(t.parseRtcpFb),r.codecs.push(o),o.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(o.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))}));const i=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{i.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let o="";o+="m="+e+" ",o+=r.codecs.length>0?"9":"0",o+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",o+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",o+="c=IN IP4 0.0.0.0\r\n",o+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{o+=t.writeRtpMap(e),o+=t.writeFmtp(e),o+=t.writeRtcpFb(e)}));let i=0;return r.codecs.forEach((e=>{e.maxptime>i&&(i=e.maxptime)})),i>0&&(o+="a=maxptime:"+i+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{o+=t.writeExtmap(e)})),o},t.parseRtpEncodingParameters=function(e){const r=[],o=t.parseRtpParameters(e),i=-1!==o.fecMechanisms.indexOf("RED"),n=-1!==o.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[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]),o.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}),r.push(t),i&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:n?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.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,r.forEach((e=>{e.maxBitrate=l}))),r},t.parseRtcpParameters=function(e){const r={},o=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];o&&(r.cname=o.value,r.ssrc=o.ssrc);const i=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=i.length>0,r.compound=0===i.length;const n=t.matchPrefix(e,"a=rtcp-mux");return r.mux=n.length>0,r},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 r;const o=t.matchPrefix(e,"a=msid:");if(1===o.length)return r=o[0].substring(7).split(" "),{stream:r[0],track:r[1]};const i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return i.length>0?(r=i[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),o=t.matchPrefix(e,"a=max-message-size:");let i;o.length>0&&(i=parseInt(o[0].substring(19),10)),isNaN(i)&&(i=65536);const n=t.matchPrefix(e,"a=sctp-port:");if(n.length>0)return{port:parseInt(n[0].substring(12),10),protocol:r.fmt,maxMessageSize:i};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:i}}},t.writeSctpDescription=function(e,t){let r=[];return r="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&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,o){let i;const n=void 0!==r?r:2;return i=e||t.generateSessionId(),"v=0\r\no="+(o||"thisisadapterortc")+" "+i+" "+n+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const o=t.splitLines(e);for(let e=0;e<o.length;e++)switch(o[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return o[e].substring(2)}return r?t.getDirection(r):"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 r=t.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(xs);var Rs=xs.exports;const Os=e=>/^m=audio/.test(e),As=e=>/^m=video/.test(e),js=(e,t)=>e.includes(`\r\nm=${t}`),Ls=e=>{const t="\r\n",r=e.split(t),o=r.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(o<0)return e;const i=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[o]),n=new RegExp(`a=fmtp:${i}`),s=r.findIndex((e=>n.test(e)));return s>=0?/stereo=1;/.test(r[s])||(r[s]+="; stereo=1; sprop-stereo=1"):r[o]+=`${t}a=fmtp:${i} stereo=1; sprop-stereo=1`,r.join(t)},Ds=e=>{dr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return ps(e)},Vs=async e=>{let t=(e=>{var t;return!!(e=>{var t;return(null===(t=e.negotiateAudio)||void 0===t||t)&&(!e.remoteSdp||js(e.remoteSdp,"audio"))})(e)&&(null===(t=e.audio)||void 0===t||t)})(e);const{micLabel:r="",micId:o}=e;if(o&&t){const e=await _s(o,r,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let i=(e=>{var t;return!!(e=>{var t;return(null===(t=e.negotiateVideo)||void 0===t||t)&&(!e.remoteSdp||js(e.remoteSdp,"video"))})(e)&&(null!==(t=e.video)&&void 0!==t?t:!!e.camId)})(e);const{camLabel:n="",camId:s}=e;if(s&&i){const e=await _s(s,n,"camera").catch((e=>null));e&&("boolean"==typeof i&&(i={}),i.deviceId={exact:e})}return{audio:t,video:i}},Ws=(e,t)=>{const{disableUdpIceServers:r=!1}=t,o=e=>{const t="transport=udp";return Array.isArray(e)?e.filter((e=>!e.includes(t))):e.includes(t)?"":e};return e.map((e=>Object.assign(Object.assign({},e),{urls:r?o(e.urls):e.urls})))};class Ns{get logger(){return dr()}constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this._restartingIce=!1,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this._onEndedTrackHandler=this._onEndedTrackHandler.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&ts(this.options.localStream)&&(this._localStream=this.options.localStream),this.rtcConfigPolyfill=this.config}get options(){return this.call.options}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:Ws(this.call.iceServers,{disableUdpIceServers:this.options.disableUdpIceServers}),sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(ns(r.track),null===(t=this._localStream)||void 0===t||t.removeTrack(r.track))}catch(t){this.logger.error("RTCPeer stopTrackSender error",e,t)}}async restoreTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to restore.`);if(r.track&&"ended"!==r.track.readyState)return this.logger.info(`There is already an active ${e} track.`);const o=await Vs(this.options),i=await Ds({[e]:o[e]});if(i&&ts(i)){const o=i.getTracks().find((t=>t.kind===e));o&&(await r.replaceTrack(o),null===(t=this._localStream)||void 0===t||t.addTrack(o))}}catch(t){this.logger.error("RTCPeer restoreTrackSender error",e,t)}}getDeviceId(e){try{const t=this._getSenderByKind(e);if(!t||!t.track)return null;const{deviceId:r=null}=t.track.getSettings();return r}catch(t){return this.logger.error("RTCPeer getDeviceId error",e,t),null}}getTrackSettings(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.getSettings():null}catch(t){return this.logger.error("RTCPeer getTrackSettings error",e,t),null}}getDeviceLabel(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.label:null}catch(t){return this.logger.error("RTCPeer getDeviceLabel error",e,t),null}}restartIceWithRelayOnly(){try{if(this.isAnswer)return this.logger.warn("Skip restartIceWithRelayOnly since we need to generate answer");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.warn("RTCPeer already with iceTransportPolicy relay only");const t=Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"});this.setConfiguration(t),this.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){if(this._negotiating||this._restartingIce)return this.logger.warn("Skip restartIce");this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this._resumeTimer?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this._resumeTimer=setTimeout((()=>{this.logger.warn("Disconnecting due to RECONNECTION_ATTEMPT_TIMEOUT"),this.call.emit("media.disconnected"),this.call.leaveReason="RECONNECTION_ATTEMPT_TIMEOUT",this.call.setState("hangup")}),12e3),this.call._closeWSConnection())}resetNeedResume(){this.clearResumeTimer(),this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void dr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);dr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,o=0,i=!0;const n=()=>{clearTimeout(t)},s=async()=>{var a,c;let d=0,l=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,o=null===(c=e.remoteVideoTrack)||void 0===c?void 0:c.id;t.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&e.trackIdentifier===r&&(dr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===o&&(dr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),l=e.packetsReceived)}))}catch(e){dr().warn("getStats error",e)}finally{d&&d<=r&&l&&l<=o?(dr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),dr().warn(`videoPacketsReceived: ${l} - previousVideoValue: ${o}`),e.triggerResume()):(r=null!=d?d:r,o=null!=l?l:o,n(),i&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>s()),e.watchMediaPacketsTimeout)))}};return{start:()=>{n(),s()},stop:()=>{i=!1,n()}}})(this),null===(e=this._mediaWatcher)||void 0===e||e.start()}async applyMediaConstraints(e,t){try{const r=this._getSenderByKind(e);if(!r||!r.track)return this.logger.info("No sender to apply constraints",e,t);if("live"===r.track.readyState){const o=Object.assign(Object.assign({},r.track.getConstraints()),t),i=this.getDeviceId(e);i&&!this.options.screenShare&&(o.deviceId={exact:i}),this.logger.info(`Apply ${e} constraints`,this.call.id,o),await r.track.applyConstraints(o)}}catch(r){this.logger.error("Error applying constraints",e,t)}}_getSenderByKind(e){var t;return(null===(t=this.instance)||void 0===t?void 0:t.getSenders)?this.instance.getSenders().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getSenders() not available."),null)}_getReceiverByKind(e){var t;return(null===(t=this.instance)||void 0===t?void 0:t.getReceivers)?this.instance.getReceivers().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getReceivers() not available."),null)}async startNegotiation(e=!1){var t,r;if(this._negotiating)return this.logger.warn("Skip twice onnegotiationneeded!");this._negotiating=!0;try{if((this.options.additionalDevice||this.options.screenShare)&&(null===(r=null===(t=this.instance)||void 0===t?void 0:t.getTransceivers)||void 0===r||r.call(t).forEach((e=>{e.direction="sendonly"}))),this.instance.removeEventListener("icecandidate",this._onIce),this.instance.addEventListener("icecandidate",this._onIce),this.isOffer){this.logger.debug("Trying to generate offer");const e={voiceActivityDetection:!1};this._supportsAddTransceiver()||(e.offerToReceiveAudio=this.options.negotiateAudio,e.offerToReceiveVideo=this.options.negotiateVideo);const t=await this.instance.createOffer(e);await this._setLocalDescription(t)}if(this.isAnswer){this.logger.debug("Trying to generate answer"),await this._setRemoteDescription({sdp:this.options.remoteSdp,type:"offer"});const e=await this.instance.createAnswer({voiceActivityDetection:!1});await this._setLocalDescription(e)}e&&this._sdpReady(),this.logger.info("iceGatheringState",this.instance.iceGatheringState),"gathering"===this.instance.iceGatheringState&&(this._iceTimeout=setTimeout((()=>{this._onIceTimeout()}),this.options.maxIceGatheringTimeout))}catch(e){this.logger.error(`Error creating ${this.type}:`,e)}}onRemoteBye({code:e,message:t}){var r;null===(r=this._rejectStartMethod)||void 0===r||r.call(this,{code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}async start(){return new Promise((async(e,t)=>{this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let r=!1;if(this._localStream&&ts(this._localStream)){const e=this._localStream.getAudioTracks();this.logger.debug("Local audio tracks: ",e);const t=this._localStream.getVideoTracks();if(this.logger.debug("Local video tracks: ",t),r=Boolean(e.length||t.length),this.isOffer&&"function"==typeof this.instance.addTransceiver){const r={direction:this.options.negotiateAudio?"sendrecv":"sendonly",streams:[this._localStream]};this.logger.debug("Applying audioTransceiverParams",r),e.forEach((e=>{this.instance.addTransceiver(e,r)}));const o={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(o.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",o),t.forEach((e=>{this.instance.addTransceiver(e,o)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),o.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",o)}}else if("function"==typeof this.instance.addTrack){const r=this._localStream;e.forEach((e=>this.instance.addTrack(e,r))),t.forEach((e=>this.instance.addTrack(e,r)))}else this.instance.addStream(this._localStream)}this.isOffer?(this.options.negotiateAudio&&this._checkMediaToNegotiate("audio"),this.options.negotiateVideo&&this._checkMediaToNegotiate("video"),this._supportsAddTransceiver()||r||this.startNegotiation()):this.startNegotiation()}))}detachAndStop(){var e;"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getTransceivers)&&this.instance.getTransceivers().forEach((e=>{e.sender.track&&e.sender.track.stop(),e.receiver.track&&e.receiver.track.stop()})),this.stop()}stop(){var e,t,r;null===(e=this._localStream)||void 0===e||e.getTracks().forEach((e=>e.stop())),null===(t=this._remoteStream)||void 0===t||t.getTracks().forEach((e=>e.stop())),null===(r=this.instance)||void 0===r||r.close(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this),this.isAnswer&&this._resolveStartMethod()}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Rs.getMediaSections(e);for(const e of r)if(!Rs.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return dr().error("Error checking SDP",e),!1}})(this.localSdp):Boolean(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.info('RTCPeer already with "iceTransportPolicy: relay"'),this._rejectStartMethod({code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"}),void this.call.setState("destroy");this.setConfiguration(Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:o,googleStartBitrate:i}=this.options;return e.sdp&&t&&(e.sdp=Ls(e.sdp)),e.sdp&&r&&o&&i&&(e.sdp=((e,t,r,o)=>{const i=e.split("\r\n");return i.forEach(((e,n)=>{/^a=fmtp:\d*/.test(e)?i[n]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${o}`:/^a=mid:(1|video)/.test(e)&&(i[n]+=`\r\nb=AS:${t}`)})),i.join("\r\n")})(e.sdp,r,o,i)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=Ls(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r),i=o.findIndex(Os),n=o.findIndex(As);if(-1==n||-1==i||i<n)return e;const s=e.split(r),a=s.findIndex(Os),c=s.findIndex(As),d=s.slice(a,c),l=s.slice(c,s.length-1);return[...s.slice(0,a),...l,...d,""].join(r)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(ts(this.options.localStream))return this.options.localStream;const e=await Vs(this.options);return Ds(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":this.logger.debug("[test] Prevent reattach!");break;case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)})),this._attachAudioTrackListener(),this._attachVideoTrackListener()}clearTimers(){this.clearResumeTimer(),this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}clearResumeTimer(){clearTimeout(this._resumeTimer),this._resumeTimer=void 0}emitMediaConnected(){this.call.emit("media.connected")}_onEndedTrackHandler(e){const t=e.target;this.call.emit(("audio"===t.kind?"microphone":"camera")+".disconnected",{deviceId:t.id,label:t.label})}_attachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_attachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_detachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}_detachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}setConfiguration(e){var t;this.rtcConfigPolyfill=e,this.instance&&"function"==typeof(null===(t=this.instance)||void 0===t?void 0:t.setConfiguration)&&this.instance.setConfiguration(e)}getConfiguration(){var e;return this.instance&&"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getConfiguration)?this.instance.getConfiguration():this.rtcConfigPolyfill||this.config}}"function"==typeof SuppressedError&&SuppressedError;const Us=e=>hr(e.type),$s=function*(e){dr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:i}=t,{rtcPeerId:n}=o;if(!n)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=To.createCatchableSaga((function*(e){var t,o;const{id:i,method:s,params:a={}}=e.payload,{callID:c,nodeId:d}=a,l=r.getRTCPeerById(c);if(!l)return void dr().warn(`RTCPeer '${c}' not found for method: '${s}'`,a);const u=r.peer;switch(s){case"verto.media":case"verto.answer":l.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===s?"early":"active"),(null==a?void 0:a.sdp)&&l.onRemoteSdp(a.sdp),yield $e(Eo.upsert({id:null===(t=e.payload.params)||void 0===t?void 0:t.callID,nodeId:null===(o=e.payload.params)||void 0===o?void 0:o.nodeId})),yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Jr(i,s),node_id:d}});break;case"verto.bye":yield Be([r,r.onVertoBye],{rtcPeerId:c,byeCause:null==a?void 0:a.cause,byeCauseCode:null==a?void 0:a.causeCode,redirectDestination:null==a?void 0:a.redirectDestination}),yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Jr(i,s),node_id:d}});break;case"verto.ping":{const{nodeId:e}=a,t=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(r[o[i]]=e[o[i]])}return r}(a,["nodeId"]);yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Kr(t),node_id:e}});break}case"verto.mediaParams":{if(!c||!a.mediaParams){dr().warn("Invalid mediaParams event",a);break}const{audio:e,video:t}=a.mediaParams;l&&t&&l.applyMediaConstraints("video",t),l&&e&&l.applyMediaConstraints("audio",e);break}case"verto.display":r.setActiveRTCPeer(n),r.emit("verto.display",e.payload.params);break;default:return dr().warn(`Unknown Verto method: ${s}`,a)}}),(e=>{dr().error("Verto Error",e)}));for(;;){const e=yield Ue(i,(e=>{var t;return!!Us(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===n}));yield He(s,e)}dr().trace("vertoEventWorker ended")},zs=function*(e){dr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:i}=t,{rtcPeerId:n}=o;if(!n)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=yield Ue(i,(e=>("video.room.subscribed"===e.type||"call.joined"===e.type)&&e.payload.call_id===n)),a=JSON.parse(JSON.stringify(s.payload));r.setActiveRTCPeer(n);const c=s.payload.room_session.id||s.payload.room_session.room_session_id;yield $e(Eo.upsert({id:s.payload.call_id,roomId:s.payload.room_session.room_id,roomSessionId:c,memberId:s.payload.member_id,previewUrl:s.payload.room_session.preview_url})),r.emit("room.subscribed",s.payload),r.emit("room.joined",Bs.call(r,a)),dr().debug("roomSubscribedWorker ended",n)};function Bs(e){return["room_session","room"].forEach((t=>{e[t]&&e[t].recordings&&(e[t].recordings=(e[t].recordings||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}):r=li.createRoomSessionRecordingObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].playbacks&&(e[t].playbacks=(e[t].playbacks||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}):r=li.createRoomSessionPlaybackObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].streams&&(e[t].streams=(e[t].streams||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}):r=li.createRoomSessionStreamObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}}),this.instanceMap.set(t.id,r),r})))})),e}const Hs=function*(e){dr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:i}=t,{rtcPeerId:n}=o;if(!n)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const s=yield Ue(i,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));dr().debug("promoteDemoteWorker:",s.type,s.payload),yield $e(bo.updateAuthState(s.payload.authorization));const a=yield Fe(Xn.getAuthState);if(!a)throw new Error(`Invalid authState for '${s.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(s.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),dr().debug("promoteDemoteWorker ended",n)},Fs=function*(e){dr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ue([Gr.authSuccessAction.type,Gr.authErrorAction.type])).type){case Gr.authSuccessAction.type:yield Be([t,t.resume]);break;case Gr.authErrorAction.type:yield Be([t,t.setState],"hangup")}dr().debug("sessionAuthWorker ended")},qs={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Ks=Object.assign(Object.assign({},qs),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Js={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},Gs={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:qs,video:Js,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Qs extends ti{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{this.logger.debug("onVertoBye",e);const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:i}=e;this.cause=String(r),this.causeCode=String(o);const n=this.getRTCPeerById(t);return n?i&&n.localSdp?(this.logger.debug("Redirect Destination to:",i,"for RTCPeer:",n.uuid),void this.executeInvite(n.localSdp,n.uuid,i)):(n.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==n?void 0:n.uuid)&&(this.logger.debug("onVertoBye go hangup"),this.setState("hangup")))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},Gs),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this._initPeer()}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get nodeId(){return this.component.nodeId||this.options.nodeId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(Xn.getIceServers)}get component(){return this.select((e=>si.getComponent(e,this.callId)))||{}}get cameraId(){return this.peer?this.peer.getDeviceId("video"):null}get cameraLabel(){return this.peer?this.peer.getDeviceLabel("video"):null}get microphoneId(){return this.peer?this.peer.getDeviceId("audio"):null}get microphoneLabel(){return this.peer?this.peer.getDeviceLabel("audio"):null}get withAudio(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasAudioReceiver)}get withVideo(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasVideoReceiver)}get localAudioTrack(){return this.peer?this.peer.localAudioTrack:null}get localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get peer(){return this.getRTCPeerById(this.activeRTCPeerId)}set peer(e){if(e){if(this.logger.debug("Set RTCPeer",e.uuid,e),this.rtcPeerMap.set(e.uuid,e),this.peer&&this.peer.instance&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}emit(e,...t){return super.emit(e,...t)}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:i,remoteCallerName:n,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,reattaching:r,callerName:o,callerNumber:i,remoteCallerName:n,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l,version:1e3}}}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!ts(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),i=e.getAudioTracks();i.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;ns(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),i.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const n=this.localStream.getVideoTracks(),s=e.getVideoTracks();s.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(n.forEach((e=>{var t;ns(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),s.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Xn.getAuthState);return e&&Rr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=this._buildPeer("offer");this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.updateConstraints({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.updateConstraints({audio:e})}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,o)=>{var i,n,s;try{if(!this.peer)return o(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return o(new Error("Invalid audio/video constraints."));if(this.logger.debug("updateConstraints trying constraints",this.__uuid,e),!this.manageSendersWithConstraints(e))return this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped"),r();let n,s={};null===(i=this.localStream)||void 0===i||i.getTracks().forEach((t=>{var r;s[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks first?"),this.logger.debug("Track readyState:",t.kind,t.readyState),ns(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),n=await ps(e)}catch(e){return this.logger.error("Error updating device constraints:",e.name,e.message,e),this.logger.info("Restoring previous constraints",s),await this.updateConstraints(s,{attempt:t+1}),o(e)}await this.updateStream(n),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}finally{null===(n=this.peer)||void 0===n||n._attachAudioTrackListener(),null===(s=this.peer)||void 0===s||s._attachVideoTrackListener()}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");const t=this.localVideoTrack,r=this.localAudioTrack;this.peer._detachAudioTrackListener(),this.peer._detachVideoTrackListener(),this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:o}=this.peer,i=e.getTracks();this.logger.debug(`updateStream got ${i.length} tracks`);for(let e=0;e<i.length;e++){const n=i[e];this.logger.debug("updateStream apply track: ",n);const s=o.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===n.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===n.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));s&&s.sender?(this.logger.debug("updateStream got transceiver",s.currentDirection,s.mid),await s.sender.replaceTrack(n),this.logger.debug("updateStream replaceTrack"),s.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===n.kind&&e.id!==n.id&&(this.logger.debug("updateStream stop old track and apply new one - "),ns(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(n)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(n),o.addTrack(n,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===n.kind?(this.emit("microphone.updated",{previous:{deviceId:null==r?void 0:r.id,label:null==r?void 0:r.label},current:{deviceId:null==n?void 0:n.id,label:null==n?void 0:n.label}}),this.options.micId=n.getSettings().deviceId):"video"===n.kind&&(this.emit("camera.updated",{previous:{deviceId:null==t?void 0:t.id,label:null==t?void 0:t.label},current:{deviceId:null==n?void 0:n.id,label:null==n?void 0:n.label}}),this.options.camId=n.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:$s,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:zs,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Hs,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=this._buildPeer("offer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer||(this.peer=this._buildPeer("answer"));try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,o=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",o),t){case"offer":return this._watchSessionAuth(),!this.resuming&&e.instance.remoteDescription?this.executeUpdateMedia(o,e.uuid):this.executeInvite(o,e.uuid);case"answer":return this.executeAnswer(o,e.uuid);default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Gr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Fs})}async resume(){var e;if(this.logger.warn(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const o=this.getRTCPeerById(t);if(!o||o.instance.remoteDescription&&!this.resuming)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const o=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},i=$r(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let n=[];n=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions(),this.logger.debug("Subscribing to",n);const s=await this.vertoExecute({message:i,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:n});this.logger.debug("Invite response",s),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeAnswer(e,t,r){"new"===this.state&&this.setState("answering");try{const o=Fr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e})),i=await this.vertoExecute({message:o,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:this.getSubscriptions()});this.logger.debug("Answer response",i),this.resuming=!1,this.setActiveRTCPeer(t)}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=Br(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t,node_id:this.nodeId});if(o.sdp||this.logger.error("UpdateMedia invalid SDP answer",o),this.logger.debug("UpdateMedia response",o),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(o.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=zr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t,node_id:this.nodeId})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}async hangupAll(){const e=this.callId;if(!e)throw new Error("Invalid RTCPeer ID to hangup");try{const t=zr(Object.assign({cause:"REJECT_ALL",causeCode:"825"},this.dialogParams(e)));await this.vertoExecute({message:t,callID:e,node_id:this.nodeId})}catch(e){this.logger.error("HangupAll error:",e)}finally{this.setState("hangup")}}async sendDigits(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Hr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));await this.vertoExecute({message:r,callID:t,node_id:this.nodeId})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=Js),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Ks:qs)}_initPeer(){this.options.remoteSdp&&(this.peer=this._buildPeer("answer"))}_buildPeer(e){const t=new Ns(this,e);return this.appendRTCPeer(t),this.runRTCPeerWorkers(t.uuid),t}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const Xs=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),Ys=Gr.createAction("swJs/audioSetSpeakerAction"),Zs=({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=t.getAudioEl();let i;t.on("track",(function(n){"audio"===n.track.kind&&(i=r(ta,{track:n.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{i?.cancel()}))}catch(e){dr().error("audioElementSaga",e)}else dr().warn("`Audio` is not supported on this environment.")};function*ea({element:e,room:t}){const r=Gr.getCustomSagaActionType(t.__uuid,Ys);for(;;){const o=yield Ue([r]);try{if(o.type===r){const r=yield Be(os,e,o.payload);t.emit(`${Zt}.speaker.updated`,o.payload),t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),dr().error(e)}}}function*ta({track:e,element:t,speakerId:r,room:o}){Xs({track:e,element:t}),r&&os(t,r).catch((()=>{})),yield He(ea,{element:t,room:o})}const ra=function*(e){dr().trace("videoManagerRoomsWorker started");const{instance:t,action:{type:r,payload:o}}=e,i={rooms:o.rooms.map((e=>fr(e)))};t.emit(_r(r),i),dr().trace("videoManagerRoomsWorker ended")},oa=function*(e){dr().trace("videoManagerRoomWorker started");const{instance:t,action:{type:r,payload:o}}=e;t.emit(_r(r),fr(o)),dr().trace("videoManagerRoomWorker ended")},ia=function*(e){dr().trace("videoManagerWorker started");const{channels:{swEventChannel:t}}=e;function*r(t){const{type:r}=t;switch(r){case"video-manager.rooms.subscribed":yield He(ra,{action:t,...e});break;case"video-manager.room.added":case"video-manager.room.deleted":case"video-manager.room.ended":case"video-manager.room.started":case"video-manager.room.updated":yield He(oa,{action:t,...e});break;default:dr().warn(`Unknown video-manager event: "${r}"`)}}for(;;){const e=yield Ue(t,(e=>e.type.startsWith("video-manager.")));yield He(r,e)}dr().trace("videoManagerWorker ended")};class na extends oi{constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:ia})}getSubscriptions(){const e=this.eventNames().map((e=>`video-manager.${e}`));return Tr(e)}}const sa={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},aa="sw-sdk-",ca="sw-overlay-",da=e=>`${ca}${e}`,la=br(class extends Qs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:li.audioMuteMember,audioUnmute:li.audioUnmuteMember,videoMute:li.videoMuteMember,videoUnmute:li.videoUnmuteMember,setMicrophoneVolume:li.setInputVolumeMember,setInputVolume:li.setInputVolumeMember,setInputSensitivity:li.setInputSensitivityMember}),ua=()=>{},ha="memberList.updated",ma=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})((({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(lr,(e=>`_${e.toLowerCase()}`)))(e=(({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`)({event:e,namespace:t}))),e))({event:ha})),pa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],ga=e=>pa.includes(e),fa=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*va({swEventChannel:e,instance:t}){const r=new Map;function*o(e){const o="video.room.joined"===e.type?e.payload.room_session.id:e.payload.room_session_id,i=fa({action:e,memberList:r});t.emit(ma,{room_session_id:o,members:i})}for(;;){const t=yield Ue(e,(({type:e})=>ga(e)));yield He(o,t)}}const ya=function*({channels:{swEventChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ha))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Tr(pa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,ua)}));const o=({members:t})=>{e.emit(ha,{members:t})};return e.on(ma,o),{cleanup:()=>{e.off(ma,o)}}})(t,r);yield He(va,{swEventChannel:e,instance:t}),t.once("destroy",(()=>{o()}))},ba=function*(e){dr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:i,onFail:n}=e,{swEventChannel:s}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield Ue(s,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield Fe(si.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(yield $e(Eo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),i?.()):n?.({error:new Error("Unknown parent_id")})}dr().trace("childMemberJoinedWorker ended")},_a=function*(e){dr().trace("videoStreamWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:i,set:n,remove:s}}=e;let a=i(o.stream.id);switch(a?a.setPayload(o):a=li.createRoomSessionStreamObject({store:t.store,payload:o}),n(o.stream.id,a),r){case"video.stream.started":t.emit("stream.started",a);break;case"video.stream.ended":t.emit("stream.ended",a),s(o.stream.id);break;default:dr().warn(`Unknown video.stream event: "${r}"`)}dr().trace("videoStreamWorker ended")},wa=function*(e){dr().trace("videoRecordWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:i,set:n,remove:s}}=e;let a=i(o.recording.id);a?a.setPayload(o):a=li.createRoomSessionRecordingObject({store:t.store,payload:o}),n(o.recording.id,a);const c=_r(r);switch(r){case"video.recording.started":case"video.recording.updated":t.emit(c,a);break;case"video.recording.ended":t.emit(c,a),s(o.recording.id);break;default:dr().warn(`Unknown video.stream event: "${r}"`)}dr().trace("videoRecordWorker ended")},Sa=function*(e){dr().trace("videoPlaybackWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:i,set:n,remove:s}}=e;let a=i(o.playback.id);a?a.setPayload(o):a=li.createRoomSessionPlaybackObject({store:t.store,payload:o}),n(o.playback.id,a);const c=_r(r);switch(r){case"video.playback.started":case"video.playback.updated":t.emit(c,a);break;case"video.playback.ended":t.emit(c,a),s(o.playback.id);break;default:dr().warn(`Unknown video.stream event: "${r}"`)}dr().trace("videoPlaybackWorker ended")},ka=function*(e){dr().trace("videoWorker started");const{channels:t,instance:r}=e,{swEventChannel:o}=t;function*i(t){const{type:o,payload:i}=t;switch(o){case"video.room.subscribed":return void(yield He(Ln.memberPositionWorker,{...e,instance:r,initialState:i}));case"video.playback.started":case"video.playback.updated":case"video.playback.ended":return void(yield He(Sa,{action:t,...e}));case"video.recording.started":case"video.recording.updated":case"video.recording.ended":return void(yield He(wa,{action:t,...e}));case"video.stream.ended":case"video.stream.started":return void(yield He(_a,{action:t,...e}));case"video.room.audience_count":return void r.emit("room.audienceCount",i);case"video.member.talking":{const{member:e}=i;"talking"in e&&(r.emit("member.talking."+(e.talking?"started":"ended"),i),r.emit("member.talking."+(e.talking?"start":"stop"),i));break}case"video.layout.changed":r.currentLayoutEvent=t.payload}const n=_r(o,"video");r.emit(n,i)}const n=e=>e.type.startsWith("video.");for(;;){const e=yield Ue(o,n);yield He(i,e)}dr().trace("videoWorker ended")};class Ia extends Qs{_screenShareList=new Set;_audioEl;_overlayMap;_localVideoOverlay;get audioEl(){return this._audioEl}set overlayMap(e){this._overlayMap=e}get overlayMap(){return this._overlayMap}set localVideoOverlay(e){this._localVideoOverlay=e}get localVideoOverlay(){return this._localVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}_attachSpeakerTrackListener(){rs()&&Ms().then((e=>{e.on("removed",(async e=>{const t=this._audioEl.sinkId,r=e.changes.find((e=>{const r=e.payload.deviceId;return r===t||""===r&&"default"===t||"default"===r&&""===t}));if(r){this.emit("speaker.disconnected",{deviceId:r.payload.deviceId,label:r.payload.label}),await(this._audioEl.setSinkId?.(""));const e=await Ts("default");if(!e?.deviceId)return;this.emit("speaker.updated",{previous:{deviceId:r.payload.deviceId,label:r.payload.label},current:{deviceId:e.deviceId,label:e.label}})}}))}))}_finalize(){this._screenShareList.clear(),super._finalize()}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),super.hangup(e)}leave(){return this.hangup()}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:ya})}getAudioEl(){return this._audioEl||(this._audioEl=new Audio,this._attachSpeakerTrackListener()),this._audioEl}getMemberOverlay(e){return this.overlayMap.get(da(e))}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:i=!1,video:n=!0,layout:s,positions:a}=e;try{const e=await gs({audio:!0===i?sa:i,video:n}),c={...this.options,screenShare:!0,recoverCall:!1,localStream:e,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:s,positions:a},d=Go({store:this.store,Component:la})(c);return e.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{d&&d.active&&d.leave()}))})),d.once("destroy",(()=>{d.emit("room.left"),this._screenShareList.delete(d)})),d.runWorker("childMemberJoinedWorker",{worker:ba,onDone:()=>t(d),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(d),o?await d.join():t(d)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}updateSpeaker({deviceId:e}){const t=this.audioEl.sinkId;return this.once(`${Zt}.speaker.updated`,(async e=>{const r=await Ts(t),o=await Ts(e),i=o?.deviceId===r?.deviceId;o?.deviceId&&!i&&this.emit("speaker.updated",{previous:{deviceId:r?.deviceId,label:r?.label},current:{deviceId:o.deviceId,label:o.label}})})),this.triggerCustomSaga(Ys(e))}}const Ca=br(class extends Qs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:li.audioMuteMember,audioUnmute:li.audioUnmuteMember,videoMute:li.videoMuteMember,videoUnmute:li.videoUnmuteMember,setInputVolume:li.setInputVolumeMember,setMicrophoneVolume:li.setInputVolumeMember,setInputSensitivity:li.setInputSensitivityMember});class Ea extends Ia{_deviceList=new Set;_currentLayoutEvent;constructor(e){super(e),this.initWorker()}set currentLayoutEvent(e){this._currentLayoutEvent=e}get currentLayoutEvent(){return this._currentLayoutEvent}get currentLayout(){return this._currentLayoutEvent?.layout}get currentPosition(){return this._currentLayoutEvent?.layout.layers.find((e=>e.member_id===this.memberId))?.position}get deviceList(){return Array.from(this._deviceList)}get interactivityMode(){return this.select((({session:e})=>{const{authState:t}=e;return t?.join_as??""}))}get permissions(){return this.select((({session:e})=>{const{authState:t}=e;return t?.room?.scopes??[]}))}initWorker(){this.runWorker("videoWorker",{worker:ka})}getSubscriptions(){const e=this.eventNames().map((e=>`video.${String(e)}`));return Tr(e)}_finalize(){this._deviceList.clear(),super._finalize()}async hangup(e){return this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}join(){return super.invite()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}async createScreenShareObject(e={}){return this.startScreenShare(e)}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:i=!1,video:n=!1}=e;if(!i&&!n)throw new TypeError("At least one of `audio` or `video` must be requested.");const s={...this.options,localStream:void 0,remoteStream:void 0,audio:i,video:n,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=Go({store:this.store,Component:Ca})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:ba,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),o?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}}const Ma=br(Ea,{audioMute:li.audioMuteMember,audioUnmute:li.audioUnmuteMember,videoMute:li.videoMuteMember,videoUnmute:li.videoUnmuteMember,deaf:li.deafMember,undeaf:li.undeafMember,setInputVolume:li.setInputVolumeMember,setOutputVolume:li.setOutputVolumeMember,setMicrophoneVolume:li.setInputVolumeMember,setSpeakerVolume:li.setOutputVolumeMember,setInputSensitivity:li.setInputSensitivityMember,removeMember:li.removeMember,removeAllMembers:li.removeAllMembers,getMembers:li.getMembers,getLayouts:li.getLayouts,setLayout:li.setLayout,setPositions:li.setPositions,setMemberPosition:li.setMemberPosition,hideVideoMuted:li.hideVideoMuted,showVideoMuted:li.showVideoMuted,getRecordings:li.getRecordings,startRecording:li.startRecording,getPlaybacks:li.getPlaybacks,play:li.play,setHideVideoMuted:li.setHideVideoMuted,getMeta:li.getMeta,setMeta:li.setMeta,updateMeta:li.updateMeta,deleteMeta:li.deleteMeta,getMemberMeta:li.getMemberMeta,setMemberMeta:li.setMemberMeta,updateMemberMeta:li.updateMemberMeta,deleteMemberMeta:li.deleteMemberMeta,promote:li.promote,demote:li.demote,getStreams:li.getStreams,startStream:li.startStream,lock:li.lock,unlock:li.unlock,setRaisedHand:li.setRaisedHand,setPrioritizeHandraise:li.setPrioritizeHandraise}),Pa=e=>e instanceof Ea;function Ta(e){this.message=e}(Ta.prototype=new Error).name="InvalidCharacterError";var xa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Ta("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,i=0,n=0,s="";o=t.charAt(n++);~o&&(r=i%4?64*r+o:o,i++%4)?s+=String.fromCharCode(255&r>>(-2*i&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return s};function Ra(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(xa(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return xa(t)}}function Oa(e){this.message=e}function Aa(e,t){if("string"!=typeof e)throw new Oa("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Ra(e.split(".")[r]))}catch(e){throw new Oa("Invalid token specified: "+e.message)}}(Oa.prototype=new Error).name="InvalidTokenError";const ja=()=>{if(window&&window.sessionStorage)return window.sessionStorage},La=e=>{let t="";try{const r=Aa(e);t=r?.r??""}catch(r){try{t=Aa(e,{header:!0}).typ||""}catch{t=""}}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},Da="ci-SAT",Va=function*(e){dr().debug("wsClientWorker started");const{channels:t,initialState:r}=e,{swEventChannel:o}=t,{handleIncomingInvite:i}=r;try{for(;;){const e=yield Ue(o,(e=>"webrtc.message"===e.type&&"verto.invite"===e.payload.method));dr().debug("Receiving a new call over WebSocket",e),i(e.payload.params)}}finally{dr().trace("wsClientWorker ended")}},Wa=function*(e){dr().debug("conversationWorker started");const{channels:{swEventChannel:t},initialState:r}=e,{conversation:o}=r,i=e=>e.type.startsWith("conversation.");for(;;){const e=yield Ue(t,i);o.handleEvent(e.payload)}dr().trace("conversationWorker ended")};class Na extends ti{_payload;constructor(e){super(e),this._payload=e.payload}get id(){return this._payload.member.member_id}get callId(){return this._payload.member.call_id}get nodeId(){return this._payload.member.node_id}get memberId(){return this.id}get roomSessionId(){return this._payload.room_session_id}get roomId(){return this._payload.room_id}get parentId(){return this._payload.member.parent_id}get name(){return this._payload.member.name}get type(){return this._payload.member.type}get requestedPosition(){return this._payload.member.requested_position}get currentPosition(){return this._payload.member.current_position}get meta(){return this._payload.member.meta}get handraised(){return this._payload.member.handraised}get talking(){return this._payload.member.talking}get audioMuted(){return this._payload.member.audio_muted}get videoMuted(){return this._payload.member.video_muted}get deaf(){return this._payload.member.deaf}get visible(){return this._payload.member.visible}get inputVolume(){return this._payload.member.input_volume}get outputVolume(){return this._payload.member.output_volume}get inputSensitivity(){return this._payload.member.input_sensitivity}get subscriberData(){return this._payload.member.subscriber_data}setPayload(e){const t={...this._payload,...e,member:{...this._payload.member,...e.member}};this._payload=t}}const Ua=e=>Go({store:e.store,Component:Na})(e),$a=function*(e){dr().trace("callLeftWorker started");const{action:{payload:t},instance:r,instanceMap:o}=e,{room_session_id:i}=t;o.getAll().forEach((([e,t])=>{t instanceof Na&&t.roomSessionId===i&&o.remove(e)})),r.emit("call.left",t),r.emit("room.left",t),dr().trace("callLeftWorker ended")},za=function*(e){dr().trace("fabricMemberWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:i,set:n,remove:s}}=e,a=o.member.member_id;let c=i(a);if(c||"member.talking"===r||(c=Ua({store:t.store,payload:o})),c&&c.setPayload(o),n(a,c),r.startsWith("member.updated.")){const e=vr(r);t.emit(e,o)}switch(r){case"member.joined":case"member.updated":case"member.talking":t.emit(r,o);break;case"member.left":t.emit(r,o),s(a)}dr().trace("fabricMemberWorker ended")},Ba=e=>({id:e.member_id,room_id:e.room_id,room_session_id:e.room_session_id,name:e.name,type:e.type,handraised:e.handraised,visible:e.visible,audio_muted:e.audio_muted,video_muted:e.video_muted,deaf:e.deaf,input_volume:e.input_volume,output_volume:e.output_volume,input_sensitivity:e.input_sensitivity,meta:e.meta,talking:e.talking,current_position:e.current_position,requested_position:e.requested_position,parent_id:e.parent_id}),Ha=e=>({...Ba(e),updated:e.updated.map((e=>"member_id"===e?"id":e))}),Fa=e=>({room_id:e.room_id,room_session_id:e.room_session_id,event_channel:e.event_channel,name:e.name,recording:e.recording,hide_video_muted:e.hide_video_muted,preview_url:e.preview_url,recordings:e.recordings,playbacks:e.playbacks,streams:e.streams,prioritize_handraise:e.prioritize_handraise}),qa=e=>({id:e.id,display_name:e.display_name,room_id:e.room_id,room_session_id:e.room_session_id,event_channel:e.event_channel,name:e.name,recording:e.recording,recordings:e.recordings,playbacks:e.playbacks,hide_video_muted:e.hide_video_muted,preview_url:e.preview_url,layout_name:e.layout_name,locked:e.locked,meta:e.meta,members:e.members.map(Ba),streaming:e.streaming,streams:e.streams,prioritize_handraise:e.prioritize_handraise,updated:e.updated}),Ka=function*(e){dr().trace("callJoinWorker started");const{action:t,instanceMap:r,instance:o}=e,{payload:i}=t,{get:n,set:s}=r;var a;yield He(Ln.memberPositionWorker,{...e,initialState:(a=i,{call_id:a.call_id,member_id:a.member_id,room:{...Fa(a.room_session),members:a.room_session.members.map(Ba)},room_session:{...qa(a.room_session),members:a.room_session.members.map(Ba)}}),dispatcher:function*(t,r){const o=_r(t,"video"),i={...r,member:{...r.member,member_id:r.member.id}};yield He(za,{...e,action:{type:o,payload:i}})}}),i.room_session.members?.forEach((e=>{let t=n(e.member_id);t?t.setPayload({member:e,room_id:i.room_id,room_session_id:i.room_session_id}):t=Ua({store:o.store,payload:{member:e,room_id:i.room_id,room_session_id:i.room_session_id}}),s(e.member_id,t)})),o.member=n(i.member_id),o.capabilities=(i.capabilities||[]).flatMap(kr).reduce(Ir,{}),o.emit("call.joined",{...i,capabilities:o.capabilities}),dr().trace("callJoinWorker ended")},Ja=function*(e){const{action:t,channels:{swEventChannel:r},instance:o}=e,i=t.payload.call_id,n=t.payload.room_session_id;function*s(t){const{type:i,payload:n}=t;switch(i){case"call.joined":break;case"call.left":return yield Be($a,{...e,action:t}),!0;case"call.updated":o.emit(i,n),o.emit("room.updated",n);break;case"call.play":case"call.connect":case"call.room":o.emit(i,n);break;case"member.joined":case"member.left":{yield He(za,{...e,action:t});const o=(e=>{return{type:`video.${e.type}`,payload:(t=e.payload,{room_session_id:t.room_session_id,room_id:t.room_id,member:Ba(t.member)})};var t})(t);yield $e(r,o);break}case"member.updated":{const e=(e=>{return{type:`video.${e.type}`,payload:(t=e.payload,{room_session_id:t.room_session_id,room_id:t.room_id,member:Ha(t.member)})};var t})(t);yield $e(r,e);break}case"layout.changed":{o.currentLayoutEvent=t.payload,o.emit(i,n);const e=(e=>({type:`video.${e.type}`,payload:e.payload}))(t);yield $e(r,e);break}case"member.talking":yield He(za,{...e,action:t});break;default:dr().warn("Got an unknown fabric event",t)}return!1}dr().debug(`callSegmentWorker started for: callId ${i}, roomSessionId ${n}`),yield He(Ka,{...e,action:t});const a=e=>{const{type:t,payload:r}=e;return!(!(t.startsWith("call.")||t.startsWith("member.")||t.startsWith("layout."))||(!("call_id"in r)||i!==r.call_id)&&n!==r.room_session_id)};for(;;){const e=yield Ue(r,a),t=yield He(s,e);if(yield(c=t,Ne(De,c)))return}var c},Ga=function*(e){dr().trace("fabricWorker started");const{channels:{swEventChannel:t},instance:r}=e;function*o(t){const{type:o,payload:i}=t;switch(o){case"call.joined":if(!r.selfMember){const e=Ua({store:r.store,payload:{member:t.payload.room_session.members.find((e=>e.member_id===t.payload.member_id)),room_id:t.payload.room_id,room_session_id:t.payload.room_session_id}});r.selfMember=e}yield He(Ja,{...e,instance:r,action:t});break;case"call.state":r.emit(o,i)}}let i=!1;const n=e=>"call.state"===e.type||"call.joined"===e.type&&(!!i||e.payload.call_id===e.payload.origin_call_id&&(i=!0,!0));for(;;){const e=yield Ue(t,n);yield He(o,e)}dr().trace("fabricWorker ended")};class Qa extends Ia{_self;_member;_currentLayoutEvent;_capabilities={};constructor(e){super(e),this.initWorker()}get memberId(){return this._member?.memberId}set currentLayoutEvent(e){this._currentLayoutEvent=e}get currentLayoutEvent(){return this._currentLayoutEvent}get currentLayout(){return this._currentLayoutEvent?.layout}get currentPosition(){return this._currentLayoutEvent?.layout.layers.find((e=>e.member_id===this.memberId))?.position}get capabilities(){return this._capabilities}set capabilities(e){this._capabilities=e}get selfMember(){return this._self}set selfMember(e){this._self=e}set member(e){this._member=e}get member(){return this._member}initWorker(){this.runWorker("fabricWorker",{worker:Ga}),this.runWorker("makeAudioElement",{worker:Zs({speakerId:this.options.speakerId})})}async join(){return this.options.attach&&(this.options.prevCallId=ja()?.getItem(Da)??void 0),this.logger.debug(`Tying to reattach to previuos call? ${!!this.options.prevCallId} - prevCallId: ${this.options.prevCallId}`),super.invite()}executeAction(e,t={}){const{method:r,channel:o,memberId:i,extraParams:n={}}=e,s=i?this.instanceMap.get(i):this.member;if(!s)throw new Error("No target param found to execute");return this.execute({method:r,params:{...o&&{channels:[o]},self:{member_id:this.selfMember?.id,call_id:this.selfMember?.callId,node_id:this.selfMember?.nodeId},target:{member_id:s.id,call_id:s.callId,node_id:s.nodeId},...n}},t)}async resume(){if(this.logger.warn(`[resume] Call ${this.id}`),this.peer?.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),["closed","failed","disconnected"].includes(e)&&(this.resuming=!0,this.peer.restartIce())}}async start(){return new Promise((async(e,t)=>{try{this.once("room.subscribed",(t=>{ja()?.setItem(Da,t.call_id),e()})),this.once("destroy",(()=>{ja()?.removeItem(Da)})),await this.join()}catch(e){this.logger.error("WSClient call start",e),t(e)}}))}async audioMute(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.muteAudio?.off:!this.capabilities.self?.muteAudio?.off)throw Error("Missing audio mute capability");return this.executeAction({method:"call.mute",channel:"audio",memberId:e?.memberId})}async audioUnmute(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.muteAudio?.on:!this.capabilities.self?.muteAudio?.on)throw Error("Missing audio unmute capability");return this.executeAction({method:"call.unmute",channel:"audio",memberId:e?.memberId})}async videoMute(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.muteVideo?.on:!this.capabilities.self?.muteVideo?.off)throw Error("Missing video mute capability");return this.executeAction({method:"call.mute",channel:"video",memberId:e?.memberId})}async videoUnmute(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.muteVideo?.on:!this.capabilities.self?.muteVideo?.on)throw Error("Missing video unmute capability");return this.executeAction({method:"call.unmute",channel:"video",memberId:e?.memberId})}async deaf(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.deaf?.on:!this.capabilities.self?.deaf?.on)throw Error("Missing deaf capability");return this.executeAction({method:"call.deaf",memberId:e?.memberId})}async undeaf(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.deaf?.off:!this.capabilities.self?.deaf?.off)throw Error("Missing undeaf capability");return this.executeAction({method:"call.undeaf",memberId:e?.memberId})}async getLayouts(){return this.executeAction({method:"call.layout.list"},{transformResolve:e=>({layouts:e.layouts})})}async getMembers(){return this.executeAction({method:"call.member.list"},{transformResolve:e=>({members:e.members})})}async removeMember(e){if(!this.capabilities.member?.remove)throw Error("Missing setLayout capability");if(!e?.memberId)throw new TypeError('Invalid or missing "memberId" argument');return this.executeAction({method:"call.member.remove",memberId:e.memberId})}async setRaisedHand(e){const{raised:t=!0,memberId:r}=e||{};if(r==this.member.id&&t?!this.capabilities.self?.raisehand?.on:!this.capabilities.member?.raisehand?.on)throw Error("Missing raisehand capability");if(r!=this.member.id||t?!this.capabilities.member?.raisehand?.off:!this.capabilities.self?.raisehand?.off)throw Error("Missing lowerhand capability");return this.executeAction({method:t?"call.raisehand":"call.lowerhand",memberId:r})}async setLayout(e){if(!this.capabilities.setLayout)throw Error("Missing setLayout capability");return this.executeAction({method:"call.layout.set",extraParams:{layout:e.name,positions:e.positions}})}async setInputVolume(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.microphoneVolume:!this.capabilities.self?.microphoneVolume)throw Error("Missing setInputVolume capability");return this.executeAction({method:"call.microphone.volume.set",memberId:e?.memberId,extraParams:{volume:e?.volume}})}async setOutputVolume(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.speakerVolume:!this.capabilities.self?.speakerVolume)throw Error("Missing setOutputVolume capability");return this.executeAction({method:"video.member.set_output_volume",memberId:e?.memberId,extraParams:{volume:e?.volume}})}async setInputSensitivity(e){if(e&&e.memberId!==this.member.id?!this.capabilities.member?.microphoneSensitivity:!this.capabilities.self?.microphoneSensitivity)throw Error("Missing setOutputVolume capability");return this.executeAction({method:"call.microphone.sensitivity.set",memberId:e?.memberId,extraParams:{value:e?.value}})}async setPositions(e){const t=e.positions;if(t&&!Object.keys(t).length)throw new Error("Invalid positions");if(Object.keys(t).some((e=>["self",`${this.memberId}`].includes(e)))?!this.capabilities.self?.position:!this.capabilities.member?.position)throw Error("Missing setPositions capability");const r=[];if(Object.entries(t).forEach((([e,t])=>{const o="self"===e?this.member:this.instanceMap.get(e);o&&r.push({target:{member_id:o.id,call_id:o.callId,node_id:o.nodeId},position:t})})),!r.length)throw new Error("Invalid targets");return this.execute({method:"call.member.position.set",params:{self:{member_id:this.selfMember?.id,call_id:this.selfMember?.callId,node_id:this.selfMember?.nodeId},targets:r}})}async lock(){if(!this.capabilities.lock?.on)throw Error("Missing lock capability");return this.executeAction({method:"call.lock"})}async unlock(){if(!this.capabilities.lock?.off)throw Error("Missing unlock capability");return this.executeAction({method:"call.unlock"})}}const Xa=e=>e instanceof Qa;class Ya{id;_domElement;_status;constructor(e){this.id=e.id,this._status="hidden"}get userId(){return this.id.split(ca)[1]}get domElement(){return this._domElement}set domElement(e){dr().debug("Setting domElement for ",this.id),this._domElement=e}get status(){return this._status}set status(e){this._status=e}hide(){if(!this.domElement)return dr().warn("Missing overlay to hide");this.domElement.style.opacity="0",this.status="hidden"}show(){if(!this.domElement)return dr().warn("Missing overlay to show");this.domElement.style.opacity="1",this.status="visible"}}class Za extends Ya{_mirrored;_room;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay,this._room=e.room,this.fabricMemberVideoMutedHandler=this.fabricMemberVideoMutedHandler.bind(this),this.videoMemberVideoMutedHandler=this.videoMemberVideoMutedHandler.bind(this),this.attachListeners()}get userId(){return this.id.split(aa)[1]}get mirrored(){return this._mirrored}attachListeners(){Xa(this._room)?this._room.on("member.updated.videoMuted",this.fabricMemberVideoMutedHandler):Pa(this._room)&&this._room.on("member.updated.videoMuted",this.videoMemberVideoMutedHandler)}detachListeners(){Xa(this._room)?this._room.off("member.updated.videoMuted",this.fabricMemberVideoMutedHandler):Pa(this._room)&&this._room.off("member.updated.videoMuted",this.videoMemberVideoMutedHandler)}memberVideoMutedHandler(e,t){try{e===this._room.memberId&&(t?this.hide():this.show())}catch(e){dr().error("Error handling videoMuted in LocalVideoOverlay",e)}}fabricMemberVideoMutedHandler(e){this.memberVideoMutedHandler(e.member.member_id,e.member.video_muted)}videoMemberVideoMutedHandler(e){this.memberVideoMutedHandler(e.member.id,e.member.video_muted)}setMediaStream(e){if(!this.domElement)return dr().warn("Missing local overlay to set the stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}setMirror(e=this._mirrored){if(!this.domElement||!this.domElement.firstChild)return dr().warn("Missing local overlay to set the mirror");const t=this.domElement.firstChild;t.style.transform=e?"scale(-1, 1)":"scale(1, 1)",t.style.webkitTransform=e?"scale(-1, 1)":"scale(1, 1)",this._mirrored=e}}const ec=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{dr().error("Video Element Paused",e,t)}))})),e},tc=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),rc=({location:e})=>{const{top:t,left:r,width:o,height:i}=tc(e),n=document.createElement("div");return n.style.position="absolute",n.style.overflow="hidden",n.style.top=t,n.style.left=r,n.style.width=o,n.style.height=i,n},oc=({location:e,element:t})=>{const{top:r,left:o,width:i,height:n}=tc(e);return t.style.top=r,t.style.left=o,t.style.width=i,t.style.height=n,t},ic=({video:e,rootElement:t,paddingWrapper:r})=>{const o=function(e,t=0,r){let o=null,i=null;const n=function(){o&&(clearTimeout(o),i=null,o=null)},s=function(){if(!t)return e.apply(this,arguments);const s=this,a=arguments,c=r&&!o;return n(),i=function(){e.apply(s,a)},o=setTimeout((function(){if(o=null,!c){const e=i;return i=null,null==e?void 0:e()}}),t),c&&i?i():void 0};return s.cancel=n,s.flush=function(){const e=i;n(),e&&e()},s}((({width:t,height:o})=>{const i=e.videoHeight/e.videoWidth*100;if(r){const n=o/t*100;r.style.paddingBottom=`${n>i?i:n}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,o)}}),100),i=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;o({width:t,height:r})}else e.contentRect&&o({width:e.contentRect.width,height:e.contentRect.height})}))})),n=()=>{o({width:t.clientWidth,height:t.clientHeight})};return{start:()=>{i.observe(t),e.addEventListener("resize",n)},stop:()=>{i.disconnect(),e.removeEventListener("resize",n)}}},nc=async e=>{try{const{room:t,rootElement:r,applyLocalVideoOverlay:o=!0,applyMemberOverlay:i=!0,mirrorLocalVideoOverlay:n=!0}=e;let s=!1;const a=new Map,c=w();let d;r?d=r:(d=document.createElement("div"),d.id=`rootElement-${c}`);const l=(e=>`${aa}${e}`)(c),u=new Za({id:l,mirrorLocalVideoOverlay:n,room:t});o&&a.set(l,u);const h=(e=>{const{applyLocalVideoOverlay:t,applyMemberOverlay:r,overlayMap:o,localVideoOverlay:i,mirrorLocalVideoOverlay:n,rootElement:s}=e;return async e=>{dr().debug("Process layout.changed");try{const{layout:a,memberId:c,localStream:d}=e,{layers:l=[]}=a,u=s.querySelector(".mcuLayers"),h=document.createDocumentFragment(),m=new Set;if(t){const e=l.find((({member_id:e})=>e===c)),t=i.id;let r=i.domElement;if(m.add(t),e){if(r)dr().debug("Update local video overlay"),oc({location:e,element:r});else{dr().debug("Build local video overlay"),r=rc({location:e}),r.id=t;const o=ec();o.srcObject=d,o.disablePictureInPicture=!0,o.style.width="100%",o.style.height="100%",o.style.pointerEvents="none",o.style.objectFit="cover",r.appendChild(o),i.domElement=r,n&&i.setMirror()}const o=d.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;o&&e.visible?(i.setMediaStream(d),i.show()):i.hide(),h.appendChild(r)}else dr().warn("Local video overlay location not found"),i.status="hidden",r&&i.hide()}r&&l.forEach((e=>{const t=e.member_id;if(!t)return;const r=da(t);m.add(r);let i=o.get(r);if(i&&i.domElement)dr().debug("Update an overlay for ",t),oc({location:e,element:i.domElement});else{dr().debug("Build an overlay for ",t),i=new Ya({id:r}),o.set(r,i);const n=rc({location:e});n.id=`${r}-${w()}`,i.domElement=n}e.visible?i.show():i.hide(),h.appendChild(i.domElement)})),o.forEach(((e,t)=>{m.has(t)||(e.domElement&&e.domElement.parentNode&&e.domElement.parentNode.removeChild(e.domElement),o.delete(t))})),u&&(u.innerHTML="",u.appendChild(h))}catch(e){dr().error("Layout Changed Error",e)}}})({applyLocalVideoOverlay:o,applyMemberOverlay:i,overlayMap:a,localVideoOverlay:u,mirrorLocalVideoOverlay:n,rootElement:d}),m=e=>{t.peer?.hasVideoSender&&t.localStream?h({layout:e.layout,localStream:t.localStream,memberId:t.memberId}):u.hide()},p=e=>{dr().debug("Received layout.changed - videoTrack",s),s&&m(e)},g=async e=>{s=!0,await sc({applyLocalVideoOverlay:o,applyMemberOverlay:i,rootElement:d,track:e});const r=t.currentLayoutEvent;r&&m(r)},f=t.peer?.remoteVideoTrack;f&&await g(f);const v=async function(e){"video"===e.track.kind&&await g(e.track)},y=()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(d),a.clear(),t.overlayMap=a,(Xa(t)||Pa(t))&&(t.off("track",v),t.off("layout.changed",p),t.off("destroy",y)),u.detachListeners()};return(Xa(t)||Pa(t))&&(t.on("track",v),t.on("layout.changed",p),t.once("destroy",y)),t.overlayMap=a,t.localVideoOverlay=u,{element:d,overlayMap:a,localVideoOverlay:u,unsubscribe:y}}catch(e){throw dr().error("Unable to build the video element"),e}},sc=async e=>{try{const{applyLocalVideoOverlay:t,applyMemberOverlay:r,track:o,rootElement:i}=e,n=ec();if((({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({element:n,track:o}),n.style.width="100%",n.style.maxHeight="100%",i.querySelector(".mcuContent"))return void dr().debug("MCU Content already there");const s=document.createElement("div");s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.right="0",s.style.bottom="0",s.appendChild(n);const a=document.createElement("div");a.classList.add("paddingWrapper"),a.style.paddingBottom="56.25%",a.style.position="relative",a.style.width="100%",a.appendChild(s);let c=null;(t||r)&&(c=document.createElement("div"),c.classList.add("mcuLayers"),c.style.display="none",a.appendChild(c));const d=document.createElement("div");d.classList.add("mcuContent"),d.style.position="relative",d.style.width="100%",d.style.height="100%",d.style.margin="0 auto",d.style.display="flex",d.style.alignItems="center",d.style.justifyContent="center",d.appendChild(a),i.style.width="100%",i.style.height="100%",i.appendChild(d),dr().debug("MCU readyState 1 >>",n.readyState),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(dr().debug("Wait for the MCU to be ready"),await(({element:e})=>new Promise((t=>{e.addEventListener("canplay",(function r(){e.removeEventListener("canplay",r),t()})),e.addEventListener("resize",(function r(){e.removeEventListener("resize",r),t()}))})))({element:n})),dr().debug("MCU is ready..");const l=ic({rootElement:i,video:n,paddingWrapper:a});l.start(),o.addEventListener("ended",(()=>{l&&l.stop()})),c&&(c.style.display="block")}catch(e){dr().error("Handle video track error",e)}};class ac extends ri{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,applyMemberOverlay:o=!0,mirrorLocalVideoOverlay:i=!0,stopCameraWhileMuted:n=!0,stopMicrophoneWhileMuted:s=!0,...a}=e,c=[];c.push(Zs({speakerId:a.speakerId}));const d=(l={...a,store:this.store,customSagas:c},Go({store:l.store,customSagas:l.customSagas,Component:Ma})(l));var l;if(t)try{nc({applyLocalVideoOverlay:r,applyMemberOverlay:o,mirrorLocalVideoOverlay:i,room:d,rootElement:t})}catch(e){this.logger.error("Unable to build the video element automatically")}return d.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===d.memberId));if(t?.audio_muted)try{d.stopOutboundAudio()}catch(e){this.logger.error("Error handling audio_muted",e)}if(t?.video_muted)try{d.stopOutboundVideo()}catch(e){this.logger.error("Error handling video_muted",e)}})),s&&d.on("member.updated.audio_muted",(({member:e})=>{try{e.id===d.memberId&&"audio_muted"in e&&(e.audio_muted?d.stopOutboundAudio():d.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),n&&d.on("member.updated.video_muted",(({member:e})=>{try{e.id===d.memberId&&"video_muted"in e&&(e.video_muted?d.stopOutboundVideo():d.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),d}}}get chat(){return this._chat||(this._chat=cn.createBaseChatObject({store:this.store})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=_n.createBasePubSubObject({store:this.store})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Go({store:e.store,Component:na})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Gr.reauthAction({token:e}))}}const cc="function"==typeof CloseEvent?CloseEvent:class{constructor(e,t={}){this.type=e,Yt(this,"code"),Yt(this,"reason"),Yt(this,"wasClean"),this.code=void 0===t.code?0:t.code,this.reason=void 0===t.reason?"":t.reason,this.wasClean=void 0!==t.wasClean&&t.wasClean}};class dc extends ko{options;WebSocketConstructor=WebSocket;CloseEventConstructor=cc;agent="@signalwire/js/browser/3.28.0";tokenTyp;constructor(e){let t={};try{t=Aa(e.token,{header:!0})}catch(e){}super({...e,host:t?.ch||e.host}),this.options=e,this.tokenTyp=t.typ??"VRT"}get allowReattach(){return!1!==this.options?.reattach&&(this.isVRT()||this.isSAT())}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const{protocolKey:e}=La(this.options.token);return e?(this.logger.trace("Search protocol for",e),ja()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=La(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),ja()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=La(this.options.token);return e?ja()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=La(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),ja()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status||"disconnected"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=La(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),ja()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),ja()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),ja()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}isSAT(){return"SAT"===this.tokenTyp}}const lc=e=>{const t={...e,emitter:Qo()},r=Xo({userOptions:t,SessionConstructor:dc});return Go({store:r,Component:ac})(t)},uc=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var hc=Object.freeze({__proto__:null,Client:function(e){const t=lc(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,i)=>o in r?r[o]:uc.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,i)})},ChatMember:Rn,ChatMessage:xn});const mc=["getAllowedChannels","subscribe","publish"];var pc=Object.freeze({__proto__:null,PubSubMessage:_n.PubSubMessage,Client:function(e){const t=lc(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,i)=>o in r?r[o]:mc.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,i)})}});async function gc(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new Vo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Wo(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const fc=({baseUrl:e,timeout:t=3e4,...r},o=gc)=>async(i,n)=>{const s={...n?.body?{"Content-Type":"application/json"}:{},...r.headers,...n?.headers},a=vc({...r,...n,headers:s});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(yc({path:i,baseUrl:e,searchParams:n?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},vc=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(o=r,"string"==typeof o?o:JSON.stringify(o))}:null!=r?{...e,[t]:r}:e;var o}),{}),yc=({path:e,baseUrl:t,searchParams:r})=>{const o=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&o.searchParams.append(e,t)})),o.toString()};function bc(e,t){const r=async e=>{if(!e)return Promise.resolve(void 0);const{body:r}=await t(e);return bc(r,t)};return{data:e.data,self:async()=>{const{self:t}=e.links;return r(t)},nextPage:async()=>{const{next:t}=e.links;return r(t)},prevPage:async()=>{const{prev:t}=e.links;return r(t)},firstPage:async()=>{const{first:t}=e.links;return r(t)},hasNext:Boolean(e.links.next),hasPrev:Boolean(e.links.prev)}}function _c(e,t){const r=t.toString();return r?`${e}?${r}`:e}class wc{options;httpClient;constructor(e){this.options=e,this.httpClient=fc({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get fetch(){return this.httpClient}get httpHost(){let e={};try{e=Aa(this.options.token,{header:!0})}catch(e){}const t=this.options.host||e?.ch;return t?`fabric.${t.split(".").splice(1).join(".")}`:"fabric.signalwire.com"}async getAddress(e){let t="/api/fabric/addresses";var r;(r=e)&&"name"in r?t=`${t}?name=${e.name}`:(e=>e&&"id"in e)(e)&&(t=`${t}/${e.id}`);const{body:o}=await this.httpClient(t);if((e=>e&&"data"in e)(o)){if(!o.data[0])throw new Wo(404,"Not Found");return o.data[0]}return o}async getAddresses(e){const{type:t,displayName:r,pageSize:o,sortBy:i,sortOrder:n}=e||{},s=new URLSearchParams;t&&s.append("type",t),r&&s.append("display_name",r),o&&s.append("page_size",o.toString()),i&&s.append("sort_by",i),n&&s.append("sort_order",n);const a=_c("/api/fabric/addresses",s);dr().debug(`[getAddresses] query URL ${a}`);const{body:c}=await this.httpClient(a);return bc(c,this.httpClient)}async registerDevice(e){const{deviceType:t,deviceToken:r}=e,{body:o}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return o}async unregisterDevice(e){const{id:t}=e,r=`/subscriber/devices/${t}`;await this.httpClient(r,{method:"DELETE"})}async getSubscriberInfo(){const{body:e}=await this.httpClient("/api/fabric/subscriber/info");return e}}class Sc{conversation;payload;constructor(e,t){this.conversation=e,this.payload=t}get id(){return this.payload.id}get addressId(){return this.payload.address_id}get createdAt(){return this.payload.created_at}get lastMessageAt(){return this.payload.last_message_at}get metadata(){return this.payload.metadata}get name(){return this.payload.name}sendMessage(e){return this.conversation.sendMessage({addressId:this.id,text:e.text})}getMessages(e){return this.conversation.getConversationMessages({addressId:this.id,...e})}}const kc=10;class Ic{httpClient;wsClient;callbacks=new Set;chatSubscriptions={};constructor(e){this.httpClient=e.httpClient,this.wsClient=e.wsClient,this.wsClient.runWorker("conversationWorker",{worker:Wa,initialState:{conversation:this}})}handleEvent(e){if("chat"===e.subtype){const t=this.chatSubscriptions[e.conversation_id];t?.size&&t.forEach((t=>t(e)))}this.callbacks.size&&this.callbacks.forEach((t=>{t(e)}))}async sendMessage(e){try{const{addressId:t,text:r}=e,o="/api/fabric/messages",{body:i}=await this.httpClient.fetch(o,{method:"POST",body:{conversation_id:t,text:r}});return i}catch(e){throw new Error("Error sending message to conversation!",e)}}async getConversations(e){try{const{pageSize:t}=e||{},r="/api/fabric/conversations",o=new URLSearchParams;t&&o.append("page_size",t.toString());const{body:i}=await this.httpClient.fetch(_c(r,o)),n=this,s=i.data.map((e=>new Sc(n,e)));return bc({...i,data:s},this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation history!",e)}}async getMessages(e){try{const{pageSize:t}=e||{},r="/api/fabric/messages",o=new URLSearchParams;t&&o.append("page_size",t.toString());const{body:i}=await this.httpClient.fetch(_c(r,o));return bc(i,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async getConversationMessages(e){try{const{addressId:t,pageSize:r}=e||{},o=`/api/fabric/conversations/${t}/messages`,i=new URLSearchParams;r&&i.append("page_size",r.toString());const{body:n}=await this.httpClient.fetch(_c(o,i));return bc(n,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async getChatMessages(e){const{addressId:t,pageSize:r=kc}=e,o=async(e,i=[],n=!0)=>{const s=[...i],a=e=>e.conversation_id===t&&"chat"===e.subtype;let c;c=await(e?.());let d=c?.data.filter(a)??[],l=r-s.length;for(let e=0;e<d.length&&e<l;e++)s.push(d[e]);for(;s.length<r&&c?.hasNext&&(c=await(n?c?.nextPage():c?.prevPage()),c&&c.data.length);){l=r-s.length,d=c.data.filter(a);for(let e=0;e<d.length&&e<l;e++)s.push(d[e])}let u=[];return l<d.length&&(u=d.slice(l)),{data:s,hasNext:!!c?.hasNext||!!i.length,hasPrev:!!c?.hasPrev,nextPage:()=>o(c?.nextPage,u),prevPage:()=>o(c?.prevPage,u,!1),self:()=>o(c?.self,u),firstPage:()=>o(c?.firstPage,u)}};return o((()=>this.getConversationMessages({addressId:t,pageSize:r})))}async subscribe(e){return this.callbacks.add(e),{unsubscribe:()=>this.callbacks.delete(e)}}async subscribeChatMessages(e){const{addressId:t,onMessage:r}=e;return t in this.chatSubscriptions||(this.chatSubscriptions[t]=new Set),this.chatSubscriptions[t].add(r),{unsubscribe:()=>this.chatSubscriptions[t].delete(r)}}async joinConversation(e){try{const{addressId:t}=e,r="/api/fabric/conversations/join",{body:o}=await this.httpClient.fetch(r,{method:"POST",body:{conversation_id:t}});return o}catch(e){throw new Error("Error joining a conversation!",e)}}}class Cc{options;_client;_pendingInvites={};_handlers={};constructor(e){this.options=e,this._client=e.client}_buildNotification(e){const t=async t=>new Promise(((r,o)=>{delete this._pendingInvites[e.callID];try{const o=this.options.buildInboundCall(e,t);o.answer(),r(o)}catch(e){o(e)}})),r=()=>(delete this._pendingInvites[e.callID],this.options.executeVertoBye(e.callID,e.nodeId));return{invite:{details:e,accept:e=>t(e),reject:()=>r()}}}setNotificationHandlers(e){this._handlers.all=e.all,(e.pushNotification&&this._handlers.all!=e.pushNotification||!e.pushNotification)&&(this._handlers.pushNotification=e.pushNotification),(e.websocket&&this._handlers.all!=e.websocket||!e.websocket)&&(this._handlers.websocket=e.websocket)}handleIncomingInvite(e){if(e.callID in this._pendingInvites)return void this._client.logger.debug(`skiping nottification for pending invite to callID: ${e.callID}`);if(this._pendingInvites[e.callID]=e,!this._handlers.all&&!this._handlers[e.source])return void this._client.logger.warn("Skiping nottification due to no listeners");const t=this._buildNotification(e);this._handlers.all?.(t);const r=this._handlers[e.source];r?.(t)}}class Ec extends dc{options;connectVersion=Lr;constructor(e){super(e),this.options=e}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return e.jti}}async _checkTokenExpiration(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{const t=await this.execute(Vr(e));this._rpcConnectResult={...this._rpcConnectResult,...t}}catch(e){throw e}}}class Mc extends ri{wsClientOptions;_incomingCallManager;_disconnected=!1;constructor(e){super((e=>{const t=Xo({userOptions:e,SessionConstructor:Ec});return{...e,store:t}})(e)),this.wsClientOptions=e,this._incomingCallManager=new Cc({client:this,buildInboundCall:this.buildInboundCall.bind(this),executeVertoBye:this.executeVertoBye.bind(this)}),this.runWorker("wsClientWorker",{worker:Va,initialState:{handleIncomingInvite:e=>{this._incomingCallManager.handleIncomingInvite({source:"websocket",...e})}}})}makeFabricObject(e){const{rootElement:t,applyLocalVideoOverlay:r=!0,applyMemberOverlay:o=!0,stopCameraWhileMuted:i=!0,stopMicrophoneWhileMuted:n=!0,mirrorLocalVideoOverlay:s=!0,...a}=e,c=(d={...a,store:this.store},Go({store:d.store,Component:Qa})(d));var d;if(t)try{nc({applyLocalVideoOverlay:r,applyMemberOverlay:o,mirrorLocalVideoOverlay:s,room:c,rootElement:t})}catch(e){this.logger.error("Unable to build the video element automatically")}return c.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===c.memberId||e.member_id===c.memberId));if(t?.audio_muted)try{c.stopOutboundAudio()}catch(e){this.logger.error("Error handling audio_muted",e)}if(t?.video_muted)try{c.stopOutboundVideo()}catch(e){this.logger.error("Error handling video_muted",e)}})),n&&c.on("member.updated.audioMuted",(({member:e})=>{try{e.member_id===c.memberId&&"audio_muted"in e&&(e.audio_muted?c.stopOutboundAudio():c.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),i&&c.on("member.updated.videoMuted",(({member:e})=>{try{e.member_id===c.memberId&&"video_muted"in e&&(e.video_muted?c.stopOutboundVideo():c.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),c}buildOutboundCall(e){const[t,r]=e.to.split("?");if(!t)throw new Error("Invalid destination address");let o=!1,i=!1;"video"===new URLSearchParams(r).get("channel")&&(o=!0,i=!0);const n=this.makeFabricObject({audio:e.audio??!0,video:e.video??o,negotiateAudio:e.negotiateAudio??!0,negotiateVideo:e.negotiateVideo??i,rootElement:e.rootElement||this.wsClientOptions.rootElement,applyLocalVideoOverlay:!0,applyMemberOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,destinationNumber:t,nodeId:e.nodeId,attach:e.attach??!1,disableUdpIceServers:e.disableUdpIceServers||!1,userVariables:e.userVariables||this.wsClientOptions.userVariables});return n.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed"),n.destroy()})),this.session.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected"),n.destroy(),this.destroy()})),n.attachPreConnectWorkers(),n}buildInboundCall(e,t){const r=this.makeFabricObject({audio:t.audio??!0,video:t.video??!0,negotiateAudio:t.negotiateAudio??!0,negotiateVideo:t.negotiateVideo??!0,rootElement:t.rootElement||this.wsClientOptions.rootElement,applyLocalVideoOverlay:!0,applyMemberOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,nodeId:e.nodeId,remoteSdp:e.sdp,prevCallId:e.callID,disableUdpIceServers:t.disableUdpIceServers||!1,userVariables:t.userVariables||this.wsClientOptions.userVariables});return r.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed"),r.destroy()})),this.session.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected"),r.destroy(),this.destroy()})),r.attachPreConnectWorkers(),r}async executeVertoBye(e,t){try{return await this.execute({method:"webrtc.verto",params:{callID:e,node_id:t,message:zr({cause:"USER_BUSY",causeCode:"17",dialogParams:{callID:e}})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}async executeVertoSubscribe(e,t){try{return await this.execute({method:"webrtc.verto",params:{callID:e,node_id:t,subscribe:[],message:qr({sessid:e,eventChannel:[]})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}disconnect(){return new Promise(((e,t)=>{this._disconnected&&e(),this.session.once("session.disconnected",(()=>{this.destroy(),e(),this._disconnected=!0})),super.disconnect()}))}async dial(e){return new Promise((async(t,r)=>{try{t(this.buildOutboundCall(e))}catch(e){this.logger.error("Unable to connect and dial a call",e),r(e)}}))}async reattach(e){return new Promise((async(t,r)=>{try{t(this.buildOutboundCall({...e,attach:!0}))}catch(e){this.logger.error("Unable to connect and reattach a call",e),r(e)}}))}handlePushNotification(e){return new Promise((async(t,r)=>{const{decrypted:o,type:i}=e;"call_invite"!==i&&(this.logger.warn("Unknown notification type",e),r("Unknown notification type")),this.logger.debug("handlePushNotification",e);const{params:{params:n},node_id:s}=o;try{try{await this.executeVertoSubscribe(n.callID,s)}catch(e){this.logger.warn("Verto Subscribe",e)}this._incomingCallManager.handleIncomingInvite({source:"pushNotification",nodeId:s,...n}),t({resultType:"inboundCall"})}catch(e){r(e)}}))}updateToken(e){return new Promise(((t,r)=>{this.once("session.auth_error",(e=>{r(e)})),this.once("session.connected",(()=>{t()})),this.store.dispatch(Gr.reauthAction({token:e}))}))}async online({incomingCallHandlers:e}){return this._incomingCallManager.setNotificationHandlers(e),this.execute({method:"subscriber.online",params:{}})}offline(){return this._incomingCallManager.setNotificationHandlers({}),this.execute({method:"subscriber.offline",params:{}})}}const Pc=(()=>{let e=null;return t=>(e||(e=new Promise((async(r,o)=>{try{const o=new Mc(t),i=new wc(t),n=new Ic({httpClient:i,wsClient:o});await o.connect(),r({registerDevice:i.registerDevice.bind(i),unregisterDevice:i.unregisterDevice.bind(i),getSubscriberInfo:i.getSubscriberInfo.bind(i),disconnect:async()=>{await o.disconnect(),e=null},online:o.online.bind(o),offline:o.offline.bind(o),dial:o.dial.bind(o),reattach:o.reattach.bind(o),handlePushNotification:o.handlePushNotification.bind(o),updateToken:o.updateToken.bind(o),address:{getAddresses:i.getAddresses.bind(i),getAddress:i.getAddress.bind(i)},conversation:{getConversations:n.getConversations.bind(n),getMessages:n.getMessages.bind(n),getConversationMessages:n.getConversationMessages.bind(n),subscribe:n.subscribe.bind(n),sendMessage:n.sendMessage.bind(n),join:n.joinConversation.bind(n)},chat:{getMessages:n.getChatMessages.bind(n),subscribe:n.subscribeChatMessages.bind(n),sendMessage:n.sendMessage.bind(n),join:n.joinConversation.bind(n)},__httpClient:i,__wsClient:o})}catch(e){o(e)}})).catch((t=>{throw e=null,t}))),e)})();var Tc=Object.freeze({__proto__:null,isFabricRoomSession:Xa,SignalWire:Pc});const xc={aspectRatio:{ideal:16/9}},Rc=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:i=!0,iceServers:n,rootElementId:s,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:l=!0,speakerId:u,...h}=e,m=lc({...h});if(await m.connect(),!m)return;let p;if(s){const e=document.getElementById(s);e?p=e:(p=document.body,dr().warn(`We couldn't find an element with id: ${s}: using 'document.body' instead.`))}const g=m.rooms.makeRoomObject({audio:o,video:!0===i?xc:i,negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:p,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:l,speakerId:u});g.once("destroy",(()=>{g.emit("room.left"),m.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){dr().error("Join",e),m.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),Oc=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote","lock","unlock"],Ac=["member.joined","layout.changed"],jc=()=>{};var Lc=Object.freeze({__proto__:null,RoomSession:function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:i,applyLocalVideoOverlay:n=!0,mirrorLocalVideoOverlay:s=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,disableUdpIceServers:p=!1,...g}=e;["audio","video"].forEach((t=>{t in e&&dr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const f=!1!==e?.reattach,{callIdKey:v}=La(g.token),y={joined:({call_id:e})=>{f&&v&&ja()?.setItem(v,e)},init:()=>{f&&_.on("room.subscribed",y.joined),_.options.prevCallId=y.getPrevCallId()},destroy:()=>{f&&(_.off("room.subscribed",y.joined),v&&ja()?.removeItem(v))},getPrevCallId:()=>{if(f&&v)return ja()?.getItem(v)??void 0}},b=lc(g),_=b.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:i,applyLocalVideoOverlay:n,mirrorLocalVideoOverlay:s,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,prevCallId:y.getPrevCallId(),disableUdpIceServers:p});_.once("destroy",(()=>{_.emit("room.left",{reason:_.leaveReason}),y.destroy(),b.disconnect()})),b.session.once("session.disconnected",(()=>{_.destroy()}));const w={join:e=>new Promise((async(o,i)=>{try{_.attachPreConnectWorkers(),await b.connect();const n=e?.audio??t,s=e?.video??r,a=b._sessionAuthState;if(dr().debug("getJoinMediaParams authState?",a),a&&"video"===a.type){const t=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:i,sendVideo:n,receiveAudio:s,receiveVideo:a}=e;dr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:l}=t,u="member"===(l??"member"),h=u&&"both"===c,m=u&&"both"===d,p="none"!==c,g="none"!==d,f=Boolean(i??r),v=Boolean(n??o),y=Boolean(s??r),b=Boolean(a??o);return!h&&f&&dr().info("Not allowed to send audio on this room. Default values will be used."),!m&&v&&dr().info("Not allowed to send video on this room. Default values will be used."),!p&&y&&dr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&dr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:m&&v,mustRecvAudio:p&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(n),sendVideo:Boolean(s),...e});if(!Object.values(t).some(Boolean))return b.disconnect(),i(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));dr().debug("Set mediaOptions",t),_.updateMediaOptions({audio:!!t.mustSendAudio&&(n||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}_.once("room.subscribed",(()=>{o(_)})),y.init(),Ac.forEach((e=>_.once(e,jc))),await _.join()}catch(e){dr().error("RoomSession Join",e),b.disconnect(),i(e)}}))};return new Proxy(_,{get(e,t,r){if(t in w)return w[t];if(!e.active&&Oc.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})},createRoomObject:Rc,joinRoom:e=>Rc({...e,autoJoin:!0}),createClient:lc,isVideoRoomSession:Pa}),Dc=Object.freeze({__proto__:null,getDevices:ys,getCameraDevices:()=>ys("camera"),getMicrophoneDevices:()=>ys("microphone"),getSpeakerDevices:bs,getDevicesWithPermissions:fs,getCameraDevicesWithPermissions:()=>fs("camera"),getMicrophoneDevicesWithPermissions:()=>fs("microphone"),getSpeakerDevicesWithPermissions:()=>fs("speaker"),checkPermissions:ls,checkCameraPermissions:us,checkMicrophonePermissions:hs,checkSpeakerPermissions:ms,requestPermissions:async e=>{try{const t=await ps(e);is(t)}catch(e){throw e}},createDeviceWatcher:Es,createCameraDeviceWatcher:()=>Es({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Es({targets:["microphone"]}),createSpeakerDeviceWatcher:Ms,supportsMediaDevices:Yn,supportsGetUserMedia:()=>"function"==typeof Zn().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Zn().getDisplayMedia,getUserMedia:ps,getDisplayMedia:gs,enumerateDevices:cs,enumerateDevicesByKind:ds,getSupportedConstraints:es,supportsMediaOutput:rs,setMediaElementSinkId:os,stopStream:is,stopTrack:ns,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Ps(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},ps(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,o=new(window.AudioContext||window.webkitAudioContext),i=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let n,s;try{o.createMediaStreamSource(t).connect(i)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(i.frequencyBinCount);i.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;s!==t&&(s=t,r.emit("volumeChanged",Math.min(s,100))),n=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};n=requestAnimationFrame(a);const c=()=>{n&&cancelAnimationFrame(n),"closed"!==o.state&&o.close().catch((e=>{dr().error("Error closing the AudioContext",e)})),Ps(e)||t.getTracks().forEach((e=>e.stop())),r.emit("destroyed",null),r.removeAllListeners()};return new Proxy(r,{get:(e,t,r)=>"destroy"===t?c:Reflect.get(e,t,r)})}});e.Chat=hc,e.Fabric=Tc,e.LocalVideoOverlay=Za,e.PubSub=pc,e.SignalWire=Pc,e.UserOverlay=Ya,e.Video=Lc,e.WebRTC=Dc,e.buildVideoElement=nc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
6
|
+
!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).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,i;r=t,i=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),i=["trace","debug","info","warn","error"],o={},n=null;function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(){for(var r=this.getLevel(),o=0;o<i.length;o++){var n=i[o];this[n]=o<r?e:this.methodFactory(n,r,this.name)}if(this.log=this.debug,typeof console===t&&r<this.levels.SILENT)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,o,n){return function(i){return"debug"===i&&(i="log"),typeof console!==t&&("trace"===i&&r?a:void 0!==console[i]?s(console,i):void 0!==console.log?s(console,"log"):e)}(i)||d.apply(this,arguments)}function u(e,r){var s,a,d,u=this,h="loglevel";function m(){var e;if(typeof window!==t&&h){try{e=window.localStorage[h]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,i=encodeURIComponent(h),o=r.indexOf(i+"=");-1!==o&&(e=/^([^;]+)/.exec(r.slice(o+i.length+1))[1])}catch(e){}return void 0===u.levels[e]&&(e=void 0),e}}function p(e){var t=e;if("string"==typeof t&&void 0!==u.levels[t.toUpperCase()]&&(t=u.levels[t.toUpperCase()]),"number"==typeof t&&t>=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=r||l,u.getLevel=function(){return null!=d?d:null!=a?a:s},u.setLevel=function(e,r){return d=p(e),!1!==r&&function(e){var r=(i[e]||"silent").toUpperCase();if(typeof window!==t&&h){try{return void(window.localStorage[h]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(h)+"="+r+";"}catch(e){}}}(d),c.call(u)},u.setDefaultLevel=function(e){a=p(e),m()||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(n!==u&&(s=p(n.getLevel())),c.call(u),n===u)for(var e in o)o[e].rebuild()},s=p(n?n.getLevel():"WARN");var g=m();null!=g&&(d=p(g)),c.call(u)}(n=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=o[e];return t||(t=o[e]=new u(e,n.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return n.noConflict=function(){return typeof window!==t&&window.log===n&&(window.log=h),n},n.getLoggers=function(){return o},n.default=n,n},e.exports?e.exports=i():r.log=i()}(r);var i=r.exports;let o;const n=new Uint8Array(16);function s(){if(!o&&(o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!o))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return o(n)}var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));function d(e,t=0){return c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]}function l(e,t,r){function i(e,i,o,n){var s;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof i&&(i=function(e){if(!function(e){return"string"==typeof e&&a.test(e)}(e))throw TypeError("Invalid UUID");let t;const r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}(i)),16!==(null===(s=i)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(i),c.set(e,i.length),c=r(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,o){n=n||0;for(let e=0;e<16;++e)o[n+e]=c[e];return o}return d(c)}try{i.name=e}catch(e){}return i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",i}function u(e){return 14+(e+64>>>9<<4)+1}function h(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function m(e,t,r,i,o,n){return h((s=h(h(t,e),h(i,n)))<<(a=o)|s>>>32-a,r);var s,a}function p(e,t,r,i,o,n,s){return m(t&r|~t&i,e,t,o,n,s)}function g(e,t,r,i,o,n,s){return m(t&i|r&~i,e,t,o,n,s)}function f(e,t,r,i,o,n,s){return m(t^r^i,e,t,o,n,s)}function v(e,t,r,i,o,n,s){return m(r^(t|~i),e,t,o,n,s)}l("v3",48,(function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){const t=[],r=32*e.length,i="0123456789abcdef";for(let o=0;o<r;o+=8){const r=e[o>>5]>>>o%32&255,n=parseInt(i.charAt(r>>>4&15)+i.charAt(15&r),16);t.push(n)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[u(t)-1]=t;let r=1732584193,i=-271733879,o=-1732584194,n=271733878;for(let t=0;t<e.length;t+=16){const s=r,a=i,c=o,d=n;r=p(r,i,o,n,e[t],7,-680876936),n=p(n,r,i,o,e[t+1],12,-389564586),o=p(o,n,r,i,e[t+2],17,606105819),i=p(i,o,n,r,e[t+3],22,-1044525330),r=p(r,i,o,n,e[t+4],7,-176418897),n=p(n,r,i,o,e[t+5],12,1200080426),o=p(o,n,r,i,e[t+6],17,-1473231341),i=p(i,o,n,r,e[t+7],22,-45705983),r=p(r,i,o,n,e[t+8],7,1770035416),n=p(n,r,i,o,e[t+9],12,-1958414417),o=p(o,n,r,i,e[t+10],17,-42063),i=p(i,o,n,r,e[t+11],22,-1990404162),r=p(r,i,o,n,e[t+12],7,1804603682),n=p(n,r,i,o,e[t+13],12,-40341101),o=p(o,n,r,i,e[t+14],17,-1502002290),i=p(i,o,n,r,e[t+15],22,1236535329),r=g(r,i,o,n,e[t+1],5,-165796510),n=g(n,r,i,o,e[t+6],9,-1069501632),o=g(o,n,r,i,e[t+11],14,643717713),i=g(i,o,n,r,e[t],20,-373897302),r=g(r,i,o,n,e[t+5],5,-701558691),n=g(n,r,i,o,e[t+10],9,38016083),o=g(o,n,r,i,e[t+15],14,-660478335),i=g(i,o,n,r,e[t+4],20,-405537848),r=g(r,i,o,n,e[t+9],5,568446438),n=g(n,r,i,o,e[t+14],9,-1019803690),o=g(o,n,r,i,e[t+3],14,-187363961),i=g(i,o,n,r,e[t+8],20,1163531501),r=g(r,i,o,n,e[t+13],5,-1444681467),n=g(n,r,i,o,e[t+2],9,-51403784),o=g(o,n,r,i,e[t+7],14,1735328473),i=g(i,o,n,r,e[t+12],20,-1926607734),r=f(r,i,o,n,e[t+5],4,-378558),n=f(n,r,i,o,e[t+8],11,-2022574463),o=f(o,n,r,i,e[t+11],16,1839030562),i=f(i,o,n,r,e[t+14],23,-35309556),r=f(r,i,o,n,e[t+1],4,-1530992060),n=f(n,r,i,o,e[t+4],11,1272893353),o=f(o,n,r,i,e[t+7],16,-155497632),i=f(i,o,n,r,e[t+10],23,-1094730640),r=f(r,i,o,n,e[t+13],4,681279174),n=f(n,r,i,o,e[t],11,-358537222),o=f(o,n,r,i,e[t+3],16,-722521979),i=f(i,o,n,r,e[t+6],23,76029189),r=f(r,i,o,n,e[t+9],4,-640364487),n=f(n,r,i,o,e[t+12],11,-421815835),o=f(o,n,r,i,e[t+15],16,530742520),i=f(i,o,n,r,e[t+2],23,-995338651),r=v(r,i,o,n,e[t],6,-198630844),n=v(n,r,i,o,e[t+7],10,1126891415),o=v(o,n,r,i,e[t+14],15,-1416354905),i=v(i,o,n,r,e[t+5],21,-57434055),r=v(r,i,o,n,e[t+12],6,1700485571),n=v(n,r,i,o,e[t+3],10,-1894986606),o=v(o,n,r,i,e[t+10],15,-1051523),i=v(i,o,n,r,e[t+1],21,-2054922799),r=v(r,i,o,n,e[t+8],6,1873313359),n=v(n,r,i,o,e[t+15],10,-30611744),o=v(o,n,r,i,e[t+6],15,-1560198380),i=v(i,o,n,r,e[t+13],21,1309151649),r=v(r,i,o,n,e[t+4],6,-145523070),n=v(n,r,i,o,e[t+11],10,-1120210379),o=v(o,n,r,i,e[t+2],15,718787259),i=v(i,o,n,r,e[t+9],21,-343485551),r=h(r,s),i=h(i,a),o=h(o,c),n=h(n,d)}return[r,i,o,n]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(u(t));for(let i=0;i<t;i+=8)r[i>>5]|=(255&e[i/8])<<i%32;return r}(e),8*e.length))}));var y={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function b(e,t,r){if(y.randomUUID&&!t&&!e)return y.randomUUID();const i=(e=e||{}).random||(e.rng||s)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=i[e];return t}return d(i)}function _(e,t,r,i){switch(e){case 0:return t&r^~t&i;case 1:case 3:return t^r^i;case 2:return t&r^t&i^r&i}}function w(e,t){return e<<t|e>>>32-t}function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function k(e,t,r){return(t=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?I(Object(r),!0).forEach((function(t){k(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):I(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function E(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}l("v5",80,(function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const i=Math.ceil((e.length/4+2)/16),o=new Array(i);for(let t=0;t<i;++t){const r=new Uint32Array(16);for(let i=0;i<16;++i)r[i]=e[64*t+4*i]<<24|e[64*t+4*i+1]<<16|e[64*t+4*i+2]<<8|e[64*t+4*i+3];o[t]=r}o[i-1][14]=8*(e.length-1)/Math.pow(2,32),o[i-1][14]=Math.floor(o[i-1][14]),o[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const i=new Uint32Array(80);for(let t=0;t<16;++t)i[t]=o[e][t];for(let e=16;e<80;++e)i[e]=w(i[e-3]^i[e-8]^i[e-14]^i[e-16],1);let n=r[0],s=r[1],a=r[2],c=r[3],d=r[4];for(let e=0;e<80;++e){const r=Math.floor(e/20),o=w(n,5)+_(r,s,a,c)+d+t[r]+i[e]>>>0;d=c,c=a,a=w(s,30)>>>0,s=n,n=o}r[0]=r[0]+n>>>0,r[1]=r[1]+s>>>0,r[2]=r[2]+a>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+d>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var M="function"==typeof Symbol&&Symbol.observable||"@@observable",T=function(){return Math.random().toString(36).substring(7).split("").join(".")},P={INIT:"@@redux/INIT"+T(),REPLACE:"@@redux/REPLACE"+T(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+T()}};function R(e,t,r){var i;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(E(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(E(1));return r(R)(e,t)}if("function"!=typeof e)throw new Error(E(2));var o=e,n=t,s=[],a=s,c=!1;function d(){a===s&&(a=s.slice())}function l(){if(c)throw new Error(E(3));return n}function u(e){if("function"!=typeof e)throw new Error(E(4));if(c)throw new Error(E(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(E(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),s=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(E(7));if(void 0===e.type)throw new Error(E(8));if(c)throw new Error(E(9));try{c=!0,n=o(n,e)}finally{c=!1}for(var t=s=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:P.INIT}),(i={dispatch:h,subscribe:u,getState:l,replaceReducer:function(e){if("function"!=typeof e)throw new Error(E(10));o=e,h({type:P.REPLACE})}})[M]=function(){var e,t=u;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(E(11));function r(){e.next&&e.next(l())}return r(),{unsubscribe:t(r)}}})[M]=function(){return this},e},i}function x(e){for(var t=Object.keys(e),r={},i=0;i<t.length;i++){var o=t[i];"function"==typeof e[o]&&(r[o]=e[o])}var n,s=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:P.INIT}))throw new Error(E(12));if(void 0===r(void 0,{type:P.PROBE_UNKNOWN_ACTION()}))throw new Error(E(13))}))}(r)}catch(e){n=e}return function(e,t){if(void 0===e&&(e={}),n)throw n;for(var i=!1,o={},a=0;a<s.length;a++){var c=s[a],d=e[c],l=(0,r[c])(d,t);if(void 0===l)throw new Error(E(14));o[c]=l,i=i||l!==d}return(i=i||s.length!==Object.keys(e).length)?o:e}}function O(e,t){return function(){return t(e.apply(this,arguments))}}function A(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function j(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),i=function(){throw new Error(E(15))},o={getState:r.getState,dispatch:function(){return i.apply(void 0,arguments)}},n=t.map((function(e){return e(o)}));return i=A.apply(void 0,n)(r.dispatch),C(C({},r),{},{dispatch:i})}}}var L=/*#__PURE__*/Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:P,applyMiddleware:j,bindActionCreators:function(e,t){if("function"==typeof e)return O(e,t);if("object"!=typeof e||null===e)throw new Error(E(16));var r={};for(var i in e){var o=e[i];"function"==typeof o&&(r[i]=O(o,t))}return r},combineReducers:x,compose:A,createStore:R,legacy_createStore:R}),D=function(e){return"@@redux-saga/"+e},V=
|
|
7
|
+
/*#__PURE__*/
|
|
8
|
+
D("CANCEL_PROMISE"),W=
|
|
9
|
+
/*#__PURE__*/
|
|
10
|
+
D("CHANNEL_END"),N=
|
|
11
|
+
/*#__PURE__*/
|
|
12
|
+
D("IO"),$=
|
|
13
|
+
/*#__PURE__*/
|
|
14
|
+
D("MATCH"),U=
|
|
15
|
+
/*#__PURE__*/
|
|
16
|
+
D("MULTICAST"),z=
|
|
17
|
+
/*#__PURE__*/
|
|
18
|
+
D("SAGA_ACTION"),B=
|
|
19
|
+
/*#__PURE__*/
|
|
20
|
+
D("SELF_CANCELLATION"),H=
|
|
21
|
+
/*#__PURE__*/
|
|
22
|
+
D("TASK"),F=
|
|
23
|
+
/*#__PURE__*/
|
|
24
|
+
D("TASK_CANCEL"),q=
|
|
25
|
+
/*#__PURE__*/
|
|
26
|
+
D("TERMINATE"),K=
|
|
27
|
+
/*#__PURE__*/
|
|
28
|
+
D("LOCATION");function J(){return J=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},J.apply(null,arguments)}var G=function(e){return null==e},Q=function(e){return null!=e},X=function(e){return"function"==typeof e},Y=function(e){return"string"==typeof e},Z=Array.isArray,ee=function(e){return e&&X(e.then)},te=function(e){return e&&X(e.next)&&X(e.throw)},re=function e(t){return t&&(Y(t)||oe(t)||X(t)||Z(t)&&t.every(e))},ie=function(e){return e&&X(e.take)&&X(e.close)},oe=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},ne=
|
|
29
|
+
/*#__PURE__*/
|
|
30
|
+
function(){return function(){return!0}}(),se=function(){},ae=function(e){return e},ce=function(e,t){J(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))};function de(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function le(e){var t=!1;return function(){t||(t=!0,e())}}var ue=function(e){throw e},he=function(e){return{value:e,done:!0}};function me(e,t,r){void 0===t&&(t=ue),void 0===r&&(r="iterator");var i={meta:{name:r},next:e,throw:t,return:he,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(i[Symbol.iterator]=function(){return i}),i}function pe(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var ge=function(e){return Array.apply(null,new Array(e))},fe=function(e){return function(t){return e(Object.defineProperty(t,z,{value:!0}))}},ve=function(e){return e===q},ye=function(e){return e===F},be=function(e){return ve(e)||ye(e)};function _e(e,t){var r,i=Object.keys(e),o=i.length,n=0,s=Z(e)?ge(o):{},a={};return i.forEach((function(e){var i=function(i,a){r||(a||be(i)?(t.cancel(),t(i,a)):(s[e]=i,++n===o&&(r=!0,t(s))))};i.cancel=se,a[e]=i})),t.cancel=function(){r||(r=!0,i.forEach((function(e){return a[e].cancel()})))},a}function we(e){return{name:e.name||"anonymous",location:Se(e)}}function Se(e){return e[K]}function ke(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}var Ie={isEmpty:ne,put:se,take:se},Ce="TAKE",Ee="CALL",Me="FORK",Te="JOIN",Pe="SELECT",Re="CANCELLED",xe=function(e,t){var r;return(r={})[N]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function Oe(e,t){return void 0===e&&(e="*"),re(e)?(Q(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),xe(Ce,{pattern:e})):ie(r=e)&&r[U]&&Q(t)&&re(t)?xe(Ce,{channel:e,pattern:t}):ie(e)?(Q(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),xe(Ce,{channel:e})):void 0;var r}function Ae(e,t){return G(t)&&(t=e,e=void 0),xe("PUT",{channel:e,action:t})}function je(e,t){var r,i=null;return X(e)?r=e:(Z(e)?(i=e[0],r=e[1]):(i=e.context,r=e.fn),i&&Y(r)&&X(i[r])&&(r=i[r])),{context:i,fn:r,args:t}}function Le(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return xe(Ee,je(e,r))}function De(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return xe(Me,je(e,r))}function Ve(e){void 0===e&&(e=ae);for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return xe(Pe,{selector:e,args:r})}function We(){return xe(Re,{})}var Ne=[],$e=0;function Ue(e){try{He(),e()}finally{Fe()}}function ze(e){Ne.push(e),$e||(He(),qe())}function Be(e){try{return He(),e()}finally{qe()}}function He(){$e++}function Fe(){$e--}function qe(){var e;for(Fe();!$e&&void 0!==(e=Ne.shift());)Ue(e)}var Ke=function(e){return function(t){return e.some((function(e){return Ye(e)(t)}))}},Je=function(e){return function(t){return e(t)}},Ge=function(e){return function(t){return t.type===String(e)}},Qe=function(e){return function(t){return t.type===e}},Xe=function(){return ne};function Ye(e){var t="*"===e?Xe:Y(e)?Ge:Z(e)?Ke:function(e){return X(e)&&e.hasOwnProperty("toString")}(e)?Ge:X(e)?Je:oe(e)?Qe:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var Ze={type:W},et=function(e){return e&&e.type===W};function tt(e){void 0===e&&(e=function(e){void 0===e&&(e=10);var t=new Array(e),r=0,i=0,o=0,n=function(){if(0!=r){var i=t[o];return t[o]=null,r--,o=(o+1)%e,i}},s=function(){for(var e=[];r;)e.push(n());return e};return{isEmpty:function(){return 0==r},put:function(n){var a;r<e||(a=2*e,t=s(),r=t.length,i=t.length,o=0,t.length=a,e=a),function(o){t[i]=o,i=(i+1)%e,r++}(n)},take:n,flush:s}}(void 0));var t=!1,r=[];return{take:function(i){t&&e.isEmpty()?i(Ze):e.isEmpty()?(r.push(i),i.cancel=function(){de(r,i)}):i(e.take())},put:function(i){if(!t){if(0===r.length)return e.put(i);r.shift()(i)}},flush:function(r){t&&e.isEmpty()?r(Ze):r(e.flush())},close:function(){if(!t){t=!0;var e=r;r=[];for(var i=0,o=e.length;i<o;i++)(0,e[i])(Ze)}}}}function rt(e,t){void 0===t&&(t=Ie);var r,i=!1,o=tt(t),n=function(){i||(i=!0,X(r)&&r(),o.close())};return r=le(r=e((function(e){et(e)?n():o.put(e)}))),i&&r(),{take:o.take,flush:o.flush,close:n}}function it(){var e,t=!1,r=[],i=r,o=function(){i===r&&(i=r.slice())},n=function(){t=!0;var e=r=i;i=[],e.forEach((function(e){e(Ze)}))};return(e={})[U]=!0,e.put=function(e){if(!t)if(et(e))n();else for(var o=r=i,s=0,a=o.length;s<a;s++){var c=o[s];c[$](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=Xe),t?e(Ze):(e[$]=r,o(),i.push(e),e.cancel=le((function(){o(),de(i,e)})))},e.close=n,e}function ot(){var e=it(),t=e.put;return e.put=function(e){e[z]?t(e):ze((function(){t(e)}))},e}function nt(e,t){var r=e[V];X(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var st,at=0,ct=function(){return++at};function dt(e){e.isRunning()&&e.cancel()}var lt=((st={})[Ce]=function(e,t,r){var i=t.channel,o=void 0===i?e.channel:i,n=t.pattern,s=t.maybe,a=function(e){e instanceof Error?r(e,!0):!et(e)||s?r(e):r(q)};try{o.take(a,Q(n)?Ye(n):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},st.PUT=function(e,t,r){var i=t.channel,o=t.action,n=t.resolve;ze((function(){var t;try{t=(i?i.put:e.dispatch)(o)}catch(e){return void r(e,!0)}n&&ee(t)?nt(t,r):r(t)}))},st.ALL=function(e,t,r,i){var o=i.digestEffect,n=at,s=Object.keys(t);if(0!==s.length){var a=_e(t,r);s.forEach((function(e){o(t[e],n,a[e],e)}))}else r(Z(t)?[]:{})},st.RACE=function(e,t,r,i){var o=i.digestEffect,n=at,s=Object.keys(t),a=Z(t)?ge(s.length):{},c={},d=!1;s.forEach((function(e){var t=function(t,i){d||(i||be(t)?(r.cancel(),r(t,i)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=se,c[e]=t})),r.cancel=function(){d||(d=!0,s.forEach((function(e){return c[e].cancel()})))},s.forEach((function(e){d||o(t[e],n,c[e],e)}))},st[Ee]=function(e,t,r,i){var o=t.context,n=t.fn,s=t.args,a=i.task;try{var c=n.apply(o,s);if(ee(c))return void nt(c,r);if(te(c))return void _t(e,c,a.context,at,we(n),!1,r);r(c)}catch(e){r(e,!0)}},st.CPS=function(e,t,r){var i=t.context,o=t.fn,n=t.args;try{var s=function(e,t){G(e)?r(t):r(e,!0)};o.apply(i,n.concat(s)),s.cancel&&(r.cancel=s.cancel)}catch(e){r(e,!0)}},st[Me]=function(e,t,r,i){var o=t.fn,n=t.detached,s=i.task,a=function(e){var t=e.context,r=e.fn,i=e.args;try{var o=r.apply(t,i);if(te(o))return o;var n=!1;return me((function(e){return n?{value:e,done:!0}:(n=!0,{value:o,done:!ee(o)})}))}catch(e){return me((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:we(t)}(a,o);Be((function(){var t=_t(e,a,s.context,at,c,n,void 0);n?r(t):t.isRunning()?(s.queue.addTask(t),r(t)):t.isAborted()?s.queue.abort(t.error()):r(t)}))},st[Te]=function(e,t,r,i){var o=i.task,n=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&de(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(Z(t)){if(0===t.length)return void r([]);var s=_e(t,r);t.forEach((function(e,t){n(e,s[t])}))}else n(t,r)},st.CANCEL=function(e,t,r,i){t===B?dt(i.task):Z(t)?t.forEach(dt):dt(t),r()},st[Pe]=function(e,t,r){var i=t.selector,o=t.args;try{r(i.apply(void 0,[e.getState()].concat(o)))}catch(e){r(e,!0)}},st.ACTION_CHANNEL=function(e,t,r){var i=t.pattern,o=tt(t.buffer),n=Ye(i),s=function t(r){et(r)||e.channel.take(t,n),o.put(r)},a=o.close;o.close=function(){s.cancel(),a()},e.channel.take(s,n),r(o)},st[Re]=function(e,t,r,i){r(i.task.isCancelled())},st.FLUSH=function(e,t,r){t.flush(r)},st.GET_CONTEXT=function(e,t,r,i){r(i.task.context[t])},st.SET_CONTEXT=function(e,t,r,i){ce(i.task.context,t),r()},st);function ut(e,t){return e+"?"+t}function ht(e){var t=e.name,r=e.location;return r?t+" "+ut(r.fileName,r.lineNumber):t}function mt(e){var t,r=(t=[]).concat.apply(t,e.map((function(e){return e.cancelledTasks})));return r.length?["Tasks cancelled due to error:"].concat(r).join("\n"):""}var pt=null,gt=[],ft=function(e){e.crashedEffect=pt,gt.push(e)},vt=function(){pt=null,gt.length=0},yt=function(e){pt=e},bt=function(){var e,t=gt[0],r=gt.slice(1),i=t.crashedEffect?(e=Se(t.crashedEffect))?e.code+" "+ut(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+ht(t.meta)+(i?" \n when executing effect "+i:"")].concat(r.map((function(e){return" created by "+ht(e.meta)})),[mt(gt)]).join("\n")};function _t(e,t,r,i,o,n,s){var a=e.finalizeRunEffect((function(t,r,i){ee(t)?nt(t,i):te(t)?_t(e,t,d.context,r,o,!1,i):t&&t[N]?(0,lt[t.type])(e,t.payload,i,l):i(t)}));u.cancel=se;var c={meta:o,cancel:function(){0===c.status&&(c.status=1,u(F))},status:0},d=function(e,t,r,i,o,n,s){var a;void 0===s&&(s=se);var c,d,l=0,u=null,h=[],m=Object.create(r),p=function(e,t,r){var i,o=[],n=!1;function s(e){h.push.apply(h,p.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){n||(de(o,t),t.cont=se,c?s(a):(t===e&&(i=a),o.length||(n=!0,r(i))))}}function c(){n||(n=!0,o.forEach((function(e){e.cont=se,e.cancel()})),o=[])}return a(e),{addTask:a,cancelAll:c,abort:s,getTasks:function(){return o}}}(t,0,g);function g(t,r){if(r){if(l=2,ft({meta:o,cancelledTasks:h}),f.isRoot){var i=bt();vt(),e.onError(t,{sagaStack:i})}d=t,u&&u.reject(t)}else t===F?l=1:1!==l&&(l=3),c=t,u&&u.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[H]=!0,a.id=i,a.meta=o,a.isRoot=n,a.context=m,a.joiners=[],a.queue=p,a.cancel=function(){0===l&&(l=1,p.cancelAll(),g(F,!1))},a.cont=s,a.end=g,a.setContext=function(e){ce(m,e)},a.toPromise=function(){return u||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),u=e,2===l?u.reject(d):0!==l&&u.resolve(c)),u.promise;var e},a.isRunning=function(){return 0===l},a.isCancelled=function(){return 1===l||0===l&&1===t.status},a.isAborted=function(){return 2===l},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,i,o,n,s),l={task:d,digestEffect:h};return s&&(s.cancel=d.cancel),u(),d;function u(e,r){try{var o;r?(o=t.throw(e),vt()):ye(e)?(c.status=1,u.cancel(),o=X(t.return)?t.return(F):{done:!0,value:F}):o=ve(e)?X(t.return)?t.return():{done:!0}:t.next(e),o.done?(1!==c.status&&(c.status=3),c.cont(o.value)):h(o.value,i,u)}catch(e){if(1===c.status)throw e;c.status=2,c.cont(e,!0)}}function h(t,r,i,o){void 0===o&&(o="");var n,s=ct();function c(r,o){n||(n=!0,i.cancel=se,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(s,r):e.sagaMonitor.effectResolved(s,r)),o&&yt(t),i(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:s,parentEffectId:r,label:o,effect:t}),c.cancel=se,i.cancel=function(){n||(n=!0,c.cancel(),c.cancel=se,e.sagaMonitor&&e.sagaMonitor.effectCancelled(s))},a(t,s,c)}}function wt(e,t){for(var r=e.channel,i=void 0===r?ot():r,o=e.dispatch,n=e.getState,s=e.context,a=void 0===s?{}:s,c=e.sagaMonitor,d=e.effectMiddlewares,l=e.onError,u=void 0===l?pe:l,h=arguments.length,m=new Array(h>2?h-2:0),p=2;p<h;p++)m[p-2]=arguments[p];var g,f=t.apply(void 0,m),v=ct();if(c&&(c.rootSagaStarted=c.rootSagaStarted||se,c.effectTriggered=c.effectTriggered||se,c.effectResolved=c.effectResolved||se,c.effectRejected=c.effectRejected||se,c.effectCancelled=c.effectCancelled||se,c.actionDispatched=c.actionDispatched||se,c.rootSagaStarted({effectId:v,saga:t,args:m})),d){var y=ke.apply(void 0,d);g=function(e){return function(t,r,i){return y((function(t){return e(t,r,i)}))(t)}}}else g=ae;var b={channel:i,dispatch:fe(o),getState:n,sagaMonitor:c,onError:u,finalizeRunEffect:g};return Be((function(){var e=_t(b,f,a,v,we(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}var St={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function i(){}function o(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function n(e,t,i,n,s){if("function"!=typeof i)throw new TypeError("The listener must be a function");var a=new o(i,n||e,s),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new i:delete e._events[t]}function a(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,i,o=[];if(0===this._eventsCount)return o;for(i in e=this._events)t.call(e,i)&&o.push(r?i.slice(1):i);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},a.prototype.listeners=function(e){var t=this._events[r?r+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var i=0,o=t.length,n=new Array(o);i<o;i++)n[i]=t[i].fn;return n},a.prototype.listenerCount=function(e){var t=this._events[r?r+e:e];return t?t.fn?1:t.length:0},a.prototype.emit=function(e,t,i,o,n,s){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,l=this._events[a],u=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),u){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,i),!0;case 4:return l.fn.call(l.context,t,i,o),!0;case 5:return l.fn.call(l.context,t,i,o,n),!0;case 6:return l.fn.call(l.context,t,i,o,n,s),!0}for(d=1,c=new Array(u-1);d<u;d++)c[d-1]=arguments[d];l.fn.apply(l.context,c)}else{var h,m=l.length;for(d=0;d<m;d++)switch(l[d].once&&this.removeListener(e,l[d].fn,void 0,!0),u){case 1:l[d].fn.call(l[d].context);break;case 2:l[d].fn.call(l[d].context,t);break;case 3:l[d].fn.call(l[d].context,t,i);break;case 4:l[d].fn.call(l[d].context,t,i,o);break;default:if(!c)for(h=1,c=new Array(u-1);h<u;h++)c[h-1]=arguments[h];l[d].fn.apply(l[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return n(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return n(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,i,o){var n=r?r+e:e;if(!this._events[n])return this;if(!t)return s(this,n),this;var a=this._events[n];if(a.fn)a.fn!==t||o&&!a.once||i&&a.context!==i||s(this,n);else{for(var c=0,d=[],l=a.length;c<l;c++)(a[c].fn!==t||o&&!a[c].once||i&&a[c].context!==i)&&d.push(a[c]);d.length?this._events[n]=1===d.length?d[0]:d:s(this,n)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&s(this,t):(this._events=new i,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=r,a.EventEmitter=a,e.exports=a}(St);var kt=St.exports,It=Object.defineProperty,Ct=Object.defineProperties,Et=Object.getOwnPropertyDescriptor,Mt=Object.getOwnPropertyDescriptors,Tt=Object.getOwnPropertyNames,Pt=Object.getOwnPropertySymbols,Rt=Object.prototype.hasOwnProperty,xt=Object.prototype.propertyIsEnumerable,Ot=(e,t,r)=>t in e?It(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,At=(e,t)=>{for(var r in t||(t={}))Rt.call(t,r)&&Ot(e,r,t[r]);if(Pt)for(var r of Pt(t))xt.call(t,r)&&Ot(e,r,t[r]);return e},jt=(e,t)=>Ct(e,Mt(t)),Lt=(e,t)=>{var r={};for(var i in e)Rt.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&Pt)for(var i of Pt(e))t.indexOf(i)<0&&xt.call(e,i)&&(r[i]=e[i]);return r},Dt=(e,t)=>{for(var r in t)It(e,r,{get:t[r],enumerable:!0})},Vt=(e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of Tt(t))Rt.call(e,o)||o===r||It(e,o,{get:()=>t[o],enumerable:!(i=Et(t,o))||i.enumerable});return e},Wt=(e,t,r)=>(Vt(e,t,"default"),r&&Vt(r,t,"default")),Nt=(e,t,r)=>Ot(e,"symbol"!=typeof t?t+"":t,r),$t="__local__",Ut="__synthetic__",zt="chat",Bt=i.getLogger("signalwire"),Ht=Bt.methodFactory;Bt.methodFactory=(e,t,r)=>{const i=Ht(e,t,r);return function(...e){e.unshift(/* @__PURE__ */(new Date).toISOString(),"-"),i.apply(void 0,e)}};var Ft,qt=Bt.getLevel();Bt.setLevel(qt);var Kt={},Jt=()=>null!=Ft?Ft:Bt,Gt=({type:e,payload:t})=>{const r=Jt(),{logWsTraffic:i}=Kt||{};if(!i)return;const o=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,o,"\n")},Qt=()=>{const e=Jt();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?Gt:Reflect.get(e,t,r)})},Xt=/[A-Z]/g,Yt=["webrtc.message"],Zt=e=>Yt.includes(e),er=/^2[0-9][0-9]$/,tr=(e,t)=>{const{result:r={},error:i}=e;if(i)return{error:i};const{code:o,node_id:n,result:s=null}=r;return o&&!er.test(o)?{error:r}:null===s?(t&&(r.node_id=t),{result:r}):s?s.jsonrpc?tr(s,n):{result:s}:{result:r}},rr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},ir=(e,t=rr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,i])=>{const o=or(r);return e[o]="object"==typeof i&&i?Array.isArray(i)?t.propsToUpdateValue.includes(r)?i.map((e=>"string"==typeof e?or(e):ir(e))):i:ir(i):(e=>e.endsWith("At"))(o)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(i):i,e}),{}),or=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const i=t.trim().charAt(0),o=t.substr(1).toLowerCase();return`${e}${0===r?i.toLowerCase():i.toUpperCase()}${o}`}),""):e,nr=(e,t)=>(Object.keys(t).forEach((t=>{if(e.prototype.hasOwnProperty(t))throw new Error(`[extendComponent] Duplicated method name: ${t}`)})),Object.defineProperties(e.prototype,t),e),sr=(e,t)=>{if(t&&"string"==typeof t){const r=new RegExp(`^${t}.`);return e.replace(r,"")}const r=e.split(".");return r.length>1?(r.shift(),r.join(".")):e},ar=/^(ws|wss):\/\//,cr=(e,t,r)=>{let i=null;return Promise.race([e,new Promise(((e,o)=>i=setTimeout(o,t,r)))]).finally((()=>clearTimeout(i)))},dr=["video.member.updated","video.member.talking"],lr=["video.room.joined","video.track","video.active","video.answering","video.destroy","video.early","video.hangup","video.held","video.new","video.purge","video.recovering","video.requesting","video.ringing","video.trying","video.media.connected","video.media.reconnecting","video.media.disconnected","video.microphone.updated","video.camera.updated","video.speaker.updated","video.microphone.disconnected","video.camera.disconnected","video.speaker.disconnected"],ur=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return lr.includes(t)||(e=>e.includes(Ut))(t)||hr(t)||(e=>e.includes("session."))(t)?null:dr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},hr=e=>e.includes($t),mr=e=>void 0!==e&&"jti"in e,pr=e=>{var t;return At({jsonrpc:"2.0",id:null!=(t=e.id)?t:b()},e)},gr=e=>At({jsonrpc:"2.0"},e),fr={major:3,minor:0,revision:0},vr={major:4,minor:0,revision:0},yr=e=>pr({method:"signalwire.connect",params:At({version:fr,event_acks:!0},e)}),br=e=>pr({method:"signalwire.reauthenticate",params:{authentication:e}}),_r={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},wr=e=>{if(e.hasOwnProperty("dialogParams")){const t=Lt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in _r)e&&t.hasOwnProperty(e)&&(t[_r[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Sr=e=>(t={})=>pr({method:e,params:wr(t)}),kr=Sr("verto.invite"),Ir=Sr("verto.bye"),Cr=Sr("verto.modify"),Er=Sr("verto.info"),Mr=Sr("verto.answer"),Tr=Sr("verto.subscribe"),Pr=Sr("verto.pong"),Rr=(e,t)=>gr({id:e,result:{method:t}}),xr={};Dt(xr,{authErrorAction:()=>$r,authExpiringAction:()=>zr,authSuccessAction:()=>Ur,createAction:()=>Ar,destroyAction:()=>Wr,getCustomSagaActionType:()=>Gr,initAction:()=>Vr,makeCustomSagaAction:()=>Jr,reauthAction:()=>Nr,sessionDisconnectedAction:()=>Hr,sessionForceCloseAction:()=>qr,sessionReconnectingAction:()=>Fr,socketMessageAction:()=>Br});var Or={};function Ar(e,t){function r(...r){if(t){let i=t(...r);if(!i)throw new Error("prepareAction did not return an object");return At(At({type:e,payload:i.payload},"meta"in i&&{meta:i.meta}),"error"in i&&{error:i.error})}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>t.type===e,r}Dt(Or,{configureStore:()=>Dr,createAction:()=>Ar}),Wt(Or,L);var jr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?A:A.apply(null,arguments)},Lr=!0;function Dr(e){const t=function(){return[]},{reducer:r,middleware:i=t(),devTools:o=!0,preloadedState:n,enhancers:s}=e||{};let a;if("function"==typeof r)a=r;else{if(!function(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=t;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return t===r}(r))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');a=x(r)}let c=i;"function"==typeof c&&(c=c(t));const d=j(...c);let l=A;o&&(l=jr(At({trace:!Lr},"object"==typeof o&&o)));let u=[d];return Array.isArray(s)?u=[d,...s]:"function"==typeof s&&(u=s(u)),R(a,n,l(...u))}var Vr=Ar("swSdk/init"),Wr=Ar("swSdk/destroy"),Nr=Ar("swSdk/reauth"),$r=Ar("auth/error"),Ur=Ar("auth/success"),zr=Ar("auth/expiring"),Br=Ar("socket/message"),Hr=Ar("session.disconnected"),Fr=Ar("session.reconnecting"),qr=Ar("session.forceClose"),Kr=(e,t)=>`${t.type}/${e}`,Jr=(e,t)=>jt(At({},t),{type:Kr(e,t)}),Gr=(e,t)=>Kr(e,t);function Qr(e){const t={},r=[];let i;const o={addCase(e,r){const i="string"==typeof e?e:e.type;if(i in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[i]=r,o},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),o),addDefaultCase:e=>(i=e,o)};return e(o),[t,r,i]}var Xr=({name:e="",initialState:t,reducers:r,extraReducers:i})=>function(e){const{name:t}=e;if(!t)throw new Error("`name` is a required option for createSlice");const r=e.initialState,i=e.reducers||{},o=Object.keys(i),n={},s={},a={};function c(){const[t={},i=[],o]="function"==typeof e.extraReducers?Qr(e.extraReducers):[e.extraReducers],n=At(At({},t),s);return function(e,t,r=[],i){let o,[n,s,a]="function"==typeof t?Qr(t):[t,r,i];function c(e=o(),t){let r=[n[t.type],...s.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===r.filter((e=>!!e)).length&&(r=[a]),r.reduce(((e,r)=>r?r(e,t):e),e)}return o="function"==typeof e?()=>e():()=>e,c.getInitialState=o,c}(r,n,i,o)}let d;return o.forEach((e=>{const r=i[e],o=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,n[e]=c,s[o]=c,a[e]=d?Ar(o,d):Ar(o)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:n,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(Wr.type,(()=>t)),"function"==typeof i&&i(e)}});function Yr(e){return[Vr.type,Nr.type].includes(e.type)}var Zr=Xr({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,i;return jt(At({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(i=null==t?void 0:t.ice_servers)?i:[]})},authStatus:(e,{payload:t})=>jt(At({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>jt(At({},e),{authState:t})},extraReducers:e=>{e.addCase($r.type,((e,{payload:t})=>jt(At({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(Yr,(e=>jt(At({},e),{authStatus:"authorizing"})))}}),{actions:ei,reducer:ti}=Zr,ri=Symbol("BaseSession"),ii=class{constructor(e){var t,r;this.options=e,Nt(this,"__sw_symbol",ri),Nt(this,"uuid",b()),Nt(this,"WebSocketConstructor"),Nt(this,"CloseEventConstructor"),Nt(this,"agent"),Nt(this,"connectVersion",fr),Nt(this,"_rpcConnectResult"),Nt(this,"_requests",/* @__PURE__ */new Map),Nt(this,"_socket",null),Nt(this,"_host","wss://relay.signalwire.com"),Nt(this,"_executeTimeoutMs",1e4),Nt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Nt(this,"_executeQueue",/* @__PURE__ */new Set),Nt(this,"_swConnectError",Symbol.for("sw-connect-error")),Nt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Nt(this,"_checkPingDelay",15e3),Nt(this,"_checkPingTimer",null),Nt(this,"_reconnectTimer"),Nt(this,"_status","unknown"),Nt(this,"_sessionChannel"),Nt(this,"wsOpenHandler"),Nt(this,"wsCloseHandler"),Nt(this,"wsErrorHandler");const{host:i,logLevel:o="info",sessionChannel:n}=e;i&&(this._host=(e=>`${ar.test(e)?"":"wss://"}${e}`)(i)),n&&(this._sessionChannel=n),o&&(null==(r=(t=this.logger).setLevel)||r.call(t,o)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return e.signature}}get logger(){return Qt()}get connecting(){var e;return 0===(null==(e=this._socket)?void 0:e.readyState)}get connected(){var e;return 1===(null==(e=this._socket)?void 0:e.readyState)}get closing(){var e;return 2===(null==(e=this._socket)?void 0:e.readyState)}get closed(){return!this._socket||3===this._socket.readyState}get status(){return this._status}get idle(){return"idle"===this._status}get ready(){return!Boolean(this.idle||!this.connected)}set token(e){this.options.token=e}connect(){if(!(null==this?void 0:this.WebSocketConstructor))throw new Error("Missing WebSocketConstructor");if(!(null==this?void 0:this.CloseEventConstructor))throw new Error("Missing CloseEventConstructor");this._clearTimers(),this.connecting||this.connected?this.logger.warn("Session already connected."):(this._removeSocketListeners(),this.destroySocket(),this._clearCheckPingTimer(),this._socket=this._createSocket(),this._addSocketListeners())}_createSocket(){return new this.WebSocketConstructor(this._host)}destroySocket(){this._socket&&(this._socket.close(),this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"})),this._socket=null)}_addSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to add listeners");this._removeSocketListeners(),this._socket.addEventListener("open",this.wsOpenHandler),this._socket.addEventListener("close",this.wsCloseHandler),this._socket.addEventListener("error",this.wsErrorHandler),this._socket.addEventListener("message",this._onSocketMessage)}_removeSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to remove listeners");this._socket.removeEventListener("open",this.wsOpenHandler),this._socket.removeEventListener("close",this.wsCloseHandler),this._socket.removeEventListener("error",this.wsErrorHandler),this._socket.removeEventListener("message",this._onSocketMessage)}disconnect(){this._socket&&!this.closing?(this._status="disconnecting",this._checkCurrentStatus()):this.logger.debug("Session not connected or already in closing state.")}execute(e){if("disconnecting"===this._status)return this.logger.warn("Reject request because the session is disconnecting",e),Promise.reject({code:"400",message:"The SDK session is disconnecting"});if("disconnected"===this._status)return Promise.reject({code:"400",message:"The SDK is disconnected"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),cr(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this._checkCurrentStatus(),this.logger.error("Request Timeout",e),"disconnected"===this.status)return this.logger.debug("Request failed because the session is disconnected",this.status,this._socket);this._closeConnection("reconnecting")}))):(this._addToExecuteQueue(e),this.connect(),t)}get _connectParams(){return{agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}}}async authenticate(){var e,t;const r=this._connectParams;this._relayProtocolIsValid()&&(r.protocol=this.relayProtocol),(null==(e=this.options.topics)?void 0:e.length)?r.contexts=this.options.topics:(null==(t=this.options.contexts)?void 0:t.length)&&(r.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(yr(r))}authError(e){this._removeSocketListeners(),this.dispatch($r({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._status="unknown",this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(Ur())}catch(e){if(e===this._swConnectError||e===this._executeConnectionClosed)return void this.logger.debug("Invalid connect or connection closed. Waiting for retry.");this.logger.error("Auth Error",e),this.authError(e)}}_onSocketError(e){this.logger.debug("_onSocketError",e)}_onSocketClose(e){this.logger.debug("_onSocketClose",e.type,e.code,e.reason),"disconnected"!==this._status&&(this._status="reconnecting",this.dispatch(Fr()),this._clearTimers(),this._clearPendingRequests(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_clearPendingRequests(){this.logger.debug("_clearPendingRequests",this._requests.size),this._requests.forEach((({reject:e})=>{e(this._executeConnectionClosed)}))}_onSocketMessage(e){const t=this.decode(e.data);if(this.logger.wsTraffic({type:"recv",payload:t}),(e=>!(e=>Boolean(e.method))(e))(t)){const e=this._requests.get(t.id);if(e){const{rpcRequest:r,resolve:i,reject:o}=e;this._requests.delete(t.id);const{result:n,error:s}=(({response:e,request:t})=>{const{result:r={},error:i}=e;return i?{error:i}:"signalwire.connect"===t.method?{result:r}:tr(e)})({response:t,request:r});return this._checkCurrentStatus(),s?o(s):i(n)}return this.logger.warn("Unknown request for",t)}switch(t.method){case"signalwire.ping":return this._pingHandler(t);case"signalwire.disconnect":this.execute((r=t.id,gr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this._eventAcknowledgingHandler(t).catch((e=>this.logger.error("Event Acknowledging Error",e))),this.dispatch(Br(t))}var r}dispatch(e){if(!this._sessionChannel)throw new Error("Session channel does not exist");this._sessionChannel.put(e)}_relayProtocolIsValid(){var e;return this.signature&&(null==(e=null==this?void 0:this.relayProtocol)?void 0:e.split("_")[1])===this.signature}encode(e){return JSON.stringify(e)}decode(e){return(e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}})(e)}async onSwAuthorizationState(e){this.persistSwAuthorizationState(e)}async retrieveSwAuthorizationState(){return""}async persistSwAuthorizationState(e){}_send(e){this.logger.wsTraffic({type:"send",payload:e}),this._socket.send(this.encode(e))}_addToExecuteQueue(e){this.logger.warn("Request queued waiting for session to reconnect",e),this._executeQueue.add(e)}_flushExecuteQueue(){if(this._executeQueue.size){if(!this.ready)return this.logger.warn("Session not ready to flush the queue."),void this._closeConnection("reconnecting");this.logger.debug(`${this._executeQueue.size} messages to flush`),this._executeQueue.forEach((e=>{this._send(e),this._executeQueue.delete(e)})),this._executeQueue.clear()}}_clearCheckPingTimer(){clearTimeout(this._checkPingTimer)}async _pingHandler(e){var t,r,i;this._clearCheckPingTimer(),this._checkPingTimer=setTimeout((()=>{this.logger.debug("Timeout waiting for ping"),this._closeConnection("reconnecting")}),this._checkPingDelay),await this.execute((r=e.id,i=null==(t=null==e?void 0:e.params)?void 0:t.timestamp,gr({id:r,result:{timestamp:i||Date.now()/1e3}})))}async _eventAcknowledgingHandler(e){const{method:t,id:r}=e;return"signalwire.event"===t?this.execute((e=>gr({id:e,result:{}}))(r)):Promise.resolve()}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(Hr());break;case"reconnecting":this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"}))}}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection:",e),this._status=e,this.dispatch(ei.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},oi=class extends ii{constructor(e){super(e),this.options=e,Nt(this,"_expiredDiffSeconds",0),Nt(this,"_refreshTokenNotificationDiff",120),Nt(this,"_checkTokenExpirationDelay",2e4),Nt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e;if(!(null==this?void 0:this._rpcConnectResult))return 0;const{authorization:t}=this._rpcConnectResult,r=null!=(e=mr(t)?t.fabric_subscriber.expires_at:null==t?void 0:t.expires_at)?e:0;if("string"==typeof r){const e=Date.parse(r);if(!isNaN(e))return Math.floor(e/1e3)}return r}get expiresIn(){const e=Math.floor(Date.now()/1e3);return this.expiresAt-e}get expired(){return this.expiresAt>0&&this.expiresIn<=this._expiredDiffSeconds}async authenticate(){const e=jt(At({},this._connectParams),{authentication:{jwt_token:this.options.token}});if(this._relayProtocolIsValid())e.protocol=this.relayProtocol;else{const t=await this.retrieveRelayProtocol();t&&(e.protocol=t)}if(e.protocol){const t=await this.retrieveSwAuthorizationState();t&&(e.authorization_state=t)}try{this._rpcConnectResult=await this.execute(yr(e)),await this.persistRelayProtocol(),await this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute(br(e))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}async _checkTokenExpiration(){if(!this.expiresAt)return;const e=this.options.onRefreshToken;if(this.expiresIn<=this._refreshTokenNotificationDiff)if(this.dispatch(zr()),"function"==typeof e)try{const t=await e();this.dispatch(Nr({token:t}))}catch(e){this.logger.error(e)}else this.logger.warn("The token is going to expire!");clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay))}},ni={};Dt(ni,{authErrorAction:()=>$r,authExpiringAction:()=>zr,authSuccessAction:()=>Ur,configureStore:()=>Pi,connect:()=>Mi,createAction:()=>Ar,createCatchableSaga:()=>mi,createRestartableSaga:()=>ui,destroyAction:()=>Wr,eventChannel:()=>rt,getCustomSagaActionType:()=>Gr,initAction:()=>Vr,makeCustomSagaAction:()=>Jr,reauthAction:()=>Nr,sessionDisconnectedAction:()=>Hr,sessionForceCloseAction:()=>qr,sessionReconnectingAction:()=>Fr,socketMessageAction:()=>Br});var si=Xr({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>jt(At({},e),t.id in e.byId?{byId:jt(At({},e.byId),{[t.id]:At(At({},e.byId[t.id]),t)})}:{byId:jt(At({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>jt(At({},e),{byId:Object.entries(e.byId).reduce(((e,[r,i])=>(t.ids.includes(r)||(e[r]=i),e)),{})})}}),{actions:ai,reducer:ci}=si,di=(0,Or.combineReducers)({components:ci,session:ti}),li={};Dt(li,{createCatchableSaga:()=>mi,createRestartableSaga:()=>ui,eventChannel:()=>rt});var ui=e=>function*(){!function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return o=De.apply(void 0,[e].concat(r)),xe(Me,J({},o.payload,{detached:!0}));var o}((function*(){for(;;)try{Qt().debug("Run a restartable saga"),yield Le(e),Qt().debug("One of the restartable saga has ended. Restarting..")}catch(e){Qt().error("Restartable Saga Error",e)}}))},hi=e=>Qt().error("Catchable Saga Error",e),mi=(e,t=hi)=>function*(...r){try{yield Le(e,...r)}catch(e){t(e)}};function*pi({sessionChannel:e,swEventChannel:t,session:r}){function*i(e){yield Ae(t,(e=>{const{event_type:t,params:r,node_id:i}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(Zt(t)&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=i),{type:t,payload:e}}return{type:t,payload:r}})(e)),(e=>Zt(null==e?void 0:e.event_type))(e)||(e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))})(e)||((e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type))(e)?r.onSwAuthorizationState(e.params.authorization_state):yield Ae({type:e.event_type,payload:e}))}Qt().debug("sessionChannelWatcher [started]");const o=mi((function*(e){if(e.type!==Br.type)return void(yield Ae(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return Qt().debug(`Unknown message: ${t}`,e);yield De(i,r)}),(e=>{Qt().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Oe(e);yield De(o,t)}}catch(e){Qt().error("sessionChannelWorker error:",e)}finally{Qt().debug("sessionChannelWorker [finally]")}}var gi=class e extends Error{constructor(t,r){super(r),this.code=t,this.message=r,Nt(this,"name","AuthError"),Object.setPrototypeOf(this,e.prototype)}},fi=class e extends Error{constructor(t,r,i){super(r),this.code=t,this.message=r,this.response=i,Nt(this,"name","HttpError"),Object.setPrototypeOf(this,e.prototype)}};function*vi({initSession:e,sessionEmitter:t,userOptions:r,channels:i}){var o;Qt().debug("sessionSaga [started]");const n=e(),s=i.swEventChannel,a=i.sessionChannel;let c=[];if(null==(o=r.workers)?void 0:o.length)try{const e=r.workers.map((e=>Le(ui(e))));c=yield function(e){var t=xe("ALL",e);return t.combinator=!0,t}(e)}catch(e){Qt().error("Error running custom workers",e)}const d=yield De(pi,{session:n,sessionChannel:a,swEventChannel:s}),l=yield De(bi,{session:n,sessionEmitter:t,sessionChannel:a,userOptions:r});n.connect(),yield Oe(Wr.type),n.disconnect(),yield Oe(Hr.type),t.emit("session.disconnected"),l.cancel(),d.cancel(),c.forEach((e=>e.cancel())),s.close(),a.close(),Qt().debug("sessionSaga [ended]")}function*yi({session:e,token:t,sessionEmitter:r}){try{e.reauthenticate&&(e.token=t,yield Le(e.reauthenticate),yield Ae(ei.connected(e.rpcConnectResult)),r.emit("session.connected"))}catch(t){Qt().error("Reauthenticate Error",t),e.authError(t)}}function*bi(e){Qt().debug("sessionStatusWatcher [started]");const{session:t,sessionEmitter:r}=e;try{for(;;){const i=yield Oe([Ur.type,$r.type,zr.type,Nr.type,Fr.type,qr.type]);switch(Qt().debug("sessionStatusWatcher",i.type,i.payload),i.type){case Ur.type:yield Ae(ei.connected(t.rpcConnectResult)),r.emit("session.connected");break;case $r.type:yield De(_i,jt(At({},e),{action:i}));break;case zr.type:r.emit("session.expiring");break;case Nr.type:yield De(yi,{session:t,token:i.payload.token,sessionEmitter:r});break;case Fr.type:r.emit("session.reconnecting");break;case qr.type:t.forceClose()}}}finally{(yield We())&&Qt().debug("sessionStatusWatcher [cancelled]")}}function*_i(e){Qt().debug("sessionAuthErrorSaga [started]");try{const{action:t,sessionEmitter:r}=e,{error:i}=t.payload,o=i?new gi(i.code,i.message):new Error("Unauthorized");r.emit("session.auth_error",o)}finally{(yield We())&&Qt().debug("sessionAuthErrorSaga [cancelled]")}}var wi={};Dt(wi,{getAuthError:()=>Ci,getAuthState:()=>Ei,getAuthStatus:()=>Ii,getIceServers:()=>Si,getSession:()=>ki});var Si=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},ki=e=>e.session,Ii=({session:e})=>e.authStatus,Ci=({session:e})=>e.authError,Ei=({session:e})=>e.authState,Mi=e=>{const{sessionListeners:t={},store:r,Component:i,customSagas:o=[]}=e,n=Object.keys(t);return e=>{const s=new i(jt(At({},e),{store:r})),a=/* @__PURE__ */new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),i=ki(e);for(const e of n){if(!1===c)return;const r=`session.${e}`,o=a.get(r),n=i[e];if(void 0!==n&&o!==n){a.set(r,n);const o=t[e];"string"==typeof o?s[o](i):"function"==typeof o&&o(i)}}})),l=null==o?void 0:o.map((e=>r.runSaga(e,{instance:s,runSaga:r.runSaga})));return s.destroyer=()=>{c=!1,d(),a.clear(),(null==l?void 0:l.length)&&l.forEach((e=>e.cancel()))},s}},Ti=()=>new kt;Wt(ni,Or);var Pi=e=>{var t;const{userOptions:r,SessionConstructor:i,preloadedState:o={},runRootSaga:n=!0}=e,s=function(e){var t,r=void 0===e?{}:e,i=r.context,o=void 0===i?{}:i,n=r.channel,s=void 0===n?ot():n,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;r[i]=e[i]}return r}(r,["context","channel","sagaMonitor"]);function d(e){return t=wt.bind(null,J({},c,{context:o,channel:s,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return s.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){ce(o,e)},d}({sagaMonitor:r.sagaMonitor}),a=it(),c=tt(),d={swEventChannel:a,sessionChannel:c},l=Dr({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:di,preloadedState:o,middleware:e=>e().concat(s)}),u=(()=>{const e=/* @__PURE__ */new Map;return{get:t=>e.get(t),set:(t,r)=>(e.set(t,r),e),remove:t=>(e.delete(t),e),getAll:()=>Array.from(e.entries()),deleteAll:()=>(e.clear(),e)}})(),{initSession:h,getSession:m,sessionEmitter:p}=(e=>{const{SessionConstructor:t,userOptions:r,sessionChannel:i}=e,o=Ti();let n=null;return{session:n,initSession:()=>(n=new t(jt(At({},r),{sessionChannel:i})),n),getSession:()=>(n||Qt().warn("Session does not exist!"),n),sessionEmitter:o}})({userOptions:r,sessionChannel:c,SessionConstructor:i});if(n){const e=(e=>function*({userOptions:t,channels:r}){for(Qt().debug("rootSaga [started]"),t.logger&&(Ft=t.logger),t.debug&&(e=>{null!=e?Object.assign(Kt,e):Kt={}})(t.debug);;){yield Oe(Vr.type);try{yield Le(vi,jt(At({},e),{userOptions:t,channels:r}));break}catch(e){Qt().error("RootSaga Error:",e)}finally{(yield We())&&Qt().debug("rootSaga [cancelled]"),Qt().debug("Reboot rootSaga")}}Qt().debug("rootSaga [finished]")})({initSession:h,sessionEmitter:p});s.run(e,{userOptions:r,channels:d})}return jt(At({},l),{runSaga:(e,t)=>s.run(e,jt(At({},t),{channels:d,getSession:m,instanceMap:u})),channels:d,instanceMap:u,sessionEmitter:p})},Ri=function*(e){const{initialState:t,onDone:r,onFail:i,getSession:o}=e,{requestId:n,method:s,params:a}=t,c=o();if(!c){const e=new Error("Session does not exist!");return Qt().error(e),void(null==i||i(e))}try{let e=(({method:e,params:t})=>pr({method:e,params:t}))({id:n,method:s,params:a});const t=yield Le(c.execute,e);null==r||r(t)}catch(e){Qt().warn("Execute error: ",e),null==i||i(e)}},xi=e=>e,Oi=Symbol("BaseComponent"),Ai=class{constructor(e){this.options=e,Nt(this,"__sw_symbol",Oi),Nt(this,"uuid",b()),Nt(this,"_customSagaTriggers",/* @__PURE__ */new Map),Nt(this,"_destroyer"),Nt(this,"eventEmitter"),Nt(this,"_runningWorkers",[]),Nt(this,"_workers",/* @__PURE__ */new Map),this.eventEmitter=new kt}get __uuid(){return this.uuid}get logger(){return Qt()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.store.instanceMap}get emitter(){return this.eventEmitter}get sessionEmitter(){return this.store.sessionEmitter}get session(){return this.sessionEmitter}on(e,t){return this.emitter.on(e,t)}once(e,t){return this.emitter.once(e,t)}off(e,t){return this.emitter.off(e,t)}removeAllListeners(e){return e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.emitter)}eventNames(){return this.emitter.eventNames()}sessionEventNames(){return this.sessionEmitter.eventNames()}getSubscriptions(){return ur(this.eventNames())}emit(e,...t){return this.emitter.emit(e,...t)}listenerCount(e){return this.emitter.listenerCount(e)}destroy(){var e;null==(e=this._destroyer)||e.call(this),this.removeAllListeners(),this.detachWorkers()}execute({method:e,params:t},{transformParams:r=xi,transformResolve:i=xi,transformReject:o=xi}={transformParams:xi,transformResolve:xi,transformReject:xi}){return new Promise(((n,s)=>{const a=b();this.runWorker("executeActionWorker",{worker:Ri,onDone:e=>n(i(e)),onFail:e=>s(o(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const i=b();this._customSagaTriggers.set(i,{resolve:t,reject:r}),this.store.dispatch(At({dispatchId:i},Jr(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const i=this._customSagaTriggers.get(e);i&&(i[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}getStateProperty(e){return this[e]}get _sessionAuthStatus(){return Ii(this.store.getState())}get _sessionAuthState(){return Ei(this.store.getState())}_waitUntilSessionAuthorized(){switch(Ii(this.store.getState())){case"authorized":return Promise.resolve(this);case"unknown":case"authorizing":return new Promise(((e,t)=>{const r=this.store.subscribe((()=>{const i=Ii(this.store.getState()),o=Ci(this.store.getState());if("authorized"===i)e(this),r();else if("unauthorized"===i){const e=o?new gi(o.code,o.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}runWorker(e,t){return this._workers.has(e)?Qt().warn(`[runWorker] Worker with name ${e} has already been registerd.`):this._setWorker(e,t),this._attachWorker(e,t)}_setWorker(e,t){this._workers.set(e,t)}_attachWorker(e,t){var r=t,{worker:i}=r,o=Lt(r,["worker"]);const n=this.store.runSaga(i,At({instance:this,runSaga:this.store.runSaga},o));return this._runningWorkers.push(n),this._workers.delete(e),n}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},ji=class extends Ai{constructor(e){super(e),this.options=e}connect(){const e=Ii(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(Vr()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(Wr())}removeAllListeners(e){return this.sessionEventNames().forEach((e=>{this.sessionEmitter.off(e)})),super.removeAllListeners(e)}},Li=class extends Ai{constructor(e){super(e),this.options=e,Nt(this,"subscribeMethod","signalwire.subscribe"),Nt(this,"subscribeParams",{}),Nt(this,"_latestExecuteParams");const t=()=>{this._latestExecuteParams=void 0};super.session.on("session.connected",t),super.session.on("session.disconnected",t),super.session.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:jt(At({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},Di={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(Di).map((e=>`video.member.updated.${e}`));var Vi=ir(Di);Object.keys(Vi).map((e=>`member.updated.${e}`));var Wi={};Dt(Wi,{getComponent:()=>Ni,getComponentsById:()=>$i,getComponentsToCleanup:()=>Ui});var Ni=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},$i=({components:e})=>e.byId,Ui=e=>{const t=$i(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r};Object.keys({audioMuted:!0,videoMuted:!0,deaf:!0,visible:!0,inputVolume:1,outputVolume:1,inputSensitivity:1}).map((e=>`member.updated.${e}`));var zi={};Dt(zi,{RoomSessionPlaybackAPI:()=>Do,RoomSessionRecordingAPI:()=>jo,RoomSessionStreamAPI:()=>Wo,audioMuteMember:()=>po,audioUnmuteMember:()=>go,createRoomSessionPlaybackObject:()=>Vo,createRoomSessionRecordingObject:()=>Lo,createRoomSessionStreamObject:()=>No,deafMember:()=>yo,deleteMemberMeta:()=>Oo,deleteMeta:()=>lo,demote:()=>Co,getLayouts:()=>qi,getMemberMeta:()=>Po,getMembers:()=>Ki,getMeta:()=>so,getPlaybacks:()=>io,getRecordings:()=>to,getStreams:()=>uo,hideVideoMuted:()=>Qi,lock:()=>Yi,play:()=>oo,promote:()=>Io,removeAllMembers:()=>To,removeMember:()=>Mo,setDeaf:()=>_o,setHideVideoMuted:()=>eo,setInputSensitivityMember:()=>ko,setInputVolumeMember:()=>wo,setLayout:()=>Ji,setMemberMeta:()=>Ro,setMemberPosition:()=>Eo,setMeta:()=>ao,setOutputVolumeMember:()=>So,setPositions:()=>Gi,setPrioritizeHandraise:()=>mo,setRaisedHand:()=>Ao,showVideoMuted:()=>Xi,startRecording:()=>ro,startStream:()=>ho,undeafMember:()=>bo,unlock:()=>Zi,updateMemberMeta:()=>xo,updateMeta:()=>co,videoMuteMember:()=>fo,videoUnmuteMember:()=>vo});var Bi=()=>{},Hi=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:At({room_session_id:this.roomSessionId},r)},t)}}),Fi=(e,t={})=>({value:function(r={}){var i=r,{memberId:o}=i,n=Lt(i,["memberId"]);return this.execute({method:e,params:At({room_session_id:this.roomSessionId,member_id:o||this.memberId},n)},t)}}),qi=Hi("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),Ki=Hi("video.members.get",{transformResolve:e=>({members:e.members})}),Ji=Hi("video.set_layout",{transformResolve:Bi}),Gi=Hi("video.set_position",{transformResolve:Bi}),Qi=Hi("video.hide_video_muted",{transformResolve:Bi}),Xi=Hi("video.show_video_muted",{transformResolve:Bi}),Yi=Hi("video.lock",{transformResolve:Bi}),Zi=Hi("video.unlock",{transformResolve:Bi}),eo={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:Bi})}},to={value:function(){return new Promise((async(e,t)=>{try{const{recordings:t}=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}):t=Lo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({recordings:r})}catch(e){t(e)}}))}},ro={value:function(){return new Promise((async(e,t)=>{try{const{recording:t}=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}}),r=Lo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},io={value:function(){return new Promise((async(e,t)=>{try{const{playbacks:t}=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}):t=Vo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({playbacks:r})}catch(e){t(e)}}))}},oo={value:function(e){var t=e,{seekPosition:r,currentTimecode:i}=t,o=Lt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||i,{playback:n}=await this.execute({method:"video.playback.start",params:At({room_session_id:this.roomSessionId,seek_position:t},o)}),s=Vo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:n}});this.instanceMap.set(s.id,s),e(s)}catch(e){t(e)}}))}},no=e=>Hi(e,{transformResolve:Bi,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Lt(t,["room_session_id"])}}}),so=Hi("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ao=no("video.set_meta"),co=no("video.update_meta"),lo={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},uo={value:function(){return new Promise((async(e,t)=>{try{const{streams:t}=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}):t=No({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({streams:r})}catch(e){t(e)}}))}},ho={value:function(e){return new Promise((async(t,r)=>{try{const{stream:r}=await this.execute({method:"video.stream.start",params:At({room_session_id:this.roomSessionId},e)}),i=No({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:r}});this.instanceMap.set(i.id,i),t({stream:i})}catch(e){r(e)}}))}},mo={value:function(e){return this.execute({method:"video.prioritize_handraise",params:{room_session_id:this.roomSessionId,enable:e}})}},po=Fi("video.member.audio_mute",{transformResolve:Bi}),go=Fi("video.member.audio_unmute",{transformResolve:Bi}),fo=Fi("video.member.video_mute",{transformResolve:Bi}),vo=Fi("video.member.video_unmute",{transformResolve:Bi}),yo=Fi("video.member.deaf",{transformResolve:Bi}),bo=Fi("video.member.undeaf",{transformResolve:Bi}),_o={value:function(e){return this.execute({method:e?"video.member.deaf":"video.member.undeaf",params:{room_session_id:this.roomSessionId,member_id:this.memberId}},{transformResolve:Bi})}},wo=Fi("video.member.set_input_volume",{transformResolve:Bi}),So=Fi("video.member.set_output_volume",{transformResolve:Bi}),ko=Fi("video.member.set_input_sensitivity",{transformResolve:Bi}),Io={value:function(e){var t=e,{memberId:r,mediaAllowed:i,joinAudioMuted:o,joinVideoMuted:n}=t,s=Lt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:At({room_session_id:this.roomSessionId,member_id:r,media_allowed:i,join_audio_muted:o,join_video_muted:n},s)},{transformResolve:Bi})}},Co={value:function({memberId:e,mediaAllowed:t}){return this.execute({method:"video.member.demote",params:{room_session_id:this.roomSessionId,member_id:e,media_allowed:t}},{transformResolve:Bi})}},Eo=Fi("video.member.set_position",{transformResolve:Bi}),Mo={value:function(e){var t=e,{memberId:r}=t,i=Lt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:At({room_session_id:this.roomSessionId,member_id:r},i)},{transformResolve:Bi})}},To={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:Bi})}},Po=Fi("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Ro=Fi("video.member.set_meta",{transformResolve:Bi}),xo=Fi("video.member.update_meta",{transformResolve:Bi}),Oo=Fi("video.member.delete_meta",{transformResolve:Bi}),Ao={value:function(e){const{raised:t=!0,memberId:r=this.memberId}=e||{};if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:t?"video.member.raisehand":"video.member.lowerhand",params:{room_session_id:this.roomSessionId,member_id:r}},{transformResolve:Bi})}},jo=class extends Ai{constructor(e){super(e),Nt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.recording.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.recording.state}get duration(){return this._payload.recording.duration}get startedAt(){if(this._payload.recording.started_at)return new Date(1e3*this._payload.recording.started_at)}get endedAt(){if(this._payload.recording.ended_at)return new Date(1e3*this._payload.recording.ended_at)}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.recording.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.recording.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.recording.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}},Lo=e=>Mi({store:e.store,Component:jo})(e),Do=class extends Ai{constructor(e){super(e),Nt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.playback.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get url(){return this._payload.playback.url}get state(){return this._payload.playback.state}get volume(){return this._payload.playback.volume}get startedAt(){if(this._payload.playback.started_at)return new Date(1e3*this._payload.playback.started_at)}get endedAt(){if(this._payload.playback.ended_at)return new Date(1e3*this._payload.playback.ended_at)}get position(){return this._payload.playback.position}get seekable(){return this._payload.playback.seekable}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.playback.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.playback.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.playback.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async setVolume(e){await this.execute({method:"video.playback.set_volume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),volume:e}})}async seek(e){await this.execute({method:"video.playback.seek_absolute",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async forward(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async rewind(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:-Math.abs(e)}})}},Vo=e=>Mi({store:e.store,Component:Do})(e),Wo=class extends Ai{constructor(e){super(e),Nt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.stream.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.stream.state}get duration(){return this._payload.stream.duration}get url(){return this._payload.stream.url}get startedAt(){if(this._payload.stream.started_at)return new Date(1e3*this._payload.stream.started_at)}get endedAt(){if(this._payload.stream.ended_at)return new Date(1e3*this._payload.stream.ended_at)}setPayload(e){this._payload=e}async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},No=e=>Mi({store:e.store,Component:Wo})(e),$o={};Dt($o,{BaseChatAPI:()=>an,BaseChatConsumer:()=>sn,ChatMember:()=>ln,ChatMessage:()=>dn,applyCommonMethods:()=>mn,createBaseChatObject:()=>cn,getMemberState:()=>Xo,getMembers:()=>Jo,getMessages:()=>Ko,publish:()=>qo,setMemberState:()=>Qo});var Uo=e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]},zo=e=>Array.isArray(e)||"string"==typeof e,Bo=()=>{},Ho=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),Fo=(e,t={})=>({value:function(r={}){var i=r,{memberId:o}=i,n=Lt(i,["memberId"]);return this.execute({method:e,params:At({member_id:o},n)},t)}}),qo=Ho("chat.publish",{transformResolve:Bo}),Ko=Ho("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>ir(e))),cursor:e.cursor})}),Jo=Ho("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>ir(e)))})}),Go=e=>{const t=zo(null==e?void 0:e.channels)?Uo(e.channels):void 0;return jt(At({},e),{channels:t})},Qo=Fo("chat.member.set_state",{transformResolve:Bo,transformParams:Go}),Xo=Fo("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Go}),Yo={};Dt(Yo,{BasePubSubConsumer:()=>tn,PubSubMessage:()=>on,createBasePubSubObject:()=>rn});var Zo=function*(e){Qt().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*i(e){const{type:r,payload:i}=e;switch(r){case`${zt}.channel.message`:{const{channel:e,message:r}=i,o=Lt(r,["member"]),n=ir(jt(At({},o),{channel:e})),s=new on(n);t.emit("message",s);break}default:Qt().warn(`Unknown pubsub event: "${r}"`)}}const o=e=>e.type.startsWith(`${zt}.`);for(;;){const e=yield Oe(r,o);yield De(i,e)}Qt().trace("pubSubWorker ended")},en=e=>e.map((e=>({name:e}))),tn=class extends Li{constructor(e){super(e),Nt(this,"subscribeMethod",`${zt}.subscribe`),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:Zo})}_getChannelsParam(e,t){const r=!e||Array.isArray(e)?e:[e];if(!Array.isArray(r)||0===r.length)throw new Error(`Please specify one or more channels when calling .${t}()`);return{channels:en(r)}}_setSubscribeParams(e){this.subscribeParams=At(At({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return At({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return At({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}getSubscriptions(){const e=this.eventNames().map((e=>`${zt}.${String(e)}`));return ur(e)}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const i=this.getSubscriptions();if(i.length>0){const e={method:`${zt}.unsubscribe`,params:jt(At({},t),{events:i})};try{await this.execute(e)}catch(e){return r(e)}}else this.logger.warn("`unsubscribe()` was called without any listeners attached.");return e()}))}updateToken(e){return new Promise(((t,r)=>{this.session.once("session.auth_error",(e=>{r(e)})),this.session.once("session.connected",(()=>{t()})),this.store.dispatch(xr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${zt}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(Ei);return e&&"channels"in e&&e.channels?e.channels:{}}},rn=e=>Mi({store:e.store,Component:tn})(e),on=class{constructor(e){this.payload=e}get id(){return this.payload.id}get channel(){return this.payload.channel}get content(){return this.payload.content}get meta(){return this.payload.meta}get publishedAt(){return this.payload.publishedAt}},nn=function*(e){Qt().trace("chatWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*i(e){const{type:r,payload:i}=e;switch(r){case"chat.channel.message":{const{channel:e,message:r}=i,o=ir(jt(At({},r),{channel:e})),n=new dn(o);t.emit("message",n);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=i,o=ir(e),n=new ln(o),s=sr(r);t.emit(s,n);break}default:Qt().warn(`Unknown chat event: "${r}"`)}}const o=e=>e.type.startsWith("chat.");for(;;){const e=yield Oe(r,o);yield De(i,e)}Qt().trace("chatWorker ended")},sn=class extends tn{constructor(e){super(e),Nt(this,"subscribeMethod","chat.subscribe")}initWorker(){this.runWorker("chat",{worker:nn})}},an=nr(sn,{publish:qo,getMembers:Jo,getMessages:Ko,setMemberState:Qo,getMemberState:Xo}),cn=e=>Mi({store:e.store,Component:an})(e),dn=class extends on{get member(){return this.payload.member}},ln=class{constructor(e){this.payload=e}get id(){return this.payload.id}get channel(){return this.payload.channel}get state(){var e;return null!=(e=this.payload.state)?e:{}}},un=e=>{const t=zo(null==e?void 0:e.channels)?Uo(e.channels):void 0;return jt(At({},e),{channels:t})},hn=()=>{};function mn(e){return class extends e{getMembers(e){return this._client.execute({method:"chat.members.get",params:e},{transformResolve:e=>({members:e.members.map((e=>ir(e)))})})}getMessages(e){return this._client.execute({method:"chat.messages.get",params:e},{transformResolve:e=>({messages:e.messages.map((e=>ir(e))),cursor:e.cursor})})}setMemberState(e={}){var t=e,{memberId:r}=t,i=Lt(t,["memberId"]);return this._client.execute({method:"chat.member.set_state",params:At({member_id:r},i)},{transformResolve:hn,transformParams:un})}getMemberState(e={}){var t=e,{memberId:r}=t,i=Lt(t,["memberId"]);return this._client.execute({method:"chat.member.get_state",params:At({member_id:r},i)},{transformResolve:e=>({channels:e.channels}),transformParams:un})}}}var pn={};Dt(pn,{memberPositionWorker:()=>yn,memberUpdatedWorker:()=>vn});var gn=function*(e,t,r){const i=sr(e);r.emit(i,t)};function*fn(e){const{action:t,memberList:r,instance:i,dispatcher:o=gn}=e,n={};t.payload.layout.layers.forEach((e=>{var t;const i=e.member_id;if(!i)return;const o=r.get(i);o&&e.position!==(null==(t=o.member)?void 0:t.current_position)?(bn({memberList:r,memberId:i,currentPosition:e.position}),n[i]=!0):n[i]=!1}));for(const[e,t]of r)if(n[e])yield null==o?void 0:o("video.member.updated",t,i);else if(void 0===n[e]){const t=bn({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==o?void 0:o("video.member.updated",t,i)}}function*vn({action:e,memberList:t,instance:r,dispatcher:i=gn}){var o,n;const s=e.payload.member.id,a=bn({memberList:t,memberId:s,currentPosition:null==(n=null==(o=t.get(s))?void 0:o.member)?void 0:n.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=jt(At({},a),{member:At(At({},a.member),e.payload.member)});t.set(s,d);for(const t of c){const o=`${e.type}.${t}`;yield null==i?void 0:i(o,d,r)}yield null==i?void 0:i(e.type,d,r)}var yn=function*({instance:e,channels:t,initialState:r,getSession:i,instanceMap:o,dispatcher:n=gn}){if(!r)return;const{swEventChannel:s}=t;let a=_n(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield Oe(s,(e=>"video.member.joined"===e.type||"video.member.updated"===e.type||"video.member.left"===e.type||"video.layout.changed"===e.type));switch(r.type){case"video.member.joined":c(r.payload);break;case"video.member.updated":c(r.payload),yield De(vn,{action:r,channels:t,memberList:a,instance:e,getSession:i,instanceMap:o,dispatcher:n});break;case"video.member.left":a.delete(r.payload.member.id);break;case"video.layout.changed":yield De(fn,{action:r,channels:t,memberList:a,instance:e,dispatcher:n})}}},bn=({memberList:e,memberId:t,currentPosition:r})=>{const i=e.get(t);if(!i)return;if(!r)return i;const o=jt(At({},i),{member:jt(At({},null==i?void 0:i.member),{current_position:r})});return e.set(t,o),o},_n=e=>{const t=e.room_session.members,r=/* @__PURE__ */new Map;return t.forEach((t=>{r.set(t.id,{room_id:e.room_session.room_id,room_session_id:e.room_session.id||e.room_session.room_session_id,member:t})})),r};Dt({},{configureFullStack:()=>Cn,configureJestStore:()=>In,createMockedLogger:()=>kn,createSessionChannel:()=>Pn,createSwEventChannel:()=>Tn,rpcConnectResultVRT:()=>Mn,wait:()=>En});var wn="8f0a119a-cda7-4497-a47d-c81493b824d4",Sn="<VRT>",kn=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),In=e=>Pi(At({userOptions:{project:wn,token:Sn,devTools:!1},SessionConstructor:ii,runRootSaga:!1},e)),Cn=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new kt,r=Pi({userOptions:{project:wn,token:Sn,devTools:!1},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(xr.initAction()),r.dispatch(xr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(xr.destroyAction())}},En=e=>new Promise((t=>{setTimeout(t,e)})),Mn={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",project_id:"8f0a119a-cda7-4497-a47d-c81493b824d4",project:"8f0a119a-cda7-4497-a47d-c81493b824d4",scopes:["video"],scope_id:"26675883-8499-4ee9-85eb-691c4aa209f8",resource:"9c80f1e8-9430-4070-a043-937eb3a96b38",join_as:"member",user_name:"Joe",room:{name:"lobby",display_name:"Lobby",scopes:["room.self.audio_mute","room.self.audio_unmute"],meta:{}},signature:"SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q",media_allowed:"all",audio_allowed:"both",video_allowed:"both",meta:{}},protocol:"signalwire_SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q_03e8c927-8ea3-4661-86d5-778c3e03296a_8f0a119a-cda7-4497-a47d-c81493b824d4",ice_servers:[{urls:"turn.swire.io:443",credential:"sFTwvi8ShXcYNOcyYjFy3ATIUpQ=",credentialType:"password",username:"1619521908:8f0a119a-cda7-4497-a47d-c81493b824d4"}]},Tn=()=>it(),Pn=()=>tt(),Rn=At({},wi);const xn=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,On=()=>{if(!xn())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},An=()=>On().getSupportedConstraints(),jn=e=>e&&e instanceof MediaStream,Ln=()=>"sinkId"in HTMLMediaElement.prototype,Dn=async(e,t)=>{if(null!==e)if("string"==typeof t)if(Ln())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?Qt().error(`You need to use HTTPS for selecting audio output device: ${e}`):Qt().error(`Error: ${e}`),e}else Qt().warn("Browser does not support output device selection.");else Qt().warn(`Invalid speaker deviceId: '${t}'`);else Qt().warn("No HTMLMediaElement to attach the speakerId")},Vn=e=>{var t;jn(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(Wn))},Wn=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},Nn={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},$n=e=>{if(e)return Nn[e]},Un=()=>On().enumerateDevices(),zn=async e=>{let t=await Un().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},Bn=async e=>{if("permissions"in navigator&&"function"==typeof navigator.permissions.query&&e)try{return"granted"===(await navigator.permissions.query({name:e})).state}catch(e){}return(async e=>{const t=await zn(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(Qt().warn(`No ${e} devices to check for permissions!`),null)})($n(e))},Hn=()=>Bn("camera"),Fn=()=>Bn("microphone"),qn=()=>Bn("speaker"),Kn=async(e={audio:!0,video:!0})=>{var t;try{const t=On().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Fn()),(null==e?void 0:e.video)&&t.push(Hn()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await cr(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":Qt().error(null!==(t=null==r?void 0:r.message)&&void 0!==t?t:"navigator.mediaDevices.getUserMedia doesn't seem to be supported.");break;case"NotFoundError":Qt().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":Qt().error("Hardware error occurred at the operating system, browser, or Web page level which prevented access to the device. This could have been caused by having the Camera or Mic being user by another application.");break;case"OverconstrainedError":Qt().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),Qt().info("List of available constraints:",An());break;case"NotAllowedError":Qt().error("The user has mostly likely denied access to the device. This could also happen if the browsing context is insecure (using HTTP rather than HTTPS)");break;case"TypeError":0===Object.keys(e).length?Qt().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):Qt().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":Qt().error("User media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.")}throw r}},Jn=e=>On().getDisplayMedia(e),Gn=async(e,t=!1)=>Xn(e,t),Qn=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:i,groupId:o})=>{var n;if(!e||t.targets&&!(null===(n=t.targets)||void 0===n?void 0:n.includes(i)))return!1;if(!o)return!0;const s=`${i}-${o}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(s)||!a||(r.push(s),0))}))},Xn=async(e,t=!1)=>{let r;if(!1===await Bn(e)){const t={audio:!(i=e)||"all"===i||"microphone"===i||"speaker"===i,video:!i||"all"===i||"camera"===i};r=await Kn(t)}var i;const o=await zn($n(e));return r&&Vn(r),!0===t?o:Qn(o)},Yn=()=>Xn("speaker"),Zn=async(e,t,r)=>{const i=await Xn(r,!0);for(let r=0;r<i.length;r++){const{deviceId:o,label:n}=i[r];if(e===o||t===n)return o}return null},es=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},ts={camera:Hn,microphone:Fn,speaker:qn},rs=["camera","microphone","speaker"],is=`Allowed targets are: '${rs.join("', '")}'`,os={speaker:Ln},ns=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:rs).filter((e=>!!rs.includes(e)||(Qt().warn(`We'll ignore the "${e}" target as it is not allowed. ${is}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${is}.`);const i=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>ts[e]())))).reduce(((e,r,i)=>{var o;const n=t[i];return e[!(n in os)||(null===(o=os[n])||void 0===o?void 0:o.call(os))?"supported":"unsupported"].push([n,!!r]),e}),{supported:[],unsupported:[]})})({targets:r});if(i.unsupported.length>0&&r.length===i.unsupported.length)throw new Error(`The platform doesn't support "${r.join(", ")}" as target/s, which means it's not possible to watch for changes on those devices.`);if(i.supported.every((([e,t])=>!t)))throw new Error("You must ask the user for permissions before being able to listen for device changes. Try calling getUserMedia() before calling `createDeviceWatcher()`.");let o=[];const n=i.supported.reduce(((e,[t,r])=>(r?e.push(t):o.push(t),e)),[]);if(n.length!==r.length){const e=i.unsupported.length>0?`The platform doesn't support "${i.unsupported.map((([e])=>e)).join(", ")}" as target/s, which means it's not possible to watch for changes on those devices. `:"",t=o.length>0?`The user hasn't granted permissions for the following targets: ${o.join(", ")}. `:"";Qt().warn(`${e}${t}We'll be watching for the following targets instead: "${n.join(", ")}"`)}return Qt().debug(`Watching these targets: "${n.join(", ")}"`),n})({targets:e.targets}),r=new kt,i=await Un(),o=null==t?void 0:t.reduce(((e,t)=>{const r=$n(t);return r&&e.push(r),e}),[]);let n=Qn(i,{excludeDefault:!0,targets:o});return On().addEventListener("devicechange",(async()=>{const e=await Un(),t=n,i=Qn(e,{excludeDefault:!0,targets:o});n=i;const s=((e,t)=>{const r=es(e),i=es(e),o=[];Qt().debug("[_getDeviceListDiff] <- oldDevices",e),Qt().debug("[_getDeviceListDiff] -> newDevices",t);const n=t.filter((e=>{const t=e.deviceId,n=r.get(t);return n&&(i.delete(t),e.label!==n.label&&o.push(e)),void 0===n}));return{updated:o.map((e=>({type:"updated",payload:e}))),removed:Array.from(i,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:n.map((e=>({type:"added",payload:e})))}})(t,i),a=s.added.length>0,c=s.removed.length>0,d=s.updated.length>0;(a||c||d)&&r.emit("changed",{changes:s,devices:i}),a&&r.emit("added",{changes:s.added,devices:i}),c&&r.emit("removed",{changes:s.removed,devices:i}),d&&r.emit("updated",{changes:s.updated,devices:i})})),r},ss=()=>ns({targets:["speaker"]}),as=e=>"function"==typeof(null==e?void 0:e.getTracks),cs=async e=>(await Yn()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e));var ds={exports:{}};!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 r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={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;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;t.push("rtp"===r?1:"rtcp"===r?2:r),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 r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\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 r;const i=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e<i.length;e++)r=i[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=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:"+r+" "+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="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},i=e.indexOf(":",t);return i>-1?(r.attribute=e.substring(t+1,i),r.value=e.substring(i+1)):r.attribute=e.substring(t+1),r},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 r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.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,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},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,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const i=t.matchPrefix(e+r,"a=ice-ufrag:")[0],o=t.matchPrefix(e+r,"a=ice-pwd:")[0];return i&&o?{usernameFragment:i.substring(12),password:o.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 r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},i=t.splitLines(e)[0].split(" ");r.profile=i[2];for(let o=3;o<i.length;o++){const n=i[o],s=t.matchPrefix(e,"a=rtpmap:"+n+" ")[0];if(s){const i=t.parseRtpMap(s),o=t.matchPrefix(e,"a=fmtp:"+n+" ");switch(i.parameters=o.length?t.parseFmtp(o[0]):{},i.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+n+" ").map(t.parseRtcpFb),r.codecs.push(i),i.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(i.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))}));const o=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{o.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let i="";i+="m="+e+" ",i+=r.codecs.length>0?"9":"0",i+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",i+=r.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",r.codecs.forEach((e=>{i+=t.writeRtpMap(e),i+=t.writeFmtp(e),i+=t.writeRtcpFb(e)}));let o=0;return r.codecs.forEach((e=>{e.maxptime>o&&(o=e.maxptime)})),o>0&&(i+="a=maxptime:"+o+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{i+=t.writeExtmap(e)})),i},t.parseRtpEncodingParameters=function(e){const r=[],i=t.parseRtpParameters(e),o=-1!==i.fecMechanisms.indexOf("RED"),n=-1!==i.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[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}),r.push(t),o&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:n?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.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,r.forEach((e=>{e.maxBitrate=l}))),r},t.parseRtcpParameters=function(e){const r={},i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];i&&(r.cname=i.value,r.ssrc=i.ssrc);const o=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=o.length>0,r.compound=0===o.length;const n=t.matchPrefix(e,"a=rtcp-mux");return r.mux=n.length>0,r},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 r;const i=t.matchPrefix(e,"a=msid:");if(1===i.length)return r=i[0].substring(7).split(" "),{stream:r[0],track:r[1]};const o=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return o.length>0?(r=o[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),i=t.matchPrefix(e,"a=max-message-size:");let o;i.length>0&&(o=parseInt(i[0].substring(19),10)),isNaN(o)&&(o=65536);const n=t.matchPrefix(e,"a=sctp-port:");if(n.length>0)return{port:parseInt(n[0].substring(12),10),protocol:r.fmt,maxMessageSize:o};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:o}}},t.writeSctpDescription=function(e,t){let r=[];return r="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&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,i){let o;const n=void 0!==r?r:2;return o=e||t.generateSessionId(),"v=0\r\no="+(i||"thisisadapterortc")+" "+o+" "+n+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const i=t.splitLines(e);for(let e=0;e<i.length;e++)switch(i[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return i[e].substring(2)}return r?t.getDirection(r):"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 r=t.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(ds);var ls=ds.exports;const us=e=>/^m=audio/.test(e),hs=e=>/^m=video/.test(e),ms=e=>e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),ps=(e,t)=>{const r=ms(e).split("\n");for(let e of r)if(e.startsWith(`m=${t}`))return!0;return!1},gs=e=>{const t="\r\n",r=e.split(t),i=r.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(i<0)return e;const o=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[i]),n=new RegExp(`a=fmtp:${o}`),s=r.findIndex((e=>n.test(e)));return s>=0?/stereo=1;/.test(r[s])||(r[s]+="; stereo=1; sprop-stereo=1"):r[i]+=`${t}a=fmtp:${o} stereo=1; sprop-stereo=1`,r.join(t)},fs=(e,t)=>{const r=ms(e).split("\n");let i=!1;const o=["inactive","recvonly","sendonly","sendrecv","stopped"];for(let e of r)if(e.startsWith("m="))i=e.startsWith(`m=${t}`);else if(i&&e.startsWith("a=")){const t=e.substring(2);if(o.includes(t))return t}return i?"sendrecv":"stopped"},vs=({localSdp:e,remoteSdp:t,media:r})=>{const i=(e=>{switch(e){case"sendrecv":return"sendrecv";case"sendonly":return"recvonly";case"recvonly":return"sendonly";default:return"inactive"}})(fs(e,r));return fs(t,r)===i},ys=e=>{Qt().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return Kn(e)},bs=async e=>{let t=(e=>{var t;return!!(e=>{var t;return(null===(t=e.negotiateAudio)||void 0===t||t)&&(!e.remoteSdp||(e=>ps(e,"audio"))(e.remoteSdp))})(e)&&(null===(t=e.audio)||void 0===t||t)})(e);const{micLabel:r="",micId:i}=e;if(i&&t){const e=await Zn(i,r,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let o=(e=>{var t;return!!(e=>{var t;return(null===(t=e.negotiateVideo)||void 0===t||t)&&(!e.remoteSdp||(e=>ps(e,"video"))(e.remoteSdp))})(e)&&(null!==(t=e.video)&&void 0!==t?t:!!e.camId)})(e);const{camLabel:n="",camId:s}=e;if(s&&o){const e=await Zn(s,n,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}},_s=(e,t)=>{const{disableUdpIceServers:r=!1}=t,i=e=>{const t="transport=udp";return Array.isArray(e)?e.filter((e=>!e.includes(t))):e.includes(t)?"":e};return e.map((e=>Object.assign(Object.assign({},e),{urls:r?i(e.urls):e.urls})))};class ws{get logger(){return Qt()}constructor(e,t){this.call=e,this.type=t,this.uuid=b(),this._negotiating=!1,this._processingRemoteSDP=!1,this._restartingIce=!1,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this._onEndedTrackHandler=this._onEndedTrackHandler.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&jn(this.options.localStream)&&(this._localStream=this.options.localStream),this.rtcConfigPolyfill=this.config}get options(){return this.call.options}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get isNegotiating(){return this._negotiating}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:_s(this.call.iceServers,{disableUdpIceServers:this.options.disableUdpIceServers}),sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(Wn(r.track),null===(t=this._localStream)||void 0===t||t.removeTrack(r.track))}catch(t){this.logger.error("RTCPeer stopTrackSender error",e,t)}}stopTrackReceiver(e){var t;try{const r=this._getReceiverByKind(e);if(!r)return this.logger.info(`There is not a '${e}' receiver to stop.`);r.track&&(Wn(r.track),null===(t=this._remoteStream)||void 0===t||t.removeTrack(r.track))}catch(t){this.logger.error("RTCPeer stopTrackReceiver error",e,t)}}async restoreTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to restore.`);if(r.track&&"ended"!==r.track.readyState)return this.logger.info(`There is already an active ${e} track.`);const i=await bs(this.options),o=await ys({[e]:i[e]});if(o&&jn(o)){const i=o.getTracks().find((t=>t.kind===e));i&&(await r.replaceTrack(i),null===(t=this._localStream)||void 0===t||t.addTrack(i))}}catch(t){this.logger.error("RTCPeer restoreTrackSender error",e,t)}}getDeviceId(e){try{const t=this._getSenderByKind(e);if(!t||!t.track)return null;const{deviceId:r=null}=t.track.getSettings();return r}catch(t){return this.logger.error("RTCPeer getDeviceId error",e,t),null}}getTrackSettings(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.getSettings():null}catch(t){return this.logger.error("RTCPeer getTrackSettings error",e,t),null}}getDeviceLabel(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.label:null}catch(t){return this.logger.error("RTCPeer getDeviceLabel error",e,t),null}}restartIceWithRelayOnly(){try{if(this.isAnswer)return this.logger.warn("Skip restartIceWithRelayOnly since we need to generate answer");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.warn("RTCPeer already with iceTransportPolicy relay only");const t=Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"});this.setConfiguration(t),this.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){if(this._negotiating||this._restartingIce)return this.logger.warn("Skip restartIce");this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this._resumeTimer?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this._resumeTimer=setTimeout((()=>{this.logger.warn("Disconnecting due to RECONNECTION_ATTEMPT_TIMEOUT"),this.call.emit("media.disconnected"),this.call.leaveReason="RECONNECTION_ATTEMPT_TIMEOUT",this.call.setState("hangup")}),12e3),this.call._closeWSConnection())}resetNeedResume(){this.clearResumeTimer(),this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void Qt().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);Qt().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,i=0,o=!0;const n=()=>{clearTimeout(t)},s=async()=>{var a,c;let d=0,l=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,i=null===(c=e.remoteVideoTrack)||void 0===c?void 0:c.id;t.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&e.trackIdentifier===r&&(Qt().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===i&&(Qt().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),l=e.packetsReceived)}))}catch(e){Qt().warn("getStats error",e)}finally{d&&d<=r&&l&&l<=i?(Qt().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),Qt().warn(`videoPacketsReceived: ${l} - previousVideoValue: ${i}`),e.triggerResume()):(r=null!=d?d:r,i=null!=l?l:i,n(),o&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>s()),e.watchMediaPacketsTimeout)))}};return{start:()=>{n(),s()},stop:()=>{o=!1,n()}}})(this),null===(e=this._mediaWatcher)||void 0===e||e.start()}async applyMediaConstraints(e,t){try{const r=this._getSenderByKind(e);if(!r||!r.track)return this.logger.info("No sender to apply constraints",e,t);if("live"===r.track.readyState){const i=Object.assign(Object.assign({},r.track.getConstraints()),t),o=this.getDeviceId(e);o&&!this.options.screenShare&&(i.deviceId={exact:o}),this.logger.info(`Apply ${e} constraints`,this.call.id,i),await r.track.applyConstraints(i)}}catch(r){this.logger.error("Error applying constraints",e,t)}}_getSenderByKind(e){var t;return(null===(t=this.instance)||void 0===t?void 0:t.getSenders)?this.instance.getSenders().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getSenders() not available."),null)}_getReceiverByKind(e){var t;return(null===(t=this.instance)||void 0===t?void 0:t.getReceivers)?this.instance.getReceivers().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getReceivers() not available."),null)}async startNegotiation(e=!1){var t,r,i;if(this._negotiating)return this.logger.warn("Skip twice onnegotiationneeded!");this._negotiating=!0;try{if((this.options.additionalDevice||this.options.screenShare)&&(null===(r=null===(t=this.instance)||void 0===t?void 0:t.getTransceivers)||void 0===r||r.call(t).forEach((e=>{e.direction="sendonly"}))),this.instance.removeEventListener("icecandidate",this._onIce),this.instance.addEventListener("icecandidate",this._onIce),this.isOffer){this.logger.debug("Trying to generate offer");const e={voiceActivityDetection:!1};this._supportsAddTransceiver()||(e.offerToReceiveAudio=this.options.negotiateAudio,e.offerToReceiveVideo=this.options.negotiateVideo);const t=await this.instance.createOffer(e);await this._setLocalDescription(t)}if(this.isAnswer){this.logger.debug("Trying to generate answer"),await this._setRemoteDescription({sdp:this.options.remoteSdp,type:"offer"});const e=await this.instance.createAnswer({voiceActivityDetection:!1});await this._setLocalDescription(e)}e&&this._sdpReady(),this.logger.info("iceGatheringState",this.instance.iceGatheringState),"gathering"===this.instance.iceGatheringState&&(this._iceTimeout=setTimeout((()=>{this._onIceTimeout()}),this.options.maxIceGatheringTimeout))}catch(e){this.logger.error(`Error creating ${this.type}:`,e),null===(i=this._pendingNegotiationPromise)||void 0===i||i.reject(e)}}onRemoteBye({code:e,message:t}){var r,i;const o={code:e,message:t};null===(r=this._rejectStartMethod)||void 0===r||r.call(this,o),null===(i=this._pendingNegotiationPromise)||void 0===i||i.reject(o),this.stop()}async onRemoteSdp(e){var t,r;if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const r=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:r}),this._processingRemoteSDP=!1,this.isOffer&&(this._resolveStartMethod(),null===(t=this._pendingNegotiationPromise)||void 0===t||t.resolve()),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e),null===(r=this._pendingNegotiationPromise)||void 0===r||r.reject(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}async start(){return new Promise((async(e,t)=>{var r;this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),null===(r=this._pendingNegotiationPromise)||void 0===r||r.reject(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let i=!1;if(this._localStream&&jn(this._localStream)){const e=this._localStream.getAudioTracks();this.logger.debug("Local audio tracks: ",e);const t=this._localStream.getVideoTracks();if(this.logger.debug("Local video tracks: ",t),i=Boolean(e.length||t.length),this.isOffer&&this._supportsAddTransceiver()){const r={direction:this.options.negotiateAudio?"sendrecv":"sendonly",streams:[this._localStream]};this.logger.debug("Applying audioTransceiverParams",r),e.forEach((e=>{this.instance.addTransceiver(e,r)}));const i={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(i.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",i),t.forEach((e=>{this.instance.addTransceiver(e,i)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),i.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",i)}}else if("function"==typeof this.instance.addTrack){const r=this._localStream;e.forEach((e=>this.instance.addTrack(e,r))),t.forEach((e=>this.instance.addTrack(e,r)))}else this.instance.addStream(this._localStream)}this.isOffer?(this.options.negotiateAudio&&this._checkMediaToNegotiate("audio"),this.options.negotiateVideo&&this._checkMediaToNegotiate("video"),this._supportsAddTransceiver()||i||this.startNegotiation()):this.startNegotiation()}))}detachAndStop(){var e;"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getTransceivers)&&this.instance.getTransceivers().forEach((e=>{e.sender.track&&e.sender.track.stop(),e.receiver.track&&e.receiver.track.stop()})),this.stop()}stop(){var e,t,r;null===(e=this._localStream)||void 0===e||e.getTracks().forEach((e=>e.stop())),null===(t=this._remoteStream)||void 0===t||t.getTracks().forEach((e=>e.stop())),null===(r=this.instance)||void 0===r||r.close(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){var e,t;if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:r}=this.instance.localDescription;if(-1===r.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this),this.isAnswer&&(this._resolveStartMethod(),null===(e=this._pendingNegotiationPromise)||void 0===e||e.resolve())}catch(e){this._rejectStartMethod(e),null===(t=this._pendingNegotiationPromise)||void 0===t||t.reject(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=ls.getMediaSections(e);for(const e of r)if(!ls.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return Qt().error("Error checking SDP",e),!1}})(this.localSdp):Boolean(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){var e;if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const t=this.getConfiguration();if("relay"===t.iceTransportPolicy){this.logger.info('RTCPeer already with "iceTransportPolicy: relay"');const t={code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"};return this._rejectStartMethod(t),null===(e=this._pendingNegotiationPromise)||void 0===e||e.reject(t),void this.call.setState("destroy")}this.setConfiguration(Object.assign(Object.assign({},t),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:i,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=gs(e.sdp)),e.sdp&&r&&i&&o&&(e.sdp=((e,t,r,i)=>{const o=e.split("\r\n");return o.forEach(((e,n)=>{/^a=fmtp:\d*/.test(e)?o[n]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${i}`:/^a=mid:(1|video)/.test(e)&&(o[n]+=`\r\nb=AS:${t}`)})),o.join("\r\n")})(e.sdp,r,i,o)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=gs(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=(e=>{const t="\r\n",r=this.instance.localDescription.sdp.split(t),i=r.findIndex(us),o=r.findIndex(hs);if(-1==o||-1==i||i<o)return e;const n=e.split(t),s=n.findIndex(us),a=n.findIndex(hs),c=n.slice(s,a),d=n.slice(a,n.length-1);return[...n.slice(0,s),...d,...c,""].join(t)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(jn(this.options.localStream))return this.options.localStream;const e=await bs(this.options);return ys(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":this.logger.debug("[test] Prevent reattach!");break;case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)})),this._attachAudioTrackListener(),this._attachVideoTrackListener()}clearTimers(){this.clearResumeTimer(),this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}clearResumeTimer(){clearTimeout(this._resumeTimer),this._resumeTimer=void 0}emitMediaConnected(){this.call.emit("media.connected")}_onEndedTrackHandler(e){const t=e.target;this.call.emit(("audio"===t.kind?"microphone":"camera")+".disconnected",{deviceId:t.id,label:t.label})}_attachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_attachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_detachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}_detachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}setConfiguration(e){var t;this.rtcConfigPolyfill=e,this.instance&&"function"==typeof(null===(t=this.instance)||void 0===t?void 0:t.setConfiguration)&&this.instance.setConfiguration(e)}getConfiguration(){var e;return this.instance&&"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getConfiguration)?this.instance.getConfiguration():this.rtcConfigPolyfill||this.config}}"function"==typeof SuppressedError&&SuppressedError;const Ss=e=>Zt(e.type),ks=function*(e){Qt().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:i}=e,{swEventChannel:o}=t,{rtcPeerId:n}=i;if(!n)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=li.createCatchableSaga((function*(e){var t,i;const{id:o,method:s,params:a={}}=e.payload,{callID:c,nodeId:d}=a,l=r.getRTCPeerById(c);if(!l)return void Qt().warn(`RTCPeer '${c}' not found for method: '${s}'`,a);const u=r.peer;switch(s){case"verto.media":case"verto.answer":l.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===s?"early":"active"),(null==a?void 0:a.sdp)&&l.onRemoteSdp(a.sdp),yield Ae(ai.upsert({id:null===(t=e.payload.params)||void 0===t?void 0:t.callID,nodeId:null===(i=e.payload.params)||void 0===i?void 0:i.nodeId})),yield Le([r,r.execute],{method:r._getRPCMethod(),params:{message:Rr(o,s),node_id:d}});break;case"verto.bye":yield Le([r,r.onVertoBye],{rtcPeerId:c,byeCause:null==a?void 0:a.cause,byeCauseCode:null==a?void 0:a.causeCode,redirectDestination:null==a?void 0:a.redirectDestination}),yield Le([r,r.execute],{method:r._getRPCMethod(),params:{message:Rr(o,s),node_id:d}});break;case"verto.ping":{const{nodeId:e}=a,t=function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(r[i[o]]=e[i[o]])}return r}(a,["nodeId"]);yield Le([r,r.execute],{method:r._getRPCMethod(),params:{message:Pr(t),node_id:e}});break}case"verto.mediaParams":{if(!c||!a.mediaParams){Qt().warn("Invalid mediaParams event",a);break}const{audio:e,video:t}=a.mediaParams;l&&t&&l.applyMediaConstraints("video",t),l&&e&&l.applyMediaConstraints("audio",e);break}case"verto.display":r.setActiveRTCPeer(n),r.emit("verto.display",e.payload.params);break;default:return Qt().warn(`Unknown Verto method: ${s}`,a)}}),(e=>{Qt().error("Verto Error",e)}));for(;;){const e=yield Oe(o,(e=>{var t;return!!Ss(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===n}));yield De(s,e)}Qt().trace("vertoEventWorker ended")},Is=function*(e){Qt().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:i}=e,{swEventChannel:o}=t,{rtcPeerId:n}=i;if(!n)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=yield Oe(o,(e=>("video.room.subscribed"===e.type||"call.joined"===e.type)&&e.payload.call_id===n)),a=JSON.parse(JSON.stringify(s.payload));r.setActiveRTCPeer(n);const c=s.payload.room_session.id||s.payload.room_session.room_session_id;yield Ae(ai.upsert({id:s.payload.call_id,roomId:s.payload.room_session.room_id,roomSessionId:c,memberId:s.payload.member_id,previewUrl:s.payload.room_session.preview_url})),r.emit("room.subscribed",s.payload),r.emit("room.joined",Cs.call(r,a)),Qt().debug("roomSubscribedWorker ended",n)};function Cs(e){return["room_session","room"].forEach((t=>{e[t]&&e[t].recordings&&(e[t].recordings=(e[t].recordings||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}):r=zi.createRoomSessionRecordingObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].playbacks&&(e[t].playbacks=(e[t].playbacks||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}):r=zi.createRoomSessionPlaybackObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].streams&&(e[t].streams=(e[t].streams||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}):r=zi.createRoomSessionStreamObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}}),this.instanceMap.set(t.id,r),r})))})),e}const Es=function*(e){Qt().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:i}=e,{swEventChannel:o}=t,{rtcPeerId:n}=i;if(!n)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const s=yield Oe(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));Qt().debug("promoteDemoteWorker:",s.type,s.payload),yield Ae(ei.updateAuthState(s.payload.authorization));const a=yield Ve(Rn.getAuthState);if(!a)throw new Error(`Invalid authState for '${s.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(s.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),Qt().debug("promoteDemoteWorker ended",n)},Ms=function*(e){Qt().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Oe([xr.authSuccessAction.type,xr.authErrorAction.type])).type){case xr.authSuccessAction.type:yield Le([t,t.resume]);break;case xr.authErrorAction.type:yield Le([t,t.setState],"hangup")}Qt().debug("sessionAuthWorker ended")},Ts={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Ps=Object.assign(Object.assign({},Ts),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Rs={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},xs={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Ts,video:Rs,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Os extends Ai{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{this.logger.debug("onVertoBye",e);const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:i="16",redirectDestination:o}=e;this.cause=String(r),this.causeCode=String(i);const n=this.getRTCPeerById(t);return n?o&&n.localSdp?(this.logger.debug("Redirect Destination to:",o,"for RTCPeer:",n.uuid),void this.executeInvite(n.localSdp,n.uuid,o)):(n.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==n?void 0:n.uuid)&&(this.logger.debug("onVertoBye go hangup"),this.setState("hangup")))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},xs),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this._initPeer()}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get nodeId(){return this.component.nodeId||this.options.nodeId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(Rn.getIceServers)}get component(){return this.select((e=>Wi.getComponent(e,this.callId)))||{}}get cameraId(){return this.peer?this.peer.getDeviceId("video"):null}get cameraLabel(){return this.peer?this.peer.getDeviceLabel("video"):null}get microphoneId(){return this.peer?this.peer.getDeviceId("audio"):null}get microphoneLabel(){return this.peer?this.peer.getDeviceLabel("audio"):null}get withAudio(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasAudioReceiver)}get withVideo(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasVideoReceiver)}get localAudioTrack(){return this.peer?this.peer.localAudioTrack:null}get localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get peer(){return this.getRTCPeerById(this.activeRTCPeerId)}set peer(e){if(e){if(this.logger.debug("Set RTCPeer",e.uuid,e),this.rtcPeerMap.set(e.uuid,e),this.peer&&this.peer.instance&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}emit(e,...t){return super.emit(e,...t)}dialogParams(e){const{destinationNumber:t,attach:r,callerName:i,callerNumber:o,remoteCallerName:n,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,reattaching:r,callerName:i,callerNumber:o,remoteCallerName:n,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l,version:1e3}}}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!jn(e))return r(new Error("Invalid stream provided."));const i=this.localStream.getAudioTracks(),o=e.getAudioTracks();o.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(i.forEach((e=>{var t;Wn(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),o.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const n=this.localStream.getVideoTracks(),s=e.getVideoTracks();s.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(n.forEach((e=>{var t;Wn(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),s.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Rn.getAuthState);return e&&mr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=this._buildPeer("offer");this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.applyConstraintsAndRefreshStream({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.applyConstraintsAndRefreshStream({audio:e})}_getTransceiverDirection(e){let t="inactive";return"audio"===e&&(t=this.options.audio&&this.options.negotiateAudio?"sendrecv":this.options.audio&&!this.options.negotiateAudio?"sendonly":!this.options.audio&&this.options.negotiateAudio?"recvonly":"inactive"),"video"===e&&(t=this.options.video&&this.options.negotiateVideo?"sendrecv":this.options.video&&!this.options.negotiateVideo?"sendonly":!this.options.video&&this.options.negotiateVideo?"recvonly":"inactive"),t}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,i)=>{var o;try{if(!this.peer)return i(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return i(new Error("Invalid audio/video constraints."));if(this.logger.debug("updateConstraints trying constraints",this.__uuid,e),!this.manageSendersWithConstraints(e))return this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped"),r();let n,s={};null===(o=this.localStream)||void 0===o||o.getTracks().forEach((t=>{var r;s[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks first?"),this.logger.debug("Track readyState:",t.kind,t.readyState),Wn(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),n=await Kn(e)}catch(e){return this.logger.error("Error updating device constraints:",e.name,e.message,e),this.logger.info("Restoring previous constraints",s),await this.updateConstraints(s,{attempt:t+1}),i(e)}this.logger.debug("updateConstraints done"),r(n)}catch(e){this.logger.error("updateConstraints",e),i(e)}}))}async updateStream(e){try{if(!this.peer)throw new Error("Invalid RTCPeerConnection.");const t=this.localVideoTrack,r=this.localAudioTrack;this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const i=e.getTracks();this.logger.debug(`updateStream got ${i.length} tracks`);for(const e of i)this.logger.debug("updateStream apply track: ",e),await this.handleTransceiverForTrack(e),this.emitDeviceUpdatedEvents({newTrack:e,prevAudioTrack:r,prevVideoTrack:t});this.logger.debug("updateStream done")}catch(e){throw this.logger.error("updateStream error",e),e}}async handleTransceiverForTrack(e){var t,r;if(!this.peer)return this.logger.error("Invalid RTCPeerConnection");const i=this.peer.instance.getTransceivers().find((({mid:t,sender:r,receiver:i})=>r.track&&r.track.kind===e.kind?(this.logger.debug("Found transceiver by sender"),!0):i.track&&i.track.kind===e.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===t&&(this.logger.debug("Found disassociated transceiver"),!0)));if(i){this.logger.debug("handleTransceiverForTrack got transceiver",i.currentDirection,i.mid),(null===(t=i.sender.track)||void 0===t?void 0:t.id)!==e.id&&(await i.sender.replaceTrack(e),this.logger.debug(`handleTransceiverForTrack replaceTrack for ${e.kind}`));const r=this._getTransceiverDirection(e.kind);i.direction!==r&&(i.direction=r,this.logger.debug(`handleTransceiverForTrack set direction to ${r}`)),this.replaceOldTrack(e)}else{this.logger.debug("handleTransceiverForTrack no transceiver found; addTransceiver and start dancing!");const t=this._getTransceiverDirection(e.kind);this.peer.type="offer",null===(r=this.localStream)||void 0===r||r.addTrack(e),this.peer.instance.addTransceiver(e,{direction:t,streams:[this.localStream]})}}replaceOldTrack(e){if(!this.peer||!this.localStream)return this.logger.error("Invalid RTCPeerConnection");this.peer._detachAudioTrackListener(),this.peer._detachVideoTrackListener(),this.localStream.getTracks().forEach((t=>{var r;t.kind===e.kind&&t.id!==e.id&&(this.logger.debug("replaceOldTrack stop old track and apply new one"),Wn(t),null===(r=this.localStream)||void 0===r||r.removeTrack(t))})),this.localStream.addTrack(e),"audio"===e.kind&&(this.options.micId=e.getSettings().deviceId),"video"===e.kind&&(this.options.camId=e.getSettings().deviceId),this.peer._attachAudioTrackListener(),this.peer._attachVideoTrackListener()}emitDeviceUpdatedEvents({newTrack:e,prevAudioTrack:t,prevVideoTrack:r}){"audio"===e.kind?this.emit("microphone.updated",{previous:{deviceId:null==t?void 0:t.id,label:null==t?void 0:t.label},current:{deviceId:e.id,label:e.label}}):"video"===e.kind&&this.emit("camera.updated",{previous:{deviceId:null==r?void 0:r.id,label:null==r?void 0:r.label},current:{deviceId:e.id,label:e.label}})}async applyConstraintsAndRefreshStream(e){const t=await this.updateConstraints(e);t&&await this.updateStream(t)}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:ks,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Is,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Es,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=this._buildPeer("offer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer||(this.peer=this._buildPeer("answer"));try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,i=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",i),t){case"offer":return this._watchSessionAuth(),!this.resuming&&e.instance.remoteDescription?this.executeUpdateMedia(i,e.uuid):this.executeInvite(i,e.uuid);case"answer":return this.executeAnswer(i,e.uuid);default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(xr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Ms})}async resume(){var e;if(this.logger.warn(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const i=this.getRTCPeerById(t);if(!i||i.instance.remoteDescription&&!this.resuming)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const i=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},o=kr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),i),{sdp:e}));let n=[];n=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions(),this.logger.debug("Subscribing to",n);const s=await this.vertoExecute({message:o,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:n});this.logger.debug("Invite response",s),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeAnswer(e,t,r){"new"===this.state&&this.setState("answering");try{const i=Mr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e})),o=await this.vertoExecute({message:i,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:this.getSubscriptions()});this.logger.debug("Answer response",o),this.resuming=!1,this.setActiveRTCPeer(t)}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){var r,i;try{const r=Cr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),i=await this.vertoExecute({message:r,callID:t,node_id:this.nodeId});if(this.logger.debug("UpdateMedia response",i),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");if(!i.sdp)return this.logger.error("UpdateMedia invalid SDP answer",i);await this.peer.onRemoteSdp(i.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),null===(i=null===(r=this.peer)||void 0===r?void 0:r._pendingNegotiationPromise)||void 0===i||i.reject(e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Ir(this.dialogParams(t));await this.vertoExecute({message:e,callID:t,node_id:this.nodeId})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}async hangupAll(){const e=this.callId;if(!e)throw new Error("Invalid RTCPeer ID to hangup");try{const t=Ir(Object.assign({cause:"REJECT_ALL",causeCode:"825"},this.dialogParams(e)));await this.vertoExecute({message:t,callID:e,node_id:this.nodeId})}catch(e){this.logger.error("HangupAll error:",e)}finally{this.setState("hangup")}}async sendDigits(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Er(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));await this.vertoExecute({message:r,callID:t,node_id:this.nodeId})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=Rs),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Ps:Ts)}_initPeer(){this.options.remoteSdp&&(this.peer=this._buildPeer("answer"))}_buildPeer(e){const t=new ws(this,e);return this.appendRTCPeer(t),this.runRTCPeerWorkers(t.uuid),t}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}_upsertTransceiverByKind(e,t){if(!this.peer)return this.logger.error("Invalid RTCPeerConnection");let r=this.peer.instance.getTransceivers().find((e=>{var r,i;return(null===(r=e.sender.track)||void 0===r?void 0:r.kind)===t||(null===(i=e.receiver.track)||void 0===i?void 0:i.kind)===t}));if(r){if(r.direction===e)return void this.logger.info(`Transceiver ${t} has the same direction "${e}".`);r.direction=e,this.logger.info(`Updated ${t} transceiver to "${e}" mode.`)}else"inactive"!==e&&(this.peer.type="offer",r=this.peer.instance.addTransceiver(t,{direction:e}),this.logger.info(`Added ${t} transceiver in "${e}" mode.`));"stopped"===e||"inactive"===e?(this.peer.stopTrackReceiver(t),this.peer.stopTrackSender(t)):"sendonly"===e?this.peer.stopTrackReceiver(t):"recvonly"===e&&this.peer.stopTrackSender(t)}async updateMedia(e){var t,r,i,o,n,s,a;try{const{audio:s,video:a}=e;if(!this.peer)throw new Error("Invalid RTCPeerConnection");if(null===(t=this.peer)||void 0===t?void 0:t.isNegotiating)throw new Error("The peer is already negotiating the media!");const c=this.peer,d=new Promise(((e,t)=>{c._pendingNegotiationPromise={resolve:e,reject:t}})),l=["sendonly","sendrecv"].includes((null==s?void 0:s.direction)||""),u=["sendonly","sendrecv"].includes((null==a?void 0:a.direction)||""),h=["sendrecv","receive"].includes((null==s?void 0:s.direction)||""),m=["sendrecv","receive"].includes((null==a?void 0:a.direction)||"");if(this.updateMediaOptions(Object.assign(Object.assign(Object.assign(Object.assign({},s&&{audio:null!==(r=null==s?void 0:s.constraints)&&void 0!==r?r:l}),a&&{video:null!==(i=null==a?void 0:a.constraints)&&void 0!==i?i:u}),s&&{negotiateAudio:h}),a&&{negotiateVideo:m})),await this.applyConstraintsAndRefreshStream(Object.assign(Object.assign({},s&&{audio:null!==(o=null==s?void 0:s.constraints)&&void 0!==o?o:l}),a&&{video:null!==(n=null==a?void 0:a.constraints)&&void 0!==n?n:u})),s&&!l&&this._upsertTransceiverByKind(s.direction,"audio"),a&&!u&&this._upsertTransceiverByKind(a.direction,"video"),await this.peer.startNegotiation(),await d,!vs({localSdp:this.peer.localSdp,remoteSdp:this.peer.remoteSdp,media:"audio"}))throw new Error("The server did not set the audio direction correctly");if(!vs({localSdp:this.peer.localSdp,remoteSdp:this.peer.remoteSdp,media:"video"}))throw new Error("The server did not set the video direction correctly")}catch(e){throw null===(a=null===(s=this.peer)||void 0===s?void 0:s._pendingNegotiationPromise)||void 0===a||a.reject(e),e}}async setAudioDirection(e){if(!["sendonly","sendrecv","recvonly","inactive"].includes(e))throw new Error("Invalid direction specified");return this.updateMedia({audio:{direction:e}})}async setVideoDirection(e){if(!["sendonly","sendrecv","recvonly","inactive"].includes(e))throw new Error("Invalid direction specified");return this.updateMedia({video:{direction:e}})}async hold(){const e=Cr(Object.assign(Object.assign({},this.dialogParams(this.callId)),{action:"hold"}));await this.vertoExecute({message:e,callID:this.callId,node_id:this.nodeId})}async unhold(){const e=Cr(Object.assign(Object.assign({},this.dialogParams(this.callId)),{action:"unhold"}));this.vertoExecute({message:e,callID:this.callId,node_id:this.nodeId})}}const As=xr.createAction("swJs/audioSetSpeakerAction"),js=({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const i=t.getAudioEl();let o;t.on("track",(function(n){"audio"===n.track.kind&&(o=r(Ds,{track:n.track,element:i,speakerId:e,room:t}))})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){Qt().error("audioElementSaga",e)}else Qt().warn("`Audio` is not supported on this environment.")};function*Ls({element:e,room:t}){const r=xr.getCustomSagaActionType(t.__uuid,As);for(;;){const i=yield Oe([r]);try{if(i.type===r){const r=yield Le(Dn,e,i.payload);t.emit(`${$t}.speaker.updated`,i.payload),t.settleCustomSagaTrigger({dispatchId:i.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:i.dispatchId,payload:e,kind:"reject"}),Qt().error(e)}}}function*Ds({track:e,element:t,speakerId:r,room:i}){(({track:e,element:t})=>{t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({track:e,element:t}),r&&Dn(t,r).catch((()=>{})),yield De(Ls,{element:t,room:i})}const Vs=function*(e){Qt().trace("videoManagerRoomsWorker started");const{instance:t,action:{type:r,payload:i}}=e,o={rooms:i.rooms.map((e=>ir(e)))};t.emit(sr(r),o),Qt().trace("videoManagerRoomsWorker ended")},Ws=function*(e){Qt().trace("videoManagerRoomWorker started");const{instance:t,action:{type:r,payload:i}}=e;t.emit(sr(r),ir(i)),Qt().trace("videoManagerRoomWorker ended")},Ns=function*(e){Qt().trace("videoManagerWorker started");const{channels:{swEventChannel:t}}=e;function*r(t){const{type:r}=t;switch(r){case"video-manager.rooms.subscribed":yield De(Vs,{action:t,...e});break;case"video-manager.room.added":case"video-manager.room.deleted":case"video-manager.room.ended":case"video-manager.room.started":case"video-manager.room.updated":yield De(Ws,{action:t,...e});break;default:Qt().warn(`Unknown video-manager event: "${r}"`)}}for(;;){const e=yield Oe(t,(e=>e.type.startsWith("video-manager.")));yield De(r,e)}Qt().trace("videoManagerWorker ended")};class $s extends Li{constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ns})}getSubscriptions(){const e=this.eventNames().map((e=>`video-manager.${e}`));return ur(e)}}const Us={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},zs="sw-sdk-",Bs="sw-overlay-",Hs=e=>`${Bs}${e}`,Fs=nr(class extends Os{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:zi.audioMuteMember,audioUnmute:zi.audioUnmuteMember,videoMute:zi.videoMuteMember,videoUnmute:zi.videoUnmuteMember,setMicrophoneVolume:zi.setInputVolumeMember,setInputVolume:zi.setInputVolumeMember,setInputSensitivity:zi.setInputSensitivityMember}),qs=()=>{},Ks="memberList.updated",Js=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Ut),e)),[]).join(".")})((({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(Xt,(e=>`_${e.toLowerCase()}`)))(e=(({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`)({event:e,namespace:t}))),e))({event:Ks})),Gs=["video.room.joined","video.member.joined","video.member.left","video.member.updated"];function*Qs({swEventChannel:e,instance:t}){const r=new Map;function*i(e){const i="video.room.joined"===e.type?e.payload.room_session.id:e.payload.room_session_id,o=(({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())})({action:e,memberList:r});t.emit(Js,{room_session_id:i,members:o})}for(;;){const t=yield Oe(e,(({type:e})=>Gs.includes(e)));yield De(i,t)}}const Xs=function*({channels:{swEventChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(Ks))))(r))return;const{cleanup:i}=((e,t)=>{const r=(e=>ur(Gs).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,qs)}));const i=({members:t})=>{e.emit(Ks,{members:t})};return e.on(Js,i),{cleanup:()=>{e.off(Js,i)}}})(t,r);yield De(Qs,{swEventChannel:e,instance:t}),t.once("destroy",(()=>{i()}))},Ys=function*(e){Qt().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:i,onDone:o,onFail:n}=e,{swEventChannel:s}=t,{parentId:a}=i;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield Oe(s,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield Ve(Wi.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(yield Ae(ai.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),o?.()):n?.({error:new Error("Unknown parent_id")})}Qt().trace("childMemberJoinedWorker ended")},Zs=function*(e){Qt().trace("videoStreamWorker started");const{instance:t,action:{type:r,payload:i},instanceMap:{get:o,set:n,remove:s}}=e;let a=o(i.stream.id);switch(a?a.setPayload(i):a=zi.createRoomSessionStreamObject({store:t.store,payload:i}),n(i.stream.id,a),r){case"video.stream.started":t.emit("stream.started",a);break;case"video.stream.ended":t.emit("stream.ended",a),s(i.stream.id);break;default:Qt().warn(`Unknown video.stream event: "${r}"`)}Qt().trace("videoStreamWorker ended")},ea=function*(e){Qt().trace("videoRecordWorker started");const{instance:t,action:{type:r,payload:i},instanceMap:{get:o,set:n,remove:s}}=e;let a=o(i.recording.id);a?a.setPayload(i):a=zi.createRoomSessionRecordingObject({store:t.store,payload:i}),n(i.recording.id,a);const c=sr(r);switch(r){case"video.recording.started":case"video.recording.updated":t.emit(c,a);break;case"video.recording.ended":t.emit(c,a),s(i.recording.id);break;default:Qt().warn(`Unknown video.stream event: "${r}"`)}Qt().trace("videoRecordWorker ended")},ta=function*(e){Qt().trace("videoPlaybackWorker started");const{instance:t,action:{type:r,payload:i},instanceMap:{get:o,set:n,remove:s}}=e;let a=o(i.playback.id);a?a.setPayload(i):a=zi.createRoomSessionPlaybackObject({store:t.store,payload:i}),n(i.playback.id,a);const c=sr(r);switch(r){case"video.playback.started":case"video.playback.updated":t.emit(c,a);break;case"video.playback.ended":t.emit(c,a),s(i.playback.id);break;default:Qt().warn(`Unknown video.stream event: "${r}"`)}Qt().trace("videoPlaybackWorker ended")},ra=function*(e){Qt().trace("videoWorker started");const{channels:t,instance:r}=e,{swEventChannel:i}=t;function*o(t){const{type:i,payload:o}=t;switch(i){case"video.room.subscribed":return void(yield De(pn.memberPositionWorker,{...e,instance:r,initialState:o}));case"video.playback.started":case"video.playback.updated":case"video.playback.ended":return void(yield De(ta,{action:t,...e}));case"video.recording.started":case"video.recording.updated":case"video.recording.ended":return void(yield De(ea,{action:t,...e}));case"video.stream.ended":case"video.stream.started":return void(yield De(Zs,{action:t,...e}));case"video.room.audience_count":return void r.emit("room.audienceCount",o);case"video.member.talking":{const{member:e}=o;"talking"in e&&(r.emit("member.talking."+(e.talking?"started":"ended"),o),r.emit("member.talking."+(e.talking?"start":"stop"),o));break}case"video.layout.changed":r.currentLayoutEvent=t.payload}const n=sr(i,"video");r.emit(n,o)}const n=e=>e.type.startsWith("video.");for(;;){const e=yield Oe(i,n);yield De(o,e)}Qt().trace("videoWorker ended")};class ia extends Os{_screenShareList=new Set;_audioEl;_overlayMap;_localVideoOverlay;get audioEl(){return this._audioEl}set overlayMap(e){this._overlayMap=e}get overlayMap(){return this._overlayMap}set localVideoOverlay(e){this._localVideoOverlay=e}get localVideoOverlay(){return this._localVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}_attachSpeakerTrackListener(){Ln()&&ss().then((e=>{e.on("removed",(async e=>{const t=this._audioEl.sinkId,r=e.changes.find((e=>{const r=e.payload.deviceId;return r===t||""===r&&"default"===t||"default"===r&&""===t}));if(r){this.emit("speaker.disconnected",{deviceId:r.payload.deviceId,label:r.payload.label}),await(this._audioEl.setSinkId?.(""));const e=await cs("default");if(!e?.deviceId)return;this.emit("speaker.updated",{previous:{deviceId:r.payload.deviceId,label:r.payload.label},current:{deviceId:e.deviceId,label:e.label}})}}))}))}_finalize(){this._screenShareList.clear(),super._finalize()}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),super.hangup(e)}leave(){return this.hangup()}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Xs})}getAudioEl(){return this._audioEl||(this._audioEl=new Audio,this._attachSpeakerTrackListener()),this._audioEl}getMemberOverlay(e){return this.overlayMap.get(Hs(e))}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:i=!0,audio:o=!1,video:n=!0,layout:s,positions:a}=e;try{const e=await Jn({audio:!0===o?Us:o,video:n}),c={...this.options,screenShare:!0,recoverCall:!1,localStream:e,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:s,positions:a},d=Mi({store:this.store,Component:Fs})(c);return e.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{d&&d.active&&d.leave()}))})),d.once("destroy",(()=>{d.emit("room.left"),this._screenShareList.delete(d)})),d.runWorker("childMemberJoinedWorker",{worker:Ys,onDone:()=>t(d),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(d),i?await d.join():t(d)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}updateSpeaker({deviceId:e}){const t=this.audioEl.sinkId;return this.once(`${$t}.speaker.updated`,(async e=>{const r=await cs(t),i=await cs(e),o=i?.deviceId===r?.deviceId;i?.deviceId&&!o&&this.emit("speaker.updated",{previous:{deviceId:r?.deviceId,label:r?.label},current:{deviceId:i.deviceId,label:i.label}})})),this.triggerCustomSaga(As(e))}}const oa=nr(class extends Os{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:zi.audioMuteMember,audioUnmute:zi.audioUnmuteMember,videoMute:zi.videoMuteMember,videoUnmute:zi.videoUnmuteMember,setInputVolume:zi.setInputVolumeMember,setMicrophoneVolume:zi.setInputVolumeMember,setInputSensitivity:zi.setInputSensitivityMember});class na extends ia{_deviceList=new Set;_currentLayoutEvent;constructor(e){super(e),this.initWorker()}set currentLayoutEvent(e){this._currentLayoutEvent=e}get currentLayoutEvent(){return this._currentLayoutEvent}get currentLayout(){return this._currentLayoutEvent?.layout}get currentPosition(){return this._currentLayoutEvent?.layout.layers.find((e=>e.member_id===this.memberId))?.position}get deviceList(){return Array.from(this._deviceList)}get interactivityMode(){return this.select((({session:e})=>{const{authState:t}=e;return t?.join_as??""}))}get permissions(){return this.select((({session:e})=>{const{authState:t}=e;return t?.room?.scopes??[]}))}initWorker(){this.runWorker("videoWorker",{worker:ra})}getSubscriptions(){const e=this.eventNames().map((e=>`video.${String(e)}`));return ur(e)}_finalize(){this._deviceList.clear(),super._finalize()}async hangup(e){return this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}join(){return super.invite()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}async createScreenShareObject(e={}){return this.startScreenShare(e)}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:i=!0,audio:o=!1,video:n=!1}=e;if(!o&&!n)throw new TypeError("At least one of `audio` or `video` must be requested.");const s={...this.options,localStream:void 0,remoteStream:void 0,audio:o,video:n,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=Mi({store:this.store,Component:oa})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:Ys,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),i?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}}const sa=nr(na,{audioMute:zi.audioMuteMember,audioUnmute:zi.audioUnmuteMember,videoMute:zi.videoMuteMember,videoUnmute:zi.videoUnmuteMember,deaf:zi.deafMember,undeaf:zi.undeafMember,setInputVolume:zi.setInputVolumeMember,setOutputVolume:zi.setOutputVolumeMember,setMicrophoneVolume:zi.setInputVolumeMember,setSpeakerVolume:zi.setOutputVolumeMember,setInputSensitivity:zi.setInputSensitivityMember,removeMember:zi.removeMember,removeAllMembers:zi.removeAllMembers,getMembers:zi.getMembers,getLayouts:zi.getLayouts,setLayout:zi.setLayout,setPositions:zi.setPositions,setMemberPosition:zi.setMemberPosition,hideVideoMuted:zi.hideVideoMuted,showVideoMuted:zi.showVideoMuted,getRecordings:zi.getRecordings,startRecording:zi.startRecording,getPlaybacks:zi.getPlaybacks,play:zi.play,setHideVideoMuted:zi.setHideVideoMuted,getMeta:zi.getMeta,setMeta:zi.setMeta,updateMeta:zi.updateMeta,deleteMeta:zi.deleteMeta,getMemberMeta:zi.getMemberMeta,setMemberMeta:zi.setMemberMeta,updateMemberMeta:zi.updateMemberMeta,deleteMemberMeta:zi.deleteMemberMeta,promote:zi.promote,demote:zi.demote,getStreams:zi.getStreams,startStream:zi.startStream,lock:zi.lock,unlock:zi.unlock,setRaisedHand:zi.setRaisedHand,setPrioritizeHandraise:zi.setPrioritizeHandraise}),aa=e=>e instanceof na;function ca(e){this.message=e}(ca.prototype=new Error).name="InvalidCharacterError";var da="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new ca("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,i,o=0,n=0,s="";i=t.charAt(n++);~i&&(r=o%4?64*r+i:i,o++%4)?s+=String.fromCharCode(255&r>>(-2*o&6)):0)i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(i);return s};function la(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(da(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return da(t)}}function ua(e){this.message=e}function ha(e,t){if("string"!=typeof e)throw new ua("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(la(e.split(".")[r]))}catch(e){throw new ua("Invalid token specified: "+e.message)}}(ua.prototype=new Error).name="InvalidTokenError";const ma=()=>{if(window&&window.sessionStorage)return window.sessionStorage},pa=e=>{let t="";try{const r=ha(e);t=r?.r??""}catch(r){try{t=ha(e,{header:!0}).typ||""}catch{t=""}}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},ga="ci-SAT",fa=function*(e){Qt().debug("wsClientWorker started");const{channels:t,initialState:r,instance:i}=e,{swEventChannel:o}=t,{handleIncomingInvite:n}=r;function*s(e){i.emit(e.type,e.payload)}function*a(e){n(e.payload.params)}const c=e=>"webrtc.message"===e.type&&"verto.invite"===e.payload.method;try{for(;;){const e=yield Oe(o,(()=>!0));yield De(s,e),c(e)&&(Qt().debug("Receiving a call over WebSocket",e),yield De(a,e))}}finally{Qt().trace("wsClientWorker ended")}},va=function*(e){Qt().debug("conversationWorker started");const{channels:{swEventChannel:t},initialState:r}=e,{conversation:i}=r,o=e=>e.type.startsWith("conversation.");for(;;){const e=yield Oe(t,o);i.handleEvent(e.payload)}Qt().trace("conversationWorker ended")};class ya extends Ai{_payload;constructor(e){super(e),this._payload=e.payload}get id(){return this._payload.member.member_id}get callId(){return this._payload.member.call_id}get nodeId(){return this._payload.member.node_id}get memberId(){return this.id}get roomSessionId(){return this._payload.room_session_id}get roomId(){return this._payload.room_id}get parentId(){return this._payload.member.parent_id}get name(){return this._payload.member.name}get type(){return this._payload.member.type}get requestedPosition(){return this._payload.member.requested_position}get currentPosition(){return this._payload.member.current_position}get meta(){return this._payload.member.meta}get handraised(){return this._payload.member.handraised}get talking(){return this._payload.member.talking}get audioMuted(){return this._payload.member.audio_muted}get videoMuted(){return this._payload.member.video_muted}get deaf(){return this._payload.member.deaf}get visible(){return this._payload.member.visible}get inputVolume(){return this._payload.member.input_volume}get outputVolume(){return this._payload.member.output_volume}get inputSensitivity(){return this._payload.member.input_sensitivity}get subscriberData(){return this._payload.member.subscriber_data}setPayload(e){const t={...this._payload,...e,member:{...this._payload.member,...e.member}};this._payload=t}}const ba=e=>Mi({store:e.store,Component:ya})(e),_a=function*(e){Qt().trace("callLeftWorker started");const{action:{payload:t},instance:r,instanceMap:i}=e,{room_session_id:o}=t;i.getAll().forEach((([e,t])=>{t instanceof ya&&t.roomSessionId===o&&i.remove(e)})),r.emit("call.left",t),r.emit("room.left",t),Qt().trace("callLeftWorker ended")},wa=function*(e){Qt().trace("fabricMemberWorker started");const{instance:t,action:{type:r,payload:i},instanceMap:{get:o,set:n,remove:s}}=e,a=i.member.member_id;let c=o(a);if(c||"member.talking"===r||(c=ba({store:t.store,payload:i})),c&&c.setPayload(i),n(a,c),r.startsWith("member.updated.")){const e=or(r);t.emit(e,i)}switch(r){case"member.joined":case"member.updated":case"member.talking":t.emit(r,i);break;case"member.left":t.emit(r,i),s(a)}Qt().trace("fabricMemberWorker ended")},Sa=e=>({id:e.member_id,room_id:e.room_id,room_session_id:e.room_session_id,name:e.name,type:e.type,handraised:e.handraised,visible:e.visible,audio_muted:e.audio_muted,video_muted:e.video_muted,deaf:e.deaf,input_volume:e.input_volume,output_volume:e.output_volume,input_sensitivity:e.input_sensitivity,meta:e.meta,talking:e.talking,current_position:e.current_position,requested_position:e.requested_position,parent_id:e.parent_id}),ka=e=>({...Sa(e),updated:e.updated.map((e=>"member_id"===e?"id":e))}),Ia=e=>({room_id:e.room_id,room_session_id:e.room_session_id,event_channel:e.event_channel,name:e.name,recording:e.recording,hide_video_muted:e.hide_video_muted,preview_url:e.preview_url,recordings:e.recordings,playbacks:e.playbacks,streams:e.streams,prioritize_handraise:e.prioritize_handraise}),Ca=e=>({id:e.id,display_name:e.display_name,room_id:e.room_id,room_session_id:e.room_session_id,event_channel:e.event_channel,name:e.name,recording:e.recording,recordings:e.recordings,playbacks:e.playbacks,hide_video_muted:e.hide_video_muted,preview_url:e.preview_url,layout_name:e.layout_name,locked:e.locked,meta:e.meta,members:e.members.map(Sa),streaming:e.streaming,streams:e.streams,prioritize_handraise:e.prioritize_handraise,updated:e.updated});class Ea{_flags;constructor(e){this._flags=e}get on(){return this._flags.some((e=>!e.endsWith(".off")))}get off(){return this._flags.some((e=>!e.endsWith(".on")))}}class Ma{_flags;_memberType;_muteAudio;_muteVideo;_deaf;constructor(e,t){this._flags=e,this._memberType=t}get muteAudio(){return this._muteAudio=this._muteAudio??new Ea(this._flags.filter((e=>e===this._memberType||e===`${this._memberType}.mute`||e.startsWith(`${this._memberType}.mute.audio`)))),this._muteAudio}get muteVideo(){return this._muteVideo=this._muteVideo??new Ea(this._flags.filter((e=>e===this._memberType||e===`${this._memberType}.mute`||e.startsWith(`${this._memberType}.mute.video`)))),this._muteVideo}get microphoneVolume(){return this._flags.some((e=>e===this._memberType||e===`${this._memberType}.microphone`||e.startsWith(`${this._memberType}.microphone.volume`)))}get microphoneSensitivity(){return this._flags.some((e=>e===this._memberType||e===`${this._memberType}.microphone`||e.startsWith(`${this._memberType}.microphone.sensitivity`)))}get speakerVolume(){return this._flags.some((e=>e===this._memberType||e===`${this._memberType}.speaker`||e.startsWith(`${this._memberType}.speaker.volume`)))}get deaf(){return this._deaf=this._deaf??new Ea(this._flags.filter((e=>e===this._memberType||e.startsWith(`${this._memberType}.deaf`)))),this._deaf}get raisehand(){return{on:!0,off:!0}}get position(){return this._flags.some((e=>e===this._memberType||e.startsWith(`${this._memberType}.position`)))}get meta(){return this._flags.some((e=>e===this._memberType||e.startsWith(`${this._memberType}.meta`)))}get remove(){return this._flags.some((e=>e===this._memberType||e.startsWith(`${this._memberType}.remove`)))}}class Ta{_flags;_self;_member;_vmutedHide;_lock;constructor(e){this._flags=e}_buildMemberCapability(e){return new Ma(this._flags.filter((t=>t.startsWith(e))),e)}get self(){return this._self=this._self??this._buildMemberCapability("self"),this._self}get member(){return this._member=this._member??this._buildMemberCapability("member"),this._member}get end(){return this._flags.some((e=>"end"===e))}get setLayout(){return this._flags.some((e=>e.startsWith("layout")))}get sendDigit(){return this._flags.some((e=>e.startsWith("digit")))}get vmutedHide(){return this._vmutedHide=this._vmutedHide??new Ea(this._flags.filter((e=>e.startsWith("vmuted")))),this._vmutedHide}get lock(){return this._lock=this._lock??new Ea(this._flags.filter((e=>e.startsWith("lock")))),this._lock}get device(){return this._flags.some((e=>"device"===e))}get screenshare(){return this._flags.some((e=>"screenshare"===e))}}const Pa=function*(e){Qt().trace("callJoinWorker started");const{action:t,instanceMap:r,instance:i}=e,{payload:o}=t,{get:n,set:s}=r;var a;yield De(pn.memberPositionWorker,{...e,initialState:(a=o,{call_id:a.call_id,member_id:a.member_id,room:{...Ia(a.room_session),members:a.room_session.members.map(Sa)},room_session:{...Ca(a.room_session),members:a.room_session.members.map(Sa)}}),dispatcher:function*(t,r){const i=sr(t,"video"),o={...r,member:{...r.member,member_id:r.member.id}};yield De(wa,{...e,action:{type:i,payload:o}})}}),o.room_session.members?.forEach((e=>{let t=n(e.member_id);t?t.setPayload({member:e,room_id:o.room_id,room_session_id:o.room_session_id}):t=ba({store:i.store,payload:{member:e,room_id:o.room_id,room_session_id:o.room_session_id}}),s(e.member_id,t)})),i.member=n(o.member_id),i.capabilities=new Ta(o.capabilities);const c={...o,capabilities:i.capabilities};i.emit("call.joined",c),Qt().trace("callJoinWorker ended")},Ra=function*(e){const{action:t,channels:{swEventChannel:r},instance:i}=e,o=t.payload.call_id,n=t.payload.room_session_id;function*s(t){const{type:o,payload:n}=t;switch(o){case"call.joined":break;case"call.left":return yield Le(_a,{...e,action:t}),!0;case"call.updated":i.emit(o,n),i.emit("room.updated",n);break;case"call.play":case"call.connect":case"call.room":i.emit(o,n);break;case"member.joined":case"member.left":{yield De(wa,{...e,action:t});const i=(e=>{return{type:`video.${e.type}`,payload:(t=e.payload,{room_session_id:t.room_session_id,room_id:t.room_id,member:Sa(t.member)})};var t})(t);yield Ae(r,i);break}case"member.updated":{const e=(e=>{return{type:`video.${e.type}`,payload:(t=e.payload,{room_session_id:t.room_session_id,room_id:t.room_id,member:ka(t.member)})};var t})(t);yield Ae(r,e);break}case"layout.changed":{i.currentLayoutEvent=t.payload,i.emit(o,n);const e=(e=>({type:`video.${e.type}`,payload:e.payload}))(t);yield Ae(r,e);break}case"member.talking":yield De(wa,{...e,action:t});break;default:Qt().warn("Got an unknown fabric event",t)}return!1}Qt().debug(`callSegmentWorker started for: callId ${o}, roomSessionId ${n}`),yield De(Pa,{...e,action:t});const a=e=>{const{type:t,payload:r}=e;return!(!(t.startsWith("call.")||t.startsWith("member.")||t.startsWith("layout."))||(!("call_id"in r)||o!==r.call_id)&&n!==r.room_session_id)};for(;;){const e=yield Oe(r,a),t=yield De(s,e);if(yield(c=t,xe(Te,c)))return}var c},xa=function*(e){Qt().trace("fabricWorker started");const{channels:{swEventChannel:t},instance:r}=e;function*i(t){const{type:i,payload:o}=t;switch(i){case"call.joined":if(!r.selfMember){const e=ba({store:r.store,payload:{member:t.payload.room_session.members.find((e=>e.member_id===t.payload.member_id)),room_id:t.payload.room_id,room_session_id:t.payload.room_session_id}});r.selfMember=e}yield De(Ra,{...e,instance:r,action:t});break;case"call.state":r.emit(i,o)}}let o=!1;const n=e=>"call.state"===e.type||"call.joined"===e.type&&(!!o||e.payload.call_id===e.payload.origin_call_id&&(o=!0,!0));for(;;){const e=yield Oe(t,n);yield De(i,e)}Qt().trace("fabricWorker ended")};class Oa extends ia{_self;_member;_currentLayoutEvent;_capabilities;constructor(e){super(e),this.initWorker()}get memberId(){return this._member?.memberId}set currentLayoutEvent(e){this._currentLayoutEvent=e}get currentLayoutEvent(){return this._currentLayoutEvent}get currentLayout(){return this._currentLayoutEvent?.layout}get currentPosition(){return this._currentLayoutEvent?.layout.layers.find((e=>e.member_id===this.memberId))?.position}get capabilities(){return this._capabilities}set capabilities(e){this._capabilities=e}get selfMember(){return this._self}set selfMember(e){this._self=e}set member(e){this._member=e}get member(){return this._member}initWorker(){this.runWorker("fabricWorker",{worker:xa}),this.runWorker("makeAudioElement",{worker:js({speakerId:this.options.speakerId})})}async join(){return this.options.attach&&(this.options.prevCallId=ma()?.getItem(ga)??void 0),this.logger.debug(`Tying to reattach to previuos call? ${!!this.options.prevCallId} - prevCallId: ${this.options.prevCallId}`),super.invite()}executeAction(e,t={}){const{method:r,channel:i,memberId:o,extraParams:n={}}=e,s=o?this.instanceMap.get(o):this.member;if(!s)throw new Error("No target param found to execute");return this.execute({method:r,params:{...i&&{channels:[i]},self:{member_id:this.selfMember?.id,call_id:this.selfMember?.callId,node_id:this.selfMember?.nodeId},target:{member_id:s.id,call_id:s.callId,node_id:s.nodeId},...n}},t)}async resume(){if(this.logger.warn(`[resume] Call ${this.id}`),this.peer?.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),["closed","failed","disconnected"].includes(e)&&(this.resuming=!0,this.peer.restartIce())}}async start(){return new Promise((async(e,t)=>{try{this.once("room.subscribed",(t=>{ma()?.setItem(ga,t.call_id),e()})),this.once("destroy",(()=>{ma()?.removeItem(ga)})),await this.join()}catch(e){this.logger.error("WSClient call start",e),t(e)}}))}async audioMute(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.muteAudio.off:!this.capabilities?.self.muteAudio.off)throw Error("Missing audio mute capability");return this.executeAction({method:"call.mute",channel:"audio",memberId:e?.memberId})}async audioUnmute(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.muteAudio.on:!this.capabilities?.self.muteAudio.on)throw Error("Missing audio unmute capability");return this.executeAction({method:"call.unmute",channel:"audio",memberId:e?.memberId})}async videoMute(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.muteVideo.on:!this.capabilities?.self.muteVideo.off)throw Error("Missing video mute capability");return this.executeAction({method:"call.mute",channel:"video",memberId:e?.memberId})}async videoUnmute(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.muteVideo.on:!this.capabilities?.self.muteVideo.on)throw Error("Missing video unmute capability");return this.executeAction({method:"call.unmute",channel:"video",memberId:e?.memberId})}async deaf(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.deaf.on:!this.capabilities?.self.deaf.on)throw Error("Missing deaf capability");return this.executeAction({method:"call.deaf",memberId:e?.memberId})}async undeaf(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.deaf.off:!this.capabilities?.self.deaf.off)throw Error("Missing undeaf capability");return this.executeAction({method:"call.undeaf",memberId:e?.memberId})}async getLayouts(){return this.executeAction({method:"call.layout.list"},{transformResolve:e=>({layouts:e.layouts})})}async getMembers(){return this.executeAction({method:"call.member.list"},{transformResolve:e=>({members:e.members})})}async removeMember(e){if(!this.capabilities?.member.remove)throw Error("Missing setLayout capability");if(!e?.memberId)throw new TypeError('Invalid or missing "memberId" argument');return this.executeAction({method:"call.member.remove",memberId:e.memberId})}async setRaisedHand(e){const{raised:t=!0,memberId:r}=e||{};if(r==this.member.id&&t?!this.capabilities?.self.raisehand.on:!this.capabilities?.member.raisehand.on)throw Error("Missing raisehand capability");if(r!=this.member.id||t?!this.capabilities?.member.raisehand.off:!this.capabilities?.self.raisehand.off)throw Error("Missing lowerhand capability");return this.executeAction({method:t?"call.raisehand":"call.lowerhand",memberId:r})}async setLayout(e){if(!this.capabilities?.setLayout)throw Error("Missing setLayout capability");return this.executeAction({method:"call.layout.set",extraParams:{layout:e.name,positions:e.positions}})}async setInputVolume(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.microphoneVolume:!this.capabilities?.self.microphoneVolume)throw Error("Missing setInputVolume capability");return this.executeAction({method:"call.microphone.volume.set",memberId:e?.memberId,extraParams:{volume:e?.volume}})}async setOutputVolume(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.speakerVolume:!this.capabilities?.self.speakerVolume)throw Error("Missing setOutputVolume capability");return this.executeAction({method:"video.member.set_output_volume",memberId:e?.memberId,extraParams:{volume:e?.volume}})}async setInputSensitivity(e){if(e&&e.memberId!==this.member.id?!this.capabilities?.member.microphoneSensitivity:!this.capabilities?.self.microphoneSensitivity)throw Error("Missing setOutputVolume capability");return this.executeAction({method:"call.microphone.sensitivity.set",memberId:e?.memberId,extraParams:{value:e?.value}})}async setPositions(e){const t=e.positions;if(t&&!Object.keys(t).length)throw new Error("Invalid positions");if(Object.keys(t).some((e=>["self",`${this.memberId}`].includes(e)))?!this.capabilities?.self.position:!this.capabilities?.member.position)throw Error("Missing setPositions capability");const r=[];if(Object.entries(t).forEach((([e,t])=>{const i="self"===e?this.member:this.instanceMap.get(e);i&&r.push({target:{member_id:i.id,call_id:i.callId,node_id:i.nodeId},position:t})})),!r.length)throw new Error("Invalid targets");return this.execute({method:"call.member.position.set",params:{self:{member_id:this.selfMember?.id,call_id:this.selfMember?.callId,node_id:this.selfMember?.nodeId},targets:r}})}async lock(){if(!this.capabilities?.lock.on)throw Error("Missing lock capability");return this.executeAction({method:"call.lock"})}async unlock(){if(!this.capabilities?.lock.off)throw Error("Missing unlock capability");return this.executeAction({method:"call.unlock"})}}const Aa=e=>e instanceof Oa;class ja{id;_domElement;_status;constructor(e){this.id=e.id,this._status="hidden"}get userId(){return this.id.split(Bs)[1]}get domElement(){return this._domElement}set domElement(e){Qt().debug("Setting domElement for ",this.id),this._domElement=e}get status(){return this._status}set status(e){this._status=e}hide(){if(!this.domElement)return Qt().warn("Missing overlay to hide");this.domElement.style.opacity="0",this.status="hidden"}show(){if(!this.domElement)return Qt().warn("Missing overlay to show");this.domElement.style.opacity="1",this.status="visible"}}class La extends ja{_mirrored;_room;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay,this._room=e.room,this.fabricMemberVideoMutedHandler=this.fabricMemberVideoMutedHandler.bind(this),this.videoMemberVideoMutedHandler=this.videoMemberVideoMutedHandler.bind(this),this.attachListeners()}get userId(){return this.id.split(zs)[1]}get mirrored(){return this._mirrored}attachListeners(){Aa(this._room)?this._room.on("member.updated.videoMuted",this.fabricMemberVideoMutedHandler):aa(this._room)&&this._room.on("member.updated.videoMuted",this.videoMemberVideoMutedHandler)}detachListeners(){Aa(this._room)?this._room.off("member.updated.videoMuted",this.fabricMemberVideoMutedHandler):aa(this._room)&&this._room.off("member.updated.videoMuted",this.videoMemberVideoMutedHandler)}memberVideoMutedHandler(e,t){try{e===this._room.memberId&&(t?this.hide():this.show())}catch(e){Qt().error("Error handling videoMuted in LocalVideoOverlay",e)}}fabricMemberVideoMutedHandler(e){this.memberVideoMutedHandler(e.member.member_id,e.member.video_muted)}videoMemberVideoMutedHandler(e){this.memberVideoMutedHandler(e.member.id,e.member.video_muted)}setMediaStream(e){if(!this.domElement)return Qt().warn("Missing local overlay to set the stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}setMirror(e=this._mirrored){if(!this.domElement||!this.domElement.firstChild)return Qt().warn("Missing local overlay to set the mirror");const t=this.domElement.firstChild;t.style.transform=e?"scale(-1, 1)":"scale(1, 1)",t.style.webkitTransform=e?"scale(-1, 1)":"scale(1, 1)",this._mirrored=e}}const Da=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{Qt().error("Video Element Paused",e,t)}))})),e},Va=({x:e,y:t,width:r,height:i})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${i}%`}),Wa=({location:e})=>{const{top:t,left:r,width:i,height:o}=Va(e),n=document.createElement("div");return n.style.position="absolute",n.style.overflow="hidden",n.style.top=t,n.style.left=r,n.style.width=i,n.style.height=o,n},Na=({location:e,element:t})=>{const{top:r,left:i,width:o,height:n}=Va(e);return t.style.top=r,t.style.left=i,t.style.width=o,t.style.height=n,t},$a=({video:e,rootElement:t,paddingWrapper:r})=>{const i=function(e,t=0,r){let i=null,o=null;const n=function(){i&&(clearTimeout(i),o=null,i=null)},s=function(){if(!t)return e.apply(this,arguments);const s=this,a=arguments,c=r&&!i;return n(),o=function(){e.apply(s,a)},i=setTimeout((function(){if(i=null,!c){const e=o;return o=null,null==e?void 0:e()}}),t),c&&o?o():void 0};return s.cancel=n,s.flush=function(){const e=o;n(),e&&e()},s}((({width:t,height:i})=>{const o=e.videoHeight/e.videoWidth*100;if(r){const n=i/t*100;r.style.paddingBottom=`${n>o?o:n}%`,r.style.width=((t,r)=>{const i=e.videoWidth/e.videoHeight;return i>t/r?"100%":r*i+"px"})(t,i)}}),100),o=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;i({width:t,height:r})}else e.contentRect&&i({width:e.contentRect.width,height:e.contentRect.height})}))})),n=()=>{i({width:t.clientWidth,height:t.clientHeight})};return{start:()=>{o.observe(t),e.addEventListener("resize",n)},stop:()=>{o.disconnect(),e.removeEventListener("resize",n)}}},Ua=async e=>{try{const{room:t,rootElement:r,applyLocalVideoOverlay:i=!0,applyMemberOverlay:o=!0,mirrorLocalVideoOverlay:n=!0}=e;let s=!1;const a=new Map,c=b();let d;r?d=r:(d=document.createElement("div"),d.id=`rootElement-${c}`);const l=(e=>`${zs}${e}`)(c),u=new La({id:l,mirrorLocalVideoOverlay:n,room:t});i&&a.set(l,u);const h=(e=>{const{applyLocalVideoOverlay:t,applyMemberOverlay:r,overlayMap:i,localVideoOverlay:o,mirrorLocalVideoOverlay:n,rootElement:s}=e;return async e=>{Qt().debug("Process layout.changed");try{const{layout:a,memberId:c,localStream:d}=e,{layers:l=[]}=a,u=s.querySelector(".mcuLayers"),h=document.createDocumentFragment(),m=new Set;if(t){const e=l.find((({member_id:e})=>e===c)),t=o.id;let r=o.domElement;if(m.add(t),e){if(r)Qt().debug("Update local video overlay"),Na({location:e,element:r});else{Qt().debug("Build local video overlay"),r=Wa({location:e}),r.id=t;const i=Da();i.srcObject=d,i.disablePictureInPicture=!0,i.style.width="100%",i.style.height="100%",i.style.pointerEvents="none",i.style.objectFit="cover",r.appendChild(i),o.domElement=r,n&&o.setMirror()}const i=d.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;i&&e.visible?(o.setMediaStream(d),o.show()):o.hide(),h.appendChild(r)}else Qt().warn("Local video overlay location not found"),o.status="hidden",r&&o.hide()}r&&l.forEach((e=>{const t=e.member_id;if(!t)return;const r=Hs(t);m.add(r);let o=i.get(r);if(o&&o.domElement)Qt().debug("Update an overlay for ",t),Na({location:e,element:o.domElement});else{Qt().debug("Build an overlay for ",t),o=new ja({id:r}),i.set(r,o);const n=Wa({location:e});n.id=`${r}-${b()}`,o.domElement=n}e.visible?o.show():o.hide(),h.appendChild(o.domElement)})),i.forEach(((e,t)=>{m.has(t)||(e.domElement&&e.domElement.parentNode&&e.domElement.parentNode.removeChild(e.domElement),i.delete(t))})),u&&(u.innerHTML="",u.appendChild(h))}catch(e){Qt().error("Layout Changed Error",e)}}})({applyLocalVideoOverlay:i,applyMemberOverlay:o,overlayMap:a,localVideoOverlay:u,mirrorLocalVideoOverlay:n,rootElement:d}),m=e=>{t.peer?.hasVideoSender&&t.localStream?h({layout:e.layout,localStream:t.localStream,memberId:t.memberId}):u.hide()},p=e=>{Qt().debug("Received layout.changed - videoTrack",s),s&&m(e)},g=async e=>{s=!0,await za({applyLocalVideoOverlay:i,applyMemberOverlay:o,rootElement:d,track:e});const r=t.currentLayoutEvent;r&&m(r)},f=t.peer?.remoteVideoTrack;f&&await g(f);const v=async function(e){"video"===e.track.kind&&await g(e.track)},y=()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(d),a.clear(),t.overlayMap=a,(Aa(t)||aa(t))&&(t.off("track",v),t.off("layout.changed",p),t.off("destroy",y)),u.detachListeners()};return(Aa(t)||aa(t))&&(t.on("track",v),t.on("layout.changed",p),t.once("destroy",y)),t.overlayMap=a,t.localVideoOverlay=u,{element:d,overlayMap:a,localVideoOverlay:u,unsubscribe:y}}catch(e){throw Qt().error("Unable to build the video element"),e}},za=async e=>{try{const{applyLocalVideoOverlay:t,applyMemberOverlay:r,track:i,rootElement:o}=e,n=Da();if((({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({element:n,track:i}),n.style.width="100%",n.style.maxHeight="100%",o.querySelector(".mcuContent"))return void Qt().debug("MCU Content already there");const s=document.createElement("div");s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.right="0",s.style.bottom="0",s.appendChild(n);const a=document.createElement("div");a.classList.add("paddingWrapper"),a.style.paddingBottom="56.25%",a.style.position="relative",a.style.width="100%",a.appendChild(s);let c=null;(t||r)&&(c=document.createElement("div"),c.classList.add("mcuLayers"),c.style.display="none",a.appendChild(c));const d=document.createElement("div");d.classList.add("mcuContent"),d.style.position="relative",d.style.width="100%",d.style.height="100%",d.style.margin="0 auto",d.style.display="flex",d.style.alignItems="center",d.style.justifyContent="center",d.appendChild(a),o.style.width="100%",o.style.height="100%",o.appendChild(d),Qt().debug("MCU readyState 1 >>",n.readyState),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(Qt().debug("Wait for the MCU to be ready"),await(({element:e})=>new Promise((t=>{e.addEventListener("canplay",(function r(){e.removeEventListener("canplay",r),t()})),e.addEventListener("resize",(function r(){e.removeEventListener("resize",r),t()}))})))({element:n})),Qt().debug("MCU is ready..");const l=$a({rootElement:o,video:n,paddingWrapper:a});l.start(),i.addEventListener("ended",(()=>{l&&l.stop()})),c&&(c.style.display="block")}catch(e){Qt().error("Handle video track error",e)}};class Ba extends ji{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,applyMemberOverlay:i=!0,mirrorLocalVideoOverlay:o=!0,stopCameraWhileMuted:n=!0,stopMicrophoneWhileMuted:s=!0,...a}=e,c=[];c.push(js({speakerId:a.speakerId}));const d=(l={...a,store:this.store,customSagas:c},Mi({store:l.store,customSagas:l.customSagas,Component:sa})(l));var l;if(t)try{Ua({applyLocalVideoOverlay:r,applyMemberOverlay:i,mirrorLocalVideoOverlay:o,room:d,rootElement:t})}catch(e){this.logger.error("Unable to build the video element automatically")}return d.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===d.memberId));if(t?.audio_muted)try{d.stopOutboundAudio()}catch(e){this.logger.error("Error handling audio_muted",e)}if(t?.video_muted)try{d.stopOutboundVideo()}catch(e){this.logger.error("Error handling video_muted",e)}})),s&&d.on("member.updated.audio_muted",(({member:e})=>{try{e.id===d.memberId&&"audio_muted"in e&&(e.audio_muted?d.stopOutboundAudio():d.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),n&&d.on("member.updated.video_muted",(({member:e})=>{try{e.id===d.memberId&&"video_muted"in e&&(e.video_muted?d.stopOutboundVideo():d.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),d}}}get chat(){return this._chat||(this._chat=$o.createBaseChatObject({store:this.store})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Yo.createBasePubSubObject({store:this.store})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Mi({store:e.store,Component:$s})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(xr.reauthAction({token:e}))}}const Ha="function"==typeof CloseEvent?CloseEvent:class{constructor(e,t={}){this.type=e,Nt(this,"code"),Nt(this,"reason"),Nt(this,"wasClean"),this.code=void 0===t.code?0:t.code,this.reason=void 0===t.reason?"":t.reason,this.wasClean=void 0!==t.wasClean&&t.wasClean}};class Fa extends oi{options;WebSocketConstructor=WebSocket;CloseEventConstructor=Ha;agent="@signalwire/js/browser/3.28.1";tokenTyp;constructor(e){let t={};try{t=ha(e.token,{header:!0})}catch(e){}super({...e,host:t?.ch||e.host}),this.options=e,this.tokenTyp=t.typ??"VRT"}get allowReattach(){return!1!==this.options?.reattach&&(this.isVRT()||this.isSAT())}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const{protocolKey:e}=pa(this.options.token);return e?(this.logger.trace("Search protocol for",e),ma()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=pa(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),ma()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=pa(this.options.token);return e?ma()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=pa(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),ma()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status||"disconnected"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=pa(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),ma()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),ma()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),ma()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}isSAT(){return"SAT"===this.tokenTyp}}const qa=e=>{const t={...e,emitter:Ti()},r=Pi({userOptions:t,SessionConstructor:Fa});return Mi({store:r,Component:Ba})(t)},Ka=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ja=/*#__PURE__*/Object.freeze({__proto__:null,Client:function(e){const t=qa(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,i,o)=>i in r?r[i]:Ka.includes(i)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(i):Reflect.get(e,i,o)})},ChatMember:ln,ChatMessage:dn});const Ga=["getAllowedChannels","subscribe","publish"];var Qa=/*#__PURE__*/Object.freeze({__proto__:null,PubSubMessage:Yo.PubSubMessage,Client:function(e){const t=qa(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,i,o)=>i in r?r[i]:Ga.includes(i)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(i):Reflect.get(e,i,o)})}});async function Xa(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new gi(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new fi(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const Ya=({baseUrl:e,timeout:t=3e4,...r},i=Xa)=>async(o,n)=>{const s={...n?.body?{"Content-Type":"application/json"}:{},...r.headers,...n?.headers},a=Za({...r,...n,headers:s});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await i(ec({path:o,baseUrl:e,searchParams:n?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Za=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(i=r,"string"==typeof i?i:JSON.stringify(i))}:null!=r?{...e,[t]:r}:e;var i}),{}),ec=({path:e,baseUrl:t,searchParams:r})=>{const i=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&i.searchParams.append(e,t)})),i.toString()};function tc(e,t){const r=async e=>{if(!e)return Promise.resolve(void 0);const{body:r}=await t(e);return tc(r,t)};return{data:e.data,self:async()=>{const{self:t}=e.links;return r(t)},nextPage:async()=>{const{next:t}=e.links;return r(t)},prevPage:async()=>{const{prev:t}=e.links;return r(t)},firstPage:async()=>{const{first:t}=e.links;return r(t)},hasNext:Boolean(e.links.next),hasPrev:Boolean(e.links.prev)}}function rc(e,t){const r=t.toString();return r?`${e}?${r}`:e}class ic{options;httpClient;constructor(e){this.options=e,this.httpClient=Ya({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get fetch(){return this.httpClient}get httpHost(){let e={};try{e=ha(this.options.token,{header:!0})}catch(e){}const t=this.options.host||e?.ch;return t?`fabric.${t.split(".").splice(1).join(".")}`:"fabric.signalwire.com"}async getAddress(e){let t="/api/fabric/addresses";var r;(r=e)&&"name"in r?t=`${t}?name=${e.name}`:(e=>e&&"id"in e)(e)&&(t=`${t}/${e.id}`);const{body:i}=await this.httpClient(t);if((e=>e&&"data"in e)(i)){if(!i.data[0])throw new fi(404,"Not Found");return i.data[0]}return i}async getAddresses(e){const{type:t,displayName:r,pageSize:i,sortBy:o,sortOrder:n}=e||{},s=new URLSearchParams;t&&s.append("type",t),r&&s.append("display_name",r),i&&s.append("page_size",i.toString()),o&&s.append("sort_by",o),n&&s.append("sort_order",n);const a=rc("/api/fabric/addresses",s);Qt().debug(`[getAddresses] query URL ${a}`);const{body:c}=await this.httpClient(a);return tc(c,this.httpClient)}async registerDevice(e){const{deviceType:t,deviceToken:r}=e,{body:i}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return i}async unregisterDevice(e){const{id:t}=e,r=`/subscriber/devices/${t}`;await this.httpClient(r,{method:"DELETE"})}async getSubscriberInfo(){const{body:e}=await this.httpClient("/api/fabric/subscriber/info");return e}}class oc{conversation;payload;constructor(e,t){this.conversation=e,this.payload=t}get id(){return this.payload.id}get addressId(){return this.payload.address_id}get createdAt(){return this.payload.created_at}get lastMessageAt(){return this.payload.last_message_at}get metadata(){return this.payload.metadata}get name(){return this.payload.name}sendMessage(e){return this.conversation.sendMessage({addressId:this.id,text:e.text})}getMessages(e){return this.conversation.getConversationMessages({addressId:this.id,...e})}}const nc=10;class sc{httpClient;wsClient;callbacks=new Set;chatSubscriptions={};constructor(e){this.httpClient=e.httpClient,this.wsClient=e.wsClient,this.wsClient.runWorker("conversationWorker",{worker:va,initialState:{conversation:this}})}handleEvent(e){if("chat"===e.subtype){const t=this.chatSubscriptions[e.conversation_id];t?.size&&t.forEach((t=>t(e)))}this.callbacks.size&&this.callbacks.forEach((t=>{t(e)}))}async sendMessage(e){try{const{addressId:t,text:r}=e,i="/api/fabric/messages",{body:o}=await this.httpClient.fetch(i,{method:"POST",body:{conversation_id:t,text:r}});return o}catch(e){throw new Error("Error sending message to conversation!",e)}}async getConversations(e){try{const{pageSize:t}=e||{},r="/api/fabric/conversations",i=new URLSearchParams;t&&i.append("page_size",t.toString());const{body:o}=await this.httpClient.fetch(rc(r,i)),n=this,s=o.data.map((e=>new oc(n,e)));return tc({...o,data:s},this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation history!",e)}}async getMessages(e){try{const{pageSize:t}=e||{},r="/api/fabric/messages",i=new URLSearchParams;t&&i.append("page_size",t.toString());const{body:o}=await this.httpClient.fetch(rc(r,i));return tc(o,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async getConversationMessages(e){try{const{addressId:t,pageSize:r}=e||{},i=`/api/fabric/conversations/${t}/messages`,o=new URLSearchParams;r&&o.append("page_size",r.toString());const{body:n}=await this.httpClient.fetch(rc(i,o));return tc(n,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async getChatMessages(e){const{addressId:t,pageSize:r=nc}=e,i=async(e,o=[],n=!0)=>{const s=[...o],a=e=>e.conversation_id===t&&"chat"===e.subtype;let c;c=await(e?.());let d=c?.data.filter(a)??[],l=r-s.length;for(let e=0;e<d.length&&e<l;e++)s.push(d[e]);for(;s.length<r&&c?.hasNext&&(c=await(n?c?.nextPage():c?.prevPage()),c&&c.data.length);){l=r-s.length,d=c.data.filter(a);for(let e=0;e<d.length&&e<l;e++)s.push(d[e])}let u=[];return l<d.length&&(u=d.slice(l)),{data:s,hasNext:!!c?.hasNext||!!o.length,hasPrev:!!c?.hasPrev,nextPage:()=>i(c?.nextPage,u),prevPage:()=>i(c?.prevPage,u,!1),self:()=>i(c?.self,u),firstPage:()=>i(c?.firstPage,u)}};return i((()=>this.getConversationMessages({addressId:t,pageSize:r})))}async subscribe(e){return this.callbacks.add(e),{unsubscribe:()=>this.callbacks.delete(e)}}async subscribeChatMessages(e){const{addressId:t,onMessage:r}=e;return t in this.chatSubscriptions||(this.chatSubscriptions[t]=new Set),this.chatSubscriptions[t].add(r),{unsubscribe:()=>this.chatSubscriptions[t].delete(r)}}async joinConversation(e){try{const{addressId:t}=e,r="/api/fabric/conversations/join",{body:i}=await this.httpClient.fetch(r,{method:"POST",body:{conversation_id:t}});return i}catch(e){throw new Error("Error joining a conversation!",e)}}}class ac{options;_client;_pendingInvites={};_handlers={};constructor(e){this.options=e,this._client=e.client}_buildNotification(e){const t=async t=>new Promise(((r,i)=>{delete this._pendingInvites[e.callID];try{const i=this.options.buildInboundCall(e,t);i.answer(),r(i)}catch(e){i(e)}})),r=()=>(delete this._pendingInvites[e.callID],this.options.executeVertoBye(e.callID,e.nodeId));return{invite:{details:e,accept:e=>t(e),reject:()=>r()}}}setNotificationHandlers(e){this._handlers.all=e.all,(e.pushNotification&&this._handlers.all!=e.pushNotification||!e.pushNotification)&&(this._handlers.pushNotification=e.pushNotification),(e.websocket&&this._handlers.all!=e.websocket||!e.websocket)&&(this._handlers.websocket=e.websocket)}handleIncomingInvite(e){if(e.callID in this._pendingInvites)return void this._client.logger.debug(`skiping nottification for pending invite to callID: ${e.callID}`);if(this._pendingInvites[e.callID]=e,!this._handlers.all&&!this._handlers[e.source])return void this._client.logger.warn("Skiping nottification due to no listeners");const t=this._buildNotification(e);this._handlers.all?.(t);const r=this._handlers[e.source];r?.(t)}}class cc extends Fa{options;connectVersion=vr;constructor(e){super(e),this.options=e}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return e.jti}}async _checkTokenExpiration(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{const t=await this.execute(br(e));this._rpcConnectResult={...this._rpcConnectResult,...t}}catch(e){throw e}}}class dc extends ji{wsClientOptions;_incomingCallManager;_disconnected=!1;constructor(e){super((e=>{const t=Pi({userOptions:e,SessionConstructor:cc});return{...e,store:t}})(e)),this.wsClientOptions=e,this._incomingCallManager=new ac({client:this,buildInboundCall:this.buildInboundCall.bind(this),executeVertoBye:this.executeVertoBye.bind(this)}),this.runWorker("wsClientWorker",{worker:fa,initialState:{handleIncomingInvite:e=>{this._incomingCallManager.handleIncomingInvite({source:"websocket",...e})}}})}makeFabricObject(e){const{rootElement:t,applyLocalVideoOverlay:r=!0,applyMemberOverlay:i=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,mirrorLocalVideoOverlay:s=!0,...a}=e,c=(d={...a,store:this.store},Mi({store:d.store,Component:Oa})(d));var d;if(t)try{Ua({applyLocalVideoOverlay:r,applyMemberOverlay:i,mirrorLocalVideoOverlay:s,room:c,rootElement:t})}catch(e){this.logger.error("Unable to build the video element automatically")}return c.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===c.memberId||e.member_id===c.memberId));if(t?.audio_muted)try{c.stopOutboundAudio()}catch(e){this.logger.error("Error handling audio_muted",e)}if(t?.video_muted)try{c.stopOutboundVideo()}catch(e){this.logger.error("Error handling video_muted",e)}})),n&&c.on("member.updated.audioMuted",(({member:e})=>{try{e.member_id===c.memberId&&"audio_muted"in e&&(e.audio_muted?c.stopOutboundAudio():c.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&c.on("member.updated.videoMuted",(({member:e})=>{try{e.member_id===c.memberId&&"video_muted"in e&&(e.video_muted?c.stopOutboundVideo():c.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),c}buildOutboundCall(e){const[t,r]=e.to.split("?");if(!t)throw new Error("Invalid destination address");let i=!1,o=!1;"video"===new URLSearchParams(r).get("channel")&&(i=!0,o=!0);const n=this.makeFabricObject({audio:e.audio??!0,video:e.video??i,negotiateAudio:e.negotiateAudio??!0,negotiateVideo:e.negotiateVideo??o,rootElement:e.rootElement||this.wsClientOptions.rootElement,applyLocalVideoOverlay:!0,applyMemberOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,destinationNumber:e.to,nodeId:e.nodeId,attach:e.attach??!1,disableUdpIceServers:e.disableUdpIceServers||!1,userVariables:e.userVariables||this.wsClientOptions.userVariables});return n.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed"),n.destroy()})),this.session.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected"),n.destroy(),this.destroy()})),n.attachPreConnectWorkers(),n}buildInboundCall(e,t){const r=this.makeFabricObject({audio:t.audio??!0,video:t.video??!0,negotiateAudio:t.negotiateAudio??!0,negotiateVideo:t.negotiateVideo??!0,rootElement:t.rootElement||this.wsClientOptions.rootElement,applyLocalVideoOverlay:!0,applyMemberOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,nodeId:e.nodeId,remoteSdp:e.sdp,prevCallId:e.callID,disableUdpIceServers:t.disableUdpIceServers||!1,userVariables:t.userVariables||this.wsClientOptions.userVariables});return r.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed"),r.destroy()})),this.session.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected"),r.destroy(),this.destroy()})),r.attachPreConnectWorkers(),r}async executeVertoBye(e,t){try{return await this.execute({method:"webrtc.verto",params:{callID:e,node_id:t,message:Ir({cause:"USER_BUSY",causeCode:"17",dialogParams:{callID:e}})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}async executeVertoSubscribe(e,t){try{return await this.execute({method:"webrtc.verto",params:{callID:e,node_id:t,subscribe:[],message:Tr({sessid:e,eventChannel:[]})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}disconnect(){return new Promise(((e,t)=>{this._disconnected&&e(),this.session.once("session.disconnected",(()=>{this.destroy(),e(),this._disconnected=!0})),super.disconnect()}))}async dial(e){return new Promise((async(t,r)=>{try{t(this.buildOutboundCall(e))}catch(e){this.logger.error("Unable to connect and dial a call",e),r(e)}}))}async reattach(e){return new Promise((async(t,r)=>{try{t(this.buildOutboundCall({...e,attach:!0}))}catch(e){this.logger.error("Unable to connect and reattach a call",e),r(e)}}))}handlePushNotification(e){return new Promise((async(t,r)=>{const{decrypted:i,type:o}=e;"call_invite"!==o&&(this.logger.warn("Unknown notification type",e),r("Unknown notification type")),this.logger.debug("handlePushNotification",e);const{params:{params:n},node_id:s}=i;try{try{await this.executeVertoSubscribe(n.callID,s)}catch(e){this.logger.warn("Verto Subscribe",e)}this._incomingCallManager.handleIncomingInvite({source:"pushNotification",nodeId:s,...n}),t({resultType:"inboundCall"})}catch(e){r(e)}}))}updateToken(e){return new Promise(((t,r)=>{this.session.once("session.auth_error",(e=>{r(e)})),this.session.once("session.connected",(()=>{t()})),this.store.dispatch(xr.reauthAction({token:e}))}))}async online({incomingCallHandlers:e}){return this._incomingCallManager.setNotificationHandlers(e),this.execute({method:"subscriber.online",params:{}})}offline(){return this._incomingCallManager.setNotificationHandlers({}),this.execute({method:"subscriber.offline",params:{}})}}const lc=(()=>{let e=null;return t=>(e||(e=new Promise((async(r,i)=>{try{const i=new dc(t),o=new ic(t),n=new sc({httpClient:o,wsClient:i});await i.connect(),r({registerDevice:o.registerDevice.bind(o),unregisterDevice:o.unregisterDevice.bind(o),getSubscriberInfo:o.getSubscriberInfo.bind(o),disconnect:async()=>{await i.disconnect(),e=null},online:i.online.bind(i),offline:i.offline.bind(i),dial:i.dial.bind(i),reattach:i.reattach.bind(i),handlePushNotification:i.handlePushNotification.bind(i),updateToken:i.updateToken.bind(i),address:{getAddresses:o.getAddresses.bind(o),getAddress:o.getAddress.bind(o)},conversation:{getConversations:n.getConversations.bind(n),getMessages:n.getMessages.bind(n),getConversationMessages:n.getConversationMessages.bind(n),subscribe:n.subscribe.bind(n),sendMessage:n.sendMessage.bind(n),join:n.joinConversation.bind(n)},chat:{getMessages:n.getChatMessages.bind(n),subscribe:n.subscribeChatMessages.bind(n),sendMessage:n.sendMessage.bind(n),join:n.joinConversation.bind(n)},on:i.on.bind(i),off:i.off.bind(i),__httpClient:o,__wsClient:i})}catch(e){i(e)}})).catch((t=>{throw e=null,t}))),e)})();var uc=/*#__PURE__*/Object.freeze({__proto__:null,isFabricRoomSession:Aa,SignalWire:lc});const hc={aspectRatio:{ideal:16/9}},mc=e=>new Promise((async(t,r)=>{const{audio:i=!0,video:o=!0,iceServers:n,rootElementId:s,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:l=!0,speakerId:u,...h}=e,m=qa({...h});if(await m.connect(),!m)return;let p;if(s){const e=document.getElementById(s);e?p=e:(p=document.body,Qt().warn(`We couldn't find an element with id: ${s}: using 'document.body' instead.`))}const g=m.rooms.makeRoomObject({audio:i,video:!0===o?hc:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:p,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:l,speakerId:u});g.once("destroy",(()=>{g.emit("room.left"),m.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){Qt().error("Join",e),m.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),pc=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote","lock","unlock"],gc=["member.joined","layout.changed"],fc=()=>{};var vc=/*#__PURE__*/Object.freeze({__proto__:null,RoomSession:function(e){const{audio:t=!0,video:r=!0,iceServers:i,rootElement:o,applyLocalVideoOverlay:n=!0,mirrorLocalVideoOverlay:s=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,disableUdpIceServers:p=!1,...g}=e;["audio","video"].forEach((t=>{t in e&&Qt().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const f=!1!==e?.reattach,{callIdKey:v}=pa(g.token),y={joined:({call_id:e})=>{f&&v&&ma()?.setItem(v,e)},init:()=>{f&&_.on("room.subscribed",y.joined),_.options.prevCallId=y.getPrevCallId()},destroy:()=>{f&&(_.off("room.subscribed",y.joined),v&&ma()?.removeItem(v))},getPrevCallId:()=>{if(f&&v)return ma()?.getItem(v)??void 0}},b=qa(g),_=b.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:i,rootElement:o,applyLocalVideoOverlay:n,mirrorLocalVideoOverlay:s,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,prevCallId:y.getPrevCallId(),disableUdpIceServers:p});_.once("destroy",(()=>{_.emit("room.left",{reason:_.leaveReason}),y.destroy(),b.disconnect()})),b.session.once("session.disconnected",(()=>{_.destroy()}));const w={join:e=>new Promise((async(i,o)=>{try{_.attachPreConnectWorkers(),await b.connect();const n=e?.audio??t,s=e?.video??r,a=b._sessionAuthState;if(Qt().debug("getJoinMediaParams authState?",a),a&&"video"===a.type){const t=(e=>{const{authState:t,audio:r=!0,video:i=!0,sendAudio:o,sendVideo:n,receiveAudio:s,receiveVideo:a}=e;Qt().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:l}=t,u="member"===(l??"member"),h=u&&"both"===c,m=u&&"both"===d,p="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(n??i),y=Boolean(s??r),b=Boolean(a??i);return!h&&f&&Qt().info("Not allowed to send audio on this room. Default values will be used."),!m&&v&&Qt().info("Not allowed to send video on this room. Default values will be used."),!p&&y&&Qt().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&Qt().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:m&&v,mustRecvAudio:p&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(n),sendVideo:Boolean(s),...e});if(!Object.values(t).some(Boolean))return b.disconnect(),o(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));Qt().debug("Set mediaOptions",t),_.updateMediaOptions({audio:!!t.mustSendAudio&&(n||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}_.once("room.subscribed",(()=>{i(_)})),y.init(),gc.forEach((e=>_.once(e,fc))),await _.join()}catch(e){Qt().error("RoomSession Join",e),b.disconnect(),o(e)}}))};return new Proxy(_,{get(e,t,r){if(t in w)return w[t];if(!e.active&&pc.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})},createRoomObject:mc,joinRoom:e=>mc({...e,autoJoin:!0}),createClient:qa,isVideoRoomSession:aa}),yc=/*#__PURE__*/Object.freeze({__proto__:null,getDevices:Xn,getCameraDevices:()=>Xn("camera"),getMicrophoneDevices:()=>Xn("microphone"),getSpeakerDevices:Yn,getDevicesWithPermissions:Gn,getCameraDevicesWithPermissions:()=>Gn("camera"),getMicrophoneDevicesWithPermissions:()=>Gn("microphone"),getSpeakerDevicesWithPermissions:()=>Gn("speaker"),checkPermissions:Bn,checkCameraPermissions:Hn,checkMicrophonePermissions:Fn,checkSpeakerPermissions:qn,requestPermissions:async e=>{try{const t=await Kn(e);Vn(t)}catch(e){throw e}},createDeviceWatcher:ns,createCameraDeviceWatcher:()=>ns({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>ns({targets:["microphone"]}),createSpeakerDeviceWatcher:ss,supportsMediaDevices:xn,supportsGetUserMedia:()=>"function"==typeof On().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof On().getDisplayMedia,getUserMedia:Kn,getDisplayMedia:Jn,enumerateDevices:Un,enumerateDevicesByKind:zn,getSupportedConstraints:An,supportsMediaOutput:Ln,setMediaElementSinkId:Dn,stopStream:Vn,stopTrack:Wn,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(as(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},Kn(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new kt,i=new(window.AudioContext||window.webkitAudioContext),o=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(i);let n,s;try{i.createMediaStreamSource(t).connect(o)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(o.frequencyBinCount);o.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;s!==t&&(s=t,r.emit("volumeChanged",Math.min(s,100))),n=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};n=requestAnimationFrame(a);const c=()=>{n&&cancelAnimationFrame(n),"closed"!==i.state&&i.close().catch((e=>{Qt().error("Error closing the AudioContext",e)})),as(e)||t.getTracks().forEach((e=>e.stop())),r.emit("destroyed",null),r.removeAllListeners()};return new Proxy(r,{get:(e,t,r)=>"destroy"===t?c:Reflect.get(e,t,r)})}});e.Chat=Ja,e.Fabric=uc,e.LocalVideoOverlay=La,e.PubSub=Qa,e.SignalWire=lc,e.UserOverlay=ja,e.Video=vc,e.WebRTC=yc,e.buildVideoElement=Ua,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
7
31
|
//# sourceMappingURL=index.umd.js.map
|