@signalwire/js 3.19.0 → 3.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * SignalWire JS SDK v3.19.0 (https://signalwire.com)
2
+ * SignalWire JS SDK v3.19.1 (https://signalwire.com)
3
3
  * Copyright 2018-2023 SignalWire
4
4
  * Licensed under MIT(https://github.com/signalwire/signalwire-js/blob/main/LICENSE)
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,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(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 a(e,r,n){return function(){typeof console!==t&&(i.call(this,r,n),this[e].apply(this,arguments))}}function c(n,i,c){return function(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)}(n)||a.apply(this,arguments)}function d(e,r,o){var s,a=this;r=null==r?"WARN":r;var d="loglevel";function u(){var e;if(typeof window!==t&&d){try{e=window.localStorage[d]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,n=r.indexOf(encodeURIComponent(d)+"=");-1!==n&&(e=/^([^;]+)/.exec(r.slice(n))[1])}catch(e){}return void 0===a.levels[e]&&(e=void 0),e}}"string"==typeof e?d+=":"+e:"symbol"==typeof e&&(d=void 0),a.name=e,a.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},a.methodFactory=o||c,a.getLevel=function(){return s},a.setLevel=function(r,o){if("string"==typeof r&&void 0!==a.levels[r.toUpperCase()]&&(r=a.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=a.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(s=r,!1!==o&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&d){try{return void(window.localStorage[d]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"="+r+";"}catch(e){}}}(r),i.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,u()||a.setLevel(e,!1)},a.resetLevel=function(){a.setLevel(r,!1),function(){if(typeof window!==t&&d){try{return void window.localStorage.removeItem(d)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},a.enableAll=function(e){a.setLevel(a.levels.TRACE,e)},a.disableAll=function(e){a.setLevel(a.levels.SILENT,e)};var l=u();null==l&&(l=r),a.setLevel(l,!1)}var u=new d,l={};u.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=l[e];return t||(t=l[e]=new d(e,u.getLevel(),u.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return u.noConflict=function(){return typeof window!==t&&window.log===u&&(window.log=h),u},u.getLoggers=function(){return l},u.default=u,u},e.exports?e.exports=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}var h="6ba7b810-9dad-11d1-80b4-00c04fd430c8",p="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function m(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=h,n.URL=p,n}function g(e){return 14+(e+64>>>9<<4)+1}function f(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function v(e,t,r,n,o,s){return f((i=f(f(t,e),f(n,s)))<<(a=o)|i>>>32-a,r);var i,a}function y(e,t,r,n,o,s,i){return v(t&r|~t&n,e,t,o,s,i)}function b(e,t,r,n,o,s,i){return v(t&n|r&~n,e,t,o,s,i)}function S(e,t,r,n,o,s,i){return v(t^r^n,e,t,o,s,i)}function _(e,t,r,n,o,s,i){return v(r^(t|~n),e,t,o,s,i)}function w(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 k(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function C(e,t){return e<<t|e>>>32-t}function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function T(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==E(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==E(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===E(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?P(Object(r),!0).forEach((function(t){T(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):P(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function M(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}m("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){for(var t=[],r=32*e.length,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[g(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=y(r,n,o,s,e[i],7,-680876936),s=y(s,r,n,o,e[i+1],12,-389564586),o=y(o,s,r,n,e[i+2],17,606105819),n=y(n,o,s,r,e[i+3],22,-1044525330),r=y(r,n,o,s,e[i+4],7,-176418897),s=y(s,r,n,o,e[i+5],12,1200080426),o=y(o,s,r,n,e[i+6],17,-1473231341),n=y(n,o,s,r,e[i+7],22,-45705983),r=y(r,n,o,s,e[i+8],7,1770035416),s=y(s,r,n,o,e[i+9],12,-1958414417),o=y(o,s,r,n,e[i+10],17,-42063),n=y(n,o,s,r,e[i+11],22,-1990404162),r=y(r,n,o,s,e[i+12],7,1804603682),s=y(s,r,n,o,e[i+13],12,-40341101),o=y(o,s,r,n,e[i+14],17,-1502002290),r=b(r,n=y(n,o,s,r,e[i+15],22,1236535329),o,s,e[i+1],5,-165796510),s=b(s,r,n,o,e[i+6],9,-1069501632),o=b(o,s,r,n,e[i+11],14,643717713),n=b(n,o,s,r,e[i],20,-373897302),r=b(r,n,o,s,e[i+5],5,-701558691),s=b(s,r,n,o,e[i+10],9,38016083),o=b(o,s,r,n,e[i+15],14,-660478335),n=b(n,o,s,r,e[i+4],20,-405537848),r=b(r,n,o,s,e[i+9],5,568446438),s=b(s,r,n,o,e[i+14],9,-1019803690),o=b(o,s,r,n,e[i+3],14,-187363961),n=b(n,o,s,r,e[i+8],20,1163531501),r=b(r,n,o,s,e[i+13],5,-1444681467),s=b(s,r,n,o,e[i+2],9,-51403784),o=b(o,s,r,n,e[i+7],14,1735328473),r=S(r,n=b(n,o,s,r,e[i+12],20,-1926607734),o,s,e[i+5],4,-378558),s=S(s,r,n,o,e[i+8],11,-2022574463),o=S(o,s,r,n,e[i+11],16,1839030562),n=S(n,o,s,r,e[i+14],23,-35309556),r=S(r,n,o,s,e[i+1],4,-1530992060),s=S(s,r,n,o,e[i+4],11,1272893353),o=S(o,s,r,n,e[i+7],16,-155497632),n=S(n,o,s,r,e[i+10],23,-1094730640),r=S(r,n,o,s,e[i+13],4,681279174),s=S(s,r,n,o,e[i],11,-358537222),o=S(o,s,r,n,e[i+3],16,-722521979),n=S(n,o,s,r,e[i+6],23,76029189),r=S(r,n,o,s,e[i+9],4,-640364487),s=S(s,r,n,o,e[i+12],11,-421815835),o=S(o,s,r,n,e[i+15],16,530742520),r=_(r,n=S(n,o,s,r,e[i+2],23,-995338651),o,s,e[i],6,-198630844),s=_(s,r,n,o,e[i+7],10,1126891415),o=_(o,s,r,n,e[i+14],15,-1416354905),n=_(n,o,s,r,e[i+5],21,-57434055),r=_(r,n,o,s,e[i+12],6,1700485571),s=_(s,r,n,o,e[i+3],10,-1894986606),o=_(o,s,r,n,e[i+10],15,-1051523),n=_(n,o,s,r,e[i+1],21,-2054922799),r=_(r,n,o,s,e[i+8],6,1873313359),s=_(s,r,n,o,e[i+15],10,-30611744),o=_(o,s,r,n,e[i+6],15,-1560198380),n=_(n,o,s,r,e[i+13],21,1309151649),r=_(r,n,o,s,e[i+4],6,-145523070),s=_(s,r,n,o,e[i+11],10,-1120210379),o=_(o,s,r,n,e[i+2],15,718787259),n=_(n,o,s,r,e[i+9],21,-343485551),r=f(r,a),n=f(n,c),o=f(o,d),s=f(s,u)}return[r,n,o,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(g(t)),n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))})),m("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var 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 p=16;p<80;++p)l[p]=C(l[p-3]^l[p-8]^l[p-14]^l[p-16],1);for(var m=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var S=Math.floor(b/20),_=C(m,5)+k(S,g,f,v)+y+t[S]+l[b]>>>0;y=v,v=f,f=C(g,30)>>>0,g=m,m=_}r[0]=r[0]+m>>>0,r[1]=r[1]+g>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+v>>>0,r[4]=r[4]+y>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var R="function"==typeof Symbol&&Symbol.observable||"@@observable",x=function(){return Math.random().toString(36).substring(7).split("").join(".")},A={INIT:"@@redux/INIT"+x(),REPLACE:"@@redux/REPLACE"+x(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+x()}};function O(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(M(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(M(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(M(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(M(3));return s}function l(e){if("function"!=typeof e)throw new Error(M(4));if(c)throw new Error(M(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(M(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(M(7));if(void 0===e.type)throw new Error(M(8));if(c)throw new Error(M(9));try{c=!0,s=o(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:A.INIT}),(n={dispatch:h,subscribe:l,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error(M(10));o=e,h({type:A.REPLACE})}})[R]=function(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(M(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[R]=function(){return this},e},n}function j(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:A.INIT}))throw new Error(M(12));if(void 0===r(void 0,{type:A.PROBE_UNKNOWN_ACTION()}))throw new Error(M(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var 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(M(14));o[c]=u,n=n||u!==d}return(n=n||i.length!==Object.keys(e).length)?o:e}}function L(e,t){return function(){return t(e.apply(this,arguments))}}function D(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function N(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),n=function(){throw new Error(M(15))},o={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},s=t.map((function(e){return e(o)}));return n=D.apply(void 0,s)(r.dispatch),I(I({},r),{},{dispatch:n})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:A,applyMiddleware:N,bindActionCreators:function(e,t){if("function"==typeof e)return L(e,t);if("object"!=typeof e||null===e)throw new Error(M(16));var r={};for(var n in e){var o=e[n];"function"==typeof o&&(r[n]=L(o,t))}return r},combineReducers:j,compose:D,createStore:O,legacy_createStore:O}),V=function(e){return"@@redux-saga/"+e},U=V("CANCEL_PROMISE"),$=V("CHANNEL_END"),B=V("IO"),F=V("MATCH"),z=V("MULTICAST"),H=V("SAGA_ACTION"),q=V("SELF_CANCELLATION"),K=V("TASK"),Q=V("TASK_CANCEL"),G=V("TERMINATE"),J=V("LOCATION");function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},X.apply(this,arguments)}var Y=function(e){return null==e},Z=function(e){return null!=e},ee=function(e){return"function"==typeof e},te=function(e){return"string"==typeof e},re=Array.isArray,ne=function(e){return e&&ee(e.then)},oe=function(e){return e&&ee(e.next)&&ee(e.throw)},se=function e(t){return t&&(te(t)||ce(t)||ee(t)||re(t)&&t.every(e))},ie=function(e){return e&&ee(e.take)&&ee(e.close)},ae=function(e){return ee(e)&&e.hasOwnProperty("toString")},ce=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},de=function(e){return ie(e)&&e[z]},ue=function(e){return function(){return!0}}(),le=function(){},he=function(e){return e},pe=function(e,t){X(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))},me=function(e,t){var r;return(r=[]).concat.apply(r,t.map(e))};function ge(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function fe(e){var t=!1;return function(){t||(t=!0,e())}}var ve=function(e){throw e},ye=function(e){return{value:e,done:!0}};function be(e,t,r){void 0===t&&(t=ve),void 0===r&&(r="iterator");var n={meta:{name:r},next:e,throw:t,return:ye,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(n[Symbol.iterator]=function(){return n}),n}function Se(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var _e=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},ke=function(e){return e===G},Ce=function(e){return e===Q},Ee=function(e){return ke(e)||Ce(e)};function Te(e,t){var r,n=Object.keys(e),o=n.length,s=0,i=re(e)?_e(o):{},a={};return n.forEach((function(e){var n=function(n,a){r||(a||Ee(n)?(t.cancel(),t(n,a)):(i[e]=n,++s===o&&(r=!0,t(i))))};n.cancel=le,a[e]=n})),t.cancel=function(){r||(r=!0,n.forEach((function(e){return a[e].cancel()})))},a}function Pe(e){return{name:e.name||"anonymous",location:Ie(e)}}function Ie(e){return e[J]}var Me={isEmpty:ue,put:le,take:le},Re=function(){return Me},xe=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),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}}(e)},Ae="TAKE",Oe="PUT",je="ALL",Le="CALL",De="FORK",Ne="SELECT",We="CANCELLED",Ve=function(e,t){var r;return(r={})[B]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function Ue(e,t){return void 0===e&&(e="*"),se(e)?(Z(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ve(Ae,{pattern:e})):de(e)&&Z(t)&&se(t)?Ve(Ae,{channel:e,pattern:t}):ie(e)?(Z(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ve(Ae,{channel:e})):void 0}function $e(e,t){return Y(t)&&(t=e,e=void 0),Ve(Oe,{channel:e,action:t})}function Be(e,t){var r,n=null;return ee(e)?r=e:(re(e)?(n=e[0],r=e[1]):(n=e.context,r=e.fn),n&&te(r)&&ee(n[r])&&(r=n[r])),{context:n,fn:r,args:t}}function Fe(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 Ve(Le,Be(e,r))}function ze(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 Ve(De,Be(e,r))}function He(e){void 0===e&&(e=he);for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Ve(Ne,{selector:e,args:r})}function qe(){return Ve(We,{})}var Ke=[],Qe=0;function Ge(e){try{Ye(),e()}finally{Ze()}}function Je(e){Ke.push(e),Qe||(Ye(),et())}function Xe(e){try{return Ye(),e()}finally{et()}}function Ye(){Qe++}function Ze(){Qe--}function et(){var e;for(Ze();!Qe&&void 0!==(e=Ke.shift());)Ge(e)}var tt=function(e){return function(t){return e.some((function(e){return it(e)(t)}))}},rt=function(e){return function(t){return e(t)}},nt=function(e){return function(t){return t.type===String(e)}},ot=function(e){return function(t){return t.type===e}},st=function(){return ue};function it(e){var t="*"===e?st:te(e)?nt:re(e)?tt:ae(e)?nt:ee(e)?rt:ce(e)?ot:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var at={type:$},ct=function(e){return e&&e.type===$};function dt(e){void 0===e&&(e=xe());var t=!1,r=[];return{take:function(n){t&&e.isEmpty()?n(at):e.isEmpty()?(r.push(n),n.cancel=function(){ge(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(at):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])(at)}}}}function ut(e,t){void 0===t&&(t=Re());var r,n=!1,o=dt(t),s=function(){n||(n=!0,ee(r)&&r(),o.close())};return r=fe(r=e((function(e){ct(e)?s():o.put(e)}))),n&&r(),{take:o.take,flush:o.flush,close:s}}function lt(){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(at)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(ct(e))s();else for(var o=r=n,i=0,a=o.length;i<a;i++){var c=o[i];c[F](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(at):(e[F]=r,o(),n.push(e),e.cancel=fe((function(){o(),ge(n,e)})))},e.close=s,e}function ht(){var e=lt(),t=e.put;return e.put=function(e){e[H]?t(e):Je((function(){t(e)}))},e}var pt=0,mt=1,gt=2,ft=3;function vt(e,t){var r=e[U];ee(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var yt,bt=0,St=function(){return++bt};function _t(e){e.isRunning()&&e.cancel()}var wt=((yt={})[Ae]=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):!ct(e)||i?r(e):r(G)};try{o.take(a,Z(s)?it(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},yt[Oe]=function(e,t,r){var n=t.channel,o=t.action,s=t.resolve;Je((function(){var t;try{t=(n?n.put:e.dispatch)(o)}catch(e){return void r(e,!0)}s&&ne(t)?vt(t,r):r(t)}))},yt[je]=function(e,t,r,n){var o=n.digestEffect,s=bt,i=Object.keys(t);if(0!==i.length){var a=Te(t,r);i.forEach((function(e){o(t[e],s,a[e],e)}))}else r(re(t)?[]:{})},yt.RACE=function(e,t,r,n){var o=n.digestEffect,s=bt,i=Object.keys(t),a=re(t)?_e(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,n){d||(n||Ee(t)?(r.cancel(),r(t,n)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=le,c[e]=t})),r.cancel=function(){d||(d=!0,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||o(t[e],s,c[e],e)}))},yt[Le]=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(ne(c))return void vt(c,r);if(oe(c))return void At(e,c,a.context,bt,Pe(s),!1,r);r(c)}catch(e){r(e,!0)}},yt.CPS=function(e,t,r){var n=t.context,o=t.fn,s=t.args;try{var i=function(e,t){Y(e)?r(t):r(e,!0)};o.apply(n,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},yt[De]=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(oe(o))return o;var s=!1;return be((function(e){return s?{value:e,done:!0}:(s=!0,{value:o,done:!ne(o)})}))}catch(e){return be((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Pe(t)}(a,o);Xe((function(){var t=At(e,a,i.context,bt,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},yt.JOIN=function(e,t,r,n){var o=n.task,s=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&ge(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(re(t)){if(0===t.length)return void r([]);var i=Te(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},yt.CANCEL=function(e,t,r,n){t===q?_t(n.task):re(t)?t.forEach(_t):_t(t),r()},yt[Ne]=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)}},yt.ACTION_CHANNEL=function(e,t,r){var n=t.pattern,o=dt(t.buffer),s=it(n),i=function t(r){ct(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)},yt[We]=function(e,t,r,n){r(n.task.isCancelled())},yt.FLUSH=function(e,t,r){t.flush(r)},yt.GET_CONTEXT=function(e,t,r,n){r(n.task.context[t])},yt.SET_CONTEXT=function(e,t,r,n){pe(n.task.context,t),r()},yt);function kt(e,t){return e+"?"+t}function Ct(e){var t=e.name,r=e.location;return r?t+" "+kt(r.fileName,r.lineNumber):t}function Et(e){var t=me((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var Tt=null,Pt=[],It=function(e){e.crashedEffect=Tt,Pt.push(e)},Mt=function(){Tt=null,Pt.length=0},Rt=function(e){Tt=e},xt=function(){var e,t=Pt[0],r=Pt.slice(1),n=t.crashedEffect?(e=Ie(t.crashedEffect))?e.code+" "+kt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+Ct(t.meta)+(n?" \n when executing effect "+n:"")].concat(r.map((function(e){return" created by "+Ct(e.meta)})),[Et(Pt)]).join("\n")};function At(e,t,r,n,o,s,i){var a=e.finalizeRunEffect((function(t,r,n){ne(t)?vt(t,n):oe(t)?At(e,t,d.context,r,o,!1,n):t&&t[B]?(0,wt[t.type])(e,t.payload,n,u):n(t)}));l.cancel=le;var c={meta:o,cancel:function(){c.status===pt&&(c.status=mt,l(Q))},status:pt},d=function(e,t,r,n,o,s,i){var a;void 0===i&&(i=le);var c,d,u=pt,l=null,h=[],p=Object.create(r),m=function(e,t,r){var n,o=[],s=!1;function i(e){h.push.apply(h,m.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){s||(ge(o,t),t.cont=le,c?i(a):(t===e&&(n=a),o.length||(s=!0,r(n))))}}function c(){s||(s=!0,o.forEach((function(e){e.cont=le,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=gt,It({meta:o,cancelledTasks:h}),f.isRoot){var n=xt();Mt(),e.onError(t,{sagaStack:n})}d=t,l&&l.reject(t)}else t===Q?u=mt:u!==mt&&(u=ft),c=t,l&&l.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[K]=!0,a.id=n,a.meta=o,a.isRoot=s,a.context=p,a.joiners=[],a.queue=m,a.cancel=function(){u===pt&&(u=mt,m.cancelAll(),g(Q,!1))},a.cont=i,a.end=g,a.setContext=function(e){pe(p,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,u===gt?l.reject(d):u!==pt&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return u===pt},a.isCancelled=function(){return u===mt||u===pt&&t.status===mt},a.isAborted=function(){return u===gt},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,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),Mt()):Ce(e)?(c.status=mt,l.cancel(),o=ee(t.return)?t.return(Q):{done:!0,value:Q}):o=ke(e)?ee(t.return)?t.return():{done:!0}:t.next(e),o.done?(c.status!==mt&&(c.status=ft),c.cont(o.value)):h(o.value,n,l)}catch(e){if(c.status===mt)throw e;c.status=gt,c.cont(e,!0)}}function h(t,r,n,o){void 0===o&&(o="");var s,i=St();function c(r,o){s||(s=!0,n.cancel=le,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),o&&Rt(t),n(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:o,effect:t}),c.cancel=le,n.cancel=function(){s||(s=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function Ot(e,t){for(var r=e.channel,n=void 0===r?ht():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?Se:u,h=arguments.length,p=new Array(h>2?h-2:0),m=2;m<h;m++)p[m-2]=arguments[m];var g,f=t.apply(void 0,p),v=St();if(c&&(c.rootSagaStarted=c.rootSagaStarted||le,c.effectTriggered=c.effectTriggered||le,c.effectResolved=c.effectResolved||le,c.effectRejected=c.effectRejected||le,c.effectCancelled=c.effectCancelled||le,c.actionDispatched=c.actionDispatched||le,c.rootSagaStarted({effectId:v,saga:t,args:p})),d){var y=D.apply(void 0,d);g=function(e){return function(t,r,n){return y((function(t){return e(t,r,n)}))(t)}}}else g=he;var b={channel:n,dispatch:we(o),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Xe((function(){var e=At(b,f,a,v,Pe(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function jt(e){var t,r=void 0===e?{}:e,n=r.context,o=void 0===n?{}:n,s=r.channel,i=void 0===s?ht():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=Ot.bind(null,X({},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){pe(o,e)},d}var Lt={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,p=u.length;for(d=0;d<p;d++)switch(u[d].once&&this.removeListener(e,u[d].fn,void 0,!0),l){case 1:u[d].fn.call(u[d].context);break;case 2:u[d].fn.call(u[d].context,t);break;case 3:u[d].fn.call(u[d].context,t,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}(Lt);var Dt=Lt.exports,Nt=Object.defineProperty,Wt=Object.defineProperties,Vt=Object.getOwnPropertyDescriptor,Ut=Object.getOwnPropertyDescriptors,$t=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,zt=Object.prototype.propertyIsEnumerable,Ht=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qt=(e,t)=>{for(var r in t||(t={}))Ft.call(t,r)&&Ht(e,r,t[r]);if(Bt)for(var r of Bt(t))zt.call(t,r)&&Ht(e,r,t[r]);return e},Kt=(e,t)=>Wt(e,Ut(t)),Qt=(e,t)=>{var r={};for(var n in e)Ft.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&Bt)for(var n of Bt(e))t.indexOf(n)<0&&zt.call(e,n)&&(r[n]=e[n]);return r},Gt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of $t(t))Ft.call(e,o)||o===r||Nt(e,o,{get:()=>t[o],enumerable:!(n=Vt(t,o))||n.enumerable});return e},Xt=(e,t,r)=>(Jt(e,t,"default"),r&&Jt(r,t,"default")),Yt=(e,t,r)=>(Ht(e,"symbol"!=typeof t?t+"":t,r),r),Zt="__local__",er="__synthetic__",tr="video",rr="chat",nr="chat",or=["room.started","room.ended"].map((e=>`${tr}.${e}`)),sr=o.getLogger("signalwire"),ir=sr.methodFactory;sr.methodFactory=(e,t,r)=>{const n=ir(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),n.apply(void 0,e)}};var ar,cr=sr.getLevel();sr.setLevel(cr);var dr={},ur=()=>null!=ar?ar:sr,lr=({type:e,payload:t})=>{const r=ur(),{logWsTraffic:n}=dr||{};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")},hr=()=>{const e=ur();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?lr:Reflect.get(e,t,r)})},pr=/[A-Z]/g,mr=["webrtc.message"],gr=e=>mr.includes(e),fr=/^2[0-9][0-9]$/,vr=(e,t)=>{const{result:r={},error:n}=e;if(n)return{error:n};const{code:o,node_id:s,result:i=null}=r;return o&&!fr.test(o)?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?vr(i,s):{result:i}:{result:r}},yr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},br=(e,t=yr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,n])=>{const o=Sr(r);return e[o]="object"==typeof n&&n?Array.isArray(n)?t.propsToUpdateValue.includes(r)?n.map((e=>"string"==typeof e?Sr(e):br(e))):n:br(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}),{}),Sr=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,_r=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(pr,(e=>`_${e.toLowerCase()}`)))(e=wr({event:e,namespace:t}))),e),wr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,kr=e=>{const{event_type:t,params:r,node_id:n}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(gr(t)&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=n),{type:t,payload:e}}return{type:t,payload:r}},Cr=(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),Er=({instance:e,transform:t,payload:r,transformedPayload:n})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:n,transform:o})=>{const s=qt(Kt(qt({},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||("__sw_update_payload"===o?function(e){n=e}:"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}),Tr=new Map,Pr=/^(ws|wss):\/\//,Ir=(e,t,r)=>{let n=null;return Promise.race([e,new Promise(((e,o)=>n=setTimeout(o,t,r)))]).finally((()=>clearTimeout(n)))},Mr=e=>or.includes(e),Rr=e=>e.includes("session."),xr=["video.member.updated","video.member.talking"],Ar=["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"],Or=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Ar.includes(t)||(e=>e.includes(er))(t)||jr(t)||Rr(t)?null:xr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},jr=e=>e.includes(Zt),Lr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Zt),e)),[]).join(".")},Dr=e=>void 0!==e&&"jti"in e,Nr=e=>{var t;return qt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Wr=e=>qt({jsonrpc:"2.0"},e),Vr={major:3,minor:0,revision:0},Ur=e=>Nr({method:"signalwire.connect",params:qt({version:Vr},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"},Br=e=>{if(e.hasOwnProperty("dialogParams")){const t=Qt(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},Fr=e=>(t={})=>Nr({method:e,params:Br(t)}),zr=Fr("verto.invite"),Hr=Fr("verto.bye"),qr=Fr("verto.modify"),Kr=Fr("verto.info"),Qr=Fr("verto.pong"),Gr=(e,t)=>Wr({id:e,result:{method:t}}),Jr={};Gt(Jr,{authErrorAction:()=>sn,authExpiringAction:()=>cn,authSuccessAction:()=>an,compoundEventAttachAction:()=>bn,createAction:()=>Yr,destroyAction:()=>nn,getCustomSagaActionType:()=>yn,initAction:()=>rn,makeCustomSagaAction:()=>vn,reauthAction:()=>on,sessionAuthErrorAction:()=>pn,sessionConnectedAction:()=>un,sessionDisconnectedAction:()=>ln,sessionExpiringAction:()=>mn,sessionForceCloseAction:()=>gn,sessionReconnectingAction:()=>hn,socketMessageAction:()=>dn});var Xr={};function Yr(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return qt(qt({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}Gt(Xr,{configureStore:()=>tn,createAction:()=>Yr}),Xt(Xr,W);var Zr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?D:D.apply(null,arguments)},en=!0;function tn(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=j(r)}let c=n;"function"==typeof c&&(c=c(t));const d=N(...c);let u=D;o&&(u=Zr(qt({trace:!en},"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 rn=Yr("swSdk/init"),nn=Yr("swSdk/destroy"),on=Yr("swSdk/reauth"),sn=Yr("auth/error"),an=Yr("auth/success"),cn=Yr("auth/expiring"),dn=Yr("socket/message"),un=Yr("session.connected"),ln=Yr("session.disconnected"),hn=Yr("session.reconnecting"),pn=Yr("session.auth_error"),mn=Yr("session.expiring"),gn=Yr("session.forceClose"),fn=(e,t)=>`${t.type}/${e}`,vn=(e,t)=>Kt(qt({},t),{type:fn(e,t)}),yn=(e,t)=>fn(e,t),bn=Yr("compound_event:attach");function Sn(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 _n=({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?Sn(e.extraReducers):[e.extraReducers],s=qt(qt({},t),i);return function(e,t,r=[],n){let o,[s,i,a]="function"==typeof t?Sn(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?Yr(o,d):Yr(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(nn.type,(()=>t)),"function"==typeof n&&n(e)}});function wn(e){return[rn.type,on.type].includes(e.type)}var kn=_n({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,n;return Kt(qt({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(n=null==t?void 0:t.ice_servers)?n:[]})},authStatus:(e,{payload:t})=>Kt(qt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Kt(qt({},e),{authState:t})},extraReducers:e=>{e.addCase(sn.type,((e,{payload:t})=>Kt(qt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(wn,(e=>Kt(qt({},e),{authStatus:"authorizing"})))}}),{actions:Cn,reducer:En}=kn,Tn=Symbol("BaseSession"),Pn=class{constructor(e){var t,r;this.options=e,Yt(this,"__sw_symbol",Tn),Yt(this,"uuid",w()),Yt(this,"WebSocketConstructor"),Yt(this,"CloseEventConstructor"),Yt(this,"agent"),Yt(this,"connectVersion",Vr),Yt(this,"_rpcConnectResult"),Yt(this,"_requests",new Map),Yt(this,"_socket",null),Yt(this,"_host","wss://relay.signalwire.com"),Yt(this,"_executeTimeoutMs",1e4),Yt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Yt(this,"_executeQueue",new Set),Yt(this,"_swConnectError",Symbol.for("sw-connect-error")),Yt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Yt(this,"_checkPingDelay",15e3),Yt(this,"_checkPingTimer",null),Yt(this,"_reconnectTimer"),Yt(this,"_status","unknown"),Yt(this,"_sessionChannel"),Yt(this,"wsOpenHandler"),Yt(this,"wsCloseHandler"),Yt(this,"wsErrorHandler");const{host:n,logLevel:o="info",sessionChannel:s}=e;n&&(this._host=(e=>`${Pr.test(e)?"":"wss://"}${e}`)(n)),s&&(this._sessionChannel=s),o&&(null==(r=(t=this.logger).setLevel)||r.call(t,o)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return Dr(e)?e.jti:e.signature}}get logger(){return hr()}get connecting(){var e;return 0===(null==(e=this._socket)?void 0:e.readyState)}get connected(){var e;return 1===(null==(e=this._socket)?void 0:e.readyState)}get closing(){var e;return 2===(null==(e=this._socket)?void 0:e.readyState)}get closed(){return!this._socket||3===this._socket.readyState}get status(){return this._status}get idle(){return"idle"===this._status}get ready(){return!Boolean(this.idle||!this.connected)}set token(e){this.options.token=e}connect(){if(!(null==this?void 0:this.WebSocketConstructor))throw new Error("Missing WebSocketConstructor");if(!(null==this?void 0:this.CloseEventConstructor))throw new Error("Missing CloseEventConstructor");this._clearTimers(),this.connecting||this.connected?this.logger.warn("Session already connected."):(this._removeSocketListeners(),this.destroySocket(),this._clearCheckPingTimer(),this._socket=this._createSocket(),this._addSocketListeners())}_createSocket(){return new this.WebSocketConstructor(this._host)}destroySocket(){this._socket&&(this._socket.close(),this._socket=null)}_addSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to add listeners");this._removeSocketListeners(),this._socket.addEventListener("open",this.wsOpenHandler),this._socket.addEventListener("close",this.wsCloseHandler),this._socket.addEventListener("error",this.wsErrorHandler),this._socket.addEventListener("message",this._onSocketMessage)}_removeSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to remove listeners");this._socket.removeEventListener("open",this.wsOpenHandler),this._socket.removeEventListener("close",this.wsCloseHandler),this._socket.removeEventListener("error",this.wsErrorHandler),this._socket.removeEventListener("message",this._onSocketMessage)}async disconnect(){this._socket&&!this.closing?(this._clearCheckPingTimer(),this._requests.clear(),this._closeConnection("disconnected"),this.dispatch(ln())):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),Ir(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this.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(Ur(t))}authError(e){this._removeSocketListeners(),this.dispatch(sn({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(an())}catch(e){if(e===this._swConnectError||e===this._executeConnectionClosed)return void this.logger.debug("Invalid connect or connection closed. Waiting for retry.");this.logger.error("Auth Error",e),this.authError(e)}}_onSocketError(e){this.logger.debug("_onSocketError",e)}_onSocketClose(e){this.logger.debug("_onSocketClose",e.type,e.code,e.reason),"disconnected"!==this._status&&(this._status="reconnecting",this.dispatch(hn()),this._clearTimers(),this._clearPendingRequests(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_clearPendingRequests(){this.logger.debug("_clearPendingRequests",this._requests.size),this._requests.forEach((({reject:e})=>{e(this._executeConnectionClosed)}))}_onSocketMessage(e){const t=this.decode(e.data);if(this.logger.wsTraffic({type:"recv",payload:t}),(e=>!(e=>Boolean(e.method))(e))(t)){const e=this._requests.get(t.id);if(e){const{rpcRequest:r,resolve:n,reject:o}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:n}=e;return n?{error:n}:"signalwire.connect"===t.method?{result:r}:vr(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,Wr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(dn(t))}var r}dispatch(e){if(!this._sessionChannel)throw new Error("Session channel does not exist");this._sessionChannel.put(e)}_relayProtocolIsValid(){var e;return this.signature&&(null==(e=null==this?void 0:this.relayProtocol)?void 0:e.split("_")[1])===this.signature}encode(e){return JSON.stringify(e)}decode(e){return(e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}})(e)}async onSwAuthorizationState(e){this.persistSwAuthorizationState(e)}async retrieveSwAuthorizationState(){return""}async persistSwAuthorizationState(e){}_send(e){this.logger.wsTraffic({type:"send",payload:e}),this._socket.send(this.encode(e))}_addToExecuteQueue(e){this.logger.warn("Request queued waiting for session to reconnect",e),this._executeQueue.add(e)}_flushExecuteQueue(){if(this._executeQueue.size){if(!this.ready)return this.logger.warn("Session not ready to flush the queue."),void this._closeConnection("reconnecting");this.logger.debug(`${this._executeQueue.size} messages to flush`),this._executeQueue.forEach((e=>{this._send(e),this._executeQueue.delete(e)})),this._executeQueue.clear()}}_clearCheckPingTimer(){clearTimeout(this._checkPingTimer)}async _pingHandler(e){var t,r,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,Wr({id:r,result:{timestamp:n||Date.now()/1e3}})))}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection"),this._status=e,this.dispatch(Cn.authStatus("disconnected"===e?"unauthorized":"unknown")),this.destroySocket(),"reconnecting"===this._status&&this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"}))}},In=class extends Pn{constructor(e){super(e),this.options=e,Yt(this,"_expiredDiffSeconds",0),Yt(this,"_refreshTokenNotificationDiff",120),Yt(this,"_checkTokenExpirationDelay",2e4),Yt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e;if(!(null==this?void 0:this._rpcConnectResult))return 0;const{authorization:t}=this._rpcConnectResult,r=null!=(e=Dr(t)?t.fabric_subscriber.expires_at:null==t?void 0:t.expires_at)?e:0;if("string"==typeof r){const e=Date.parse(r);if(!isNaN(e))return Math.floor(e/1e3)}return r}get expiresIn(){const e=Math.floor(Date.now()/1e3);return this.expiresAt-e}get expired(){return this.expiresAt>0&&this.expiresIn<=this._expiredDiffSeconds}async authenticate(){const e={agent:this.agent,version:this.connectVersion,authentication:{jwt_token:this.options.token}};if(this._relayProtocolIsValid())e.protocol=this.relayProtocol;else{const t=await this.retrieveRelayProtocol();t&&(e.protocol=t)}if(e.protocol){const t=await this.retrieveSwAuthorizationState();t&&(e.authorization_state=t)}try{this._rpcConnectResult=await this.execute(Ur(e)),await this.persistRelayProtocol(),this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,Nr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}_checkTokenExpiration(){this.expiresAt&&(this.expiresIn<=this._refreshTokenNotificationDiff&&(this.dispatch(cn()),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)))}},Mn={};Gt(Mn,{authErrorAction:()=>sn,authExpiringAction:()=>cn,authSuccessAction:()=>an,compoundEventAttachAction:()=>bn,configureStore:()=>no,connect:()=>ro,createAction:()=>Yr,createCatchableSaga:()=>Nn,createRestartableSaga:()=>Ln,destroyAction:()=>nn,eventChannel:()=>ut,getCustomSagaActionType:()=>yn,initAction:()=>rn,makeCustomSagaAction:()=>vn,reauthAction:()=>on,sessionAuthErrorAction:()=>pn,sessionConnectedAction:()=>un,sessionDisconnectedAction:()=>ln,sessionExpiringAction:()=>mn,sessionForceCloseAction:()=>gn,sessionReconnectingAction:()=>hn,socketMessageAction:()=>dn});var Rn=_n({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Kt(qt({},e),t.id in e.byId?{byId:Kt(qt({},e.byId),{[t.id]:qt(qt({},e.byId[t.id]),t)})}:{byId:Kt(qt({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>Kt(qt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,n])=>(t.ids.includes(r)||(e[r]=n),e)),{})})}}),{actions:xn,reducer:An}=Rn,On=(0,Xr.combineReducers)({components:An,session:En}),jn={};Gt(jn,{createCatchableSaga:()=>Nn,createRestartableSaga:()=>Ln,eventChannel:()=>ut});var Ln=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];var o;o=ze.apply(void 0,[e].concat(r)),Ve(De,X({},o.payload,{detached:!0}))}((function*(){for(;;)try{hr().debug("Run a restartable saga"),yield Fe(e),hr().debug("One of the restartable saga has ended. Restarting..")}catch(e){hr().error("Restartable Saga Error",e)}}))},Dn=e=>hr().error("Catchable Saga Error",e),Nn=(e,t=Dn)=>function*(...r){try{yield Fe(e,...r)}catch(e){t(e)}},Wn=e=>gr(null==e?void 0:e.event_type),Vn=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},Un=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*$n({sessionChannel:e,pubSubChannel:t,swEventChannel:r,session:n}){function*o(e){switch(e.event_type){case"video.room.audience_count":return void(yield $e(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 $e(t,{type:`video.member.talking.${n}`,payload:e.params});const o=r.talking?"start":"stop";yield $e(t,{type:`video.member.talking.${o}`,payload:e.params})}break}}yield $e(t,{type:e.event_type,payload:e.params})}function*s(e){yield $e(r,kr(e)),Wn(e)||(Un(e)?n.onSwAuthorizationState(e.params.authorization_state):Vn(e)?yield ze(o,e):yield $e({type:e.event_type,payload:e}))}const i=Nn((function*(e){if(e.type!==dn.type)return void(yield $e(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return hr().debug(`Unknown message: ${t}`,e);yield ze(s,r)}),(e=>{hr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield ze(i,t)}}catch(e){hr().error("sessionChannelWorker error:",e)}finally{hr().debug("sessionChannelWorker finally")}}var Bn=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*Fn({pubSubChannel:e,emitter:t}){hr().debug("pubSubSaga [started]");try{for(;;){const r=yield Ue(e,"*"),{type:n,payload:o}=r;try{const e=Bn(r);Mr(n)&&t.emit(n,o),hr().trace("Emit:",_r({namespace:e,event:n})),t.emit(_r({namespace:e,event:n}),o)}catch(e){hr().error(e)}}}finally{(yield qe())&&hr().debug("pubSubSaga [cancelled]")}}var zn=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Yt(this,"name","AuthError"),Object.setPrototypeOf(this,zn.prototype)}},Hn=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Yt(this,"name","HttpError"),Object.setPrototypeOf(this,Hn.prototype)}};function*qn({initSession:e,userOptions:t,channels:r}){var n;const o=e(),s=r.pubSubChannel,i=r.swEventChannel,a=r.sessionChannel;let c=[];if(null==(n=t.workers)?void 0:n.length)try{const e=t.workers.map((e=>Fe(Ln(e))));c=yield function(e){var t=Ve(je,e);return t.combinator=!0,t}(e)}catch(e){hr().error("Error running custom workers",e)}yield ze($n,{session:o,sessionChannel:a,pubSubChannel:s,swEventChannel:i});const d=yield ze(Fn,{pubSubChannel:s,emitter:t.emitter}),u=yield ze(Qn,{session:o,sessionChannel:a,pubSubChannel:s,userOptions:t});o.connect(),yield Ue(nn.type),d.cancel(),u.cancel(),c.forEach((e=>e.cancel())),o.disconnect()}function*Kn({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Fe(e.reauthenticate),yield $e(Cn.connected(e.rpcConnectResult)),yield $e(r,un()))}catch(t){hr().error("Reauthenticate Error",t),e.authError(t)}}function*Qn(e){hr().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield Ue([an.type,sn.type,cn.type,on.type,hn.type,ln.type,gn.type]);switch(hr().debug("sessionStatusWatcher",t.type,t.payload),t.type){case an.type:{const{session:t,pubSubChannel:r}=e;yield $e(Cn.connected(t.rpcConnectResult)),yield $e(r,un());break}case sn.type:yield ze(Gn,Kt(qt({},e),{action:t}));break;case cn.type:yield $e(e.pubSubChannel,mn());break;case on.type:yield ze(Kn,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case hn.type:yield $e(e.pubSubChannel,hn());break;case ln.type:yield $e(e.pubSubChannel,ln()),yield $e(nn());break;case gn.type:e.session.forceClose()}}}finally{(yield qe())&&hr().debug("sessionStatusWatcher [cancelled]")}}function*Gn(e){hr().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:n}=r.payload,o=n?new zn(n.code,n.message):new Error("Unauthorized");yield $e(t,pn(o))}finally{(yield qe())&&hr().debug("sessionAuthErrorSaga [cancelled]")}}var Jn={};Gt(Jn,{getAuthError:()=>eo,getAuthState:()=>to,getAuthStatus:()=>Zn,getIceServers:()=>Xn,getSession:()=>Yn});var Xn=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Yn=e=>e.session,Zn=({session:e})=>e.authStatus,eo=({session:e})=>e.authError,to=({session:e})=>e.authState,ro=e=>{const{sessionListeners:t={},store:r,Component:n,customSagas:o=[]}=e,s=Object.keys(t);return e=>{const i=new n(Kt(qt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),n=Yn(e);for(const e of s){if(!1===c)return;const r=`session.${e}`,o=a.get(r),s=n[e];if(void 0!==s&&o!==s){a.set(r,s);const o=t[e];"string"==typeof o?i[o](n):"function"==typeof o&&o(n)}}})),u=null==o?void 0:o.map((e=>r.runSaga(e,{instance:i,runSaga:r.runSaga})));return i.destroyer=()=>{c=!1,d(),a.clear(),(null==u?void 0:u.length)&&u.forEach((e=>e.cancel()))},i}};Xt(Mn,Xr);var no=e=>{var t;const{userOptions:r,SessionConstructor:n,preloadedState:o={},runSagaMiddleware:s=!0}=e,i=jt(),a=lt(),c=lt(),d=dt(),u={pubSubChannel:a,swEventChannel:c,sessionChannel:d},l=tn({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:On,preloadedState:o,middleware:e=>e().concat(i)});let h;const p=()=>(h||hr().warn("Custom worker started without the session"),h);if(s){const e=(e=>function*({userOptions:t,channels:r}){var n;for(t.logger&&(ar=t.logger),t.debug&&(e=>{null!=e?Object.assign(dr,e):dr={}})(t.debug);;){const o=yield Ue([rn.type,on.type]);(null==(n=null==o?void 0:o.payload)?void 0:n.token)&&(t.token=o.payload.token);try{yield Fe(qn,Kt(qt({},e),{userOptions:t,channels:r}))}catch(e){hr().error("RootSaga Error:",e)}finally{(yield qe())&&hr().debug("rootSaga [cancelled]"),hr().debug("Reboot rootSaga")}}})({initSession:()=>(h=new n(Kt(qt({},r),{sessionChannel:d})),h)});i.run(e,{userOptions:r,channels:u})}return Kt(qt({},l),{runSaga:(e,t)=>i.run(e,Kt(qt({},t),{channels:u,getSession:p})),channels:u})},oo=function*(e){const{initialState:t,onDone:r,onFail:n,getSession:o}=e,{requestId:s,method:i,params:a}=t,c=o();if(!c){const e=new Error("Session does not exist!");return hr().error(e),void(null==n||n(e))}try{const e=(({method:e,params:t})=>Nr({method:e,params:t}))({id:s,method:i,params:a}),t=yield Fe(c.execute,e);null==r||r(t)}catch(e){hr().warn("Execute error: ",e),null==n||n(e)}},so=e=>e,io=Symbol("BaseComponent"),ao=class{constructor(e){this.options=e,Yt(this,"__sw_symbol",io),Yt(this,"uuid",w()),Yt(this,"_eventsPrefix",""),Yt(this,"_eventsRegisterQueue",new Set),Yt(this,"_eventsEmitQueue",new Set),Yt(this,"_eventsNamespace"),Yt(this,"_eventsTransformsCache",new Map),Yt(this,"_customSagaTriggers",new Map),Yt(this,"_destroyer"),Yt(this,"_emitterTransforms",new Map),Yt(this,"_emitterListenersCache",new Map),Yt(this,"_trackedEvents",[]),Yt(this,"_runningWorkers",[]),Yt(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(bn({compoundEvents:r,event:t,namespace:this._eventsNamespace})),r.forEach((e=>{"string"==typeof e&&this._trackEvent(e)})))}_getNamespacedEvent(e){let t=this._eventsNamespace;return"string"==typeof e&&jr(e)&&(t=this.__uuid),_r({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||Rr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return hr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get 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=Er({instance:o,payload:r,transformedPayload:i,transform:n}),n.afterCreateHook&&n.afterCreateHook(s),t(s)}}_parseNestedFields(e,t,r=(e=>e),n=undefined){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(!Tr.has(e.type)){const r=e.instanceFactory(t);return Tr.set(e.type,r),r}return Tr.get(e.type)})({transform:e,payload:t}),n=e.payloadTransform(t);return Er({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 Or(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=so,transformResolve:n=so,transformReject:o=so}={transformParams:so,transformResolve:so,transformReject:so}){return new Promise(((s,i)=>{const a=w();this.runWorker("executeActionWorker",{worker:oo,onDone:e=>s(n(e)),onFail:e=>i(o(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const n=w();this._customSagaTriggers.set(n,{resolve:t,reject:r}),this.store.dispatch(qt({dispatchId:n},vn(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())}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 Zn(this.store.getState())}get _sessionAuthState(){return to(this.store.getState())}_waitUntilSessionAuthorized(){switch(Zn(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=Zn(this.store.getState()),o=eo(this.store.getState());if("authorized"===n)e(this),r();else if("unauthorized"===n){const e=o?new zn(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?jr(e):!jr(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){return this._workers.has(e)?hr().warn(`[runWorker] Worker with name ${e} has already been registerd.`):this._setWorker(e,t),this._attachWorker(e,t)}_setWorker(e,t){this._workers.set(e,t)}_attachWorker(e,t){var r=t,{worker:n}=r,o=Qt(r,["worker"]);const s=this.store.runSaga(n,qt({instance:this,runSaga:this.store.runSaga},o));return this._runningWorkers.push(s),this._workers.delete(e),s}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},co=class extends ao{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=Zn(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(rn()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(nn())}},uo=class extends ao{constructor(e){super(e),this.options=e,Yt(this,"subscribeMethod","signalwire.subscribe"),Yt(this,"subscribeParams",{}),Yt(this,"_latestExecuteParams"),this.applyEmitterTransforms({local:!0});const t=()=>{this._latestExecuteParams=void 0};super.on("session.connected",t),super.on("session.disconnected",t),super.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:Kt(qt({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return this.applyEmitterTransforms(),await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},lo={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(lo).map((e=>`${tr}.member.updated.${e}`));var ho=br(lo);Object.keys(ho).map((e=>`member.updated.${e}`));var po={};Gt(po,{getComponent:()=>mo,getComponentsById:()=>go,getComponentsToCleanup:()=>fo});var mo=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},go=({components:e})=>e.byId,fo=e=>{const t=go(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},vo={};Gt(vo,{RoomSessionPlaybackAPI:()=>is,RoomSessionRecordingAPI:()=>os,RoomSessionStreamAPI:()=>cs,audioMuteMember:()=>Vo,audioUnmuteMember:()=>Uo,createRoomSessionPlaybackObject:()=>as,createRoomSessionRecordingObject:()=>ss,createRoomSessionStreamObject:()=>ds,deafMember:()=>Fo,deleteMemberMeta:()=>ns,deleteMeta:()=>Do,demote:()=>Jo,getLayouts:()=>_o,getMemberMeta:()=>es,getMembers:()=>wo,getMeta:()=>Oo,getPlaybacks:()=>Ro,getRecordings:()=>Io,getStreams:()=>No,hideVideoMuted:()=>Eo,play:()=>xo,promote:()=>Go,removeAllMembers:()=>Zo,removeMember:()=>Yo,setDeaf:()=>Ho,setHideVideoMuted:()=>Po,setInputSensitivityMember:()=>Qo,setInputVolumeMember:()=>qo,setLayout:()=>ko,setMemberMeta:()=>ts,setMemberPosition:()=>Xo,setMeta:()=>jo,setOutputVolumeMember:()=>Ko,setPositions:()=>Co,showVideoMuted:()=>To,startRecording:()=>Mo,startStream:()=>Wo,undeafMember:()=>zo,updateMemberMeta:()=>rs,updateMeta:()=>Lo,videoMuteMember:()=>$o,videoUnmuteMember:()=>Bo});var yo=()=>{},bo=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:qt({room_session_id:this.roomSessionId},r)},t)}}),So=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Qt(n,["memberId"]);return this.execute({method:e,params:qt({room_session_id:this.roomSessionId,member_id:o||this.memberId},s)},t)}}),_o=bo("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),wo=bo("video.members.get",{transformResolve:e=>({members:e.members})}),ko=bo("video.set_layout",{transformResolve:yo}),Co=bo("video.set_position",{transformResolve:yo}),Eo=bo("video.hide_video_muted",{transformResolve:yo}),To=bo("video.show_video_muted",{transformResolve:yo}),Po={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:yo})}},Io={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.list"),r);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.list"),r),t(e)}}))}},Mo={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.start"),r);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.start"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.start"),r),t(e)}}))}},Ro={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.playback.list"),r);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.playback.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.list"),r),t(e)}}))}},xo={value:function(e){var t=e,{seekPosition:r,currentTimecode:n}=t,o=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{const s=t=>{e(t)};this.on(Lr("video.playback.start"),s);try{const e=r||n,t=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:e},o)});this.emit(Lr("video.playback.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.start"),s),t(e)}}))}},Ao=e=>bo(e,{transformResolve:yo,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Qt(t,["room_session_id"])}}}),Oo=bo("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),jo=Ao("video.set_meta"),Lo=Ao("video.update_meta"),Do={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},No={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.stream.list"),r);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.stream.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.list"),r),t(e)}}))}},Wo={value:function(e){return new Promise((async(t,r)=>{const n=e=>{t(e)};this.on(Lr("video.stream.start"),n);try{const t=await this.execute({method:"video.stream.start",params:qt({room_session_id:this.roomSessionId},e)});this.emit(Lr("video.stream.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.start"),n),r(e)}}))}},Vo=So("video.member.audio_mute",{transformResolve:yo}),Uo=So("video.member.audio_unmute",{transformResolve:yo}),$o=So("video.member.video_mute",{transformResolve:yo}),Bo=So("video.member.video_unmute",{transformResolve:yo}),Fo=So("video.member.deaf",{transformResolve:yo}),zo=So("video.member.undeaf",{transformResolve:yo}),Ho={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:yo})}},qo=So("video.member.set_input_volume",{transformResolve:yo}),Ko=So("video.member.set_output_volume",{transformResolve:yo}),Qo=So("video.member.set_input_sensitivity",{transformResolve:yo}),Go={value:function(e){var t=e,{memberId:r,mediaAllowed:n,joinAudioMuted:o,joinVideoMuted:s}=t,i=Qt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:qt({room_session_id:this.roomSessionId,member_id:r,media_allowed:n,join_audio_muted:o,join_video_muted:s},i)},{transformResolve:yo})}},Jo={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:yo})}},Xo=So("video.member.set_position",{transformResolve:yo}),Yo={value:function(e){var t=e,{memberId:r}=t,n=Qt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:qt({room_session_id:this.roomSessionId,member_id:r},n)},{transformResolve:yo})}},Zo={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:yo})}},es=So("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ts=So("video.member.set_meta",{transformResolve:yo}),rs=So("video.member.update_meta",{transformResolve:yo}),ns=So("video.member.delete_meta",{transformResolve:yo}),os=class extends ao{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")}})}},ss=e=>ro({store:e.store,Component:os})(e),is=class extends ao{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)}})}},as=e=>ro({store:e.store,Component:is})(e),cs=class extends ao{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},ds=e=>ro({store:e.store,Component:cs})(e),us={};Gt(us,{BaseChatAPI:()=>Rs,BaseChatConsumer:()=>Ms,ChatMember:()=>Ts,ChatMessage:()=>Ps,createBaseChatObject:()=>xs,getMemberState:()=>bs,getMembers:()=>fs,getMessages:()=>gs,publish:()=>ms,setMemberState:()=>ys});var ls=()=>{},hs=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),ps=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Qt(n,["memberId"]);return this.execute({method:e,params:qt({member_id:o},s)},t)}}),ms=hs("chat.publish",{transformResolve:ls}),gs=hs("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>br(e))),cursor:e.cursor})}),fs=hs("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>br(e)))})}),vs=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return Kt(qt({},e),{channels:t})},ys=ps("chat.member.set_state",{transformResolve:ls,transformParams:vs}),bs=ps("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:vs}),Ss={};Gt(Ss,{BasePubSubConsumer:()=>Cs,PubSubMessage:()=>_s,createBasePubSubObject:()=>Es});var _s=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}},ws=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ue((e=>e.type.startsWith(`${nr}.`)));t.type===`${nr}.channel.message`?yield $e(e,{type:`${nr}.message`,payload:t.payload}):hr().debug("[pubSubWorker] Unrecognized Action",t)}},ks=e=>e.map((e=>({name:e}))),Cs=class extends uo{constructor(e){super(e),Yt(this,"_eventsPrefix",nr),Yt(this,"subscribeMethod",`${nr}.subscribe`),this._attachListeners(""),this.runWorker("pubSub",{worker:ws})}getEmitterTransforms(){return new Map([[["message"],{type:"pubSubMessage",instanceFactory:()=>new _s({}),payloadTransform:e=>{const{channel:t,message:r}=e.params,n=Qt(r,["member"]);return br(Kt(qt({},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:ks(r)}}_setSubscribeParams(e){this.subscribeParams=qt(qt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return qt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return qt({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const n=this.getSubscriptions();if(n.length>0){const e={method:`${nr}.unsubscribe`,params:Kt(qt({},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(Jr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${nr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(to);return e&&"channels"in e&&e.channels?e.channels:{}}},Es=e=>ro({store:e.store,Component:Cs})(e),Ts=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:{}}},Ps=class extends _s{get member(){return this.payload.member}},Is=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ue((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 $e(e,t);break;default:hr().debug("[chatWorker] Unrecognized Action",t)}}},Ms=class extends Cs{constructor(e){super(e),Yt(this,"_eventsPrefix",rr),Yt(this,"subscribeMethod",`${rr}.subscribe`),this.runWorker("chat",{worker:Is})}getEmitterTransforms(){return new Map([[["message"],{type:"chatMessage",instanceFactory:()=>new Ps({}),payloadTransform:e=>{const{channel:t,message:r}=e.params;return br(Kt(qt({},r),{channel:t}))}}],[["member.joined","member.left","member.updated"],{type:"chatMember",instanceFactory:e=>{const{member:t}=e.params;return new Ts(br(t))},payloadTransform:e=>{const{member:t}=e.params;return br(t)}}]])}},Rs=Cr(Ms,{publish:ms,getMembers:fs,getMessages:gs,setMemberState:ys,getMemberState:bs}),xs=e=>ro({store:e.store,Component:Rs})(e),As={};function*Os(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)?(Ns({memberList:r,memberId:n,currentPosition:e.position}),o[n]=!0):o[n]=!1}));for(const[e,t]of r)if(o[e])yield $e(n,{type:"video.member.updated",payload:t});else if(void 0===o[e]){const t=Ns({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield $e(n,{type:"video.member.updated",payload:t})}}function*js({action:e,channels:t,memberList:r}){var n,o;const s=e.payload.member.id,i=Ns({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=Kt(qt({},i),{member:qt(qt({},i.member),e.payload.member)});r.set(s,c);for(const r of a){const n=`${e.type}.${r}`;yield $e(t.pubSubChannel,{type:n,payload:c})}yield $e(t.pubSubChannel,{type:e.type,payload:c})}Gt(As,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Ls,memberPositionWorker:()=>Ds,memberUpdatedWorker:()=>js});var Ls=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Ds=function*({instance:e,channels:t,initialState:r,getSession:n}){if(!r)return;const{swEventChannel:o}=t;let s=Ws(r);const i=e=>{s.has(e.member.id)||s.set(e.member.id,e)};for(;;){const r=yield Ue(o,(t=>("video.member.updated"===t.type||"video.layout.changed"===t.type||"video.member.joined"===t.type||"video.member.left"===t.type)&&Bn(t)===e._eventsNamespace));switch(r.type){case"video.member.updated":i(r.payload),yield ze(js,{action:r,channels:t,memberList:s,instance:e,getSession:n});break;case"video.member.joined":i(r.payload);break;case"video.member.left":s.delete(r.payload.member.id);break;case"video.layout.changed":yield ze(Os,{action:r,channels:t,memberList:s,instance:e})}}},Ns=({memberList:e,memberId:t,currentPosition:r})=>{const n=e.get(t);if(!n)return;if(!r)return n;const o=Kt(qt({},n),{member:Kt(qt({},null==n?void 0:n.member),{current_position:r})});return e.set(t,o),o},Ws=e=>{const t=e.room_session.members,r=new Map;return t.forEach((t=>{r.set(t.id,{room_id:e.room_session.room_id,room_session_id:e.room_session.id,member:t})})),r};Gt({},{configureFullStack:()=>Fs,configureJestStore:()=>Bs,createMockedLogger:()=>$s,createPubSubChannel:()=>qs,createSessionChannel:()=>Qs,createSwEventChannel:()=>Ks,rpcConnectResultVRT:()=>Hs,wait:()=>zs});var Vs="8f0a119a-cda7-4497-a47d-c81493b824d4",Us="<VRT>",$s=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),Bs=e=>no(qt({userOptions:{project:Vs,token:Us,devTools:!1,emitter:new Dt},SessionConstructor:Pn,runSagaMiddleware:!1},e)),Fs=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Dt,r=no({userOptions:{project:Vs,token:Us,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Jr.initAction()),r.dispatch(Jr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Jr.destroyAction())}},zs=e=>new Promise((t=>{setTimeout(t,e)})),Hs={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",project_id:"8f0a119a-cda7-4497-a47d-c81493b824d4",project:"8f0a119a-cda7-4497-a47d-c81493b824d4",scopes:["video"],scope_id:"26675883-8499-4ee9-85eb-691c4aa209f8",resource:"9c80f1e8-9430-4070-a043-937eb3a96b38",join_as:"member",user_name:"Joe",room:{name:"lobby",display_name:"Lobby",scopes:["room.self.audio_mute","room.self.audio_unmute"],meta:{}},signature:"SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q",media_allowed:"all",audio_allowed:"both",video_allowed:"both",meta:{}},protocol:"signalwire_SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q_03e8c927-8ea3-4661-86d5-778c3e03296a_8f0a119a-cda7-4497-a47d-c81493b824d4",ice_servers:[{urls:"turn.swire.io:443",credential:"sFTwvi8ShXcYNOcyYjFy3ATIUpQ=",credentialType:"password",username:"1619521908:8f0a119a-cda7-4497-a47d-c81493b824d4"}]},qs=()=>lt(),Ks=()=>lt(),Qs=()=>dt(),Gs=qt({},Jn);const Js=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Xs=()=>{if(!Js())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},Ys=()=>Xs().getSupportedConstraints(),Zs=e=>e&&e instanceof MediaStream,ei=()=>"sinkId"in HTMLMediaElement.prototype,ti=async(e,t)=>{if(null!==e)if("string"==typeof t)if(ei())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?hr().error(`You need to use HTTPS for selecting audio output device: ${e}`):hr().error(`Error: ${e}`),e}else hr().warn("Browser does not support output device selection.");else hr().warn(`Invalid speaker deviceId: '${t}'`);else hr().warn("No HTMLMediaElement to attach the speakerId")},ri=e=>{var t;Zs(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(ni))},ni=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},oi={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},si=e=>{if(e)return oi[e]},ii=()=>Xs().enumerateDevices(),ai=async e=>{let t=await ii().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},ci=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 ai(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(hr().warn(`No ${e} devices to check for permissions!`),null)})(si(e))},di=()=>ci("camera"),ui=()=>ci("microphone"),li=()=>ci("speaker"),hi=async(e={audio:!0,video:!0})=>{var t;try{const t=Xs().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(ui()),(null==e?void 0:e.video)&&t.push(di()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Ir(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":hr().error(null!==(t=null==r?void 0:r.message)&&void 0!==t?t:"navigator.mediaDevices.getUserMedia doesn't seem to be supported.");break;case"NotFoundError":hr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":hr().error("Hardware error occurred at the operating system, browser, or Web page level which prevented access to the device. This could have been caused by having the Camera or Mic being user by another application.");break;case"OverconstrainedError":hr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),hr().info("List of available constraints:",Ys());break;case"NotAllowedError":hr().error("The user has mostly likely denied access to the device. This could also happen if the browsing context is insecure (using HTTP rather than HTTPS)");break;case"TypeError":0===Object.keys(e).length?hr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):hr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":hr().error("User media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.")}throw r}},pi=e=>Xs().getDisplayMedia(e),mi=async(e,t=!1)=>fi(e,t),gi=(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))}))},fi=async(e,t=!1)=>{let r;if(!1===await ci(e)){const t={audio:!(n=e)||"all"===n||"microphone"===n||"speaker"===n,video:!n||"all"===n||"camera"===n};r=await hi(t)}var n;const o=await ai(si(e));return r&&ri(r),!0===t?o:gi(o)},vi=async(e,t,r)=>{const n=await fi(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},yi=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},bi={camera:di,microphone:ui,speaker:li},Si=["camera","microphone","speaker"],_i=`Allowed targets are: '${Si.join("', '")}'`,wi={speaker:ei},ki=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:Si).filter((e=>!!Si.includes(e)||(hr().warn(`We'll ignore the "${e}" target as it is not allowed. ${_i}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${_i}.`);const n=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>bi[e]())))).reduce(((e,r,n)=>{var o;const s=t[n];return e[!(s in wi)||(null===(o=wi[s])||void 0===o?void 0:o.call(wi))?"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(", ")}. `:"";hr().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return hr().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new Dt,n=await ii(),o=null==t?void 0:t.reduce(((e,t)=>{const r=si(t);return r&&e.push(r),e}),[]);let s=gi(n,{excludeDefault:!0,targets:o});return Xs().addEventListener("devicechange",(async()=>{const e=await ii(),t=s,n=gi(e,{excludeDefault:!0,targets:o});s=n;const i=((e,t)=>{const r=yi(e),n=yi(e),o=[];hr().debug("[_getDeviceListDiff] <- oldDevices",e),hr().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(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},Ci=e=>"function"==typeof(null==e?void 0:e.getTracks),Ei=e=>{hr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return hi(e)},Ti=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:n=""}=e;if(r){const e=await vi(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 vi(s,i,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}};var Pi={exports:{}};!function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;t.push("rtp"===r?1:"rtcp"===r?2:r),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const n=e.type;return t.push("typ"),t.push(n),"host"!==n&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substring(14).split(" ")},t.parseRtpMap=function(e){let t=e.substring(9).split(" ");const r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){const t=e.substring(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let r;const n=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e<n.length;e++)r=n[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const n=[];Object.keys(e.parameters).forEach((t=>{n.push(void 0!==e.parameters[t]?t+"="+e.parameters[t]:t)})),t+="a=fmtp:"+r+" "+n.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},n=e.indexOf(":",t);return n>-1?(r.attribute=e.substring(t+1,n),r.value=e.substring(n+1)):r.attribute=e.substring(t+1),r},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const n=t.matchPrefix(e+r,"a=ice-ufrag:")[0],o=t.matchPrefix(e+r,"a=ice-pwd:")[0];return n&&o?{usernameFragment:n.substring(12),password:o.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=t.splitLines(e)[0].split(" ");r.profile=n[2];for(let o=3;o<n.length;o++){const s=n[o],i=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(i){const n=t.parseRtpMap(i),o=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(n.parameters=o.length?t.parseFmtp(o[0]):{},n.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").map(t.parseRtcpFb),r.codecs.push(n),n.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(n.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))}));const o=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{o.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let n="";n+="m="+e+" ",n+=r.codecs.length>0?"9":"0",n+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",n+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{n+=t.writeRtpMap(e),n+=t.writeFmtp(e),n+=t.writeRtcpFb(e)}));let o=0;return r.codecs.forEach((e=>{e.maxptime>o&&(o=e.maxptime)})),o>0&&(n+="a=maxptime:"+o+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{n+=t.writeExtmap(e)})),n},t.parseRtpEncodingParameters=function(e){const r=[],n=t.parseRtpParameters(e),o=-1!==n.fecMechanisms.indexOf("RED"),s=-1!==n.fecMechanisms.indexOf("ULPFEC"),i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=i.length>0&&i[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),n.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),r.push(t),o&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let u=t.matchPrefix(e,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substring(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=u}))),r},t.parseRtcpParameters=function(e){const r={},n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];n&&(r.cname=n.value,r.ssrc=n.ssrc);const o=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=o.length>0,r.compound=0===o.length;const s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.length>0,r},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let r;const n=t.matchPrefix(e,"a=msid:");if(1===n.length)return r=n[0].substring(7).split(" "),{stream:r[0],track:r[1]};const o=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return o.length>0?(r=o[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),n=t.matchPrefix(e,"a=max-message-size:");let o;n.length>0&&(o=parseInt(n[0].substring(19),10)),isNaN(o)&&(o=65536);const s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:r.fmt,maxMessageSize:o};const i=t.matchPrefix(e,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:o}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,n){let o;const s=void 0!==r?r:2;return o=e||t.generateSessionId(),"v=0\r\no="+(n||"thisisadapterortc")+" "+o+" "+s+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const n=t.splitLines(e);for(let e=0;e<n.length;e++)switch(n[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[e].substring(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substring(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const r=t.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(Pi);var Ii=Pi.exports;const Mi=e=>/^m=audio/.test(e),Ri=e=>/^m=video/.test(e),xi=e=>{const t="\r\n",r=e.split(t),n=r.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(n<0)return e;const o=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[n]),s=new RegExp(`a=fmtp:${o}`),i=r.findIndex((e=>s.test(e)));return i>=0?/stereo=1;/.test(r[i])||(r[i]+="; stereo=1; sprop-stereo=1"):r[n]+=`${t}a=fmtp:${o} stereo=1; sprop-stereo=1`,r.join(t)};class Ai{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this.needResume=!1,this._restartingIce=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0}get logger(){return hr()}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:this.call.iceServers,sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.instance.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(ni(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&&Zs(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("restartIceWithRelayOnly",e)}}restartIce(){(this._negotiating||this._restartingIce)&&this.logger.warn("Skip restartIce"),this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this.needResume?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this.needResume=!0,this.call._closeWSConnection())}resetNeedResume(){this.needResume=!1,this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void hr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);hr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,n=0,o=!0;const s=()=>{clearTimeout(t)},i=async()=>{var a,c;let d=0,u=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,n=null===(c=e.remoteVideoTrack)||void 0===c?void 0:c.id;t.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&e.trackIdentifier===r&&(hr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===n&&(hr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),u=e.packetsReceived)}))}catch(e){hr().warn("getStats error",e)}finally{d&&d<=r&&u&&u<=n?(hr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),hr().warn(`videoPacketsReceived: ${u} - previousVideoValue: ${n}`),e.triggerResume()):(r=null!=d?d:r,n=null!=u?u:n,s(),o&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>i()),e.watchMediaPacketsTimeout)))}};return{start:()=>{s(),i()},stop:()=>{o=!1,s()}}})(this),null===(e=this._mediaWatcher)||void 0===e||e.start()}async applyMediaConstraints(e,t){try{const r=this._getSenderByKind(e);if(!r||!r.track)return this.logger.info("No sender to apply constraints",e,t);if("live"===r.track.readyState){const 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(),this.logger.info("iceGatheringState",this.instance.iceGatheringState),"gathering"===this.instance.iceGatheringState&&(this._iceTimeout=setTimeout((()=>{this._onIceTimeout()}),this.options.maxIceGatheringTimeout))}catch(e){this.logger.error(`Error creating ${this.type}:`,e)}}onRemoteBye({code:e,message:t}){this._rejectStartMethod({code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}async start(){return new Promise((async(e,t)=>{this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let r=!1;if(this._localStream&&Zs(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(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this)}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return!(!this.localSdp||!this.hasIceServers)&&(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Ii.getMediaSections(e);for(const e of r)if(!Ii.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return hr().error("Error checking SDP",e),!1}})(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const e=this.instance.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.info('RTCPeer already with "iceTransportPolicy: relay"'),this._rejectStartMethod({code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"}),void this.call.setState("destroy");this.instance.setConfiguration(Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:n,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=xi(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=xi(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(Mi)<n.findIndex(Ri))return e;const o=e.split(r),s=o.findIndex(Mi),i=o.findIndex(Ri),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(Zs(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,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)}))}clearTimers(){this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}emitMediaConnected(){this.call.emit("media.connected")}}
6
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,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(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 a(e,r,n){return function(){typeof console!==t&&(i.call(this,r,n),this[e].apply(this,arguments))}}function c(n,i,c){return function(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)}(n)||a.apply(this,arguments)}function d(e,r,o){var s,a=this;r=null==r?"WARN":r;var d="loglevel";function u(){var e;if(typeof window!==t&&d){try{e=window.localStorage[d]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,n=r.indexOf(encodeURIComponent(d)+"=");-1!==n&&(e=/^([^;]+)/.exec(r.slice(n))[1])}catch(e){}return void 0===a.levels[e]&&(e=void 0),e}}"string"==typeof e?d+=":"+e:"symbol"==typeof e&&(d=void 0),a.name=e,a.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},a.methodFactory=o||c,a.getLevel=function(){return s},a.setLevel=function(r,o){if("string"==typeof r&&void 0!==a.levels[r.toUpperCase()]&&(r=a.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=a.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(s=r,!1!==o&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&d){try{return void(window.localStorage[d]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"="+r+";"}catch(e){}}}(r),i.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,u()||a.setLevel(e,!1)},a.resetLevel=function(){a.setLevel(r,!1),function(){if(typeof window!==t&&d){try{return void window.localStorage.removeItem(d)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},a.enableAll=function(e){a.setLevel(a.levels.TRACE,e)},a.disableAll=function(e){a.setLevel(a.levels.SILENT,e)};var l=u();null==l&&(l=r),a.setLevel(l,!1)}var u=new d,l={};u.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=l[e];return t||(t=l[e]=new d(e,u.getLevel(),u.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return u.noConflict=function(){return typeof window!==t&&window.log===u&&(window.log=h),u},u.getLoggers=function(){return l},u.default=u,u},e.exports?e.exports=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}var h="6ba7b810-9dad-11d1-80b4-00c04fd430c8",p="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function m(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=h,n.URL=p,n}function g(e){return 14+(e+64>>>9<<4)+1}function f(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function v(e,t,r,n,o,s){return f((i=f(f(t,e),f(n,s)))<<(a=o)|i>>>32-a,r);var i,a}function y(e,t,r,n,o,s,i){return v(t&r|~t&n,e,t,o,s,i)}function b(e,t,r,n,o,s,i){return v(t&n|r&~n,e,t,o,s,i)}function S(e,t,r,n,o,s,i){return v(t^r^n,e,t,o,s,i)}function _(e,t,r,n,o,s,i){return v(r^(t|~n),e,t,o,s,i)}function w(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 k(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function C(e,t){return e<<t|e>>>32-t}function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function T(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==E(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==E(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===E(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?P(Object(r),!0).forEach((function(t){T(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):P(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function M(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}m("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){for(var t=[],r=32*e.length,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[g(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=y(r,n,o,s,e[i],7,-680876936),s=y(s,r,n,o,e[i+1],12,-389564586),o=y(o,s,r,n,e[i+2],17,606105819),n=y(n,o,s,r,e[i+3],22,-1044525330),r=y(r,n,o,s,e[i+4],7,-176418897),s=y(s,r,n,o,e[i+5],12,1200080426),o=y(o,s,r,n,e[i+6],17,-1473231341),n=y(n,o,s,r,e[i+7],22,-45705983),r=y(r,n,o,s,e[i+8],7,1770035416),s=y(s,r,n,o,e[i+9],12,-1958414417),o=y(o,s,r,n,e[i+10],17,-42063),n=y(n,o,s,r,e[i+11],22,-1990404162),r=y(r,n,o,s,e[i+12],7,1804603682),s=y(s,r,n,o,e[i+13],12,-40341101),o=y(o,s,r,n,e[i+14],17,-1502002290),r=b(r,n=y(n,o,s,r,e[i+15],22,1236535329),o,s,e[i+1],5,-165796510),s=b(s,r,n,o,e[i+6],9,-1069501632),o=b(o,s,r,n,e[i+11],14,643717713),n=b(n,o,s,r,e[i],20,-373897302),r=b(r,n,o,s,e[i+5],5,-701558691),s=b(s,r,n,o,e[i+10],9,38016083),o=b(o,s,r,n,e[i+15],14,-660478335),n=b(n,o,s,r,e[i+4],20,-405537848),r=b(r,n,o,s,e[i+9],5,568446438),s=b(s,r,n,o,e[i+14],9,-1019803690),o=b(o,s,r,n,e[i+3],14,-187363961),n=b(n,o,s,r,e[i+8],20,1163531501),r=b(r,n,o,s,e[i+13],5,-1444681467),s=b(s,r,n,o,e[i+2],9,-51403784),o=b(o,s,r,n,e[i+7],14,1735328473),r=S(r,n=b(n,o,s,r,e[i+12],20,-1926607734),o,s,e[i+5],4,-378558),s=S(s,r,n,o,e[i+8],11,-2022574463),o=S(o,s,r,n,e[i+11],16,1839030562),n=S(n,o,s,r,e[i+14],23,-35309556),r=S(r,n,o,s,e[i+1],4,-1530992060),s=S(s,r,n,o,e[i+4],11,1272893353),o=S(o,s,r,n,e[i+7],16,-155497632),n=S(n,o,s,r,e[i+10],23,-1094730640),r=S(r,n,o,s,e[i+13],4,681279174),s=S(s,r,n,o,e[i],11,-358537222),o=S(o,s,r,n,e[i+3],16,-722521979),n=S(n,o,s,r,e[i+6],23,76029189),r=S(r,n,o,s,e[i+9],4,-640364487),s=S(s,r,n,o,e[i+12],11,-421815835),o=S(o,s,r,n,e[i+15],16,530742520),r=_(r,n=S(n,o,s,r,e[i+2],23,-995338651),o,s,e[i],6,-198630844),s=_(s,r,n,o,e[i+7],10,1126891415),o=_(o,s,r,n,e[i+14],15,-1416354905),n=_(n,o,s,r,e[i+5],21,-57434055),r=_(r,n,o,s,e[i+12],6,1700485571),s=_(s,r,n,o,e[i+3],10,-1894986606),o=_(o,s,r,n,e[i+10],15,-1051523),n=_(n,o,s,r,e[i+1],21,-2054922799),r=_(r,n,o,s,e[i+8],6,1873313359),s=_(s,r,n,o,e[i+15],10,-30611744),o=_(o,s,r,n,e[i+6],15,-1560198380),n=_(n,o,s,r,e[i+13],21,1309151649),r=_(r,n,o,s,e[i+4],6,-145523070),s=_(s,r,n,o,e[i+11],10,-1120210379),o=_(o,s,r,n,e[i+2],15,718787259),n=_(n,o,s,r,e[i+9],21,-343485551),r=f(r,a),n=f(n,c),o=f(o,d),s=f(s,u)}return[r,n,o,s]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(g(t)),n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))})),m("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var 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 p=16;p<80;++p)l[p]=C(l[p-3]^l[p-8]^l[p-14]^l[p-16],1);for(var m=r[0],g=r[1],f=r[2],v=r[3],y=r[4],b=0;b<80;++b){var S=Math.floor(b/20),_=C(m,5)+k(S,g,f,v)+y+t[S]+l[b]>>>0;y=v,v=f,f=C(g,30)>>>0,g=m,m=_}r[0]=r[0]+m>>>0,r[1]=r[1]+g>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+v>>>0,r[4]=r[4]+y>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var R="function"==typeof Symbol&&Symbol.observable||"@@observable",x=function(){return Math.random().toString(36).substring(7).split("").join(".")},A={INIT:"@@redux/INIT"+x(),REPLACE:"@@redux/REPLACE"+x(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+x()}};function O(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(M(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(M(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(M(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(M(3));return s}function l(e){if("function"!=typeof e)throw new Error(M(4));if(c)throw new Error(M(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(M(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),i=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(M(7));if(void 0===e.type)throw new Error(M(8));if(c)throw new Error(M(9));try{c=!0,s=o(s,e)}finally{c=!1}for(var t=i=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:A.INIT}),(n={dispatch:h,subscribe:l,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error(M(10));o=e,h({type:A.REPLACE})}})[R]=function(){var e,t=l;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(M(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[R]=function(){return this},e},n}function j(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:A.INIT}))throw new Error(M(12));if(void 0===r(void 0,{type:A.PROBE_UNKNOWN_ACTION()}))throw new Error(M(13))}))}(r)}catch(e){s=e}return function(e,t){if(void 0===e&&(e={}),s)throw s;for(var 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(M(14));o[c]=u,n=n||u!==d}return(n=n||i.length!==Object.keys(e).length)?o:e}}function L(e,t){return function(){return t(e.apply(this,arguments))}}function D(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function N(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),n=function(){throw new Error(M(15))},o={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},s=t.map((function(e){return e(o)}));return n=D.apply(void 0,s)(r.dispatch),I(I({},r),{},{dispatch:n})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:A,applyMiddleware:N,bindActionCreators:function(e,t){if("function"==typeof e)return L(e,t);if("object"!=typeof e||null===e)throw new Error(M(16));var r={};for(var n in e){var o=e[n];"function"==typeof o&&(r[n]=L(o,t))}return r},combineReducers:j,compose:D,createStore:O,legacy_createStore:O}),V=function(e){return"@@redux-saga/"+e},U=V("CANCEL_PROMISE"),$=V("CHANNEL_END"),B=V("IO"),F=V("MATCH"),z=V("MULTICAST"),H=V("SAGA_ACTION"),q=V("SELF_CANCELLATION"),K=V("TASK"),Q=V("TASK_CANCEL"),G=V("TERMINATE"),J=V("LOCATION");function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},X.apply(this,arguments)}var Y=function(e){return null==e},Z=function(e){return null!=e},ee=function(e){return"function"==typeof e},te=function(e){return"string"==typeof e},re=Array.isArray,ne=function(e){return e&&ee(e.then)},oe=function(e){return e&&ee(e.next)&&ee(e.throw)},se=function e(t){return t&&(te(t)||ce(t)||ee(t)||re(t)&&t.every(e))},ie=function(e){return e&&ee(e.take)&&ee(e.close)},ae=function(e){return ee(e)&&e.hasOwnProperty("toString")},ce=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},de=function(e){return ie(e)&&e[z]},ue=function(e){return function(){return!0}}(),le=function(){},he=function(e){return e},pe=function(e,t){X(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))},me=function(e,t){var r;return(r=[]).concat.apply(r,t.map(e))};function ge(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function fe(e){var t=!1;return function(){t||(t=!0,e())}}var ve=function(e){throw e},ye=function(e){return{value:e,done:!0}};function be(e,t,r){void 0===t&&(t=ve),void 0===r&&(r="iterator");var n={meta:{name:r},next:e,throw:t,return:ye,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(n[Symbol.iterator]=function(){return n}),n}function Se(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var _e=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},ke=function(e){return e===G},Ce=function(e){return e===Q},Ee=function(e){return ke(e)||Ce(e)};function Te(e,t){var r,n=Object.keys(e),o=n.length,s=0,i=re(e)?_e(o):{},a={};return n.forEach((function(e){var n=function(n,a){r||(a||Ee(n)?(t.cancel(),t(n,a)):(i[e]=n,++s===o&&(r=!0,t(i))))};n.cancel=le,a[e]=n})),t.cancel=function(){r||(r=!0,n.forEach((function(e){return a[e].cancel()})))},a}function Pe(e){return{name:e.name||"anonymous",location:Ie(e)}}function Ie(e){return e[J]}var Me={isEmpty:ue,put:le,take:le},Re=function(){return Me},xe=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),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}}(e)},Ae="TAKE",Oe="PUT",je="ALL",Le="CALL",De="FORK",Ne="SELECT",We="CANCELLED",Ve=function(e,t){var r;return(r={})[B]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function Ue(e,t){return void 0===e&&(e="*"),se(e)?(Z(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ve(Ae,{pattern:e})):de(e)&&Z(t)&&se(t)?Ve(Ae,{channel:e,pattern:t}):ie(e)?(Z(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ve(Ae,{channel:e})):void 0}function $e(e,t){return Y(t)&&(t=e,e=void 0),Ve(Oe,{channel:e,action:t})}function Be(e,t){var r,n=null;return ee(e)?r=e:(re(e)?(n=e[0],r=e[1]):(n=e.context,r=e.fn),n&&te(r)&&ee(n[r])&&(r=n[r])),{context:n,fn:r,args:t}}function Fe(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 Ve(Le,Be(e,r))}function ze(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 Ve(De,Be(e,r))}function He(e){void 0===e&&(e=he);for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Ve(Ne,{selector:e,args:r})}function qe(){return Ve(We,{})}var Ke=[],Qe=0;function Ge(e){try{Ye(),e()}finally{Ze()}}function Je(e){Ke.push(e),Qe||(Ye(),et())}function Xe(e){try{return Ye(),e()}finally{et()}}function Ye(){Qe++}function Ze(){Qe--}function et(){var e;for(Ze();!Qe&&void 0!==(e=Ke.shift());)Ge(e)}var tt=function(e){return function(t){return e.some((function(e){return it(e)(t)}))}},rt=function(e){return function(t){return e(t)}},nt=function(e){return function(t){return t.type===String(e)}},ot=function(e){return function(t){return t.type===e}},st=function(){return ue};function it(e){var t="*"===e?st:te(e)?nt:re(e)?tt:ae(e)?nt:ee(e)?rt:ce(e)?ot:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var at={type:$},ct=function(e){return e&&e.type===$};function dt(e){void 0===e&&(e=xe());var t=!1,r=[];return{take:function(n){t&&e.isEmpty()?n(at):e.isEmpty()?(r.push(n),n.cancel=function(){ge(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(at):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])(at)}}}}function ut(e,t){void 0===t&&(t=Re());var r,n=!1,o=dt(t),s=function(){n||(n=!0,ee(r)&&r(),o.close())};return r=fe(r=e((function(e){ct(e)?s():o.put(e)}))),n&&r(),{take:o.take,flush:o.flush,close:s}}function lt(){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(at)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(ct(e))s();else for(var o=r=n,i=0,a=o.length;i<a;i++){var c=o[i];c[F](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(at):(e[F]=r,o(),n.push(e),e.cancel=fe((function(){o(),ge(n,e)})))},e.close=s,e}function ht(){var e=lt(),t=e.put;return e.put=function(e){e[H]?t(e):Je((function(){t(e)}))},e}var pt=0,mt=1,gt=2,ft=3;function vt(e,t){var r=e[U];ee(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var yt,bt=0,St=function(){return++bt};function _t(e){e.isRunning()&&e.cancel()}var wt=((yt={})[Ae]=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):!ct(e)||i?r(e):r(G)};try{o.take(a,Z(s)?it(s):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},yt[Oe]=function(e,t,r){var n=t.channel,o=t.action,s=t.resolve;Je((function(){var t;try{t=(n?n.put:e.dispatch)(o)}catch(e){return void r(e,!0)}s&&ne(t)?vt(t,r):r(t)}))},yt[je]=function(e,t,r,n){var o=n.digestEffect,s=bt,i=Object.keys(t);if(0!==i.length){var a=Te(t,r);i.forEach((function(e){o(t[e],s,a[e],e)}))}else r(re(t)?[]:{})},yt.RACE=function(e,t,r,n){var o=n.digestEffect,s=bt,i=Object.keys(t),a=re(t)?_e(i.length):{},c={},d=!1;i.forEach((function(e){var t=function(t,n){d||(n||Ee(t)?(r.cancel(),r(t,n)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=le,c[e]=t})),r.cancel=function(){d||(d=!0,i.forEach((function(e){return c[e].cancel()})))},i.forEach((function(e){d||o(t[e],s,c[e],e)}))},yt[Le]=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(ne(c))return void vt(c,r);if(oe(c))return void At(e,c,a.context,bt,Pe(s),!1,r);r(c)}catch(e){r(e,!0)}},yt.CPS=function(e,t,r){var n=t.context,o=t.fn,s=t.args;try{var i=function(e,t){Y(e)?r(t):r(e,!0)};o.apply(n,s.concat(i)),i.cancel&&(r.cancel=i.cancel)}catch(e){r(e,!0)}},yt[De]=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(oe(o))return o;var s=!1;return be((function(e){return s?{value:e,done:!0}:(s=!0,{value:o,done:!ne(o)})}))}catch(e){return be((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Pe(t)}(a,o);Xe((function(){var t=At(e,a,i.context,bt,c,s,void 0);s?r(t):t.isRunning()?(i.queue.addTask(t),r(t)):t.isAborted()?i.queue.abort(t.error()):r(t)}))},yt.JOIN=function(e,t,r,n){var o=n.task,s=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&ge(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(re(t)){if(0===t.length)return void r([]);var i=Te(t,r);t.forEach((function(e,t){s(e,i[t])}))}else s(t,r)},yt.CANCEL=function(e,t,r,n){t===q?_t(n.task):re(t)?t.forEach(_t):_t(t),r()},yt[Ne]=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)}},yt.ACTION_CHANNEL=function(e,t,r){var n=t.pattern,o=dt(t.buffer),s=it(n),i=function t(r){ct(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)},yt[We]=function(e,t,r,n){r(n.task.isCancelled())},yt.FLUSH=function(e,t,r){t.flush(r)},yt.GET_CONTEXT=function(e,t,r,n){r(n.task.context[t])},yt.SET_CONTEXT=function(e,t,r,n){pe(n.task.context,t),r()},yt);function kt(e,t){return e+"?"+t}function Ct(e){var t=e.name,r=e.location;return r?t+" "+kt(r.fileName,r.lineNumber):t}function Et(e){var t=me((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var Tt=null,Pt=[],It=function(e){e.crashedEffect=Tt,Pt.push(e)},Mt=function(){Tt=null,Pt.length=0},Rt=function(e){Tt=e},xt=function(){var e,t=Pt[0],r=Pt.slice(1),n=t.crashedEffect?(e=Ie(t.crashedEffect))?e.code+" "+kt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+Ct(t.meta)+(n?" \n when executing effect "+n:"")].concat(r.map((function(e){return" created by "+Ct(e.meta)})),[Et(Pt)]).join("\n")};function At(e,t,r,n,o,s,i){var a=e.finalizeRunEffect((function(t,r,n){ne(t)?vt(t,n):oe(t)?At(e,t,d.context,r,o,!1,n):t&&t[B]?(0,wt[t.type])(e,t.payload,n,u):n(t)}));l.cancel=le;var c={meta:o,cancel:function(){c.status===pt&&(c.status=mt,l(Q))},status:pt},d=function(e,t,r,n,o,s,i){var a;void 0===i&&(i=le);var c,d,u=pt,l=null,h=[],p=Object.create(r),m=function(e,t,r){var n,o=[],s=!1;function i(e){h.push.apply(h,m.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){s||(ge(o,t),t.cont=le,c?i(a):(t===e&&(n=a),o.length||(s=!0,r(n))))}}function c(){s||(s=!0,o.forEach((function(e){e.cont=le,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=gt,It({meta:o,cancelledTasks:h}),f.isRoot){var n=xt();Mt(),e.onError(t,{sagaStack:n})}d=t,l&&l.reject(t)}else t===Q?u=mt:u!==mt&&(u=ft),c=t,l&&l.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[K]=!0,a.id=n,a.meta=o,a.isRoot=s,a.context=p,a.joiners=[],a.queue=m,a.cancel=function(){u===pt&&(u=mt,m.cancelAll(),g(Q,!1))},a.cont=i,a.end=g,a.setContext=function(e){pe(p,e)},a.toPromise=function(){return l||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),l=e,u===gt?l.reject(d):u!==pt&&l.resolve(c)),l.promise;var e},a.isRunning=function(){return u===pt},a.isCancelled=function(){return u===mt||u===pt&&t.status===mt},a.isAborted=function(){return u===gt},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,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),Mt()):Ce(e)?(c.status=mt,l.cancel(),o=ee(t.return)?t.return(Q):{done:!0,value:Q}):o=ke(e)?ee(t.return)?t.return():{done:!0}:t.next(e),o.done?(c.status!==mt&&(c.status=ft),c.cont(o.value)):h(o.value,n,l)}catch(e){if(c.status===mt)throw e;c.status=gt,c.cont(e,!0)}}function h(t,r,n,o){void 0===o&&(o="");var s,i=St();function c(r,o){s||(s=!0,n.cancel=le,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(i,r):e.sagaMonitor.effectResolved(i,r)),o&&Rt(t),n(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:i,parentEffectId:r,label:o,effect:t}),c.cancel=le,n.cancel=function(){s||(s=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(i))},a(t,i,c)}}function Ot(e,t){for(var r=e.channel,n=void 0===r?ht():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?Se:u,h=arguments.length,p=new Array(h>2?h-2:0),m=2;m<h;m++)p[m-2]=arguments[m];var g,f=t.apply(void 0,p),v=St();if(c&&(c.rootSagaStarted=c.rootSagaStarted||le,c.effectTriggered=c.effectTriggered||le,c.effectResolved=c.effectResolved||le,c.effectRejected=c.effectRejected||le,c.effectCancelled=c.effectCancelled||le,c.actionDispatched=c.actionDispatched||le,c.rootSagaStarted({effectId:v,saga:t,args:p})),d){var y=D.apply(void 0,d);g=function(e){return function(t,r,n){return y((function(t){return e(t,r,n)}))(t)}}}else g=he;var b={channel:n,dispatch:we(o),getState:s,sagaMonitor:c,onError:l,finalizeRunEffect:g};return Xe((function(){var e=At(b,f,a,v,Pe(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function jt(e){var t,r=void 0===e?{}:e,n=r.context,o=void 0===n?{}:n,s=r.channel,i=void 0===s?ht():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=Ot.bind(null,X({},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){pe(o,e)},d}var Lt={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,p=u.length;for(d=0;d<p;d++)switch(u[d].once&&this.removeListener(e,u[d].fn,void 0,!0),l){case 1:u[d].fn.call(u[d].context);break;case 2:u[d].fn.call(u[d].context,t);break;case 3:u[d].fn.call(u[d].context,t,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}(Lt);var Dt=Lt.exports,Nt=Object.defineProperty,Wt=Object.defineProperties,Vt=Object.getOwnPropertyDescriptor,Ut=Object.getOwnPropertyDescriptors,$t=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,Ft=Object.prototype.hasOwnProperty,zt=Object.prototype.propertyIsEnumerable,Ht=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qt=(e,t)=>{for(var r in t||(t={}))Ft.call(t,r)&&Ht(e,r,t[r]);if(Bt)for(var r of Bt(t))zt.call(t,r)&&Ht(e,r,t[r]);return e},Kt=(e,t)=>Wt(e,Ut(t)),Qt=(e,t)=>{var r={};for(var n in e)Ft.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&Bt)for(var n of Bt(e))t.indexOf(n)<0&&zt.call(e,n)&&(r[n]=e[n]);return r},Gt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of $t(t))Ft.call(e,o)||o===r||Nt(e,o,{get:()=>t[o],enumerable:!(n=Vt(t,o))||n.enumerable});return e},Xt=(e,t,r)=>(Jt(e,t,"default"),r&&Jt(r,t,"default")),Yt=(e,t,r)=>(Ht(e,"symbol"!=typeof t?t+"":t,r),r),Zt="__local__",er="__synthetic__",tr="video",rr="chat",nr="chat",or=["room.started","room.ended"].map((e=>`${tr}.${e}`)),sr=o.getLogger("signalwire"),ir=sr.methodFactory;sr.methodFactory=(e,t,r)=>{const n=ir(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),n.apply(void 0,e)}};var ar,cr=sr.getLevel();sr.setLevel(cr);var dr={},ur=()=>null!=ar?ar:sr,lr=({type:e,payload:t})=>{const r=ur(),{logWsTraffic:n}=dr||{};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")},hr=()=>{const e=ur();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?lr:Reflect.get(e,t,r)})},pr=/[A-Z]/g,mr=["webrtc.message"],gr=e=>mr.includes(e),fr=/^2[0-9][0-9]$/,vr=(e,t)=>{const{result:r={},error:n}=e;if(n)return{error:n};const{code:o,node_id:s,result:i=null}=r;return o&&!fr.test(o)?{error:r}:null===i?(t&&(r.node_id=t),{result:r}):i?i.jsonrpc?vr(i,s):{result:i}:{result:r}},yr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},br=(e,t=yr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,n])=>{const o=Sr(r);return e[o]="object"==typeof n&&n?Array.isArray(n)?t.propsToUpdateValue.includes(r)?n.map((e=>"string"==typeof e?Sr(e):br(e))):n:br(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}),{}),Sr=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,_r=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(pr,(e=>`_${e.toLowerCase()}`)))(e=wr({event:e,namespace:t}))),e),wr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,kr=e=>{const{event_type:t,params:r,node_id:n}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(gr(t)&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=n),{type:t,payload:e}}return{type:t,payload:r}},Cr=(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),Er=({instance:e,transform:t,payload:r,transformedPayload:n})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:n,transform:o})=>{const s=qt(Kt(qt({},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||("__sw_update_payload"===o?function(e){n=e}:"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}),Tr=new Map,Pr=/^(ws|wss):\/\//,Ir=(e,t,r)=>{let n=null;return Promise.race([e,new Promise(((e,o)=>n=setTimeout(o,t,r)))]).finally((()=>clearTimeout(n)))},Mr=e=>or.includes(e),Rr=e=>e.includes("session."),xr=["video.member.updated","video.member.talking"],Ar=["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"],Or=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Ar.includes(t)||(e=>e.includes(er))(t)||jr(t)||Rr(t)?null:xr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},jr=e=>e.includes(Zt),Lr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Zt),e)),[]).join(".")},Dr=e=>void 0!==e&&"jti"in e,Nr=e=>{var t;return qt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Wr=e=>qt({jsonrpc:"2.0"},e),Vr={major:3,minor:0,revision:0},Ur=e=>Nr({method:"signalwire.connect",params:qt({version:Vr},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"},Br=e=>{if(e.hasOwnProperty("dialogParams")){const t=Qt(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},Fr=e=>(t={})=>Nr({method:e,params:Br(t)}),zr=Fr("verto.invite"),Hr=Fr("verto.bye"),qr=Fr("verto.modify"),Kr=Fr("verto.info"),Qr=Fr("verto.pong"),Gr=(e,t)=>Wr({id:e,result:{method:t}}),Jr={};Gt(Jr,{authErrorAction:()=>sn,authExpiringAction:()=>cn,authSuccessAction:()=>an,compoundEventAttachAction:()=>bn,createAction:()=>Yr,destroyAction:()=>nn,getCustomSagaActionType:()=>yn,initAction:()=>rn,makeCustomSagaAction:()=>vn,reauthAction:()=>on,sessionAuthErrorAction:()=>pn,sessionConnectedAction:()=>un,sessionDisconnectedAction:()=>ln,sessionExpiringAction:()=>mn,sessionForceCloseAction:()=>gn,sessionReconnectingAction:()=>hn,socketMessageAction:()=>dn});var Xr={};function Yr(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return qt(qt({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}Gt(Xr,{configureStore:()=>tn,createAction:()=>Yr}),Xt(Xr,W);var Zr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?D:D.apply(null,arguments)},en=!0;function tn(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=j(r)}let c=n;"function"==typeof c&&(c=c(t));const d=N(...c);let u=D;o&&(u=Zr(qt({trace:!en},"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 rn=Yr("swSdk/init"),nn=Yr("swSdk/destroy"),on=Yr("swSdk/reauth"),sn=Yr("auth/error"),an=Yr("auth/success"),cn=Yr("auth/expiring"),dn=Yr("socket/message"),un=Yr("session.connected"),ln=Yr("session.disconnected"),hn=Yr("session.reconnecting"),pn=Yr("session.auth_error"),mn=Yr("session.expiring"),gn=Yr("session.forceClose"),fn=(e,t)=>`${t.type}/${e}`,vn=(e,t)=>Kt(qt({},t),{type:fn(e,t)}),yn=(e,t)=>fn(e,t),bn=Yr("compound_event:attach");function Sn(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 _n=({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?Sn(e.extraReducers):[e.extraReducers],s=qt(qt({},t),i);return function(e,t,r=[],n){let o,[s,i,a]="function"==typeof t?Sn(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?Yr(o,d):Yr(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(nn.type,(()=>t)),"function"==typeof n&&n(e)}});function wn(e){return[rn.type,on.type].includes(e.type)}var kn=_n({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,n;return Kt(qt({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(n=null==t?void 0:t.ice_servers)?n:[]})},authStatus:(e,{payload:t})=>Kt(qt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Kt(qt({},e),{authState:t})},extraReducers:e=>{e.addCase(sn.type,((e,{payload:t})=>Kt(qt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(wn,(e=>Kt(qt({},e),{authStatus:"authorizing"})))}}),{actions:Cn,reducer:En}=kn,Tn=Symbol("BaseSession"),Pn=class{constructor(e){var t,r;this.options=e,Yt(this,"__sw_symbol",Tn),Yt(this,"uuid",w()),Yt(this,"WebSocketConstructor"),Yt(this,"CloseEventConstructor"),Yt(this,"agent"),Yt(this,"connectVersion",Vr),Yt(this,"_rpcConnectResult"),Yt(this,"_requests",new Map),Yt(this,"_socket",null),Yt(this,"_host","wss://relay.signalwire.com"),Yt(this,"_executeTimeoutMs",1e4),Yt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Yt(this,"_executeQueue",new Set),Yt(this,"_swConnectError",Symbol.for("sw-connect-error")),Yt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Yt(this,"_checkPingDelay",15e3),Yt(this,"_checkPingTimer",null),Yt(this,"_reconnectTimer"),Yt(this,"_status","unknown"),Yt(this,"_sessionChannel"),Yt(this,"wsOpenHandler"),Yt(this,"wsCloseHandler"),Yt(this,"wsErrorHandler");const{host:n,logLevel:o="info",sessionChannel:s}=e;n&&(this._host=(e=>`${Pr.test(e)?"":"wss://"}${e}`)(n)),s&&(this._sessionChannel=s),o&&(null==(r=(t=this.logger).setLevel)||r.call(t,o)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return Dr(e)?e.jti:e.signature}}get logger(){return hr()}get connecting(){var e;return 0===(null==(e=this._socket)?void 0:e.readyState)}get connected(){var e;return 1===(null==(e=this._socket)?void 0:e.readyState)}get closing(){var e;return 2===(null==(e=this._socket)?void 0:e.readyState)}get closed(){return!this._socket||3===this._socket.readyState}get status(){return this._status}get idle(){return"idle"===this._status}get ready(){return!Boolean(this.idle||!this.connected)}set token(e){this.options.token=e}connect(){if(!(null==this?void 0:this.WebSocketConstructor))throw new Error("Missing WebSocketConstructor");if(!(null==this?void 0:this.CloseEventConstructor))throw new Error("Missing CloseEventConstructor");this._clearTimers(),this.connecting||this.connected?this.logger.warn("Session already connected."):(this._removeSocketListeners(),this.destroySocket(),this._clearCheckPingTimer(),this._socket=this._createSocket(),this._addSocketListeners())}_createSocket(){return new this.WebSocketConstructor(this._host)}destroySocket(){this._socket&&(this._socket.close(),this._socket=null)}_addSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to add listeners");this._removeSocketListeners(),this._socket.addEventListener("open",this.wsOpenHandler),this._socket.addEventListener("close",this.wsCloseHandler),this._socket.addEventListener("error",this.wsErrorHandler),this._socket.addEventListener("message",this._onSocketMessage)}_removeSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to remove listeners");this._socket.removeEventListener("open",this.wsOpenHandler),this._socket.removeEventListener("close",this.wsCloseHandler),this._socket.removeEventListener("error",this.wsErrorHandler),this._socket.removeEventListener("message",this._onSocketMessage)}async disconnect(){this._socket&&!this.closing?(this._status="disconnecting",this._checkCurrentStatus()):this.logger.debug("Session not connected or already in closing state.")}execute(e){if("disconnecting"===this._status)return this.logger.warn("Reject request because the session is disconnecting",e),Promise.reject({code:"400",message:"The SDK session is disconnecting"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),Ir(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this._checkCurrentStatus(),this.logger.error("Request Timeout",e),"disconnected"===this.status)return this.logger.debug("Request failed because the session is disconnected",this.status,this._socket);this._closeConnection("reconnecting")}))):(this._addToExecuteQueue(e),this.connect(),t)}async authenticate(){var e;const t={agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}};this._relayProtocolIsValid()&&(t.protocol=this.relayProtocol),(null==(e=this.options.contexts)?void 0:e.length)&&(t.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(Ur(t))}authError(e){this._removeSocketListeners(),this.dispatch(sn({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(an())}catch(e){if(e===this._swConnectError||e===this._executeConnectionClosed)return void this.logger.debug("Invalid connect or connection closed. Waiting for retry.");this.logger.error("Auth Error",e),this.authError(e)}}_onSocketError(e){this.logger.debug("_onSocketError",e)}_onSocketClose(e){this.logger.debug("_onSocketClose",e.type,e.code,e.reason),"disconnected"!==this._status&&(this._status="reconnecting",this.dispatch(hn()),this._clearTimers(),this._clearPendingRequests(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_clearPendingRequests(){this.logger.debug("_clearPendingRequests",this._requests.size),this._requests.forEach((({reject:e})=>{e(this._executeConnectionClosed)}))}_onSocketMessage(e){const t=this.decode(e.data);if(this.logger.wsTraffic({type:"recv",payload:t}),(e=>!(e=>Boolean(e.method))(e))(t)){const e=this._requests.get(t.id);if(e){const{rpcRequest:r,resolve:n,reject:o}=e;this._requests.delete(t.id);const{result:s,error:i}=(({response:e,request:t})=>{const{result:r={},error:n}=e;return n?{error:n}:"signalwire.connect"===t.method?{result:r}:vr(e)})({response:t,request:r});return this._checkCurrentStatus(),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,Wr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(dn(t))}var r}dispatch(e){if(!this._sessionChannel)throw new Error("Session channel does not exist");this._sessionChannel.put(e)}_relayProtocolIsValid(){var e;return this.signature&&(null==(e=null==this?void 0:this.relayProtocol)?void 0:e.split("_")[1])===this.signature}encode(e){return JSON.stringify(e)}decode(e){return(e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}})(e)}async onSwAuthorizationState(e){this.persistSwAuthorizationState(e)}async retrieveSwAuthorizationState(){return""}async persistSwAuthorizationState(e){}_send(e){this.logger.wsTraffic({type:"send",payload:e}),this._socket.send(this.encode(e))}_addToExecuteQueue(e){this.logger.warn("Request queued waiting for session to reconnect",e),this._executeQueue.add(e)}_flushExecuteQueue(){if(this._executeQueue.size){if(!this.ready)return this.logger.warn("Session not ready to flush the queue."),void this._closeConnection("reconnecting");this.logger.debug(`${this._executeQueue.size} messages to flush`),this._executeQueue.forEach((e=>{this._send(e),this._executeQueue.delete(e)})),this._executeQueue.clear()}}_clearCheckPingTimer(){clearTimeout(this._checkPingTimer)}async _pingHandler(e){var t,r,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,Wr({id:r,result:{timestamp:n||Date.now()/1e3}})))}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(ln());break;case"reconnecting":this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"}))}}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection:",e),this._status=e,this.dispatch(Cn.authStatus("disconnected"===e?"unauthorized":"unknown")),this.destroySocket(),this._checkCurrentStatus()}},In=class extends Pn{constructor(e){super(e),this.options=e,Yt(this,"_expiredDiffSeconds",0),Yt(this,"_refreshTokenNotificationDiff",120),Yt(this,"_checkTokenExpirationDelay",2e4),Yt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e;if(!(null==this?void 0:this._rpcConnectResult))return 0;const{authorization:t}=this._rpcConnectResult,r=null!=(e=Dr(t)?t.fabric_subscriber.expires_at:null==t?void 0:t.expires_at)?e:0;if("string"==typeof r){const e=Date.parse(r);if(!isNaN(e))return Math.floor(e/1e3)}return r}get expiresIn(){const e=Math.floor(Date.now()/1e3);return this.expiresAt-e}get expired(){return this.expiresAt>0&&this.expiresIn<=this._expiredDiffSeconds}async authenticate(){const e={agent:this.agent,version:this.connectVersion,authentication:{jwt_token:this.options.token}};if(this._relayProtocolIsValid())e.protocol=this.relayProtocol;else{const t=await this.retrieveRelayProtocol();t&&(e.protocol=t)}if(e.protocol){const t=await this.retrieveSwAuthorizationState();t&&(e.authorization_state=t)}try{this._rpcConnectResult=await this.execute(Ur(e)),await this.persistRelayProtocol(),this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,Nr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}_checkTokenExpiration(){this.expiresAt&&(this.expiresIn<=this._refreshTokenNotificationDiff&&(this.dispatch(cn()),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)))}},Mn={};Gt(Mn,{authErrorAction:()=>sn,authExpiringAction:()=>cn,authSuccessAction:()=>an,compoundEventAttachAction:()=>bn,configureStore:()=>no,connect:()=>ro,createAction:()=>Yr,createCatchableSaga:()=>Nn,createRestartableSaga:()=>Ln,destroyAction:()=>nn,eventChannel:()=>ut,getCustomSagaActionType:()=>yn,initAction:()=>rn,makeCustomSagaAction:()=>vn,reauthAction:()=>on,sessionAuthErrorAction:()=>pn,sessionConnectedAction:()=>un,sessionDisconnectedAction:()=>ln,sessionExpiringAction:()=>mn,sessionForceCloseAction:()=>gn,sessionReconnectingAction:()=>hn,socketMessageAction:()=>dn});var Rn=_n({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Kt(qt({},e),t.id in e.byId?{byId:Kt(qt({},e.byId),{[t.id]:qt(qt({},e.byId[t.id]),t)})}:{byId:Kt(qt({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>Kt(qt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,n])=>(t.ids.includes(r)||(e[r]=n),e)),{})})}}),{actions:xn,reducer:An}=Rn,On=(0,Xr.combineReducers)({components:An,session:En}),jn={};Gt(jn,{createCatchableSaga:()=>Nn,createRestartableSaga:()=>Ln,eventChannel:()=>ut});var Ln=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];var o;o=ze.apply(void 0,[e].concat(r)),Ve(De,X({},o.payload,{detached:!0}))}((function*(){for(;;)try{hr().debug("Run a restartable saga"),yield Fe(e),hr().debug("One of the restartable saga has ended. Restarting..")}catch(e){hr().error("Restartable Saga Error",e)}}))},Dn=e=>hr().error("Catchable Saga Error",e),Nn=(e,t=Dn)=>function*(...r){try{yield Fe(e,...r)}catch(e){t(e)}},Wn=e=>gr(null==e?void 0:e.event_type),Vn=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},Un=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*$n({sessionChannel:e,pubSubChannel:t,swEventChannel:r,session:n}){function*o(e){switch(e.event_type){case"video.room.audience_count":return void(yield $e(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 $e(t,{type:`video.member.talking.${n}`,payload:e.params});const o=r.talking?"start":"stop";yield $e(t,{type:`video.member.talking.${o}`,payload:e.params})}break}}yield $e(t,{type:e.event_type,payload:e.params})}function*s(e){yield $e(r,kr(e)),Wn(e)||(Un(e)?n.onSwAuthorizationState(e.params.authorization_state):Vn(e)?yield ze(o,e):yield $e({type:e.event_type,payload:e}))}const i=Nn((function*(e){if(e.type!==dn.type)return void(yield $e(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return hr().debug(`Unknown message: ${t}`,e);yield ze(s,r)}),(e=>{hr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield ze(i,t)}}catch(e){hr().error("sessionChannelWorker error:",e)}finally{hr().debug("sessionChannelWorker finally")}}var Bn=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*Fn({pubSubChannel:e,emitter:t}){hr().debug("pubSubSaga [started]");try{for(;;){const r=yield Ue(e,"*"),{type:n,payload:o}=r;try{const e=Bn(r);Mr(n)&&t.emit(n,o),hr().trace("Emit:",_r({namespace:e,event:n})),t.emit(_r({namespace:e,event:n}),o)}catch(e){hr().error(e)}}}finally{(yield qe())&&hr().debug("pubSubSaga [cancelled]")}}var zn=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Yt(this,"name","AuthError"),Object.setPrototypeOf(this,zn.prototype)}},Hn=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Yt(this,"name","HttpError"),Object.setPrototypeOf(this,Hn.prototype)}};function*qn({initSession:e,userOptions:t,channels:r}){var n;const o=e(),s=r.pubSubChannel,i=r.swEventChannel,a=r.sessionChannel;let c=[];if(null==(n=t.workers)?void 0:n.length)try{const e=t.workers.map((e=>Fe(Ln(e))));c=yield function(e){var t=Ve(je,e);return t.combinator=!0,t}(e)}catch(e){hr().error("Error running custom workers",e)}yield ze($n,{session:o,sessionChannel:a,pubSubChannel:s,swEventChannel:i});const d=yield ze(Fn,{pubSubChannel:s,emitter:t.emitter}),u=yield ze(Qn,{session:o,sessionChannel:a,pubSubChannel:s,userOptions:t});o.connect(),yield Ue(nn.type),o.disconnect(),yield Ue(ln.type),yield $e(s,ln()),d.cancel(),u.cancel(),c.forEach((e=>e.cancel()))}function*Kn({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Fe(e.reauthenticate),yield $e(Cn.connected(e.rpcConnectResult)),yield $e(r,un()))}catch(t){hr().error("Reauthenticate Error",t),e.authError(t)}}function*Qn(e){hr().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield Ue([an.type,sn.type,cn.type,on.type,hn.type,gn.type]);switch(hr().debug("sessionStatusWatcher",t.type,t.payload),t.type){case an.type:{const{session:t,pubSubChannel:r}=e;yield $e(Cn.connected(t.rpcConnectResult)),yield $e(r,un());break}case sn.type:yield ze(Gn,Kt(qt({},e),{action:t}));break;case cn.type:yield $e(e.pubSubChannel,mn());break;case on.type:yield ze(Kn,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case hn.type:yield $e(e.pubSubChannel,hn());break;case gn.type:e.session.forceClose()}}}finally{(yield qe())&&hr().debug("sessionStatusWatcher [cancelled]")}}function*Gn(e){hr().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:n}=r.payload,o=n?new zn(n.code,n.message):new Error("Unauthorized");yield $e(t,pn(o))}finally{(yield qe())&&hr().debug("sessionAuthErrorSaga [cancelled]")}}var Jn={};Gt(Jn,{getAuthError:()=>eo,getAuthState:()=>to,getAuthStatus:()=>Zn,getIceServers:()=>Xn,getSession:()=>Yn});var Xn=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Yn=e=>e.session,Zn=({session:e})=>e.authStatus,eo=({session:e})=>e.authError,to=({session:e})=>e.authState,ro=e=>{const{sessionListeners:t={},store:r,Component:n,customSagas:o=[]}=e,s=Object.keys(t);return e=>{const i=new n(Kt(qt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),n=Yn(e);for(const e of s){if(!1===c)return;const r=`session.${e}`,o=a.get(r),s=n[e];if(void 0!==s&&o!==s){a.set(r,s);const o=t[e];"string"==typeof o?i[o](n):"function"==typeof o&&o(n)}}})),u=null==o?void 0:o.map((e=>r.runSaga(e,{instance:i,runSaga:r.runSaga})));return i.destroyer=()=>{c=!1,d(),a.clear(),(null==u?void 0:u.length)&&u.forEach((e=>e.cancel()))},i}};Xt(Mn,Xr);var no=e=>{var t;const{userOptions:r,SessionConstructor:n,preloadedState:o={},runSagaMiddleware:s=!0}=e,i=jt(),a=lt(),c=lt(),d=dt(),u={pubSubChannel:a,swEventChannel:c,sessionChannel:d},l=tn({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:On,preloadedState:o,middleware:e=>e().concat(i)});let h;const p=()=>(h||hr().warn("Custom worker started without the session"),h);if(s){const e=(e=>function*({userOptions:t,channels:r}){var n;for(t.logger&&(ar=t.logger),t.debug&&(e=>{null!=e?Object.assign(dr,e):dr={}})(t.debug);;){const o=yield Ue([rn.type,on.type]);(null==(n=null==o?void 0:o.payload)?void 0:n.token)&&(t.token=o.payload.token);try{yield Fe(qn,Kt(qt({},e),{userOptions:t,channels:r}))}catch(e){hr().error("RootSaga Error:",e)}finally{(yield qe())&&hr().debug("rootSaga [cancelled]"),hr().debug("Reboot rootSaga")}}})({initSession:()=>(h=new n(Kt(qt({},r),{sessionChannel:d})),h)});i.run(e,{userOptions:r,channels:u})}return Kt(qt({},l),{runSaga:(e,t)=>i.run(e,Kt(qt({},t),{channels:u,getSession:p})),channels:u})},oo=function*(e){const{initialState:t,onDone:r,onFail:n,getSession:o}=e,{requestId:s,method:i,params:a}=t,c=o();if(!c){const e=new Error("Session does not exist!");return hr().error(e),void(null==n||n(e))}try{const e=(({method:e,params:t})=>Nr({method:e,params:t}))({id:s,method:i,params:a}),t=yield Fe(c.execute,e);null==r||r(t)}catch(e){hr().warn("Execute error: ",e),null==n||n(e)}},so=e=>e,io=Symbol("BaseComponent"),ao=class{constructor(e){this.options=e,Yt(this,"__sw_symbol",io),Yt(this,"uuid",w()),Yt(this,"_eventsPrefix",""),Yt(this,"_eventsRegisterQueue",new Set),Yt(this,"_eventsEmitQueue",new Set),Yt(this,"_eventsNamespace"),Yt(this,"_eventsTransformsCache",new Map),Yt(this,"_customSagaTriggers",new Map),Yt(this,"_destroyer"),Yt(this,"_emitterTransforms",new Map),Yt(this,"_emitterListenersCache",new Map),Yt(this,"_trackedEvents",[]),Yt(this,"_runningWorkers",[]),Yt(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(bn({compoundEvents:r,event:t,namespace:this._eventsNamespace})),r.forEach((e=>{"string"==typeof e&&this._trackEvent(e)})))}_getNamespacedEvent(e){let t=this._eventsNamespace;return"string"==typeof e&&jr(e)&&(t=this.__uuid),_r({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||Rr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return hr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get 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=Er({instance:o,payload:r,transformedPayload:i,transform:n}),n.afterCreateHook&&n.afterCreateHook(s),t(s)}}_parseNestedFields(e,t,r=(e=>e),n=undefined){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(!Tr.has(e.type)){const r=e.instanceFactory(t);return Tr.set(e.type,r),r}return Tr.get(e.type)})({transform:e,payload:t}),n=e.payloadTransform(t);return Er({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 Or(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=so,transformResolve:n=so,transformReject:o=so}={transformParams:so,transformResolve:so,transformReject:so}){return new Promise(((s,i)=>{const a=w();this.runWorker("executeActionWorker",{worker:oo,onDone:e=>s(n(e)),onFail:e=>i(o(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const n=w();this._customSagaTriggers.set(n,{resolve:t,reject:r}),this.store.dispatch(qt({dispatchId:n},vn(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())}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 Zn(this.store.getState())}get _sessionAuthState(){return to(this.store.getState())}_waitUntilSessionAuthorized(){switch(Zn(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=Zn(this.store.getState()),o=eo(this.store.getState());if("authorized"===n)e(this),r();else if("unauthorized"===n){const e=o?new zn(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?jr(e):!jr(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){return this._workers.has(e)?hr().warn(`[runWorker] Worker with name ${e} has already been registerd.`):this._setWorker(e,t),this._attachWorker(e,t)}_setWorker(e,t){this._workers.set(e,t)}_attachWorker(e,t){var r=t,{worker:n}=r,o=Qt(r,["worker"]);const s=this.store.runSaga(n,qt({instance:this,runSaga:this.store.runSaga},o));return this._runningWorkers.push(s),this._workers.delete(e),s}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},co=class extends ao{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=Zn(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(rn()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(nn())}},uo=class extends ao{constructor(e){super(e),this.options=e,Yt(this,"subscribeMethod","signalwire.subscribe"),Yt(this,"subscribeParams",{}),Yt(this,"_latestExecuteParams"),this.applyEmitterTransforms({local:!0});const t=()=>{this._latestExecuteParams=void 0};super.on("session.connected",t),super.on("session.disconnected",t),super.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:Kt(qt({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return this.applyEmitterTransforms(),await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},lo={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(lo).map((e=>`${tr}.member.updated.${e}`));var ho=br(lo);Object.keys(ho).map((e=>`member.updated.${e}`));var po={};Gt(po,{getComponent:()=>mo,getComponentsById:()=>go,getComponentsToCleanup:()=>fo});var mo=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},go=({components:e})=>e.byId,fo=e=>{const t=go(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},vo={};Gt(vo,{RoomSessionPlaybackAPI:()=>is,RoomSessionRecordingAPI:()=>os,RoomSessionStreamAPI:()=>cs,audioMuteMember:()=>Vo,audioUnmuteMember:()=>Uo,createRoomSessionPlaybackObject:()=>as,createRoomSessionRecordingObject:()=>ss,createRoomSessionStreamObject:()=>ds,deafMember:()=>Fo,deleteMemberMeta:()=>ns,deleteMeta:()=>Do,demote:()=>Jo,getLayouts:()=>_o,getMemberMeta:()=>es,getMembers:()=>wo,getMeta:()=>Oo,getPlaybacks:()=>Ro,getRecordings:()=>Io,getStreams:()=>No,hideVideoMuted:()=>Eo,play:()=>xo,promote:()=>Go,removeAllMembers:()=>Zo,removeMember:()=>Yo,setDeaf:()=>Ho,setHideVideoMuted:()=>Po,setInputSensitivityMember:()=>Qo,setInputVolumeMember:()=>qo,setLayout:()=>ko,setMemberMeta:()=>ts,setMemberPosition:()=>Xo,setMeta:()=>jo,setOutputVolumeMember:()=>Ko,setPositions:()=>Co,showVideoMuted:()=>To,startRecording:()=>Mo,startStream:()=>Wo,undeafMember:()=>zo,updateMemberMeta:()=>rs,updateMeta:()=>Lo,videoMuteMember:()=>$o,videoUnmuteMember:()=>Bo});var yo=()=>{},bo=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:qt({room_session_id:this.roomSessionId},r)},t)}}),So=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Qt(n,["memberId"]);return this.execute({method:e,params:qt({room_session_id:this.roomSessionId,member_id:o||this.memberId},s)},t)}}),_o=bo("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),wo=bo("video.members.get",{transformResolve:e=>({members:e.members})}),ko=bo("video.set_layout",{transformResolve:yo}),Co=bo("video.set_position",{transformResolve:yo}),Eo=bo("video.hide_video_muted",{transformResolve:yo}),To=bo("video.show_video_muted",{transformResolve:yo}),Po={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:yo})}},Io={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.list"),r);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.list"),r),t(e)}}))}},Mo={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.recording.start"),r);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.recording.start"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.recording.start"),r),t(e)}}))}},Ro={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.playback.list"),r);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.playback.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.list"),r),t(e)}}))}},xo={value:function(e){var t=e,{seekPosition:r,currentTimecode:n}=t,o=Qt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{const s=t=>{e(t)};this.on(Lr("video.playback.start"),s);try{const e=r||n,t=await this.execute({method:"video.playback.start",params:qt({room_session_id:this.roomSessionId,seek_position:e},o)});this.emit(Lr("video.playback.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.playback.start"),s),t(e)}}))}},Ao=e=>bo(e,{transformResolve:yo,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Qt(t,["room_session_id"])}}}),Oo=bo("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),jo=Ao("video.set_meta"),Lo=Ao("video.update_meta"),Do={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},No={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(Lr("video.stream.list"),r);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(Lr("video.stream.list"),Kt(qt({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.list"),r),t(e)}}))}},Wo={value:function(e){return new Promise((async(t,r)=>{const n=e=>{t(e)};this.on(Lr("video.stream.start"),n);try{const t=await this.execute({method:"video.stream.start",params:qt({room_session_id:this.roomSessionId},e)});this.emit(Lr("video.stream.start"),Kt(qt({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(Lr("video.stream.start"),n),r(e)}}))}},Vo=So("video.member.audio_mute",{transformResolve:yo}),Uo=So("video.member.audio_unmute",{transformResolve:yo}),$o=So("video.member.video_mute",{transformResolve:yo}),Bo=So("video.member.video_unmute",{transformResolve:yo}),Fo=So("video.member.deaf",{transformResolve:yo}),zo=So("video.member.undeaf",{transformResolve:yo}),Ho={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:yo})}},qo=So("video.member.set_input_volume",{transformResolve:yo}),Ko=So("video.member.set_output_volume",{transformResolve:yo}),Qo=So("video.member.set_input_sensitivity",{transformResolve:yo}),Go={value:function(e){var t=e,{memberId:r,mediaAllowed:n,joinAudioMuted:o,joinVideoMuted:s}=t,i=Qt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:qt({room_session_id:this.roomSessionId,member_id:r,media_allowed:n,join_audio_muted:o,join_video_muted:s},i)},{transformResolve:yo})}},Jo={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:yo})}},Xo=So("video.member.set_position",{transformResolve:yo}),Yo={value:function(e){var t=e,{memberId:r}=t,n=Qt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:qt({room_session_id:this.roomSessionId,member_id:r},n)},{transformResolve:yo})}},Zo={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:yo})}},es=So("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ts=So("video.member.set_meta",{transformResolve:yo}),rs=So("video.member.update_meta",{transformResolve:yo}),ns=So("video.member.delete_meta",{transformResolve:yo}),os=class extends ao{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")}})}},ss=e=>ro({store:e.store,Component:os})(e),is=class extends ao{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)}})}},as=e=>ro({store:e.store,Component:is})(e),cs=class extends ao{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},ds=e=>ro({store:e.store,Component:cs})(e),us={};Gt(us,{BaseChatAPI:()=>Rs,BaseChatConsumer:()=>Ms,ChatMember:()=>Ts,ChatMessage:()=>Ps,createBaseChatObject:()=>xs,getMemberState:()=>bs,getMembers:()=>fs,getMessages:()=>gs,publish:()=>ms,setMemberState:()=>ys});var ls=()=>{},hs=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),ps=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,s=Qt(n,["memberId"]);return this.execute({method:e,params:qt({member_id:o},s)},t)}}),ms=hs("chat.publish",{transformResolve:ls}),gs=hs("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>br(e))),cursor:e.cursor})}),fs=hs("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>br(e)))})}),vs=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return Kt(qt({},e),{channels:t})},ys=ps("chat.member.set_state",{transformResolve:ls,transformParams:vs}),bs=ps("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:vs}),Ss={};Gt(Ss,{BasePubSubConsumer:()=>Cs,PubSubMessage:()=>_s,createBasePubSubObject:()=>Es});var _s=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}},ws=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ue((e=>e.type.startsWith(`${nr}.`)));t.type===`${nr}.channel.message`?yield $e(e,{type:`${nr}.message`,payload:t.payload}):hr().debug("[pubSubWorker] Unrecognized Action",t)}},ks=e=>e.map((e=>({name:e}))),Cs=class extends uo{constructor(e){super(e),Yt(this,"_eventsPrefix",nr),Yt(this,"subscribeMethod",`${nr}.subscribe`),this._attachListeners(""),this.runWorker("pubSub",{worker:ws})}getEmitterTransforms(){return new Map([[["message"],{type:"pubSubMessage",instanceFactory:()=>new _s({}),payloadTransform:e=>{const{channel:t,message:r}=e.params,n=Qt(r,["member"]);return br(Kt(qt({},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:ks(r)}}_setSubscribeParams(e){this.subscribeParams=qt(qt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return qt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return qt({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const n=this.getSubscriptions();if(n.length>0){const e={method:`${nr}.unsubscribe`,params:Kt(qt({},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(Jr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${nr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(to);return e&&"channels"in e&&e.channels?e.channels:{}}},Es=e=>ro({store:e.store,Component:Cs})(e),Ts=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:{}}},Ps=class extends _s{get member(){return this.payload.member}},Is=function*({channels:{pubSubChannel:e}}){for(;;){const t=yield Ue((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 $e(e,t);break;default:hr().debug("[chatWorker] Unrecognized Action",t)}}},Ms=class extends Cs{constructor(e){super(e),Yt(this,"_eventsPrefix",rr),Yt(this,"subscribeMethod",`${rr}.subscribe`),this.runWorker("chat",{worker:Is})}getEmitterTransforms(){return new Map([[["message"],{type:"chatMessage",instanceFactory:()=>new Ps({}),payloadTransform:e=>{const{channel:t,message:r}=e.params;return br(Kt(qt({},r),{channel:t}))}}],[["member.joined","member.left","member.updated"],{type:"chatMember",instanceFactory:e=>{const{member:t}=e.params;return new Ts(br(t))},payloadTransform:e=>{const{member:t}=e.params;return br(t)}}]])}},Rs=Cr(Ms,{publish:ms,getMembers:fs,getMessages:gs,setMemberState:ys,getMemberState:bs}),xs=e=>ro({store:e.store,Component:Rs})(e),As={};function*Os(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)?(Ns({memberList:r,memberId:n,currentPosition:e.position}),o[n]=!0):o[n]=!1}));for(const[e,t]of r)if(o[e])yield $e(n,{type:"video.member.updated",payload:t});else if(void 0===o[e]){const t=Ns({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield $e(n,{type:"video.member.updated",payload:t})}}function*js({action:e,channels:t,memberList:r}){var n,o;const s=e.payload.member.id,i=Ns({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=Kt(qt({},i),{member:qt(qt({},i.member),e.payload.member)});r.set(s,c);for(const r of a){const n=`${e.type}.${r}`;yield $e(t.pubSubChannel,{type:n,payload:c})}yield $e(t.pubSubChannel,{type:e.type,payload:c})}Gt(As,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Ls,memberPositionWorker:()=>Ds,memberUpdatedWorker:()=>js});var Ls=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Ds=function*({instance:e,channels:t,initialState:r,getSession:n}){if(!r)return;const{swEventChannel:o}=t;let s=Ws(r);const i=e=>{s.has(e.member.id)||s.set(e.member.id,e)};for(;;){const r=yield Ue(o,(t=>("video.member.updated"===t.type||"video.layout.changed"===t.type||"video.member.joined"===t.type||"video.member.left"===t.type)&&Bn(t)===e._eventsNamespace));switch(r.type){case"video.member.updated":i(r.payload),yield ze(js,{action:r,channels:t,memberList:s,instance:e,getSession:n});break;case"video.member.joined":i(r.payload);break;case"video.member.left":s.delete(r.payload.member.id);break;case"video.layout.changed":yield ze(Os,{action:r,channels:t,memberList:s,instance:e})}}},Ns=({memberList:e,memberId:t,currentPosition:r})=>{const n=e.get(t);if(!n)return;if(!r)return n;const o=Kt(qt({},n),{member:Kt(qt({},null==n?void 0:n.member),{current_position:r})});return e.set(t,o),o},Ws=e=>{const t=e.room_session.members,r=new Map;return t.forEach((t=>{r.set(t.id,{room_id:e.room_session.room_id,room_session_id:e.room_session.id,member:t})})),r};Gt({},{configureFullStack:()=>Fs,configureJestStore:()=>Bs,createMockedLogger:()=>$s,createPubSubChannel:()=>qs,createSessionChannel:()=>Qs,createSwEventChannel:()=>Ks,rpcConnectResultVRT:()=>Hs,wait:()=>zs});var Vs="8f0a119a-cda7-4497-a47d-c81493b824d4",Us="<VRT>",$s=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),Bs=e=>no(qt({userOptions:{project:Vs,token:Us,devTools:!1,emitter:new Dt},SessionConstructor:Pn,runSagaMiddleware:!1},e)),Fs=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Dt,r=no({userOptions:{project:Vs,token:Us,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Jr.initAction()),r.dispatch(Jr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Jr.destroyAction())}},zs=e=>new Promise((t=>{setTimeout(t,e)})),Hs={identity:"f3bc99df-2c3d-4fa4-b1dc-e8a8ffc579e6@e3fefa44-1bad-4be9-ad9b-1cbb9abd60c7.west-us",authorization:{type:"video",project_id:"8f0a119a-cda7-4497-a47d-c81493b824d4",project:"8f0a119a-cda7-4497-a47d-c81493b824d4",scopes:["video"],scope_id:"26675883-8499-4ee9-85eb-691c4aa209f8",resource:"9c80f1e8-9430-4070-a043-937eb3a96b38",join_as:"member",user_name:"Joe",room:{name:"lobby",display_name:"Lobby",scopes:["room.self.audio_mute","room.self.audio_unmute"],meta:{}},signature:"SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q",media_allowed:"all",audio_allowed:"both",video_allowed:"both",meta:{}},protocol:"signalwire_SGZtkRD9fvuBAOUp1UF56zESxdEvGT6qSGZtkRD9fvuBAOUp1UF56zESxdEvGT6q_03e8c927-8ea3-4661-86d5-778c3e03296a_8f0a119a-cda7-4497-a47d-c81493b824d4",ice_servers:[{urls:"turn.swire.io:443",credential:"sFTwvi8ShXcYNOcyYjFy3ATIUpQ=",credentialType:"password",username:"1619521908:8f0a119a-cda7-4497-a47d-c81493b824d4"}]},qs=()=>lt(),Ks=()=>lt(),Qs=()=>dt(),Gs=qt({},Jn);const Js=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Xs=()=>{if(!Js())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},Ys=()=>Xs().getSupportedConstraints(),Zs=e=>e&&e instanceof MediaStream,ei=()=>"sinkId"in HTMLMediaElement.prototype,ti=async(e,t)=>{if(null!==e)if("string"==typeof t)if(ei())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?hr().error(`You need to use HTTPS for selecting audio output device: ${e}`):hr().error(`Error: ${e}`),e}else hr().warn("Browser does not support output device selection.");else hr().warn(`Invalid speaker deviceId: '${t}'`);else hr().warn("No HTMLMediaElement to attach the speakerId")},ri=e=>{var t;Zs(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(ni))},ni=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},oi={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},si=e=>{if(e)return oi[e]},ii=()=>Xs().enumerateDevices(),ai=async e=>{let t=await ii().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},ci=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 ai(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(hr().warn(`No ${e} devices to check for permissions!`),null)})(si(e))},di=()=>ci("camera"),ui=()=>ci("microphone"),li=()=>ci("speaker"),hi=async(e={audio:!0,video:!0})=>{var t;try{const t=Xs().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(ui()),(null==e?void 0:e.video)&&t.push(di()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Ir(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":hr().error(null!==(t=null==r?void 0:r.message)&&void 0!==t?t:"navigator.mediaDevices.getUserMedia doesn't seem to be supported.");break;case"NotFoundError":hr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":hr().error("Hardware error occurred at the operating system, browser, or Web page level which prevented access to the device. This could have been caused by having the Camera or Mic being user by another application.");break;case"OverconstrainedError":hr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),hr().info("List of available constraints:",Ys());break;case"NotAllowedError":hr().error("The user has mostly likely denied access to the device. This could also happen if the browsing context is insecure (using HTTP rather than HTTPS)");break;case"TypeError":0===Object.keys(e).length?hr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):hr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":hr().error("User media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.")}throw r}},pi=e=>Xs().getDisplayMedia(e),mi=async(e,t=!1)=>fi(e,t),gi=(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))}))},fi=async(e,t=!1)=>{let r;if(!1===await ci(e)){const t={audio:!(n=e)||"all"===n||"microphone"===n||"speaker"===n,video:!n||"all"===n||"camera"===n};r=await hi(t)}var n;const o=await ai(si(e));return r&&ri(r),!0===t?o:gi(o)},vi=async(e,t,r)=>{const n=await fi(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},yi=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},bi={camera:di,microphone:ui,speaker:li},Si=["camera","microphone","speaker"],_i=`Allowed targets are: '${Si.join("', '")}'`,wi={speaker:ei},ki=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:Si).filter((e=>!!Si.includes(e)||(hr().warn(`We'll ignore the "${e}" target as it is not allowed. ${_i}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${_i}.`);const n=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>bi[e]())))).reduce(((e,r,n)=>{var o;const s=t[n];return e[!(s in wi)||(null===(o=wi[s])||void 0===o?void 0:o.call(wi))?"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(", ")}. `:"";hr().warn(`${e}${t}We'll be watching for the following targets instead: "${s.join(", ")}"`)}return hr().debug(`Watching these targets: "${s.join(", ")}"`),s})({targets:e.targets}),r=new Dt,n=await ii(),o=null==t?void 0:t.reduce(((e,t)=>{const r=si(t);return r&&e.push(r),e}),[]);let s=gi(n,{excludeDefault:!0,targets:o});return Xs().addEventListener("devicechange",(async()=>{const e=await ii(),t=s,n=gi(e,{excludeDefault:!0,targets:o});s=n;const i=((e,t)=>{const r=yi(e),n=yi(e),o=[];hr().debug("[_getDeviceListDiff] <- oldDevices",e),hr().debug("[_getDeviceListDiff] -> newDevices",t);const s=t.filter((e=>{const t=e.deviceId,s=r.get(t);return s&&(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},Ci=e=>"function"==typeof(null==e?void 0:e.getTracks),Ei=e=>{hr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return hi(e)},Ti=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:n=""}=e;if(r){const e=await vi(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 vi(s,i,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}};var Pi={exports:{}};!function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;t.push("rtp"===r?1:"rtcp"===r?2:r),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const n=e.type;return t.push("typ"),t.push(n),"host"!==n&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substring(14).split(" ")},t.parseRtpMap=function(e){let t=e.substring(9).split(" ");const r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){const t=e.substring(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let r;const n=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e<n.length;e++)r=n[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const n=[];Object.keys(e.parameters).forEach((t=>{n.push(void 0!==e.parameters[t]?t+"="+e.parameters[t]:t)})),t+="a=fmtp:"+r+" "+n.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},n=e.indexOf(":",t);return n>-1?(r.attribute=e.substring(t+1,n),r.value=e.substring(n+1)):r.attribute=e.substring(t+1),r},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const n=t.matchPrefix(e+r,"a=ice-ufrag:")[0],o=t.matchPrefix(e+r,"a=ice-pwd:")[0];return n&&o?{usernameFragment:n.substring(12),password:o.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=t.splitLines(e)[0].split(" ");r.profile=n[2];for(let o=3;o<n.length;o++){const s=n[o],i=t.matchPrefix(e,"a=rtpmap:"+s+" ")[0];if(i){const n=t.parseRtpMap(i),o=t.matchPrefix(e,"a=fmtp:"+s+" ");switch(n.parameters=o.length?t.parseFmtp(o[0]):{},n.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+s+" ").map(t.parseRtcpFb),r.codecs.push(n),n.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(n.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))}));const o=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{o.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let n="";n+="m="+e+" ",n+=r.codecs.length>0?"9":"0",n+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",n+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{n+=t.writeRtpMap(e),n+=t.writeFmtp(e),n+=t.writeRtcpFb(e)}));let o=0;return r.codecs.forEach((e=>{e.maxptime>o&&(o=e.maxptime)})),o>0&&(n+="a=maxptime:"+o+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{n+=t.writeExtmap(e)})),n},t.parseRtpEncodingParameters=function(e){const r=[],n=t.parseRtpParameters(e),o=-1!==n.fecMechanisms.indexOf("RED"),s=-1!==n.fecMechanisms.indexOf("ULPFEC"),i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=i.length>0&&i[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),n.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),r.push(t),o&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let u=t.matchPrefix(e,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substring(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=u}))),r},t.parseRtcpParameters=function(e){const r={},n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];n&&(r.cname=n.value,r.ssrc=n.ssrc);const o=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=o.length>0,r.compound=0===o.length;const s=t.matchPrefix(e,"a=rtcp-mux");return r.mux=s.length>0,r},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let r;const n=t.matchPrefix(e,"a=msid:");if(1===n.length)return r=n[0].substring(7).split(" "),{stream:r[0],track:r[1]};const o=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return o.length>0?(r=o[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),n=t.matchPrefix(e,"a=max-message-size:");let o;n.length>0&&(o=parseInt(n[0].substring(19),10)),isNaN(o)&&(o=65536);const s=t.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:r.fmt,maxMessageSize:o};const i=t.matchPrefix(e,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:o}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,n){let o;const s=void 0!==r?r:2;return o=e||t.generateSessionId(),"v=0\r\no="+(n||"thisisadapterortc")+" "+o+" "+s+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const n=t.splitLines(e);for(let e=0;e<n.length;e++)switch(n[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[e].substring(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substring(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const r=t.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(Pi);var Ii=Pi.exports;const Mi=e=>/^m=audio/.test(e),Ri=e=>/^m=video/.test(e),xi=e=>{const t="\r\n",r=e.split(t),n=r.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(n<0)return e;const o=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[n]),s=new RegExp(`a=fmtp:${o}`),i=r.findIndex((e=>s.test(e)));return i>=0?/stereo=1;/.test(r[i])||(r[i]+="; stereo=1; sprop-stereo=1"):r[n]+=`${t}a=fmtp:${o} stereo=1; sprop-stereo=1`,r.join(t)};class Ai{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this.needResume=!1,this._restartingIce=!1,this.options=e.options,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0}get logger(){return hr()}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:this.call.iceServers,sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.instance.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(ni(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&&Zs(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("restartIceWithRelayOnly",e)}}restartIce(){(this._negotiating||this._restartingIce)&&this.logger.warn("Skip restartIce"),this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this.needResume?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this.needResume=!0,this.call._closeWSConnection())}resetNeedResume(){this.needResume=!1,this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void hr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);hr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,n=0,o=!0;const s=()=>{clearTimeout(t)},i=async()=>{var a,c;let d=0,u=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,n=null===(c=e.remoteVideoTrack)||void 0===c?void 0:c.id;t.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&e.trackIdentifier===r&&(hr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===n&&(hr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),u=e.packetsReceived)}))}catch(e){hr().warn("getStats error",e)}finally{d&&d<=r&&u&&u<=n?(hr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),hr().warn(`videoPacketsReceived: ${u} - previousVideoValue: ${n}`),e.triggerResume()):(r=null!=d?d:r,n=null!=u?u:n,s(),o&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>i()),e.watchMediaPacketsTimeout)))}};return{start:()=>{s(),i()},stop:()=>{o=!1,s()}}})(this),null===(e=this._mediaWatcher)||void 0===e||e.start()}async applyMediaConstraints(e,t){try{const r=this._getSenderByKind(e);if(!r||!r.track)return this.logger.info("No sender to apply constraints",e,t);if("live"===r.track.readyState){const 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(),this.logger.info("iceGatheringState",this.instance.iceGatheringState),"gathering"===this.instance.iceGatheringState&&(this._iceTimeout=setTimeout((()=>{this._onIceTimeout()}),this.options.maxIceGatheringTimeout))}catch(e){this.logger.error(`Error creating ${this.type}:`,e)}}onRemoteBye({code:e,message:t}){this._rejectStartMethod({code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}async start(){return new Promise((async(e,t)=>{this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let r=!1;if(this._localStream&&Zs(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(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this)}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return!(!this.localSdp||!this.hasIceServers)&&(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Ii.getMediaSections(e);for(const e of r)if(!Ii.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return hr().error("Error checking SDP",e),!1}})(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const e=this.instance.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.info('RTCPeer already with "iceTransportPolicy: relay"'),this._rejectStartMethod({code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"}),void this.call.setState("destroy");this.instance.setConfiguration(Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:n,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=xi(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=xi(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(Mi)<n.findIndex(Ri))return e;const o=e.split(r),s=o.findIndex(Mi),i=o.findIndex(Ri),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(Zs(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,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)}))}clearTimers(){this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}emitMediaConnected(){this.call.emit("media.connected")}}
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation.
9
9
 
@@ -17,5 +17,5 @@
17
17
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
18
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
19
  PERFORMANCE OF THIS SOFTWARE.
20
- ***************************************************************************** */const Oi=e=>gr(e.type),ji=function*(e){hr().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");const i=jn.createCatchableSaga((function*(e){const{id:t,method:n,params:o={}}=e.payload,{callID:s,nodeId:i}=o,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${n}'`,o);const c=r.peer;switch(n){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===n?"early":"active"),(null==o?void 0:o.sdp)&&a.onRemoteSdp(o.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,n),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==o?void 0:o.cause,byeCauseCode:null==o?void 0:o.causeCode,redirectDestination:null==o?void 0:o.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,n),node_id:i}});break;case"verto.ping":{const{nodeId:e}=o,t=function(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}(o,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!o.mediaParams){hr().warn("Invalid mediaParams event",o);break}const{audio:e,video:t}=o.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${n}`,o)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield Ue(o,(e=>{var t;return!!Oi(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Li=function*(e){hr().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 Ue(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 $e(xn.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 $e(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Di=function*(e){hr().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 Ue(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield $e(Cn.updateAuthState(i.payload.authorization));const a=yield He(Gs.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),hr().debug("promoteDemoteWorker ended",s)},Ni=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ue([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Wi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Vi=Object.assign(Object.assign({},Wi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Ui={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},$i={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Wi,video:Ui,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Bi extends ao{constructor(e){super(e),this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode: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({},$i),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(Gs.getIceServers)}get component(){return this.select((e=>po.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).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Gs.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new Ai(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 hi(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"),ni(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 - "),ni(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:ji,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Li,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Di,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new Ai(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 Ai(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 this._watchSessionAuth(),!this.resuming&&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}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Ni})}async resume(){var e;if(this.logger.debug(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const n=this.getRTCPeerById(t);if(!n||n.instance.remoteDescription&&!this.resuming)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=zr(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,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),n=await this.vertoExecute({message:r,callID:t});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}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=Ui),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Vi:Wi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear(),this.destroy()}}const Fi=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},zi=({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()}))})),Hi=({x:e,y:t,width:r,height:n})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${n}%`}),qi=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},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()}},Qi=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),Gi=Jr.createAction("swJs/audioSetSpeakerAction"),Ji=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:n}){try{const o=new Map,s=Fi(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return o.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),o.set(this.id,e)):(hr().debug("Remove localOverlay"),o.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:n,localStream:o})=>{hr().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 hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:n,height:o}=Hi(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=Fi();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 n&&!s?(hr().debug("Build myLayer append it"),n.appendChild(a),void(e.domElement=a)):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=Hi(i);hr().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){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=n(Zi,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),o.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*Xi({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,Gi);for(;;){const n=yield Ue([r]);try{if(n.type===r){const r=yield Fe(ti,e,n.payload);t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*Yi({track:e,element:t,speakerId:r,room:n}){Qi({track:e,element:t}),r&&ti(t,r).catch((()=>{})),yield ze(Xi,{element:t,room:n})}function*Zi({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:n}){try{if(qi({element:n,track:r}),n.style.width="100%",n.style.maxHeight="100%",!t)return void e.appendChild(n);if(e.querySelector(".mcuContent"))return void hr().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),hr().debug("MCU readyState 1 >>",n.readyState),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(zi,{element:n})),hr().debug("MCU is ready..");const c=Ki({rootElement:e,video:n,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ea={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ta=Cr(class extends Bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,setMicrophoneVolume:vo.setInputVolumeMember,setInputVolume:vo.setInputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember}),ra=Cr(class extends Bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,setInputVolume:vo.setInputVolumeMember,setMicrophoneVolume:vo.setInputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember}),na=()=>{},oa="video.memberList.updated",sa=_r({event:oa}),ia=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(sa),aa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],ca=e=>aa.includes(e),da=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*ua({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:da({action:r,memberList:t})};yield $e(e,{type:ia,payload:n})}for(;;){const t=yield Ue(e,(({type:e})=>ca(e)));yield ze(r,t)}}const la=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(sa))))(r))return;const{cleanup:n}=((e,t)=>{const r=(e=>Or(aa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,na)}));const n=({members:t})=>{e.emit(oa,{members:t})};return e.on(ia,n),{cleanup:()=>{e.off(ia,n)}}})(t,r);yield ze(ua,{pubSubChannel:e}),t.once("destroy",(()=>{n()}))},ha=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(As.memberPositionWorker,e)},pa=function*(e){hr().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 Ue(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 He(po.getComponent,a.parent_id))&&(yield $e(xn.upsert({id:r.callId,roomId:i.payload.room_id,roomSessionId:i.payload.room_session_id,memberId:a.id})))),hr().trace("childMemberJoinedWorker ended")},ma=Cr(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})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vo.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vo.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vo.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...As.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:la})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:ha,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 pi({audio:!0===r?ea: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=ro({store:this.store,Component:ta})(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:pa,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=ro({store:this.store,Component:ra})(o);s.once("destroy",(()=>{s.emit("room.left"),this._deviceList.delete(s)}));try{return s.runWorker("childMemberJoinedWorker",{worker:pa,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(Gi(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:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,deaf:vo.deafMember,undeaf:vo.undeafMember,setInputVolume:vo.setInputVolumeMember,setOutputVolume:vo.setOutputVolumeMember,setMicrophoneVolume:vo.setInputVolumeMember,setSpeakerVolume:vo.setOutputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember,removeMember:vo.removeMember,removeAllMembers:vo.removeAllMembers,getMembers:vo.getMembers,getLayouts:vo.getLayouts,setLayout:vo.setLayout,setPositions:vo.setPositions,setMemberPosition:vo.setMemberPosition,hideVideoMuted:vo.hideVideoMuted,showVideoMuted:vo.showVideoMuted,getRecordings:vo.getRecordings,startRecording:vo.startRecording,getPlaybacks:vo.getPlaybacks,play:vo.play,setHideVideoMuted:vo.setHideVideoMuted,getMeta:vo.getMeta,setMeta:vo.setMeta,updateMeta:vo.updateMeta,deleteMeta:vo.deleteMeta,getMemberMeta:vo.getMemberMeta,setMemberMeta:vo.setMemberMeta,updateMemberMeta:vo.updateMemberMeta,deleteMemberMeta:vo.deleteMemberMeta,promote:vo.promote,demote:vo.demote,getStreams:vo.getStreams,startStream:vo.startStream}),ga=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:n}=t;for(;;){const e=yield Ue(r,(e=>e.type.startsWith("video-manager.")));yield $e(n,e)}};class fa extends uo{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:ga})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class va extends co{_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){"audio"===s.track.kind&&(o=r(Yi,{track:s.track,element:n,speakerId:e,room:t}))})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(Ji({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},ro({store:c.store,customSagas:c.customSagas,Component:ma})(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=us.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Ss.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=ro({store:e.store,Component:fa})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Jr.reauthAction({token:e}))}}function ya(e){this.message=e}(ya.prototype=new Error).name="InvalidCharacterError";var ba="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new ya("'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 Sa(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(ba(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 ba(t)}}function _a(e){this.message=e}function wa(e,t){if("string"!=typeof e)throw new _a("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Sa(e.split(".")[r]))}catch(e){throw new _a("Invalid token specified: "+e.message)}}(_a.prototype=new Error).name="InvalidTokenError";const ka="callId",Ca=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Ea extends In{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.19.0";constructor(e){let t;try{t=wa(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.info("Hijacking: search protocol for",e),Ca()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.info("Hijacking: persist protocol",e,this.relayProtocol),Ca()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Ca()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.info("Hijacking: persist auth state",t,e),Ca()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.info("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Ca()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Ca()?.removeItem(t),Ca()?.removeItem(ka)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=wa(this.options.token);return`${e?.r}`}catch(e){return""}}}const Ta=e=>{const t={...e,emitter:new Dt},r=no({userOptions:t,SessionConstructor:Ea});return ro({store:r,Component:va})(t)},Pa=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ia=Object.freeze({__proto__:null,ChatMember:us.ChatMember,ChatMessage:us.ChatMessage,Client:function(e){const t=Ta(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,n,o)=>n in r?r[n]:Pa.includes(n)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(n):Reflect.get(e,n,o)})}});const Ma=["getAllowedChannels","subscribe","publish"];var Ra=Object.freeze({__proto__:null,PubSubMessage:Ss.PubSubMessage,Client:function(e){const t=Ta(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,n,o)=>n in r?r[n]:Ma.includes(n)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(n):Reflect.get(e,n,o)})}});async function xa(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zn(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Hn(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const Aa=({baseUrl:e,timeout:t=3e4,...r},n=xa)=>async(o,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Oa({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await n(ja({path:o,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Oa=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(n=r,"string"==typeof n?n:JSON.stringify(n))}:null!=r?{...e,[t]:r}:e;var n}),{}),ja=({path:e,baseUrl:t,searchParams:r})=>{const n=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&n.searchParams.append(e,t)})),n.toString()},La={aspectRatio:{ideal:16/9}},Da=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,p=Ta({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:n,video:!0===o?La:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),Na=["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"],Wa=function(e){const{audio:t=!0,video:r=!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s=!0,stopCameraWhileMuted:i=!0,stopMicrophoneWhileMuted:a=!0,speakerId:c,destinationNumber:d,...u}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const l=Ta(u),h=l.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s,stopCameraWhileMuted:i,stopMicrophoneWhileMuted:a,speakerId:c,destinationNumber:d}),p=!1!==e?.reattach,m={joined:({call_id:e})=>{p&&Ca()?.setItem(ka,e)},init:()=>{if(!p)return;h.on("room.subscribed",m.joined);const e=Ca()?.getItem(ka);e&&(h.options.prevCallId=e)},destroy:()=>{p&&(h.off("room.subscribed",m.joined),Ca()?.removeItem(ka))}};h.once("destroy",(()=>{h.emit("room.left"),m.destroy(),l.disconnect()}));const g={join:e=>new Promise((async(n,o)=>{try{h.attachPreConnectWorkers(),await l.connect();const s=e?.audio??t,i=e?.video??r,a=l._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:n=!0,sendAudio:o,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(s??n),y=Boolean(i??r),b=Boolean(a??n);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return l.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`));hr().debug("Set mediaOptions",c),h.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),h.once("room.subscribed",(e=>{h.attachOnSubscribedWorkers(e),n(h)})),m.init(),await h.join()}catch(e){hr().error("RoomSession Join",e),l.disconnect(),o(e)}}))};return new Proxy(h,{get(e,t,r){if(t in g)return g[t];if(!e.active&&Na.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})};var Va=Object.freeze({__proto__:null,RoomSession:Wa,createRoomObject:Da,joinRoom:e=>Da({...e,autoJoin:!0}),createClient:Ta}),Ua=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",n=Aa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:o}=await n(r),s=async e=>{const{search:t}=new URL(e),{body:o}=await n(`${r}${t}`);return i(o)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(o)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=Aa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:o}=await this.httpClient(`${e}${r}`);return n(o)},n=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return n(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let n,o;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);n=new Wa({token:t.token,...r}),o=e=>new Promise(((t,r)=>(n.on("room.joined",(e=>t(e))),n.join(e).catch((e=>r(e))))));const s={start:o};return new Proxy(n,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new Wa({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}}}),$a=Object.freeze({__proto__:null,getDevices:fi,getCameraDevices:()=>fi("camera"),getMicrophoneDevices:()=>fi("microphone"),getSpeakerDevices:()=>fi("speaker"),getDevicesWithPermissions:mi,getCameraDevicesWithPermissions:()=>mi("camera"),getMicrophoneDevicesWithPermissions:()=>mi("microphone"),getSpeakerDevicesWithPermissions:()=>mi("speaker"),checkPermissions:ci,checkCameraPermissions:di,checkMicrophonePermissions:ui,checkSpeakerPermissions:li,requestPermissions:async e=>{try{const t=await hi(e);ri(t)}catch(e){throw e}},createDeviceWatcher:ki,createCameraDeviceWatcher:()=>ki({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>ki({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>ki({targets:["speaker"]}),supportsMediaDevices:Js,supportsGetUserMedia:()=>"function"==typeof Xs().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Xs().getDisplayMedia,getUserMedia:hi,getDisplayMedia:pi,enumerateDevices:ii,getSupportedConstraints:Ys,supportsMediaOutput:ei,setMediaElementSinkId:ti,stopStream:ri,stopTrack:ni,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Ci(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},hi(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,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=>{hr().error("Error closing the AudioContext",e)})),Ci(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=Ia,e.Fabric=Ua,e.PubSub=Ra,e.Video=Va,e.WebRTC=$a,Object.defineProperty(e,"__esModule",{value:!0})}));
20
+ ***************************************************************************** */const Oi=e=>gr(e.type),ji=function*(e){hr().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");const i=jn.createCatchableSaga((function*(e){const{id:t,method:n,params:o={}}=e.payload,{callID:s,nodeId:i}=o,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${n}'`,o);const c=r.peer;switch(n){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===n?"early":"active"),(null==o?void 0:o.sdp)&&a.onRemoteSdp(o.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,n),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==o?void 0:o.cause,byeCauseCode:null==o?void 0:o.causeCode,redirectDestination:null==o?void 0:o.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,n),node_id:i}});break;case"verto.ping":{const{nodeId:e}=o,t=function(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}(o,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!o.mediaParams){hr().warn("Invalid mediaParams event",o);break}const{audio:e,video:t}=o.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${n}`,o)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield Ue(o,(e=>{var t;return!!Oi(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Li=function*(e){hr().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 Ue(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 $e(xn.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 $e(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Di=function*(e){hr().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 Ue(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield $e(Cn.updateAuthState(i.payload.authorization));const a=yield He(Gs.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),hr().debug("promoteDemoteWorker ended",s)},Ni=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ue([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Wi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Vi=Object.assign(Object.assign({},Wi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Ui={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},$i={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Wi,video:Ui,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Bi extends ao{constructor(e){super(e),this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode: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({},$i),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(Gs.getIceServers)}get component(){return this.select((e=>po.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).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Gs.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new Ai(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 hi(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"),ni(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 - "),ni(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:ji,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Li,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Di,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new Ai(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 Ai(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 this._watchSessionAuth(),!this.resuming&&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}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Ni})}async resume(){var e;if(this.logger.debug(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const n=this.getRTCPeerById(t);if(!n||n.instance.remoteDescription&&!this.resuming)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=zr(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,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),n=await this.vertoExecute({message:r,callID:t});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}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=Ui),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Vi:Wi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const Fi=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},zi=({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()}))})),Hi=({x:e,y:t,width:r,height:n})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${n}%`}),qi=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},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()}},Qi=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),Gi=Jr.createAction("swJs/audioSetSpeakerAction"),Ji=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:n}){try{const o=new Map,s=Fi(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return o.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),o.set(this.id,e)):(hr().debug("Remove localOverlay"),o.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:n,localStream:o})=>{hr().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 hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:n,height:o}=Hi(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=Fi();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 n&&!s?(hr().debug("Build myLayer append it"),n.appendChild(a),void(e.domElement=a)):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=Hi(i);hr().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){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=n(Zi,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),o.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*Xi({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,Gi);for(;;){const n=yield Ue([r]);try{if(n.type===r){const r=yield Fe(ti,e,n.payload);t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*Yi({track:e,element:t,speakerId:r,room:n}){Qi({track:e,element:t}),r&&ti(t,r).catch((()=>{})),yield ze(Xi,{element:t,room:n})}function*Zi({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:n}){try{if(qi({element:n,track:r}),n.style.width="100%",n.style.maxHeight="100%",!t)return void e.appendChild(n);if(e.querySelector(".mcuContent"))return void hr().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),hr().debug("MCU readyState 1 >>",n.readyState),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(zi,{element:n})),hr().debug("MCU is ready..");const c=Ki({rootElement:e,video:n,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ea={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ta=Cr(class extends Bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,setMicrophoneVolume:vo.setInputVolumeMember,setInputVolume:vo.setInputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember}),ra=Cr(class extends Bi{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,setInputVolume:vo.setInputVolumeMember,setMicrophoneVolume:vo.setInputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember}),na=()=>{},oa="video.memberList.updated",sa=_r({event:oa}),ia=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(sa),aa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],ca=e=>aa.includes(e),da=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*ua({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:da({action:r,memberList:t})};yield $e(e,{type:ia,payload:n})}for(;;){const t=yield Ue(e,(({type:e})=>ca(e)));yield ze(r,t)}}const la=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(sa))))(r))return;const{cleanup:n}=((e,t)=>{const r=(e=>Or(aa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,na)}));const n=({members:t})=>{e.emit(oa,{members:t})};return e.on(ia,n),{cleanup:()=>{e.off(ia,n)}}})(t,r);yield ze(ua,{pubSubChannel:e}),t.once("destroy",(()=>{n()}))},ha=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(As.memberPositionWorker,e)},pa=function*(e){hr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:n,onDone:o,onFail:s}=e,{swEventChannel:i}=t,{parentId:a}=n;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield Ue(i,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield He(po.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield $e(xn.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),o?.()):s?.({error:new Error("Unknown parent_id")})}hr().trace("childMemberJoinedWorker ended")},ma=Cr(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})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vo.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vo.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vo.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...As.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:la})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:ha,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:n=!0,audio:o=!1,video:s=!0,layout:i,positions:a}=e,c=await pi({audio:!0===o?ea:o,video:s}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:i,positions:a},u=ro({store:this.store,Component:ta})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{u&&u.active&&u.leave()}))})),u.once("destroy",(()=>{u.emit("room.left"),this._screenShareList.delete(u)}));try{return u.runWorker("childMemberJoinedWorker",{worker:pa,onDone:()=>t(u),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(u),n?await u.join():t(u)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:n=!0,audio:o=!1,video:s=!1}=e;if(!o&&!s)throw new TypeError("At least one of `audio` or `video` must be requested.");const i={...this.options,localStream:void 0,remoteStream:void 0,audio:o,video:s,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=ro({store:this.store,Component:ra})(i);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:pa,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),n?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(Gi(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:vo.audioMuteMember,audioUnmute:vo.audioUnmuteMember,videoMute:vo.videoMuteMember,videoUnmute:vo.videoUnmuteMember,deaf:vo.deafMember,undeaf:vo.undeafMember,setInputVolume:vo.setInputVolumeMember,setOutputVolume:vo.setOutputVolumeMember,setMicrophoneVolume:vo.setInputVolumeMember,setSpeakerVolume:vo.setOutputVolumeMember,setInputSensitivity:vo.setInputSensitivityMember,removeMember:vo.removeMember,removeAllMembers:vo.removeAllMembers,getMembers:vo.getMembers,getLayouts:vo.getLayouts,setLayout:vo.setLayout,setPositions:vo.setPositions,setMemberPosition:vo.setMemberPosition,hideVideoMuted:vo.hideVideoMuted,showVideoMuted:vo.showVideoMuted,getRecordings:vo.getRecordings,startRecording:vo.startRecording,getPlaybacks:vo.getPlaybacks,play:vo.play,setHideVideoMuted:vo.setHideVideoMuted,getMeta:vo.getMeta,setMeta:vo.setMeta,updateMeta:vo.updateMeta,deleteMeta:vo.deleteMeta,getMemberMeta:vo.getMemberMeta,setMemberMeta:vo.setMemberMeta,updateMemberMeta:vo.updateMemberMeta,deleteMemberMeta:vo.deleteMemberMeta,promote:vo.promote,demote:vo.demote,getStreams:vo.getStreams,startStream:vo.startStream}),ga=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:n}=t;for(;;){const e=yield Ue(r,(e=>e.type.startsWith("video-manager.")));yield $e(n,e)}};class fa extends uo{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:ga})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class va extends co{_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){"audio"===s.track.kind&&(o=r(Yi,{track:s.track,element:n,speakerId:e,room:t}))})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(Ji({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},ro({store:c.store,customSagas:c.customSagas,Component:ma})(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=us.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Ss.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=ro({store:e.store,Component:fa})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Jr.reauthAction({token:e}))}}function ya(e){this.message=e}(ya.prototype=new Error).name="InvalidCharacterError";var ba="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new ya("'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 Sa(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(ba(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 ba(t)}}function _a(e){this.message=e}function wa(e,t){if("string"!=typeof e)throw new _a("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Sa(e.split(".")[r]))}catch(e){throw new _a("Invalid token specified: "+e.message)}}(_a.prototype=new Error).name="InvalidTokenError";const ka="callId",Ca=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Ea extends In{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.19.1";constructor(e){let t;try{t=wa(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.info("Hijacking: search protocol for",e),Ca()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.info("Hijacking: persist protocol",e,this.relayProtocol),Ca()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Ca()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.info("Hijacking: persist auth state",t,e),Ca()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.info("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Ca()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Ca()?.removeItem(t),Ca()?.removeItem(ka)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=wa(this.options.token);return`${e?.r}`}catch(e){return""}}}const Ta=e=>{const t={...e,emitter:new Dt},r=no({userOptions:t,SessionConstructor:Ea});return ro({store:r,Component:va})(t)},Pa=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ia=Object.freeze({__proto__:null,ChatMember:us.ChatMember,ChatMessage:us.ChatMessage,Client:function(e){const t=Ta(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,n,o)=>n in r?r[n]:Pa.includes(n)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(n):Reflect.get(e,n,o)})}});const Ma=["getAllowedChannels","subscribe","publish"];var Ra=Object.freeze({__proto__:null,PubSubMessage:Ss.PubSubMessage,Client:function(e){const t=Ta(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,n,o)=>n in r?r[n]:Ma.includes(n)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(n):Reflect.get(e,n,o)})}});async function xa(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zn(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Hn(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const Aa=({baseUrl:e,timeout:t=3e4,...r},n=xa)=>async(o,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Oa({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await n(ja({path:o,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Oa=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(n=r,"string"==typeof n?n:JSON.stringify(n))}:null!=r?{...e,[t]:r}:e;var n}),{}),ja=({path:e,baseUrl:t,searchParams:r})=>{const n=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&n.searchParams.append(e,t)})),n.toString()},La={aspectRatio:{ideal:16/9}},Da=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,p=Ta({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:n,video:!0===o?La:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),Na=["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"],Wa=function(e){const{audio:t=!0,video:r=!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s=!0,stopCameraWhileMuted:i=!0,stopMicrophoneWhileMuted:a=!0,speakerId:c,destinationNumber:d,...u}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const l=Ta(u),h=l.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:s,stopCameraWhileMuted:i,stopMicrophoneWhileMuted:a,speakerId:c,destinationNumber:d}),p=!1!==e?.reattach,m={joined:({call_id:e})=>{p&&Ca()?.setItem(ka,e)},init:()=>{if(!p)return;h.on("room.subscribed",m.joined);const e=Ca()?.getItem(ka);e&&(h.options.prevCallId=e)},destroy:()=>{p&&(h.off("room.subscribed",m.joined),Ca()?.removeItem(ka))}};h.once("destroy",(()=>{h.emit("room.left"),m.destroy(),l.disconnect()})),l.once("session.disconnected",(()=>{h.destroy()}));const g={join:e=>new Promise((async(n,o)=>{try{h.attachPreConnectWorkers(),await l.connect();const s=e?.audio??t,i=e?.video??r,a=l._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:n=!0,sendAudio:o,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(s??n),y=Boolean(i??r),b=Boolean(a??n);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return l.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`));hr().debug("Set mediaOptions",c),h.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),h.once("room.subscribed",(e=>{h.attachOnSubscribedWorkers(e),n(h)})),m.init(),await h.join()}catch(e){hr().error("RoomSession Join",e),l.disconnect(),o(e)}}))};return new Proxy(h,{get(e,t,r){if(t in g)return g[t];if(!e.active&&Na.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})};var Va=Object.freeze({__proto__:null,RoomSession:Wa,createRoomObject:Da,joinRoom:e=>Da({...e,autoJoin:!0}),createClient:Ta}),Ua=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",n=Aa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:o}=await n(r),s=async e=>{const{search:t}=new URL(e),{body:o}=await n(`${r}${t}`);return i(o)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(o)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=Aa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:o}=await this.httpClient(`${e}${r}`);return n(o)},n=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return n(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let n,o;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);n=new Wa({token:t.token,...r}),o=e=>new Promise(((t,r)=>(n.on("room.joined",(e=>t(e))),n.join(e).catch((e=>r(e))))));const s={start:o};return new Proxy(n,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new Wa({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}}}),$a=Object.freeze({__proto__:null,getDevices:fi,getCameraDevices:()=>fi("camera"),getMicrophoneDevices:()=>fi("microphone"),getSpeakerDevices:()=>fi("speaker"),getDevicesWithPermissions:mi,getCameraDevicesWithPermissions:()=>mi("camera"),getMicrophoneDevicesWithPermissions:()=>mi("microphone"),getSpeakerDevicesWithPermissions:()=>mi("speaker"),checkPermissions:ci,checkCameraPermissions:di,checkMicrophonePermissions:ui,checkSpeakerPermissions:li,requestPermissions:async e=>{try{const t=await hi(e);ri(t)}catch(e){throw e}},createDeviceWatcher:ki,createCameraDeviceWatcher:()=>ki({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>ki({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>ki({targets:["speaker"]}),supportsMediaDevices:Js,supportsGetUserMedia:()=>"function"==typeof Xs().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Xs().getDisplayMedia,getUserMedia:hi,getDisplayMedia:pi,enumerateDevices:ii,getSupportedConstraints:Ys,supportsMediaOutput:ei,setMediaElementSinkId:ti,stopStream:ri,stopTrack:ni,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Ci(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},hi(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,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=>{hr().error("Error closing the AudioContext",e)})),Ci(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=Ia,e.Fabric=Ua,e.PubSub=Ra,e.Video=Va,e.WebRTC=$a,Object.defineProperty(e,"__esModule",{value:!0})}));
21
21
  //# sourceMappingURL=index.umd.js.map