@signalwire/js 3.17.0-dev.202211101554.ff4eda6.0 → 3.17.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 +4 -1
- package/dist/core/src/BaseSession.d.ts.map +1 -1
- package/dist/core/src/redux/actions.d.ts +0 -2
- package/dist/core/src/redux/actions.d.ts.map +1 -1
- package/dist/core/src/redux/rootSaga.d.ts +0 -16
- package/dist/core/src/redux/rootSaga.d.ts.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- 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/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/chat/Client.test.ts +34 -4
- package/src/createClient.test.ts +4 -0
- package/src/pubSub/Client.test.ts +13 -10
package/dist/index.umd.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SignalWire JS SDK v3.17.0
|
|
2
|
+
* SignalWire JS SDK v3.17.0 (https://signalwire.com)
|
|
3
3
|
* Copyright 2018-2022 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,n;r=t,n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"];function o(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(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?s:void 0!==console[n]?o(console,n):void 0!==console.log?o(console,"log"):e)}function a(t,r){for(var o=0;o<n.length;o++){var s=n[o];this[s]=o<t?e:this.methodFactory(s,t,r)}this.log=this.debug}function c(e,r,n){return function(){typeof console!==t&&(a.call(this,r,n),this[e].apply(this,arguments))}}function d(e,t,r){return i(e)||c.apply(this,arguments)}function u(e,r,o){var s,i=this;r=null==r?"WARN":r;var c="loglevel";function u(){var e;if(typeof window!==t&&c){try{e=window.localStorage[c]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,n=r.indexOf(encodeURIComponent(c)+"=");-1!==n&&(e=/^([^;]+)/.exec(r.slice(n))[1])}catch(e){}return void 0===i.levels[e]&&(e=void 0),e}}"string"==typeof e?c+=":"+e:"symbol"==typeof e&&(c=void 0),i.name=e,i.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},i.methodFactory=o||d,i.getLevel=function(){return s},i.setLevel=function(r,o){if("string"==typeof r&&void 0!==i.levels[r.toUpperCase()]&&(r=i.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=i.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(s=r,!1!==o&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&c){try{return void(window.localStorage[c]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(c)+"="+r+";"}catch(e){}}}(r),a.call(i,r,e),typeof console===t&&r<i.levels.SILENT)return"No console available for logging"},i.setDefaultLevel=function(e){r=e,u()||i.setLevel(e,!1)},i.resetLevel=function(){i.setLevel(r,!1),function(){if(typeof window!==t&&c){try{return void window.localStorage.removeItem(c)}catch(e){}try{window.document.cookie=encodeURIComponent(c)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},i.enableAll=function(e){i.setLevel(i.levels.TRACE,e)},i.disableAll=function(e){i.setLevel(i.levels.SILENT,e)};var l=u();null==l&&(l=r),i.setLevel(l,!1)}var l=new u,h={};l.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=h[e];return t||(t=h[e]=new u(e,l.getLevel(),l.methodFactory)),t};var m=typeof window!==t?window.log:void 0;return l.noConflict=function(){return typeof window!==t&&window.log===l&&(window.log=m),l},l.getLoggers=function(){return h},l.default=l,l},e.exports?e.exports=n():r.log=n()}(r);var n,o=r.exports,s=new Uint8Array(16);function i(){if(!n&&!(n="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 n(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}function h(e,t,r){function n(e,n,o,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 n&&(n=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}(n)),16!==n.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(n),i.set(e,n.length),(i=r(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,o){s=s||0;for(var a=0;a<16;++a)o[s+a]=i[a];return o}return l(i)}try{n.name=e}catch(e){}return n.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",n.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",n}function m(e){return 14+(e+64>>>9<<4)+1}function p(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function g(e,t,r,n,o,s){return p((i=p(p(t,e),p(n,s)))<<(a=o)|i>>>32-a,r);var i,a}function f(e,t,r,n,o,s,i){return g(t&r|~t&n,e,t,o,s,i)}function v(e,t,r,n,o,s,i){return g(t&n|r&~n,e,t,o,s,i)}function y(e,t,r,n,o,s,i){return g(t^r^n,e,t,o,s,i)}function b(e,t,r,n,o,s,i){return g(r^(t|~n),e,t,o,s,i)}function _(e,t,r){var n=(e=e||{}).random||(e.rng||i)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var o=0;o<16;++o)t[r+o]=n[o];return t}return l(n)}function w(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:return t^r^n;case 2:return t&r^t&n^r&n;case 3:return t^r^n}}function S(e,t){return e<<t|e>>>32-t}function k(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach((function(t){k(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function T(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}h("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,n="0123456789abcdef",o=0;o<r;o+=8){var s=e[o>>5]>>>o%32&255,i=parseInt(n.charAt(s>>>4&15)+n.charAt(15&s),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[m(t)-1]=t;for(var r=1732584193,n=-271733879,o=-1732584194,s=271733878,i=0;i<e.length;i+=16){var a=r,c=n,d=o,u=s;r=f(r,n,o,s,e[i],7,-680876936),s=f(s,r,n,o,e[i+1],12,-389564586),o=f(o,s,r,n,e[i+2],17,606105819),n=f(n,o,s,r,e[i+3],22,-1044525330),r=f(r,n,o,s,e[i+4],7,-176418897),s=f(s,r,n,o,e[i+5],12,1200080426),o=f(o,s,r,n,e[i+6],17,-1473231341),n=f(n,o,s,r,e[i+7],22,-45705983),r=f(r,n,o,s,e[i+8],7,1770035416),s=f(s,r,n,o,e[i+9],12,-1958414417),o=f(o,s,r,n,e[i+10],17,-42063),n=f(n,o,s,r,e[i+11],22,-1990404162),r=f(r,n,o,s,e[i+12],7,1804603682),s=f(s,r,n,o,e[i+13],12,-40341101),o=f(o,s,r,n,e[i+14],17,-1502002290),r=v(r,n=f(n,o,s,r,e[i+15],22,1236535329),o,s,e[i+1],5,-165796510),s=v(s,r,n,o,e[i+6],9,-1069501632),o=v(o,s,r,n,e[i+11],14,643717713),n=v(n,o,s,r,e[i],20,-373897302),r=v(r,n,o,s,e[i+5],5,-701558691),s=v(s,r,n,o,e[i+10],9,38016083),o=v(o,s,r,n,e[i+15],14,-660478335),n=v(n,o,s,r,e[i+4],20,-405537848),r=v(r,n,o,s,e[i+9],5,568446438),s=v(s,r,n,o,e[i+14],9,-1019803690),o=v(o,s,r,n,e[i+3],14,-187363961),n=v(n,o,s,r,e[i+8],20,1163531501),r=v(r,n,o,s,e[i+13],5,-1444681467),s=v(s,r,n,o,e[i+2],9,-51403784),o=v(o,s,r,n,e[i+7],14,1735328473),r=y(r,n=v(n,o,s,r,e[i+12],20,-1926607734),o,s,e[i+5],4,-378558),s=y(s,r,n,o,e[i+8],11,-2022574463),o=y(o,s,r,n,e[i+11],16,1839030562),n=y(n,o,s,r,e[i+14],23,-35309556),r=y(r,n,o,s,e[i+1],4,-1530992060),s=y(s,r,n,o,e[i+4],11,1272893353),o=y(o,s,r,n,e[i+7],16,-155497632),n=y(n,o,s,r,e[i+10],23,-1094730640),r=y(r,n,o,s,e[i+13],4,681279174),s=y(s,r,n,o,e[i],11,-358537222),o=y(o,s,r,n,e[i+3],16,-722521979),n=y(n,o,s,r,e[i+6],23,76029189),r=y(r,n,o,s,e[i+9],4,-640364487),s=y(s,r,n,o,e[i+12],11,-421815835),o=y(o,s,r,n,e[i+15],16,530742520),r=b(r,n=y(n,o,s,r,e[i+2],23,-995338651),o,s,e[i],6,-198630844),s=b(s,r,n,o,e[i+7],10,1126891415),o=b(o,s,r,n,e[i+14],15,-1416354905),n=b(n,o,s,r,e[i+5],21,-57434055),r=b(r,n,o,s,e[i+12],6,1700485571),s=b(s,r,n,o,e[i+3],10,-1894986606),o=b(o,s,r,n,e[i+10],15,-1051523),n=b(n,o,s,r,e[i+1],21,-2054922799),r=b(r,n,o,s,e[i+8],6,1873313359),s=b(s,r,n,o,e[i+15],10,-30611744),o=b(o,s,r,n,e[i+6],15,-1560198380),n=b(n,o,s,r,e[i+13],21,1309151649),r=b(r,n,o,s,e[i+4],6,-145523070),s=b(s,r,n,o,e[i+11],10,-1120210379),o=b(o,s,r,n,e[i+2],15,718787259),n=b(n,o,s,r,e[i+9],21,-343485551),r=p(r,a),n=p(n,c),o=p(o,d),s=p(s,u)}return[r,n,o,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(m(t)),n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))})),h("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var n=unescape(encodeURIComponent(e));e=[];for(var o=0;o<n.length;++o)e.push(n.charCodeAt(o))}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 m=16;m<80;++m)l[m]=S(l[m-3]^l[m-8]^l[m-14]^l[m-16],1);for(var p=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var _=Math.floor(b/20),k=S(p,5)+w(_,g,f,v)+y+t[_]+l[b]>>>0;y=v,v=f,f=S(g,30)>>>0,g=p,p=k}r[0]=r[0]+p>>>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 I="function"==typeof Symbol&&Symbol.observable||"@@observable",M=function(){return Math.random().toString(36).substring(7).split("").join(".")},P={INIT:"@@redux/INIT"+M(),REPLACE:"@@redux/REPLACE"+M(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+M()}};function R(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}function O(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(T(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(T(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(T(2));var o=e,s=t,i=[],a=i,c=!1;function d(){a===i&&(a=i.slice())}function u(){if(c)throw new Error(T(3));return s}function l(e){if("function"!=typeof e)throw new Error(T(4));if(c)throw new Error(T(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(T(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=null}}}function h(e){if(!R(e))throw new Error(T(7));if(void 0===e.type)throw new Error(T(8));if(c)throw new Error(T(9));try{c=!0,s=o(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}function m(e){if("function"!=typeof e)throw new Error(T(10));o=e,h({type:P.REPLACE})}function p(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(T(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[I]=function(){return this},e}return h({type:P.INIT}),(n={dispatch:h,subscribe:l,getState:u,replaceReducer:m})[I]=p,n}function A(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++){var o=t[n];"function"==typeof e[o]&&(r[o]=e[o])}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:P.INIT}))throw new Error(T(12));if(void 0===r(void 0,{type:P.PROBE_UNKNOWN_ACTION()}))throw new Error(T(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var n=!1,o={},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(T(14));o[c]=u,n=n||u!==d}return(n=n||i.length!==Object.keys(e).length)?o:e}}function x(e,t){return function(){return t(e.apply(this,arguments))}}function j(){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 L(){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),n=function(){throw new Error(T(15))},o={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},s=t.map((function(e){return e(o)}));return n=j.apply(void 0,s)(r.dispatch),C(C({},r),{},{dispatch:n})}}}var N=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:P,applyMiddleware:L,bindActionCreators:function(e,t){if("function"==typeof e)return x(e,t);if("object"!=typeof e||null===e)throw new Error(T(16));var r={};for(var n in e){var o=e[n];"function"==typeof o&&(r[n]=x(o,t))}return r},combineReducers:A,compose:j,createStore:O,legacy_createStore:O}),D=function(e){return"@@redux-saga/"+e},W=D("CANCEL_PROMISE"),V=D("CHANNEL_END"),U=D("IO"),$=D("MATCH"),B=D("MULTICAST"),q=D("SAGA_ACTION"),F=D("SELF_CANCELLATION"),H=D("TASK"),z=D("TASK_CANCEL"),Q=D("TERMINATE"),J=D("LOCATION");function G(){return(G=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var K=function(e){return null==e},X=function(e){return null!=e},Y=function(e){return"function"==typeof e},Z=function(e){return"string"==typeof e},ee=Array.isArray,te=function(e){return e&&Y(e.then)},re=function(e){return e&&Y(e.next)&&Y(e.throw)},ne=function e(t){return t&&(Z(t)||se(t)||Y(t)||ee(t)&&t.every(e))},oe=function(e){return e&&Y(e.take)&&Y(e.close)},se=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype};function ie(e,t){var r;void 0===t&&(t=!0);var n=new Promise((function(n){r=setTimeout(n,e,t)}));return n[W]=function(){clearTimeout(r)},n}var ae=function(e){return function(){return!0}}(),ce=function(){},de=function(e){return e},ue=function(e,t){G(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))};function le(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function he(e){var t=!1;return function(){t||(t=!0,e())}}var me=function(e){throw e},pe=function(e){return{value:e,done:!0}};function ge(e,t,r){void 0===t&&(t=me),void 0===r&&(r="iterator");var n={meta:{name:r},next:e,throw:t,return:pe,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(n[Symbol.iterator]=function(){return n}),n}function fe(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var ve=function(e){return Array.apply(null,new Array(e))},ye=function(e){return function(t){return e(Object.defineProperty(t,q,{value:!0}))}},be=function(e){return e===Q},_e=function(e){return e===z},we=function(e){return be(e)||_e(e)};function Se(e,t){var r,n=Object.keys(e),o=n.length,s=0,i=ee(e)?ve(o):{},a={};return n.forEach((function(e){var n=function(n,a){r||(a||we(n)?(t.cancel(),t(n,a)):(i[e]=n,++s===o&&(r=!0,t(i))))};n.cancel=ce,a[e]=n})),t.cancel=function(){r||(r=!0,n.forEach((function(e){return a[e].cancel()})))},a}function ke(e){return{name:e.name||"anonymous",location:Ee(e)}}function Ee(e){return e[J]}var Ce={isEmpty:ae,put:ce,take:ce},Te="TAKE",Ie="CALL",Me="FORK",Pe="SELECT",Re=function(e,t){var r;return(r={})[U]=!0,r.combinator=!1,r.type=e,r.payload=t,r},Oe=function(e){return Re(Me,G({},e.payload,{detached:!0}))};function Ae(e,t){return void 0===e&&(e="*"),ne(e)?Re(Te,{pattern:e}):oe(r=e)&&r[B]&&X(t)&&ne(t)?Re(Te,{channel:e,pattern:t}):oe(e)?Re(Te,{channel:e}):void 0;var r}function xe(e,t){return K(t)&&(t=e,e=void 0),Re("PUT",{channel:e,action:t})}function je(e,t){var r,n=null;return Y(e)?r=e:(ee(e)?(n=e[0],r=e[1]):(n=e.context,r=e.fn),n&&Z(r)&&Y(n[r])&&(r=n[r])),{context:n,fn:r,args:t}}function Le(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Re(Ie,je(e,r))}function Ne(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Re(Me,je(e,r))}function De(e){void 0===e&&(e=de);for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Re(Pe,{selector:e,args:r})}function We(){return Re("CANCELLED",{})}var Ve=Le.bind(null,ie),Ue=[],$e=0;function Be(e){try{He(),e()}finally{ze()}}function qe(e){Ue.push(e),$e||(He(),Qe())}function Fe(e){try{return He(),e()}finally{Qe()}}function He(){$e++}function ze(){$e--}function Qe(){var e;for(ze();!$e&&void 0!==(e=Ue.shift());)Be(e)}var Je=function(e){return function(t){return e.some((function(e){return Ze(e)(t)}))}},Ge=function(e){return function(t){return e(t)}},Ke=function(e){return function(t){return t.type===String(e)}},Xe=function(e){return function(t){return t.type===e}},Ye=function(){return ae};function Ze(e){var t="*"===e?Ye:Z(e)?Ke:ee(e)?Je:function(e){return Y(e)&&e.hasOwnProperty("toString")}(e)?Ke:Y(e)?Ge:se(e)?Xe:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var et={type:V},tt=function(e){return e&&e.type===V};function rt(e){void 0===e&&(e=function(e,t){void 0===e&&(e=10);var r=new Array(e),n=0,o=0,s=0,i=function(){if(0!=n){var t=r[s];return r[s]=null,n--,s=(s+1)%e,t}},a=function(){for(var e=[];n;)e.push(i());return e};return{isEmpty:function(){return 0==n},put:function(t){var i;n<e||(i=2*e,r=a(),n=r.length,o=r.length,s=0,r.length=i,e=i),function(t){r[o]=t,o=(o+1)%e,n++}(t)},take:i,flush:a}}(void 0));var t=!1,r=[];return{take:function(n){t&&e.isEmpty()?n(et):e.isEmpty()?(r.push(n),n.cancel=function(){le(r,n)}):n(e.take())},put:function(n){if(!t){if(0===r.length)return e.put(n);r.shift()(n)}},flush:function(r){t&&e.isEmpty()?r(et):r(e.flush())},close:function(){if(!t){t=!0;var e=r;r=[];for(var n=0,o=e.length;n<o;n++)(0,e[n])(et)}}}}function nt(e,t){void 0===t&&(t=Ce);var r,n=!1,o=rt(t),s=function(){n||(n=!0,Y(r)&&r(),o.close())};return r=he(r=e((function(e){tt(e)?s():o.put(e)}))),n&&r(),{take:o.take,flush:o.flush,close:s}}function ot(){var e,t=!1,r=[],n=r,o=function(){n===r&&(n=r.slice())},s=function(){t=!0;var e=r=n;n=[],e.forEach((function(e){e(et)}))};return(e={})[B]=!0,e.put=function(e){if(!t)if(tt(e))s();else for(var o=r=n,i=0,a=o.length;i<a;i++){var c=o[i];c[$](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=Ye),t?e(et):(e[$]=r,o(),n.push(e),e.cancel=he((function(){o(),le(n,e)})))},e.close=s,e}function st(){var e=ot(),t=e.put;return e.put=function(e){e[q]?t(e):qe((function(){t(e)}))},e}function it(e,t){var r=e[W];Y(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var at,ct=0,dt=function(){return++ct};function ut(e){e.isRunning()&&e.cancel()}var lt=((at={}).TAKE=function(e,t,r){var n=t.channel,o=void 0===n?e.channel:n,s=t.pattern,i=t.maybe,a=function(e){e instanceof Error?r(e,!0):!tt(e)||i?r(e):r(Q)};try{o.take(a,X(s)?Ze(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},at.PUT=function(e,t,r){var n=t.channel,o=t.action,s=t.resolve;qe((function(){var t;try{t=(n?n.put:e.dispatch)(o)}catch(e){return void r(e,!0)}s&&te(t)?it(t,r):r(t)}))},at.ALL=function(e,t,r,n){var o=n.digestEffect,s=ct,i=Object.keys(t);if(0!==i.length){var a=Se(t,r);i.forEach((function(e){o(t[e],s,a[e],e)}))}else r(ee(t)?[]:{})},at.RACE=function(e,t,r,n){var o=n.digestEffect,s=ct,i=Object.keys(t),a=ee(t)?ve(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,n){d||(n||we(t)?(r.cancel(),r(t,n)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=ce,c[e]=t})),r.cancel=function(){d||(d=!0,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||o(t[e],s,c[e],e)}))},at.CALL=function(e,t,r,n){var o=t.context,s=t.fn,i=t.args,a=n.task;try{var c=s.apply(o,i);if(te(c))return void it(c,r);if(re(c))return void _t(e,c,a.context,ct,ke(s),!1,r);r(c)}catch(e){r(e,!0)}},at.CPS=function(e,t,r){var n=t.context,o=t.fn,s=t.args;try{var i=function(e,t){K(e)?r(t):r(e,!0)};o.apply(n,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},at.FORK=function(e,t,r,n){var o=t.fn,s=t.detached,i=n.task,a=function(e){var t=e.context,r=e.fn,n=e.args;try{var o=r.apply(t,n);if(re(o))return o;var s=!1;return ge((function(e){return s?{value:e,done:!0}:(s=!0,{value:o,done:!te(o)})}))}catch(e){return ge((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:ke(t)}(a,o);Fe((function(){var t=_t(e,a,i.context,ct,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},at.JOIN=function(e,t,r,n){var o=n.task,s=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&le(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(ee(t)){if(0===t.length)return void r([]);var i=Se(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},at.CANCEL=function(e,t,r,n){t===F?ut(n.task):ee(t)?t.forEach(ut):ut(t),r()},at.SELECT=function(e,t,r){var n=t.selector,o=t.args;try{r(n.apply(void 0,[e.getState()].concat(o)))}catch(e){r(e,!0)}},at.ACTION_CHANNEL=function(e,t,r){var n=t.pattern,o=rt(t.buffer),s=Ze(n),i=function t(r){tt(r)||e.channel.take(t,s),o.put(r)},a=o.close;o.close=function(){i.cancel(),a()},e.channel.take(i,s),r(o)},at.CANCELLED=function(e,t,r,n){r(n.task.isCancelled())},at.FLUSH=function(e,t,r){t.flush(r)},at.GET_CONTEXT=function(e,t,r,n){r(n.task.context[t])},at.SET_CONTEXT=function(e,t,r,n){ue(n.task.context,t),r()},at);function ht(e,t){return e+"?"+t}function mt(e){var t=e.name,r=e.location;return r?t+" "+ht(r.fileName,r.lineNumber):t}function pt(e){var t,r=(t=[]).concat.apply(t,e.map((function(e){return e.cancelledTasks})));return r.length?["Tasks cancelled due to error:"].concat(r).join("\n"):""}var gt=null,ft=[],vt=function(e){e.crashedEffect=gt,ft.push(e)},yt=function(){gt=null,ft.length=0},bt=function(){var e,t=ft[0],r=ft.slice(1),n=t.crashedEffect?(e=Ee(t.crashedEffect))?e.code+" "+ht(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+mt(t.meta)+(n?" \n when executing effect "+n:"")].concat(r.map((function(e){return" created by "+mt(e.meta)})),[pt(ft)]).join("\n")};function _t(e,t,r,n,o,s,i){var a=e.finalizeRunEffect((function(t,r,n){te(t)?it(t,n):re(t)?_t(e,t,d.context,r,o,!1,n):t&&t[U]?(0,lt[t.type])(e,t.payload,n,u):n(t)}));l.cancel=ce;var c={meta:o,cancel:function(){0===c.status&&(c.status=1,l(z))},status:0},d=function(e,t,r,n,o,s,i){var a;void 0===i&&(i=ce);var c,d,u=0,l=null,h=[],m=Object.create(r),p=function(e,t,r){var n,o=[],s=!1;function i(e){h.push.apply(h,p.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){s||(le(o,t),t.cont=ce,c?i(a):(t===e&&(n=a),o.length||(s=!0,r(n))))}}function c(){s||(s=!0,o.forEach((function(e){e.cont=ce,e.cancel()})),o=[])}return a(e),{addTask:a,cancelAll:c,abort:i,getTasks:function(){return o}}}(t,0,g);function g(t,r){if(r){if(u=2,vt({meta:o,cancelledTasks:h}),f.isRoot){var n=bt();yt(),e.onError(t,{sagaStack:n})}d=t,l&&l.reject(t)}else t===z?u=1:1!==u&&(u=3),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={})[H]=!0,a.id=n,a.meta=o,a.isRoot=s,a.context=m,a.joiners=[],a.queue=p,a.cancel=function(){0===u&&(u=1,p.cancelAll(),g(z,!1))},a.cont=i,a.end=g,a.setContext=function(e){ue(m,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,2===u?l.reject(d):0!==u&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return 0===u},a.isCancelled=function(){return 1===u||0===u&&1===t.status},a.isAborted=function(){return 2===u},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,n,o,s,i),u={task:d,digestEffect:h};return i&&(i.cancel=d.cancel),l(),d;function l(e,r){try{var o;r?(o=t.throw(e),yt()):_e(e)?(c.status=1,l.cancel(),o=Y(t.return)?t.return(z):{done:!0,value:z}):o=be(e)?Y(t.return)?t.return():{done:!0}:t.next(e),o.done?(1!==c.status&&(c.status=3),c.cont(o.value)):h(o.value,n,l)}catch(e){if(1===c.status)throw e;c.status=2,c.cont(e,!0)}}function h(t,r,n,o){void 0===o&&(o="");var s,i=dt();function c(r,o){s||(s=!0,n.cancel=ce,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),o&&function(e){gt=e}(t),n(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:o,effect:t}),c.cancel=ce,n.cancel=function(){s||(s=!0,c.cancel(),c.cancel=ce,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function wt(e,t){for(var r=e.channel,n=void 0===r?st():r,o=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?fe:u,h=arguments.length,m=new Array(h>2?h-2:0),p=2;p<h;p++)m[p-2]=arguments[p];var g,f=t.apply(void 0,m),v=dt();if(c&&(c.rootSagaStarted=c.rootSagaStarted||ce,c.effectTriggered=c.effectTriggered||ce,c.effectResolved=c.effectResolved||ce,c.effectRejected=c.effectRejected||ce,c.effectCancelled=c.effectCancelled||ce,c.actionDispatched=c.actionDispatched||ce,c.rootSagaStarted({effectId:v,saga:t,args:m})),d){var y=j.apply(void 0,d);g=function(e){return function(t,r,n){return y((function(t){return e(t,r,n)}))(t)}}}else g=de;var b={channel:n,dispatch:ye(o),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Fe((function(){var e=_t(b,f,a,v,ke(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function St(e){var t,r=void 0===e?{}:e,n=r.context,o=void 0===n?{}:n,s=r.channel,i=void 0===s?st():s,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,n,o={},s=Object.keys(e);for(n=0;n<s.length;n++)t.indexOf(r=s[n])>=0||(o[r]=e[r]);return o}(r,["context","channel","sagaMonitor"]);function d(e){return t=wt.bind(null,G({},c,{context:o,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){ue(o,e)},d}var kt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function o(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,i){if("function"!=typeof n)throw new TypeError("The listener must be a function");var a=new o(n,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 n:delete e._events[t]}function a(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,n,o=[];if(0===this._eventsCount)return o;for(n in e=this._events)t.call(e,n)&&o.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},a.prototype.listeners=function(e){var t=this._events[r?r+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].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,n,o,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,n),!0;case 4:return u.fn.call(u.context,t,n,o),!0;case 5:return u.fn.call(u.context,t,n,o,s),!0;case 6:return u.fn.call(u.context,t,n,o,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,m=u.length;for(d=0;d<m;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,n);break;case 4:u[d].fn.call(u[d].context,t,n,o);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,n,o){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||o&&!a.once||n&&a.context!==n||i(this,s);else{for(var c=0,d=[],u=a.length;c<u;c++)(a[c].fn!==t||o&&!a[c].once||n&&a[c].context!==n)&&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 n,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}(kt);var Et=kt.exports,Ct=Object.defineProperty,Tt=Object.defineProperties,It=Object.getOwnPropertyDescriptor,Mt=Object.getOwnPropertyDescriptors,Pt=Object.getOwnPropertyNames,Rt=Object.getOwnPropertySymbols,Ot=Object.prototype.hasOwnProperty,At=Object.prototype.propertyIsEnumerable,xt=(e,t,r)=>t in e?Ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,jt=(e,t)=>{for(var r in t||(t={}))Ot.call(t,r)&&xt(e,r,t[r]);if(Rt)for(var r of Rt(t))At.call(t,r)&&xt(e,r,t[r]);return e},Lt=(e,t)=>Tt(e,Mt(t)),Nt=(e,t)=>{var r={};for(var n in e)Ot.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&Rt)for(var n of Rt(e))t.indexOf(n)<0&&At.call(e,n)&&(r[n]=e[n]);return r},Dt=(e,t)=>{for(var r in t)Ct(e,r,{get:t[r],enumerable:!0})},Wt=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of Pt(t))Ot.call(e,o)||o===r||Ct(e,o,{get:()=>t[o],enumerable:!(n=It(t,o))||n.enumerable});return e},Vt=(e,t,r)=>(Wt(e,t,"default"),r&&Wt(r,t,"default")),Ut=(e,t,r)=>(xt(e,"symbol"!=typeof t?t+"":t,r),r),$t="__local__",Bt="__synthetic__",qt=["room.started","room.ended"].map((e=>`video.${e}`)),Ft=o.getLogger("signalwire"),Ht=Ft.methodFactory;Ft.methodFactory=(e,t,r)=>{const n=Ht(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),n.apply(void 0,e)}};var zt,Qt=Ft.getLevel();Ft.setLevel(Qt);var Jt={},Gt=()=>null!=zt?zt:Ft,Kt=({type:e,payload:t})=>{const r=Gt(),{logWsTraffic:n}=Jt||{};if(!n)return;const o=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,o,"\n")},Xt=()=>{const e=Gt();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?Kt:Reflect.get(e,t,r)})},Yt=(e,t)=>{const{result:r={},error:n}=e;if(n)return{error:n};const{code:o,node_id:s,result:i=null}=r;return o&&"200"!==o?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?Yt(i,s):{result:i}:{result:r}},Zt={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},er=(e,t=Zt)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,n])=>{const o=tr(r);return e[o]="object"==typeof n&&n?Array.isArray(n)?t.propsToUpdateValue.includes(r)?n.map((e=>"string"==typeof e?tr(e):er(e))):n:er(n):(e=>e.endsWith("At"))(o)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(n):n,e}),{}),tr=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const n=t.trim().charAt(0),o=t.substr(1).toLowerCase();return`${e}${0===r?n.toLowerCase():n.toUpperCase()}${o}`}),""):e,rr=/[A-Z]/g,nr=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(rr,(e=>`_${e.toLowerCase()}`)))(e=or({event:e,namespace:t}))),e),or=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,sr=(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),ir=({instance:e,transform:t,payload:r,transformedPayload:n})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:n,transform:o})=>{const s=jt(Lt(jt({},n),{_eventsNamespace:o.getInstanceEventNamespace?o.getInstanceEventNamespace(r):void 0,eventChannel:o.getInstanceEventChannel?o.getInstanceEventChannel(r):void 0}),(e=>{let t={},r=e,n=!0;for(;n;)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):n=!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,o,s)=>"__sw_proxy"===o||("toString"===o?(({property:e,payload:t})=>"function"==typeof e?()=>JSON.stringify(t):e)({property:e[o],payload:n}):"_eventsNamespace"===o&&t.getInstanceEventNamespace?t.getInstanceEventNamespace(r):"eventChannel"===o&&t.getInstanceEventChannel?t.getInstanceEventChannel(r):o in n?n[o]:Reflect.get(e,o,s))}),payload:r,transformedPayload:n,transform:t}),ar=new Map,cr=/^(ws|wss):\/\//,dr=(e,t,r)=>{let n=null;return Promise.race([e,new Promise(((e,o)=>n=setTimeout(o,t,r)))]).finally((()=>clearTimeout(n)))},ur=e=>e.includes("session."),lr=["video.member.updated","video.member.talking"],hr=["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"],mr=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return hr.includes(t)||(e=>e.includes(Bt))(t)||pr(t)||ur(t)?null:lr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},pr=e=>e.includes($t),gr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push($t),e)),[]).join(".")},fr=e=>{var t;return jt({jsonrpc:"2.0",id:null!=(t=e.id)?t:_()},e)},vr=e=>jt({jsonrpc:"2.0"},e),yr={major:3,minor:0,revision:0},br=e=>fr({method:"signalwire.connect",params:jt({version:yr},e)}),_r={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},wr=e=>{if(e.hasOwnProperty("dialogParams")){const t=Nt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in _r)e&&t.hasOwnProperty(e)&&(t[_r[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Sr=e=>(t={})=>fr({method:e,params:wr(t)}),kr=Sr("verto.invite"),Er=Sr("verto.bye"),Cr=Sr("verto.modify"),Tr=Sr("verto.info"),Ir=Sr("verto.pong"),Mr=(e,t)=>vr({id:e,result:{method:t}}),Pr={};Dt(Pr,{authErrorAction:()=>Wr,authExpiringAction:()=>Ur,authSuccessAction:()=>Vr,compoundEventAttachAction:()=>Yr,createAction:()=>Or,destroyAction:()=>Lr,executeAction:()=>Dr,getCustomSagaActionType:()=>Xr,initAction:()=>jr,makeCustomSagaAction:()=>Kr,reauthAction:()=>Nr,sessionAuthErrorAction:()=>Qr,sessionConnectedAction:()=>Fr,sessionDisconnectedAction:()=>Hr,sessionExpiringAction:()=>Jr,sessionReconnectingAction:()=>zr,socketClosedAction:()=>$r,socketErrorAction:()=>Br,socketMessageAction:()=>qr});var Rr={};function Or(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return jt(jt({type:e,payload:n.payload},"meta"in n&&{meta:n.meta}),"error"in n&&{error:n.error})}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>t.type===e,r}Dt(Rr,{configureStore:()=>xr,createAction:()=>Or}),Vt(Rr,N);var Ar="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?j:j.apply(null,arguments)};function xr(e){const t=function(){return[]},{reducer:r,middleware:n=t(),devTools:o=!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=A(r)}let c=n;"function"==typeof c&&(c=c(t));const d=L(...c);let u=j;o&&(u=Ar(jt({trace:!1},"object"==typeof o&&o)));let l=[d];return Array.isArray(i)?l=[d,...i]:"function"==typeof i&&(l=i(l)),O(a,s,u(...l))}var jr=Or("swSdk/init"),Lr=Or("swSdk/destroy"),Nr=Or("swSdk/reauth"),Dr=Or("swSdk/executeRequest"),Wr=Or("auth/error"),Vr=Or("auth/success"),Ur=Or("auth/expiring"),$r=Or("socket/closed"),Br=Or("socket/error"),qr=Or("socket/message"),Fr=Or("session.connected"),Hr=Or("session.disconnected"),zr=Or("session.reconnecting"),Qr=Or("session.auth_error"),Jr=Or("session.expiring"),Gr=(e,t)=>`${t.type}/${e}`,Kr=(e,t)=>Lt(jt({},t),{type:Gr(e,t)}),Xr=(e,t)=>Gr(e,t),Yr=Or("compound_event:attach");function Zr(e){const t={},r=[];let n;const o={addCase(e,r){const n="string"==typeof e?e:e.type;if(n in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[n]=r,o},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),o),addDefaultCase:e=>(n=e,o)};return e(o),[t,r,n]}var en=({name:e="",initialState:t,reducers:r,extraReducers:n})=>function(e){const{name:t}=e;if(!t)throw new Error("`name` is a required option for createSlice");const r=e.initialState,n=e.reducers||{},o=Object.keys(n),s={},i={},a={};function c(){const[t={},n=[],o]="function"==typeof e.extraReducers?Zr(e.extraReducers):[e.extraReducers],s=jt(jt({},t),i);return function(e,t,r=[],n){let o,[s,i,a]="function"==typeof t?Zr(t):[t,r,n];function c(e=o(),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 o="function"==typeof e?()=>e():()=>e,c.getInitialState=o,c}(r,s,n,o)}let d;return o.forEach((e=>{const r=n[e],o=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,s[e]=c,i[o]=c,a[e]=d?Or(o,d):Or(o)})),{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(Lr.type,(()=>t)),"function"==typeof n&&n(e)}});function tn(e){return[jr.type,Nr.type].includes(e.type)}var rn=en({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,n;return Lt(jt({},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!=(n=null==t?void 0:t.ice_servers)?n:[]})},authStatus:(e,{payload:t})=>Lt(jt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Lt(jt({},e),{authState:t})},extraReducers:e=>{e.addCase(Wr.type,((e,{payload:t})=>Lt(jt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(tn,(e=>Lt(jt({},e),{authStatus:"authorizing"})))}}),{actions:nn,reducer:on}=rn,sn=Symbol("BaseSession"),an=class{constructor(e){var t,r;this.options=e,Ut(this,"__sw_symbol",sn),Ut(this,"uuid",_()),Ut(this,"WebSocketConstructor"),Ut(this,"agent"),Ut(this,"connectVersion",yr),Ut(this,"_rpcConnectResult"),Ut(this,"_requests",new Map),Ut(this,"_socket",null),Ut(this,"_host","wss://relay.signalwire.com"),Ut(this,"_executeTimeoutMs",1e4),Ut(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Ut(this,"_executeQueue",new Set),Ut(this,"_checkPingDelay",15e3),Ut(this,"_checkPingTimer",null),Ut(this,"_status","unknown"),Ut(this,"wsOpenHandler"),Ut(this,"wsCloseHandler"),Ut(this,"wsErrorHandler");const{host:n,logLevel:o="info"}=e;n&&(this._host=(e=>`${cr.test(e)?"":"wss://"}${e}`)(n)),o&&(null==(r=(t=this.logger).setLevel)||r.call(t,o)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){var e,t;return null==(t=null==(e=this._rpcConnectResult)?void 0:e.authorization)?void 0:t.signature}get logger(){return Xt()}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");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._clearCheckPingTimer(),this._requests.clear(),this._closeConnection("disconnected")):this.logger.debug("Session not connected or already in closing state.")}execute(e){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),dr(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t!==this._executeTimeoutError)throw t;if(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(br(t))}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(Vr())}catch(e){this.logger.error("Auth Error",e),this.dispatch(Wr({error:e}))}}_onSocketError(e){this.logger.debug("_onSocketError",e),this.dispatch(Br())}_onSocketClose(e){this.logger.debug("_onSocketClose",e.type,e.code,e.reason),this._status=1e3==e.code||1002==e.code?"disconnected":"reconnecting",this.dispatch($r()),this._socket=null}_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:n,reject:o}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:n}=e;if(n)return{error:n};switch(t.method){case"signalwire.connect":return{result:r};default:return Yt(e)}})({response:t,request:r});return i?o(i):n(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,vr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(qr(t)),this._handleWebSocketMessage(t)}var r}_handleWebSocketMessage(e){}dispatch(e){throw new Error("Method not implemented")}_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)}_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,n;this._clearCheckPingTimer(),this._checkPingTimer=setTimeout((()=>{this.logger.warn("HALF OPEN"),this._closeConnection("reconnecting")}),this._checkPingDelay),await this.execute((r=e.id,n=null==(t=null==e?void 0:e.params)?void 0:t.timestamp,vr({id:r,result:{timestamp:n||Date.now()/1e3}})))}_closeConnection(e){this._clearCheckPingTimer(),this.logger.warn("_closeConnection"),this._status=e,this.dispatch(nn.authStatus("disconnected"===e?"unauthorized":"unknown")),this.destroySocket()}},cn=class extends an{constructor(e){super(e),this.options=e,Ut(this,"_expiredDiffSeconds",0),Ut(this,"_refreshTokenNotificationDiff",120),Ut(this,"_checkTokenExpirationDelay",2e4),Ut(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e,t,r;const n=null!=(r=null==(t=null==(e=null==this?void 0:this._rpcConnectResult)?void 0:e.authorization)?void 0:t.expires_at)?r:0;if("string"==typeof n){const e=Date.parse(n);if(!isNaN(e))return Math.floor(e/1e3)}return n}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)}this._rpcConnectResult=await this.execute(br(e)),await this.persistRelayProtocol(),this._checkTokenExpiration()}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,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,fr({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(Ur()),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)))}},dn={};Dt(dn,{authErrorAction:()=>Wr,authExpiringAction:()=>Ur,authSuccessAction:()=>Vr,compoundEventAttachAction:()=>Yr,configureStore:()=>qn,connect:()=>Bn,createAction:()=>Or,createCatchableSaga:()=>_n,createRestartableSaga:()=>yn,destroyAction:()=>Lr,eventChannel:()=>nt,executeAction:()=>Dr,getCustomSagaActionType:()=>Xr,initAction:()=>jr,makeCustomSagaAction:()=>Kr,reauthAction:()=>Nr,sessionAuthErrorAction:()=>Qr,sessionConnectedAction:()=>Fr,sessionDisconnectedAction:()=>Hr,sessionExpiringAction:()=>Jr,sessionReconnectingAction:()=>zr,socketClosedAction:()=>$r,socketErrorAction:()=>Br,socketMessageAction:()=>qr});var un=({state:e,payload:t,componentId:r,key:n,requestId:o})=>Lt(jt({},e),r in e.byId?{byId:Lt(jt({},e.byId),{[r]:Lt(jt({},e.byId[r]),{[n]:Lt(jt({},e.byId[r][n]),{[o]:t})})})}:{byId:Lt(jt({},e.byId),{[r]:{id:r,[n]:{[o]:t}}})}),ln=en({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Lt(jt({},e),t.id in e.byId?{byId:Lt(jt({},e.byId),{[t.id]:jt(jt({},e.byId[t.id]),t)})}:{byId:Lt(jt({},e.byId),{[t.id]:t})}),executeSuccess:(e,{payload:t})=>{const{componentId:r,requestId:n,response:o}=t;return un({componentId:r,requestId:n,state:e,key:"responses",payload:o})},executeFailure:(e,{payload:t})=>{const{componentId:r,requestId:n,error:o,action:s}=t;return un({componentId:r,requestId:n,state:e,key:"errors",payload:{action:s,jsonrpc:o}})},cleanup:(e,{payload:t})=>Lt(jt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,n])=>(t.ids.includes(r)||(e[r]=n),e)),{})})}}),{actions:hn,reducer:mn}=ln,pn={queue:[]},gn=en({name:"executeQueue",initialState:pn,reducers:{add:(e,{payload:t})=>Lt(jt({},e),{queue:e.queue.concat(t)}),clean:()=>pn}}),{reducer:fn}=gn,vn=(0,Rr.combineReducers)({components:mn,session:on,executeQueue:fn});Dt({},{createCatchableSaga:()=>_n,createRestartableSaga:()=>yn,eventChannel:()=>nt});var yn=e=>function*(){!function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];Oe(Ne.apply(void 0,[e].concat(r)))}((function*(){for(;;)try{Xt().debug("Run a restartable saga"),yield Le(e),Xt().debug("One of the restartable saga has ended. Restarting..")}catch(e){Xt().error("Restartable Saga Error",e)}}))},bn=e=>Xt().error("Catchable Saga Error",e),_n=(e,t=bn)=>function*(...r){try{yield Le(e,...r)}catch(e){t(e)}};function*wn(e){function*t(t){const{componentId:r,requestId:n,method:o,params:s}=t.payload;try{const i=(({method:e,params:t})=>fr({method:e,params:t}))({id:n,method:o,params:s}),a=yield Le(e.execute,i);r&&n&&(yield xe(hn.executeSuccess({componentId:r,requestId:n,response:a})))}catch(e){Xt().warn("worker error",r,JSON.stringify(e)),r&&n&&(yield xe(hn.executeFailure({componentId:r,requestId:n,action:t,error:e})))}finally{if((yield We())&&r&&n){const e={jsonrpc:"2.0",id:n,error:{code:-32600,message:"Cancelled task"}};Xt().debug("executeActionWorker cancelled",{requestId:n,componentId:r,error:e}),yield xe(hn.executeFailure({componentId:r,requestId:n,action:t,error:e}))}}}for(;;){const e=yield Ae(Dr.type);yield Ne(t,e)}}function*Sn({sessionChannel:e,pubSubChannel:t,swEventChannel:r}){function*n(e){switch(e.event_type){case"video.room.audience_count":return void(yield xe(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 n=r.talking?"started":"ended";yield xe(t,{type:`video.member.talking.${n}`,payload:e.params});const o=r.talking?"start":"stop";yield xe(t,{type:`video.member.talking.${o}`,payload:e.params})}break}}yield xe(t,{type:e.event_type,payload:e.params})}function*o(e){yield xe(r,(e=>{const{event_type:t,params:r,node_id:n}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if("webrtc.message"===t&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=n),{type:t,payload:e}}return{type:t,payload:r}})(e)),(e=>"webrtc.message"===(null==e?void 0:e.event_type))(e)||((e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))})(e)?yield Ne(n,e):yield xe({type:e.event_type,payload:e}))}const s=_n((function*(e){if(e.type!==qr.type)return void(yield xe(e));const{method:t,params:r}=e.payload;switch(t){case"signalwire.event":yield Ne(o,r);break;default:return Xt().debug(`Unknown message: ${t}`,e)}}),(e=>{Xt().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ae(e);yield Ne(s,t)}}catch(e){Xt().error("sessionChannelWorker error:",e)}finally{Xt().debug("sessionChannelWorker finally")}}function kn(e){return nt((t=>(e.dispatch=e=>{t(e)},()=>{Xt().debug("sessionChannel unsubscribe"),e.disconnect()})))}var En=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*Cn({pubSubChannel:e,emitter:t}){Xt().debug("pubSubSaga [started]");try{for(;;){const r=yield Ae(e,"*"),{type:n,payload:o}=r;try{const e=En(r);qt.includes(n)&&t.emit(n,o),Xt().trace("Emit:",nr({namespace:e,event:n})),t.emit(nr({namespace:e,event:n}),o)}catch(e){Xt().error(e)}}}finally{(yield We())&&Xt().debug("pubSubSaga [cancelled]")}}var Tn=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Ut(this,"name","AuthError"),Object.setPrototypeOf(this,Tn.prototype)}};function*In({SessionConstructor:e,userOptions:t,channels:r}){var n;const o=new e(t),s=yield Le(kn,o),i=r.pubSubChannel,a=r.swEventChannel;let c=[];if(null==(n=t.workers)?void 0:n.length)try{const e=t.workers.map((e=>Le(yn(e))));c=yield function(e){var t=Re("ALL",e);return t.combinator=!0,t}(e)}catch(e){Xt().error("Error running custom workers",e)}yield Ne(Sn,{sessionChannel:s,pubSubChannel:i,swEventChannel:a});const d=yield Ne(Cn,{pubSubChannel:i,emitter:t.emitter}),u=yield Ne(Rn,{session:o,sessionChannel:s,pubSubChannel:i,userOptions:t}),l=yield Ne(wn,o);o.connect(),yield Ae(Lr.type),d.cancel(),u.cancel(),l.cancel(),s.close(),c.forEach((e=>e.cancel()))}function*Mn({session:e,pubSubChannel:t}){Xt().debug("socketClosedWorker",e.status),"reconnecting"===e.status?(yield xe(t,zr()),yield Ve(2e3*Math.random()),yield Le(e.connect)):"disconnected"===e.status?(yield xe(t,Hr()),yield xe(Lr())):Xt().warn("Unhandled Session Status",e.status)}function*Pn({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Le(e.reauthenticate),yield xe(nn.connected(e.rpcConnectResult)),yield xe(r,Fr()))}catch(e){Xt().error("Reauthenticate Error",e),yield xe(Wr({error:e}))}}function*Rn(e){Xt().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield Ae([Vr.type,Wr.type,Ur.type,Br.type,$r.type,Nr.type]);switch(Xt().debug("sessionStatusWatcher",t.type,t.payload),t.type){case Vr.type:{const{session:t,pubSubChannel:r}=e;yield xe(nn.connected(t.rpcConnectResult)),yield xe(r,Fr());break}case Wr.type:yield Ne(On,Lt(jt({},e),{action:t}));break;case Ur.type:yield xe(e.pubSubChannel,Jr());break;case Br.type:break;case $r.type:yield Ne(Mn,e);break;case Nr.type:yield Ne(Pn,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel})}}}finally{(yield We())&&Xt().debug("sessionStatusWatcher [cancelled]")}}function*On(e){Xt().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,session:r,action:n}=e,{error:o}=n.payload,s=o?new Tn(o.code,o.message):new Error("Unauthorized");yield xe(t,Qr(s)),yield Le([r,r.disconnect])}finally{(yield We())&&Xt().debug("sessionAuthErrorSaga [cancelled]")}}var An={};Dt(An,{getComponent:()=>xn,getComponentsById:()=>jn,getComponentsToCleanup:()=>Ln});var xn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},jn=({components:e})=>e.byId,Ln=e=>{const t=jn(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},Nn={};Dt(Nn,{getAuthError:()=>Un,getAuthState:()=>$n,getAuthStatus:()=>Vn,getIceServers:()=>Dn,getSession:()=>Wn});var Dn=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Wn=e=>e.session,Vn=({session:e})=>e.authStatus,Un=({session:e})=>e.authError,$n=({session:e})=>e.authState,Bn=e=>{const{componentListeners:t={},sessionListeners:r={},store:n,Component:o,customSagas:s=[]}=e,i=Object.keys(t),a=Object.keys(r);return e=>{const c=new o(Lt(jt({},e),{store:n})),d=new Map;let u=!0;const l=n.subscribe((()=>{const e=n.getState(),o=xn(e,c.__uuid)||{};for(const e of i){if(!1===u)return;const r=`${c.__uuid}.${e}`,n=d.get(r),s=o[e];if(void 0!==s&&n!==s){d.set(r,s);const n=t[e];"string"==typeof n?c[n](o):n(o)}}const s=Wn(e);for(const e of a){if(!1===u)return;const t=`session.${e}`,n=d.get(t),o=s[e];if(void 0!==o&&n!==o){d.set(t,o);const n=r[e];"string"==typeof n?c[n](s):"function"==typeof n&&n(s)}}})),h=null==s?void 0:s.map((e=>n.runSaga(e,{instance:c,runSaga:n.runSaga})));return c.destroyer=()=>{u=!1,l(),d.clear(),(null==h?void 0:h.length)&&h.forEach((e=>e.cancel()))},c}};Vt(dn,Rr);var qn=e=>{var t;const{userOptions:r,SessionConstructor:n,preloadedState:o={},runSagaMiddleware:s=!0}=e,i=St(),a={pubSubChannel:ot(),swEventChannel:ot()},c=xr({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:vn,preloadedState:o,middleware:e=>e().concat(i)});if(s){const e=(e=>function*({userOptions:t,channels:r}){var n;for(t.logger&&(zt=t.logger),t.debug&&(e=>{null!=e?Object.assign(Jt,e):Jt={}})(t.debug);;){const o=yield Ae([jr.type,Nr.type]);(null==(n=null==o?void 0:o.payload)?void 0:n.token)&&(t.token=o.payload.token);try{yield Le(In,Lt(jt({},e),{userOptions:t,channels:r}))}catch(e){Xt().error("RootSaga Error:",e)}finally{(yield We())&&Xt().debug("rootSaga [cancelled]"),Xt().debug("Reboot rootSaga")}}})({SessionConstructor:n});i.run(e,{userOptions:r,channels:a})}return Lt(jt({},c),{runSaga:(e,t)=>i.run(e,Lt(jt({},t),{channels:a}))})},Fn=e=>e,Hn=Symbol("BaseComponent"),zn=class{constructor(e){this.options=e,Ut(this,"__sw_symbol",Hn),Ut(this,"uuid",_()),Ut(this,"_eventsPrefix",""),Ut(this,"_eventsRegisterQueue",new Set),Ut(this,"_eventsEmitQueue",new Set),Ut(this,"_eventsNamespace"),Ut(this,"_eventsTransformsCache",new Map),Ut(this,"_requests",new Map),Ut(this,"_customSagaTriggers",new Map),Ut(this,"_destroyer"),Ut(this,"_emitterTransforms",new Map),Ut(this,"_emitterListenersCache",new Map),Ut(this,"_trackedEvents",[]),Ut(this,"_runningWorkers",[]),Ut(this,"_workers",new Map)}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(Yr({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&&pr(e)&&(t=this.__uuid),nr({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||ur(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return Xt()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get emitter(){return this.options.emitter}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 n=t.instanceFactory(r);return this._eventsTransformsCache.set(e,n),n}return this._eventsTransformsCache.get(e)}cleanupEventHandlerTransformCache({internalEvent:e,force:t}){const r=this._eventsTransformsCache.get(e),n=this.listenerCount(e);return r&&(t||n<=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 n=r.get(t);return r.delete(t),this._emitterListenersCache.set(e,r),n}return t}_createStableEventHandler(e,t){return r=>{const n=this._emitterTransforms.get(e);if(this.logger.trace("Got emitterTransform for",e,n),!n)return t(r);const o=this.runAndCacheEventHandlerTransform({internalEvent:e,transform:n,payload:r});let s;const i=this._parseNestedFields(r,n);return s=ir({instance:o,payload:r,transformedPayload:i,transform:n}),t(s)}}_parseNestedFields(e,t,r=(e=>e),n){if(!t.nestedFieldsToProcess)return t.payloadTransform(e);if(e.__sw_proxy)return e;if(!n){const n=t.payloadTransform(e);return this._parseNestedFields(n,t,r,n)}return Array.isArray(e)?n=e.map(((n,o)=>this._parseNestedFields(r(n),t,r,e[o]))):e&&"object"==typeof e&&Object.entries(e).forEach((([e,o])=>{var s;const i=null==(s=t.nestedFieldsToProcess)?void 0:s[e],a=i?this._emitterTransforms.get(i.eventTransformType):void 0;n[e]=o&&"object"==typeof o?this._parseNestedFields(o,t,(e=>i&&a&&e&&"object"==typeof e?(({transform:e,payload:t})=>{const r=(({transform:e,payload:t})=>{if(!ar.has(e.type)){const r=e.instanceFactory(t);return ar.set(e.type,r),r}return ar.get(e.type)})({transform:e,payload:t}),n=e.payloadTransform(t);return ir({transform:e,payload:t,instance:r,transformedPayload:n})})({transform:a,payload:r(i.processInstancePayload(e))}):e),n[e]):r(o)})),n}getOrCreateStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);let n=r.get(t);return n||(n=this._createStableEventHandler(e,t),r.set(t,n),this._emitterListenersCache.set(e,r)),n}_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 n=this._getInternalEvent(e);this._trackEvent(n);const o=r?"once":"on";if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:o,params:[e,t]}),this.emitter;const s=this.getOrCreateStableEventHandler(n,t);return this.logger.trace("Registering event",n),this.emitter[o](n,s)}on(e,t){return this._addListener(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),n=this.getAndRemoveStableEventHandler(r,t);return this.cleanupEventHandlerTransformCache({internalEvent:r,force:!n}),this.logger.trace("Removing event listener",r),this._untrackEvent(r),this.emitter.off(r,n)}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}getSubscriptions(){return mr(this.eventNames())}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=Fn,transformResolve:n=Fn,transformReject:o=Fn}={transformParams:Fn,transformResolve:Fn,transformReject:Fn}){return new Promise(((s,i)=>{const a=_();this._requests.set(a,{resolve:s,reject:i,transformResolve:n,transformReject:o}),this.store.dispatch(Dr({requestId:a,componentId:this.__uuid,method:e,params:r(t)}))}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const n=_();this._customSagaTriggers.set(n,{resolve:t,reject:r}),this.store.dispatch(jt({dispatchId:n},Kr(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const n=this._customSagaTriggers.get(e);n&&(n[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}onError(e){this._requests.forEach(((t,r)=>{void 0!==(null==e?void 0:e.errors[r])&&(t.reject(t.transformReject(e.errors[r])),this._requests.delete(r))}))}onSuccess(e){this._requests.forEach(((t,r)=>{void 0!==(null==e?void 0:e.responses[r])&&(t.resolve(t.transformResolve(e.responses[r])),this._requests.delete(r))}))}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 Vn(this.store.getState())}get _sessionAuthState(){return $n(this.store.getState())}_waitUntilSessionAuthorized(){switch(Vn(this.store.getState())){case"authorized":return Promise.resolve(this);case"unknown":case"authorizing":return new Promise(((e,t)=>{const r=this.store.subscribe((()=>{const n=Vn(this.store.getState()),o=Un(this.store.getState());if("authorized"===n)e(this),r();else if("unauthorized"===n){const e=o?new Tn(o.code,o.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}_setEmitterTransform({event:e,handler:t,local:r}){const n=this._getInternalEvent(e);(r?pr(e):!pr(e)&&this.eventNames().includes(n))&&this._emitterTransforms.set(n,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){this._workers.has(e)?Xt().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:n}=r,o=Nt(r,["worker"]);const s=this.store.runSaga(n,jt({instance:this,runSaga:this.store.runSaga},o));this._runningWorkers.push(s),this._workers.delete(e)}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},Qn=class extends zn{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=Vn(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(jr()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(Lr())}},Jn=class extends zn{constructor(e){super(e),this.options=e,Ut(this,"subscribeMethod","signalwire.subscribe"),Ut(this,"subscribeParams",{}),Ut(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:Lt(jt({},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")}},Gn={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(Gn).map((e=>`video.member.updated.${e}`));var Kn=er(Gn);Object.keys(Kn).map((e=>`member.updated.${e}`));var Xn={};Dt(Xn,{RoomSessionPlaybackAPI:()=>$o,RoomSessionRecordingAPI:()=>Vo,RoomSessionStreamAPI:()=>qo,audioMuteMember:()=>_o,audioUnmuteMember:()=>wo,createRoomSessionPlaybackObject:()=>Bo,createRoomSessionRecordingObject:()=>Uo,createRoomSessionStreamObject:()=>Fo,deafMember:()=>Eo,deleteMemberMeta:()=>Wo,deleteMeta:()=>vo,demote:()=>Oo,getLayouts:()=>to,getMemberMeta:()=>Lo,getMembers:()=>ro,getMeta:()=>po,getPlaybacks:()=>lo,getRecordings:()=>co,getStreams:()=>yo,hideVideoMuted:()=>so,play:()=>ho,promote:()=>Ro,removeAllMembers:()=>jo,removeMember:()=>xo,setDeaf:()=>To,setHideVideoMuted:()=>ao,setInputSensitivityMember:()=>Po,setInputVolumeMember:()=>Io,setLayout:()=>no,setMemberMeta:()=>No,setMemberPosition:()=>Ao,setMeta:()=>go,setOutputVolumeMember:()=>Mo,setPositions:()=>oo,showVideoMuted:()=>io,startRecording:()=>uo,startStream:()=>bo,undeafMember:()=>Co,updateMemberMeta:()=>Do,updateMeta:()=>fo,videoMuteMember:()=>So,videoUnmuteMember:()=>ko});var Yn=()=>{},Zn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:jt({room_session_id:this.roomSessionId},r)},t)}}),eo=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Nt(n,["memberId"]);return this.execute({method:e,params:jt({room_session_id:this.roomSessionId,member_id:o||this.memberId},s)},t)}}),to=Zn("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),ro=Zn("video.members.get",{transformResolve:e=>({members:e.members})}),no=Zn("video.set_layout",{transformResolve:Yn}),oo=Zn("video.set_position",{transformResolve:Yn}),so=Zn("video.hide_video_muted",{transformResolve:Yn}),io=Zn("video.show_video_muted",{transformResolve:Yn}),ao={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:Yn})}},co={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(gr("video.recording.list"),t);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(gr("video.recording.list"),Lt(jt({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.recording.list"),t),e}}))}},uo={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(gr("video.recording.start"),t);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(gr("video.recording.start"),Lt(jt({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.recording.start"),t),e}}))}},lo={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(gr("video.playback.list"),t);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(gr("video.playback.list"),Lt(jt({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.playback.list"),t),e}}))}},ho={value:function(e){return new Promise((async t=>{const r=e=>{t(e)};this.on(gr("video.playback.start"),r);try{const t=await this.execute({method:"video.playback.start",params:jt({room_session_id:this.roomSessionId},e)});this.emit(gr("video.playback.start"),Lt(jt({},t),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.playback.start"),r),e}}))}},mo=e=>Zn(e,{transformResolve:Yn,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Nt(t,["room_session_id"])}}}),po=Zn("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),go=mo("video.set_meta"),fo=mo("video.update_meta"),vo={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},yo={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(gr("video.stream.list"),t);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(gr("video.stream.list"),Lt(jt({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.stream.list"),t),e}}))}},bo={value:function(e){return new Promise((async t=>{const r=e=>{t(e)};this.on(gr("video.stream.start"),r);try{const t=await this.execute({method:"video.stream.start",params:jt({room_session_id:this.roomSessionId},e)});this.emit(gr("video.stream.start"),Lt(jt({},t),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(gr("video.stream.start"),r),e}}))}},_o=eo("video.member.audio_mute",{transformResolve:Yn}),wo=eo("video.member.audio_unmute",{transformResolve:Yn}),So=eo("video.member.video_mute",{transformResolve:Yn}),ko=eo("video.member.video_unmute",{transformResolve:Yn}),Eo=eo("video.member.deaf",{transformResolve:Yn}),Co=eo("video.member.undeaf",{transformResolve:Yn}),To={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})}},Io=eo("video.member.set_input_volume",{transformResolve:Yn}),Mo=eo("video.member.set_output_volume",{transformResolve:Yn}),Po=eo("video.member.set_input_sensitivity",{transformResolve:Yn}),Ro={value:function(e){var t=e,{memberId:r,mediaAllowed:n,joinAudioMuted:o,joinVideoMuted:s}=t,i=Nt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:jt({room_session_id:this.roomSessionId,member_id:r,media_allowed:n,join_audio_muted:o,join_video_muted:s},i)},{transformResolve:Yn})}},Oo={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})}},Ao=eo("video.member.set_position",{transformResolve:Yn}),xo={value:function(e){var t=e,{memberId:r}=t,n=Nt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:jt({room_session_id:this.roomSessionId,member_id:r},n)},{transformResolve:Yn})}},jo={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:Yn})}},Lo=eo("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),No=eo("video.member.set_meta",{transformResolve:Yn}),Do=eo("video.member.update_meta",{transformResolve:Yn}),Wo=eo("video.member.delete_meta",{transformResolve:Yn}),Vo=class extends zn{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")}})}},Uo=e=>Bn({store:e.store,Component:Vo,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),$o=class extends zn{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)}})}},Bo=e=>Bn({store:e.store,Component:$o,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),qo=class extends zn{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},Fo=e=>Bn({store:e.store,Component:qo,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),Ho={};Dt(Ho,{BaseChatAPI:()=>ls,BaseChatConsumer:()=>us,ChatMember:()=>as,ChatMessage:()=>cs,createBaseChatObject:()=>hs,getMemberState:()=>es,getMembers:()=>Xo,getMessages:()=>Ko,publish:()=>Go,setMemberState:()=>Zo});var zo=()=>{},Qo=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),Jo=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Nt(n,["memberId"]);return this.execute({method:e,params:jt({member_id:o},s)},t)}}),Go=Qo("chat.publish",{transformResolve:zo}),Ko=Qo("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>er(e))),cursor:e.cursor})}),Xo=Qo("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>er(e)))})}),Yo=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 Lt(jt({},e),{channels:t})},Zo=Jo("chat.member.set_state",{transformResolve:zo,transformParams:Yo}),es=Jo("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Yo}),ts={};Dt(ts,{BasePubSubConsumer:()=>ss,PubSubMessage:()=>rs,createBasePubSubObject:()=>is});var rs=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}},ns=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ae((e=>e.type.startsWith("chat.")));switch(t.type){case"chat.channel.message":yield xe(e,{type:"chat.message",payload:t.payload});break;default:Xt().debug("[pubSubWorker] Unrecognized Action",t)}}},os=e=>e.map((e=>({name:e}))),ss=class extends Jn{constructor(e){super(e),Ut(this,"_eventsPrefix","chat"),Ut(this,"subscribeMethod","chat.subscribe"),this._attachListeners(""),this.runWorker("pubSub",{worker:ns})}getEmitterTransforms(){return new Map([[["message"],{type:"pubSubMessage",instanceFactory:()=>new rs({}),payloadTransform:e=>{const{channel:t,message:r}=e.params,n=Nt(r,["member"]);return er(Lt(jt({},n),{channel:t}))}}]])}_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:os(r)}}_setSubscribeParams(e){this.subscribeParams=jt(jt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return jt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return jt({},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 n=this.getSubscriptions();if(n.length>0){const e={method:"chat.unsubscribe",params:Lt(jt({},t),{events:n})};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(Pr.reauthAction({token:e}))}))}publish(e){return this.execute({method:"chat.publish",params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select($n);return e&&"channels"in e&&e.channels?e.channels:{}}},is=e=>Bn({store:e.store,Component:ss,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),as=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:{}}},cs=class extends rs{get member(){return this.payload.member}},ds=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ae((e=>e.type.startsWith("chat.")));switch(t.type){case"chat.channel.message":break;case"chat.member.joined":case"chat.member.updated":case"chat.member.left":yield xe(e,t);break;default:Xt().debug("[chatWorker] Unrecognized Action",t)}}},us=class extends ss{constructor(e){super(e),Ut(this,"_eventsPrefix","chat"),Ut(this,"subscribeMethod","chat.subscribe"),this.runWorker("chat",{worker:ds})}getEmitterTransforms(){return new Map([[["message"],{type:"chatMessage",instanceFactory:()=>new cs({}),payloadTransform:e=>{const{channel:t,message:r}=e.params;return er(Lt(jt({},r),{channel:t}))}}],[["member.joined","member.left","member.updated"],{type:"chatMember",instanceFactory:e=>{const{member:t}=e.params;return new as(er(t))},payloadTransform:e=>{const{member:t}=e.params;return er(t)}}]])}},ls=sr(us,{publish:Go,getMembers:Xo,getMessages:Ko,setMemberState:Zo,getMemberState:es}),hs=e=>Bn({store:e.store,Component:ls,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),ms={};function*ps(e){const{action:t,memberList:r,channels:{pubSubChannel:n}}=e,o={};t.payload.layout.layers.forEach((e=>{var t;const n=e.member_id;if(!n)return;const s=r.get(n);s&&e.position!==(null==(t=s.member)?void 0:t.current_position)?(ys({memberList:r,memberId:n,currentPosition:e.position}),o[n]=!0):o[n]=!1}));for(const[e,t]of r)if(o[e])yield xe(n,{type:"video.member.updated",payload:t});else if(void 0===o[e]){const t=ys({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield xe(n,{type:"video.member.updated",payload:t})}}function*gs({action:e,channels:t,memberList:r}){var n,o;const s=e.payload.member.id,i=ys({memberList:r,memberId:s,currentPosition:null==(o=null==(n=r.get(s))?void 0:n.member)?void 0:o.current_position});if(!i)return;const{member:{updated:a=[]}}=e.payload,c=Lt(jt({},i),{member:jt(jt({},i.member),e.payload.member)});r.set(s,c);for(const r of a){const n=`${e.type}.${r}`;yield xe(t.pubSubChannel,{type:n,payload:c})}yield xe(t.pubSubChannel,{type:e.type,payload:c})}Dt(ms,{MEMBER_POSITION_COMPOUND_EVENTS:()=>fs,memberPositionWorker:()=>vs,memberUpdatedWorker:()=>gs});var fs=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),vs=function*({instance:e,channels:t,initialState:r}){if(!r)return;const{swEventChannel:n}=t;let o=bs(r);const s=e=>{o.has(e.member.id)||o.set(e.member.id,e)};for(;;){const r=yield Ae(n,(t=>("video.member.updated"===t.type||"video.layout.changed"===t.type||"video.member.joined"===t.type||"video.member.left"===t.type)&&En(t)===e._eventsNamespace));switch(r.type){case"video.member.updated":s(r.payload),yield Ne(gs,{action:r,channels:t,memberList:o,instance:e});break;case"video.member.joined":s(r.payload);break;case"video.member.left":o.delete(r.payload.member.id);break;case"video.layout.changed":yield Ne(ps,{action:r,channels:t,memberList:o,instance:e})}}},ys=({memberList:e,memberId:t,currentPosition:r})=>{const n=e.get(t);if(!n)return;if(!r)return n;const o=Lt(jt({},n),{member:Lt(jt({},null==n?void 0:n.member),{current_position:r})});return e.set(t,o),o},bs=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};Dt({},{configureFullStack:()=>Es,configureJestStore:()=>ks,createMockedLogger:()=>Ss,createPubSubChannel:()=>Is,createSwEventChannel:()=>Ms,rpcConnectResultVRT:()=>Ts,wait:()=>Cs});var _s="8f0a119a-cda7-4497-a47d-c81493b824d4",ws="<VRT>",Ss=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),ks=e=>qn(jt({userOptions:{project:_s,token:ws,devTools:!1,emitter:new Et},SessionConstructor:an,runSagaMiddleware:!1},e)),Es=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Et,r=qn({userOptions:{project:_s,token:ws,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Pr.initAction()),r.dispatch(Pr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Pr.destroyAction())}},Cs=e=>new Promise((t=>{setTimeout(t,e)})),Ts={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",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"}]},Is=()=>ot(),Ms=()=>ot(),Ps=jt({},Nn);const Rs=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Os=()=>{if(!Rs())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},As=()=>Os().getSupportedConstraints(),xs=e=>e&&e instanceof MediaStream,js=()=>"sinkId"in HTMLMediaElement.prototype,Ls=async(e,t)=>{if(null!==e)if("string"==typeof t)if(js())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?Xt().error(`You need to use HTTPS for selecting audio output device: ${e}`):Xt().error(`Error: ${e}`),e}else Xt().warn("Browser does not support output device selection.");else Xt().warn(`Invalid speaker deviceId: '${t}'`);else Xt().warn("No HTMLMediaElement to attach the speakerId")},Ns=e=>{var t;xs(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(Ds))},Ds=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},Ws={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},Vs=e=>{if(e)return Ws[e]},Us=()=>Os().enumerateDevices(),$s=async e=>{let t=await Us().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},Bs=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 $s(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(Xt().warn(`No ${e} devices to check for permissions!`),null)})(Vs(e))},qs=()=>Bs("camera"),Fs=()=>Bs("microphone"),Hs=()=>Bs("speaker"),zs=async(e={audio:!0,video:!0})=>{var t;try{const t=Os().getUserMedia(e);if(await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Fs()),(null==e?void 0:e.video)&&t.push(qs()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e)){const e=new Error("Timeout reading from your devices");return await dr(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":Xt().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":Xt().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":Xt().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":Xt().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),Xt().info("List of available constraints:",As());break;case"NotAllowedError":Xt().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?Xt().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):Xt().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":Xt().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}},Qs=e=>Os().getDisplayMedia(e),Js=async(e,t=!1)=>Ks(e,t),Gs=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:n,groupId:o})=>{var s;if(!e||t.targets&&!(null===(s=t.targets)||void 0===s?void 0:s.includes(n)))return!1;if(!o)return!0;const i=`${n}-${o}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(i)||!a||(r.push(i),0))}))},Ks=async(e,t=!1)=>{let r;if(!1===await Bs(e)){const t={audio:!(n=e)||"all"===n||"microphone"===n||"speaker"===n,video:!n||"all"===n||"camera"===n};r=await zs(t)}var n;const o=await $s(Vs(e));return r&&Ns(r),!0===t?o:Gs(o)},Xs=async(e,t,r)=>{const n=await Ks(r,!0);for(let r=0;r<n.length;r++){const{deviceId:o,label:s}=n[r];if(e===o||t===s)return o}return null},Ys=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Zs={camera:qs,microphone:Fs,speaker:Hs},ei=["camera","microphone","speaker"],ti=`Allowed targets are: '${ei.join("', '")}'`,ri={speaker:js},ni=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:ei).filter((e=>!!ei.includes(e)||(Xt().warn(`We'll ignore the "${e}" target as it is not allowed. ${ti}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${ti}.`);const n=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Zs[e]())))).reduce(((e,r,n)=>{var o;const s=t[n];return e[!(s in ri)||(null===(o=ri[s])||void 0===o?void 0:o.call(ri))?"supported":"unsupported"].push([s,!!r]),e}),{supported:[],unsupported:[]})})({targets:r});if(n.unsupported.length>0&&r.length===n.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(n.supported.every((([e,t])=>!t)))throw new Error("You must ask the user for permissions before being able to listen for device changes. Try calling getUserMedia() before calling `createDeviceWatcher()`.");let o=[];const s=n.supported.reduce(((e,[t,r])=>(r?e.push(t):o.push(t),e)),[]);if(s.length!==r.length){const e=n.unsupported.length>0?`The platform doesn't support "${n.unsupported.map((([e])=>e)).join(", ")}" as target/s, which means it's not possible to watch for changes on those devices. `:"",t=o.length>0?`The user hasn't granted permissions for the following targets: ${o.join(", ")}. `:"";Xt().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return Xt().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new Et,n=await Us(),o=null==t?void 0:t.reduce(((e,t)=>{const r=Vs(t);return r&&e.push(r),e}),[]);let s=Gs(n,{excludeDefault:!0,targets:o});return Os().addEventListener("devicechange",(async()=>{const e=await Us(),t=s,n=Gs(e,{excludeDefault:!0,targets:o});s=n;const i=((e,t)=>{const r=Ys(e),n=Ys(e),o=[];Xt().debug("[_getDeviceListDiff] <- oldDevices",e),Xt().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(n.delete(t),e.label!==s.label&&o.push(e)),void 0===s}));return{updated:o.map((e=>({type:"updated",payload:e}))),removed:Array.from(n,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:s.map((e=>({type:"added",payload:e})))}})(t,n),a=i.added.length>0,c=i.removed.length>0,d=i.updated.length>0;(a||c||d)&&r.emit("changed",{changes:i,devices:n}),a&&r.emit("added",{changes:i.added,devices:n}),c&&r.emit("removed",{changes:i.removed,devices:n}),d&&r.emit("updated",{changes:i.updated,devices:n})})),r},oi=e=>"function"==typeof(null==e?void 0:e.getTracks),si=e=>{Xt().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return zs(e)},ii=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:n=""}=e;if(r){const e=await Xs(r,n,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:o=!1,camId:s}=e;const{camLabel:i=""}=e;if(s){const e=await Xs(s,i,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}},ai=e=>/^m=audio/.test(e),ci=e=>/^m=video/.test(e),di=e=>{const t=e.split("\r\n"),r=t.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(r<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})(t[r]),o=new RegExp(`a=fmtp:${n}`),s=t.findIndex((e=>o.test(e)));return s>=0?/stereo=1;/.test(t[s])||(t[s]+="; stereo=1; sprop-stereo=1"):t[r]+=`\r\na=fmtp:${n} stereo=1; sprop-stereo=1`,t.join("\r\n")};class ui{constructor(e,t){this.call=e,this.type=t,this.uuid=_(),this._negotiating=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this)}get logger(){return Xt()}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 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}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&&(Ds(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 n=await ii(this.options),o=await si({[e]:n[e]});if(o&&xs(o)){const n=o.getTracks().find((t=>t.kind===e));n&&(await r.replaceTrack(n),null===(t=this._localStream)||void 0===t||t.addTrack(n))}}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("RTCPeer restartIce error",e)}}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 n=Object.assign(Object.assign({},r.track.getConstraints()),t),o=this.getDeviceId(e);o&&!this.options.screenShare&&(n.deviceId={exact:o}),this.logger.info(`Apply ${e} constraints`,this.call.id,n),await r.track.applyConstraints(n)}}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()}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){try{const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this.isOffer&&this._resolveStartMethod()}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&&xs(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 n={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(n.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",n),t.forEach((e=>{this.instance.addTransceiver(e,n)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),n.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",n)}}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()}_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._iceTimeout=null,!this.instance.localDescription)return;const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this)}catch(e){this._rejectStartMethod(e)}}_onIce(e){this._iceTimeout||(this._iceTimeout=setTimeout((()=>this._sdpReady()),this.options.iceGatheringTimeout)),e.candidate?(this.logger.debug("IceCandidate:",e.candidate),this.call.emit("icecandidate",e)):this._sdpReady()}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:n,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=di(e.sdp)),e.sdp&&r&&n&&o&&(e.sdp=((e,t,r,n)=>{const o=e.split("\r\n");return o.forEach(((e,s)=>{/^a=fmtp:\d*/.test(e)?o[s]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${n}`:/^a=mid:(1|video)/.test(e)&&(o[s]+=`\r\nb=AS:${t}`)})),o.join("\r\n")})(e.sdp,r,n,o)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=di(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",n=this.instance.localDescription.sdp.split(r);if(n.findIndex(ai)<n.findIndex(ci))return e;const o=e.split(r),s=o.findIndex(ai),i=o.findIndex(ci),a=o.slice(s,i),c=o.slice(i,o.length-1);return[...o.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(xs(this.options.localStream))return this.options.localStream;const e=await ii(this.options);return si(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1;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("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)}))}}
|
|
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,n;r=t,n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"];function o(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(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?s:void 0!==console[n]?o(console,n):void 0!==console.log?o(console,"log"):e)}function a(t,r){for(var o=0;o<n.length;o++){var s=n[o];this[s]=o<t?e:this.methodFactory(s,t,r)}this.log=this.debug}function c(e,r,n){return function(){typeof console!==t&&(a.call(this,r,n),this[e].apply(this,arguments))}}function d(e,t,r){return i(e)||c.apply(this,arguments)}function u(e,r,o){var s,i=this;r=null==r?"WARN":r;var c="loglevel";function u(){var e;if(typeof window!==t&&c){try{e=window.localStorage[c]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,n=r.indexOf(encodeURIComponent(c)+"=");-1!==n&&(e=/^([^;]+)/.exec(r.slice(n))[1])}catch(e){}return void 0===i.levels[e]&&(e=void 0),e}}"string"==typeof e?c+=":"+e:"symbol"==typeof e&&(c=void 0),i.name=e,i.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},i.methodFactory=o||d,i.getLevel=function(){return s},i.setLevel=function(r,o){if("string"==typeof r&&void 0!==i.levels[r.toUpperCase()]&&(r=i.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=i.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(s=r,!1!==o&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&c){try{return void(window.localStorage[c]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(c)+"="+r+";"}catch(e){}}}(r),a.call(i,r,e),typeof console===t&&r<i.levels.SILENT)return"No console available for logging"},i.setDefaultLevel=function(e){r=e,u()||i.setLevel(e,!1)},i.resetLevel=function(){i.setLevel(r,!1),function(){if(typeof window!==t&&c){try{return void window.localStorage.removeItem(c)}catch(e){}try{window.document.cookie=encodeURIComponent(c)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},i.enableAll=function(e){i.setLevel(i.levels.TRACE,e)},i.disableAll=function(e){i.setLevel(i.levels.SILENT,e)};var l=u();null==l&&(l=r),i.setLevel(l,!1)}var l=new u,h={};l.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=h[e];return t||(t=h[e]=new u(e,l.getLevel(),l.methodFactory)),t};var m=typeof window!==t?window.log:void 0;return l.noConflict=function(){return typeof window!==t&&window.log===l&&(window.log=m),l},l.getLoggers=function(){return h},l.default=l,l},e.exports?e.exports=n():r.log=n()}(r);var n,o=r.exports,s=new Uint8Array(16);function i(){if(!n&&!(n="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 n(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}function h(e,t,r){function n(e,n,o,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 n&&(n=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}(n)),16!==n.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(n),i.set(e,n.length),(i=r(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,o){s=s||0;for(var a=0;a<16;++a)o[s+a]=i[a];return o}return l(i)}try{n.name=e}catch(e){}return n.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",n.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",n}function m(e){return 14+(e+64>>>9<<4)+1}function p(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function g(e,t,r,n,o,s){return p((i=p(p(t,e),p(n,s)))<<(a=o)|i>>>32-a,r);var i,a}function f(e,t,r,n,o,s,i){return g(t&r|~t&n,e,t,o,s,i)}function v(e,t,r,n,o,s,i){return g(t&n|r&~n,e,t,o,s,i)}function y(e,t,r,n,o,s,i){return g(t^r^n,e,t,o,s,i)}function b(e,t,r,n,o,s,i){return g(r^(t|~n),e,t,o,s,i)}function _(e,t,r){var n=(e=e||{}).random||(e.rng||i)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var o=0;o<16;++o)t[r+o]=n[o];return t}return l(n)}function w(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:return t^r^n;case 2:return t&r^t&n^r&n;case 3:return t^r^n}}function S(e,t){return e<<t|e>>>32-t}function k(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach((function(t){k(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function T(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}h("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,n="0123456789abcdef",o=0;o<r;o+=8){var s=e[o>>5]>>>o%32&255,i=parseInt(n.charAt(s>>>4&15)+n.charAt(15&s),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[m(t)-1]=t;for(var r=1732584193,n=-271733879,o=-1732584194,s=271733878,i=0;i<e.length;i+=16){var a=r,c=n,d=o,u=s;r=f(r,n,o,s,e[i],7,-680876936),s=f(s,r,n,o,e[i+1],12,-389564586),o=f(o,s,r,n,e[i+2],17,606105819),n=f(n,o,s,r,e[i+3],22,-1044525330),r=f(r,n,o,s,e[i+4],7,-176418897),s=f(s,r,n,o,e[i+5],12,1200080426),o=f(o,s,r,n,e[i+6],17,-1473231341),n=f(n,o,s,r,e[i+7],22,-45705983),r=f(r,n,o,s,e[i+8],7,1770035416),s=f(s,r,n,o,e[i+9],12,-1958414417),o=f(o,s,r,n,e[i+10],17,-42063),n=f(n,o,s,r,e[i+11],22,-1990404162),r=f(r,n,o,s,e[i+12],7,1804603682),s=f(s,r,n,o,e[i+13],12,-40341101),o=f(o,s,r,n,e[i+14],17,-1502002290),r=v(r,n=f(n,o,s,r,e[i+15],22,1236535329),o,s,e[i+1],5,-165796510),s=v(s,r,n,o,e[i+6],9,-1069501632),o=v(o,s,r,n,e[i+11],14,643717713),n=v(n,o,s,r,e[i],20,-373897302),r=v(r,n,o,s,e[i+5],5,-701558691),s=v(s,r,n,o,e[i+10],9,38016083),o=v(o,s,r,n,e[i+15],14,-660478335),n=v(n,o,s,r,e[i+4],20,-405537848),r=v(r,n,o,s,e[i+9],5,568446438),s=v(s,r,n,o,e[i+14],9,-1019803690),o=v(o,s,r,n,e[i+3],14,-187363961),n=v(n,o,s,r,e[i+8],20,1163531501),r=v(r,n,o,s,e[i+13],5,-1444681467),s=v(s,r,n,o,e[i+2],9,-51403784),o=v(o,s,r,n,e[i+7],14,1735328473),r=y(r,n=v(n,o,s,r,e[i+12],20,-1926607734),o,s,e[i+5],4,-378558),s=y(s,r,n,o,e[i+8],11,-2022574463),o=y(o,s,r,n,e[i+11],16,1839030562),n=y(n,o,s,r,e[i+14],23,-35309556),r=y(r,n,o,s,e[i+1],4,-1530992060),s=y(s,r,n,o,e[i+4],11,1272893353),o=y(o,s,r,n,e[i+7],16,-155497632),n=y(n,o,s,r,e[i+10],23,-1094730640),r=y(r,n,o,s,e[i+13],4,681279174),s=y(s,r,n,o,e[i],11,-358537222),o=y(o,s,r,n,e[i+3],16,-722521979),n=y(n,o,s,r,e[i+6],23,76029189),r=y(r,n,o,s,e[i+9],4,-640364487),s=y(s,r,n,o,e[i+12],11,-421815835),o=y(o,s,r,n,e[i+15],16,530742520),r=b(r,n=y(n,o,s,r,e[i+2],23,-995338651),o,s,e[i],6,-198630844),s=b(s,r,n,o,e[i+7],10,1126891415),o=b(o,s,r,n,e[i+14],15,-1416354905),n=b(n,o,s,r,e[i+5],21,-57434055),r=b(r,n,o,s,e[i+12],6,1700485571),s=b(s,r,n,o,e[i+3],10,-1894986606),o=b(o,s,r,n,e[i+10],15,-1051523),n=b(n,o,s,r,e[i+1],21,-2054922799),r=b(r,n,o,s,e[i+8],6,1873313359),s=b(s,r,n,o,e[i+15],10,-30611744),o=b(o,s,r,n,e[i+6],15,-1560198380),n=b(n,o,s,r,e[i+13],21,1309151649),r=b(r,n,o,s,e[i+4],6,-145523070),s=b(s,r,n,o,e[i+11],10,-1120210379),o=b(o,s,r,n,e[i+2],15,718787259),n=b(n,o,s,r,e[i+9],21,-343485551),r=p(r,a),n=p(n,c),o=p(o,d),s=p(s,u)}return[r,n,o,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(m(t)),n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))})),h("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var n=unescape(encodeURIComponent(e));e=[];for(var o=0;o<n.length;++o)e.push(n.charCodeAt(o))}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 m=16;m<80;++m)l[m]=S(l[m-3]^l[m-8]^l[m-14]^l[m-16],1);for(var p=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var _=Math.floor(b/20),k=S(p,5)+w(_,g,f,v)+y+t[_]+l[b]>>>0;y=v,v=f,f=S(g,30)>>>0,g=p,p=k}r[0]=r[0]+p>>>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 I="function"==typeof Symbol&&Symbol.observable||"@@observable",M=function(){return Math.random().toString(36).substring(7).split("").join(".")},P={INIT:"@@redux/INIT"+M(),REPLACE:"@@redux/REPLACE"+M(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+M()}};function R(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}function O(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(T(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(T(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(T(2));var o=e,s=t,i=[],a=i,c=!1;function d(){a===i&&(a=i.slice())}function u(){if(c)throw new Error(T(3));return s}function l(e){if("function"!=typeof e)throw new Error(T(4));if(c)throw new Error(T(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(T(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=null}}}function h(e){if(!R(e))throw new Error(T(7));if(void 0===e.type)throw new Error(T(8));if(c)throw new Error(T(9));try{c=!0,s=o(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}function m(e){if("function"!=typeof e)throw new Error(T(10));o=e,h({type:P.REPLACE})}function p(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(T(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[I]=function(){return this},e}return h({type:P.INIT}),(n={dispatch:h,subscribe:l,getState:u,replaceReducer:m})[I]=p,n}function A(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++){var o=t[n];"function"==typeof e[o]&&(r[o]=e[o])}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:P.INIT}))throw new Error(T(12));if(void 0===r(void 0,{type:P.PROBE_UNKNOWN_ACTION()}))throw new Error(T(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var n=!1,o={},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(T(14));o[c]=u,n=n||u!==d}return(n=n||i.length!==Object.keys(e).length)?o:e}}function x(e,t){return function(){return t(e.apply(this,arguments))}}function j(){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 L(){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),n=function(){throw new Error(T(15))},o={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},s=t.map((function(e){return e(o)}));return n=j.apply(void 0,s)(r.dispatch),C(C({},r),{},{dispatch:n})}}}var N=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:P,applyMiddleware:L,bindActionCreators:function(e,t){if("function"==typeof e)return x(e,t);if("object"!=typeof e||null===e)throw new Error(T(16));var r={};for(var n in e){var o=e[n];"function"==typeof o&&(r[n]=x(o,t))}return r},combineReducers:A,compose:j,createStore:O,legacy_createStore:O}),D=function(e){return"@@redux-saga/"+e},W=D("CANCEL_PROMISE"),V=D("CHANNEL_END"),U=D("IO"),$=D("MATCH"),B=D("MULTICAST"),q=D("SAGA_ACTION"),F=D("SELF_CANCELLATION"),H=D("TASK"),z=D("TASK_CANCEL"),Q=D("TERMINATE"),J=D("LOCATION");function G(){return(G=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var K=function(e){return null==e},X=function(e){return null!=e},Y=function(e){return"function"==typeof e},Z=function(e){return"string"==typeof e},ee=Array.isArray,te=function(e){return e&&Y(e.then)},re=function(e){return e&&Y(e.next)&&Y(e.throw)},ne=function e(t){return t&&(Z(t)||se(t)||Y(t)||ee(t)&&t.every(e))},oe=function(e){return e&&Y(e.take)&&Y(e.close)},se=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},ie=function(e){return function(){return!0}}(),ae=function(){},ce=function(e){return e},de=function(e,t){G(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))};function ue(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function le(e){var t=!1;return function(){t||(t=!0,e())}}var he=function(e){throw e},me=function(e){return{value:e,done:!0}};function pe(e,t,r){void 0===t&&(t=he),void 0===r&&(r="iterator");var n={meta:{name:r},next:e,throw:t,return:me,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(n[Symbol.iterator]=function(){return n}),n}function ge(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var fe=function(e){return Array.apply(null,new Array(e))},ve=function(e){return function(t){return e(Object.defineProperty(t,q,{value:!0}))}},ye=function(e){return e===Q},be=function(e){return e===z},_e=function(e){return ye(e)||be(e)};function we(e,t){var r,n=Object.keys(e),o=n.length,s=0,i=ee(e)?fe(o):{},a={};return n.forEach((function(e){var n=function(n,a){r||(a||_e(n)?(t.cancel(),t(n,a)):(i[e]=n,++s===o&&(r=!0,t(i))))};n.cancel=ae,a[e]=n})),t.cancel=function(){r||(r=!0,n.forEach((function(e){return a[e].cancel()})))},a}function Se(e){return{name:e.name||"anonymous",location:ke(e)}}function ke(e){return e[J]}var Ee={isEmpty:ie,put:ae,take:ae},Ce="TAKE",Te="CALL",Ie="FORK",Me="SELECT",Pe=function(e,t){var r;return(r={})[U]=!0,r.combinator=!1,r.type=e,r.payload=t,r},Re=function(e){return Pe(Ie,G({},e.payload,{detached:!0}))};function Oe(e,t){return void 0===e&&(e="*"),ne(e)?Pe(Ce,{pattern:e}):oe(r=e)&&r[B]&&X(t)&&ne(t)?Pe(Ce,{channel:e,pattern:t}):oe(e)?Pe(Ce,{channel:e}):void 0;var r}function Ae(e,t){return K(t)&&(t=e,e=void 0),Pe("PUT",{channel:e,action:t})}function xe(e,t){var r,n=null;return Y(e)?r=e:(ee(e)?(n=e[0],r=e[1]):(n=e.context,r=e.fn),n&&Z(r)&&Y(n[r])&&(r=n[r])),{context:n,fn:r,args:t}}function je(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Pe(Te,xe(e,r))}function Le(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Pe(Ie,xe(e,r))}function Ne(e){void 0===e&&(e=ce);for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Pe(Me,{selector:e,args:r})}function De(){return Pe("CANCELLED",{})}var We=[],Ve=0;function Ue(e){try{qe(),e()}finally{Fe()}}function $e(e){We.push(e),Ve||(qe(),He())}function Be(e){try{return qe(),e()}finally{He()}}function qe(){Ve++}function Fe(){Ve--}function He(){var e;for(Fe();!Ve&&void 0!==(e=We.shift());)Ue(e)}var ze=function(e){return function(t){return e.some((function(e){return Xe(e)(t)}))}},Qe=function(e){return function(t){return e(t)}},Je=function(e){return function(t){return t.type===String(e)}},Ge=function(e){return function(t){return t.type===e}},Ke=function(){return ie};function Xe(e){var t="*"===e?Ke:Z(e)?Je:ee(e)?ze:function(e){return Y(e)&&e.hasOwnProperty("toString")}(e)?Je:Y(e)?Qe:se(e)?Ge:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var Ye={type:V},Ze=function(e){return e&&e.type===V};function et(e){void 0===e&&(e=function(e,t){void 0===e&&(e=10);var r=new Array(e),n=0,o=0,s=0,i=function(){if(0!=n){var t=r[s];return r[s]=null,n--,s=(s+1)%e,t}},a=function(){for(var e=[];n;)e.push(i());return e};return{isEmpty:function(){return 0==n},put:function(t){var i;n<e||(i=2*e,r=a(),n=r.length,o=r.length,s=0,r.length=i,e=i),function(t){r[o]=t,o=(o+1)%e,n++}(t)},take:i,flush:a}}(void 0));var t=!1,r=[];return{take:function(n){t&&e.isEmpty()?n(Ye):e.isEmpty()?(r.push(n),n.cancel=function(){ue(r,n)}):n(e.take())},put:function(n){if(!t){if(0===r.length)return e.put(n);r.shift()(n)}},flush:function(r){t&&e.isEmpty()?r(Ye):r(e.flush())},close:function(){if(!t){t=!0;var e=r;r=[];for(var n=0,o=e.length;n<o;n++)(0,e[n])(Ye)}}}}function tt(e,t){void 0===t&&(t=Ee);var r,n=!1,o=et(t),s=function(){n||(n=!0,Y(r)&&r(),o.close())};return r=le(r=e((function(e){Ze(e)?s():o.put(e)}))),n&&r(),{take:o.take,flush:o.flush,close:s}}function rt(){var e,t=!1,r=[],n=r,o=function(){n===r&&(n=r.slice())},s=function(){t=!0;var e=r=n;n=[],e.forEach((function(e){e(Ye)}))};return(e={})[B]=!0,e.put=function(e){if(!t)if(Ze(e))s();else for(var o=r=n,i=0,a=o.length;i<a;i++){var c=o[i];c[$](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=Ke),t?e(Ye):(e[$]=r,o(),n.push(e),e.cancel=le((function(){o(),ue(n,e)})))},e.close=s,e}function nt(){var e=rt(),t=e.put;return e.put=function(e){e[q]?t(e):$e((function(){t(e)}))},e}function ot(e,t){var r=e[W];Y(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var st,it=0,at=function(){return++it};function ct(e){e.isRunning()&&e.cancel()}var dt=((st={}).TAKE=function(e,t,r){var n=t.channel,o=void 0===n?e.channel:n,s=t.pattern,i=t.maybe,a=function(e){e instanceof Error?r(e,!0):!Ze(e)||i?r(e):r(Q)};try{o.take(a,X(s)?Xe(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},st.PUT=function(e,t,r){var n=t.channel,o=t.action,s=t.resolve;$e((function(){var t;try{t=(n?n.put:e.dispatch)(o)}catch(e){return void r(e,!0)}s&&te(t)?ot(t,r):r(t)}))},st.ALL=function(e,t,r,n){var o=n.digestEffect,s=it,i=Object.keys(t);if(0!==i.length){var a=we(t,r);i.forEach((function(e){o(t[e],s,a[e],e)}))}else r(ee(t)?[]:{})},st.RACE=function(e,t,r,n){var o=n.digestEffect,s=it,i=Object.keys(t),a=ee(t)?fe(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,n){d||(n||_e(t)?(r.cancel(),r(t,n)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=ae,c[e]=t})),r.cancel=function(){d||(d=!0,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||o(t[e],s,c[e],e)}))},st.CALL=function(e,t,r,n){var o=t.context,s=t.fn,i=t.args,a=n.task;try{var c=s.apply(o,i);if(te(c))return void ot(c,r);if(re(c))return void yt(e,c,a.context,it,Se(s),!1,r);r(c)}catch(e){r(e,!0)}},st.CPS=function(e,t,r){var n=t.context,o=t.fn,s=t.args;try{var i=function(e,t){K(e)?r(t):r(e,!0)};o.apply(n,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},st.FORK=function(e,t,r,n){var o=t.fn,s=t.detached,i=n.task,a=function(e){var t=e.context,r=e.fn,n=e.args;try{var o=r.apply(t,n);if(re(o))return o;var s=!1;return pe((function(e){return s?{value:e,done:!0}:(s=!0,{value:o,done:!te(o)})}))}catch(e){return pe((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Se(t)}(a,o);Be((function(){var t=yt(e,a,i.context,it,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},st.JOIN=function(e,t,r,n){var o=n.task,s=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&ue(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(ee(t)){if(0===t.length)return void r([]);var i=we(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},st.CANCEL=function(e,t,r,n){t===F?ct(n.task):ee(t)?t.forEach(ct):ct(t),r()},st.SELECT=function(e,t,r){var n=t.selector,o=t.args;try{r(n.apply(void 0,[e.getState()].concat(o)))}catch(e){r(e,!0)}},st.ACTION_CHANNEL=function(e,t,r){var n=t.pattern,o=et(t.buffer),s=Xe(n),i=function t(r){Ze(r)||e.channel.take(t,s),o.put(r)},a=o.close;o.close=function(){i.cancel(),a()},e.channel.take(i,s),r(o)},st.CANCELLED=function(e,t,r,n){r(n.task.isCancelled())},st.FLUSH=function(e,t,r){t.flush(r)},st.GET_CONTEXT=function(e,t,r,n){r(n.task.context[t])},st.SET_CONTEXT=function(e,t,r,n){de(n.task.context,t),r()},st);function ut(e,t){return e+"?"+t}function lt(e){var t=e.name,r=e.location;return r?t+" "+ut(r.fileName,r.lineNumber):t}function ht(e){var t,r=(t=[]).concat.apply(t,e.map((function(e){return e.cancelledTasks})));return r.length?["Tasks cancelled due to error:"].concat(r).join("\n"):""}var mt=null,pt=[],gt=function(e){e.crashedEffect=mt,pt.push(e)},ft=function(){mt=null,pt.length=0},vt=function(){var e,t=pt[0],r=pt.slice(1),n=t.crashedEffect?(e=ke(t.crashedEffect))?e.code+" "+ut(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+lt(t.meta)+(n?" \n when executing effect "+n:"")].concat(r.map((function(e){return" created by "+lt(e.meta)})),[ht(pt)]).join("\n")};function yt(e,t,r,n,o,s,i){var a=e.finalizeRunEffect((function(t,r,n){te(t)?ot(t,n):re(t)?yt(e,t,d.context,r,o,!1,n):t&&t[U]?(0,dt[t.type])(e,t.payload,n,u):n(t)}));l.cancel=ae;var c={meta:o,cancel:function(){0===c.status&&(c.status=1,l(z))},status:0},d=function(e,t,r,n,o,s,i){var a;void 0===i&&(i=ae);var c,d,u=0,l=null,h=[],m=Object.create(r),p=function(e,t,r){var n,o=[],s=!1;function i(e){h.push.apply(h,p.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){s||(ue(o,t),t.cont=ae,c?i(a):(t===e&&(n=a),o.length||(s=!0,r(n))))}}function c(){s||(s=!0,o.forEach((function(e){e.cont=ae,e.cancel()})),o=[])}return a(e),{addTask:a,cancelAll:c,abort:i,getTasks:function(){return o}}}(t,0,g);function g(t,r){if(r){if(u=2,gt({meta:o,cancelledTasks:h}),f.isRoot){var n=vt();ft(),e.onError(t,{sagaStack:n})}d=t,l&&l.reject(t)}else t===z?u=1:1!==u&&(u=3),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={})[H]=!0,a.id=n,a.meta=o,a.isRoot=s,a.context=m,a.joiners=[],a.queue=p,a.cancel=function(){0===u&&(u=1,p.cancelAll(),g(z,!1))},a.cont=i,a.end=g,a.setContext=function(e){de(m,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,2===u?l.reject(d):0!==u&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return 0===u},a.isCancelled=function(){return 1===u||0===u&&1===t.status},a.isAborted=function(){return 2===u},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,n,o,s,i),u={task:d,digestEffect:h};return i&&(i.cancel=d.cancel),l(),d;function l(e,r){try{var o;r?(o=t.throw(e),ft()):be(e)?(c.status=1,l.cancel(),o=Y(t.return)?t.return(z):{done:!0,value:z}):o=ye(e)?Y(t.return)?t.return():{done:!0}:t.next(e),o.done?(1!==c.status&&(c.status=3),c.cont(o.value)):h(o.value,n,l)}catch(e){if(1===c.status)throw e;c.status=2,c.cont(e,!0)}}function h(t,r,n,o){void 0===o&&(o="");var s,i=at();function c(r,o){s||(s=!0,n.cancel=ae,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),o&&function(e){mt=e}(t),n(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:o,effect:t}),c.cancel=ae,n.cancel=function(){s||(s=!0,c.cancel(),c.cancel=ae,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function bt(e,t){for(var r=e.channel,n=void 0===r?nt():r,o=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?ge:u,h=arguments.length,m=new Array(h>2?h-2:0),p=2;p<h;p++)m[p-2]=arguments[p];var g,f=t.apply(void 0,m),v=at();if(c&&(c.rootSagaStarted=c.rootSagaStarted||ae,c.effectTriggered=c.effectTriggered||ae,c.effectResolved=c.effectResolved||ae,c.effectRejected=c.effectRejected||ae,c.effectCancelled=c.effectCancelled||ae,c.actionDispatched=c.actionDispatched||ae,c.rootSagaStarted({effectId:v,saga:t,args:m})),d){var y=j.apply(void 0,d);g=function(e){return function(t,r,n){return y((function(t){return e(t,r,n)}))(t)}}}else g=ce;var b={channel:n,dispatch:ve(o),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Be((function(){var e=yt(b,f,a,v,Se(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function _t(e){var t,r=void 0===e?{}:e,n=r.context,o=void 0===n?{}:n,s=r.channel,i=void 0===s?nt():s,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,n,o={},s=Object.keys(e);for(n=0;n<s.length;n++)t.indexOf(r=s[n])>=0||(o[r]=e[r]);return o}(r,["context","channel","sagaMonitor"]);function d(e){return t=bt.bind(null,G({},c,{context:o,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){de(o,e)},d}var wt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}function o(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,n,s,i){if("function"!=typeof n)throw new TypeError("The listener must be a function");var a=new o(n,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 n:delete e._events[t]}function a(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,n,o=[];if(0===this._eventsCount)return o;for(n in e=this._events)t.call(e,n)&&o.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},a.prototype.listeners=function(e){var t=this._events[r?r+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var n=0,o=t.length,s=new Array(o);n<o;n++)s[n]=t[n].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,n,o,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,n),!0;case 4:return u.fn.call(u.context,t,n,o),!0;case 5:return u.fn.call(u.context,t,n,o,s),!0;case 6:return u.fn.call(u.context,t,n,o,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,m=u.length;for(d=0;d<m;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,n);break;case 4:u[d].fn.call(u[d].context,t,n,o);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,n,o){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||o&&!a.once||n&&a.context!==n||i(this,s);else{for(var c=0,d=[],u=a.length;c<u;c++)(a[c].fn!==t||o&&!a[c].once||n&&a[c].context!==n)&&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 n,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}(wt);var St=wt.exports,kt=Object.defineProperty,Et=Object.defineProperties,Ct=Object.getOwnPropertyDescriptor,Tt=Object.getOwnPropertyDescriptors,It=Object.getOwnPropertyNames,Mt=Object.getOwnPropertySymbols,Pt=Object.prototype.hasOwnProperty,Rt=Object.prototype.propertyIsEnumerable,Ot=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,At=(e,t)=>{for(var r in t||(t={}))Pt.call(t,r)&&Ot(e,r,t[r]);if(Mt)for(var r of Mt(t))Rt.call(t,r)&&Ot(e,r,t[r]);return e},xt=(e,t)=>Et(e,Tt(t)),jt=(e,t)=>{var r={};for(var n in e)Pt.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&Mt)for(var n of Mt(e))t.indexOf(n)<0&&Rt.call(e,n)&&(r[n]=e[n]);return r},Lt=(e,t)=>{for(var r in t)kt(e,r,{get:t[r],enumerable:!0})},Nt=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of It(t))Pt.call(e,o)||o===r||kt(e,o,{get:()=>t[o],enumerable:!(n=Ct(t,o))||n.enumerable});return e},Dt=(e,t,r)=>(Nt(e,t,"default"),r&&Nt(r,t,"default")),Wt=(e,t,r)=>(Ot(e,"symbol"!=typeof t?t+"":t,r),r),Vt="__local__",Ut="__synthetic__",$t=["room.started","room.ended"].map((e=>`video.${e}`)),Bt=o.getLogger("signalwire"),qt=Bt.methodFactory;Bt.methodFactory=(e,t,r)=>{const n=qt(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),n.apply(void 0,e)}};var Ft,Ht=Bt.getLevel();Bt.setLevel(Ht);var zt={},Qt=()=>null!=Ft?Ft:Bt,Jt=({type:e,payload:t})=>{const r=Qt(),{logWsTraffic:n}=zt||{};if(!n)return;const o=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,o,"\n")},Gt=()=>{const e=Qt();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?Jt:Reflect.get(e,t,r)})},Kt=(e,t)=>{const{result:r={},error:n}=e;if(n)return{error:n};const{code:o,node_id:s,result:i=null}=r;return o&&"200"!==o?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?Kt(i,s):{result:i}:{result:r}},Xt={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},Yt=(e,t=Xt)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,n])=>{const o=Zt(r);return e[o]="object"==typeof n&&n?Array.isArray(n)?t.propsToUpdateValue.includes(r)?n.map((e=>"string"==typeof e?Zt(e):Yt(e))):n:Yt(n):(e=>e.endsWith("At"))(o)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(n):n,e}),{}),Zt=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const n=t.trim().charAt(0),o=t.substr(1).toLowerCase();return`${e}${0===r?n.toLowerCase():n.toUpperCase()}${o}`}),""):e,er=/[A-Z]/g,tr=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(er,(e=>`_${e.toLowerCase()}`)))(e=rr({event:e,namespace:t}))),e),rr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,nr=(e,t)=>(Object.keys(t).forEach((t=>{if(e.prototype.hasOwnProperty(t))throw new Error(`[extendComponent] Duplicated method name: ${t}`)})),Object.defineProperties(e.prototype,t),e),or=({instance:e,transform:t,payload:r,transformedPayload:n})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:n,transform:o})=>{const s=At(xt(At({},n),{_eventsNamespace:o.getInstanceEventNamespace?o.getInstanceEventNamespace(r):void 0,eventChannel:o.getInstanceEventChannel?o.getInstanceEventChannel(r):void 0}),(e=>{let t={},r=e,n=!0;for(;n;)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):n=!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,o,s)=>"__sw_proxy"===o||("toString"===o?(({property:e,payload:t})=>"function"==typeof e?()=>JSON.stringify(t):e)({property:e[o],payload:n}):"_eventsNamespace"===o&&t.getInstanceEventNamespace?t.getInstanceEventNamespace(r):"eventChannel"===o&&t.getInstanceEventChannel?t.getInstanceEventChannel(r):o in n?n[o]:Reflect.get(e,o,s))}),payload:r,transformedPayload:n,transform:t}),sr=new Map,ir=/^(ws|wss):\/\//,ar=(e,t,r)=>{let n=null;return Promise.race([e,new Promise(((e,o)=>n=setTimeout(o,t,r)))]).finally((()=>clearTimeout(n)))},cr=e=>e.includes("session."),dr=["video.member.updated","video.member.talking"],ur=["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"],lr=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return ur.includes(t)||(e=>e.includes(Ut))(t)||hr(t)||cr(t)?null:dr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},hr=e=>e.includes(Vt),mr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Vt),e)),[]).join(".")},pr=e=>{var t;return At({jsonrpc:"2.0",id:null!=(t=e.id)?t:_()},e)},gr=e=>At({jsonrpc:"2.0"},e),fr={major:3,minor:0,revision:0},vr=e=>pr({method:"signalwire.connect",params:At({version:fr},e)}),yr={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=jt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in yr)e&&t.hasOwnProperty(e)&&(t[yr[e]]=t[e],delete t[e]);e.dialogParams=t}return e},_r=e=>(t={})=>pr({method:e,params:br(t)}),wr=_r("verto.invite"),Sr=_r("verto.bye"),kr=_r("verto.modify"),Er=_r("verto.info"),Cr=_r("verto.pong"),Tr=(e,t)=>gr({id:e,result:{method:t}}),Ir={};Lt(Ir,{authErrorAction:()=>Nr,authExpiringAction:()=>Wr,authSuccessAction:()=>Dr,compoundEventAttachAction:()=>Jr,createAction:()=>Pr,destroyAction:()=>xr,executeAction:()=>Lr,getCustomSagaActionType:()=>Qr,initAction:()=>Ar,makeCustomSagaAction:()=>zr,reauthAction:()=>jr,sessionAuthErrorAction:()=>qr,sessionConnectedAction:()=>Ur,sessionDisconnectedAction:()=>$r,sessionExpiringAction:()=>Fr,sessionReconnectingAction:()=>Br,socketMessageAction:()=>Vr});var Mr={};function Pr(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return At(At({type:e,payload:n.payload},"meta"in n&&{meta:n.meta}),"error"in n&&{error:n.error})}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>t.type===e,r}Lt(Mr,{configureStore:()=>Or,createAction:()=>Pr}),Dt(Mr,N);var Rr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?j:j.apply(null,arguments)};function Or(e){const t=function(){return[]},{reducer:r,middleware:n=t(),devTools:o=!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=A(r)}let c=n;"function"==typeof c&&(c=c(t));const d=L(...c);let u=j;o&&(u=Rr(At({trace:!1},"object"==typeof o&&o)));let l=[d];return Array.isArray(i)?l=[d,...i]:"function"==typeof i&&(l=i(l)),O(a,s,u(...l))}var Ar=Pr("swSdk/init"),xr=Pr("swSdk/destroy"),jr=Pr("swSdk/reauth"),Lr=Pr("swSdk/executeRequest"),Nr=Pr("auth/error"),Dr=Pr("auth/success"),Wr=Pr("auth/expiring"),Vr=Pr("socket/message"),Ur=Pr("session.connected"),$r=Pr("session.disconnected"),Br=Pr("session.reconnecting"),qr=Pr("session.auth_error"),Fr=Pr("session.expiring"),Hr=(e,t)=>`${t.type}/${e}`,zr=(e,t)=>xt(At({},t),{type:Hr(e,t)}),Qr=(e,t)=>Hr(e,t),Jr=Pr("compound_event:attach");function Gr(e){const t={},r=[];let n;const o={addCase(e,r){const n="string"==typeof e?e:e.type;if(n in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[n]=r,o},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),o),addDefaultCase:e=>(n=e,o)};return e(o),[t,r,n]}var Kr=({name:e="",initialState:t,reducers:r,extraReducers:n})=>function(e){const{name:t}=e;if(!t)throw new Error("`name` is a required option for createSlice");const r=e.initialState,n=e.reducers||{},o=Object.keys(n),s={},i={},a={};function c(){const[t={},n=[],o]="function"==typeof e.extraReducers?Gr(e.extraReducers):[e.extraReducers],s=At(At({},t),i);return function(e,t,r=[],n){let o,[s,i,a]="function"==typeof t?Gr(t):[t,r,n];function c(e=o(),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 o="function"==typeof e?()=>e():()=>e,c.getInitialState=o,c}(r,s,n,o)}let d;return o.forEach((e=>{const r=n[e],o=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,s[e]=c,i[o]=c,a[e]=d?Pr(o,d):Pr(o)})),{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(xr.type,(()=>t)),"function"==typeof n&&n(e)}});function Xr(e){return[Ar.type,jr.type].includes(e.type)}var Yr=Kr({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,n;return xt(At({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(n=null==t?void 0:t.ice_servers)?n:[]})},authStatus:(e,{payload:t})=>xt(At({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>xt(At({},e),{authState:t})},extraReducers:e=>{e.addCase(Nr.type,((e,{payload:t})=>xt(At({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(Xr,(e=>xt(At({},e),{authStatus:"authorizing"})))}}),{actions:Zr,reducer:en}=Yr,tn=Symbol("BaseSession"),rn=class{constructor(e){var t,r;this.options=e,Wt(this,"__sw_symbol",tn),Wt(this,"uuid",_()),Wt(this,"WebSocketConstructor"),Wt(this,"agent"),Wt(this,"connectVersion",fr),Wt(this,"_rpcConnectResult"),Wt(this,"_requests",new Map),Wt(this,"_socket",null),Wt(this,"_host","wss://relay.signalwire.com"),Wt(this,"_executeTimeoutMs",1e4),Wt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Wt(this,"_executeQueue",new Set),Wt(this,"_checkPingDelay",15e3),Wt(this,"_checkPingTimer",null),Wt(this,"_reconnectTimer"),Wt(this,"_status","unknown"),Wt(this,"wsOpenHandler"),Wt(this,"wsCloseHandler"),Wt(this,"wsErrorHandler");const{host:n,logLevel:o="info"}=e;n&&(this._host=(e=>`${ir.test(e)?"":"wss://"}${e}`)(n)),o&&(null==(r=(t=this.logger).setLevel)||r.call(t,o)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){var e,t;return null==(t=null==(e=this._rpcConnectResult)?void 0:e.authorization)?void 0:t.signature}get logger(){return Gt()}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");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._clearCheckPingTimer(),this._requests.clear(),this._closeConnection("disconnected"),this.dispatch($r())):this.logger.debug("Session not connected or already in closing state.")}execute(e){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),ar(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t!==this._executeTimeoutError)throw t;if(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(vr(t))}authError(e){this._removeSocketListeners(),this.dispatch(Nr({error:e}))}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(Dr())}catch(e){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(Br()),this._clearTimers(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_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:n,reject:o}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:n}=e;if(n)return{error:n};switch(t.method){case"signalwire.connect":return{result:r};default:return Kt(e)}})({response:t,request:r});return i?o(i):n(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,gr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(Vr(t)),this._handleWebSocketMessage(t)}var r}_handleWebSocketMessage(e){}dispatch(e){throw new Error("Method not implemented")}_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)}_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,n;this._clearCheckPingTimer(),this._checkPingTimer=setTimeout((()=>{this.logger.debug("Timeout waiting for ping"),this._closeConnection("reconnecting")}),this._checkPingDelay),await this.execute((r=e.id,n=null==(t=null==e?void 0:e.params)?void 0:t.timestamp,gr({id:r,result:{timestamp:n||Date.now()/1e3}})))}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection"),this._status=e,this.dispatch(Zr.authStatus("disconnected"===e?"unauthorized":"unknown")),this.destroySocket()}},nn=class extends rn{constructor(e){super(e),this.options=e,Wt(this,"_expiredDiffSeconds",0),Wt(this,"_refreshTokenNotificationDiff",120),Wt(this,"_checkTokenExpirationDelay",2e4),Wt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e,t,r;const n=null!=(r=null==(t=null==(e=null==this?void 0:this._rpcConnectResult)?void 0:e.authorization)?void 0:t.expires_at)?r:0;if("string"==typeof n){const e=Date.parse(n);if(!isNaN(e))return Math.floor(e/1e3)}return n}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)}this._rpcConnectResult=await this.execute(vr(e)),await this.persistRelayProtocol(),this._checkTokenExpiration()}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,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,pr({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(Wr()),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)))}},on={};Lt(on,{authErrorAction:()=>Nr,authExpiringAction:()=>Wr,authSuccessAction:()=>Dr,compoundEventAttachAction:()=>Jr,configureStore:()=>Wn,connect:()=>Dn,createAction:()=>Pr,createCatchableSaga:()=>fn,createRestartableSaga:()=>pn,destroyAction:()=>xr,eventChannel:()=>tt,executeAction:()=>Lr,getCustomSagaActionType:()=>Qr,initAction:()=>Ar,makeCustomSagaAction:()=>zr,reauthAction:()=>jr,sessionAuthErrorAction:()=>qr,sessionConnectedAction:()=>Ur,sessionDisconnectedAction:()=>$r,sessionExpiringAction:()=>Fr,sessionReconnectingAction:()=>Br,socketMessageAction:()=>Vr});var sn=({state:e,payload:t,componentId:r,key:n,requestId:o})=>xt(At({},e),r in e.byId?{byId:xt(At({},e.byId),{[r]:xt(At({},e.byId[r]),{[n]:xt(At({},e.byId[r][n]),{[o]:t})})})}:{byId:xt(At({},e.byId),{[r]:{id:r,[n]:{[o]:t}}})}),an=Kr({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>xt(At({},e),t.id in e.byId?{byId:xt(At({},e.byId),{[t.id]:At(At({},e.byId[t.id]),t)})}:{byId:xt(At({},e.byId),{[t.id]:t})}),executeSuccess:(e,{payload:t})=>{const{componentId:r,requestId:n,response:o}=t;return sn({componentId:r,requestId:n,state:e,key:"responses",payload:o})},executeFailure:(e,{payload:t})=>{const{componentId:r,requestId:n,error:o,action:s}=t;return sn({componentId:r,requestId:n,state:e,key:"errors",payload:{action:s,jsonrpc:o}})},cleanup:(e,{payload:t})=>xt(At({},e),{byId:Object.entries(e.byId).reduce(((e,[r,n])=>(t.ids.includes(r)||(e[r]=n),e)),{})})}}),{actions:cn,reducer:dn}=an,un={queue:[]},ln=Kr({name:"executeQueue",initialState:un,reducers:{add:(e,{payload:t})=>xt(At({},e),{queue:e.queue.concat(t)}),clean:()=>un}}),{reducer:hn}=ln,mn=(0,Mr.combineReducers)({components:dn,session:en,executeQueue:hn});Lt({},{createCatchableSaga:()=>fn,createRestartableSaga:()=>pn,eventChannel:()=>tt});var pn=e=>function*(){!function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];Re(Le.apply(void 0,[e].concat(r)))}((function*(){for(;;)try{Gt().debug("Run a restartable saga"),yield je(e),Gt().debug("One of the restartable saga has ended. Restarting..")}catch(e){Gt().error("Restartable Saga Error",e)}}))},gn=e=>Gt().error("Catchable Saga Error",e),fn=(e,t=gn)=>function*(...r){try{yield je(e,...r)}catch(e){t(e)}};function*vn(e){function*t(t){const{componentId:r,requestId:n,method:o,params:s}=t.payload;try{const i=(({method:e,params:t})=>pr({method:e,params:t}))({id:n,method:o,params:s}),a=yield je(e.execute,i);r&&n&&(yield Ae(cn.executeSuccess({componentId:r,requestId:n,response:a})))}catch(e){Gt().warn("Execute error:",e),r&&n&&(yield Ae(cn.executeFailure({componentId:r,requestId:n,action:t,error:e})))}finally{if((yield De())&&r&&n){const e={jsonrpc:"2.0",id:n,error:{code:-32600,message:"Cancelled task"}};Gt().debug("executeActionWorker cancelled",{requestId:n,componentId:r,error:e}),yield Ae(cn.executeFailure({componentId:r,requestId:n,action:t,error:e}))}}}for(;;){const e=yield Oe(Lr.type);yield Le(t,e)}}function*yn({sessionChannel:e,pubSubChannel:t,swEventChannel:r}){function*n(e){switch(e.event_type){case"video.room.audience_count":return void(yield Ae(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 n=r.talking?"started":"ended";yield Ae(t,{type:`video.member.talking.${n}`,payload:e.params});const o=r.talking?"start":"stop";yield Ae(t,{type:`video.member.talking.${o}`,payload:e.params})}break}}yield Ae(t,{type:e.event_type,payload:e.params})}function*o(e){yield Ae(r,(e=>{const{event_type:t,params:r,node_id:n}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if("webrtc.message"===t&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=n),{type:t,payload:e}}return{type:t,payload:r}})(e)),(e=>"webrtc.message"===(null==e?void 0:e.event_type))(e)||((e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))})(e)?yield Le(n,e):yield Ae({type:e.event_type,payload:e}))}const s=fn((function*(e){if(e.type!==Vr.type)return void(yield Ae(e));const{method:t,params:r}=e.payload;switch(t){case"signalwire.event":yield Le(o,r);break;default:return Gt().debug(`Unknown message: ${t}`,e)}}),(e=>{Gt().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Oe(e);yield Le(s,t)}}catch(e){Gt().error("sessionChannelWorker error:",e)}finally{Gt().debug("sessionChannelWorker finally")}}function bn(e){return tt((t=>(e.dispatch=e=>{t(e)},()=>{Gt().debug("sessionChannel unsubscribe"),e.disconnect()})))}var _n=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*wn({pubSubChannel:e,emitter:t}){Gt().debug("pubSubSaga [started]");try{for(;;){const r=yield Oe(e,"*"),{type:n,payload:o}=r;try{const e=_n(r);$t.includes(n)&&t.emit(n,o),Gt().trace("Emit:",tr({namespace:e,event:n})),t.emit(tr({namespace:e,event:n}),o)}catch(e){Gt().error(e)}}}finally{(yield De())&&Gt().debug("pubSubSaga [cancelled]")}}var Sn=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Wt(this,"name","AuthError"),Object.setPrototypeOf(this,Sn.prototype)}};function*kn({SessionConstructor:e,userOptions:t,channels:r}){var n;const o=new e(t),s=yield je(bn,o),i=r.pubSubChannel,a=r.swEventChannel;let c=[];if(null==(n=t.workers)?void 0:n.length)try{const e=t.workers.map((e=>je(pn(e))));c=yield function(e){var t=Pe("ALL",e);return t.combinator=!0,t}(e)}catch(e){Gt().error("Error running custom workers",e)}yield Le(yn,{sessionChannel:s,pubSubChannel:i,swEventChannel:a});const d=yield Le(wn,{pubSubChannel:i,emitter:t.emitter}),u=yield Le(Cn,{session:o,sessionChannel:s,pubSubChannel:i,userOptions:t}),l=yield Le(vn,o);o.connect(),yield Oe(xr.type),d.cancel(),u.cancel(),l.cancel(),s.close(),c.forEach((e=>e.cancel()))}function*En({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield je(e.reauthenticate),yield Ae(Zr.connected(e.rpcConnectResult)),yield Ae(r,Ur()))}catch(t){Gt().error("Reauthenticate Error",t),e.authError(t)}}function*Cn(e){Gt().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield Oe([Dr.type,Nr.type,Wr.type,jr.type,Br.type,$r.type]);switch(Gt().debug("sessionStatusWatcher",t.type,t.payload),t.type){case Dr.type:{const{session:t,pubSubChannel:r}=e;yield Ae(Zr.connected(t.rpcConnectResult)),yield Ae(r,Ur());break}case Nr.type:yield Le(Tn,xt(At({},e),{action:t}));break;case Wr.type:yield Ae(e.pubSubChannel,Fr());break;case jr.type:yield Le(En,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case Br.type:yield Ae(e.pubSubChannel,Br());break;case $r.type:yield Ae(e.pubSubChannel,$r()),yield Ae(xr())}}}finally{(yield De())&&Gt().debug("sessionStatusWatcher [cancelled]")}}function*Tn(e){Gt().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:n}=r.payload,o=n?new Sn(n.code,n.message):new Error("Unauthorized");yield Ae(t,qr(o))}finally{(yield De())&&Gt().debug("sessionAuthErrorSaga [cancelled]")}}var In={};Lt(In,{getComponent:()=>Mn,getComponentsById:()=>Pn,getComponentsToCleanup:()=>Rn});var Mn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},Pn=({components:e})=>e.byId,Rn=e=>{const t=Pn(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},On={};Lt(On,{getAuthError:()=>Ln,getAuthState:()=>Nn,getAuthStatus:()=>jn,getIceServers:()=>An,getSession:()=>xn});var An=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},xn=e=>e.session,jn=({session:e})=>e.authStatus,Ln=({session:e})=>e.authError,Nn=({session:e})=>e.authState,Dn=e=>{const{componentListeners:t={},sessionListeners:r={},store:n,Component:o,customSagas:s=[]}=e,i=Object.keys(t),a=Object.keys(r);return e=>{const c=new o(xt(At({},e),{store:n})),d=new Map;let u=!0;const l=n.subscribe((()=>{const e=n.getState(),o=Mn(e,c.__uuid)||{};for(const e of i){if(!1===u)return;const r=`${c.__uuid}.${e}`,n=d.get(r),s=o[e];if(void 0!==s&&n!==s){d.set(r,s);const n=t[e];"string"==typeof n?c[n](o):n(o)}}const s=xn(e);for(const e of a){if(!1===u)return;const t=`session.${e}`,n=d.get(t),o=s[e];if(void 0!==o&&n!==o){d.set(t,o);const n=r[e];"string"==typeof n?c[n](s):"function"==typeof n&&n(s)}}})),h=null==s?void 0:s.map((e=>n.runSaga(e,{instance:c,runSaga:n.runSaga})));return c.destroyer=()=>{u=!1,l(),d.clear(),(null==h?void 0:h.length)&&h.forEach((e=>e.cancel()))},c}};Dt(on,Mr);var Wn=e=>{var t;const{userOptions:r,SessionConstructor:n,preloadedState:o={},runSagaMiddleware:s=!0}=e,i=_t(),a={pubSubChannel:rt(),swEventChannel:rt()},c=Or({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:mn,preloadedState:o,middleware:e=>e().concat(i)});if(s){const e=(e=>function*({userOptions:t,channels:r}){var n;for(t.logger&&(Ft=t.logger),t.debug&&(e=>{null!=e?Object.assign(zt,e):zt={}})(t.debug);;){const o=yield Oe([Ar.type,jr.type]);(null==(n=null==o?void 0:o.payload)?void 0:n.token)&&(t.token=o.payload.token);try{yield je(kn,xt(At({},e),{userOptions:t,channels:r}))}catch(e){Gt().error("RootSaga Error:",e)}finally{(yield De())&&Gt().debug("rootSaga [cancelled]"),Gt().debug("Reboot rootSaga")}}})({SessionConstructor:n});i.run(e,{userOptions:r,channels:a})}return xt(At({},c),{runSaga:(e,t)=>i.run(e,xt(At({},t),{channels:a}))})},Vn=e=>e,Un=Symbol("BaseComponent"),$n=class{constructor(e){this.options=e,Wt(this,"__sw_symbol",Un),Wt(this,"uuid",_()),Wt(this,"_eventsPrefix",""),Wt(this,"_eventsRegisterQueue",new Set),Wt(this,"_eventsEmitQueue",new Set),Wt(this,"_eventsNamespace"),Wt(this,"_eventsTransformsCache",new Map),Wt(this,"_requests",new Map),Wt(this,"_customSagaTriggers",new Map),Wt(this,"_destroyer"),Wt(this,"_emitterTransforms",new Map),Wt(this,"_emitterListenersCache",new Map),Wt(this,"_trackedEvents",[]),Wt(this,"_runningWorkers",[]),Wt(this,"_workers",new Map)}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(Jr({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&&hr(e)&&(t=this.__uuid),tr({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||cr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return Gt()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get emitter(){return this.options.emitter}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 n=t.instanceFactory(r);return this._eventsTransformsCache.set(e,n),n}return this._eventsTransformsCache.get(e)}cleanupEventHandlerTransformCache({internalEvent:e,force:t}){const r=this._eventsTransformsCache.get(e),n=this.listenerCount(e);return r&&(t||n<=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 n=r.get(t);return r.delete(t),this._emitterListenersCache.set(e,r),n}return t}_createStableEventHandler(e,t){return r=>{const n=this._emitterTransforms.get(e);if(this.logger.trace("Got emitterTransform for",e,n),!n)return t(r);const o=this.runAndCacheEventHandlerTransform({internalEvent:e,transform:n,payload:r});let s;const i=this._parseNestedFields(r,n);return s=or({instance:o,payload:r,transformedPayload:i,transform:n}),t(s)}}_parseNestedFields(e,t,r=(e=>e),n){if(!t.nestedFieldsToProcess)return t.payloadTransform(e);if(e.__sw_proxy)return e;if(!n){const n=t.payloadTransform(e);return this._parseNestedFields(n,t,r,n)}return Array.isArray(e)?n=e.map(((n,o)=>this._parseNestedFields(r(n),t,r,e[o]))):e&&"object"==typeof e&&Object.entries(e).forEach((([e,o])=>{var s;const i=null==(s=t.nestedFieldsToProcess)?void 0:s[e],a=i?this._emitterTransforms.get(i.eventTransformType):void 0;n[e]=o&&"object"==typeof o?this._parseNestedFields(o,t,(e=>i&&a&&e&&"object"==typeof e?(({transform:e,payload:t})=>{const r=(({transform:e,payload:t})=>{if(!sr.has(e.type)){const r=e.instanceFactory(t);return sr.set(e.type,r),r}return sr.get(e.type)})({transform:e,payload:t}),n=e.payloadTransform(t);return or({transform:e,payload:t,instance:r,transformedPayload:n})})({transform:a,payload:r(i.processInstancePayload(e))}):e),n[e]):r(o)})),n}getOrCreateStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);let n=r.get(t);return n||(n=this._createStableEventHandler(e,t),r.set(t,n),this._emitterListenersCache.set(e,r)),n}_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 n=this._getInternalEvent(e);this._trackEvent(n);const o=r?"once":"on";if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:o,params:[e,t]}),this.emitter;const s=this.getOrCreateStableEventHandler(n,t);return this.logger.trace("Registering event",n),this.emitter[o](n,s)}on(e,t){return this._addListener(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),n=this.getAndRemoveStableEventHandler(r,t);return this.cleanupEventHandlerTransformCache({internalEvent:r,force:!n}),this.logger.trace("Removing event listener",r),this._untrackEvent(r),this.emitter.off(r,n)}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}getSubscriptions(){return lr(this.eventNames())}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=Vn,transformResolve:n=Vn,transformReject:o=Vn}={transformParams:Vn,transformResolve:Vn,transformReject:Vn}){return new Promise(((s,i)=>{const a=_();this._requests.set(a,{resolve:s,reject:i,transformResolve:n,transformReject:o}),this.store.dispatch(Lr({requestId:a,componentId:this.__uuid,method:e,params:r(t)}))}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const n=_();this._customSagaTriggers.set(n,{resolve:t,reject:r}),this.store.dispatch(At({dispatchId:n},zr(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const n=this._customSagaTriggers.get(e);n&&(n[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}onError(e){this._requests.forEach(((t,r)=>{void 0!==(null==e?void 0:e.errors[r])&&(t.reject(t.transformReject(e.errors[r])),this._requests.delete(r))}))}onSuccess(e){this._requests.forEach(((t,r)=>{void 0!==(null==e?void 0:e.responses[r])&&(t.resolve(t.transformResolve(e.responses[r])),this._requests.delete(r))}))}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 jn(this.store.getState())}get _sessionAuthState(){return Nn(this.store.getState())}_waitUntilSessionAuthorized(){switch(jn(this.store.getState())){case"authorized":return Promise.resolve(this);case"unknown":case"authorizing":return new Promise(((e,t)=>{const r=this.store.subscribe((()=>{const n=jn(this.store.getState()),o=Ln(this.store.getState());if("authorized"===n)e(this),r();else if("unauthorized"===n){const e=o?new Sn(o.code,o.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}_setEmitterTransform({event:e,handler:t,local:r}){const n=this._getInternalEvent(e);(r?hr(e):!hr(e)&&this.eventNames().includes(n))&&this._emitterTransforms.set(n,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){this._workers.has(e)?Gt().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:n}=r,o=jt(r,["worker"]);const s=this.store.runSaga(n,At({instance:this,runSaga:this.store.runSaga},o));this._runningWorkers.push(s),this._workers.delete(e)}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},Bn=class extends $n{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=jn(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(Ar()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(xr())}},qn=class extends $n{constructor(e){super(e),this.options=e,Wt(this,"subscribeMethod","signalwire.subscribe"),Wt(this,"subscribeParams",{}),Wt(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:xt(At({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return 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")}},Fn={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(Fn).map((e=>`video.member.updated.${e}`));var Hn=Yt(Fn);Object.keys(Hn).map((e=>`member.updated.${e}`));var zn={};Lt(zn,{RoomSessionPlaybackAPI:()=>No,RoomSessionRecordingAPI:()=>jo,RoomSessionStreamAPI:()=>Wo,audioMuteMember:()=>go,audioUnmuteMember:()=>fo,createRoomSessionPlaybackObject:()=>Do,createRoomSessionRecordingObject:()=>Lo,createRoomSessionStreamObject:()=>Vo,deafMember:()=>bo,deleteMemberMeta:()=>xo,deleteMeta:()=>ho,demote:()=>To,getLayouts:()=>Kn,getMemberMeta:()=>Ro,getMembers:()=>Xn,getMeta:()=>co,getPlaybacks:()=>so,getRecordings:()=>no,getStreams:()=>mo,hideVideoMuted:()=>eo,play:()=>io,promote:()=>Co,removeAllMembers:()=>Po,removeMember:()=>Mo,setDeaf:()=>wo,setHideVideoMuted:()=>ro,setInputSensitivityMember:()=>Eo,setInputVolumeMember:()=>So,setLayout:()=>Yn,setMemberMeta:()=>Oo,setMemberPosition:()=>Io,setMeta:()=>uo,setOutputVolumeMember:()=>ko,setPositions:()=>Zn,showVideoMuted:()=>to,startRecording:()=>oo,startStream:()=>po,undeafMember:()=>_o,updateMemberMeta:()=>Ao,updateMeta:()=>lo,videoMuteMember:()=>vo,videoUnmuteMember:()=>yo});var Qn=()=>{},Jn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:At({room_session_id:this.roomSessionId},r)},t)}}),Gn=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=jt(n,["memberId"]);return this.execute({method:e,params:At({room_session_id:this.roomSessionId,member_id:o||this.memberId},s)},t)}}),Kn=Jn("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),Xn=Jn("video.members.get",{transformResolve:e=>({members:e.members})}),Yn=Jn("video.set_layout",{transformResolve:Qn}),Zn=Jn("video.set_position",{transformResolve:Qn}),eo=Jn("video.hide_video_muted",{transformResolve:Qn}),to=Jn("video.show_video_muted",{transformResolve:Qn}),ro={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:Qn})}},no={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(mr("video.recording.list"),t);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(mr("video.recording.list"),xt(At({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.recording.list"),t),e}}))}},oo={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(mr("video.recording.start"),t);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(mr("video.recording.start"),xt(At({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.recording.start"),t),e}}))}},so={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(mr("video.playback.list"),t);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(mr("video.playback.list"),xt(At({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.playback.list"),t),e}}))}},io={value:function(e){return new Promise((async t=>{const r=e=>{t(e)};this.on(mr("video.playback.start"),r);try{const t=await this.execute({method:"video.playback.start",params:At({room_session_id:this.roomSessionId},e)});this.emit(mr("video.playback.start"),xt(At({},t),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.playback.start"),r),e}}))}},ao=e=>Jn(e,{transformResolve:Qn,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:jt(t,["room_session_id"])}}}),co=Jn("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),uo=ao("video.set_meta"),lo=ao("video.update_meta"),ho={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},mo={value:function(){return new Promise((async e=>{const t=t=>{e(t)};this.on(mr("video.stream.list"),t);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(mr("video.stream.list"),xt(At({},e),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.stream.list"),t),e}}))}},po={value:function(e){return new Promise((async t=>{const r=e=>{t(e)};this.on(mr("video.stream.start"),r);try{const t=await this.execute({method:"video.stream.start",params:At({room_session_id:this.roomSessionId},e)});this.emit(mr("video.stream.start"),xt(At({},t),{room_session_id:this.roomSessionId}))}catch(e){throw this.off(mr("video.stream.start"),r),e}}))}},go=Gn("video.member.audio_mute",{transformResolve:Qn}),fo=Gn("video.member.audio_unmute",{transformResolve:Qn}),vo=Gn("video.member.video_mute",{transformResolve:Qn}),yo=Gn("video.member.video_unmute",{transformResolve:Qn}),bo=Gn("video.member.deaf",{transformResolve:Qn}),_o=Gn("video.member.undeaf",{transformResolve:Qn}),wo={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:Qn})}},So=Gn("video.member.set_input_volume",{transformResolve:Qn}),ko=Gn("video.member.set_output_volume",{transformResolve:Qn}),Eo=Gn("video.member.set_input_sensitivity",{transformResolve:Qn}),Co={value:function(e){var t=e,{memberId:r,mediaAllowed:n,joinAudioMuted:o,joinVideoMuted:s}=t,i=jt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:At({room_session_id:this.roomSessionId,member_id:r,media_allowed:n,join_audio_muted:o,join_video_muted:s},i)},{transformResolve:Qn})}},To={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:Qn})}},Io=Gn("video.member.set_position",{transformResolve:Qn}),Mo={value:function(e){var t=e,{memberId:r}=t,n=jt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:At({room_session_id:this.roomSessionId,member_id:r},n)},{transformResolve:Qn})}},Po={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:Qn})}},Ro=Gn("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Oo=Gn("video.member.set_meta",{transformResolve:Qn}),Ao=Gn("video.member.update_meta",{transformResolve:Qn}),xo=Gn("video.member.delete_meta",{transformResolve:Qn}),jo=class extends $n{async pause(){await this.execute({method:"video.recording.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.recording.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.recording.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}},Lo=e=>Dn({store:e.store,Component:jo,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),No=class extends $n{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)}})}},Do=e=>Dn({store:e.store,Component:No,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),Wo=class extends $n{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},Vo=e=>Dn({store:e.store,Component:Wo,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),Uo={};Lt(Uo,{BaseChatAPI:()=>is,BaseChatConsumer:()=>ss,ChatMember:()=>rs,ChatMessage:()=>ns,createBaseChatObject:()=>as,getMemberState:()=>Go,getMembers:()=>zo,getMessages:()=>Ho,publish:()=>Fo,setMemberState:()=>Jo});var $o=()=>{},Bo=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),qo=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=jt(n,["memberId"]);return this.execute({method:e,params:At({member_id:o},s)},t)}}),Fo=Bo("chat.publish",{transformResolve:$o}),Ho=Bo("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>Yt(e))),cursor:e.cursor})}),zo=Bo("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>Yt(e)))})}),Qo=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 xt(At({},e),{channels:t})},Jo=qo("chat.member.set_state",{transformResolve:$o,transformParams:Qo}),Go=qo("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Qo}),Ko={};Lt(Ko,{BasePubSubConsumer:()=>es,PubSubMessage:()=>Xo,createBasePubSubObject:()=>ts});var Xo=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}},Yo=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Oe((e=>e.type.startsWith("chat.")));switch(t.type){case"chat.channel.message":yield Ae(e,{type:"chat.message",payload:t.payload});break;default:Gt().debug("[pubSubWorker] Unrecognized Action",t)}}},Zo=e=>e.map((e=>({name:e}))),es=class extends qn{constructor(e){super(e),Wt(this,"_eventsPrefix","chat"),Wt(this,"subscribeMethod","chat.subscribe"),this._attachListeners(""),this.runWorker("pubSub",{worker:Yo})}getEmitterTransforms(){return new Map([[["message"],{type:"pubSubMessage",instanceFactory:()=>new Xo({}),payloadTransform:e=>{const{channel:t,message:r}=e.params,n=jt(r,["member"]);return Yt(xt(At({},n),{channel:t}))}}]])}_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:Zo(r)}}_setSubscribeParams(e){this.subscribeParams=At(At({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return At({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return At({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}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 n=this.getSubscriptions();if(n.length>0){const e={method:"chat.unsubscribe",params:xt(At({},t),{events:n})};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(Ir.reauthAction({token:e}))}))}publish(e){return this.execute({method:"chat.publish",params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(Nn);return e&&"channels"in e&&e.channels?e.channels:{}}},ts=e=>Dn({store:e.store,Component:es,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),rs=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:{}}},ns=class extends Xo{get member(){return this.payload.member}},os=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Oe((e=>e.type.startsWith("chat.")));switch(t.type){case"chat.channel.message":break;case"chat.member.joined":case"chat.member.updated":case"chat.member.left":yield Ae(e,t);break;default:Gt().debug("[chatWorker] Unrecognized Action",t)}}},ss=class extends es{constructor(e){super(e),Wt(this,"_eventsPrefix","chat"),Wt(this,"subscribeMethod","chat.subscribe"),this.runWorker("chat",{worker:os})}getEmitterTransforms(){return new Map([[["message"],{type:"chatMessage",instanceFactory:()=>new ns({}),payloadTransform:e=>{const{channel:t,message:r}=e.params;return Yt(xt(At({},r),{channel:t}))}}],[["member.joined","member.left","member.updated"],{type:"chatMember",instanceFactory:e=>{const{member:t}=e.params;return new rs(Yt(t))},payloadTransform:e=>{const{member:t}=e.params;return Yt(t)}}]])}},is=nr(ss,{publish:Fo,getMembers:zo,getMessages:Ho,setMemberState:Jo,getMemberState:Go}),as=e=>Dn({store:e.store,Component:is,componentListeners:{errors:"onError",responses:"onSuccess"}})(e),cs={};function*ds(e){const{action:t,memberList:r,channels:{pubSubChannel:n}}=e,o={};t.payload.layout.layers.forEach((e=>{var t;const n=e.member_id;if(!n)return;const s=r.get(n);s&&e.position!==(null==(t=s.member)?void 0:t.current_position)?(ms({memberList:r,memberId:n,currentPosition:e.position}),o[n]=!0):o[n]=!1}));for(const[e,t]of r)if(o[e])yield Ae(n,{type:"video.member.updated",payload:t});else if(void 0===o[e]){const t=ms({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield Ae(n,{type:"video.member.updated",payload:t})}}function*us({action:e,channels:t,memberList:r}){var n,o;const s=e.payload.member.id,i=ms({memberList:r,memberId:s,currentPosition:null==(o=null==(n=r.get(s))?void 0:n.member)?void 0:o.current_position});if(!i)return;const{member:{updated:a=[]}}=e.payload,c=xt(At({},i),{member:At(At({},i.member),e.payload.member)});r.set(s,c);for(const r of a){const n=`${e.type}.${r}`;yield Ae(t.pubSubChannel,{type:n,payload:c})}yield Ae(t.pubSubChannel,{type:e.type,payload:c})}Lt(cs,{MEMBER_POSITION_COMPOUND_EVENTS:()=>ls,memberPositionWorker:()=>hs,memberUpdatedWorker:()=>us});var ls=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),hs=function*({instance:e,channels:t,initialState:r}){if(!r)return;const{swEventChannel:n}=t;let o=ps(r);const s=e=>{o.has(e.member.id)||o.set(e.member.id,e)};for(;;){const r=yield Oe(n,(t=>("video.member.updated"===t.type||"video.layout.changed"===t.type||"video.member.joined"===t.type||"video.member.left"===t.type)&&_n(t)===e._eventsNamespace));switch(r.type){case"video.member.updated":s(r.payload),yield Le(us,{action:r,channels:t,memberList:o,instance:e});break;case"video.member.joined":s(r.payload);break;case"video.member.left":o.delete(r.payload.member.id);break;case"video.layout.changed":yield Le(ds,{action:r,channels:t,memberList:o,instance:e})}}},ms=({memberList:e,memberId:t,currentPosition:r})=>{const n=e.get(t);if(!n)return;if(!r)return n;const o=xt(At({},n),{member:xt(At({},null==n?void 0:n.member),{current_position:r})});return e.set(t,o),o},ps=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};Lt({},{configureFullStack:()=>bs,configureJestStore:()=>ys,createMockedLogger:()=>vs,createPubSubChannel:()=>Ss,createSwEventChannel:()=>ks,rpcConnectResultVRT:()=>ws,wait:()=>_s});var gs="8f0a119a-cda7-4497-a47d-c81493b824d4",fs="<VRT>",vs=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),ys=e=>Wn(At({userOptions:{project:gs,token:fs,devTools:!1,emitter:new St},SessionConstructor:rn,runSagaMiddleware:!1},e)),bs=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new St,r=Wn({userOptions:{project:gs,token:fs,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Ir.initAction()),r.dispatch(Ir.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Ir.destroyAction())}},_s=e=>new Promise((t=>{setTimeout(t,e)})),ws={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",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"}]},Ss=()=>rt(),ks=()=>rt(),Es=At({},On);const Cs=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Ts=()=>{if(!Cs())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},Is=()=>Ts().getSupportedConstraints(),Ms=e=>e&&e instanceof MediaStream,Ps=()=>"sinkId"in HTMLMediaElement.prototype,Rs=async(e,t)=>{if(null!==e)if("string"==typeof t)if(Ps())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?Gt().error(`You need to use HTTPS for selecting audio output device: ${e}`):Gt().error(`Error: ${e}`),e}else Gt().warn("Browser does not support output device selection.");else Gt().warn(`Invalid speaker deviceId: '${t}'`);else Gt().warn("No HTMLMediaElement to attach the speakerId")},Os=e=>{var t;Ms(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(As))},As=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},xs={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},js=e=>{if(e)return xs[e]},Ls=()=>Ts().enumerateDevices(),Ns=async e=>{let t=await Ls().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},Ds=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 Ns(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(Gt().warn(`No ${e} devices to check for permissions!`),null)})(js(e))},Ws=()=>Ds("camera"),Vs=()=>Ds("microphone"),Us=()=>Ds("speaker"),$s=async(e={audio:!0,video:!0})=>{var t;try{const t=Ts().getUserMedia(e);if(await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Vs()),(null==e?void 0:e.video)&&t.push(Ws()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e)){const e=new Error("Timeout reading from your devices");return await ar(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":Gt().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":Gt().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":Gt().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":Gt().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),Gt().info("List of available constraints:",Is());break;case"NotAllowedError":Gt().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?Gt().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):Gt().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":Gt().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}},Bs=e=>Ts().getDisplayMedia(e),qs=async(e,t=!1)=>Hs(e,t),Fs=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:n,groupId:o})=>{var s;if(!e||t.targets&&!(null===(s=t.targets)||void 0===s?void 0:s.includes(n)))return!1;if(!o)return!0;const i=`${n}-${o}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(i)||!a||(r.push(i),0))}))},Hs=async(e,t=!1)=>{let r;if(!1===await Ds(e)){const t={audio:!(n=e)||"all"===n||"microphone"===n||"speaker"===n,video:!n||"all"===n||"camera"===n};r=await $s(t)}var n;const o=await Ns(js(e));return r&&Os(r),!0===t?o:Fs(o)},zs=async(e,t,r)=>{const n=await Hs(r,!0);for(let r=0;r<n.length;r++){const{deviceId:o,label:s}=n[r];if(e===o||t===s)return o}return null},Qs=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Js={camera:Ws,microphone:Vs,speaker:Us},Gs=["camera","microphone","speaker"],Ks=`Allowed targets are: '${Gs.join("', '")}'`,Xs={speaker:Ps},Ys=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:Gs).filter((e=>!!Gs.includes(e)||(Gt().warn(`We'll ignore the "${e}" target as it is not allowed. ${Ks}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${Ks}.`);const n=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Js[e]())))).reduce(((e,r,n)=>{var o;const s=t[n];return e[!(s in Xs)||(null===(o=Xs[s])||void 0===o?void 0:o.call(Xs))?"supported":"unsupported"].push([s,!!r]),e}),{supported:[],unsupported:[]})})({targets:r});if(n.unsupported.length>0&&r.length===n.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(n.supported.every((([e,t])=>!t)))throw new Error("You must ask the user for permissions before being able to listen for device changes. Try calling getUserMedia() before calling `createDeviceWatcher()`.");let o=[];const s=n.supported.reduce(((e,[t,r])=>(r?e.push(t):o.push(t),e)),[]);if(s.length!==r.length){const e=n.unsupported.length>0?`The platform doesn't support "${n.unsupported.map((([e])=>e)).join(", ")}" as target/s, which means it's not possible to watch for changes on those devices. `:"",t=o.length>0?`The user hasn't granted permissions for the following targets: ${o.join(", ")}. `:"";Gt().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return Gt().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new St,n=await Ls(),o=null==t?void 0:t.reduce(((e,t)=>{const r=js(t);return r&&e.push(r),e}),[]);let s=Fs(n,{excludeDefault:!0,targets:o});return Ts().addEventListener("devicechange",(async()=>{const e=await Ls(),t=s,n=Fs(e,{excludeDefault:!0,targets:o});s=n;const i=((e,t)=>{const r=Qs(e),n=Qs(e),o=[];Gt().debug("[_getDeviceListDiff] <- oldDevices",e),Gt().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(n.delete(t),e.label!==s.label&&o.push(e)),void 0===s}));return{updated:o.map((e=>({type:"updated",payload:e}))),removed:Array.from(n,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:s.map((e=>({type:"added",payload:e})))}})(t,n),a=i.added.length>0,c=i.removed.length>0,d=i.updated.length>0;(a||c||d)&&r.emit("changed",{changes:i,devices:n}),a&&r.emit("added",{changes:i.added,devices:n}),c&&r.emit("removed",{changes:i.removed,devices:n}),d&&r.emit("updated",{changes:i.updated,devices:n})})),r},Zs=e=>"function"==typeof(null==e?void 0:e.getTracks),ei=e=>{Gt().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return $s(e)},ti=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:n=""}=e;if(r){const e=await zs(r,n,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:o=!1,camId:s}=e;const{camLabel:i=""}=e;if(s){const e=await zs(s,i,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}},ri=e=>/^m=audio/.test(e),ni=e=>/^m=video/.test(e),oi=e=>{const t=e.split("\r\n"),r=t.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(r<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})(t[r]),o=new RegExp(`a=fmtp:${n}`),s=t.findIndex((e=>o.test(e)));return s>=0?/stereo=1;/.test(t[s])||(t[s]+="; stereo=1; sprop-stereo=1"):t[r]+=`\r\na=fmtp:${n} stereo=1; sprop-stereo=1`,t.join("\r\n")};class si{constructor(e,t){this.call=e,this.type=t,this.uuid=_(),this._negotiating=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this)}get logger(){return Gt()}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 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}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&&(As(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 n=await ti(this.options),o=await ei({[e]:n[e]});if(o&&Ms(o)){const n=o.getTracks().find((t=>t.kind===e));n&&(await r.replaceTrack(n),null===(t=this._localStream)||void 0===t||t.addTrack(n))}}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("RTCPeer restartIce error",e)}}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 n=Object.assign(Object.assign({},r.track.getConstraints()),t),o=this.getDeviceId(e);o&&!this.options.screenShare&&(n.deviceId={exact:o}),this.logger.info(`Apply ${e} constraints`,this.call.id,n),await r.track.applyConstraints(n)}}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()}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){try{const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this.isOffer&&this._resolveStartMethod()}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&&Ms(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 n={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(n.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",n),t.forEach((e=>{this.instance.addTransceiver(e,n)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),n.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",n)}}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()}_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._iceTimeout=null,!this.instance.localDescription)return;const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this)}catch(e){this._rejectStartMethod(e)}}_onIce(e){this._iceTimeout||(this._iceTimeout=setTimeout((()=>this._sdpReady()),this.options.iceGatheringTimeout)),e.candidate?(this.logger.debug("IceCandidate:",e.candidate),this.call.emit("icecandidate",e)):this._sdpReady()}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:n,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=oi(e.sdp)),e.sdp&&r&&n&&o&&(e.sdp=((e,t,r,n)=>{const o=e.split("\r\n");return o.forEach(((e,s)=>{/^a=fmtp:\d*/.test(e)?o[s]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${n}`:/^a=mid:(1|video)/.test(e)&&(o[s]+=`\r\nb=AS:${t}`)})),o.join("\r\n")})(e.sdp,r,n,o)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=oi(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",n=this.instance.localDescription.sdp.split(r);if(n.findIndex(ri)<n.findIndex(ni))return e;const o=e.split(r),s=o.findIndex(ri),i=o.findIndex(ni),a=o.slice(s,i),c=o.slice(i,o.length-1);return[...o.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(Ms(this.options.localStream))return this.options.localStream;const e=await ti(this.options);return ei(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1;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("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)}))}}
|
|
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
|
-
***************************************************************************** */function li(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}const hi=function*(e){Xt().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:s}=n;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");for(;;){const e=yield Ae(o,(e=>{var t;return"webrtc.message"===e.type&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s})),{id:t,method:n,params:i={}}=e.payload,{callID:a,nodeId:c}=i,d=r.getRTCPeerById(a);if(!d){Xt().warn(`RTCPeer '${a}' not found for method: '${n}'`,i);continue}const u=r.peer;switch(n){case"verto.media":case"verto.answer":d.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===n?"early":"active"),(null==i?void 0:i.sdp)&&d.onRemoteSdp(i.sdp),yield xe(Pr.executeAction({method:"video.message",params:{message:Mr(t,n),node_id:c}}));break;case"verto.bye":yield Le(r.onVertoBye,{rtcPeerId:a,byeCause:null==i?void 0:i.cause,byeCauseCode:null==i?void 0:i.causeCode,redirectDestination:null==i?void 0:i.redirectDestination}),yield xe(Pr.executeAction({method:"video.message",params:{message:Mr(t,n),node_id:c}}));break;case"verto.ping":{const{nodeId:e}=i,t=li(i,["nodeId"]);yield xe(Pr.executeAction({method:"video.message",params:{message:Ir(t),node_id:e}}));break}case"verto.mediaParams":{if(!a||!i.mediaParams){Xt().warn("Invalid mediaParams event",i);break}const{audio:e,video:t}=i.mediaParams;d&&t&&d.applyMediaConstraints("video",t),d&&e&&d.applyMediaConstraints("audio",e);break}default:return Xt().warn(`Unknown Verto method: ${n}`,i)}}Xt().trace("vertoEventWorker ended")},mi=function*(e){Xt().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o,pubSubChannel:s}=t,{rtcPeerId:i}=n;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield Ae(o,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield xe(hn.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 xe(s,{type:"video.room.joined",payload:a.payload}),Xt().debug("roomSubscribedWorker ended",i)},pi=function*(e){Xt().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:s}=n;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield Ae(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));Xt().debug("promoteDemoteWorker:",i.type,i.payload),yield xe(nn.updateAuthState(i.payload.authorization));const a=yield De(Ps.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(),Xt().debug("promoteDemoteWorker ended",s)},gi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},fi=Object.assign(Object.assign({},gi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),vi={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},yi={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:gi,video:vi,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3};class bi extends zn{constructor(e){super(e),this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:n="16",redirectDestination:o}=e;this.cause=String(r),this.causeCode=String(n);const s=this.getRTCPeerById(t);return s?o&&s.localSdp?(this.logger.debug("Redirect Destination to:",o,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,o)):(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({},yi),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(Ps.getIceServers)}get component(){return this.select((e=>An.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:n,callerNumber:o,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:n,callerNumber:o,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).then(console.warn).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.rtcPeerMap.get(e)}vertoExecute(e){return this.execute({method:"video.message",params:e})}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new ui(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,n)=>{var o;try{if(!this.peer)return n(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return n(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 zs(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let n={};null===(o=this.localStream)||void 0===o||o.getTracks().forEach((t=>{var r;n[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),Ds(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(n,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),n(s)}this.logger.debug("updateConstraints got stream",s),this.localStream||(this.localStream=new MediaStream);const{instance:i}=this.peer,a=s.getTracks();this.logger.debug(`updateConstraints got ${a.length} tracks`);for(let e=0;e<a.length;e++){const t=a[e];this.logger.debug("updateConstraints apply track: ",t);const r=i.getTransceivers().find((({mid:e,sender:r,receiver:n})=>r.track&&r.track.kind===t.kind?(this.logger.debug("Found transceiver by sender"),!0):n.track&&n.track.kind===t.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));r&&r.sender?(this.logger.debug("updateConstraints got transceiver",r.currentDirection,r.mid),await r.sender.replaceTrack(t),this.logger.debug("updateConstraints replaceTrack"),r.direction="sendrecv",this.logger.debug("updateConstraints set to sendrecv"),this.localStream.getTracks().forEach((e=>{var r;e.kind===t.kind&&e.id!==t.id&&(this.logger.debug("updateConstraints stop old track and apply new one - "),Ds(e),null===(r=this.localStream)||void 0===r||r.removeTrack(e))})),this.localStream.addTrack(t)):(this.logger.debug("updateConstraints no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(t),i.addTrack(t,this.localStream)),this.logger.debug("updateConstraints simply update mic/cam"),"audio"===t.kind?this.options.micId=t.getSettings().deviceId:"video"===t.kind&&(this.options.camId=t.getSettings().deviceId)}this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),n(e)}}))}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:hi,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:mi,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:pi,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new ui(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 ui(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,n=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",n),t){case"offer":return e.instance.remoteDescription?this.executeUpdateMedia(n,e.uuid):this.executeInvite(n,e.uuid);case"answer":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}async executeInvite(e,t,r){const n=this.getRTCPeerById(t);if(!n||n.instance.remoteDescription)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const n=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},o=kr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),n),{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:o,node_id:r,subscribe:s});this.logger.debug("Invite response",i)}catch(e){throw this.setState("hangup"),e.jsonrpc}}async executeUpdateMedia(e,t){try{const r=Cr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),n=await this.vertoExecute({message:r});if(n.sdp||this.logger.error("UpdateMedia invalid SDP answer",n),this.logger.debug("UpdateMedia response",n),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(n.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e.jsonrpc}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Er(this.dialogParams(t));await this.vertoExecute({message:e})}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=Tr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r})}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":this._finalize();break;case"hangup":this.setState("destroy");break;case"destroy":this._finalize()}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return e}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=vi),!0===this.options.audio&&(this.options.audio=this.options.screenShare?fi:gi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear(),this.destroy()}}const _i=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{Xt().error("Video Element Paused",e,t)}))})),e},wi=({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()}))})),Si=({x:e,y:t,width:r,height:n})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${n}%`}),ki=({video:e,rootElement:t,paddingWrapper:r})=>{const n=e.videoHeight/e.videoWidth*100,o=function(e,t=0,r){let n=null,o=null;const s=function(){n&&(clearTimeout(n),o=null,n=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!n;return s(),o=function(){e.apply(i,a)},n=setTimeout((function(){if(n=null,!c){const e=o;return o=null,null==e?void 0:e()}}),t),c&&o?o():void 0};return i.cancel=s,i.flush=function(){const e=o;s(),e&&e()},i}((({width:t,height:o})=>{if(r){const s=o/t*100;r.style.paddingBottom=`${s>n?n:s}%`,r.style.width=((t,r)=>{const n=e.videoWidth/e.videoHeight;return n>t/r?"100%":r*n+"px"})(t,o)}}),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;o({width:t,height:r})}else e.contentRect&&o({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},Ei=Pr.createAction("swJs/audioSetSpeakerAction"),Ci=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:n}){try{const o=new Map,s=_i(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return o.get(this.id)},set domElement(e){e?(Xt().debug("Set localOverlay",e),o.set(this.id,e)):(Xt().debug("Remove localOverlay"),o.delete(this.id))},hide(){if(!this.domElement)return Xt().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?Xt().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):Xt().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return Xt().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:n,localStream:o})=>{Xt().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===n));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return Xt().debug("Location not found"),void(a&&(Xt().debug("Current layer not visible"),e.hide()));if(!a){Xt().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:n,height:o}=Si(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=n,s.style.height=o,s})({location:i}),a.id=e.id;const r=_i();r.srcObject=o,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const n=t.querySelector(".mcuLayers"),s=n?.querySelector(`#${a.id}`);return void(n&&!s&&(n.appendChild(a),e.domElement=a))}const{top:c,left:d,width:u,height:l}=Si(i);Xt().debug("Update myLayer:",c,d,u,l);const h=o.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(o),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){Xt().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c;r.on("layout.changed",(e=>{Xt().debug("Received layout.changed"),r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()})),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){Xt().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){Xt().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){Xt().error("Error handling video_muted",e)}})),r.on("track",(function(r){switch(r.track.kind){case"video":c=n(Mi,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s})}})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),o.clear(),c?.cancel()}))}catch(e){Xt().error("videoElementSaga",e)}};function*Ti({element:e,room:t}){const r=Pr.getCustomSagaActionType(t.__uuid,Ei);for(;;){const n=yield Ae([r]);try{switch(n.type){case r:const o=yield Le(Ls,e,n.payload);t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:o,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:e,kind:"reject"}),Xt().error(e)}}}function*Ii({track:e,element:t,speakerId:r,room:n}){(({track:e,element:t})=>{t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({track:e,element:t}),r&&Ls(t,r).catch((()=>{})),yield Ne(Ti,{element:t,room:n})}function*Mi({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:n}){try{if((({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({element:n,track:r}),n.style.width="100%",n.style.maxHeight="100%",!t)return void e.appendChild(n);if(e.querySelector(".mcuContent"))return void Xt().debug("MCU Content already there");const o=document.createElement("div");o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.right="0",o.style.bottom="0",o.appendChild(n);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(o);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),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(Xt().debug("Wait for the MCU to be ready"),yield Le(wi,{element:n}));const c=ki({rootElement:e,video:n,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){Xt().error("Handle video track error",e)}}const Pi={errors:"onError",responses:"onSuccess"},Ri={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},Oi=sr(class extends bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:Xn.audioMuteMember,audioUnmute:Xn.audioUnmuteMember,videoMute:Xn.videoMuteMember,videoUnmute:Xn.videoUnmuteMember,setMicrophoneVolume:Xn.setInputVolumeMember,setInputVolume:Xn.setInputVolumeMember,setInputSensitivity:Xn.setInputSensitivityMember}),Ai=sr(class extends bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:Xn.audioMuteMember,audioUnmute:Xn.audioUnmuteMember,videoMute:Xn.videoMuteMember,videoUnmute:Xn.videoUnmuteMember,setInputVolume:Xn.setInputVolumeMember,setMicrophoneVolume:Xn.setInputVolumeMember,setInputSensitivity:Xn.setInputSensitivityMember}),xi=()=>{},ji="video.memberList.updated",Li=nr({event:ji}),Ni=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Bt),e)),[]).join(".")})(Li),Di=["video.room.joined","video.member.joined","video.member.left","video.member.updated"];function*Wi({pubSubChannel:e}){const t=new Map;function*r(r){const n={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:(({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);switch(e.type){case"video.member.left":r.forEach((e=>{t.delete(e.id)}));break;default:r.forEach((e=>{t.set(e.id,e)}))}return Array.from(t.values())})({action:r,memberList:t})};yield xe(e,{type:Ni,payload:n})}for(;;){const t=yield Ae(e,(({type:e})=>Di.includes(e)));yield Ne(r,t)}}const Vi=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(Li))))(r))return;const{cleanup:n}=((e,t)=>{(e=>mr(Di).filter((t=>!e.includes(t))))(t).forEach((t=>{e.once(t,xi)}));const r=({members:t})=>{e.emit(ji,{members:t})};return e.on(Ni,r),{cleanup:()=>{e.off(Ni,r)}}})(t,r);yield Ne(Wi,{pubSubChannel:e}),t.once("destroy",(()=>{n()}))},Ui=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield Ne(ms.memberPositionWorker,e)},$i=function*(e){Xt().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{parentId:s}=n;if(!s)throw new Error("Missing parentId for childMemberJoinedWorker");const i=yield Ae(o,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===s)),{member:a}=i.payload;a?.parent_id&&(r._attachListeners(a.id),r.applyEmitterTransforms(),(yield De(An.getComponent,a.parent_id))&&(yield xe(hn.upsert({id:r.callId,roomId:i.payload.room_id,roomSessionId:i.payload.room_session_id,memberId:a.id})))),Xt().trace("childMemberJoinedWorker ended")},Bi=sr(class extends bi{_screenShareList=new Set;_deviceList=new Set;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})}}}],[[gr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[gr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[gr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>Xn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>er({...e.recording,room_session_id:this.roomSessionId})}],[[gr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>Xn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>er({...e.playback,room_session_id:this.roomSessionId})}],[[gr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[gr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>Xn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>er({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...ms.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Vi})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Ui,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){const{autoJoin:t=!0,audio:r=!1,video:n=!0,layout:o,positions:s}=e,i=await Qs({audio:!0===r?Ri:r,video:n}),a={...this.options,screenShare:!0,recoverCall:!1,localStream:i,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:o,positions:s},c=Bn({store:this.store,Component:Oi,componentListeners:Pi})(a);i.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{c&&c.active&&c.leave()}))})),c.once("destroy",(()=>{c.emit("room.left"),this._screenShareList.delete(c)}));try{return c.runWorker("childMemberJoinedWorker",{worker:$i,initialState:{parentId:this.memberId}}),this._screenShareList.add(c),t&&await c.join(),c}catch(e){throw this.logger.error("ScreenShare Error",e),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={}){const{autoJoin:t=!0,audio:r=!1,video:n=!1}=e;if(!r&&!n)throw new TypeError("At least one of `audio` or `video` must be requested.");const o={...this.options,localStream:void 0,remoteStream:void 0,audio:r,video:n,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},s=Bn({store:this.store,Component:Ai,componentListeners:Pi})(o);s.once("destroy",(()=>{s.emit("room.left"),this._deviceList.delete(s)}));try{return s.runWorker("childMemberJoinedWorker",{worker:$i,initialState:{parentId:this.memberId}}),this._deviceList.add(s),t&&await s.join(),s}catch(e){throw this.logger.error("RoomDevice Error",e),e}}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(Ei(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()}},{audioMute:Xn.audioMuteMember,audioUnmute:Xn.audioUnmuteMember,videoMute:Xn.videoMuteMember,videoUnmute:Xn.videoUnmuteMember,deaf:Xn.deafMember,undeaf:Xn.undeafMember,setInputVolume:Xn.setInputVolumeMember,setOutputVolume:Xn.setOutputVolumeMember,setMicrophoneVolume:Xn.setInputVolumeMember,setSpeakerVolume:Xn.setOutputVolumeMember,setInputSensitivity:Xn.setInputSensitivityMember,removeMember:Xn.removeMember,removeAllMembers:Xn.removeAllMembers,getMembers:Xn.getMembers,getLayouts:Xn.getLayouts,setLayout:Xn.setLayout,setPositions:Xn.setPositions,setMemberPosition:Xn.setMemberPosition,hideVideoMuted:Xn.hideVideoMuted,showVideoMuted:Xn.showVideoMuted,getRecordings:Xn.getRecordings,startRecording:Xn.startRecording,getPlaybacks:Xn.getPlaybacks,play:Xn.play,setHideVideoMuted:Xn.setHideVideoMuted,getMeta:Xn.getMeta,setMeta:Xn.setMeta,updateMeta:Xn.updateMeta,deleteMeta:Xn.deleteMeta,getMemberMeta:Xn.getMemberMeta,setMemberMeta:Xn.setMemberMeta,updateMemberMeta:Xn.updateMemberMeta,deleteMemberMeta:Xn.deleteMemberMeta,promote:Xn.promote,demote:Xn.demote,getStreams:Xn.getStreams,startStream:Xn.startStream}),qi=function*(e){Xt().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:n}=t;for(;;){const e=yield Ae(r,(e=>e.type.startsWith("video-manager.")));yield xe(n,e)}};class Fi extends Jn{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:qi})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>er(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>er(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=>er(e),payloadTransform:e=>er(e)}]])}}class Hi extends Qn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:n=!0,stopMicrophoneWhileMuted:o=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const n=new Audio;let o;t.on("track",(function(s){switch(s.track.kind){case"audio":o=r(Ii,{track:s.track,element:n,speakerId:e,room:t})}})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){Xt().error("audioElementSaga",e)}else Xt().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(Ci({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},Bn({store:c.store,customSagas:c.customSagas,Component:Bi,componentListeners:Pi})(c));var c;return o&&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)}})),n&&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=Ho.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=ts.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Bn({store:e.store,Component:Fi,componentListeners:{errors:"onError",responses:"onSuccess"}})(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(Pr.reauthAction({token:e}))}}function zi(e){this.message=e}(zi.prototype=new Error).name="InvalidCharacterError";var Qi="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new zi("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,o=0,s=0,i="";n=t.charAt(s++);~n&&(r=o%4?64*r+n:n,o++%4)?i+=String.fromCharCode(255&r>>(-2*o&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return i};function Ji(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(Qi(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 Qi(t)}}function Gi(e){this.message=e}function Ki(e,t){if("string"!=typeof e)throw new Gi("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Ji(e.split(".")[r]))}catch(e){throw new Gi("Invalid token specified: "+e.message)}}(Gi.prototype=new Error).name="InvalidTokenError";class Xi extends cn{options;WebSocketConstructor=WebSocket;agent="@signalwire/js/browser/3.17.0-dev.202211101554.ff4eda6.0";constructor(e){let t;try{t=Ki(e.token,{header:!0})}catch(e){}super({...e,host:t?.ch||e.host}),this.options=e}get allowHijack(){return this.options._hijack}async retrieveRelayProtocol(){if(!this.allowHijack)return"";const e=this.getRoomNameFromJWT();return e?(this.logger.info("Hijacking: search protocol for",e),window.sessionStorage.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowHijack)return;const e=this.getRoomNameFromJWT();e&&(this.logger.info("Hijacking: persist protocol",e,this.relayProtocol),window.sessionStorage.setItem(e,this.relayProtocol))}getRoomNameFromJWT(){try{return Ki(this.options.token)?.r}catch(e){return""}}}const Yi=e=>{const t={...e,emitter:new Et},r=qn({userOptions:t,SessionConstructor:Xi});return Bn({store:r,Component:Hi,componentListeners:{errors:"onError",responses:"onSuccess"}})(t)},Zi=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var ea=Object.freeze({__proto__:null,ChatMember:Ho.ChatMember,ChatMessage:Ho.ChatMessage,Client:function(e){const t=Yi(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,n,o)=>n in r?r[n]:Zi.includes(n)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(n):Reflect.get(e,n,o)})}});const ta=["getAllowedChannels","subscribe","publish"];var ra=Object.freeze({__proto__:null,PubSubMessage:ts.PubSubMessage,Client:function(e){const t=Yi(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,n,o)=>n in r?r[n]:ta.includes(n)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(n):Reflect.get(e,n,o)})}});const na={aspectRatio:{ideal:16/9}},oa=e=>new Promise((async(t,r)=>{const{audio:n=!0,video:o=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,m=Yi({...h});if(await m.connect(),!m)return;let p;if(i){const e=document.getElementById(i);e?p=e:(p=document.body,Xt().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=m.rooms.makeRoomObject({audio:n,video:!0===o?na:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:p,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),m.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){Xt().error("Join",e),m.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),sa=["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"];var ia=Object.freeze({__proto__:null,RoomSession:function(e){const{audio:t=!0,video:r=!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s=!0,stopCameraWhileMuted:i=!0,stopMicrophoneWhileMuted:a=!0,speakerId:c,...d}=e;["audio","video"].forEach((t=>{t in e&&Xt().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const u=Yi(d),l=u.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s,stopCameraWhileMuted:i,stopMicrophoneWhileMuted:a,speakerId:c});l.once("destroy",(()=>{l.emit("room.left"),u.disconnect()}));const h={join:e=>new Promise((async(n,o)=>{try{l.attachPreConnectWorkers(),await u.connect();const s=e?.audio??t,i=e?.video??r,a=u._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:n=!0,sendAudio:o,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;Xt().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,m=l&&"both"===d,p="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(s??n),y=Boolean(i??r),b=Boolean(a??n);return!h&&f&&Xt().info("Not allowed to send audio on this room. Default values will be used."),!m&&v&&Xt().info("Not allowed to send video on this room. Default values will be used."),!p&&y&&Xt().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&Xt().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:m&&v,mustRecvAudio:p&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(t),sendVideo:Boolean(r),...e});if(!Object.values(c).some(Boolean))return u.disconnect(),o(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));l.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),l.once("room.subscribed",(e=>{l.attachOnSubscribedWorkers(e),n(l)})),await l.join()}catch(e){Xt().error("RoomSession Join",e),u.disconnect(),o(e)}}))};return new Proxy(l,{get(e,t,r){if(t in h)return h[t];if(!e.active&&sa.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})},createRoomObject:oa,joinRoom:e=>oa({...e,autoJoin:!0}),createClient:Yi}),aa=Object.freeze({__proto__:null,getDevices:Ks,getCameraDevices:()=>Ks("camera"),getMicrophoneDevices:()=>Ks("microphone"),getSpeakerDevices:()=>Ks("speaker"),getDevicesWithPermissions:Js,getCameraDevicesWithPermissions:()=>Js("camera"),getMicrophoneDevicesWithPermissions:()=>Js("microphone"),getSpeakerDevicesWithPermissions:()=>Js("speaker"),checkPermissions:Bs,checkCameraPermissions:qs,checkMicrophonePermissions:Fs,checkSpeakerPermissions:Hs,requestPermissions:async e=>{try{const t=await zs(e);Ns(t)}catch(e){throw e}},createDeviceWatcher:ni,createCameraDeviceWatcher:()=>ni({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>ni({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>ni({targets:["speaker"]}),supportsMediaDevices:Rs,supportsGetUserMedia:()=>"function"==typeof Os().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Os().getDisplayMedia,getUserMedia:zs,getDisplayMedia:Qs,enumerateDevices:Us,getSupportedConstraints:As,supportsMediaOutput:js,setMediaElementSinkId:Ls,stopStream:Ns,stopTrack:Ds,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(oi(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},zs(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Et,n=new(window.AudioContext||window.webkitAudioContext),o=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(n);let s,i;try{n.createMediaStreamSource(t).connect(o)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(o.frequencyBinCount);o.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;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"!==n.state&&n.close().catch((e=>{Xt().error("Error closing the AudioContext",e)})),oi(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=ea,e.PubSub=ra,e.Video=ia,e.WebRTC=aa,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
20
|
+
***************************************************************************** */function ii(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}const ai=function*(e){Gt().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:s}=n;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");for(;;){const e=yield Oe(o,(e=>{var t;return"webrtc.message"===e.type&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s})),{id:t,method:n,params:i={}}=e.payload,{callID:a,nodeId:c}=i,d=r.getRTCPeerById(a);if(!d){Gt().warn(`RTCPeer '${a}' not found for method: '${n}'`,i);continue}const u=r.peer;switch(n){case"verto.media":case"verto.answer":d.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===n?"early":"active"),(null==i?void 0:i.sdp)&&d.onRemoteSdp(i.sdp),yield Ae(Ir.executeAction({method:"video.message",params:{message:Tr(t,n),node_id:c}}));break;case"verto.bye":yield je(r.onVertoBye,{rtcPeerId:a,byeCause:null==i?void 0:i.cause,byeCauseCode:null==i?void 0:i.causeCode,redirectDestination:null==i?void 0:i.redirectDestination}),yield Ae(Ir.executeAction({method:"video.message",params:{message:Tr(t,n),node_id:c}}));break;case"verto.ping":{const{nodeId:e}=i,t=ii(i,["nodeId"]);yield Ae(Ir.executeAction({method:"video.message",params:{message:Cr(t),node_id:e}}));break}case"verto.mediaParams":{if(!a||!i.mediaParams){Gt().warn("Invalid mediaParams event",i);break}const{audio:e,video:t}=i.mediaParams;d&&t&&d.applyMediaConstraints("video",t),d&&e&&d.applyMediaConstraints("audio",e);break}default:return Gt().warn(`Unknown Verto method: ${n}`,i)}}Gt().trace("vertoEventWorker ended")},ci=function*(e){Gt().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o,pubSubChannel:s}=t,{rtcPeerId:i}=n;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield Oe(o,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield Ae(cn.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 Ae(s,{type:"video.room.joined",payload:a.payload}),Gt().debug("roomSubscribedWorker ended",i)},di=function*(e){Gt().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:s}=n;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield Oe(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));Gt().debug("promoteDemoteWorker:",i.type,i.payload),yield Ae(Zr.updateAuthState(i.payload.authorization));const a=yield Ne(Es.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(),Gt().debug("promoteDemoteWorker ended",s)},ui={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},li=Object.assign(Object.assign({},ui),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),hi={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},mi={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:ui,video:hi,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3};class pi extends $n{constructor(e){super(e),this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:n="16",redirectDestination:o}=e;this.cause=String(r),this.causeCode=String(n);const s=this.getRTCPeerById(t);return s?o&&s.localSdp?(this.logger.debug("Redirect Destination to:",o,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,o)):(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({},mi),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(Es.getIceServers)}get component(){return this.select((e=>In.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:n,callerNumber:o,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:n,callerNumber:o,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){e?(this.logger.debug("Set RTCPeer",e.uuid,e),this.rtcPeerMap.set(e.uuid,e),this.peer&&this.callId!==e.uuid&&(this.logger.debug(">>> Stop old RTCPeer",this.peer.uuid),this.peer.detachAndStop()),this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid):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)}vertoExecute(e){return this.execute({method:"video.message",params:e})}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new si(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,n)=>{var o;try{if(!this.peer)return n(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return n(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 $s(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let n={};null===(o=this.localStream)||void 0===o||o.getTracks().forEach((t=>{var r;n[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),As(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(n,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),n(s)}this.logger.debug("updateConstraints got stream",s),this.localStream||(this.localStream=new MediaStream);const{instance:i}=this.peer,a=s.getTracks();this.logger.debug(`updateConstraints got ${a.length} tracks`);for(let e=0;e<a.length;e++){const t=a[e];this.logger.debug("updateConstraints apply track: ",t);const r=i.getTransceivers().find((({mid:e,sender:r,receiver:n})=>r.track&&r.track.kind===t.kind?(this.logger.debug("Found transceiver by sender"),!0):n.track&&n.track.kind===t.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));r&&r.sender?(this.logger.debug("updateConstraints got transceiver",r.currentDirection,r.mid),await r.sender.replaceTrack(t),this.logger.debug("updateConstraints replaceTrack"),r.direction="sendrecv",this.logger.debug("updateConstraints set to sendrecv"),this.localStream.getTracks().forEach((e=>{var r;e.kind===t.kind&&e.id!==t.id&&(this.logger.debug("updateConstraints stop old track and apply new one - "),As(e),null===(r=this.localStream)||void 0===r||r.removeTrack(e))})),this.localStream.addTrack(t)):(this.logger.debug("updateConstraints no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(t),i.addTrack(t,this.localStream)),this.logger.debug("updateConstraints simply update mic/cam"),"audio"===t.kind?this.options.micId=t.getSettings().deviceId:"video"===t.kind&&(this.options.camId=t.getSettings().deviceId)}this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),n(e)}}))}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:ai,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:ci,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:di,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new si(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 si(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,n=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",n),t){case"offer":return e.instance.remoteDescription?this.executeUpdateMedia(n,e.uuid):this.executeInvite(n,e.uuid);case"answer":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}async executeInvite(e,t,r){const n=this.getRTCPeerById(t);if(!n||n.instance.remoteDescription)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const n=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},o=wr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),n),{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:o,node_id:r,subscribe:s});this.logger.debug("Invite response",i)}catch(e){throw this.setState("hangup"),e.jsonrpc}}async executeUpdateMedia(e,t){try{const r=kr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),n=await this.vertoExecute({message:r});if(n.sdp||this.logger.error("UpdateMedia invalid SDP answer",n),this.logger.debug("UpdateMedia response",n),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(n.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e.jsonrpc}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Sr(this.dialogParams(t));await this.vertoExecute({message:e})}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=Er(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r})}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":this._finalize();break;case"hangup":this.setState("destroy");break;case"destroy":this._finalize()}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return e}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=hi),!0===this.options.audio&&(this.options.audio=this.options.screenShare?li:ui)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear(),this.destroy()}}const gi=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{Gt().error("Video Element Paused",e,t)}))})),e},fi=({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()}))})),vi=({x:e,y:t,width:r,height:n})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${n}%`}),yi=({video:e,rootElement:t,paddingWrapper:r})=>{const n=e.videoHeight/e.videoWidth*100,o=function(e,t=0,r){let n=null,o=null;const s=function(){n&&(clearTimeout(n),o=null,n=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!n;return s(),o=function(){e.apply(i,a)},n=setTimeout((function(){if(n=null,!c){const e=o;return o=null,null==e?void 0:e()}}),t),c&&o?o():void 0};return i.cancel=s,i.flush=function(){const e=o;s(),e&&e()},i}((({width:t,height:o})=>{if(r){const s=o/t*100;r.style.paddingBottom=`${s>n?n:s}%`,r.style.width=((t,r)=>{const n=e.videoWidth/e.videoHeight;return n>t/r?"100%":r*n+"px"})(t,o)}}),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;o({width:t,height:r})}else e.contentRect&&o({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},bi=Ir.createAction("swJs/audioSetSpeakerAction"),_i=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:n}){try{const o=new Map,s=gi(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return o.get(this.id)},set domElement(e){e?(Gt().debug("Set localOverlay",e),o.set(this.id,e)):(Gt().debug("Remove localOverlay"),o.delete(this.id))},hide(){if(!this.domElement)return Gt().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?Gt().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):Gt().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return Gt().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:n,localStream:o})=>{Gt().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===n));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return Gt().debug("Location not found"),void(a&&(Gt().debug("Current layer not visible"),e.hide()));if(!a){Gt().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:n,height:o}=vi(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=n,s.style.height=o,s})({location:i}),a.id=e.id;const r=gi();r.srcObject=o,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const n=t.querySelector(".mcuLayers"),s=n?.querySelector(`#${a.id}`);return void(n&&!s&&(n.appendChild(a),e.domElement=a))}const{top:c,left:d,width:u,height:l}=vi(i);Gt().debug("Update myLayer:",c,d,u,l);const h=o.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(o),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){Gt().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c;r.on("layout.changed",(e=>{Gt().debug("Received layout.changed"),r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()})),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){Gt().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){Gt().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){Gt().error("Error handling video_muted",e)}})),r.on("track",(function(r){switch(r.track.kind){case"video":c=n(ki,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s})}})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),o.clear(),c?.cancel()}))}catch(e){Gt().error("videoElementSaga",e)}};function*wi({element:e,room:t}){const r=Ir.getCustomSagaActionType(t.__uuid,bi);for(;;){const n=yield Oe([r]);try{switch(n.type){case r:const o=yield je(Rs,e,n.payload);t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:o,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:e,kind:"reject"}),Gt().error(e)}}}function*Si({track:e,element:t,speakerId:r,room:n}){(({track:e,element:t})=>{t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({track:e,element:t}),r&&Rs(t,r).catch((()=>{})),yield Le(wi,{element:t,room:n})}function*ki({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:n}){try{if((({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))})({element:n,track:r}),n.style.width="100%",n.style.maxHeight="100%",!t)return void e.appendChild(n);if(e.querySelector(".mcuContent"))return void Gt().debug("MCU Content already there");const o=document.createElement("div");o.style.position="absolute",o.style.top="0",o.style.left="0",o.style.right="0",o.style.bottom="0",o.appendChild(n);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(o);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),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(Gt().debug("Wait for the MCU to be ready"),yield je(fi,{element:n}));const c=yi({rootElement:e,video:n,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){Gt().error("Handle video track error",e)}}const Ei={errors:"onError",responses:"onSuccess"},Ci={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},Ti=nr(class extends pi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:zn.audioMuteMember,audioUnmute:zn.audioUnmuteMember,videoMute:zn.videoMuteMember,videoUnmute:zn.videoUnmuteMember,setMicrophoneVolume:zn.setInputVolumeMember,setInputVolume:zn.setInputVolumeMember,setInputSensitivity:zn.setInputSensitivityMember}),Ii=nr(class extends pi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:zn.audioMuteMember,audioUnmute:zn.audioUnmuteMember,videoMute:zn.videoMuteMember,videoUnmute:zn.videoUnmuteMember,setInputVolume:zn.setInputVolumeMember,setMicrophoneVolume:zn.setInputVolumeMember,setInputSensitivity:zn.setInputSensitivityMember}),Mi=()=>{},Pi="video.memberList.updated",Ri=tr({event:Pi}),Oi=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Ut),e)),[]).join(".")})(Ri),Ai=["video.room.joined","video.member.joined","video.member.left","video.member.updated"];function*xi({pubSubChannel:e}){const t=new Map;function*r(r){const n={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:(({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);switch(e.type){case"video.member.left":r.forEach((e=>{t.delete(e.id)}));break;default:r.forEach((e=>{t.set(e.id,e)}))}return Array.from(t.values())})({action:r,memberList:t})};yield Ae(e,{type:Oi,payload:n})}for(;;){const t=yield Oe(e,(({type:e})=>Ai.includes(e)));yield Le(r,t)}}const ji=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(Ri))))(r))return;const{cleanup:n}=((e,t)=>{(e=>lr(Ai).filter((t=>!e.includes(t))))(t).forEach((t=>{e.once(t,Mi)}));const r=({members:t})=>{e.emit(Pi,{members:t})};return e.on(Oi,r),{cleanup:()=>{e.off(Oi,r)}}})(t,r);yield Le(xi,{pubSubChannel:e}),t.once("destroy",(()=>{n()}))},Li=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield Le(cs.memberPositionWorker,e)},Ni=function*(e){Gt().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{parentId:s}=n;if(!s)throw new Error("Missing parentId for childMemberJoinedWorker");const i=yield Oe(o,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===s)),{member:a}=i.payload;a?.parent_id&&(r._attachListeners(a.id),r.applyEmitterTransforms(),(yield Ne(In.getComponent,a.parent_id))&&(yield Ae(cn.upsert({id:r.callId,roomId:i.payload.room_id,roomSessionId:i.payload.room_session_id,memberId:a.id})))),Gt().trace("childMemberJoinedWorker ended")},Di=nr(class extends pi{_screenShareList=new Set;_deviceList=new Set;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})}}}],[[mr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[mr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[mr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>zn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>Yt({...e.recording,room_session_id:this.roomSessionId})}],[[mr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>zn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>Yt({...e.playback,room_session_id:this.roomSessionId})}],[[mr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[mr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>zn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>Yt({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...cs.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:ji})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Li,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){const{autoJoin:t=!0,audio:r=!1,video:n=!0,layout:o,positions:s}=e,i=await Bs({audio:!0===r?Ci:r,video:n}),a={...this.options,screenShare:!0,recoverCall:!1,localStream:i,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:o,positions:s},c=Dn({store:this.store,Component:Ti,componentListeners:Ei})(a);i.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{c&&c.active&&c.leave()}))})),c.once("destroy",(()=>{c.emit("room.left"),this._screenShareList.delete(c)}));try{return c.runWorker("childMemberJoinedWorker",{worker:Ni,initialState:{parentId:this.memberId}}),this._screenShareList.add(c),t&&await c.join(),c}catch(e){throw this.logger.error("ScreenShare Error",e),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={}){const{autoJoin:t=!0,audio:r=!1,video:n=!1}=e;if(!r&&!n)throw new TypeError("At least one of `audio` or `video` must be requested.");const o={...this.options,localStream:void 0,remoteStream:void 0,audio:r,video:n,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},s=Dn({store:this.store,Component:Ii,componentListeners:Ei})(o);s.once("destroy",(()=>{s.emit("room.left"),this._deviceList.delete(s)}));try{return s.runWorker("childMemberJoinedWorker",{worker:Ni,initialState:{parentId:this.memberId}}),this._deviceList.add(s),t&&await s.join(),s}catch(e){throw this.logger.error("RoomDevice Error",e),e}}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(bi(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()}},{audioMute:zn.audioMuteMember,audioUnmute:zn.audioUnmuteMember,videoMute:zn.videoMuteMember,videoUnmute:zn.videoUnmuteMember,deaf:zn.deafMember,undeaf:zn.undeafMember,setInputVolume:zn.setInputVolumeMember,setOutputVolume:zn.setOutputVolumeMember,setMicrophoneVolume:zn.setInputVolumeMember,setSpeakerVolume:zn.setOutputVolumeMember,setInputSensitivity:zn.setInputSensitivityMember,removeMember:zn.removeMember,removeAllMembers:zn.removeAllMembers,getMembers:zn.getMembers,getLayouts:zn.getLayouts,setLayout:zn.setLayout,setPositions:zn.setPositions,setMemberPosition:zn.setMemberPosition,hideVideoMuted:zn.hideVideoMuted,showVideoMuted:zn.showVideoMuted,getRecordings:zn.getRecordings,startRecording:zn.startRecording,getPlaybacks:zn.getPlaybacks,play:zn.play,setHideVideoMuted:zn.setHideVideoMuted,getMeta:zn.getMeta,setMeta:zn.setMeta,updateMeta:zn.updateMeta,deleteMeta:zn.deleteMeta,getMemberMeta:zn.getMemberMeta,setMemberMeta:zn.setMemberMeta,updateMemberMeta:zn.updateMemberMeta,deleteMemberMeta:zn.deleteMemberMeta,promote:zn.promote,demote:zn.demote,getStreams:zn.getStreams,startStream:zn.startStream}),Wi=function*(e){Gt().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:n}=t;for(;;){const e=yield Oe(r,(e=>e.type.startsWith("video-manager.")));yield Ae(n,e)}};class Vi extends qn{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Wi})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>Yt(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>Yt(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=>Yt(e),payloadTransform:e=>Yt(e)}]])}}class Ui extends Bn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:n=!0,stopMicrophoneWhileMuted:o=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const n=new Audio;let o;t.on("track",(function(s){switch(s.track.kind){case"audio":o=r(Si,{track:s.track,element:n,speakerId:e,room:t})}})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){Gt().error("audioElementSaga",e)}else Gt().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(_i({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},Dn({store:c.store,customSagas:c.customSagas,Component:Di,componentListeners:Ei})(c));var c;return o&&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)}})),n&&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=Uo.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Ko.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Dn({store:e.store,Component:Vi,componentListeners:{errors:"onError",responses:"onSuccess"}})(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(Ir.reauthAction({token:e}))}}function $i(e){this.message=e}($i.prototype=new Error).name="InvalidCharacterError";var Bi="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new $i("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,o=0,s=0,i="";n=t.charAt(s++);~n&&(r=o%4?64*r+n:n,o++%4)?i+=String.fromCharCode(255&r>>(-2*o&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return i};function qi(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(Bi(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 Bi(t)}}function Fi(e){this.message=e}function Hi(e,t){if("string"!=typeof e)throw new Fi("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(qi(e.split(".")[r]))}catch(e){throw new Fi("Invalid token specified: "+e.message)}}(Fi.prototype=new Error).name="InvalidTokenError";class zi extends nn{options;WebSocketConstructor=WebSocket;agent="@signalwire/js/browser/3.17.0";constructor(e){let t;try{t=Hi(e.token,{header:!0})}catch(e){}super({...e,host:t?.ch||e.host}),this.options=e}get allowHijack(){return this.options._hijack}async retrieveRelayProtocol(){if(!this.allowHijack)return"";const e=this.getRoomNameFromJWT();return e?(this.logger.info("Hijacking: search protocol for",e),window.sessionStorage.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowHijack)return;const e=this.getRoomNameFromJWT();e&&(this.logger.info("Hijacking: persist protocol",e,this.relayProtocol),window.sessionStorage.setItem(e,this.relayProtocol))}getRoomNameFromJWT(){try{return Hi(this.options.token)?.r}catch(e){return""}}}const Qi=e=>{const t={...e,emitter:new St},r=Wn({userOptions:t,SessionConstructor:zi});return Dn({store:r,Component:Ui,componentListeners:{errors:"onError",responses:"onSuccess"}})(t)},Ji=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Gi=Object.freeze({__proto__:null,ChatMember:Uo.ChatMember,ChatMessage:Uo.ChatMessage,Client:function(e){const t=Qi(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,n,o)=>n in r?r[n]:Ji.includes(n)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(n):Reflect.get(e,n,o)})}});const Ki=["getAllowedChannels","subscribe","publish"];var Xi=Object.freeze({__proto__:null,PubSubMessage:Ko.PubSubMessage,Client:function(e){const t=Qi(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,n,o)=>n in r?r[n]:Ki.includes(n)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(n):Reflect.get(e,n,o)})}});const Yi={aspectRatio:{ideal:16/9}},Zi=e=>new Promise((async(t,r)=>{const{audio:n=!0,video:o=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,m=Qi({...h});if(await m.connect(),!m)return;let p;if(i){const e=document.getElementById(i);e?p=e:(p=document.body,Gt().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=m.rooms.makeRoomObject({audio:n,video:!0===o?Yi:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:p,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),m.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){Gt().error("Join",e),m.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),ea=["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"];var ta=Object.freeze({__proto__:null,RoomSession:function(e){const{audio:t=!0,video:r=!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s=!0,stopCameraWhileMuted:i=!0,stopMicrophoneWhileMuted:a=!0,speakerId:c,...d}=e;["audio","video"].forEach((t=>{t in e&&Gt().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const u=Qi(d),l=u.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s,stopCameraWhileMuted:i,stopMicrophoneWhileMuted:a,speakerId:c});l.once("destroy",(()=>{l.emit("room.left"),u.disconnect()}));const h={join:e=>new Promise((async(n,o)=>{try{l.attachPreConnectWorkers(),await u.connect();const s=e?.audio??t,i=e?.video??r,a=u._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:n=!0,sendAudio:o,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;Gt().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,m=l&&"both"===d,p="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(s??n),y=Boolean(i??r),b=Boolean(a??n);return!h&&f&&Gt().info("Not allowed to send audio on this room. Default values will be used."),!m&&v&&Gt().info("Not allowed to send video on this room. Default values will be used."),!p&&y&&Gt().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&Gt().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:m&&v,mustRecvAudio:p&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(t),sendVideo:Boolean(r),...e});if(!Object.values(c).some(Boolean))return u.disconnect(),o(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));l.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),l.once("room.subscribed",(e=>{l.attachOnSubscribedWorkers(e),n(l)})),await l.join()}catch(e){Gt().error("RoomSession Join",e),u.disconnect(),o(e)}}))};return new Proxy(l,{get(e,t,r){if(t in h)return h[t];if(!e.active&&ea.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})},createRoomObject:Zi,joinRoom:e=>Zi({...e,autoJoin:!0}),createClient:Qi}),ra=Object.freeze({__proto__:null,getDevices:Hs,getCameraDevices:()=>Hs("camera"),getMicrophoneDevices:()=>Hs("microphone"),getSpeakerDevices:()=>Hs("speaker"),getDevicesWithPermissions:qs,getCameraDevicesWithPermissions:()=>qs("camera"),getMicrophoneDevicesWithPermissions:()=>qs("microphone"),getSpeakerDevicesWithPermissions:()=>qs("speaker"),checkPermissions:Ds,checkCameraPermissions:Ws,checkMicrophonePermissions:Vs,checkSpeakerPermissions:Us,requestPermissions:async e=>{try{const t=await $s(e);Os(t)}catch(e){throw e}},createDeviceWatcher:Ys,createCameraDeviceWatcher:()=>Ys({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Ys({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>Ys({targets:["speaker"]}),supportsMediaDevices:Cs,supportsGetUserMedia:()=>"function"==typeof Ts().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Ts().getDisplayMedia,getUserMedia:$s,getDisplayMedia:Bs,enumerateDevices:Ls,getSupportedConstraints:Is,supportsMediaOutput:Ps,setMediaElementSinkId:Rs,stopStream:Os,stopTrack:As,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Zs(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},$s(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new St,n=new(window.AudioContext||window.webkitAudioContext),o=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(n);let s,i;try{n.createMediaStreamSource(t).connect(o)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(o.frequencyBinCount);o.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;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"!==n.state&&n.close().catch((e=>{Gt().error("Error closing the AudioContext",e)})),Zs(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=Gi,e.PubSub=Xi,e.Video=ta,e.WebRTC=ra,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
21
21
|
//# sourceMappingURL=index.umd.js.map
|