@signalwire/js 3.21.0-dev.202306120940.aaa0747.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/src/BaseSession.d.ts.map +1 -1
- package/dist/core/src/types/index.d.ts +2 -0
- package/dist/core/src/types/index.d.ts.map +1 -1
- package/dist/core/src/types/videoRoomSession.d.ts +4 -1
- package/dist/core/src/types/videoRoomSession.d.ts.map +1 -1
- package/dist/core/src/types/voiceCall.d.ts +2 -0
- package/dist/core/src/types/voiceCall.d.ts.map +1 -1
- package/dist/index.esm.js +6 -6
- package/dist/index.esm.js.map +2 -2
- package/dist/index.js +6 -6
- package/dist/index.js.map +2 -2
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/js/src/JWTSession.d.ts.map +1 -1
- package/dist/js/src/RoomSessionDevice.d.ts +2 -2
- package/dist/js/src/RoomSessionDevice.d.ts.map +1 -1
- package/dist/js/src/RoomSessionScreenShare.d.ts +2 -2
- package/dist/js/src/RoomSessionScreenShare.d.ts.map +1 -1
- package/dist/js/src/utils/interfaces.d.ts +2 -2
- package/dist/js/src/utils/interfaces.d.ts.map +1 -1
- package/dist/js/tsconfig.build.tsbuildinfo +1 -1
- package/dist/webrtc/src/BaseConnection.d.ts +2 -0
- package/dist/webrtc/src/BaseConnection.d.ts.map +1 -1
- package/dist/webrtc/src/RTCPeer.d.ts +2 -1
- package/dist/webrtc/src/RTCPeer.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/JWTSession.ts +4 -4
- package/src/RoomSession.ts +1 -1
- package/src/RoomSessionDevice.ts +2 -1
- package/src/RoomSessionScreenShare.ts +2 -1
- package/src/utils/interfaces.ts +2 -1
package/dist/index.umd.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SignalWire JS SDK v3.21.0
|
|
2
|
+
* SignalWire JS SDK v3.21.0 (https://signalwire.com)
|
|
3
3
|
* Copyright 2018-2023 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 n(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 s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function i(t,r){for(var n=0;n<o.length;n++){var s=o[n];this[s]=n<t?e:this.methodFactory(s,t,r)}this.log=this.debug}function a(e,r,o){return function(){typeof console!==t&&(i.call(this,r,o),this[e].apply(this,arguments))}}function c(o,i,c){return function(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?s:void 0!==console[o]?n(console,o):void 0!==console.log?n(console,"log"):e)}(o)||a.apply(this,arguments)}function d(e,r,n){var s,a=this;r=null==r?"WARN":r;var d="loglevel";function u(){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=n||c,a.getLevel=function(){return s},a.setLevel=function(r,n){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(s=r,!1!==n&&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),i.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,u()||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 l=u();null==l&&(l=r),a.setLevel(l,!1)}var u=new d,l={};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=l[e];return t||(t=l[e]=new d(e,u.getLevel(),u.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return u.noConflict=function(){return typeof window!==t&&window.log===u&&(window.log=h),u},u.getLoggers=function(){return l},u.default=u,u},e.exports?e.exports=o():r.log=o()}(r);var o,n=r.exports,s=new Uint8Array(16);function i(){if(!o&&!(o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return o(s)}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;function c(e){return"string"==typeof e&&a.test(e)}for(var d=[],u=0;u<256;++u)d.push((u+256).toString(16).substr(1));function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(d[e[t+0]]+d[e[t+1]]+d[e[t+2]]+d[e[t+3]]+"-"+d[e[t+4]]+d[e[t+5]]+"-"+d[e[t+6]]+d[e[t+7]]+"-"+d[e[t+8]]+d[e[t+9]]+"-"+d[e[t+10]]+d[e[t+11]]+d[e[t+12]]+d[e[t+13]]+d[e[t+14]]+d[e[t+15]]).toLowerCase();if(!c(r))throw TypeError("Stringified UUID is invalid");return r}var h="6ba7b810-9dad-11d1-80b4-00c04fd430c8",p="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function m(e,t,r){function o(e,o,n,s){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof o&&(o=function(e){if(!c(e))throw TypeError("Invalid UUID");var t,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!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(o),i.set(e,o.length),(i=r(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,n){s=s||0;for(var a=0;a<16;++a)n[s+a]=i[a];return n}return l(i)}try{o.name=e}catch(e){}return o.DNS=h,o.URL=p,o}function g(e){return 14+(e+64>>>9<<4)+1}function f(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function v(e,t,r,o,n,s){return f((i=f(f(t,e),f(o,s)))<<(a=n)|i>>>32-a,r);var i,a}function y(e,t,r,o,n,s,i){return v(t&r|~t&o,e,t,n,s,i)}function b(e,t,r,o,n,s,i){return v(t&o|r&~o,e,t,n,s,i)}function _(e,t,r,o,n,s,i){return v(t^r^o,e,t,n,s,i)}function S(e,t,r,o,n,s,i){return v(r^(t|~o),e,t,n,s,i)}function w(e,t,r){var o=(e=e||{}).random||(e.rng||i)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(var n=0;n<16;++n)t[r+n]=o[n];return t}return l(o)}function k(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 E(e,t){return e<<t|e>>>32-t}function C(e){return C="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},C(e)}function P(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==C(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===C(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function T(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 I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){P(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function M(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. "}m("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){for(var t=[],r=32*e.length,o="0123456789abcdef",n=0;n<r;n+=8){var s=e[n>>5]>>>n%32&255,i=parseInt(o.charAt(s>>>4&15)+o.charAt(15&s),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[g(t)-1]=t;for(var r=1732584193,o=-271733879,n=-1732584194,s=271733878,i=0;i<e.length;i+=16){var a=r,c=o,d=n,u=s;r=y(r,o,n,s,e[i],7,-680876936),s=y(s,r,o,n,e[i+1],12,-389564586),n=y(n,s,r,o,e[i+2],17,606105819),o=y(o,n,s,r,e[i+3],22,-1044525330),r=y(r,o,n,s,e[i+4],7,-176418897),s=y(s,r,o,n,e[i+5],12,1200080426),n=y(n,s,r,o,e[i+6],17,-1473231341),o=y(o,n,s,r,e[i+7],22,-45705983),r=y(r,o,n,s,e[i+8],7,1770035416),s=y(s,r,o,n,e[i+9],12,-1958414417),n=y(n,s,r,o,e[i+10],17,-42063),o=y(o,n,s,r,e[i+11],22,-1990404162),r=y(r,o,n,s,e[i+12],7,1804603682),s=y(s,r,o,n,e[i+13],12,-40341101),n=y(n,s,r,o,e[i+14],17,-1502002290),r=b(r,o=y(o,n,s,r,e[i+15],22,1236535329),n,s,e[i+1],5,-165796510),s=b(s,r,o,n,e[i+6],9,-1069501632),n=b(n,s,r,o,e[i+11],14,643717713),o=b(o,n,s,r,e[i],20,-373897302),r=b(r,o,n,s,e[i+5],5,-701558691),s=b(s,r,o,n,e[i+10],9,38016083),n=b(n,s,r,o,e[i+15],14,-660478335),o=b(o,n,s,r,e[i+4],20,-405537848),r=b(r,o,n,s,e[i+9],5,568446438),s=b(s,r,o,n,e[i+14],9,-1019803690),n=b(n,s,r,o,e[i+3],14,-187363961),o=b(o,n,s,r,e[i+8],20,1163531501),r=b(r,o,n,s,e[i+13],5,-1444681467),s=b(s,r,o,n,e[i+2],9,-51403784),n=b(n,s,r,o,e[i+7],14,1735328473),r=_(r,o=b(o,n,s,r,e[i+12],20,-1926607734),n,s,e[i+5],4,-378558),s=_(s,r,o,n,e[i+8],11,-2022574463),n=_(n,s,r,o,e[i+11],16,1839030562),o=_(o,n,s,r,e[i+14],23,-35309556),r=_(r,o,n,s,e[i+1],4,-1530992060),s=_(s,r,o,n,e[i+4],11,1272893353),n=_(n,s,r,o,e[i+7],16,-155497632),o=_(o,n,s,r,e[i+10],23,-1094730640),r=_(r,o,n,s,e[i+13],4,681279174),s=_(s,r,o,n,e[i],11,-358537222),n=_(n,s,r,o,e[i+3],16,-722521979),o=_(o,n,s,r,e[i+6],23,76029189),r=_(r,o,n,s,e[i+9],4,-640364487),s=_(s,r,o,n,e[i+12],11,-421815835),n=_(n,s,r,o,e[i+15],16,530742520),r=S(r,o=_(o,n,s,r,e[i+2],23,-995338651),n,s,e[i],6,-198630844),s=S(s,r,o,n,e[i+7],10,1126891415),n=S(n,s,r,o,e[i+14],15,-1416354905),o=S(o,n,s,r,e[i+5],21,-57434055),r=S(r,o,n,s,e[i+12],6,1700485571),s=S(s,r,o,n,e[i+3],10,-1894986606),n=S(n,s,r,o,e[i+10],15,-1051523),o=S(o,n,s,r,e[i+1],21,-2054922799),r=S(r,o,n,s,e[i+8],6,1873313359),s=S(s,r,o,n,e[i+15],10,-30611744),n=S(n,s,r,o,e[i+6],15,-1560198380),o=S(o,n,s,r,e[i+13],21,1309151649),r=S(r,o,n,s,e[i+4],6,-145523070),s=S(s,r,o,n,e[i+11],10,-1120210379),n=S(n,s,r,o,e[i+2],15,718787259),o=S(o,n,s,r,e[i+9],21,-343485551),r=f(r,a),o=f(o,c),n=f(n,d),s=f(s,u)}return[r,o,n,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(g(t)),o=0;o<t;o+=8)r[o>>5]|=(255&e[o/8])<<o%32;return r}(e),8*e.length))})),m("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var o=unescape(encodeURIComponent(e));e=[];for(var n=0;n<o.length;++n)e.push(o.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var s=Math.ceil((e.length/4+2)/16),i=new Array(s),a=0;a<s;++a){for(var c=new Uint32Array(16),d=0;d<16;++d)c[d]=e[64*a+4*d]<<24|e[64*a+4*d+1]<<16|e[64*a+4*d+2]<<8|e[64*a+4*d+3];i[a]=c}i[s-1][14]=8*(e.length-1)/Math.pow(2,32),i[s-1][14]=Math.floor(i[s-1][14]),i[s-1][15]=8*(e.length-1)&4294967295;for(var u=0;u<s;++u){for(var l=new Uint32Array(80),h=0;h<16;++h)l[h]=i[u][h];for(var p=16;p<80;++p)l[p]=E(l[p-3]^l[p-8]^l[p-14]^l[p-16],1);for(var m=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var _=Math.floor(b/20),S=E(m,5)+k(_,g,f,v)+y+t[_]+l[b]>>>0;y=v,v=f,f=E(g,30)>>>0,g=m,m=S}r[0]=r[0]+m>>>0,r[1]=r[1]+g>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+v>>>0,r[4]=r[4]+y>>>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 R="function"==typeof Symbol&&Symbol.observable||"@@observable",x=function(){return Math.random().toString(36).substring(7).split("").join(".")},O={INIT:"@@redux/INIT"+x(),REPLACE:"@@redux/REPLACE"+x(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+x()}};function A(e,t,r){var o;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(M(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(M(1));return r(A)(e,t)}if("function"!=typeof e)throw new Error(M(2));var n=e,s=t,i=[],a=i,c=!1;function d(){a===i&&(a=i.slice())}function u(){if(c)throw new Error(M(3));return s}function l(e){if("function"!=typeof e)throw new Error(M(4));if(c)throw new Error(M(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(M(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=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(M(7));if(void 0===e.type)throw new Error(M(8));if(c)throw new Error(M(9));try{c=!0,s=n(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:O.INIT}),(o={dispatch:h,subscribe:l,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error(M(10));n=e,h({type:O.REPLACE})}})[R]=function(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(M(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[R]=function(){return this},e},o}function j(e){for(var t=Object.keys(e),r={},o=0;o<t.length;o++){var n=t[o];"function"==typeof e[n]&&(r[n]=e[n])}var s,i=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:O.INIT}))throw new Error(M(12));if(void 0===r(void 0,{type:O.PROBE_UNKNOWN_ACTION()}))throw new Error(M(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var o=!1,n={},a=0;a<i.length;a++){var c=i[a],d=e[c],u=(0,r[c])(d,t);if(void 0===u)throw new Error(M(14));n[c]=u,o=o||u!==d}return(o=o||i.length!==Object.keys(e).length)?n:e}}function L(e,t){return function(){return t(e.apply(this,arguments))}}function D(){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 N(){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(M(15))},n={getState:r.getState,dispatch:function(){return o.apply(void 0,arguments)}},s=t.map((function(e){return e(n)}));return o=D.apply(void 0,s)(r.dispatch),I(I({},r),{},{dispatch:o})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:O,applyMiddleware:N,bindActionCreators:function(e,t){if("function"==typeof e)return L(e,t);if("object"!=typeof e||null===e)throw new Error(M(16));var r={};for(var o in e){var n=e[o];"function"==typeof n&&(r[o]=L(n,t))}return r},combineReducers:j,compose:D,createStore:A,legacy_createStore:A}),V=function(e){return"@@redux-saga/"+e},$=V("CANCEL_PROMISE"),U=V("CHANNEL_END"),B=V("IO"),F=V("MATCH"),z=V("MULTICAST"),H=V("SAGA_ACTION"),q=V("SELF_CANCELLATION"),K=V("TASK"),Q=V("TASK_CANCEL"),G=V("TERMINATE"),J=V("LOCATION");function X(){return X=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},X.apply(this,arguments)}var Y=function(e){return null==e},Z=function(e){return null!=e},ee=function(e){return"function"==typeof e},te=function(e){return"string"==typeof e},re=Array.isArray,oe=function(e){return e&&ee(e.then)},ne=function(e){return e&&ee(e.next)&&ee(e.throw)},se=function e(t){return t&&(te(t)||ce(t)||ee(t)||re(t)&&t.every(e))},ie=function(e){return e&&ee(e.take)&&ee(e.close)},ae=function(e){return ee(e)&&e.hasOwnProperty("toString")},ce=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},de=function(e){return ie(e)&&e[z]},ue=function(e){return function(){return!0}}(),le=function(){},he=function(e){return e},pe=function(e,t){X(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 ge(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function fe(e){var t=!1;return function(){t||(t=!0,e())}}var ve=function(e){throw e},ye=function(e){return{value:e,done:!0}};function be(e,t,r){void 0===t&&(t=ve),void 0===r&&(r="iterator");var o={meta:{name:r},next:e,throw:t,return:ye,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function _e(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var Se=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},ke=function(e){return e===G},Ee=function(e){return e===Q},Ce=function(e){return ke(e)||Ee(e)};function Pe(e,t){var r,o=Object.keys(e),n=o.length,s=0,i=re(e)?Se(n):{},a={};return o.forEach((function(e){var o=function(o,a){r||(a||Ce(o)?(t.cancel(),t(o,a)):(i[e]=o,++s===n&&(r=!0,t(i))))};o.cancel=le,a[e]=o})),t.cancel=function(){r||(r=!0,o.forEach((function(e){return a[e].cancel()})))},a}function Te(e){return{name:e.name||"anonymous",location:Ie(e)}}function Ie(e){return e[J]}var Me={isEmpty:ue,put:le,take:le},Re=function(){return Me},xe=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),o=0,n=0,s=0,i=function(){if(0!=o){var t=r[s];return r[s]=null,o--,s=(s+1)%e,t}},a=function(){for(var e=[];o;)e.push(i());return e};return{isEmpty:function(){return 0==o},put:function(t){var i;o<e||(i=2*e,r=a(),o=r.length,n=r.length,s=0,r.length=i,e=i),function(t){r[n]=t,n=(n+1)%e,o++}(t)},take:i,flush:a}}(e)},Oe="TAKE",Ae="PUT",je="ALL",Le="CALL",De="FORK",Ne="SELECT",We="CANCELLED",Ve=function(e,t){var r;return(r={})[B]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function $e(e,t){return void 0===e&&(e="*"),se(e)?(Z(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ve(Oe,{pattern:e})):de(e)&&Z(t)&&se(t)?Ve(Oe,{channel:e,pattern:t}):ie(e)?(Z(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ve(Oe,{channel:e})):void 0}function Ue(e,t){return Y(t)&&(t=e,e=void 0),Ve(Ae,{channel:e,action:t})}function Be(e,t){var r,o=null;return ee(e)?r=e:(re(e)?(o=e[0],r=e[1]):(o=e.context,r=e.fn),o&&te(r)&&ee(o[r])&&(r=o[r])),{context:o,fn:r,args:t}}function Fe(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 Ve(Le,Be(e,r))}function ze(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 Ve(De,Be(e,r))}function He(e){void 0===e&&(e=he);for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ve(Ne,{selector:e,args:r})}function qe(){return Ve(We,{})}var Ke=[],Qe=0;function Ge(e){try{Ye(),e()}finally{Ze()}}function Je(e){Ke.push(e),Qe||(Ye(),et())}function Xe(e){try{return Ye(),e()}finally{et()}}function Ye(){Qe++}function Ze(){Qe--}function et(){var e;for(Ze();!Qe&&void 0!==(e=Ke.shift());)Ge(e)}var tt=function(e){return function(t){return e.some((function(e){return it(e)(t)}))}},rt=function(e){return function(t){return e(t)}},ot=function(e){return function(t){return t.type===String(e)}},nt=function(e){return function(t){return t.type===e}},st=function(){return ue};function it(e){var t="*"===e?st:te(e)?ot:re(e)?tt:ae(e)?ot:ee(e)?rt:ce(e)?nt: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(){ge(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,n=e.length;o<n;o++)(0,e[o])(at)}}}}function ut(e,t){void 0===t&&(t=Re());var r,o=!1,n=dt(t),s=function(){o||(o=!0,ee(r)&&r(),n.close())};return r=fe(r=e((function(e){ct(e)?s():n.put(e)}))),o&&r(),{take:n.take,flush:n.flush,close:s}}function lt(){var e,t=!1,r=[],o=r,n=function(){o===r&&(o=r.slice())},s=function(){t=!0;var e=r=o;o=[],e.forEach((function(e){e(at)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(ct(e))s();else for(var n=r=o,i=0,a=n.length;i<a;i++){var c=n[i];c[F](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(at):(e[F]=r,n(),o.push(e),e.cancel=fe((function(){n(),ge(o,e)})))},e.close=s,e}function ht(){var e=lt(),t=e.put;return e.put=function(e){e[H]?t(e):Je((function(){t(e)}))},e}var pt=0,mt=1,gt=2,ft=3;function vt(e,t){var r=e[$];ee(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var yt,bt=0,_t=function(){return++bt};function St(e){e.isRunning()&&e.cancel()}var wt=((yt={})[Oe]=function(e,t,r){var o=t.channel,n=void 0===o?e.channel:o,s=t.pattern,i=t.maybe,a=function(e){e instanceof Error?r(e,!0):!ct(e)||i?r(e):r(G)};try{n.take(a,Z(s)?it(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},yt[Ae]=function(e,t,r){var o=t.channel,n=t.action,s=t.resolve;Je((function(){var t;try{t=(o?o.put:e.dispatch)(n)}catch(e){return void r(e,!0)}s&&oe(t)?vt(t,r):r(t)}))},yt[je]=function(e,t,r,o){var n=o.digestEffect,s=bt,i=Object.keys(t);if(0!==i.length){var a=Pe(t,r);i.forEach((function(e){n(t[e],s,a[e],e)}))}else r(re(t)?[]:{})},yt.RACE=function(e,t,r,o){var n=o.digestEffect,s=bt,i=Object.keys(t),a=re(t)?Se(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,o){d||(o||Ce(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,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||n(t[e],s,c[e],e)}))},yt[Le]=function(e,t,r,o){var n=t.context,s=t.fn,i=t.args,a=o.task;try{var c=s.apply(n,i);if(oe(c))return void vt(c,r);if(ne(c))return void Ot(e,c,a.context,bt,Te(s),!1,r);r(c)}catch(e){r(e,!0)}},yt.CPS=function(e,t,r){var o=t.context,n=t.fn,s=t.args;try{var i=function(e,t){Y(e)?r(t):r(e,!0)};n.apply(o,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},yt[De]=function(e,t,r,o){var n=t.fn,s=t.detached,i=o.task,a=function(e){var t=e.context,r=e.fn,o=e.args;try{var n=r.apply(t,o);if(ne(n))return n;var s=!1;return be((function(e){return s?{value:e,done:!0}:(s=!0,{value:n,done:!oe(n)})}))}catch(e){return be((function(){throw e}))}}({context:t.context,fn:n,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Te(t)}(a,n);Xe((function(){var t=Ot(e,a,i.context,bt,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},yt.JOIN=function(e,t,r,o){var n=o.task,s=function(e,t){if(e.isRunning()){var r={task:n,cb:t};t.cancel=function(){e.isRunning()&&ge(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(re(t)){if(0===t.length)return void r([]);var i=Pe(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},yt.CANCEL=function(e,t,r,o){t===q?St(o.task):re(t)?t.forEach(St):St(t),r()},yt[Ne]=function(e,t,r){var o=t.selector,n=t.args;try{r(o.apply(void 0,[e.getState()].concat(n)))}catch(e){r(e,!0)}},yt.ACTION_CHANNEL=function(e,t,r){var o=t.pattern,n=dt(t.buffer),s=it(o),i=function t(r){ct(r)||e.channel.take(t,s),n.put(r)},a=n.close;n.close=function(){i.cancel(),a()},e.channel.take(i,s),r(n)},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){pe(o.task.context,t),r()},yt);function kt(e,t){return e+"?"+t}function Et(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 Pt=null,Tt=[],It=function(e){e.crashedEffect=Pt,Tt.push(e)},Mt=function(){Pt=null,Tt.length=0},Rt=function(e){Pt=e},xt=function(){var e,t=Tt[0],r=Tt.slice(1),o=t.crashedEffect?(e=Ie(t.crashedEffect))?e.code+" "+kt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+Et(t.meta)+(o?" \n when executing effect "+o:"")].concat(r.map((function(e){return" created by "+Et(e.meta)})),[Ct(Tt)]).join("\n")};function Ot(e,t,r,o,n,s,i){var a=e.finalizeRunEffect((function(t,r,o){oe(t)?vt(t,o):ne(t)?Ot(e,t,d.context,r,n,!1,o):t&&t[B]?(0,wt[t.type])(e,t.payload,o,u):o(t)}));l.cancel=le;var c={meta:n,cancel:function(){c.status===pt&&(c.status=mt,l(Q))},status:pt},d=function(e,t,r,o,n,s,i){var a;void 0===i&&(i=le);var c,d,u=pt,l=null,h=[],p=Object.create(r),m=function(e,t,r){var o,n=[],s=!1;function i(e){h.push.apply(h,m.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){n.push(t),t.cont=function(a,c){s||(ge(n,t),t.cont=le,c?i(a):(t===e&&(o=a),n.length||(s=!0,r(o))))}}function c(){s||(s=!0,n.forEach((function(e){e.cont=le,e.cancel()})),n=[])}return a(e),{addTask:a,cancelAll:c,abort:i,getTasks:function(){return n}}}(t,0,g);function g(t,r){if(r){if(u=gt,It({meta:n,cancelledTasks:h}),f.isRoot){var o=xt();Mt(),e.onError(t,{sagaStack:o})}d=t,l&&l.reject(t)}else t===Q?u=mt:u!==mt&&(u=ft),c=t,l&&l.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[K]=!0,a.id=o,a.meta=n,a.isRoot=s,a.context=p,a.joiners=[],a.queue=m,a.cancel=function(){u===pt&&(u=mt,m.cancelAll(),g(Q,!1))},a.cont=i,a.end=g,a.setContext=function(e){pe(p,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,u===gt?l.reject(d):u!==pt&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return u===pt},a.isCancelled=function(){return u===mt||u===pt&&t.status===mt},a.isAborted=function(){return u===gt},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,o,n,s,i),u={task:d,digestEffect:h};return i&&(i.cancel=d.cancel),l(),d;function l(e,r){try{var n;r?(n=t.throw(e),Mt()):Ee(e)?(c.status=mt,l.cancel(),n=ee(t.return)?t.return(Q):{done:!0,value:Q}):n=ke(e)?ee(t.return)?t.return():{done:!0}:t.next(e),n.done?(c.status!==mt&&(c.status=ft),c.cont(n.value)):h(n.value,o,l)}catch(e){if(c.status===mt)throw e;c.status=gt,c.cont(e,!0)}}function h(t,r,o,n){void 0===n&&(n="");var s,i=_t();function c(r,n){s||(s=!0,o.cancel=le,e.sagaMonitor&&(n?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),n&&Rt(t),o(r,n))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:n,effect:t}),c.cancel=le,o.cancel=function(){s||(s=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function At(e,t){for(var r=e.channel,o=void 0===r?ht():r,n=e.dispatch,s=e.getState,i=e.context,a=void 0===i?{}:i,c=e.sagaMonitor,d=e.effectMiddlewares,u=e.onError,l=void 0===u?_e:u,h=arguments.length,p=new Array(h>2?h-2:0),m=2;m<h;m++)p[m-2]=arguments[m];var g,f=t.apply(void 0,p),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:p})),d){var y=D.apply(void 0,d);g=function(e){return function(t,r,o){return y((function(t){return e(t,r,o)}))(t)}}}else g=he;var b={channel:o,dispatch:we(n),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Xe((function(){var e=Ot(b,f,a,v,Te(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function jt(e){var t,r=void 0===e?{}:e,o=r.context,n=void 0===o?{}:o,s=r.channel,i=void 0===s?ht():s,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,o,n={},s=Object.keys(e);for(o=0;o<s.length;o++)t.indexOf(r=s[o])>=0||(n[r]=e[r]);return n}(r,["context","channel","sagaMonitor"]);function d(e){return t=At.bind(null,X({},c,{context:n,channel:i,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return i.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){pe(n,e)},d}var Lt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function o(){}function n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,o,s,i){if("function"!=typeof o)throw new TypeError("The listener must be a function");var a=new n(o,s||e,i),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 i(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,n=[];if(0===this._eventsCount)return n;for(o in e=this._events)t.call(e,o)&&n.push(r?o.slice(1):o);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},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,n=t.length,s=new Array(n);o<n;o++)s[o]=t[o].fn;return s},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,n,s,i){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,u=this._events[a],l=arguments.length;if(u.fn){switch(u.once&&this.removeListener(e,u.fn,void 0,!0),l){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,t),!0;case 3:return u.fn.call(u.context,t,o),!0;case 4:return u.fn.call(u.context,t,o,n),!0;case 5:return u.fn.call(u.context,t,o,n,s),!0;case 6:return u.fn.call(u.context,t,o,n,s,i),!0}for(d=1,c=new Array(l-1);d<l;d++)c[d-1]=arguments[d];u.fn.apply(u.context,c)}else{var h,p=u.length;for(d=0;d<p;d++)switch(u[d].once&&this.removeListener(e,u[d].fn,void 0,!0),l){case 1:u[d].fn.call(u[d].context);break;case 2:u[d].fn.call(u[d].context,t);break;case 3:u[d].fn.call(u[d].context,t,o);break;case 4:u[d].fn.call(u[d].context,t,o,n);break;default:if(!c)for(h=1,c=new Array(l-1);h<l;h++)c[h-1]=arguments[h];u[d].fn.apply(u[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,o,n){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return i(this,s),this;var a=this._events[s];if(a.fn)a.fn!==t||n&&!a.once||o&&a.context!==o||i(this,s);else{for(var c=0,d=[],u=a.length;c<u;c++)(a[c].fn!==t||n&&!a[c].once||o&&a[c].context!==o)&&d.push(a[c]);d.length?this._events[s]=1===d.length?d[0]:d:i(this,s)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&i(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,Nt=Object.defineProperty,Wt=Object.defineProperties,Vt=Object.getOwnPropertyDescriptor,$t=Object.getOwnPropertyDescriptors,Ut=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,zt=Object.prototype.propertyIsEnumerable,Ht=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qt=(e,t)=>{for(var r in t||(t={}))Ft.call(t,r)&&Ht(e,r,t[r]);if(Bt)for(var r of Bt(t))zt.call(t,r)&&Ht(e,r,t[r]);return e},Kt=(e,t)=>Wt(e,$t(t)),Qt=(e,t)=>{var r={};for(var o in e)Ft.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&Bt)for(var o of Bt(e))t.indexOf(o)<0&&zt.call(e,o)&&(r[o]=e[o]);return r},Gt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of Ut(t))Ft.call(e,n)||n===r||Nt(e,n,{get:()=>t[n],enumerable:!(o=Vt(t,n))||o.enumerable});return e},Xt=(e,t,r)=>(Jt(e,t,"default"),r&&Jt(r,t,"default")),Yt=(e,t,r)=>(Ht(e,"symbol"!=typeof t?t+"":t,r),r),Zt="__local__",er="__synthetic__",tr="video",rr="chat",or="chat",nr=["room.started","room.ended"].map((e=>`${tr}.${e}`)),sr=n.getLogger("signalwire"),ir=sr.methodFactory;sr.methodFactory=(e,t,r)=>{const o=ir(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),o.apply(void 0,e)}};var ar,cr=sr.getLevel();sr.setLevel(cr);var dr={},ur=()=>null!=ar?ar:sr,lr=({type:e,payload:t})=>{const r=ur(),{logWsTraffic:o}=dr||{};if(!o)return;const n=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,n,"\n")},hr=()=>{const e=ur();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?lr:Reflect.get(e,t,r)})},pr=/[A-Z]/g,mr=["webrtc.message"],gr=e=>mr.includes(e),fr=/^2[0-9][0-9]$/,vr=(e,t)=>{const{result:r={},error:o}=e;if(o)return{error:o};const{code:n,node_id:s,result:i=null}=r;return n&&!fr.test(n)?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?vr(i,s):{result:i}:{result:r}},yr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},br=(e,t=yr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,o])=>{const n=_r(r);return e[n]="object"==typeof o&&o?Array.isArray(o)?t.propsToUpdateValue.includes(r)?o.map((e=>"string"==typeof e?_r(e):br(e))):o:br(o):(e=>e.endsWith("At"))(n)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(o):o,e}),{}),_r=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const o=t.trim().charAt(0),n=t.substr(1).toLowerCase();return`${e}${0===r?o.toLowerCase():o.toUpperCase()}${n}`}),""):e,Sr=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(pr,(e=>`_${e.toLowerCase()}`)))(e=wr({event:e,namespace:t}))),e),wr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,kr=e=>{const{event_type:t,params:r,node_id:o}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(gr(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}},Er=(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),Cr=({instance:e,transform:t,payload:r,transformedPayload:o})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:o,transform:n})=>{const s=qt(Kt(qt({},o),{_eventsNamespace:n.getInstanceEventNamespace?n.getInstanceEventNamespace(r):void 0,eventChannel:n.getInstanceEventChannel?n.getInstanceEventChannel(r):void 0}),(e=>{let t={},r=e,o=!0;for(;o;)Object.getOwnPropertyNames(r).forEach((r=>{"function"!=typeof e[r]||"string"!=typeof r||r in t||(t[r]=e[r])})),r&&r.__sw_symbol?r=Object.getPrototypeOf(r):o=!1;return t})(e));return Object.defineProperties(t,Object.entries(s).reduce(((e,[t,r])=>(void 0===r||(e[t]={value:r,enumerable:!0,configurable:!0,writable:!0}),e)),{}))})({instance:e,proxiedObj:new Proxy(e,{get:(e,n,s)=>"__sw_proxy"===n||("__sw_update_payload"===n?function(e){o=e}:"toString"===n?(({property:e,payload:t})=>"function"==typeof e?()=>JSON.stringify(t):e)({property:e[n],payload:o}):"_eventsNamespace"===n&&t.getInstanceEventNamespace?t.getInstanceEventNamespace(r):"eventChannel"===n&&t.getInstanceEventChannel?t.getInstanceEventChannel(r):n in o?o[n]:Reflect.get(e,n,s))}),payload:r,transformedPayload:o,transform:t}),Pr=new Map,Tr=/^(ws|wss):\/\//,Ir=(e,t,r)=>{let o=null;return Promise.race([e,new Promise(((e,n)=>o=setTimeout(n,t,r)))]).finally((()=>clearTimeout(o)))},Mr=e=>nr.includes(e),Rr=e=>e.includes("session."),xr=["video.member.updated","video.member.talking"],Or=["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"],Ar=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Or.includes(t)||(e=>e.includes(er))(t)||jr(t)||Rr(t)?null:xr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},jr=e=>e.includes(Zt),Lr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Zt),e)),[]).join(".")},Dr=e=>void 0!==e&&"jti"in e,Nr=e=>{var t;return qt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Wr=e=>qt({jsonrpc:"2.0"},e),Vr={major:3,minor:0,revision:0},$r=e=>Nr({method:"signalwire.connect",params:qt({version:Vr},e)}),Ur={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},Br=e=>{if(e.hasOwnProperty("dialogParams")){const t=Qt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in Ur)e&&t.hasOwnProperty(e)&&(t[Ur[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Fr=e=>(t={})=>Nr({method:e,params:Br(t)}),zr=Fr("verto.invite"),Hr=Fr("verto.bye"),qr=Fr("verto.modify"),Kr=Fr("verto.info"),Qr=Fr("verto.pong"),Gr=(e,t)=>Wr({id:e,result:{method:t}}),Jr={};Gt(Jr,{authErrorAction:()=>so,authExpiringAction:()=>ao,authSuccessAction:()=>io,compoundEventAttachAction:()=>bo,createAction:()=>Yr,destroyAction:()=>oo,getCustomSagaActionType:()=>yo,initAction:()=>ro,makeCustomSagaAction:()=>vo,reauthAction:()=>no,sessionAuthErrorAction:()=>po,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>lo,sessionExpiringAction:()=>mo,sessionForceCloseAction:()=>go,sessionReconnectingAction:()=>ho,socketMessageAction:()=>co});var Xr={};function Yr(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(Xr,{configureStore:()=>to,createAction:()=>Yr}),Xt(Xr,W);var Zr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?D:D.apply(null,arguments)},eo=!0;function to(e){const t=function(){return[]},{reducer:r,middleware:o=t(),devTools:n=!0,preloadedState:s,enhancers:i}=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=j(r)}let c=o;"function"==typeof c&&(c=c(t));const d=N(...c);let u=D;n&&(u=Zr(qt({trace:!eo},"object"==typeof n&&n)));let l=[d];return Array.isArray(i)?l=[d,...i]:"function"==typeof i&&(l=i(l)),A(a,s,u(...l))}var ro=Yr("swSdk/init"),oo=Yr("swSdk/destroy"),no=Yr("swSdk/reauth"),so=Yr("auth/error"),io=Yr("auth/success"),ao=Yr("auth/expiring"),co=Yr("socket/message"),uo=Yr("session.connected"),lo=Yr("session.disconnected"),ho=Yr("session.reconnecting"),po=Yr("session.auth_error"),mo=Yr("session.expiring"),go=Yr("session.forceClose"),fo=(e,t)=>`${t.type}/${e}`,vo=(e,t)=>Kt(qt({},t),{type:fo(e,t)}),yo=(e,t)=>fo(e,t),bo=Yr("compound_event:attach");function _o(e){const t={},r=[];let o;const n={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,n},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),n),addDefaultCase:e=>(o=e,n)};return e(n),[t,r,o]}var So=({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||{},n=Object.keys(o),s={},i={},a={};function c(){const[t={},o=[],n]="function"==typeof e.extraReducers?_o(e.extraReducers):[e.extraReducers],s=qt(qt({},t),i);return function(e,t,r=[],o){let n,[s,i,a]="function"==typeof t?_o(t):[t,r,o];function c(e=n(),t){let r=[s[t.type],...i.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 n="function"==typeof e?()=>e():()=>e,c.getInitialState=n,c}(r,s,o,n)}let d;return n.forEach((e=>{const r=o[e],n=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,s[e]=c,i[n]=c,a[e]=d?Yr(n,d):Yr(n)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:s,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(oo.type,(()=>t)),"function"==typeof o&&o(e)}});function wo(e){return[ro.type,no.type].includes(e.type)}var ko=So({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(so.type,((e,{payload:t})=>Kt(qt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(wo,(e=>Kt(qt({},e),{authStatus:"authorizing"})))}}),{actions:Eo,reducer:Co}=ko,Po=Symbol("BaseSession"),To=class{constructor(e){var t,r;this.options=e,Yt(this,"__sw_symbol",Po),Yt(this,"uuid",w()),Yt(this,"WebSocketConstructor"),Yt(this,"CloseEventConstructor"),Yt(this,"agent"),Yt(this,"connectVersion",Vr),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:n="info",sessionChannel:s}=e;o&&(this._host=(e=>`${Tr.test(e)?"":"wss://"}${e}`)(o)),s&&(this._sessionChannel=s),n&&(null==(r=(t=this.logger).setLevel)||r.call(t,n)),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 Dr(e)?e.jti:e.signature}}get logger(){return hr()}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._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)}async 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"});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),Ir(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)}async authenticate(){var e;const t={agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}};this._relayProtocolIsValid()&&(t.protocol=this.relayProtocol),(null==(e=this.options.contexts)?void 0:e.length)&&(t.contexts=this.options.contexts),this._rpcConnectResult=await this.execute($r(t))}authError(e){this._removeSocketListeners(),this.dispatch(so({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(io())}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(ho()),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:n}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:o}=e;return o?{error:o}:"signalwire.connect"===t.method?{result:r}:vr(e)})({response:t,request:r});return this._checkCurrentStatus(),i?n(i):o(s)}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,Wr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(co(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,Wr({id:r,result:{timestamp:o||Date.now()/1e3}})))}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(lo());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(Eo.authStatus("disconnected"===e?"unauthorized":"unknown")),this.destroySocket(),this._checkCurrentStatus()}},Io=class extends To{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=Dr(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={agent:this.agent,version:this.connectVersion,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($r(e)),await this.persistRelayProtocol(),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((t=e,Nr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}_checkTokenExpiration(){this.expiresAt&&(this.expiresIn<=this._refreshTokenNotificationDiff&&(this.dispatch(ao()),this.options._onRefreshToken?this.options._onRefreshToken():this.logger.warn("The token is going to expire!")),clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay)))}},Mo={};Gt(Mo,{authErrorAction:()=>so,authExpiringAction:()=>ao,authSuccessAction:()=>io,compoundEventAttachAction:()=>bo,configureStore:()=>on,connect:()=>rn,createAction:()=>Yr,createCatchableSaga:()=>No,createRestartableSaga:()=>Lo,destroyAction:()=>oo,eventChannel:()=>ut,getCustomSagaActionType:()=>yo,initAction:()=>ro,makeCustomSagaAction:()=>vo,reauthAction:()=>no,sessionAuthErrorAction:()=>po,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>lo,sessionExpiringAction:()=>mo,sessionForceCloseAction:()=>go,sessionReconnectingAction:()=>ho,socketMessageAction:()=>co});var Ro=So({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:xo,reducer:Oo}=Ro,Ao=(0,Xr.combineReducers)({components:Oo,session:Co}),jo={};Gt(jo,{createCatchableSaga:()=>No,createRestartableSaga:()=>Lo,eventChannel:()=>ut});var Lo=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 n;n=ze.apply(void 0,[e].concat(r)),Ve(De,X({},n.payload,{detached:!0}))}((function*(){for(;;)try{hr().debug("Run a restartable saga"),yield Fe(e),hr().debug("One of the restartable saga has ended. Restarting..")}catch(e){hr().error("Restartable Saga Error",e)}}))},Do=e=>hr().error("Catchable Saga Error",e),No=(e,t=Do)=>function*(...r){try{yield Fe(e,...r)}catch(e){t(e)}},Wo=e=>gr(null==e?void 0:e.event_type),Vo=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},$o=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*Uo({sessionChannel:e,pubSubChannel:t,swEventChannel:r,session:o}){function*n(e){switch(e.event_type){case"video.room.audience_count":return void(yield Ue(t,{type:"video.room.audienceCount",payload:e.params}));case"video.member.updated":return;case"video.member.talking":{const{member:r}=e.params;if("talking"in r){const o=r.talking?"started":"ended";yield Ue(t,{type:`video.member.talking.${o}`,payload:e.params});const n=r.talking?"start":"stop";yield Ue(t,{type:`video.member.talking.${n}`,payload:e.params})}break}}yield Ue(t,{type:e.event_type,payload:e.params})}function*s(e){yield Ue(r,kr(e)),Wo(e)||($o(e)?o.onSwAuthorizationState(e.params.authorization_state):Vo(e)?yield ze(n,e):yield Ue({type:e.event_type,payload:e}))}const i=No((function*(e){if(e.type!==co.type)return void(yield Ue(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return hr().debug(`Unknown message: ${t}`,e);yield ze(s,r)}),(e=>{hr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield $e(e);yield ze(i,t)}}catch(e){hr().error("sessionChannelWorker error:",e)}finally{hr().debug("sessionChannelWorker finally")}}var Bo=e=>{var t;return void 0===e.payload?"":(e=>e.type.startsWith("video.member.")||e.type.startsWith("video.__synthetic__.member"))(e)||(e=>e.type.startsWith("video.layout."))(e)||(e=>e.type.startsWith("video.recording."))(e)||(e=>e.type.startsWith("video.playback."))(e)||(e=>e.type.startsWith("video.stream."))(e)||(e=>"video.room.audience_count"===e.type||"video.room.audienceCount"===e.type)(e)?e.payload.room_session_id:(e=>e.type.startsWith("video.room."))(e)?e.payload.room_session.id:(e=>e.type.startsWith("chat."))(e)?"":(e=>e.type.startsWith("calling."))(e)&&null!=(t=e.payload.tag)?t:""};function*Fo({pubSubChannel:e,emitter:t}){hr().debug("pubSubSaga [started]");try{for(;;){const r=yield $e(e,"*"),{type:o,payload:n}=r;try{const e=Bo(r);Mr(o)&&t.emit(o,n),hr().trace("Emit:",Sr({namespace:e,event:o})),t.emit(Sr({namespace:e,event:o}),n)}catch(e){hr().error(e)}}}finally{(yield qe())&&hr().debug("pubSubSaga [cancelled]")}}var zo=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Yt(this,"name","AuthError"),Object.setPrototypeOf(this,zo.prototype)}},Ho=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,Ho.prototype)}};function*qo({initSession:e,userOptions:t,channels:r}){var o;const n=e(),s=r.pubSubChannel,i=r.swEventChannel,a=r.sessionChannel;let c=[];if(null==(o=t.workers)?void 0:o.length)try{const e=t.workers.map((e=>Fe(Lo(e))));c=yield function(e){var t=Ve(je,e);return t.combinator=!0,t}(e)}catch(e){hr().error("Error running custom workers",e)}yield ze(Uo,{session:n,sessionChannel:a,pubSubChannel:s,swEventChannel:i});const d=yield ze(Fo,{pubSubChannel:s,emitter:t.emitter}),u=yield ze(Qo,{session:n,sessionChannel:a,pubSubChannel:s,userOptions:t});n.connect(),yield $e(oo.type),n.disconnect(),yield $e(lo.type),yield Ue(s,lo()),d.cancel(),u.cancel(),c.forEach((e=>e.cancel()))}function*Ko({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Fe(e.reauthenticate),yield Ue(Eo.connected(e.rpcConnectResult)),yield Ue(r,uo()))}catch(t){hr().error("Reauthenticate Error",t),e.authError(t)}}function*Qo(e){hr().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield $e([io.type,so.type,ao.type,no.type,ho.type,go.type]);switch(hr().debug("sessionStatusWatcher",t.type,t.payload),t.type){case io.type:{const{session:t,pubSubChannel:r}=e;yield Ue(Eo.connected(t.rpcConnectResult)),yield Ue(r,uo());break}case so.type:yield ze(Go,Kt(qt({},e),{action:t}));break;case ao.type:yield Ue(e.pubSubChannel,mo());break;case no.type:yield ze(Ko,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case ho.type:yield Ue(e.pubSubChannel,ho());break;case go.type:e.session.forceClose()}}}finally{(yield qe())&&hr().debug("sessionStatusWatcher [cancelled]")}}function*Go(e){hr().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:o}=r.payload,n=o?new zo(o.code,o.message):new Error("Unauthorized");yield Ue(t,po(n))}finally{(yield qe())&&hr().debug("sessionAuthErrorSaga [cancelled]")}}var Jo={};Gt(Jo,{getAuthError:()=>en,getAuthState:()=>tn,getAuthStatus:()=>Zo,getIceServers:()=>Xo,getSession:()=>Yo});var Xo=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Yo=e=>e.session,Zo=({session:e})=>e.authStatus,en=({session:e})=>e.authError,tn=({session:e})=>e.authState,rn=e=>{const{sessionListeners:t={},store:r,Component:o,customSagas:n=[]}=e,s=Object.keys(t);return e=>{const i=new o(Kt(qt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),o=Yo(e);for(const e of s){if(!1===c)return;const r=`session.${e}`,n=a.get(r),s=o[e];if(void 0!==s&&n!==s){a.set(r,s);const n=t[e];"string"==typeof n?i[n](o):"function"==typeof n&&n(o)}}})),u=null==n?void 0:n.map((e=>r.runSaga(e,{instance:i,runSaga:r.runSaga})));return i.destroyer=()=>{c=!1,d(),a.clear(),(null==u?void 0:u.length)&&u.forEach((e=>e.cancel()))},i}};Xt(Mo,Xr);var on=e=>{var t;const{userOptions:r,SessionConstructor:o,preloadedState:n={},runSagaMiddleware:s=!0}=e,i=jt(),a=lt(),c=lt(),d=dt(),u={pubSubChannel:a,swEventChannel:c,sessionChannel:d},l=to({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:Ao,preloadedState:n,middleware:e=>e().concat(i)});let h;const p=()=>(h=new o(Kt(qt({},r),{sessionChannel:d})),h),m=()=>(h||hr().warn("Custom worker started without the session"),h),g=new Map,f={get:e=>g.get(e),set:(e,t)=>(g.set(e,t),g),remove:e=>(g.delete(e),g)};if(s){const e=(e=>function*({userOptions:t,channels:r}){var o;for(t.logger&&(ar=t.logger),t.debug&&(e=>{null!=e?Object.assign(dr,e):dr={}})(t.debug);;){const n=yield $e([ro.type,no.type]);(null==(o=null==n?void 0:n.payload)?void 0:o.token)&&(t.token=n.payload.token);try{yield Fe(qo,Kt(qt({},e),{userOptions:t,channels:r}))}catch(e){hr().error("RootSaga Error:",e)}finally{(yield qe())&&hr().debug("rootSaga [cancelled]"),hr().debug("Reboot rootSaga")}}})({initSession:p});i.run(e,{userOptions:r,channels:u})}return Kt(qt({},l),{runSaga:(e,t)=>i.run(e,Kt(qt({},t),{channels:u,getSession:m,instanceMap:f})),channels:u,instanceMap:f})},nn=function*(e){const{initialState:t,onDone:r,onFail:o,getSession:n}=e,{requestId:s,method:i,params:a}=t,c=n();if(!c){const e=new Error("Session does not exist!");return hr().error(e),void(null==o||o(e))}try{const e=(({method:e,params:t})=>Nr({method:e,params:t}))({id:s,method:i,params:a}),t=yield Fe(c.execute,e);null==r||r(t)}catch(e){hr().warn("Execute error: ",e),null==o||o(e)}},sn=e=>e,an=Symbol("BaseComponent"),cn=class{constructor(e){this.options=e,Yt(this,"__sw_symbol",an),Yt(this,"uuid",w()),Yt(this,"_eventsPrefix",""),Yt(this,"_eventsRegisterQueue",new Set),Yt(this,"_eventsEmitQueue",new Set),Yt(this,"_eventsNamespace"),Yt(this,"_eventsTransformsCache",new Map),Yt(this,"_customSagaTriggers",new Map),Yt(this,"_destroyer"),Yt(this,"baseEventEmitter"),Yt(this,"_emitterTransforms",new Map),Yt(this,"_emitterListenersCache",new Map),Yt(this,"_trackedEvents",[]),Yt(this,"_runningWorkers",[]),Yt(this,"_workers",new Map),this.baseEventEmitter=new Dt}get __uuid(){return this.uuid}_handleCompoundEvents(e){const t=this._getInternalEvent(e);let r;for(const e of this.getCompoundEvents().keys())if(this._getInternalEvent(e)===t){r=this.getCompoundEvents().get(e);break}r&&0!==r.length&&(this.store.dispatch(bo({compoundEvents:r,event:t,namespace:this._eventsNamespace})),r.forEach((e=>{"string"==typeof e&&this._trackEvent(e)})))}_getNamespacedEvent(e){let t=this._eventsNamespace;return"string"==typeof e&&jr(e)&&(t=this.__uuid),Sr({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||Rr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return hr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.options.store.instanceMap}get emitter(){return this.options.emitter}get baseEmitter(){return this.baseEventEmitter}addEventToRegisterQueue(e){const[t,r]=e.params;return this.logger.trace("Adding event to the register queue",{event:t,fn:r}),this._eventsRegisterQueue.add({type:e.type,params:e.params}),this.emitter}_addEventToEmitQueue(e,t){this.logger.trace("Adding to the emit queue",e),this._eventsEmitQueue.add({event:e,args:t})}shouldAddToQueue(){return void 0===this._eventsNamespace}runAndCacheEventHandlerTransform({internalEvent:e,transform:t,payload:r}){if("no-cache"===t.mode)return t.instanceFactory(r);if(!this._eventsTransformsCache.has(e)){const o=t.instanceFactory(r);return this._eventsTransformsCache.set(e,o),o}return this._eventsTransformsCache.get(e)}cleanupEventHandlerTransformCache({internalEvent:e,force:t}){const r=this._eventsTransformsCache.get(e),o=this.listenerCount(e);return r&&(t||o<=1)?(r.__uuid!==this.__uuid&&"function"==typeof r.destroy&&r.destroy(),this._eventsTransformsCache.delete(e)):(this.logger.trace("[cleanupEventHandlerTransformCache] Key wasn't cached",e),!1)}getEmitterListenersMapByInternalEventName(e){var t;return null!=(t=this._emitterListenersCache.get(e))?t:new Map}getAndRemoveStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);if(t&&r.has(t)){const o=r.get(t);return r.delete(t),this._emitterListenersCache.set(e,r),o}return t}_createStableEventHandler(e,t){return r=>{const o=this._emitterTransforms.get(e);if(this.logger.trace("Got emitterTransform for",e,o),!o)return t(r);const n=this.runAndCacheEventHandlerTransform({internalEvent:e,transform:o,payload:r});let s;const i=this._parseNestedFields(r,o);return s=Cr({instance:n,payload:r,transformedPayload:i,transform:o}),o.afterCreateHook&&o.afterCreateHook(s),t(s)}}_parseNestedFields(e,t,r=(e=>e),o=undefined){if(!t.nestedFieldsToProcess)return t.payloadTransform(e);if(e.__sw_proxy)return e;if(!o){const o=t.payloadTransform(e);return this._parseNestedFields(o,t,r,o)}return Array.isArray(e)?o=e.map(((o,n)=>this._parseNestedFields(r(o),t,r,e[n]))):e&&"object"==typeof e&&Object.entries(e).forEach((([e,n])=>{var s;const i=null==(s=t.nestedFieldsToProcess)?void 0:s[e],a=i?this._emitterTransforms.get(i.eventTransformType):void 0;o[e]=n&&"object"==typeof n?this._parseNestedFields(n,t,(e=>i&&a&&e&&"object"==typeof e?(({transform:e,payload:t})=>{const r=(({transform:e,payload:t})=>{if(!Pr.has(e.type)){const r=e.instanceFactory(t);return Pr.set(e.type,r),r}return Pr.get(e.type)})({transform:e,payload:t}),o=e.payloadTransform(t);return Cr({transform:e,payload:t,instance:r,transformedPayload:o})})({transform:a,payload:r(i.processInstancePayload(e))}):e),o[e]):r(n)})),o}getOrCreateStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);let o=r.get(t);return o||(o=this._createStableEventHandler(e,t),r.set(t,o),this._emitterListenersCache.set(e,r)),o}_trackEvent(e){this._trackedEvents=Array.from(new Set(this._trackedEvents.concat(e)))}_untrackEvent(e){this._trackedEvents=this._trackedEvents.filter((t=>t!==e))}_addListener(e,t,r){this._handleCompoundEvents(e);const o=this._getInternalEvent(e);this._trackEvent(o);const n=r?"once":"on";if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:n,params:[e,t]}),this.emitter;const s=this.getOrCreateStableEventHandler(o,t);return this.logger.trace("Registering event",o),this.emitter[n](o,s)}on(e,t){return this._addListener(e,t)}_on(e,t){return this.baseEmitter.on(e,t)}_once(e,t){return this.baseEmitter.once(e,t)}_off(e,t){return this.baseEmitter.off(e,t)}once(e,t){return this._addListener(e,t,!0)}off(e,t){if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:"off",params:[e,t]}),this.emitter;const r=this._getInternalEvent(e),o=this.getAndRemoveStableEventHandler(r,t);return this.cleanupEventHandlerTransformCache({internalEvent:r,force:!o}),this.logger.trace("Removing event listener",r),this._untrackEvent(r),this.emitter.off(r,o)}removeAllListeners(e){return this.shouldAddToQueue()?(this.addEventToRegisterQueue({type:"removeAllListeners",params:[e]}),this.emitter):e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.emitter)}eventNames(){return this._trackedEvents}baseEventNames(){return this.baseEmitter.eventNames()}getSubscriptions(){return Ar(this.eventNames().concat(this.baseEventNames()))}emit(e,...t){if(this.shouldAddToQueue())return this._addEventToEmitQueue(e,t),!1;const r=this._getInternalEvent(e);return this.logger.trace("Emit on event:",r),this.emitter.emit(r,...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=sn,transformResolve:o=sn,transformReject:n=sn}={transformParams:sn,transformResolve:sn,transformReject:sn}){return new Promise(((s,i)=>{const a=w();this.runWorker("executeActionWorker",{worker:nn,onDone:e=>s(o(e)),onFail:e=>i(n(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},vo(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]}flushEventsRegisterQueue(){this._eventsRegisterQueue.forEach((e=>{this[e.type](...e.params),this._eventsRegisterQueue.delete(e)}))}flushEventsEmitQueue(){this._eventsEmitQueue.forEach((e=>{const{event:t,args:r}=e;this.emit(t,...r),this._eventsEmitQueue.delete(e)}))}flushEventsQueue(){this.flushEventsRegisterQueue(),this.flushEventsEmitQueue()}_attachListeners(e){"string"==typeof e&&(this._eventsNamespace=e),this.flushEventsQueue()}getCompoundEvents(){return new Map}getEmitterTransforms(){return new Map}get _sessionAuthStatus(){return Zo(this.store.getState())}get _sessionAuthState(){return tn(this.store.getState())}_waitUntilSessionAuthorized(){switch(Zo(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=Zo(this.store.getState()),n=en(this.store.getState());if("authorized"===o)e(this),r();else if("unauthorized"===o){const e=n?new zo(n.code,n.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}_setEmitterTransform({event:e,handler:t,local:r}){const o=this._getInternalEvent(e);(r?jr(e):!jr(e)&&this.eventNames().includes(o))&&this._emitterTransforms.set(o,t)}applyEmitterTransforms({local:e=!1}={local:!1}){this.getEmitterTransforms().forEach(((t,r)=>{Array.isArray(r)?r.forEach((r=>{this._setEmitterTransform({event:r,handler:t,local:e})})):this._setEmitterTransform({event:r,handler:t,local:e}),this._emitterTransforms.set(t.type,t)}))}runWorker(e,t){return this._workers.has(e)?hr().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,n=Qt(r,["worker"]);const s=this.store.runSaga(o,qt({instance:this,runSaga:this.store.runSaga},n));return this._runningWorkers.push(s),this._workers.delete(e),s}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},dn=class extends cn{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=Zo(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(ro()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(oo())}},un=class extends cn{constructor(e){super(e),this.options=e,Yt(this,"subscribeMethod","signalwire.subscribe"),Yt(this,"subscribeParams",{}),Yt(this,"_latestExecuteParams"),this.applyEmitterTransforms({local:!0});const t=()=>{this._latestExecuteParams=void 0};super.on("session.connected",t),super.on("session.disconnected",t),super.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 this.applyEmitterTransforms(),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")}},ln={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(ln).map((e=>`${tr}.member.updated.${e}`));var hn=br(ln);Object.keys(hn).map((e=>`member.updated.${e}`));var pn={};Gt(pn,{getComponent:()=>mn,getComponentsById:()=>gn,getComponentsToCleanup:()=>fn});var mn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},gn=({components:e})=>e.byId,fn=e=>{const t=gn(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},vn={};Gt(vn,{RoomSessionPlaybackAPI:()=>ms,RoomSessionRTPlaybackAPI:()=>fs,RoomSessionRTRecordingAPI:()=>hs,RoomSessionRTStreamAPI:()=>_s,RoomSessionRecordingAPI:()=>us,RoomSessionStreamAPI:()=>ys,audioMuteMember:()=>Vn,audioUnmuteMember:()=>$n,createRoomSessionPlaybackObject:()=>gs,createRoomSessionRTPlaybackObject:()=>vs,createRoomSessionRTRecordingObject:()=>ps,createRoomSessionRTStreamObject:()=>Ss,createRoomSessionRecordingObject:()=>ls,createRoomSessionStreamObject:()=>bs,deafMember:()=>Fn,deleteMemberMeta:()=>os,deleteMeta:()=>Dn,demote:()=>Jn,getLayouts:()=>Sn,getMemberMeta:()=>es,getMembers:()=>wn,getMeta:()=>An,getPlaybacks:()=>Rn,getRTPlaybacks:()=>ss,getRTRecordings:()=>as,getRTStreams:()=>ds,getRecordings:()=>In,getStreams:()=>Nn,hideVideoMuted:()=>Cn,play:()=>xn,playRT:()=>ns,promote:()=>Gn,removeAllMembers:()=>Zn,removeMember:()=>Yn,setDeaf:()=>Hn,setHideVideoMuted:()=>Tn,setInputSensitivityMember:()=>Qn,setInputVolumeMember:()=>qn,setLayout:()=>kn,setMemberMeta:()=>ts,setMemberPosition:()=>Xn,setMeta:()=>jn,setOutputVolumeMember:()=>Kn,setPositions:()=>En,showVideoMuted:()=>Pn,startRTRecording:()=>is,startRTStream:()=>cs,startRecording:()=>Mn,startStream:()=>Wn,undeafMember:()=>zn,updateMemberMeta:()=>rs,updateMeta:()=>Ln,videoMuteMember:()=>Un,videoUnmuteMember:()=>Bn});var yn=()=>{},bn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:qt({room_session_id:this.roomSessionId},r)},t)}}),_n=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,s=Qt(o,["memberId"]);return this.execute({method:e,params:qt({room_session_id:this.roomSessionId,member_id:n||this.memberId},s)},t)}}),Sn=bn("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),wn=bn("video.members.get",{transformResolve:e=>({members:e.members})}),kn=bn("video.set_layout",{transformResolve:yn}),En=bn("video.set_position",{transformResolve:yn}),Cn=bn("video.hide_video_muted",{transformResolve:yn}),Pn=bn("video.show_video_muted",{transformResolve:yn}),Tn={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:yn})}},In={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.list"),r);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.list"),r),t(e)}}))}},Mn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.start"),r);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.start"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.start"),r),t(e)}}))}},Rn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.playback.list"),r);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.playback.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.list"),r),t(e)}}))}},xn={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{const s=t=>{e(t)};this.on(Lr("video.playback.start"),s);try{const e=r||o,t=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:e},n)});this.emit(Lr("video.playback.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.start"),s),t(e)}}))}},On=e=>bn(e,{transformResolve:yn,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Qt(t,["room_session_id"])}}}),An=bn("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),jn=On("video.set_meta"),Ln=On("video.update_meta"),Dn={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},Nn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.stream.list"),r);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.stream.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.list"),r),t(e)}}))}},Wn={value:function(e){return new Promise((async(t,r)=>{const o=e=>{t(e)};this.on(Lr("video.stream.start"),o);try{const t=await this.execute({method:"video.stream.start",params:qt({room_session_id:this.roomSessionId},e)});this.emit(Lr("video.stream.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.start"),o),r(e)}}))}},Vn=_n("video.member.audio_mute",{transformResolve:yn}),$n=_n("video.member.audio_unmute",{transformResolve:yn}),Un=_n("video.member.video_mute",{transformResolve:yn}),Bn=_n("video.member.video_unmute",{transformResolve:yn}),Fn=_n("video.member.deaf",{transformResolve:yn}),zn=_n("video.member.undeaf",{transformResolve:yn}),Hn={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:yn})}},qn=_n("video.member.set_input_volume",{transformResolve:yn}),Kn=_n("video.member.set_output_volume",{transformResolve:yn}),Qn=_n("video.member.set_input_sensitivity",{transformResolve:yn}),Gn={value:function(e){var t=e,{memberId:r,mediaAllowed:o,joinAudioMuted:n,joinVideoMuted:s}=t,i=Qt(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:n,join_video_muted:s},i)},{transformResolve:yn})}},Jn={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:yn})}},Xn=_n("video.member.set_position",{transformResolve:yn}),Yn={value:function(e){var t=e,{memberId:r}=t,o=Qt(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:yn})}},Zn={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:yn})}},es=_n("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ts=_n("video.member.set_meta",{transformResolve:yn}),rs=_n("video.member.update_meta",{transformResolve:yn}),os=_n("video.member.delete_meta",{transformResolve:yn}),ns={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||o,{playback:s}=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:t},n)}),i=vs({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:s}});this.instanceMap.set(i.id,i),e(i)}catch(e){t(e)}}))}},ss={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=vs({store:this.store,emitter:this.emitter,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)}}))}},is={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=ps({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},as={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=ps({store:this.store,emitter:this.emitter,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)}}))}},cs={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=Ss({store:this.store,emitter:this.emitter,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)}}))}},ds={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=Ss({store:this.store,emitter:this.emitter,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)}}))}},us=class extends cn{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")}})}},ls=e=>rn({store:e.store,Component:us})(e),hs=class extends cn{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")}})}},ps=e=>rn({store:e.store,Component:hs})(e),ms=class extends cn{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)}})}},gs=e=>rn({store:e.store,Component:ms})(e),fs=class extends cn{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)}})}},vs=e=>rn({store:e.store,Component:fs})(e),ys=class extends cn{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},bs=e=>rn({store:e.store,Component:ys})(e),_s=class extends cn{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")}})}},Ss=e=>rn({store:e.store,Component:_s})(e),ws={};Gt(ws,{BaseChatAPI:()=>Us,BaseChatConsumer:()=>$s,ChatMember:()=>zs,ChatMessage:()=>Fs,createBaseChatObject:()=>Bs,getMemberState:()=>xs,getMembers:()=>Is,getMessages:()=>Ts,publish:()=>Ps,setMemberState:()=>Rs});var ks=()=>{},Es=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),Cs=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,s=Qt(o,["memberId"]);return this.execute({method:e,params:qt({member_id:n},s)},t)}}),Ps=Es("chat.publish",{transformResolve:ks}),Ts=Es("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>br(e))),cursor:e.cursor})}),Is=Es("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>br(e)))})}),Ms=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return Kt(qt({},e),{channels:t})},Rs=Cs("chat.member.set_state",{transformResolve:ks,transformParams:Ms}),xs=Cs("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Ms}),Os={};Gt(Os,{BasePubSubConsumer:()=>Ds,PubSubMessage:()=>Ws,createBasePubSubObject:()=>Ns});var As=function*(e){hr().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case`${or}.channel.message`:{const{channel:e,message:r}=o,n=Qt(r,["member"]),s=br(Kt(qt({},n),{channel:e})),i=new Ws(s);t.baseEmitter.emit(`${or}.message`,i);break}default:hr().warn(`Unknown pubsub event: "${r}"`)}}const n=e=>e.type.startsWith(`${or}.`);for(;;){const e=yield $e(r,n);yield ze(o,e)}hr().trace("pubSubWorker ended")},js=class extends un{extendEventName(e){return e}on(e,t){return super._on(this.extendEventName(e),t)}once(e,t){return super._once(this.extendEventName(e),t)}off(e,t){return super._off(this.extendEventName(e),t)}},Ls=e=>e.map((e=>({name:e}))),Ds=class extends js{constructor(e){super(e),Yt(this,"_eventsPrefix",or),Yt(this,"subscribeMethod",`${or}.subscribe`),this._attachListeners(""),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:As})}_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:Ls(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",(()=>{})))}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:`${or}.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.once("session.auth_error",(e=>{r(e)})),this.once("session.connected",(()=>{t()})),this.store.dispatch(Jr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${or}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(tn);return e&&"channels"in e&&e.channels?e.channels:{}}extendEventName(e){return`${or}.${e}`}},Ns=e=>rn({store:e.store,Component:Ds})(e),Ws=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}},Vs=function*(e){hr().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,n=br(Kt(qt({},r),{channel:e})),s=new Fs(n);t.baseEmitter.emit("chat.message",s);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=o,n=br(e),s=new zs(n);t.baseEmitter.emit(r,s);break}default:hr().warn(`Unknown chat event: "${r}"`)}}const n=e=>e.type.startsWith("chat.");for(;;){const e=yield $e(r,n);yield ze(o,e)}hr().trace("chatWorker ended")},$s=class extends Ds{constructor(e){super(e),Yt(this,"_eventsPrefix",rr),Yt(this,"subscribeMethod",`${rr}.subscribe`)}initWorker(){this.runWorker("chat",{worker:Vs})}},Us=Er($s,{publish:Ps,getMembers:Is,getMessages:Ts,setMemberState:Rs,getMemberState:xs}),Bs=e=>rn({store:e.store,Component:Us})(e),Fs=class extends Ws{get member(){return this.payload.member}},zs=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:{}}},Hs={};Gt(Hs,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Gs,memberPositionWorker:()=>Js,memberUpdatedWorker:()=>Qs});var qs=function*(e,t,r){yield Ue(r,{type:e,payload:t})};function*Ks(e){const{action:t,memberList:r,channels:{pubSubChannel:o},dispatcher:n=qs}=e,s={};t.payload.layout.layers.forEach((e=>{var t;const o=e.member_id;if(!o)return;const n=r.get(o);n&&e.position!==(null==(t=n.member)?void 0:t.current_position)?(Xs({memberList:r,memberId:o,currentPosition:e.position}),s[o]=!0):s[o]=!1}));for(const[e,t]of r)if(s[e])yield null==n?void 0:n("video.member.updated",t,o);else if(void 0===s[e]){const t=Xs({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==n?void 0:n("video.member.updated",t,o)}}function*Qs({action:e,channels:t,memberList:r,dispatcher:o=qs}){var n,s;const i=e.payload.member.id,a=Xs({memberList:r,memberId:i,currentPosition:null==(s=null==(n=r.get(i))?void 0:n.member)?void 0:s.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=Kt(qt({},a),{member:qt(qt({},a.member),e.payload.member)});r.set(i,d);for(const r of c){const n=`${e.type}.${r}`;yield null==o?void 0:o(n,d,t.pubSubChannel)}yield null==o?void 0:o(e.type,d,t.pubSubChannel)}var Gs=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Js=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:n,dispatcher:s=qs}){if(!r)return;const{swEventChannel:i}=t;let a=Ys(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield $e(i,(t=>!("video.member.updated"!==t.type&&"video.layout.changed"!==t.type&&"video.member.joined"!==t.type&&"video.member.left"!==t.type||Bo(t)!==e._eventsNamespace&&Bo(t)!==e.roomSessionId)));switch(r.type){case"video.member.updated":c(r.payload),yield ze(Qs,{action:r,channels:t,memberList:a,instance:e,getSession:o,instanceMap:n,dispatcher:s});break;case"video.member.joined":c(r.payload);break;case"video.member.left":a.delete(r.payload.member.id);break;case"video.layout.changed":yield ze(Ks,{action:r,channels:t,memberList:a,instance:e,dispatcher:s})}}},Xs=({memberList:e,memberId:t,currentPosition:r})=>{const o=e.get(t);if(!o)return;if(!r)return o;const n=Kt(qt({},o),{member:Kt(qt({},null==o?void 0:o.member),{current_position:r})});return e.set(t,n),n},Ys=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,member:t})})),r};Gt({},{configureFullStack:()=>oi,configureJestStore:()=>ri,createMockedLogger:()=>ti,createPubSubChannel:()=>ii,createSessionChannel:()=>ci,createSwEventChannel:()=>ai,rpcConnectResultVRT:()=>si,wait:()=>ni});var Zs="8f0a119a-cda7-4497-a47d-c81493b824d4",ei="<VRT>",ti=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),ri=e=>on(qt({userOptions:{project:Zs,token:ei,devTools:!1,emitter:new Dt},SessionConstructor:To,runSagaMiddleware:!1},e)),oi=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Dt,r=on({userOptions:{project:Zs,token:ei,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Jr.initAction()),r.dispatch(Jr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Jr.destroyAction())}},ni=e=>new Promise((t=>{setTimeout(t,e)})),si={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"}]},ii=()=>lt(),ai=()=>lt(),ci=()=>dt(),di=qt({},Jo);const ui=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,li=()=>{if(!ui())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},hi=()=>li().getSupportedConstraints(),pi=e=>e&&e instanceof MediaStream,mi=()=>"sinkId"in HTMLMediaElement.prototype,gi=async(e,t)=>{if(null!==e)if("string"==typeof t)if(mi())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?hr().error(`You need to use HTTPS for selecting audio output device: ${e}`):hr().error(`Error: ${e}`),e}else hr().warn("Browser does not support output device selection.");else hr().warn(`Invalid speaker deviceId: '${t}'`);else hr().warn("No HTMLMediaElement to attach the speakerId")},fi=e=>{var t;pi(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(vi))},vi=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},yi={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},bi=e=>{if(e)return yi[e]},_i=()=>li().enumerateDevices(),Si=async e=>{let t=await _i().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},wi=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 Si(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(hr().warn(`No ${e} devices to check for permissions!`),null)})(bi(e))},ki=()=>wi("camera"),Ei=()=>wi("microphone"),Ci=()=>wi("speaker"),Pi=async(e={audio:!0,video:!0})=>{var t;try{const t=li().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Ei()),(null==e?void 0:e.video)&&t.push(ki()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Ir(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":hr().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":hr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":hr().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":hr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),hr().info("List of available constraints:",hi());break;case"NotAllowedError":hr().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?hr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):hr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":hr().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}},Ti=e=>li().getDisplayMedia(e),Ii=async(e,t=!1)=>Ri(e,t),Mi=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:o,groupId:n})=>{var s;if(!e||t.targets&&!(null===(s=t.targets)||void 0===s?void 0:s.includes(o)))return!1;if(!n)return!0;const i=`${o}-${n}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(i)||!a||(r.push(i),0))}))},Ri=async(e,t=!1)=>{let r;if(!1===await wi(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await Pi(t)}var o;const n=await Si(bi(e));return r&&fi(r),!0===t?n:Mi(n)},xi=async(e,t,r)=>{const o=await Ri(r,!0);for(let r=0;r<o.length;r++){const{deviceId:n,label:s}=o[r];if(e===n||t===s)return n}return null},Oi=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Ai={camera:ki,microphone:Ei,speaker:Ci},ji=["camera","microphone","speaker"],Li=`Allowed targets are: '${ji.join("', '")}'`,Di={speaker:mi},Ni=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:ji).filter((e=>!!ji.includes(e)||(hr().warn(`We'll ignore the "${e}" target as it is not allowed. ${Li}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${Li}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Ai[e]())))).reduce(((e,r,o)=>{var n;const s=t[o];return e[!(s in Di)||(null===(n=Di[s])||void 0===n?void 0:n.call(Di))?"supported":"unsupported"].push([s,!!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 n=[];const s=o.supported.reduce(((e,[t,r])=>(r?e.push(t):n.push(t),e)),[]);if(s.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=n.length>0?`The user hasn't granted permissions for the following targets: ${n.join(", ")}. `:"";hr().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return hr().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new Dt,o=await _i(),n=null==t?void 0:t.reduce(((e,t)=>{const r=bi(t);return r&&e.push(r),e}),[]);let s=Mi(o,{excludeDefault:!0,targets:n});return li().addEventListener("devicechange",(async()=>{const e=await _i(),t=s,o=Mi(e,{excludeDefault:!0,targets:n});s=o;const i=((e,t)=>{const r=Oi(e),o=Oi(e),n=[];hr().debug("[_getDeviceListDiff] <- oldDevices",e),hr().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(o.delete(t),e.label!==s.label&&n.push(e)),void 0===s}));return{updated:n.map((e=>({type:"updated",payload:e}))),removed:Array.from(o,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:s.map((e=>({type:"added",payload:e})))}})(t,o),a=i.added.length>0,c=i.removed.length>0,d=i.updated.length>0;(a||c||d)&&r.emit("changed",{changes:i,devices:o}),a&&r.emit("added",{changes:i.added,devices:o}),c&&r.emit("removed",{changes:i.removed,devices:o}),d&&r.emit("updated",{changes:i.updated,devices:o})})),r},Wi=e=>"function"==typeof(null==e?void 0:e.getTracks),Vi=e=>{hr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return Pi(e)},$i=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:o=""}=e;if(r){const e=await xi(r,o,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:n=!1,camId:s}=e;const{camLabel:i=""}=e;if(s){const e=await xi(s,i,"camera").catch((e=>null));e&&("boolean"==typeof n&&(n={}),n.deviceId={exact:e})}return{audio:t,video:n}};var Ui={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],n=t.matchPrefix(e+r,"a=ice-pwd:")[0];return o&&n?{usernameFragment:o.substring(12),password:n.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 n=3;n<o.length;n++){const s=o[n],i=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(i){const o=t.parseRtpMap(i),n=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(o.parameters=n.length?t.parseFmtp(n[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").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 n=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{n.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 n=0;return r.codecs.forEach((e=>{e.maxptime>n&&(n=e.maxptime)})),n>0&&(o+="a=maxptime:"+n+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{o+=t.writeExtmap(e)})),o},t.parseRtpEncodingParameters=function(e){const r=[],o=t.parseRtpParameters(e),n=-1!==o.fecMechanisms.indexOf("RED"),s=-1!==o.fecMechanisms.indexOf("ULPFEC"),i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=i.length>0&&i[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),n&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let u=t.matchPrefix(e,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substring(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=u}))),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 n=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=n.length>0,r.compound=0===n.length;const s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.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 n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return n.length>0?(r=n[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 n;o.length>0&&(n=parseInt(o[0].substring(19),10)),isNaN(n)&&(n=65536);const s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:r.fmt,maxMessageSize:n};const i=t.matchPrefix(e,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:n}}},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 n;const s=void 0!==r?r:2;return n=e||t.generateSessionId(),"v=0\r\no="+(o||"thisisadapterortc")+" "+n+" "+s+" 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}(Ui);var Bi=Ui.exports;const Fi=e=>/^m=audio/.test(e),zi=e=>/^m=video/.test(e),Hi=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 n=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[o]),s=new RegExp(`a=fmtp:${n}`),i=r.findIndex((e=>s.test(e)));return i>=0?/stereo=1;/.test(r[i])||(r[i]+="; stereo=1; sprop-stereo=1"):r[o]+=`${t}a=fmtp:${n} stereo=1; sprop-stereo=1`,r.join(t)};class qi{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this.needResume=!1,this._restartingIce=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&pi(this.options.localStream)&&(this._localStream=this.options.localStream)}get logger(){return hr()}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:this.call.iceServers,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.instance.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&&(vi(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 $i(this.options),n=await Vi({[e]:o[e]});if(n&&pi(n)){const o=n.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{const e=this.instance.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.instance.setConfiguration(t),this.instance.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){(this._negotiating||this._restartingIce)&&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.needResume?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this.needResume=!0,this.call._closeWSConnection())}resetNeedResume(){this.needResume=!1,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 hr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);hr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,o=0,n=!0;const s=()=>{clearTimeout(t)},i=async()=>{var a,c;let d=0,u=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&&(hr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===o&&(hr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),u=e.packetsReceived)}))}catch(e){hr().warn("getStats error",e)}finally{d&&d<=r&&u&&u<=o?(hr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),hr().warn(`videoPacketsReceived: ${u} - previousVideoValue: ${o}`),e.triggerResume()):(r=null!=d?d:r,o=null!=u?u:o,s(),n&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>i()),e.watchMediaPacketsTimeout)))}};return{start:()=>{s(),i()},stop:()=>{n=!1,s()}}})(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),n=this.getDeviceId(e);n&&!this.options.screenShare&&(o.deviceId={exact:n}),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){return this.instance.getSenders?this.instance.getSenders().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getSenders() not available."),null)}_getReceiverByKind(e){return this.instance.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}){this._rejectStartMethod({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&&pi(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)}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return!(!this.localSdp||!this.hasIceServers)&&(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Bi.getMediaSections(e);for(const e of r)if(!Bi.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return hr().error("Error checking SDP",e),!1}})(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.instance.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.instance.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:n}=this.options;return e.sdp&&t&&(e.sdp=Hi(e.sdp)),e.sdp&&r&&o&&n&&(e.sdp=((e,t,r,o)=>{const n=e.split("\r\n");return n.forEach(((e,s)=>{/^a=fmtp:\d*/.test(e)?n[s]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${o}`:/^a=mid:(1|video)/.test(e)&&(n[s]+=`\r\nb=AS:${t}`)})),n.join("\r\n")})(e.sdp,r,o,n)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=Hi(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r);if(o.findIndex(Fi)<o.findIndex(zi))return e;const n=e.split(r),s=n.findIndex(Fi),i=n.findIndex(zi),a=n.slice(s,i),c=n.slice(i,n.length-1);return[...n.slice(0,s),...c,...a,""].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(pi(this.options.localStream))return this.options.localStream;const e=await $i(this.options);return Vi(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":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)}))}clearTimers(){this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}emitMediaConnected(){this.call.emit("media.connected")}}
|
|
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 n(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 s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function i(t,r){for(var n=0;n<o.length;n++){var s=o[n];this[s]=n<t?e:this.methodFactory(s,t,r)}this.log=this.debug}function a(e,r,o){return function(){typeof console!==t&&(i.call(this,r,o),this[e].apply(this,arguments))}}function c(o,i,c){return function(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?s:void 0!==console[o]?n(console,o):void 0!==console.log?n(console,"log"):e)}(o)||a.apply(this,arguments)}function d(e,r,n){var s,a=this;r=null==r?"WARN":r;var d="loglevel";function u(){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=n||c,a.getLevel=function(){return s},a.setLevel=function(r,n){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(s=r,!1!==n&&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),i.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,u()||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 l=u();null==l&&(l=r),a.setLevel(l,!1)}var u=new d,l={};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=l[e];return t||(t=l[e]=new d(e,u.getLevel(),u.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return u.noConflict=function(){return typeof window!==t&&window.log===u&&(window.log=h),u},u.getLoggers=function(){return l},u.default=u,u},e.exports?e.exports=o():r.log=o()}(r);var o,n=r.exports,s=new Uint8Array(16);function i(){if(!o&&!(o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return o(s)}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;function c(e){return"string"==typeof e&&a.test(e)}for(var d=[],u=0;u<256;++u)d.push((u+256).toString(16).substr(1));function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(d[e[t+0]]+d[e[t+1]]+d[e[t+2]]+d[e[t+3]]+"-"+d[e[t+4]]+d[e[t+5]]+"-"+d[e[t+6]]+d[e[t+7]]+"-"+d[e[t+8]]+d[e[t+9]]+"-"+d[e[t+10]]+d[e[t+11]]+d[e[t+12]]+d[e[t+13]]+d[e[t+14]]+d[e[t+15]]).toLowerCase();if(!c(r))throw TypeError("Stringified UUID is invalid");return r}var h="6ba7b810-9dad-11d1-80b4-00c04fd430c8",p="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function m(e,t,r){function o(e,o,n,s){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof o&&(o=function(e){if(!c(e))throw TypeError("Invalid UUID");var t,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!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(o),i.set(e,o.length),(i=r(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,n){s=s||0;for(var a=0;a<16;++a)n[s+a]=i[a];return n}return l(i)}try{o.name=e}catch(e){}return o.DNS=h,o.URL=p,o}function g(e){return 14+(e+64>>>9<<4)+1}function f(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function v(e,t,r,o,n,s){return f((i=f(f(t,e),f(o,s)))<<(a=n)|i>>>32-a,r);var i,a}function y(e,t,r,o,n,s,i){return v(t&r|~t&o,e,t,n,s,i)}function b(e,t,r,o,n,s,i){return v(t&o|r&~o,e,t,n,s,i)}function _(e,t,r,o,n,s,i){return v(t^r^o,e,t,n,s,i)}function S(e,t,r,o,n,s,i){return v(r^(t|~o),e,t,n,s,i)}function w(e,t,r){var o=(e=e||{}).random||(e.rng||i)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(var n=0;n<16;++n)t[r+n]=o[n];return t}return l(o)}function k(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 E(e,t){return e<<t|e>>>32-t}function C(e){return C="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},C(e)}function T(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==C(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===C(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P(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 I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?P(Object(r),!0).forEach((function(t){T(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):P(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function M(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. "}m("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){for(var t=[],r=32*e.length,o="0123456789abcdef",n=0;n<r;n+=8){var s=e[n>>5]>>>n%32&255,i=parseInt(o.charAt(s>>>4&15)+o.charAt(15&s),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[g(t)-1]=t;for(var r=1732584193,o=-271733879,n=-1732584194,s=271733878,i=0;i<e.length;i+=16){var a=r,c=o,d=n,u=s;r=y(r,o,n,s,e[i],7,-680876936),s=y(s,r,o,n,e[i+1],12,-389564586),n=y(n,s,r,o,e[i+2],17,606105819),o=y(o,n,s,r,e[i+3],22,-1044525330),r=y(r,o,n,s,e[i+4],7,-176418897),s=y(s,r,o,n,e[i+5],12,1200080426),n=y(n,s,r,o,e[i+6],17,-1473231341),o=y(o,n,s,r,e[i+7],22,-45705983),r=y(r,o,n,s,e[i+8],7,1770035416),s=y(s,r,o,n,e[i+9],12,-1958414417),n=y(n,s,r,o,e[i+10],17,-42063),o=y(o,n,s,r,e[i+11],22,-1990404162),r=y(r,o,n,s,e[i+12],7,1804603682),s=y(s,r,o,n,e[i+13],12,-40341101),n=y(n,s,r,o,e[i+14],17,-1502002290),r=b(r,o=y(o,n,s,r,e[i+15],22,1236535329),n,s,e[i+1],5,-165796510),s=b(s,r,o,n,e[i+6],9,-1069501632),n=b(n,s,r,o,e[i+11],14,643717713),o=b(o,n,s,r,e[i],20,-373897302),r=b(r,o,n,s,e[i+5],5,-701558691),s=b(s,r,o,n,e[i+10],9,38016083),n=b(n,s,r,o,e[i+15],14,-660478335),o=b(o,n,s,r,e[i+4],20,-405537848),r=b(r,o,n,s,e[i+9],5,568446438),s=b(s,r,o,n,e[i+14],9,-1019803690),n=b(n,s,r,o,e[i+3],14,-187363961),o=b(o,n,s,r,e[i+8],20,1163531501),r=b(r,o,n,s,e[i+13],5,-1444681467),s=b(s,r,o,n,e[i+2],9,-51403784),n=b(n,s,r,o,e[i+7],14,1735328473),r=_(r,o=b(o,n,s,r,e[i+12],20,-1926607734),n,s,e[i+5],4,-378558),s=_(s,r,o,n,e[i+8],11,-2022574463),n=_(n,s,r,o,e[i+11],16,1839030562),o=_(o,n,s,r,e[i+14],23,-35309556),r=_(r,o,n,s,e[i+1],4,-1530992060),s=_(s,r,o,n,e[i+4],11,1272893353),n=_(n,s,r,o,e[i+7],16,-155497632),o=_(o,n,s,r,e[i+10],23,-1094730640),r=_(r,o,n,s,e[i+13],4,681279174),s=_(s,r,o,n,e[i],11,-358537222),n=_(n,s,r,o,e[i+3],16,-722521979),o=_(o,n,s,r,e[i+6],23,76029189),r=_(r,o,n,s,e[i+9],4,-640364487),s=_(s,r,o,n,e[i+12],11,-421815835),n=_(n,s,r,o,e[i+15],16,530742520),r=S(r,o=_(o,n,s,r,e[i+2],23,-995338651),n,s,e[i],6,-198630844),s=S(s,r,o,n,e[i+7],10,1126891415),n=S(n,s,r,o,e[i+14],15,-1416354905),o=S(o,n,s,r,e[i+5],21,-57434055),r=S(r,o,n,s,e[i+12],6,1700485571),s=S(s,r,o,n,e[i+3],10,-1894986606),n=S(n,s,r,o,e[i+10],15,-1051523),o=S(o,n,s,r,e[i+1],21,-2054922799),r=S(r,o,n,s,e[i+8],6,1873313359),s=S(s,r,o,n,e[i+15],10,-30611744),n=S(n,s,r,o,e[i+6],15,-1560198380),o=S(o,n,s,r,e[i+13],21,1309151649),r=S(r,o,n,s,e[i+4],6,-145523070),s=S(s,r,o,n,e[i+11],10,-1120210379),n=S(n,s,r,o,e[i+2],15,718787259),o=S(o,n,s,r,e[i+9],21,-343485551),r=f(r,a),o=f(o,c),n=f(n,d),s=f(s,u)}return[r,o,n,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(g(t)),o=0;o<t;o+=8)r[o>>5]|=(255&e[o/8])<<o%32;return r}(e),8*e.length))})),m("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var o=unescape(encodeURIComponent(e));e=[];for(var n=0;n<o.length;++n)e.push(o.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var s=Math.ceil((e.length/4+2)/16),i=new Array(s),a=0;a<s;++a){for(var c=new Uint32Array(16),d=0;d<16;++d)c[d]=e[64*a+4*d]<<24|e[64*a+4*d+1]<<16|e[64*a+4*d+2]<<8|e[64*a+4*d+3];i[a]=c}i[s-1][14]=8*(e.length-1)/Math.pow(2,32),i[s-1][14]=Math.floor(i[s-1][14]),i[s-1][15]=8*(e.length-1)&4294967295;for(var u=0;u<s;++u){for(var l=new Uint32Array(80),h=0;h<16;++h)l[h]=i[u][h];for(var p=16;p<80;++p)l[p]=E(l[p-3]^l[p-8]^l[p-14]^l[p-16],1);for(var m=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var _=Math.floor(b/20),S=E(m,5)+k(_,g,f,v)+y+t[_]+l[b]>>>0;y=v,v=f,f=E(g,30)>>>0,g=m,m=S}r[0]=r[0]+m>>>0,r[1]=r[1]+g>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+v>>>0,r[4]=r[4]+y>>>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 R="function"==typeof Symbol&&Symbol.observable||"@@observable",x=function(){return Math.random().toString(36).substring(7).split("").join(".")},O={INIT:"@@redux/INIT"+x(),REPLACE:"@@redux/REPLACE"+x(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+x()}};function A(e,t,r){var o;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(M(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(M(1));return r(A)(e,t)}if("function"!=typeof e)throw new Error(M(2));var n=e,s=t,i=[],a=i,c=!1;function d(){a===i&&(a=i.slice())}function u(){if(c)throw new Error(M(3));return s}function l(e){if("function"!=typeof e)throw new Error(M(4));if(c)throw new Error(M(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(M(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=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(M(7));if(void 0===e.type)throw new Error(M(8));if(c)throw new Error(M(9));try{c=!0,s=n(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:O.INIT}),(o={dispatch:h,subscribe:l,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error(M(10));n=e,h({type:O.REPLACE})}})[R]=function(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(M(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[R]=function(){return this},e},o}function j(e){for(var t=Object.keys(e),r={},o=0;o<t.length;o++){var n=t[o];"function"==typeof e[n]&&(r[n]=e[n])}var s,i=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:O.INIT}))throw new Error(M(12));if(void 0===r(void 0,{type:O.PROBE_UNKNOWN_ACTION()}))throw new Error(M(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var o=!1,n={},a=0;a<i.length;a++){var c=i[a],d=e[c],u=(0,r[c])(d,t);if(void 0===u)throw new Error(M(14));n[c]=u,o=o||u!==d}return(o=o||i.length!==Object.keys(e).length)?n:e}}function L(e,t){return function(){return t(e.apply(this,arguments))}}function D(){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 N(){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(M(15))},n={getState:r.getState,dispatch:function(){return o.apply(void 0,arguments)}},s=t.map((function(e){return e(n)}));return o=D.apply(void 0,s)(r.dispatch),I(I({},r),{},{dispatch:o})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:O,applyMiddleware:N,bindActionCreators:function(e,t){if("function"==typeof e)return L(e,t);if("object"!=typeof e||null===e)throw new Error(M(16));var r={};for(var o in e){var n=e[o];"function"==typeof n&&(r[o]=L(n,t))}return r},combineReducers:j,compose:D,createStore:A,legacy_createStore:A}),V=function(e){return"@@redux-saga/"+e},$=V("CANCEL_PROMISE"),U=V("CHANNEL_END"),B=V("IO"),F=V("MATCH"),z=V("MULTICAST"),H=V("SAGA_ACTION"),q=V("SELF_CANCELLATION"),K=V("TASK"),Q=V("TASK_CANCEL"),G=V("TERMINATE"),J=V("LOCATION");function X(){return X=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},X.apply(this,arguments)}var Y=function(e){return null==e},Z=function(e){return null!=e},ee=function(e){return"function"==typeof e},te=function(e){return"string"==typeof e},re=Array.isArray,oe=function(e){return e&&ee(e.then)},ne=function(e){return e&&ee(e.next)&&ee(e.throw)},se=function e(t){return t&&(te(t)||ce(t)||ee(t)||re(t)&&t.every(e))},ie=function(e){return e&&ee(e.take)&&ee(e.close)},ae=function(e){return ee(e)&&e.hasOwnProperty("toString")},ce=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},de=function(e){return ie(e)&&e[z]},ue=function(e){return function(){return!0}}(),le=function(){},he=function(e){return e},pe=function(e,t){X(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 ge(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function fe(e){var t=!1;return function(){t||(t=!0,e())}}var ve=function(e){throw e},ye=function(e){return{value:e,done:!0}};function be(e,t,r){void 0===t&&(t=ve),void 0===r&&(r="iterator");var o={meta:{name:r},next:e,throw:t,return:ye,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function _e(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var Se=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},ke=function(e){return e===G},Ee=function(e){return e===Q},Ce=function(e){return ke(e)||Ee(e)};function Te(e,t){var r,o=Object.keys(e),n=o.length,s=0,i=re(e)?Se(n):{},a={};return o.forEach((function(e){var o=function(o,a){r||(a||Ce(o)?(t.cancel(),t(o,a)):(i[e]=o,++s===n&&(r=!0,t(i))))};o.cancel=le,a[e]=o})),t.cancel=function(){r||(r=!0,o.forEach((function(e){return a[e].cancel()})))},a}function Pe(e){return{name:e.name||"anonymous",location:Ie(e)}}function Ie(e){return e[J]}var Me={isEmpty:ue,put:le,take:le},Re=function(){return Me},xe=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),o=0,n=0,s=0,i=function(){if(0!=o){var t=r[s];return r[s]=null,o--,s=(s+1)%e,t}},a=function(){for(var e=[];o;)e.push(i());return e};return{isEmpty:function(){return 0==o},put:function(t){var i;o<e||(i=2*e,r=a(),o=r.length,n=r.length,s=0,r.length=i,e=i),function(t){r[n]=t,n=(n+1)%e,o++}(t)},take:i,flush:a}}(e)},Oe="TAKE",Ae="PUT",je="ALL",Le="CALL",De="FORK",Ne="SELECT",We="CANCELLED",Ve=function(e,t){var r;return(r={})[B]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function $e(e,t){return void 0===e&&(e="*"),se(e)?(Z(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ve(Oe,{pattern:e})):de(e)&&Z(t)&&se(t)?Ve(Oe,{channel:e,pattern:t}):ie(e)?(Z(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ve(Oe,{channel:e})):void 0}function Ue(e,t){return Y(t)&&(t=e,e=void 0),Ve(Ae,{channel:e,action:t})}function Be(e,t){var r,o=null;return ee(e)?r=e:(re(e)?(o=e[0],r=e[1]):(o=e.context,r=e.fn),o&&te(r)&&ee(o[r])&&(r=o[r])),{context:o,fn:r,args:t}}function Fe(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 Ve(Le,Be(e,r))}function ze(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 Ve(De,Be(e,r))}function He(e){void 0===e&&(e=he);for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ve(Ne,{selector:e,args:r})}function qe(){return Ve(We,{})}var Ke=[],Qe=0;function Ge(e){try{Ye(),e()}finally{Ze()}}function Je(e){Ke.push(e),Qe||(Ye(),et())}function Xe(e){try{return Ye(),e()}finally{et()}}function Ye(){Qe++}function Ze(){Qe--}function et(){var e;for(Ze();!Qe&&void 0!==(e=Ke.shift());)Ge(e)}var tt=function(e){return function(t){return e.some((function(e){return it(e)(t)}))}},rt=function(e){return function(t){return e(t)}},ot=function(e){return function(t){return t.type===String(e)}},nt=function(e){return function(t){return t.type===e}},st=function(){return ue};function it(e){var t="*"===e?st:te(e)?ot:re(e)?tt:ae(e)?ot:ee(e)?rt:ce(e)?nt: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(){ge(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,n=e.length;o<n;o++)(0,e[o])(at)}}}}function ut(e,t){void 0===t&&(t=Re());var r,o=!1,n=dt(t),s=function(){o||(o=!0,ee(r)&&r(),n.close())};return r=fe(r=e((function(e){ct(e)?s():n.put(e)}))),o&&r(),{take:n.take,flush:n.flush,close:s}}function lt(){var e,t=!1,r=[],o=r,n=function(){o===r&&(o=r.slice())},s=function(){t=!0;var e=r=o;o=[],e.forEach((function(e){e(at)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(ct(e))s();else for(var n=r=o,i=0,a=n.length;i<a;i++){var c=n[i];c[F](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(at):(e[F]=r,n(),o.push(e),e.cancel=fe((function(){n(),ge(o,e)})))},e.close=s,e}function ht(){var e=lt(),t=e.put;return e.put=function(e){e[H]?t(e):Je((function(){t(e)}))},e}var pt=0,mt=1,gt=2,ft=3;function vt(e,t){var r=e[$];ee(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var yt,bt=0,_t=function(){return++bt};function St(e){e.isRunning()&&e.cancel()}var wt=((yt={})[Oe]=function(e,t,r){var o=t.channel,n=void 0===o?e.channel:o,s=t.pattern,i=t.maybe,a=function(e){e instanceof Error?r(e,!0):!ct(e)||i?r(e):r(G)};try{n.take(a,Z(s)?it(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},yt[Ae]=function(e,t,r){var o=t.channel,n=t.action,s=t.resolve;Je((function(){var t;try{t=(o?o.put:e.dispatch)(n)}catch(e){return void r(e,!0)}s&&oe(t)?vt(t,r):r(t)}))},yt[je]=function(e,t,r,o){var n=o.digestEffect,s=bt,i=Object.keys(t);if(0!==i.length){var a=Te(t,r);i.forEach((function(e){n(t[e],s,a[e],e)}))}else r(re(t)?[]:{})},yt.RACE=function(e,t,r,o){var n=o.digestEffect,s=bt,i=Object.keys(t),a=re(t)?Se(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,o){d||(o||Ce(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,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||n(t[e],s,c[e],e)}))},yt[Le]=function(e,t,r,o){var n=t.context,s=t.fn,i=t.args,a=o.task;try{var c=s.apply(n,i);if(oe(c))return void vt(c,r);if(ne(c))return void Ot(e,c,a.context,bt,Pe(s),!1,r);r(c)}catch(e){r(e,!0)}},yt.CPS=function(e,t,r){var o=t.context,n=t.fn,s=t.args;try{var i=function(e,t){Y(e)?r(t):r(e,!0)};n.apply(o,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},yt[De]=function(e,t,r,o){var n=t.fn,s=t.detached,i=o.task,a=function(e){var t=e.context,r=e.fn,o=e.args;try{var n=r.apply(t,o);if(ne(n))return n;var s=!1;return be((function(e){return s?{value:e,done:!0}:(s=!0,{value:n,done:!oe(n)})}))}catch(e){return be((function(){throw e}))}}({context:t.context,fn:n,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Pe(t)}(a,n);Xe((function(){var t=Ot(e,a,i.context,bt,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},yt.JOIN=function(e,t,r,o){var n=o.task,s=function(e,t){if(e.isRunning()){var r={task:n,cb:t};t.cancel=function(){e.isRunning()&&ge(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(re(t)){if(0===t.length)return void r([]);var i=Te(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},yt.CANCEL=function(e,t,r,o){t===q?St(o.task):re(t)?t.forEach(St):St(t),r()},yt[Ne]=function(e,t,r){var o=t.selector,n=t.args;try{r(o.apply(void 0,[e.getState()].concat(n)))}catch(e){r(e,!0)}},yt.ACTION_CHANNEL=function(e,t,r){var o=t.pattern,n=dt(t.buffer),s=it(o),i=function t(r){ct(r)||e.channel.take(t,s),n.put(r)},a=n.close;n.close=function(){i.cancel(),a()},e.channel.take(i,s),r(n)},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){pe(o.task.context,t),r()},yt);function kt(e,t){return e+"?"+t}function Et(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 Tt=null,Pt=[],It=function(e){e.crashedEffect=Tt,Pt.push(e)},Mt=function(){Tt=null,Pt.length=0},Rt=function(e){Tt=e},xt=function(){var e,t=Pt[0],r=Pt.slice(1),o=t.crashedEffect?(e=Ie(t.crashedEffect))?e.code+" "+kt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+Et(t.meta)+(o?" \n when executing effect "+o:"")].concat(r.map((function(e){return" created by "+Et(e.meta)})),[Ct(Pt)]).join("\n")};function Ot(e,t,r,o,n,s,i){var a=e.finalizeRunEffect((function(t,r,o){oe(t)?vt(t,o):ne(t)?Ot(e,t,d.context,r,n,!1,o):t&&t[B]?(0,wt[t.type])(e,t.payload,o,u):o(t)}));l.cancel=le;var c={meta:n,cancel:function(){c.status===pt&&(c.status=mt,l(Q))},status:pt},d=function(e,t,r,o,n,s,i){var a;void 0===i&&(i=le);var c,d,u=pt,l=null,h=[],p=Object.create(r),m=function(e,t,r){var o,n=[],s=!1;function i(e){h.push.apply(h,m.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){n.push(t),t.cont=function(a,c){s||(ge(n,t),t.cont=le,c?i(a):(t===e&&(o=a),n.length||(s=!0,r(o))))}}function c(){s||(s=!0,n.forEach((function(e){e.cont=le,e.cancel()})),n=[])}return a(e),{addTask:a,cancelAll:c,abort:i,getTasks:function(){return n}}}(t,0,g);function g(t,r){if(r){if(u=gt,It({meta:n,cancelledTasks:h}),f.isRoot){var o=xt();Mt(),e.onError(t,{sagaStack:o})}d=t,l&&l.reject(t)}else t===Q?u=mt:u!==mt&&(u=ft),c=t,l&&l.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[K]=!0,a.id=o,a.meta=n,a.isRoot=s,a.context=p,a.joiners=[],a.queue=m,a.cancel=function(){u===pt&&(u=mt,m.cancelAll(),g(Q,!1))},a.cont=i,a.end=g,a.setContext=function(e){pe(p,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,u===gt?l.reject(d):u!==pt&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return u===pt},a.isCancelled=function(){return u===mt||u===pt&&t.status===mt},a.isAborted=function(){return u===gt},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,o,n,s,i),u={task:d,digestEffect:h};return i&&(i.cancel=d.cancel),l(),d;function l(e,r){try{var n;r?(n=t.throw(e),Mt()):Ee(e)?(c.status=mt,l.cancel(),n=ee(t.return)?t.return(Q):{done:!0,value:Q}):n=ke(e)?ee(t.return)?t.return():{done:!0}:t.next(e),n.done?(c.status!==mt&&(c.status=ft),c.cont(n.value)):h(n.value,o,l)}catch(e){if(c.status===mt)throw e;c.status=gt,c.cont(e,!0)}}function h(t,r,o,n){void 0===n&&(n="");var s,i=_t();function c(r,n){s||(s=!0,o.cancel=le,e.sagaMonitor&&(n?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),n&&Rt(t),o(r,n))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:n,effect:t}),c.cancel=le,o.cancel=function(){s||(s=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function At(e,t){for(var r=e.channel,o=void 0===r?ht():r,n=e.dispatch,s=e.getState,i=e.context,a=void 0===i?{}:i,c=e.sagaMonitor,d=e.effectMiddlewares,u=e.onError,l=void 0===u?_e:u,h=arguments.length,p=new Array(h>2?h-2:0),m=2;m<h;m++)p[m-2]=arguments[m];var g,f=t.apply(void 0,p),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:p})),d){var y=D.apply(void 0,d);g=function(e){return function(t,r,o){return y((function(t){return e(t,r,o)}))(t)}}}else g=he;var b={channel:o,dispatch:we(n),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Xe((function(){var e=Ot(b,f,a,v,Pe(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function jt(e){var t,r=void 0===e?{}:e,o=r.context,n=void 0===o?{}:o,s=r.channel,i=void 0===s?ht():s,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,o,n={},s=Object.keys(e);for(o=0;o<s.length;o++)t.indexOf(r=s[o])>=0||(n[r]=e[r]);return n}(r,["context","channel","sagaMonitor"]);function d(e){return t=At.bind(null,X({},c,{context:n,channel:i,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return i.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){pe(n,e)},d}var Lt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function o(){}function n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,o,s,i){if("function"!=typeof o)throw new TypeError("The listener must be a function");var a=new n(o,s||e,i),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 i(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,n=[];if(0===this._eventsCount)return n;for(o in e=this._events)t.call(e,o)&&n.push(r?o.slice(1):o);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},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,n=t.length,s=new Array(n);o<n;o++)s[o]=t[o].fn;return s},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,n,s,i){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,u=this._events[a],l=arguments.length;if(u.fn){switch(u.once&&this.removeListener(e,u.fn,void 0,!0),l){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,t),!0;case 3:return u.fn.call(u.context,t,o),!0;case 4:return u.fn.call(u.context,t,o,n),!0;case 5:return u.fn.call(u.context,t,o,n,s),!0;case 6:return u.fn.call(u.context,t,o,n,s,i),!0}for(d=1,c=new Array(l-1);d<l;d++)c[d-1]=arguments[d];u.fn.apply(u.context,c)}else{var h,p=u.length;for(d=0;d<p;d++)switch(u[d].once&&this.removeListener(e,u[d].fn,void 0,!0),l){case 1:u[d].fn.call(u[d].context);break;case 2:u[d].fn.call(u[d].context,t);break;case 3:u[d].fn.call(u[d].context,t,o);break;case 4:u[d].fn.call(u[d].context,t,o,n);break;default:if(!c)for(h=1,c=new Array(l-1);h<l;h++)c[h-1]=arguments[h];u[d].fn.apply(u[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,o,n){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return i(this,s),this;var a=this._events[s];if(a.fn)a.fn!==t||n&&!a.once||o&&a.context!==o||i(this,s);else{for(var c=0,d=[],u=a.length;c<u;c++)(a[c].fn!==t||n&&!a[c].once||o&&a[c].context!==o)&&d.push(a[c]);d.length?this._events[s]=1===d.length?d[0]:d:i(this,s)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&i(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,Nt=Object.defineProperty,Wt=Object.defineProperties,Vt=Object.getOwnPropertyDescriptor,$t=Object.getOwnPropertyDescriptors,Ut=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,zt=Object.prototype.propertyIsEnumerable,Ht=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qt=(e,t)=>{for(var r in t||(t={}))Ft.call(t,r)&&Ht(e,r,t[r]);if(Bt)for(var r of Bt(t))zt.call(t,r)&&Ht(e,r,t[r]);return e},Kt=(e,t)=>Wt(e,$t(t)),Qt=(e,t)=>{var r={};for(var o in e)Ft.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&Bt)for(var o of Bt(e))t.indexOf(o)<0&&zt.call(e,o)&&(r[o]=e[o]);return r},Gt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of Ut(t))Ft.call(e,n)||n===r||Nt(e,n,{get:()=>t[n],enumerable:!(o=Vt(t,n))||o.enumerable});return e},Xt=(e,t,r)=>(Jt(e,t,"default"),r&&Jt(r,t,"default")),Yt=(e,t,r)=>(Ht(e,"symbol"!=typeof t?t+"":t,r),r),Zt="__local__",er="__synthetic__",tr="video",rr="chat",or="chat",nr=["room.started","room.ended"].map((e=>`${tr}.${e}`)),sr=n.getLogger("signalwire"),ir=sr.methodFactory;sr.methodFactory=(e,t,r)=>{const o=ir(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),o.apply(void 0,e)}};var ar,cr=sr.getLevel();sr.setLevel(cr);var dr={},ur=()=>null!=ar?ar:sr,lr=({type:e,payload:t})=>{const r=ur(),{logWsTraffic:o}=dr||{};if(!o)return;const n=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,n,"\n")},hr=()=>{const e=ur();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?lr:Reflect.get(e,t,r)})},pr=/[A-Z]/g,mr=["webrtc.message"],gr=e=>mr.includes(e),fr=/^2[0-9][0-9]$/,vr=(e,t)=>{const{result:r={},error:o}=e;if(o)return{error:o};const{code:n,node_id:s,result:i=null}=r;return n&&!fr.test(n)?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?vr(i,s):{result:i}:{result:r}},yr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},br=(e,t=yr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,o])=>{const n=_r(r);return e[n]="object"==typeof o&&o?Array.isArray(o)?t.propsToUpdateValue.includes(r)?o.map((e=>"string"==typeof e?_r(e):br(e))):o:br(o):(e=>e.endsWith("At"))(n)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(o):o,e}),{}),_r=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const o=t.trim().charAt(0),n=t.substr(1).toLowerCase();return`${e}${0===r?o.toLowerCase():o.toUpperCase()}${n}`}),""):e,Sr=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(pr,(e=>`_${e.toLowerCase()}`)))(e=wr({event:e,namespace:t}))),e),wr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,kr=e=>{const{event_type:t,params:r,node_id:o}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(gr(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}},Er=(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),Cr=({instance:e,transform:t,payload:r,transformedPayload:o})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:o,transform:n})=>{const s=qt(Kt(qt({},o),{_eventsNamespace:n.getInstanceEventNamespace?n.getInstanceEventNamespace(r):void 0,eventChannel:n.getInstanceEventChannel?n.getInstanceEventChannel(r):void 0}),(e=>{let t={},r=e,o=!0;for(;o;)Object.getOwnPropertyNames(r).forEach((r=>{"function"!=typeof e[r]||"string"!=typeof r||r in t||(t[r]=e[r])})),r&&r.__sw_symbol?r=Object.getPrototypeOf(r):o=!1;return t})(e));return Object.defineProperties(t,Object.entries(s).reduce(((e,[t,r])=>(void 0===r||(e[t]={value:r,enumerable:!0,configurable:!0,writable:!0}),e)),{}))})({instance:e,proxiedObj:new Proxy(e,{get:(e,n,s)=>"__sw_proxy"===n||("__sw_update_payload"===n?function(e){o=e}:"toString"===n?(({property:e,payload:t})=>"function"==typeof e?()=>JSON.stringify(t):e)({property:e[n],payload:o}):"_eventsNamespace"===n&&t.getInstanceEventNamespace?t.getInstanceEventNamespace(r):"eventChannel"===n&&t.getInstanceEventChannel?t.getInstanceEventChannel(r):n in o?o[n]:Reflect.get(e,n,s))}),payload:r,transformedPayload:o,transform:t}),Tr=new Map,Pr=/^(ws|wss):\/\//,Ir=(e,t,r)=>{let o=null;return Promise.race([e,new Promise(((e,n)=>o=setTimeout(n,t,r)))]).finally((()=>clearTimeout(o)))},Mr=e=>nr.includes(e),Rr=e=>e.includes("session."),xr=["video.member.updated","video.member.talking"],Or=["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"],Ar=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Or.includes(t)||(e=>e.includes(er))(t)||jr(t)||Rr(t)?null:xr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},jr=e=>e.includes(Zt),Lr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Zt),e)),[]).join(".")},Dr=e=>void 0!==e&&"jti"in e,Nr=e=>{var t;return qt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Wr=e=>qt({jsonrpc:"2.0"},e),Vr={major:3,minor:0,revision:0},$r=e=>Nr({method:"signalwire.connect",params:qt({version:Vr},e)}),Ur={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},Br=e=>{if(e.hasOwnProperty("dialogParams")){const t=Qt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in Ur)e&&t.hasOwnProperty(e)&&(t[Ur[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Fr=e=>(t={})=>Nr({method:e,params:Br(t)}),zr=Fr("verto.invite"),Hr=Fr("verto.bye"),qr=Fr("verto.modify"),Kr=Fr("verto.info"),Qr=Fr("verto.pong"),Gr=(e,t)=>Wr({id:e,result:{method:t}}),Jr={};Gt(Jr,{authErrorAction:()=>so,authExpiringAction:()=>ao,authSuccessAction:()=>io,compoundEventAttachAction:()=>bo,createAction:()=>Yr,destroyAction:()=>oo,getCustomSagaActionType:()=>yo,initAction:()=>ro,makeCustomSagaAction:()=>vo,reauthAction:()=>no,sessionAuthErrorAction:()=>po,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>lo,sessionExpiringAction:()=>mo,sessionForceCloseAction:()=>go,sessionReconnectingAction:()=>ho,socketMessageAction:()=>co});var Xr={};function Yr(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(Xr,{configureStore:()=>to,createAction:()=>Yr}),Xt(Xr,W);var Zr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?D:D.apply(null,arguments)},eo=!0;function to(e){const t=function(){return[]},{reducer:r,middleware:o=t(),devTools:n=!0,preloadedState:s,enhancers:i}=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=j(r)}let c=o;"function"==typeof c&&(c=c(t));const d=N(...c);let u=D;n&&(u=Zr(qt({trace:!eo},"object"==typeof n&&n)));let l=[d];return Array.isArray(i)?l=[d,...i]:"function"==typeof i&&(l=i(l)),A(a,s,u(...l))}var ro=Yr("swSdk/init"),oo=Yr("swSdk/destroy"),no=Yr("swSdk/reauth"),so=Yr("auth/error"),io=Yr("auth/success"),ao=Yr("auth/expiring"),co=Yr("socket/message"),uo=Yr("session.connected"),lo=Yr("session.disconnected"),ho=Yr("session.reconnecting"),po=Yr("session.auth_error"),mo=Yr("session.expiring"),go=Yr("session.forceClose"),fo=(e,t)=>`${t.type}/${e}`,vo=(e,t)=>Kt(qt({},t),{type:fo(e,t)}),yo=(e,t)=>fo(e,t),bo=Yr("compound_event:attach");function _o(e){const t={},r=[];let o;const n={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,n},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),n),addDefaultCase:e=>(o=e,n)};return e(n),[t,r,o]}var So=({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||{},n=Object.keys(o),s={},i={},a={};function c(){const[t={},o=[],n]="function"==typeof e.extraReducers?_o(e.extraReducers):[e.extraReducers],s=qt(qt({},t),i);return function(e,t,r=[],o){let n,[s,i,a]="function"==typeof t?_o(t):[t,r,o];function c(e=n(),t){let r=[s[t.type],...i.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 n="function"==typeof e?()=>e():()=>e,c.getInitialState=n,c}(r,s,o,n)}let d;return n.forEach((e=>{const r=o[e],n=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,s[e]=c,i[n]=c,a[e]=d?Yr(n,d):Yr(n)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:s,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(oo.type,(()=>t)),"function"==typeof o&&o(e)}});function wo(e){return[ro.type,no.type].includes(e.type)}var ko=So({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(so.type,((e,{payload:t})=>Kt(qt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(wo,(e=>Kt(qt({},e),{authStatus:"authorizing"})))}}),{actions:Eo,reducer:Co}=ko,To=Symbol("BaseSession"),Po=class{constructor(e){var t,r;this.options=e,Yt(this,"__sw_symbol",To),Yt(this,"uuid",w()),Yt(this,"WebSocketConstructor"),Yt(this,"CloseEventConstructor"),Yt(this,"agent"),Yt(this,"connectVersion",Vr),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:n="info",sessionChannel:s}=e;o&&(this._host=(e=>`${Pr.test(e)?"":"wss://"}${e}`)(o)),s&&(this._sessionChannel=s),n&&(null==(r=(t=this.logger).setLevel)||r.call(t,n)),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 Dr(e)?e.jti:e.signature}}get logger(){return hr()}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._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)}async 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"});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),Ir(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)}async authenticate(){var e;const t={agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}};this._relayProtocolIsValid()&&(t.protocol=this.relayProtocol),(null==(e=this.options.contexts)?void 0:e.length)&&(t.contexts=this.options.contexts),this._rpcConnectResult=await this.execute($r(t))}authError(e){this._removeSocketListeners(),this.dispatch(so({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(io())}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(ho()),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:n}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:o}=e;return o?{error:o}:"signalwire.connect"===t.method?{result:r}:vr(e)})({response:t,request:r});return this._checkCurrentStatus(),i?n(i):o(s)}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,Wr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(co(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,Wr({id:r,result:{timestamp:o||Date.now()/1e3}})))}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(lo());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(Eo.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},Io=class extends Po{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=Dr(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={agent:this.agent,version:this.connectVersion,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($r(e)),await this.persistRelayProtocol(),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((t=e,Nr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}_checkTokenExpiration(){this.expiresAt&&(this.expiresIn<=this._refreshTokenNotificationDiff&&(this.dispatch(ao()),this.options._onRefreshToken?this.options._onRefreshToken():this.logger.warn("The token is going to expire!")),clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay)))}},Mo={};Gt(Mo,{authErrorAction:()=>so,authExpiringAction:()=>ao,authSuccessAction:()=>io,compoundEventAttachAction:()=>bo,configureStore:()=>on,connect:()=>rn,createAction:()=>Yr,createCatchableSaga:()=>No,createRestartableSaga:()=>Lo,destroyAction:()=>oo,eventChannel:()=>ut,getCustomSagaActionType:()=>yo,initAction:()=>ro,makeCustomSagaAction:()=>vo,reauthAction:()=>no,sessionAuthErrorAction:()=>po,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>lo,sessionExpiringAction:()=>mo,sessionForceCloseAction:()=>go,sessionReconnectingAction:()=>ho,socketMessageAction:()=>co});var Ro=So({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:xo,reducer:Oo}=Ro,Ao=(0,Xr.combineReducers)({components:Oo,session:Co}),jo={};Gt(jo,{createCatchableSaga:()=>No,createRestartableSaga:()=>Lo,eventChannel:()=>ut});var Lo=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 n;n=ze.apply(void 0,[e].concat(r)),Ve(De,X({},n.payload,{detached:!0}))}((function*(){for(;;)try{hr().debug("Run a restartable saga"),yield Fe(e),hr().debug("One of the restartable saga has ended. Restarting..")}catch(e){hr().error("Restartable Saga Error",e)}}))},Do=e=>hr().error("Catchable Saga Error",e),No=(e,t=Do)=>function*(...r){try{yield Fe(e,...r)}catch(e){t(e)}},Wo=e=>gr(null==e?void 0:e.event_type),Vo=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},$o=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*Uo({sessionChannel:e,pubSubChannel:t,swEventChannel:r,session:o}){function*n(e){switch(e.event_type){case"video.room.audience_count":return void(yield Ue(t,{type:"video.room.audienceCount",payload:e.params}));case"video.member.updated":return;case"video.member.talking":{const{member:r}=e.params;if("talking"in r){const o=r.talking?"started":"ended";yield Ue(t,{type:`video.member.talking.${o}`,payload:e.params});const n=r.talking?"start":"stop";yield Ue(t,{type:`video.member.talking.${n}`,payload:e.params})}break}}yield Ue(t,{type:e.event_type,payload:e.params})}function*s(e){yield Ue(r,kr(e)),Wo(e)||($o(e)?o.onSwAuthorizationState(e.params.authorization_state):Vo(e)?yield ze(n,e):yield Ue({type:e.event_type,payload:e}))}const i=No((function*(e){if(e.type!==co.type)return void(yield Ue(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return hr().debug(`Unknown message: ${t}`,e);yield ze(s,r)}),(e=>{hr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield $e(e);yield ze(i,t)}}catch(e){hr().error("sessionChannelWorker error:",e)}finally{hr().debug("sessionChannelWorker finally")}}var Bo=e=>{var t;return void 0===e.payload?"":(e=>e.type.startsWith("video.member.")||e.type.startsWith("video.__synthetic__.member"))(e)||(e=>e.type.startsWith("video.layout."))(e)||(e=>e.type.startsWith("video.recording."))(e)||(e=>e.type.startsWith("video.playback."))(e)||(e=>e.type.startsWith("video.stream."))(e)||(e=>"video.room.audience_count"===e.type||"video.room.audienceCount"===e.type)(e)?e.payload.room_session_id:(e=>e.type.startsWith("video.room."))(e)?e.payload.room_session.id:(e=>e.type.startsWith("chat."))(e)?"":(e=>e.type.startsWith("calling."))(e)&&null!=(t=e.payload.tag)?t:""};function*Fo({pubSubChannel:e,emitter:t}){hr().debug("pubSubSaga [started]");try{for(;;){const r=yield $e(e,"*"),{type:o,payload:n}=r;try{const e=Bo(r);Mr(o)&&t.emit(o,n),hr().trace("Emit:",Sr({namespace:e,event:o})),t.emit(Sr({namespace:e,event:o}),n)}catch(e){hr().error(e)}}}finally{(yield qe())&&hr().debug("pubSubSaga [cancelled]")}}var zo=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Yt(this,"name","AuthError"),Object.setPrototypeOf(this,zo.prototype)}},Ho=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,Ho.prototype)}};function*qo({initSession:e,userOptions:t,channels:r}){var o;const n=e(),s=r.pubSubChannel,i=r.swEventChannel,a=r.sessionChannel;let c=[];if(null==(o=t.workers)?void 0:o.length)try{const e=t.workers.map((e=>Fe(Lo(e))));c=yield function(e){var t=Ve(je,e);return t.combinator=!0,t}(e)}catch(e){hr().error("Error running custom workers",e)}yield ze(Uo,{session:n,sessionChannel:a,pubSubChannel:s,swEventChannel:i});const d=yield ze(Fo,{pubSubChannel:s,emitter:t.emitter}),u=yield ze(Qo,{session:n,sessionChannel:a,pubSubChannel:s,userOptions:t});n.connect(),yield $e(oo.type),n.disconnect(),yield $e(lo.type),yield Ue(s,lo()),d.cancel(),u.cancel(),c.forEach((e=>e.cancel()))}function*Ko({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Fe(e.reauthenticate),yield Ue(Eo.connected(e.rpcConnectResult)),yield Ue(r,uo()))}catch(t){hr().error("Reauthenticate Error",t),e.authError(t)}}function*Qo(e){hr().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield $e([io.type,so.type,ao.type,no.type,ho.type,go.type]);switch(hr().trace("sessionStatusWatcher",t.type,t.payload),t.type){case io.type:{const{session:t,pubSubChannel:r}=e;yield Ue(Eo.connected(t.rpcConnectResult)),yield Ue(r,uo());break}case so.type:yield ze(Go,Kt(qt({},e),{action:t}));break;case ao.type:yield Ue(e.pubSubChannel,mo());break;case no.type:yield ze(Ko,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case ho.type:yield Ue(e.pubSubChannel,ho());break;case go.type:e.session.forceClose()}}}finally{(yield qe())&&hr().debug("sessionStatusWatcher [cancelled]")}}function*Go(e){hr().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:o}=r.payload,n=o?new zo(o.code,o.message):new Error("Unauthorized");yield Ue(t,po(n))}finally{(yield qe())&&hr().debug("sessionAuthErrorSaga [cancelled]")}}var Jo={};Gt(Jo,{getAuthError:()=>en,getAuthState:()=>tn,getAuthStatus:()=>Zo,getIceServers:()=>Xo,getSession:()=>Yo});var Xo=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Yo=e=>e.session,Zo=({session:e})=>e.authStatus,en=({session:e})=>e.authError,tn=({session:e})=>e.authState,rn=e=>{const{sessionListeners:t={},store:r,Component:o,customSagas:n=[]}=e,s=Object.keys(t);return e=>{const i=new o(Kt(qt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),o=Yo(e);for(const e of s){if(!1===c)return;const r=`session.${e}`,n=a.get(r),s=o[e];if(void 0!==s&&n!==s){a.set(r,s);const n=t[e];"string"==typeof n?i[n](o):"function"==typeof n&&n(o)}}})),u=null==n?void 0:n.map((e=>r.runSaga(e,{instance:i,runSaga:r.runSaga})));return i.destroyer=()=>{c=!1,d(),a.clear(),(null==u?void 0:u.length)&&u.forEach((e=>e.cancel()))},i}};Xt(Mo,Xr);var on=e=>{var t;const{userOptions:r,SessionConstructor:o,preloadedState:n={},runSagaMiddleware:s=!0}=e,i=jt(),a=lt(),c=lt(),d=dt(),u={pubSubChannel:a,swEventChannel:c,sessionChannel:d},l=to({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:Ao,preloadedState:n,middleware:e=>e().concat(i)});let h;const p=()=>(h=new o(Kt(qt({},r),{sessionChannel:d})),h),m=()=>(h||hr().warn("Custom worker started without the session"),h),g=new Map,f={get:e=>g.get(e),set:(e,t)=>(g.set(e,t),g),remove:e=>(g.delete(e),g)};if(s){const e=(e=>function*({userOptions:t,channels:r}){var o;for(t.logger&&(ar=t.logger),t.debug&&(e=>{null!=e?Object.assign(dr,e):dr={}})(t.debug);;){const n=yield $e([ro.type,no.type]);(null==(o=null==n?void 0:n.payload)?void 0:o.token)&&(t.token=n.payload.token);try{yield Fe(qo,Kt(qt({},e),{userOptions:t,channels:r}))}catch(e){hr().error("RootSaga Error:",e)}finally{(yield qe())&&hr().debug("rootSaga [cancelled]"),hr().debug("Reboot rootSaga")}}})({initSession:p});i.run(e,{userOptions:r,channels:u})}return Kt(qt({},l),{runSaga:(e,t)=>i.run(e,Kt(qt({},t),{channels:u,getSession:m,instanceMap:f})),channels:u,instanceMap:f})},nn=function*(e){const{initialState:t,onDone:r,onFail:o,getSession:n}=e,{requestId:s,method:i,params:a}=t,c=n();if(!c){const e=new Error("Session does not exist!");return hr().error(e),void(null==o||o(e))}try{const e=(({method:e,params:t})=>Nr({method:e,params:t}))({id:s,method:i,params:a}),t=yield Fe(c.execute,e);null==r||r(t)}catch(e){hr().warn("Execute error: ",e),null==o||o(e)}},sn=e=>e,an=Symbol("BaseComponent"),cn=class{constructor(e){this.options=e,Yt(this,"__sw_symbol",an),Yt(this,"uuid",w()),Yt(this,"_eventsPrefix",""),Yt(this,"_eventsRegisterQueue",new Set),Yt(this,"_eventsEmitQueue",new Set),Yt(this,"_eventsNamespace"),Yt(this,"_eventsTransformsCache",new Map),Yt(this,"_customSagaTriggers",new Map),Yt(this,"_destroyer"),Yt(this,"baseEventEmitter"),Yt(this,"_emitterTransforms",new Map),Yt(this,"_emitterListenersCache",new Map),Yt(this,"_trackedEvents",[]),Yt(this,"_runningWorkers",[]),Yt(this,"_workers",new Map),this.baseEventEmitter=new Dt}get __uuid(){return this.uuid}_handleCompoundEvents(e){const t=this._getInternalEvent(e);let r;for(const e of this.getCompoundEvents().keys())if(this._getInternalEvent(e)===t){r=this.getCompoundEvents().get(e);break}r&&0!==r.length&&(this.store.dispatch(bo({compoundEvents:r,event:t,namespace:this._eventsNamespace})),r.forEach((e=>{"string"==typeof e&&this._trackEvent(e)})))}_getNamespacedEvent(e){let t=this._eventsNamespace;return"string"==typeof e&&jr(e)&&(t=this.__uuid),Sr({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||Rr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return hr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.options.store.instanceMap}get emitter(){return this.options.emitter}get baseEmitter(){return this.baseEventEmitter}addEventToRegisterQueue(e){const[t,r]=e.params;return this.logger.trace("Adding event to the register queue",{event:t,fn:r}),this._eventsRegisterQueue.add({type:e.type,params:e.params}),this.emitter}_addEventToEmitQueue(e,t){this.logger.trace("Adding to the emit queue",e),this._eventsEmitQueue.add({event:e,args:t})}shouldAddToQueue(){return void 0===this._eventsNamespace}runAndCacheEventHandlerTransform({internalEvent:e,transform:t,payload:r}){if("no-cache"===t.mode)return t.instanceFactory(r);if(!this._eventsTransformsCache.has(e)){const o=t.instanceFactory(r);return this._eventsTransformsCache.set(e,o),o}return this._eventsTransformsCache.get(e)}cleanupEventHandlerTransformCache({internalEvent:e,force:t}){const r=this._eventsTransformsCache.get(e),o=this.listenerCount(e);return r&&(t||o<=1)?(r.__uuid!==this.__uuid&&"function"==typeof r.destroy&&r.destroy(),this._eventsTransformsCache.delete(e)):(this.logger.trace("[cleanupEventHandlerTransformCache] Key wasn't cached",e),!1)}getEmitterListenersMapByInternalEventName(e){var t;return null!=(t=this._emitterListenersCache.get(e))?t:new Map}getAndRemoveStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);if(t&&r.has(t)){const o=r.get(t);return r.delete(t),this._emitterListenersCache.set(e,r),o}return t}_createStableEventHandler(e,t){return r=>{const o=this._emitterTransforms.get(e);if(this.logger.trace("Got emitterTransform for",e,o),!o)return t(r);const n=this.runAndCacheEventHandlerTransform({internalEvent:e,transform:o,payload:r});let s;const i=this._parseNestedFields(r,o);return s=Cr({instance:n,payload:r,transformedPayload:i,transform:o}),o.afterCreateHook&&o.afterCreateHook(s),t(s)}}_parseNestedFields(e,t,r=(e=>e),o=undefined){if(!t.nestedFieldsToProcess)return t.payloadTransform(e);if(e.__sw_proxy)return e;if(!o){const o=t.payloadTransform(e);return this._parseNestedFields(o,t,r,o)}return Array.isArray(e)?o=e.map(((o,n)=>this._parseNestedFields(r(o),t,r,e[n]))):e&&"object"==typeof e&&Object.entries(e).forEach((([e,n])=>{var s;const i=null==(s=t.nestedFieldsToProcess)?void 0:s[e],a=i?this._emitterTransforms.get(i.eventTransformType):void 0;o[e]=n&&"object"==typeof n?this._parseNestedFields(n,t,(e=>i&&a&&e&&"object"==typeof e?(({transform:e,payload:t})=>{const r=(({transform:e,payload:t})=>{if(!Tr.has(e.type)){const r=e.instanceFactory(t);return Tr.set(e.type,r),r}return Tr.get(e.type)})({transform:e,payload:t}),o=e.payloadTransform(t);return Cr({transform:e,payload:t,instance:r,transformedPayload:o})})({transform:a,payload:r(i.processInstancePayload(e))}):e),o[e]):r(n)})),o}getOrCreateStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);let o=r.get(t);return o||(o=this._createStableEventHandler(e,t),r.set(t,o),this._emitterListenersCache.set(e,r)),o}_trackEvent(e){this._trackedEvents=Array.from(new Set(this._trackedEvents.concat(e)))}_untrackEvent(e){this._trackedEvents=this._trackedEvents.filter((t=>t!==e))}_addListener(e,t,r){this._handleCompoundEvents(e);const o=this._getInternalEvent(e);this._trackEvent(o);const n=r?"once":"on";if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:n,params:[e,t]}),this.emitter;const s=this.getOrCreateStableEventHandler(o,t);return this.logger.trace("Registering event",o),this.emitter[n](o,s)}on(e,t){return this._addListener(e,t)}_on(e,t){return this.baseEmitter.on(e,t)}_once(e,t){return this.baseEmitter.once(e,t)}_off(e,t){return this.baseEmitter.off(e,t)}once(e,t){return this._addListener(e,t,!0)}off(e,t){if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:"off",params:[e,t]}),this.emitter;const r=this._getInternalEvent(e),o=this.getAndRemoveStableEventHandler(r,t);return this.cleanupEventHandlerTransformCache({internalEvent:r,force:!o}),this.logger.trace("Removing event listener",r),this._untrackEvent(r),this.emitter.off(r,o)}removeAllListeners(e){return this.shouldAddToQueue()?(this.addEventToRegisterQueue({type:"removeAllListeners",params:[e]}),this.emitter):e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.emitter)}eventNames(){return this._trackedEvents}baseEventNames(){return this.baseEmitter.eventNames()}getSubscriptions(){return Ar(this.eventNames().concat(this.baseEventNames()))}emit(e,...t){if(this.shouldAddToQueue())return this._addEventToEmitQueue(e,t),!1;const r=this._getInternalEvent(e);return this.logger.trace("Emit on event:",r),this.emitter.emit(r,...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=sn,transformResolve:o=sn,transformReject:n=sn}={transformParams:sn,transformResolve:sn,transformReject:sn}){return new Promise(((s,i)=>{const a=w();this.runWorker("executeActionWorker",{worker:nn,onDone:e=>s(o(e)),onFail:e=>i(n(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},vo(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]}flushEventsRegisterQueue(){this._eventsRegisterQueue.forEach((e=>{this[e.type](...e.params),this._eventsRegisterQueue.delete(e)}))}flushEventsEmitQueue(){this._eventsEmitQueue.forEach((e=>{const{event:t,args:r}=e;this.emit(t,...r),this._eventsEmitQueue.delete(e)}))}flushEventsQueue(){this.flushEventsRegisterQueue(),this.flushEventsEmitQueue()}_attachListeners(e){"string"==typeof e&&(this._eventsNamespace=e),this.flushEventsQueue()}getCompoundEvents(){return new Map}getEmitterTransforms(){return new Map}get _sessionAuthStatus(){return Zo(this.store.getState())}get _sessionAuthState(){return tn(this.store.getState())}_waitUntilSessionAuthorized(){switch(Zo(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=Zo(this.store.getState()),n=en(this.store.getState());if("authorized"===o)e(this),r();else if("unauthorized"===o){const e=n?new zo(n.code,n.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}_setEmitterTransform({event:e,handler:t,local:r}){const o=this._getInternalEvent(e);(r?jr(e):!jr(e)&&this.eventNames().includes(o))&&this._emitterTransforms.set(o,t)}applyEmitterTransforms({local:e=!1}={local:!1}){this.getEmitterTransforms().forEach(((t,r)=>{Array.isArray(r)?r.forEach((r=>{this._setEmitterTransform({event:r,handler:t,local:e})})):this._setEmitterTransform({event:r,handler:t,local:e}),this._emitterTransforms.set(t.type,t)}))}runWorker(e,t){return this._workers.has(e)?hr().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,n=Qt(r,["worker"]);const s=this.store.runSaga(o,qt({instance:this,runSaga:this.store.runSaga},n));return this._runningWorkers.push(s),this._workers.delete(e),s}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},dn=class extends cn{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=Zo(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(ro()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(oo())}},un=class extends cn{constructor(e){super(e),this.options=e,Yt(this,"subscribeMethod","signalwire.subscribe"),Yt(this,"subscribeParams",{}),Yt(this,"_latestExecuteParams"),this.applyEmitterTransforms({local:!0});const t=()=>{this._latestExecuteParams=void 0};super.on("session.connected",t),super.on("session.disconnected",t),super.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 this.applyEmitterTransforms(),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")}},ln={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(ln).map((e=>`${tr}.member.updated.${e}`));var hn=br(ln);Object.keys(hn).map((e=>`member.updated.${e}`));var pn={};Gt(pn,{getComponent:()=>mn,getComponentsById:()=>gn,getComponentsToCleanup:()=>fn});var mn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},gn=({components:e})=>e.byId,fn=e=>{const t=gn(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},vn={};Gt(vn,{RoomSessionPlaybackAPI:()=>ms,RoomSessionRTPlaybackAPI:()=>fs,RoomSessionRTRecordingAPI:()=>hs,RoomSessionRTStreamAPI:()=>_s,RoomSessionRecordingAPI:()=>us,RoomSessionStreamAPI:()=>ys,audioMuteMember:()=>Vn,audioUnmuteMember:()=>$n,createRoomSessionPlaybackObject:()=>gs,createRoomSessionRTPlaybackObject:()=>vs,createRoomSessionRTRecordingObject:()=>ps,createRoomSessionRTStreamObject:()=>Ss,createRoomSessionRecordingObject:()=>ls,createRoomSessionStreamObject:()=>bs,deafMember:()=>Fn,deleteMemberMeta:()=>os,deleteMeta:()=>Dn,demote:()=>Jn,getLayouts:()=>Sn,getMemberMeta:()=>es,getMembers:()=>wn,getMeta:()=>An,getPlaybacks:()=>Rn,getRTPlaybacks:()=>ss,getRTRecordings:()=>as,getRTStreams:()=>ds,getRecordings:()=>In,getStreams:()=>Nn,hideVideoMuted:()=>Cn,play:()=>xn,playRT:()=>ns,promote:()=>Gn,removeAllMembers:()=>Zn,removeMember:()=>Yn,setDeaf:()=>Hn,setHideVideoMuted:()=>Pn,setInputSensitivityMember:()=>Qn,setInputVolumeMember:()=>qn,setLayout:()=>kn,setMemberMeta:()=>ts,setMemberPosition:()=>Xn,setMeta:()=>jn,setOutputVolumeMember:()=>Kn,setPositions:()=>En,showVideoMuted:()=>Tn,startRTRecording:()=>is,startRTStream:()=>cs,startRecording:()=>Mn,startStream:()=>Wn,undeafMember:()=>zn,updateMemberMeta:()=>rs,updateMeta:()=>Ln,videoMuteMember:()=>Un,videoUnmuteMember:()=>Bn});var yn=()=>{},bn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:qt({room_session_id:this.roomSessionId},r)},t)}}),_n=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,s=Qt(o,["memberId"]);return this.execute({method:e,params:qt({room_session_id:this.roomSessionId,member_id:n||this.memberId},s)},t)}}),Sn=bn("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),wn=bn("video.members.get",{transformResolve:e=>({members:e.members})}),kn=bn("video.set_layout",{transformResolve:yn}),En=bn("video.set_position",{transformResolve:yn}),Cn=bn("video.hide_video_muted",{transformResolve:yn}),Tn=bn("video.show_video_muted",{transformResolve:yn}),Pn={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:yn})}},In={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.list"),r);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.list"),r),t(e)}}))}},Mn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.start"),r);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.start"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.start"),r),t(e)}}))}},Rn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.playback.list"),r);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.playback.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.list"),r),t(e)}}))}},xn={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{const s=t=>{e(t)};this.on(Lr("video.playback.start"),s);try{const e=r||o,t=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:e},n)});this.emit(Lr("video.playback.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.start"),s),t(e)}}))}},On=e=>bn(e,{transformResolve:yn,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Qt(t,["room_session_id"])}}}),An=bn("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),jn=On("video.set_meta"),Ln=On("video.update_meta"),Dn={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},Nn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.stream.list"),r);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.stream.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.list"),r),t(e)}}))}},Wn={value:function(e){return new Promise((async(t,r)=>{const o=e=>{t(e)};this.on(Lr("video.stream.start"),o);try{const t=await this.execute({method:"video.stream.start",params:qt({room_session_id:this.roomSessionId},e)});this.emit(Lr("video.stream.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.start"),o),r(e)}}))}},Vn=_n("video.member.audio_mute",{transformResolve:yn}),$n=_n("video.member.audio_unmute",{transformResolve:yn}),Un=_n("video.member.video_mute",{transformResolve:yn}),Bn=_n("video.member.video_unmute",{transformResolve:yn}),Fn=_n("video.member.deaf",{transformResolve:yn}),zn=_n("video.member.undeaf",{transformResolve:yn}),Hn={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:yn})}},qn=_n("video.member.set_input_volume",{transformResolve:yn}),Kn=_n("video.member.set_output_volume",{transformResolve:yn}),Qn=_n("video.member.set_input_sensitivity",{transformResolve:yn}),Gn={value:function(e){var t=e,{memberId:r,mediaAllowed:o,joinAudioMuted:n,joinVideoMuted:s}=t,i=Qt(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:n,join_video_muted:s},i)},{transformResolve:yn})}},Jn={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:yn})}},Xn=_n("video.member.set_position",{transformResolve:yn}),Yn={value:function(e){var t=e,{memberId:r}=t,o=Qt(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:yn})}},Zn={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:yn})}},es=_n("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ts=_n("video.member.set_meta",{transformResolve:yn}),rs=_n("video.member.update_meta",{transformResolve:yn}),os=_n("video.member.delete_meta",{transformResolve:yn}),ns={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||o,{playback:s}=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:t},n)}),i=vs({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:s}});this.instanceMap.set(i.id,i),e(i)}catch(e){t(e)}}))}},ss={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=vs({store:this.store,emitter:this.emitter,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)}}))}},is={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=ps({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},as={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=ps({store:this.store,emitter:this.emitter,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)}}))}},cs={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=Ss({store:this.store,emitter:this.emitter,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)}}))}},ds={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=Ss({store:this.store,emitter:this.emitter,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)}}))}},us=class extends cn{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")}})}},ls=e=>rn({store:e.store,Component:us})(e),hs=class extends cn{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")}})}},ps=e=>rn({store:e.store,Component:hs})(e),ms=class extends cn{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)}})}},gs=e=>rn({store:e.store,Component:ms})(e),fs=class extends cn{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)}})}},vs=e=>rn({store:e.store,Component:fs})(e),ys=class extends cn{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},bs=e=>rn({store:e.store,Component:ys})(e),_s=class extends cn{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")}})}},Ss=e=>rn({store:e.store,Component:_s})(e),ws={};Gt(ws,{BaseChatAPI:()=>Us,BaseChatConsumer:()=>$s,ChatMember:()=>zs,ChatMessage:()=>Fs,createBaseChatObject:()=>Bs,getMemberState:()=>xs,getMembers:()=>Is,getMessages:()=>Ps,publish:()=>Ts,setMemberState:()=>Rs});var ks=()=>{},Es=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),Cs=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,s=Qt(o,["memberId"]);return this.execute({method:e,params:qt({member_id:n},s)},t)}}),Ts=Es("chat.publish",{transformResolve:ks}),Ps=Es("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>br(e))),cursor:e.cursor})}),Is=Es("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>br(e)))})}),Ms=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return Kt(qt({},e),{channels:t})},Rs=Cs("chat.member.set_state",{transformResolve:ks,transformParams:Ms}),xs=Cs("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Ms}),Os={};Gt(Os,{BasePubSubConsumer:()=>Ds,PubSubMessage:()=>Ws,createBasePubSubObject:()=>Ns});var As=function*(e){hr().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case`${or}.channel.message`:{const{channel:e,message:r}=o,n=Qt(r,["member"]),s=br(Kt(qt({},n),{channel:e})),i=new Ws(s);t.baseEmitter.emit(`${or}.message`,i);break}default:hr().warn(`Unknown pubsub event: "${r}"`)}}const n=e=>e.type.startsWith(`${or}.`);for(;;){const e=yield $e(r,n);yield ze(o,e)}hr().trace("pubSubWorker ended")},js=class extends un{extendEventName(e){return e}on(e,t){return super._on(this.extendEventName(e),t)}once(e,t){return super._once(this.extendEventName(e),t)}off(e,t){return super._off(this.extendEventName(e),t)}},Ls=e=>e.map((e=>({name:e}))),Ds=class extends js{constructor(e){super(e),Yt(this,"_eventsPrefix",or),Yt(this,"subscribeMethod",`${or}.subscribe`),this._attachListeners(""),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:As})}_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:Ls(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",(()=>{})))}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:`${or}.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.once("session.auth_error",(e=>{r(e)})),this.once("session.connected",(()=>{t()})),this.store.dispatch(Jr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${or}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(tn);return e&&"channels"in e&&e.channels?e.channels:{}}extendEventName(e){return`${or}.${e}`}},Ns=e=>rn({store:e.store,Component:Ds})(e),Ws=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}},Vs=function*(e){hr().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,n=br(Kt(qt({},r),{channel:e})),s=new Fs(n);t.baseEmitter.emit("chat.message",s);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=o,n=br(e),s=new zs(n);t.baseEmitter.emit(r,s);break}default:hr().warn(`Unknown chat event: "${r}"`)}}const n=e=>e.type.startsWith("chat.");for(;;){const e=yield $e(r,n);yield ze(o,e)}hr().trace("chatWorker ended")},$s=class extends Ds{constructor(e){super(e),Yt(this,"_eventsPrefix",rr),Yt(this,"subscribeMethod",`${rr}.subscribe`)}initWorker(){this.runWorker("chat",{worker:Vs})}},Us=Er($s,{publish:Ts,getMembers:Is,getMessages:Ps,setMemberState:Rs,getMemberState:xs}),Bs=e=>rn({store:e.store,Component:Us})(e),Fs=class extends Ws{get member(){return this.payload.member}},zs=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:{}}},Hs={};Gt(Hs,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Gs,memberPositionWorker:()=>Js,memberUpdatedWorker:()=>Qs});var qs=function*(e,t,r){yield Ue(r,{type:e,payload:t})};function*Ks(e){const{action:t,memberList:r,channels:{pubSubChannel:o},dispatcher:n=qs}=e,s={};t.payload.layout.layers.forEach((e=>{var t;const o=e.member_id;if(!o)return;const n=r.get(o);n&&e.position!==(null==(t=n.member)?void 0:t.current_position)?(Xs({memberList:r,memberId:o,currentPosition:e.position}),s[o]=!0):s[o]=!1}));for(const[e,t]of r)if(s[e])yield null==n?void 0:n("video.member.updated",t,o);else if(void 0===s[e]){const t=Xs({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==n?void 0:n("video.member.updated",t,o)}}function*Qs({action:e,channels:t,memberList:r,dispatcher:o=qs}){var n,s;const i=e.payload.member.id,a=Xs({memberList:r,memberId:i,currentPosition:null==(s=null==(n=r.get(i))?void 0:n.member)?void 0:s.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=Kt(qt({},a),{member:qt(qt({},a.member),e.payload.member)});r.set(i,d);for(const r of c){const n=`${e.type}.${r}`;yield null==o?void 0:o(n,d,t.pubSubChannel)}yield null==o?void 0:o(e.type,d,t.pubSubChannel)}var Gs=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Js=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:n,dispatcher:s=qs}){if(!r)return;const{swEventChannel:i}=t;let a=Ys(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield $e(i,(t=>!("video.member.updated"!==t.type&&"video.layout.changed"!==t.type&&"video.member.joined"!==t.type&&"video.member.left"!==t.type||Bo(t)!==e._eventsNamespace&&Bo(t)!==e.roomSessionId)));switch(r.type){case"video.member.updated":c(r.payload),yield ze(Qs,{action:r,channels:t,memberList:a,instance:e,getSession:o,instanceMap:n,dispatcher:s});break;case"video.member.joined":c(r.payload);break;case"video.member.left":a.delete(r.payload.member.id);break;case"video.layout.changed":yield ze(Ks,{action:r,channels:t,memberList:a,instance:e,dispatcher:s})}}},Xs=({memberList:e,memberId:t,currentPosition:r})=>{const o=e.get(t);if(!o)return;if(!r)return o;const n=Kt(qt({},o),{member:Kt(qt({},null==o?void 0:o.member),{current_position:r})});return e.set(t,n),n},Ys=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,member:t})})),r};Gt({},{configureFullStack:()=>oi,configureJestStore:()=>ri,createMockedLogger:()=>ti,createPubSubChannel:()=>ii,createSessionChannel:()=>ci,createSwEventChannel:()=>ai,rpcConnectResultVRT:()=>si,wait:()=>ni});var Zs="8f0a119a-cda7-4497-a47d-c81493b824d4",ei="<VRT>",ti=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),ri=e=>on(qt({userOptions:{project:Zs,token:ei,devTools:!1,emitter:new Dt},SessionConstructor:Po,runSagaMiddleware:!1},e)),oi=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Dt,r=on({userOptions:{project:Zs,token:ei,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Jr.initAction()),r.dispatch(Jr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Jr.destroyAction())}},ni=e=>new Promise((t=>{setTimeout(t,e)})),si={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"}]},ii=()=>lt(),ai=()=>lt(),ci=()=>dt(),di=qt({},Jo);const ui=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,li=()=>{if(!ui())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},hi=()=>li().getSupportedConstraints(),pi=e=>e&&e instanceof MediaStream,mi=()=>"sinkId"in HTMLMediaElement.prototype,gi=async(e,t)=>{if(null!==e)if("string"==typeof t)if(mi())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?hr().error(`You need to use HTTPS for selecting audio output device: ${e}`):hr().error(`Error: ${e}`),e}else hr().warn("Browser does not support output device selection.");else hr().warn(`Invalid speaker deviceId: '${t}'`);else hr().warn("No HTMLMediaElement to attach the speakerId")},fi=e=>{var t;pi(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(vi))},vi=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},yi={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},bi=e=>{if(e)return yi[e]},_i=()=>li().enumerateDevices(),Si=async e=>{let t=await _i().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},wi=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 Si(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(hr().warn(`No ${e} devices to check for permissions!`),null)})(bi(e))},ki=()=>wi("camera"),Ei=()=>wi("microphone"),Ci=()=>wi("speaker"),Ti=async(e={audio:!0,video:!0})=>{var t;try{const t=li().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Ei()),(null==e?void 0:e.video)&&t.push(ki()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Ir(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":hr().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":hr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":hr().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":hr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),hr().info("List of available constraints:",hi());break;case"NotAllowedError":hr().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?hr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):hr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":hr().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}},Pi=e=>li().getDisplayMedia(e),Ii=async(e,t=!1)=>Ri(e,t),Mi=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:o,groupId:n})=>{var s;if(!e||t.targets&&!(null===(s=t.targets)||void 0===s?void 0:s.includes(o)))return!1;if(!n)return!0;const i=`${o}-${n}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(i)||!a||(r.push(i),0))}))},Ri=async(e,t=!1)=>{let r;if(!1===await wi(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await Ti(t)}var o;const n=await Si(bi(e));return r&&fi(r),!0===t?n:Mi(n)},xi=async(e,t,r)=>{const o=await Ri(r,!0);for(let r=0;r<o.length;r++){const{deviceId:n,label:s}=o[r];if(e===n||t===s)return n}return null},Oi=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Ai={camera:ki,microphone:Ei,speaker:Ci},ji=["camera","microphone","speaker"],Li=`Allowed targets are: '${ji.join("', '")}'`,Di={speaker:mi},Ni=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:ji).filter((e=>!!ji.includes(e)||(hr().warn(`We'll ignore the "${e}" target as it is not allowed. ${Li}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${Li}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Ai[e]())))).reduce(((e,r,o)=>{var n;const s=t[o];return e[!(s in Di)||(null===(n=Di[s])||void 0===n?void 0:n.call(Di))?"supported":"unsupported"].push([s,!!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 n=[];const s=o.supported.reduce(((e,[t,r])=>(r?e.push(t):n.push(t),e)),[]);if(s.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=n.length>0?`The user hasn't granted permissions for the following targets: ${n.join(", ")}. `:"";hr().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return hr().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new Dt,o=await _i(),n=null==t?void 0:t.reduce(((e,t)=>{const r=bi(t);return r&&e.push(r),e}),[]);let s=Mi(o,{excludeDefault:!0,targets:n});return li().addEventListener("devicechange",(async()=>{const e=await _i(),t=s,o=Mi(e,{excludeDefault:!0,targets:n});s=o;const i=((e,t)=>{const r=Oi(e),o=Oi(e),n=[];hr().debug("[_getDeviceListDiff] <- oldDevices",e),hr().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(o.delete(t),e.label!==s.label&&n.push(e)),void 0===s}));return{updated:n.map((e=>({type:"updated",payload:e}))),removed:Array.from(o,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:s.map((e=>({type:"added",payload:e})))}})(t,o),a=i.added.length>0,c=i.removed.length>0,d=i.updated.length>0;(a||c||d)&&r.emit("changed",{changes:i,devices:o}),a&&r.emit("added",{changes:i.added,devices:o}),c&&r.emit("removed",{changes:i.removed,devices:o}),d&&r.emit("updated",{changes:i.updated,devices:o})})),r},Wi=e=>"function"==typeof(null==e?void 0:e.getTracks),Vi=e=>{hr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return Ti(e)},$i=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:o=""}=e;if(r){const e=await xi(r,o,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:n=!1,camId:s}=e;const{camLabel:i=""}=e;if(s){const e=await xi(s,i,"camera").catch((e=>null));e&&("boolean"==typeof n&&(n={}),n.deviceId={exact:e})}return{audio:t,video:n}};var Ui={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],n=t.matchPrefix(e+r,"a=ice-pwd:")[0];return o&&n?{usernameFragment:o.substring(12),password:n.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 n=3;n<o.length;n++){const s=o[n],i=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(i){const o=t.parseRtpMap(i),n=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(o.parameters=n.length?t.parseFmtp(n[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").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 n=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{n.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 n=0;return r.codecs.forEach((e=>{e.maxptime>n&&(n=e.maxptime)})),n>0&&(o+="a=maxptime:"+n+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{o+=t.writeExtmap(e)})),o},t.parseRtpEncodingParameters=function(e){const r=[],o=t.parseRtpParameters(e),n=-1!==o.fecMechanisms.indexOf("RED"),s=-1!==o.fecMechanisms.indexOf("ULPFEC"),i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=i.length>0&&i[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),n&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let u=t.matchPrefix(e,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substring(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=u}))),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 n=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=n.length>0,r.compound=0===n.length;const s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.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 n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return n.length>0?(r=n[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 n;o.length>0&&(n=parseInt(o[0].substring(19),10)),isNaN(n)&&(n=65536);const s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:r.fmt,maxMessageSize:n};const i=t.matchPrefix(e,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:n}}},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 n;const s=void 0!==r?r:2;return n=e||t.generateSessionId(),"v=0\r\no="+(o||"thisisadapterortc")+" "+n+" "+s+" 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}(Ui);var Bi=Ui.exports;const Fi=e=>/^m=audio/.test(e),zi=e=>/^m=video/.test(e),Hi=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 n=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[o]),s=new RegExp(`a=fmtp:${n}`),i=r.findIndex((e=>s.test(e)));return i>=0?/stereo=1;/.test(r[i])||(r[i]+="; stereo=1; sprop-stereo=1"):r[o]+=`${t}a=fmtp:${n} stereo=1; sprop-stereo=1`,r.join(t)};class qi{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this._restartingIce=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&pi(this.options.localStream)&&(this._localStream=this.options.localStream)}get logger(){return hr()}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:this.call.iceServers,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.instance.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&&(vi(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 $i(this.options),n=await Vi({[e]:o[e]});if(n&&pi(n)){const o=n.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{const e=this.instance.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.instance.setConfiguration(t),this.instance.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){(this._negotiating||this._restartingIce)&&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 hr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);hr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,o=0,n=!0;const s=()=>{clearTimeout(t)},i=async()=>{var a,c;let d=0,u=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&&(hr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===o&&(hr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),u=e.packetsReceived)}))}catch(e){hr().warn("getStats error",e)}finally{d&&d<=r&&u&&u<=o?(hr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),hr().warn(`videoPacketsReceived: ${u} - previousVideoValue: ${o}`),e.triggerResume()):(r=null!=d?d:r,o=null!=u?u:o,s(),n&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>i()),e.watchMediaPacketsTimeout)))}};return{start:()=>{s(),i()},stop:()=>{n=!1,s()}}})(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),n=this.getDeviceId(e);n&&!this.options.screenShare&&(o.deviceId={exact:n}),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){return this.instance.getSenders?this.instance.getSenders().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getSenders() not available."),null)}_getReceiverByKind(e){return this.instance.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}){this._rejectStartMethod({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&&pi(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)}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return!(!this.localSdp||!this.hasIceServers)&&(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Bi.getMediaSections(e);for(const e of r)if(!Bi.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return hr().error("Error checking SDP",e),!1}})(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.instance.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.instance.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:n}=this.options;return e.sdp&&t&&(e.sdp=Hi(e.sdp)),e.sdp&&r&&o&&n&&(e.sdp=((e,t,r,o)=>{const n=e.split("\r\n");return n.forEach(((e,s)=>{/^a=fmtp:\d*/.test(e)?n[s]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${o}`:/^a=mid:(1|video)/.test(e)&&(n[s]+=`\r\nb=AS:${t}`)})),n.join("\r\n")})(e.sdp,r,o,n)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=Hi(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r);if(o.findIndex(Fi)<o.findIndex(zi))return e;const n=e.split(r),s=n.findIndex(Fi),i=n.findIndex(zi),a=n.slice(s,i),c=n.slice(i,n.length-1);return[...n.slice(0,s),...c,...a,""].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(pi(this.options.localStream))return this.options.localStream;const e=await $i(this.options);return Vi(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":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)}))}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")}}
|
|
7
7
|
/*! *****************************************************************************
|
|
8
8
|
Copyright (c) Microsoft Corporation.
|
|
9
9
|
|
|
@@ -17,5 +17,5 @@
|
|
|
17
17
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
18
18
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
19
19
|
PERFORMANCE OF THIS SOFTWARE.
|
|
20
|
-
***************************************************************************** */const Ki=e=>gr(e.type),Qi=function*(e){hr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const i=jo.createCatchableSaga((function*(e){const{id:t,method:o,params:n={}}=e.payload,{callID:s,nodeId:i}=n,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${o}'`,n);const c=r.peer;switch(o){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===o?"early":"active"),(null==n?void 0:n.sdp)&&a.onRemoteSdp(n.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==n?void 0:n.cause,byeCauseCode:null==n?void 0:n.causeCode,redirectDestination:null==n?void 0:n.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.ping":{const{nodeId:e}=n,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 n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(n,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!n.mediaParams){hr().warn("Invalid mediaParams event",n);break}const{audio:e,video:t}=n.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${o}`,n)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield $e(n,(e=>{var t;return!!Ki(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Gi=function*(e){hr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:s}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield $e(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield Ue(xo.upsert({id:a.payload.call_id,roomId:a.payload.room_session.room_id,roomSessionId:a.payload.room_session.id,memberId:a.payload.member_id,previewUrl:a.payload.room_session.preview_url})),yield Ue(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Ji=function*(e){hr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield $e(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield Ue(Eo.updateAuthState(i.payload.authorization));const a=yield He(di.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.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(),hr().debug("promoteDemoteWorker ended",s)},Xi=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield $e([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Yi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Zi=Object.assign(Object.assign({},Yi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),ea={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},ta={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Yi,video:ea,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class ra extends cn{constructor(e){super(e),this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const s=this.getRTCPeerById(t);return s?n&&s.localSdp?(this.logger.debug("Redirect Destination to:",n,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,n)):(s.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==s?void 0:s.uuid)&&this.setState("hangup"))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},ta),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this.applyEmitterTransforms({local:!0})}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 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(di.getIceServers)}get component(){return this.select((e=>pn.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u,version:1e3}}}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 localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get localAudioTrack(){return this.peer?this.peer.localAudioTrack: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.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)}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(!pi(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),n=e.getAudioTracks();n.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),n.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const s=this.localStream.getVideoTracks(),i=e.getVideoTracks();i.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(s.forEach((e=>{var t;vi(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)}))),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(di.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new qi(this,"offer");this.appendRTCPeer(e),this.logger.debug("Run workers for the new RTCPeer",e.uuid),this.runRTCPeerWorkers(e.uuid),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 n;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 void this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped");let s;try{s=await Pi(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let o={};null===(n=this.localStream)||void 0===n||n.getTracks().forEach((t=>{var r;o[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),vi(t),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{return r(this.updateConstraints(e,{attempt:t+1}))}catch(e){return this.logger.error("Restoring previous constraints"),r(this.updateConstraints(o,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),o(s)}await this.updateStream(s),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:t}=this.peer,r=e.getTracks();this.logger.debug(`updateStream got ${r.length} tracks`);for(let e=0;e<r.length;e++){const o=r[e];this.logger.debug("updateStream apply track: ",o);const n=t.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===o.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===o.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));n&&n.sender?(this.logger.debug("updateStream got transceiver",n.currentDirection,n.mid),await n.sender.replaceTrack(o),this.logger.debug("updateStream replaceTrack"),n.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===o.kind&&e.id!==o.id&&(this.logger.debug("updateStream stop old track and apply new one - "),vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(o)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(o),t.addTrack(o,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===o.kind?this.options.micId=o.getSettings().deviceId:"video"===o.kind&&(this.options.camId=o.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:Qi,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Gi,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Ji,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new qi(this,"offer");try{this.runRTCPeerWorkers(this.peer.uuid),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=new qi(this,"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":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Xi})}async resume(){var e;if(this.logger.debug(`[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}:{},n=zr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let s=[];s=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions();const i=await this.vertoExecute({message:n,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t});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=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}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")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}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=ea),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Zi:Yi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const oa=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},na=({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()}))})),sa=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ia=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},aa=({video:e,rootElement:t,paddingWrapper:r})=>{const o=e.videoHeight/e.videoWidth*100,n=function(e,t=0,r){let o=null,n=null;const s=function(){o&&(clearTimeout(o),n=null,o=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!o;return s(),n=function(){e.apply(i,a)},o=setTimeout((function(){if(o=null,!c){const e=n;return n=null,null==e?void 0:e()}}),t),c&&n?n():void 0};return i.cancel=s,i.flush=function(){const e=n;s(),e&&e()},i}((({width:t,height:n})=>{if(r){const s=n/t*100;r.style.paddingBottom=`${s>o?o:s}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,n)}}),100),s=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;n({width:t,height:r})}else e.contentRect&&n({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},ca=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),da=Jr.createAction("swJs/audioSetSpeakerAction"),ua=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,s=oa(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),n.set(this.id,e)):(hr().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return hr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:o,localStream:n})=>{hr().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===o));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=sa(e),s=document.createElement("div");return s.style.position="absolute",s.style.overflow="hidden",s.style.top=t,s.style.left=r,s.style.width=o,s.style.height=n,s})({location:i}),a.id=e.id;const r=oa();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const o=t.querySelector(".mcuLayers"),s=o?.querySelector(`#${a.id}`);return o&&!s?(hr().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=sa(i);hr().debug("Update myLayer:",c,d,u,l);const h=n.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(n),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("_internal.mirror.video",(e=>{i.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=o(pa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),n.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*la({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,da);for(;;){const o=yield $e([r]);try{if(o.type===r){const r=yield Fe(gi,e,o.payload);t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*ha({track:e,element:t,speakerId:r,room:o}){ca({track:e,element:t}),r&&gi(t,r).catch((()=>{})),yield ze(la,{element:t,room:o})}function*pa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ia({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void hr().debug("MCU Content already there");const n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.right="0",n.style.bottom="0",n.appendChild(o);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(n);const i=document.createElement("div");i.classList.add("mcuLayers"),i.style.display="none",s.appendChild(i);const a=document.createElement("div");a.classList.add("mcuContent"),a.style.position="relative",a.style.width="100%",a.style.height="100%",a.style.margin="0 auto",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.appendChild(s),e.style.width="100%",e.style.height="100%",e.appendChild(a),hr().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(na,{element:o})),hr().debug("MCU is ready..");const c=aa({rootElement:e,video:o,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ma={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ga=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),fa=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setInputVolume:vn.setInputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),va=()=>{},ya="video.memberList.updated",ba=Sr({event:ya}),_a=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(ba),Sa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],wa=e=>Sa.includes(e),ka=({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*Ea({pubSubChannel:e}){const t=new Map;function*r(r){const o={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:ka({action:r,memberList:t})};yield Ue(e,{type:_a,payload:o})}for(;;){const t=yield $e(e,(({type:e})=>wa(e)));yield ze(r,t)}}const Ca=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ba))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ar(Sa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,va)}));const o=({members:t})=>{e.emit(ya,{members:t})};return e.on(_a,o),{cleanup:()=>{e.off(_a,o)}}})(t,r);yield ze(Ea,{pubSubChannel:e}),t.once("destroy",(()=>{o()}))},Pa=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(Hs.memberPositionWorker,e)},Ta=function*(e){hr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:n,onFail:s}=e,{swEventChannel:i}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield $e(i,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield He(pn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield Ue(xo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),n?.()):s?.({error:new Error("Unknown parent_id")})}hr().trace("childMemberJoinedWorker ended")},Ia=Er(class extends ra{_screenShareList=new Set;_deviceList=new Set;_mirrored;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}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??[]}))}getEmitterTransforms(){return new Map([[["video.room.joined"],{type:"roomSession",instanceFactory:()=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})},playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})},streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...Hs.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Ca})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Pa,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!0,layout:i,positions:a}=e,c=await Ti({audio:!0===n?ma:n,video:s}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:i,positions:a},u=rn({store:this.store,Component:ga})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{u&&u.active&&u.leave()}))})),u.once("destroy",(()=>{u.emit("room.left"),this._screenShareList.delete(u)}));try{return u.runWorker("childMemberJoinedWorker",{worker:Ta,onDone:()=>t(u),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(u),o?await u.join():t(u)}catch(e){this.logger.error("ScreenShare Error",e),r(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:n=!1,video:s=!1}=e;if(!n&&!s)throw new TypeError("At least one of `audio` or `video` must be requested.");const i={...this.options,localStream:void 0,remoteStream:void 0,audio:n,video:s,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=rn({store:this.store,Component:fa})(i);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:Ta,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)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(da(e))}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit("_internal.mirror.video",this._mirrored)}}}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,deaf:vn.deafMember,undeaf:vn.undeafMember,setInputVolume:vn.setInputVolumeMember,setOutputVolume:vn.setOutputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setSpeakerVolume:vn.setOutputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember,removeMember:vn.removeMember,removeAllMembers:vn.removeAllMembers,getMembers:vn.getMembers,getLayouts:vn.getLayouts,setLayout:vn.setLayout,setPositions:vn.setPositions,setMemberPosition:vn.setMemberPosition,hideVideoMuted:vn.hideVideoMuted,showVideoMuted:vn.showVideoMuted,getRecordings:vn.getRecordings,startRecording:vn.startRecording,getPlaybacks:vn.getPlaybacks,play:vn.play,setHideVideoMuted:vn.setHideVideoMuted,getMeta:vn.getMeta,setMeta:vn.setMeta,updateMeta:vn.updateMeta,deleteMeta:vn.deleteMeta,getMemberMeta:vn.getMemberMeta,setMemberMeta:vn.setMemberMeta,updateMemberMeta:vn.updateMemberMeta,deleteMemberMeta:vn.deleteMemberMeta,promote:vn.promote,demote:vn.demote,getStreams:vn.getStreams,startStream:vn.startStream}),Ma=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:o}=t;for(;;){const e=yield $e(r,(e=>e.type.startsWith("video-manager.")));yield Ue(o,e)}};class Ra extends un{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ma})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class xa extends dn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=new Audio;let n;t.on("track",(function(s){"audio"===s.track.kind&&(n=r(ha,{track:s.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(ua({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},rn({store:c.store,customSagas:c.customSagas,Component:Ia})(c));var c;return n&&a.on("member.updated.audio_muted",(({member:e})=>{try{e.id===a.memberId&&"audio_muted"in e&&(e.audio_muted?a.stopOutboundAudio():a.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&a.on("member.updated.video_muted",(({member:e})=>{try{e.id===a.memberId&&"video_muted"in e&&(e.video_muted?a.stopOutboundVideo():a.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),a}}}get chat(){return this._chat||(this._chat=ws.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Os.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=rn({store:e.store,Component:Ra})(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(Jr.reauthAction({token:e}))}}function Oa(e){this.message=e}(Oa.prototype=new Error).name="InvalidCharacterError";var Aa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Oa("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,n=0,s=0,i="";o=t.charAt(s++);~o&&(r=n%4?64*r+o:o,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return i};function ja(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(Aa(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 Aa(t)}}function La(e){this.message=e}function Da(e,t){if("string"!=typeof e)throw new La("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(ja(e.split(".")[r]))}catch(e){throw new La("Invalid token specified: "+e.message)}}(La.prototype=new Error).name="InvalidTokenError";const Na="callId",Wa=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Va extends Io{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.21.0-dev.202306120940.aaa0747.0";constructor(e){let t;try{t=Da(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.info("Hijacking: search protocol for",e),Wa()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.info("Hijacking: persist protocol",e,this.relayProtocol),Wa()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Wa()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.info("Hijacking: persist auth state",t,e),Wa()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.info("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Wa()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Wa()?.removeItem(t),Wa()?.removeItem(Na)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=Da(this.options.token);return`${e?.r}`}catch(e){return""}}}const $a=e=>{const t={...e,emitter:new Dt},r=on({userOptions:t,SessionConstructor:Va});return rn({store:r,Component:xa})(t)},Ua=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ba=Object.freeze({__proto__:null,ChatMember:ws.ChatMember,ChatMessage:ws.ChatMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Ua.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const Fa=["getAllowedChannels","subscribe","publish"];var za=Object.freeze({__proto__:null,PubSubMessage:Os.PubSubMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:Fa.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}});async function Ha(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Ho(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const qa=({baseUrl:e,timeout:t=3e4,...r},o=Ha)=>async(n,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Ka({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(Qa({path:n,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Ka=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}),{}),Qa=({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()},Ga={aspectRatio:{ideal:16/9}},Ja=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:n=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,p=$a({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ga:n,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.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)})),Xa=["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"],Ya=["member.joined","layout.changed"],Za=()=>{},ec=function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s=!0,mirrorLocalVideoOverlay:i=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:u,localStream:l,...h}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const p=$a(h),m=p.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s,mirrorLocalVideoOverlay:i,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:u,localStream:l}),g=!1!==e?.reattach,f={joined:({call_id:e})=>{g&&Wa()?.setItem(Na,e)},init:()=>{if(!g)return;m.on("room.subscribed",f.joined);const e=Wa()?.getItem(Na);e&&(m.options.prevCallId=e)},destroy:()=>{g&&(m.off("room.subscribed",f.joined),Wa()?.removeItem(Na))}};m.once("destroy",(()=>{m.emit("room.left"),f.destroy(),p.disconnect()})),p.once("session.disconnected",(()=>{m.destroy()}));const v={join:e=>new Promise((async(o,n)=>{try{m.attachPreConnectWorkers(),await p.connect();const s=e?.audio??t,i=e?.video??r,a=p._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:n,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(n??r),v=Boolean(s??o),y=Boolean(i??r),b=Boolean(a??o);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return p.disconnect(),n(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));hr().debug("Set mediaOptions",c),m.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),m.once("room.subscribed",(e=>{m.attachOnSubscribedWorkers(e),o(m)})),f.init(),Ya.forEach((e=>m.once(e,Za))),await m.join()}catch(e){hr().error("RoomSession Join",e),p.disconnect(),n(e)}}))};return new Proxy(m,{get(e,t,r){if(t in v)return v[t];if(!e.active&&Xa.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)}})};var tc=Object.freeze({__proto__:null,RoomSession:ec,createRoomObject:Ja,joinRoom:e=>Ja({...e,autoJoin:!0}),createClient:$a}),rc=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",o=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:n}=await o(r),s=async e=>{const{search:t}=new URL(e),{body:n}=await o(`${r}${t}`);return i(n)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(n)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=qa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let o,n;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);o=new ec({token:t.token,...r}),n=e=>new Promise(((t,r)=>(o.on("room.joined",(e=>t(e))),o.join(e).catch((e=>r(e))))));const s={start:n};return new Proxy(o,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new ec({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}},registerDevice:async({host:e="fabric.signalwire.com",deviceType:t,deviceToken:r,accessToken:o})=>{const n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${o}`}}),{body:s}=await n("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return s},unregisterDevice:async({host:e="fabric.signalwire.com",accessToken:t,id:r})=>{const o=`/subscriber/devices/${r}`,n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}});return await n(o,{method:"DELETE"})}}),oc=Object.freeze({__proto__:null,getDevices:Ri,getCameraDevices:()=>Ri("camera"),getMicrophoneDevices:()=>Ri("microphone"),getSpeakerDevices:()=>Ri("speaker"),getDevicesWithPermissions:Ii,getCameraDevicesWithPermissions:()=>Ii("camera"),getMicrophoneDevicesWithPermissions:()=>Ii("microphone"),getSpeakerDevicesWithPermissions:()=>Ii("speaker"),checkPermissions:wi,checkCameraPermissions:ki,checkMicrophonePermissions:Ei,checkSpeakerPermissions:Ci,requestPermissions:async e=>{try{const t=await Pi(e);fi(t)}catch(e){throw e}},createDeviceWatcher:Ni,createCameraDeviceWatcher:()=>Ni({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Ni({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>Ni({targets:["speaker"]}),supportsMediaDevices:ui,supportsGetUserMedia:()=>"function"==typeof li().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof li().getDisplayMedia,getUserMedia:Pi,getDisplayMedia:Ti,enumerateDevices:_i,getSupportedConstraints:hi,supportsMediaOutput:mi,setMediaElementSinkId:gi,stopStream:fi,stopTrack:vi,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Wi(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},Pi(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,o=new(window.AudioContext||window.webkitAudioContext),n=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let s,i;try{o.createMediaStreamSource(t).connect(n)}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(n.frequencyBinCount);n.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;i!==t&&(i=t,r.emit("volumeChanged",Math.min(i,100))),s=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};s=requestAnimationFrame(a);const c=()=>{s&&cancelAnimationFrame(s),"closed"!==o.state&&o.close().catch((e=>{hr().error("Error closing the AudioContext",e)})),Wi(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=Ba,e.Fabric=rc,e.PubSub=za,e.Video=tc,e.WebRTC=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
20
|
+
***************************************************************************** */const Ki=e=>gr(e.type),Qi=function*(e){hr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const i=jo.createCatchableSaga((function*(e){const{id:t,method:o,params:n={}}=e.payload,{callID:s,nodeId:i}=n,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${o}'`,n);const c=r.peer;switch(o){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===o?"early":"active"),(null==n?void 0:n.sdp)&&a.onRemoteSdp(n.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==n?void 0:n.cause,byeCauseCode:null==n?void 0:n.causeCode,redirectDestination:null==n?void 0:n.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.ping":{const{nodeId:e}=n,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 n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(n,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!n.mediaParams){hr().warn("Invalid mediaParams event",n);break}const{audio:e,video:t}=n.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${o}`,n)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield $e(n,(e=>{var t;return!!Ki(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Gi=function*(e){hr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:s}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield $e(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield Ue(xo.upsert({id:a.payload.call_id,roomId:a.payload.room_session.room_id,roomSessionId:a.payload.room_session.id,memberId:a.payload.member_id,previewUrl:a.payload.room_session.preview_url})),yield Ue(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Ji=function*(e){hr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield $e(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield Ue(Eo.updateAuthState(i.payload.authorization));const a=yield He(di.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.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(),hr().debug("promoteDemoteWorker ended",s)},Xi=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield $e([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Yi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Zi=Object.assign(Object.assign({},Yi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),ea={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},ta={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Yi,video:ea,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class ra extends cn{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const s=this.getRTCPeerById(t);return s?n&&s.localSdp?(this.logger.debug("Redirect Destination to:",n,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,n)):(s.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==s?void 0:s.uuid)&&this.setState("hangup"))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},ta),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this.applyEmitterTransforms({local:!0})}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 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(di.getIceServers)}get component(){return this.select((e=>pn.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u,version:1e3}}}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 localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get localAudioTrack(){return this.peer?this.peer.localAudioTrack: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.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)}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(!pi(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),n=e.getAudioTracks();n.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),n.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const s=this.localStream.getVideoTracks(),i=e.getVideoTracks();i.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(s.forEach((e=>{var t;vi(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)}))),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(di.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new qi(this,"offer");this.appendRTCPeer(e),this.logger.debug("Run workers for the new RTCPeer",e.uuid),this.runRTCPeerWorkers(e.uuid),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 n;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 void this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped");let s;try{s=await Ti(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let o={};null===(n=this.localStream)||void 0===n||n.getTracks().forEach((t=>{var r;o[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),vi(t),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{return r(this.updateConstraints(e,{attempt:t+1}))}catch(e){return this.logger.error("Restoring previous constraints"),r(this.updateConstraints(o,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),o(s)}await this.updateStream(s),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:t}=this.peer,r=e.getTracks();this.logger.debug(`updateStream got ${r.length} tracks`);for(let e=0;e<r.length;e++){const o=r[e];this.logger.debug("updateStream apply track: ",o);const n=t.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===o.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===o.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));n&&n.sender?(this.logger.debug("updateStream got transceiver",n.currentDirection,n.mid),await n.sender.replaceTrack(o),this.logger.debug("updateStream replaceTrack"),n.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===o.kind&&e.id!==o.id&&(this.logger.debug("updateStream stop old track and apply new one - "),vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(o)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(o),t.addTrack(o,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===o.kind?this.options.micId=o.getSettings().deviceId:"video"===o.kind&&(this.options.camId=o.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:Qi,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Gi,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Ji,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new qi(this,"offer");try{this.runRTCPeerWorkers(this.peer.uuid),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=new qi(this,"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":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Xi})}async resume(){var e;if(this.logger.debug(`[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}:{},n=zr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let s=[];s=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions();const i=await this.vertoExecute({message:n,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t});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=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}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")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}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=ea),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Zi:Yi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const oa=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},na=({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()}))})),sa=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ia=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},aa=({video:e,rootElement:t,paddingWrapper:r})=>{const o=e.videoHeight/e.videoWidth*100,n=function(e,t=0,r){let o=null,n=null;const s=function(){o&&(clearTimeout(o),n=null,o=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!o;return s(),n=function(){e.apply(i,a)},o=setTimeout((function(){if(o=null,!c){const e=n;return n=null,null==e?void 0:e()}}),t),c&&n?n():void 0};return i.cancel=s,i.flush=function(){const e=n;s(),e&&e()},i}((({width:t,height:n})=>{if(r){const s=n/t*100;r.style.paddingBottom=`${s>o?o:s}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,n)}}),100),s=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;n({width:t,height:r})}else e.contentRect&&n({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},ca=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),da=Jr.createAction("swJs/audioSetSpeakerAction"),ua=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,s=oa(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),n.set(this.id,e)):(hr().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return hr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:o,localStream:n})=>{hr().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===o));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=sa(e),s=document.createElement("div");return s.style.position="absolute",s.style.overflow="hidden",s.style.top=t,s.style.left=r,s.style.width=o,s.style.height=n,s})({location:i}),a.id=e.id;const r=oa();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const o=t.querySelector(".mcuLayers"),s=o?.querySelector(`#${a.id}`);return o&&!s?(hr().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=sa(i);hr().debug("Update myLayer:",c,d,u,l);const h=n.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(n),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("_internal.mirror.video",(e=>{i.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=o(pa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),n.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*la({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,da);for(;;){const o=yield $e([r]);try{if(o.type===r){const r=yield Fe(gi,e,o.payload);t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*ha({track:e,element:t,speakerId:r,room:o}){ca({track:e,element:t}),r&&gi(t,r).catch((()=>{})),yield ze(la,{element:t,room:o})}function*pa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ia({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void hr().debug("MCU Content already there");const n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.right="0",n.style.bottom="0",n.appendChild(o);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(n);const i=document.createElement("div");i.classList.add("mcuLayers"),i.style.display="none",s.appendChild(i);const a=document.createElement("div");a.classList.add("mcuContent"),a.style.position="relative",a.style.width="100%",a.style.height="100%",a.style.margin="0 auto",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.appendChild(s),e.style.width="100%",e.style.height="100%",e.appendChild(a),hr().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(na,{element:o})),hr().debug("MCU is ready..");const c=aa({rootElement:e,video:o,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ma={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ga=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),fa=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setInputVolume:vn.setInputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),va=()=>{},ya="video.memberList.updated",ba=Sr({event:ya}),_a=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(ba),Sa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],wa=e=>Sa.includes(e),ka=({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*Ea({pubSubChannel:e}){const t=new Map;function*r(r){const o={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:ka({action:r,memberList:t})};yield Ue(e,{type:_a,payload:o})}for(;;){const t=yield $e(e,(({type:e})=>wa(e)));yield ze(r,t)}}const Ca=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ba))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ar(Sa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,va)}));const o=({members:t})=>{e.emit(ya,{members:t})};return e.on(_a,o),{cleanup:()=>{e.off(_a,o)}}})(t,r);yield ze(Ea,{pubSubChannel:e}),t.once("destroy",(()=>{o()}))},Ta=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(Hs.memberPositionWorker,e)},Pa=function*(e){hr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:n,onFail:s}=e,{swEventChannel:i}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield $e(i,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield He(pn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield Ue(xo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),n?.()):s?.({error:new Error("Unknown parent_id")})}hr().trace("childMemberJoinedWorker ended")},Ia=Er(class extends ra{_screenShareList=new Set;_deviceList=new Set;_mirrored;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}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??[]}))}getEmitterTransforms(){return new Map([[["video.room.joined"],{type:"roomSession",instanceFactory:()=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})},playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})},streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...Hs.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Ca})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Ta,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!0,layout:i,positions:a}=e,c=await Pi({audio:!0===n?ma:n,video:s}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:i,positions:a},u=rn({store:this.store,Component:ga})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{u&&u.active&&u.leave()}))})),u.once("destroy",(()=>{u.emit("room.left"),this._screenShareList.delete(u)}));try{return u.runWorker("childMemberJoinedWorker",{worker:Pa,onDone:()=>t(u),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(u),o?await u.join():t(u)}catch(e){this.logger.error("ScreenShare Error",e),r(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:n=!1,video:s=!1}=e;if(!n&&!s)throw new TypeError("At least one of `audio` or `video` must be requested.");const i={...this.options,localStream:void 0,remoteStream:void 0,audio:n,video:s,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=rn({store:this.store,Component:fa})(i);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:Pa,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)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(da(e))}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit("_internal.mirror.video",this._mirrored)}}}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,deaf:vn.deafMember,undeaf:vn.undeafMember,setInputVolume:vn.setInputVolumeMember,setOutputVolume:vn.setOutputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setSpeakerVolume:vn.setOutputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember,removeMember:vn.removeMember,removeAllMembers:vn.removeAllMembers,getMembers:vn.getMembers,getLayouts:vn.getLayouts,setLayout:vn.setLayout,setPositions:vn.setPositions,setMemberPosition:vn.setMemberPosition,hideVideoMuted:vn.hideVideoMuted,showVideoMuted:vn.showVideoMuted,getRecordings:vn.getRecordings,startRecording:vn.startRecording,getPlaybacks:vn.getPlaybacks,play:vn.play,setHideVideoMuted:vn.setHideVideoMuted,getMeta:vn.getMeta,setMeta:vn.setMeta,updateMeta:vn.updateMeta,deleteMeta:vn.deleteMeta,getMemberMeta:vn.getMemberMeta,setMemberMeta:vn.setMemberMeta,updateMemberMeta:vn.updateMemberMeta,deleteMemberMeta:vn.deleteMemberMeta,promote:vn.promote,demote:vn.demote,getStreams:vn.getStreams,startStream:vn.startStream}),Ma=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:o}=t;for(;;){const e=yield $e(r,(e=>e.type.startsWith("video-manager.")));yield Ue(o,e)}};class Ra extends un{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ma})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class xa extends dn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=new Audio;let n;t.on("track",(function(s){"audio"===s.track.kind&&(n=r(ha,{track:s.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(ua({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},rn({store:c.store,customSagas:c.customSagas,Component:Ia})(c));var c;return n&&a.on("member.updated.audio_muted",(({member:e})=>{try{e.id===a.memberId&&"audio_muted"in e&&(e.audio_muted?a.stopOutboundAudio():a.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&a.on("member.updated.video_muted",(({member:e})=>{try{e.id===a.memberId&&"video_muted"in e&&(e.video_muted?a.stopOutboundVideo():a.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),a}}}get chat(){return this._chat||(this._chat=ws.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Os.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=rn({store:e.store,Component:Ra})(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(Jr.reauthAction({token:e}))}}function Oa(e){this.message=e}(Oa.prototype=new Error).name="InvalidCharacterError";var Aa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Oa("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,n=0,s=0,i="";o=t.charAt(s++);~o&&(r=n%4?64*r+o:o,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return i};function ja(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(Aa(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 Aa(t)}}function La(e){this.message=e}function Da(e,t){if("string"!=typeof e)throw new La("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(ja(e.split(".")[r]))}catch(e){throw new La("Invalid token specified: "+e.message)}}(La.prototype=new Error).name="InvalidTokenError";const Na="callId",Wa=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Va extends Io{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.21.0";constructor(e){let t;try{t=Da(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.trace("Hijacking: search protocol for",e),Wa()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.trace("Hijacking: persist protocol",e,this.relayProtocol),Wa()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Wa()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.trace("Hijacking: persist auth state",t,e),Wa()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.trace("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Wa()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Wa()?.removeItem(t),Wa()?.removeItem(Na)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=Da(this.options.token);return`${e?.r}`}catch(e){return""}}}const $a=e=>{const t={...e,emitter:new Dt},r=on({userOptions:t,SessionConstructor:Va});return rn({store:r,Component:xa})(t)},Ua=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ba=Object.freeze({__proto__:null,ChatMember:ws.ChatMember,ChatMessage:ws.ChatMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Ua.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const Fa=["getAllowedChannels","subscribe","publish"];var za=Object.freeze({__proto__:null,PubSubMessage:Os.PubSubMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:Fa.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}});async function Ha(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Ho(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const qa=({baseUrl:e,timeout:t=3e4,...r},o=Ha)=>async(n,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Ka({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(Qa({path:n,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Ka=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}),{}),Qa=({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()},Ga={aspectRatio:{ideal:16/9}},Ja=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:n=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,p=$a({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ga:n,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.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)})),Xa=["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"],Ya=["member.joined","layout.changed"],Za=()=>{},ec=function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s=!0,mirrorLocalVideoOverlay:i=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:u,localStream:l,...h}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const p=$a(h),m=p.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s,mirrorLocalVideoOverlay:i,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:u,localStream:l}),g=!1!==e?.reattach,f={joined:({call_id:e})=>{g&&Wa()?.setItem(Na,e)},init:()=>{if(!g)return;m.on("room.subscribed",f.joined);const e=Wa()?.getItem(Na);e&&(m.options.prevCallId=e)},destroy:()=>{g&&(m.off("room.subscribed",f.joined),Wa()?.removeItem(Na))}};m.once("destroy",(()=>{m.emit("room.left",{reason:m.leaveReason}),f.destroy(),p.disconnect()})),p.once("session.disconnected",(()=>{m.destroy()}));const v={join:e=>new Promise((async(o,n)=>{try{m.attachPreConnectWorkers(),await p.connect();const s=e?.audio??t,i=e?.video??r,a=p._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:n,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(n??r),v=Boolean(s??o),y=Boolean(i??r),b=Boolean(a??o);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return p.disconnect(),n(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));hr().debug("Set mediaOptions",c),m.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),m.once("room.subscribed",(e=>{m.attachOnSubscribedWorkers(e),o(m)})),f.init(),Ya.forEach((e=>m.once(e,Za))),await m.join()}catch(e){hr().error("RoomSession Join",e),p.disconnect(),n(e)}}))};return new Proxy(m,{get(e,t,r){if(t in v)return v[t];if(!e.active&&Xa.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)}})};var tc=Object.freeze({__proto__:null,RoomSession:ec,createRoomObject:Ja,joinRoom:e=>Ja({...e,autoJoin:!0}),createClient:$a}),rc=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",o=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:n}=await o(r),s=async e=>{const{search:t}=new URL(e),{body:n}=await o(`${r}${t}`);return i(n)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(n)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=qa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let o,n;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);o=new ec({token:t.token,...r}),n=e=>new Promise(((t,r)=>(o.on("room.joined",(e=>t(e))),o.join(e).catch((e=>r(e))))));const s={start:n};return new Proxy(o,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new ec({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}},registerDevice:async({host:e="fabric.signalwire.com",deviceType:t,deviceToken:r,accessToken:o})=>{const n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${o}`}}),{body:s}=await n("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return s},unregisterDevice:async({host:e="fabric.signalwire.com",accessToken:t,id:r})=>{const o=`/subscriber/devices/${r}`,n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}});return await n(o,{method:"DELETE"})}}),oc=Object.freeze({__proto__:null,getDevices:Ri,getCameraDevices:()=>Ri("camera"),getMicrophoneDevices:()=>Ri("microphone"),getSpeakerDevices:()=>Ri("speaker"),getDevicesWithPermissions:Ii,getCameraDevicesWithPermissions:()=>Ii("camera"),getMicrophoneDevicesWithPermissions:()=>Ii("microphone"),getSpeakerDevicesWithPermissions:()=>Ii("speaker"),checkPermissions:wi,checkCameraPermissions:ki,checkMicrophonePermissions:Ei,checkSpeakerPermissions:Ci,requestPermissions:async e=>{try{const t=await Ti(e);fi(t)}catch(e){throw e}},createDeviceWatcher:Ni,createCameraDeviceWatcher:()=>Ni({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Ni({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>Ni({targets:["speaker"]}),supportsMediaDevices:ui,supportsGetUserMedia:()=>"function"==typeof li().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof li().getDisplayMedia,getUserMedia:Ti,getDisplayMedia:Pi,enumerateDevices:_i,getSupportedConstraints:hi,supportsMediaOutput:mi,setMediaElementSinkId:gi,stopStream:fi,stopTrack:vi,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Wi(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},Ti(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,o=new(window.AudioContext||window.webkitAudioContext),n=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let s,i;try{o.createMediaStreamSource(t).connect(n)}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(n.frequencyBinCount);n.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;i!==t&&(i=t,r.emit("volumeChanged",Math.min(i,100))),s=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};s=requestAnimationFrame(a);const c=()=>{s&&cancelAnimationFrame(s),"closed"!==o.state&&o.close().catch((e=>{hr().error("Error closing the AudioContext",e)})),Wi(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=Ba,e.Fabric=rc,e.PubSub=za,e.Video=tc,e.WebRTC=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
21
21
|
//# sourceMappingURL=index.umd.js.map
|