@signalwire/js 3.26.0 → 3.27.0-dev.202404301530.94a97d7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/src/BaseComponent.d.ts +10 -0
- package/dist/core/src/BaseComponent.d.ts.map +1 -1
- package/dist/core/src/BaseJWTSession.d.ts.map +1 -1
- package/dist/core/src/BaseSession.d.ts +3 -0
- package/dist/core/src/BaseSession.d.ts.map +1 -1
- package/dist/core/src/RPCMessages/RPCConnect.d.ts +14 -0
- package/dist/core/src/RPCMessages/RPCConnect.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +4 -3
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/memberPosition/workers.d.ts.map +1 -1
- package/dist/core/src/redux/index.d.ts +5 -0
- package/dist/core/src/redux/index.d.ts.map +1 -1
- package/dist/core/src/redux/interfaces.d.ts +2 -0
- package/dist/core/src/redux/interfaces.d.ts.map +1 -1
- package/dist/core/src/redux/utils/useInstanceMap.d.ts +2 -0
- package/dist/core/src/redux/utils/useInstanceMap.d.ts.map +1 -1
- package/dist/core/src/rooms/RoomSessionMember.d.ts +39 -0
- package/dist/core/src/rooms/RoomSessionMember.d.ts.map +1 -0
- package/dist/core/src/rooms/index.d.ts +1 -0
- package/dist/core/src/rooms/index.d.ts.map +1 -1
- package/dist/core/src/rooms/methods.d.ts +2 -2
- package/dist/core/src/rooms/methods.d.ts.map +1 -1
- package/dist/core/src/testUtils.d.ts +8 -0
- package/dist/core/src/testUtils.d.ts.map +1 -1
- package/dist/core/src/types/callSegment.d.ts +21 -0
- package/dist/core/src/types/callSegment.d.ts.map +1 -0
- package/dist/core/src/types/callfabric.d.ts +337 -16
- package/dist/core/src/types/callfabric.d.ts.map +1 -1
- package/dist/core/src/types/conversation.d.ts +24 -0
- package/dist/core/src/types/conversation.d.ts.map +1 -0
- package/dist/core/src/types/index.d.ts +15 -1
- package/dist/core/src/types/index.d.ts.map +1 -1
- package/dist/core/src/types/unified.d.ts +36 -0
- package/dist/core/src/types/unified.d.ts.map +1 -0
- package/dist/core/src/types/utils.d.ts +3 -0
- package/dist/core/src/types/utils.d.ts.map +1 -1
- package/dist/core/src/types/videoMember.d.ts +11 -1
- package/dist/core/src/types/videoMember.d.ts.map +1 -1
- package/dist/core/src/types/videoRoomSession.d.ts +3 -0
- package/dist/core/src/types/videoRoomSession.d.ts.map +1 -1
- package/dist/core/src/utils/index.d.ts +1 -0
- package/dist/core/src/utils/index.d.ts.map +1 -1
- package/dist/core/src/utils/interfaces.d.ts +16 -9
- package/dist/core/src/utils/interfaces.d.ts.map +1 -1
- package/dist/core/src/utils/mapObject.d.ts +7 -0
- package/dist/core/src/utils/mapObject.d.ts.map +1 -0
- package/dist/core/src/utils/mapObject.test.d.ts +2 -0
- package/dist/core/src/utils/mapObject.test.d.ts.map +1 -0
- package/dist/core/src/workers/executeActionWorker.d.ts.map +1 -1
- package/dist/index.esm.js +1352 -527
- package/dist/index.esm.js.map +3 -3
- package/dist/index.js +1448 -642
- package/dist/index.js.map +3 -3
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/js/src/BaseRoomSession.d.ts +6 -4
- package/dist/js/src/BaseRoomSession.d.ts.map +1 -1
- package/dist/js/src/Client.d.ts +1 -0
- package/dist/js/src/Client.d.ts.map +1 -1
- package/dist/js/src/JWTSession.d.ts.map +1 -1
- package/dist/js/src/UnifiedJWTSession.d.ts +16 -0
- package/dist/js/src/UnifiedJWTSession.d.ts.map +1 -0
- package/dist/js/src/fabric/CallFabricBaseRoomSession.d.ts +30 -0
- package/dist/js/src/fabric/CallFabricBaseRoomSession.d.ts.map +1 -0
- package/dist/js/src/fabric/CallSegment.d.ts +26 -0
- package/dist/js/src/fabric/CallSegment.d.ts.map +1 -0
- package/dist/js/src/fabric/Conversation.d.ts +144 -0
- package/dist/js/src/fabric/Conversation.d.ts.map +1 -0
- package/dist/js/src/fabric/ConversationAPI.d.ts +61 -0
- package/dist/js/src/fabric/ConversationAPI.d.ts.map +1 -0
- package/dist/js/src/fabric/HTTPClient.d.ts +45 -27
- package/dist/js/src/fabric/HTTPClient.d.ts.map +1 -1
- package/dist/js/src/fabric/IncomingCallManager.d.ts +14 -0
- package/dist/js/src/fabric/IncomingCallManager.d.ts.map +1 -0
- package/dist/js/src/fabric/SignalWire.d.ts +1 -16
- package/dist/js/src/fabric/SignalWire.d.ts.map +1 -1
- package/dist/js/src/fabric/WSClient.d.ts +23 -28
- package/dist/js/src/fabric/WSClient.d.ts.map +1 -1
- package/dist/js/src/fabric/createHttpClient.d.ts +1 -0
- package/dist/js/src/fabric/createHttpClient.d.ts.map +1 -1
- package/dist/js/src/fabric/index.d.ts +3 -0
- package/dist/js/src/fabric/index.d.ts.map +1 -1
- package/dist/js/src/fabric/types.d.ts +93 -0
- package/dist/js/src/fabric/types.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/callFabricWorker.d.ts +7 -0
- package/dist/js/src/fabric/workers/callFabricWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/callJoinWorker.d.ts +4 -0
- package/dist/js/src/fabric/workers/callJoinWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/callLeftWorker.d.ts +4 -0
- package/dist/js/src/fabric/workers/callLeftWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/callStateWorker.d.ts +4 -0
- package/dist/js/src/fabric/workers/callStateWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/conversationWorker.d.ts +4 -0
- package/dist/js/src/fabric/workers/conversationWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/index.d.ts +6 -0
- package/dist/js/src/fabric/workers/index.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/mappers/unifiedEventsMapper.d.ts +3 -0
- package/dist/js/src/fabric/workers/mappers/unifiedEventsMapper.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/unifiedEventsWatcher.d.ts +7 -0
- package/dist/js/src/fabric/workers/unifiedEventsWatcher.d.ts.map +1 -0
- package/dist/js/src/fabric/workers/unifiedTargetWorker.d.ts +3 -0
- package/dist/js/src/fabric/workers/unifiedTargetWorker.d.ts.map +1 -0
- package/dist/js/src/fabric/{WSClientWorker.d.ts → workers/wsClientWorker.d.ts} +3 -3
- package/dist/js/src/fabric/workers/wsClientWorker.d.ts.map +1 -0
- package/dist/js/src/features/mediaElements/mediaElementsSagas.d.ts.map +1 -1
- package/dist/js/src/index.d.ts +7 -8
- package/dist/js/src/index.d.ts.map +1 -1
- package/dist/js/src/testUtils.d.ts +17 -0
- package/dist/js/src/testUtils.d.ts.map +1 -1
- package/dist/js/src/utils/UnifiedRequestMapper.d.ts +4 -0
- package/dist/js/src/utils/UnifiedRequestMapper.d.ts.map +1 -0
- package/dist/js/src/utils/aspectRatioListener.d.ts +8 -0
- package/dist/js/src/utils/aspectRatioListener.d.ts.map +1 -0
- package/dist/js/src/utils/interfaces.d.ts +3 -1
- package/dist/js/src/utils/interfaces.d.ts.map +1 -1
- package/dist/js/src/utils/makeQueryParamsUrl.d.ts +9 -0
- package/dist/js/src/utils/makeQueryParamsUrl.d.ts.map +1 -0
- package/dist/js/src/utils/paginatedResult.d.ts +44 -0
- package/dist/js/src/utils/paginatedResult.d.ts.map +1 -0
- package/dist/js/src/utils/videoElement.d.ts +4 -0
- package/dist/js/src/utils/videoElement.d.ts.map +1 -1
- package/dist/js/src/video/videoMemberWorker.d.ts +6 -0
- package/dist/js/src/video/videoMemberWorker.d.ts.map +1 -0
- package/dist/js/src/video/videoRoomWorker.d.ts +4 -0
- package/dist/js/src/video/videoRoomWorker.d.ts.map +1 -0
- package/dist/js/src/video/videoWorker.d.ts.map +1 -1
- package/dist/js/src/video/videoWorkerUnifiedEventing.d.ts +4 -0
- package/dist/js/src/video/videoWorkerUnifiedEventing.d.ts.map +1 -0
- package/dist/js/src/video/workers.d.ts +5 -0
- package/dist/js/src/video/workers.d.ts.map +1 -1
- package/dist/js/tsconfig.build.tsbuildinfo +1 -1
- package/dist/webrtc/src/BaseConnection.d.ts.map +1 -1
- package/dist/webrtc/src/RTCPeer.d.ts.map +1 -1
- package/dist/webrtc/src/workers/roomSubscribedWorker.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/BaseRoomSession.test.ts +3 -2
- package/src/BaseRoomSession.ts +8 -2
- package/src/Client.ts +10 -2
- package/src/JWTSession.test.ts +2 -2
- package/src/JWTSession.ts +1 -1
- package/src/UnifiedJWTSession.ts +78 -0
- package/src/fabric/CallFabricBaseRoomSession.test.ts +460 -0
- package/src/fabric/CallFabricBaseRoomSession.ts +269 -0
- package/src/fabric/CallSegment.ts +83 -0
- package/src/fabric/Conversation.test.ts +257 -0
- package/src/fabric/Conversation.ts +150 -0
- package/src/fabric/ConversationAPI.ts +44 -0
- package/src/fabric/HTTPClient.test.ts +23 -18
- package/src/fabric/HTTPClient.ts +52 -55
- package/src/fabric/IncomingCallManager.test.ts +245 -0
- package/src/fabric/IncomingCallManager.ts +89 -0
- package/src/fabric/SignalWire.ts +20 -17
- package/src/fabric/WSClient.ts +153 -117
- package/src/fabric/createHttpClient.ts +2 -0
- package/src/fabric/index.ts +3 -0
- package/src/fabric/types.ts +104 -0
- package/src/fabric/workers/callFabricWorker.ts +121 -0
- package/src/fabric/workers/callJoinWorker.ts +90 -0
- package/src/fabric/workers/callLeftWorker.ts +47 -0
- package/src/fabric/workers/callStateWorker.ts +39 -0
- package/src/fabric/workers/conversationWorker.ts +41 -0
- package/src/fabric/workers/index.ts +5 -0
- package/src/fabric/workers/mappers/unifiedEventsMapper.ts +54 -0
- package/src/fabric/workers/unifiedEventsWatcher.ts +75 -0
- package/src/fabric/workers/unifiedTargetWorker.ts +96 -0
- package/src/fabric/{WSClientWorker.ts → workers/wsClientWorker.ts} +14 -18
- package/src/features/mediaElements/mediaElementsSagas.ts +9 -15
- package/src/index.ts +25 -9
- package/src/testUtils.ts +83 -0
- package/src/utils/UnifiedRequestMapper.ts +149 -0
- package/src/utils/aspectRatioListener.ts +40 -0
- package/src/utils/interfaces.ts +3 -0
- package/src/utils/makeQueryParamsUrl.ts +14 -0
- package/src/utils/paginatedResult.ts +34 -0
- package/src/utils/videoElement.ts +4 -0
- package/src/video/videoMemberWorker.ts +107 -0
- package/src/video/videoRoomWorker.ts +103 -0
- package/src/video/videoWorker.ts +8 -3
- package/src/video/videoWorkerUnifiedEventing.ts +95 -0
- package/src/video/workers.ts +5 -0
- package/dist/js/src/fabric/WSClientWorker.d.ts.map +0 -1
package/dist/index.umd.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SignalWire JS SDK v3.
|
|
2
|
+
* SignalWire JS SDK v3.27.0-dev.202404301530.94a97d7.0 (https://signalwire.com)
|
|
3
3
|
* Copyright 2018-2024 SignalWire
|
|
4
4
|
* Licensed under MIT(https://github.com/signalwire/signalwire-js/blob/main/LICENSE)
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,o;r=t,o=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"];function n(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function i(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(t,r){for(var n=0;n<o.length;n++){var i=o[n];this[i]=n<t?e:this.methodFactory(i,t,r)}this.log=this.debug}function a(e,r,o){return function(){typeof console!==t&&(s.call(this,r,o),this[e].apply(this,arguments))}}function c(o,s,c){return function(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?i:void 0!==console[o]?n(console,o):void 0!==console.log?n(console,"log"):e)}(o)||a.apply(this,arguments)}function d(e,r,n){var i,a=this;r=null==r?"WARN":r;var d="loglevel";function l(){var e;if(typeof window!==t&&d){try{e=window.localStorage[d]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,o=r.indexOf(encodeURIComponent(d)+"=");-1!==o&&(e=/^([^;]+)/.exec(r.slice(o))[1])}catch(e){}return void 0===a.levels[e]&&(e=void 0),e}}"string"==typeof e?d+=":"+e:"symbol"==typeof e&&(d=void 0),a.name=e,a.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},a.methodFactory=n||c,a.getLevel=function(){return i},a.setLevel=function(r,n){if("string"==typeof r&&void 0!==a.levels[r.toUpperCase()]&&(r=a.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=a.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(i=r,!1!==n&&function(e){var r=(o[e]||"silent").toUpperCase();if(typeof window!==t&&d){try{return void(window.localStorage[d]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"="+r+";"}catch(e){}}}(r),s.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,l()||a.setLevel(e,!1)},a.resetLevel=function(){a.setLevel(r,!1),function(){if(typeof window!==t&&d){try{return void window.localStorage.removeItem(d)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},a.enableAll=function(e){a.setLevel(a.levels.TRACE,e)},a.disableAll=function(e){a.setLevel(a.levels.SILENT,e)};var u=l();null==u&&(u=r),a.setLevel(u,!1)}var l=new d,u={};l.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=u[e];return t||(t=u[e]=new d(e,l.getLevel(),l.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return l.noConflict=function(){return typeof window!==t&&window.log===l&&(window.log=h),l},l.getLoggers=function(){return u},l.default=l,l},e.exports?e.exports=o():r.log=o()}(r);var o=r.exports;let n;const i=new Uint8Array(16);function s(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(i)}var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));function d(e,t=0){return(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase()}const l="6ba7b810-9dad-11d1-80b4-00c04fd430c8",u="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function h(e,t,r){function o(e,o,n,i){var s;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof o&&(o=function(e){if(!function(e){return"string"==typeof e&&a.test(e)}(e))throw TypeError("Invalid UUID");let t;const r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}(o)),16!==(null===(s=o)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(o),c.set(e,o.length),c=r(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,n){i=i||0;for(let e=0;e<16;++e)n[i+e]=c[e];return n}return d(c)}try{o.name=e}catch(e){}return o.DNS=l,o.URL=u,o}function p(e){return 14+(e+64>>>9<<4)+1}function m(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function g(e,t,r,o,n,i){return m((s=m(m(t,e),m(o,i)))<<(a=n)|s>>>32-a,r);var s,a}function f(e,t,r,o,n,i,s){return g(t&r|~t&o,e,t,n,i,s)}function v(e,t,r,o,n,i,s){return g(t&o|r&~o,e,t,n,i,s)}function y(e,t,r,o,n,i,s){return g(t^r^o,e,t,n,i,s)}function b(e,t,r,o,n,i,s){return g(r^(t|~o),e,t,n,i,s)}h("v3",48,(function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){const t=[],r=32*e.length,o="0123456789abcdef";for(let n=0;n<r;n+=8){const r=e[n>>5]>>>n%32&255,i=parseInt(o.charAt(r>>>4&15)+o.charAt(15&r),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[p(t)-1]=t;let r=1732584193,o=-271733879,n=-1732584194,i=271733878;for(let t=0;t<e.length;t+=16){const s=r,a=o,c=n,d=i;r=f(r,o,n,i,e[t],7,-680876936),i=f(i,r,o,n,e[t+1],12,-389564586),n=f(n,i,r,o,e[t+2],17,606105819),o=f(o,n,i,r,e[t+3],22,-1044525330),r=f(r,o,n,i,e[t+4],7,-176418897),i=f(i,r,o,n,e[t+5],12,1200080426),n=f(n,i,r,o,e[t+6],17,-1473231341),o=f(o,n,i,r,e[t+7],22,-45705983),r=f(r,o,n,i,e[t+8],7,1770035416),i=f(i,r,o,n,e[t+9],12,-1958414417),n=f(n,i,r,o,e[t+10],17,-42063),o=f(o,n,i,r,e[t+11],22,-1990404162),r=f(r,o,n,i,e[t+12],7,1804603682),i=f(i,r,o,n,e[t+13],12,-40341101),n=f(n,i,r,o,e[t+14],17,-1502002290),o=f(o,n,i,r,e[t+15],22,1236535329),r=v(r,o,n,i,e[t+1],5,-165796510),i=v(i,r,o,n,e[t+6],9,-1069501632),n=v(n,i,r,o,e[t+11],14,643717713),o=v(o,n,i,r,e[t],20,-373897302),r=v(r,o,n,i,e[t+5],5,-701558691),i=v(i,r,o,n,e[t+10],9,38016083),n=v(n,i,r,o,e[t+15],14,-660478335),o=v(o,n,i,r,e[t+4],20,-405537848),r=v(r,o,n,i,e[t+9],5,568446438),i=v(i,r,o,n,e[t+14],9,-1019803690),n=v(n,i,r,o,e[t+3],14,-187363961),o=v(o,n,i,r,e[t+8],20,1163531501),r=v(r,o,n,i,e[t+13],5,-1444681467),i=v(i,r,o,n,e[t+2],9,-51403784),n=v(n,i,r,o,e[t+7],14,1735328473),o=v(o,n,i,r,e[t+12],20,-1926607734),r=y(r,o,n,i,e[t+5],4,-378558),i=y(i,r,o,n,e[t+8],11,-2022574463),n=y(n,i,r,o,e[t+11],16,1839030562),o=y(o,n,i,r,e[t+14],23,-35309556),r=y(r,o,n,i,e[t+1],4,-1530992060),i=y(i,r,o,n,e[t+4],11,1272893353),n=y(n,i,r,o,e[t+7],16,-155497632),o=y(o,n,i,r,e[t+10],23,-1094730640),r=y(r,o,n,i,e[t+13],4,681279174),i=y(i,r,o,n,e[t],11,-358537222),n=y(n,i,r,o,e[t+3],16,-722521979),o=y(o,n,i,r,e[t+6],23,76029189),r=y(r,o,n,i,e[t+9],4,-640364487),i=y(i,r,o,n,e[t+12],11,-421815835),n=y(n,i,r,o,e[t+15],16,530742520),o=y(o,n,i,r,e[t+2],23,-995338651),r=b(r,o,n,i,e[t],6,-198630844),i=b(i,r,o,n,e[t+7],10,1126891415),n=b(n,i,r,o,e[t+14],15,-1416354905),o=b(o,n,i,r,e[t+5],21,-57434055),r=b(r,o,n,i,e[t+12],6,1700485571),i=b(i,r,o,n,e[t+3],10,-1894986606),n=b(n,i,r,o,e[t+10],15,-1051523),o=b(o,n,i,r,e[t+1],21,-2054922799),r=b(r,o,n,i,e[t+8],6,1873313359),i=b(i,r,o,n,e[t+15],10,-30611744),n=b(n,i,r,o,e[t+6],15,-1560198380),o=b(o,n,i,r,e[t+13],21,1309151649),r=b(r,o,n,i,e[t+4],6,-145523070),i=b(i,r,o,n,e[t+11],10,-1120210379),n=b(n,i,r,o,e[t+2],15,718787259),o=b(o,n,i,r,e[t+9],21,-343485551),r=m(r,s),o=m(o,a),n=m(n,c),i=m(i,d)}return[r,o,n,i]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(p(t));for(let o=0;o<t;o+=8)r[o>>5]|=(255&e[o/8])<<o%32;return r}(e),8*e.length))}));var _={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function w(e,t,r){if(_.randomUUID&&!t&&!e)return _.randomUUID();const o=(e=e||{}).random||(e.rng||s)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=o[e];return t}return d(o)}function S(e,t,r,o){switch(e){case 0:return t&r^~t&o;case 1:case 3:return t^r^o;case 2:return t&r^t&o^r&o}}function k(e,t){return e<<t|e>>>32-t}function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function E(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==C(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===C(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?I(Object(r),!0).forEach((function(t){E(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):I(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function T(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}h("v5",80,(function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const o=Math.ceil((e.length/4+2)/16),n=new Array(o);for(let t=0;t<o;++t){const r=new Uint32Array(16);for(let o=0;o<16;++o)r[o]=e[64*t+4*o]<<24|e[64*t+4*o+1]<<16|e[64*t+4*o+2]<<8|e[64*t+4*o+3];n[t]=r}n[o-1][14]=8*(e.length-1)/Math.pow(2,32),n[o-1][14]=Math.floor(n[o-1][14]),n[o-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<o;++e){const o=new Uint32Array(80);for(let t=0;t<16;++t)o[t]=n[e][t];for(let e=16;e<80;++e)o[e]=k(o[e-3]^o[e-8]^o[e-14]^o[e-16],1);let i=r[0],s=r[1],a=r[2],c=r[3],d=r[4];for(let e=0;e<80;++e){const r=Math.floor(e/20),n=k(i,5)+S(r,s,a,c)+d+t[r]+o[e]>>>0;d=c,c=a,a=k(s,30)>>>0,s=i,i=n}r[0]=r[0]+i>>>0,r[1]=r[1]+s>>>0,r[2]=r[2]+a>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+d>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var M="function"==typeof Symbol&&Symbol.observable||"@@observable",R=function(){return Math.random().toString(36).substring(7).split("").join(".")},x={INIT:"@@redux/INIT"+R(),REPLACE:"@@redux/REPLACE"+R(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+R()}};function O(e,t,r){var o;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(T(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(T(1));return r(O)(e,t)}if("function"!=typeof e)throw new Error(T(2));var n=e,i=t,s=[],a=s,c=!1;function d(){a===s&&(a=s.slice())}function l(){if(c)throw new Error(T(3));return i}function u(e){if("function"!=typeof e)throw new Error(T(4));if(c)throw new Error(T(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(T(6));t=!1,d();var r=a.indexOf(e);a.splice(r,1),s=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(T(7));if(void 0===e.type)throw new Error(T(8));if(c)throw new Error(T(9));try{c=!0,i=n(i,e)}finally{c=!1}for(var t=s=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:x.INIT}),(o={dispatch:h,subscribe:u,getState:l,replaceReducer:function(e){if("function"!=typeof e)throw new Error(T(10));n=e,h({type:x.REPLACE})}})[M]=function(){var e,t=u;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(T(11));function r(){e.next&&e.next(l())}return r(),{unsubscribe:t(r)}}})[M]=function(){return this},e},o}function A(e){for(var t=Object.keys(e),r={},o=0;o<t.length;o++){var n=t[o];"function"==typeof e[n]&&(r[n]=e[n])}var i,s=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:x.INIT}))throw new Error(T(12));if(void 0===r(void 0,{type:x.PROBE_UNKNOWN_ACTION()}))throw new Error(T(13))}))}(r)}catch(e){i=e}return function(e,t){if(void 0===e&&(e={}),i)throw i;for(var o=!1,n={},a=0;a<s.length;a++){var c=s[a],d=e[c],l=(0,r[c])(d,t);if(void 0===l)throw new Error(T(14));n[c]=l,o=o||l!==d}return(o=o||s.length!==Object.keys(e).length)?n:e}}function j(e,t){return function(){return t(e.apply(this,arguments))}}function L(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function D(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),o=function(){throw new Error(T(15))},n={getState:r.getState,dispatch:function(){return o.apply(void 0,arguments)}},i=t.map((function(e){return e(n)}));return o=L.apply(void 0,i)(r.dispatch),P(P({},r),{},{dispatch:o})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:x,applyMiddleware:D,bindActionCreators:function(e,t){if("function"==typeof e)return j(e,t);if("object"!=typeof e||null===e)throw new Error(T(16));var r={};for(var o in e){var n=e[o];"function"==typeof n&&(r[o]=j(n,t))}return r},combineReducers:A,compose:L,createStore:O,legacy_createStore:O}),N=function(e){return"@@redux-saga/"+e},V=N("CANCEL_PROMISE"),U=N("CHANNEL_END"),$=N("IO"),B=N("MATCH"),z=N("MULTICAST"),H=N("SAGA_ACTION"),F=N("SELF_CANCELLATION"),q=N("TASK"),K=N("TASK_CANCEL"),J=N("TERMINATE"),G=N("LOCATION");function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},Q.apply(this,arguments)}var X=function(e){return null==e},Y=function(e){return null!=e},Z=function(e){return"function"==typeof e},ee=function(e){return"string"==typeof e},te=Array.isArray,re=function(e){return e&&Z(e.then)},oe=function(e){return e&&Z(e.next)&&Z(e.throw)},ne=function e(t){return t&&(ee(t)||ae(t)||Z(t)||te(t)&&t.every(e))},ie=function(e){return e&&Z(e.take)&&Z(e.close)},se=function(e){return Z(e)&&e.hasOwnProperty("toString")},ae=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},ce=function(e){return ie(e)&&e[z]},de=function(e){return function(){return!0}}(),le=function(){},ue=function(e){return e},he=function(e,t){Q(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))},pe=function(e,t){var r;return(r=[]).concat.apply(r,t.map(e))};function me(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function ge(e){var t=!1;return function(){t||(t=!0,e())}}var fe=function(e){throw e},ve=function(e){return{value:e,done:!0}};function ye(e,t,r){void 0===t&&(t=fe),void 0===r&&(r="iterator");var o={meta:{name:r},next:e,throw:t,return:ve,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function be(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var _e=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},Se=function(e){return e===J},ke=function(e){return e===K},Ce=function(e){return Se(e)||ke(e)};function Ee(e,t){var r,o=Object.keys(e),n=o.length,i=0,s=te(e)?_e(n):{},a={};return o.forEach((function(e){var o=function(o,a){r||(a||Ce(o)?(t.cancel(),t(o,a)):(s[e]=o,++i===n&&(r=!0,t(s))))};o.cancel=le,a[e]=o})),t.cancel=function(){r||(r=!0,o.forEach((function(e){return a[e].cancel()})))},a}function Ie(e){return{name:e.name||"anonymous",location:Pe(e)}}function Pe(e){return e[G]}var Te={isEmpty:de,put:le,take:le},Me=function(){return Te},Re=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),o=0,n=0,i=0,s=function(){if(0!=o){var t=r[i];return r[i]=null,o--,i=(i+1)%e,t}},a=function(){for(var e=[];o;)e.push(s());return e};return{isEmpty:function(){return 0==o},put:function(t){var s;o<e||(s=2*e,r=a(),o=r.length,n=r.length,i=0,r.length=s,e=s),function(t){r[n]=t,n=(n+1)%e,o++}(t)},take:s,flush:a}}(e)},xe="TAKE",Oe="PUT",Ae="ALL",je="CALL",Le="FORK",De="SELECT",We="CANCELLED",Ne=function(e,t){var r;return(r={})[$]=!0,r.combinator=!1,r.type=e,r.payload=t,r},Ve=function(e){return Ne(Le,Q({},e.payload,{detached:!0}))};function Ue(e,t){return void 0===e&&(e="*"),ne(e)?(Y(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ne(xe,{pattern:e})):ce(e)&&Y(t)&&ne(t)?Ne(xe,{channel:e,pattern:t}):ie(e)?(Y(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ne(xe,{channel:e})):void 0}function $e(e,t){return X(t)&&(t=e,e=void 0),Ne(Oe,{channel:e,action:t})}function Be(e,t){var r,o=null;return Z(e)?r=e:(te(e)?(o=e[0],r=e[1]):(o=e.context,r=e.fn),o&&ee(r)&&Z(o[r])&&(r=o[r])),{context:o,fn:r,args:t}}function ze(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(je,Be(e,r))}function He(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(Le,Be(e,r))}function Fe(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ve(He.apply(void 0,[e].concat(r)))}function qe(e){void 0===e&&(e=ue);for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return Ne(De,{selector:e,args:r})}function Ke(){return Ne(We,{})}var Je=[],Ge=0;function Qe(e){try{Ze(),e()}finally{et()}}function Xe(e){Je.push(e),Ge||(Ze(),tt())}function Ye(e){try{return Ze(),e()}finally{tt()}}function Ze(){Ge++}function et(){Ge--}function tt(){var e;for(et();!Ge&&void 0!==(e=Je.shift());)Qe(e)}var rt=function(e){return function(t){return e.some((function(e){return at(e)(t)}))}},ot=function(e){return function(t){return e(t)}},nt=function(e){return function(t){return t.type===String(e)}},it=function(e){return function(t){return t.type===e}},st=function(){return de};function at(e){var t="*"===e?st:ee(e)?nt:te(e)?rt:se(e)?nt:Z(e)?ot:ae(e)?it:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var ct={type:U},dt=function(e){return e&&e.type===U};function lt(e){void 0===e&&(e=Re());var t=!1,r=[];return{take:function(o){t&&e.isEmpty()?o(ct):e.isEmpty()?(r.push(o),o.cancel=function(){me(r,o)}):o(e.take())},put:function(o){if(!t){if(0===r.length)return e.put(o);r.shift()(o)}},flush:function(r){t&&e.isEmpty()?r(ct):r(e.flush())},close:function(){if(!t){t=!0;var e=r;r=[];for(var o=0,n=e.length;o<n;o++)(0,e[o])(ct)}}}}function ut(e,t){void 0===t&&(t=Me());var r,o=!1,n=lt(t),i=function(){o||(o=!0,Z(r)&&r(),n.close())};return r=ge(r=e((function(e){dt(e)?i():n.put(e)}))),o&&r(),{take:n.take,flush:n.flush,close:i}}function ht(){var e,t=!1,r=[],o=r,n=function(){o===r&&(o=r.slice())},i=function(){t=!0;var e=r=o;o=[],e.forEach((function(e){e(ct)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(dt(e))i();else for(var n=r=o,s=0,a=n.length;s<a;s++){var c=n[s];c[B](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(ct):(e[B]=r,n(),o.push(e),e.cancel=ge((function(){n(),me(o,e)})))},e.close=i,e}function pt(){var e=ht(),t=e.put;return e.put=function(e){e[H]?t(e):Xe((function(){t(e)}))},e}var mt=0,gt=1,ft=2,vt=3;function yt(e,t){var r=e[V];Z(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var bt,_t=0,wt=function(){return++_t};function St(e){e.isRunning()&&e.cancel()}var kt=((bt={})[xe]=function(e,t,r){var o=t.channel,n=void 0===o?e.channel:o,i=t.pattern,s=t.maybe,a=function(e){e instanceof Error?r(e,!0):!dt(e)||s?r(e):r(J)};try{n.take(a,Y(i)?at(i):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},bt[Oe]=function(e,t,r){var o=t.channel,n=t.action,i=t.resolve;Xe((function(){var t;try{t=(o?o.put:e.dispatch)(n)}catch(e){return void r(e,!0)}i&&re(t)?yt(t,r):r(t)}))},bt[Ae]=function(e,t,r,o){var n=o.digestEffect,i=_t,s=Object.keys(t);if(0!==s.length){var a=Ee(t,r);s.forEach((function(e){n(t[e],i,a[e],e)}))}else r(te(t)?[]:{})},bt.RACE=function(e,t,r,o){var n=o.digestEffect,i=_t,s=Object.keys(t),a=te(t)?_e(s.length):{},c={},d=!1;s.forEach((function(e){var t=function(t,o){d||(o||Ce(t)?(r.cancel(),r(t,o)):(r.cancel(),d=!0,a[e]=t,r(a)))};t.cancel=le,c[e]=t})),r.cancel=function(){d||(d=!0,s.forEach((function(e){return c[e].cancel()})))},s.forEach((function(e){d||n(t[e],i,c[e],e)}))},bt[je]=function(e,t,r,o){var n=t.context,i=t.fn,s=t.args,a=o.task;try{var c=i.apply(n,s);if(re(c))return void yt(c,r);if(oe(c))return void At(e,c,a.context,_t,Ie(i),!1,r);r(c)}catch(e){r(e,!0)}},bt.CPS=function(e,t,r){var o=t.context,n=t.fn,i=t.args;try{var s=function(e,t){X(e)?r(t):r(e,!0)};n.apply(o,i.concat(s)),s.cancel&&(r.cancel=s.cancel)}catch(e){r(e,!0)}},bt[Le]=function(e,t,r,o){var n=t.fn,i=t.detached,s=o.task,a=function(e){var t=e.context,r=e.fn,o=e.args;try{var n=r.apply(t,o);if(oe(n))return n;var i=!1;return ye((function(e){return i?{value:e,done:!0}:(i=!0,{value:n,done:!re(n)})}))}catch(e){return ye((function(){throw e}))}}({context:t.context,fn:n,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Ie(t)}(a,n);Ye((function(){var t=At(e,a,s.context,_t,c,i,void 0);i?r(t):t.isRunning()?(s.queue.addTask(t),r(t)):t.isAborted()?s.queue.abort(t.error()):r(t)}))},bt.JOIN=function(e,t,r,o){var n=o.task,i=function(e,t){if(e.isRunning()){var r={task:n,cb:t};t.cancel=function(){e.isRunning()&&me(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(te(t)){if(0===t.length)return void r([]);var s=Ee(t,r);t.forEach((function(e,t){i(e,s[t])}))}else i(t,r)},bt.CANCEL=function(e,t,r,o){t===F?St(o.task):te(t)?t.forEach(St):St(t),r()},bt[De]=function(e,t,r){var o=t.selector,n=t.args;try{r(o.apply(void 0,[e.getState()].concat(n)))}catch(e){r(e,!0)}},bt.ACTION_CHANNEL=function(e,t,r){var o=t.pattern,n=lt(t.buffer),i=at(o),s=function t(r){dt(r)||e.channel.take(t,i),n.put(r)},a=n.close;n.close=function(){s.cancel(),a()},e.channel.take(s,i),r(n)},bt[We]=function(e,t,r,o){r(o.task.isCancelled())},bt.FLUSH=function(e,t,r){t.flush(r)},bt.GET_CONTEXT=function(e,t,r,o){r(o.task.context[t])},bt.SET_CONTEXT=function(e,t,r,o){he(o.task.context,t),r()},bt);function Ct(e,t){return e+"?"+t}function Et(e){var t=e.name,r=e.location;return r?t+" "+Ct(r.fileName,r.lineNumber):t}function It(e){var t=pe((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var Pt=null,Tt=[],Mt=function(e){e.crashedEffect=Pt,Tt.push(e)},Rt=function(){Pt=null,Tt.length=0},xt=function(e){Pt=e},Ot=function(){var e,t=Tt[0],r=Tt.slice(1),o=t.crashedEffect?(e=Pe(t.crashedEffect))?e.code+" "+Ct(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+Et(t.meta)+(o?" \n when executing effect "+o:"")].concat(r.map((function(e){return" created by "+Et(e.meta)})),[It(Tt)]).join("\n")};function At(e,t,r,o,n,i,s){var a=e.finalizeRunEffect((function(t,r,o){re(t)?yt(t,o):oe(t)?At(e,t,d.context,r,n,!1,o):t&&t[$]?(0,kt[t.type])(e,t.payload,o,l):o(t)}));u.cancel=le;var c={meta:n,cancel:function(){c.status===mt&&(c.status=gt,u(K))},status:mt},d=function(e,t,r,o,n,i,s){var a;void 0===s&&(s=le);var c,d,l=mt,u=null,h=[],p=Object.create(r),m=function(e,t,r){var o,n=[],i=!1;function s(e){h.push.apply(h,m.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){n.push(t),t.cont=function(a,c){i||(me(n,t),t.cont=le,c?s(a):(t===e&&(o=a),n.length||(i=!0,r(o))))}}function c(){i||(i=!0,n.forEach((function(e){e.cont=le,e.cancel()})),n=[])}return a(e),{addTask:a,cancelAll:c,abort:s,getTasks:function(){return n}}}(t,0,g);function g(t,r){if(r){if(l=ft,Mt({meta:n,cancelledTasks:h}),f.isRoot){var o=Ot();Rt(),e.onError(t,{sagaStack:o})}d=t,u&&u.reject(t)}else t===K?l=gt:l!==gt&&(l=vt),c=t,u&&u.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[q]=!0,a.id=o,a.meta=n,a.isRoot=i,a.context=p,a.joiners=[],a.queue=m,a.cancel=function(){l===mt&&(l=gt,m.cancelAll(),g(K,!1))},a.cont=s,a.end=g,a.setContext=function(e){he(p,e)},a.toPromise=function(){return u||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),u=e,l===ft?u.reject(d):l!==mt&&u.resolve(c)),u.promise;var e},a.isRunning=function(){return l===mt},a.isCancelled=function(){return l===gt||l===mt&&t.status===gt},a.isAborted=function(){return l===ft},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,o,n,i,s),l={task:d,digestEffect:h};return s&&(s.cancel=d.cancel),u(),d;function u(e,r){try{var n;r?(n=t.throw(e),Rt()):ke(e)?(c.status=gt,u.cancel(),n=Z(t.return)?t.return(K):{done:!0,value:K}):n=Se(e)?Z(t.return)?t.return():{done:!0}:t.next(e),n.done?(c.status!==gt&&(c.status=vt),c.cont(n.value)):h(n.value,o,u)}catch(e){if(c.status===gt)throw e;c.status=ft,c.cont(e,!0)}}function h(t,r,o,n){void 0===n&&(n="");var i,s=wt();function c(r,n){i||(i=!0,o.cancel=le,e.sagaMonitor&&(n?e.sagaMonitor.effectRejected(s,r):e.sagaMonitor.effectResolved(s,r)),n&&xt(t),o(r,n))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:s,parentEffectId:r,label:n,effect:t}),c.cancel=le,o.cancel=function(){i||(i=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(s))},a(t,s,c)}}function jt(e,t){for(var r=e.channel,o=void 0===r?pt():r,n=e.dispatch,i=e.getState,s=e.context,a=void 0===s?{}:s,c=e.sagaMonitor,d=e.effectMiddlewares,l=e.onError,u=void 0===l?be:l,h=arguments.length,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=wt();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=L.apply(void 0,d);g=function(e){return function(t,r,o){return y((function(t){return e(t,r,o)}))(t)}}}else g=ue;var b={channel:o,dispatch:we(n),getState:i,sagaMonitor:c,onError:u,finalizeRunEffect:g};return Ye((function(){var e=At(b,f,a,v,Ie(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function Lt(e){var t,r=void 0===e?{}:e,o=r.context,n=void 0===o?{}:o,i=r.channel,s=void 0===i?pt():i,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)t.indexOf(r=i[o])>=0||(n[r]=e[r]);return n}(r,["context","channel","sagaMonitor"]);function d(e){return t=jt.bind(null,Q({},c,{context:n,channel:s,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return s.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){he(n,e)},d}var Dt={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,r="~";function o(){}function n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function i(e,t,o,i,s){if("function"!=typeof o)throw new TypeError("The listener must be a function");var a=new n(o,i||e,s),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new o:delete e._events[t]}function a(){this._events=new o,this._eventsCount=0}Object.create&&(o.prototype=Object.create(null),(new o).__proto__||(r=!1)),a.prototype.eventNames=function(){var e,o,n=[];if(0===this._eventsCount)return n;for(o in e=this._events)t.call(e,o)&&n.push(r?o.slice(1):o);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},a.prototype.listeners=function(e){var t=this._events[r?r+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var o=0,n=t.length,i=new Array(n);o<n;o++)i[o]=t[o].fn;return i},a.prototype.listenerCount=function(e){var t=this._events[r?r+e:e];return t?t.fn?1:t.length:0},a.prototype.emit=function(e,t,o,n,i,s){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,l=this._events[a],u=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),u){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,o),!0;case 4:return l.fn.call(l.context,t,o,n),!0;case 5:return l.fn.call(l.context,t,o,n,i),!0;case 6:return l.fn.call(l.context,t,o,n,i,s),!0}for(d=1,c=new Array(u-1);d<u;d++)c[d-1]=arguments[d];l.fn.apply(l.context,c)}else{var h,p=l.length;for(d=0;d<p;d++)switch(l[d].once&&this.removeListener(e,l[d].fn,void 0,!0),u){case 1:l[d].fn.call(l[d].context);break;case 2:l[d].fn.call(l[d].context,t);break;case 3:l[d].fn.call(l[d].context,t,o);break;case 4:l[d].fn.call(l[d].context,t,o,n);break;default:if(!c)for(h=1,c=new Array(u-1);h<u;h++)c[h-1]=arguments[h];l[d].fn.apply(l[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,o,n){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return s(this,i),this;var a=this._events[i];if(a.fn)a.fn!==t||n&&!a.once||o&&a.context!==o||s(this,i);else{for(var c=0,d=[],l=a.length;c<l;c++)(a[c].fn!==t||n&&!a[c].once||o&&a[c].context!==o)&&d.push(a[c]);d.length?this._events[i]=1===d.length?d[0]:d:s(this,i)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&s(this,t):(this._events=new o,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=r,a.EventEmitter=a,e.exports=a}(Dt);var Wt=Dt.exports,Nt=Object.defineProperty,Vt=Object.defineProperties,Ut=Object.getOwnPropertyDescriptor,$t=Object.getOwnPropertyDescriptors,Bt=Object.getOwnPropertyNames,zt=Object.getOwnPropertySymbols,Ht=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable,qt=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kt=(e,t)=>{for(var r in t||(t={}))Ht.call(t,r)&&qt(e,r,t[r]);if(zt)for(var r of zt(t))Ft.call(t,r)&&qt(e,r,t[r]);return e},Jt=(e,t)=>Vt(e,$t(t)),Gt=(e,t)=>{var r={};for(var o in e)Ht.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&zt)for(var o of zt(e))t.indexOf(o)<0&&Ft.call(e,o)&&(r[o]=e[o]);return r},Qt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Xt=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of Bt(t))Ht.call(e,n)||n===r||Nt(e,n,{get:()=>t[n],enumerable:!(o=Ut(t,n))||o.enumerable});return e},Yt=(e,t,r)=>(Xt(e,t,"default"),r&&Xt(r,t,"default")),Zt=(e,t,r)=>(qt(e,"symbol"!=typeof t?t+"":t,r),r),er="__local__",tr="__synthetic__",rr="chat",or=o.getLogger("signalwire"),nr=or.methodFactory;or.methodFactory=(e,t,r)=>{const o=nr(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),o.apply(void 0,e)}};var ir,sr=or.getLevel();or.setLevel(sr);var ar={},cr=()=>null!=ir?ir:or,dr=({type:e,payload:t})=>{const r=cr(),{logWsTraffic:o}=ar||{};if(!o)return;const n=(e=>!("method"in e)||"signalwire.ping"!==e.method)(t)?JSON.stringify(t,null,2):t;return r.info(`${e.toUpperCase()}: \n`,n,"\n")},lr=()=>{const e=cr();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?dr:Reflect.get(e,t,r)})},ur=/[A-Z]/g,hr=["webrtc.message"],pr=e=>hr.includes(e),mr=/^2[0-9][0-9]$/,gr=(e,t)=>{const{result:r={},error:o}=e;if(o)return{error:o};const{code:n,node_id:i,result:s=null}=r;return n&&!mr.test(n)?{error:r}:null===s?(t&&(r.node_id=t),{result:r}):s?s.jsonrpc?gr(s,i):{result:s}:{result:r}},fr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},vr=(e,t=fr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,o])=>{const n=yr(r);return e[n]="object"==typeof o&&o?Array.isArray(o)?t.propsToUpdateValue.includes(r)?o.map((e=>"string"==typeof e?yr(e):vr(e))):o:vr(o):(e=>e.endsWith("At"))(n)?(e=>{if(void 0===e)return e;const t=new Date(1e3*e);return isNaN(t.getTime())?e:t})(o):o,e}),{}),yr=e=>e.includes("_")?e.split("_").reduce(((e,t,r)=>{const o=t.trim().charAt(0),n=t.substr(1).toLowerCase();return`${e}${0===r?o.toLowerCase():o.toUpperCase()}${n}`}),""):e,br=e=>{const{event_type:t,params:r,node_id:o}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(pr(t)&&(null==r?void 0:r.jsonrpc)){const e=r;return e.params&&(e.params.nodeId=o),{type:t,payload:e}}return{type:t,payload:r}},_r=(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),wr=(e,t)=>{if(t&&"string"==typeof t){const r=new RegExp(`^${t}.`);return e.replace(r,"")}const r=e.split(".");return r.length>1?(r.shift(),r.join(".")):e},Sr=/^(ws|wss):\/\//,kr=(e,t,r)=>{let o=null;return Promise.race([e,new Promise(((e,n)=>o=setTimeout(n,t,r)))]).finally((()=>clearTimeout(o)))},Cr=["video.member.updated","video.member.talking"],Er=["video.room.joined","video.track","video.active","video.answering","video.destroy","video.early","video.hangup","video.held","video.new","video.purge","video.recovering","video.requesting","video.ringing","video.trying","video.media.connected","video.media.reconnecting","video.media.disconnected","video.microphone.updated","video.camera.updated","video.speaker.updated","video.microphone.disconnected","video.camera.disconnected","video.speaker.disconnected"],Ir=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Er.includes(t)||(e=>e.includes(tr))(t)||Pr(t)||(e=>e.includes("session."))(t)?null:Cr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},Pr=e=>e.includes(er),Tr=e=>void 0!==e&&"jti"in e,Mr=e=>{var t;return Kt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Rr=e=>Kt({jsonrpc:"2.0"},e),xr={major:3,minor:0,revision:0},Or=e=>Mr({method:"signalwire.connect",params:Kt({version:xr,event_acks:!0},e)}),Ar={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},jr=e=>{if(e.hasOwnProperty("dialogParams")){const t=Gt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in Ar)e&&t.hasOwnProperty(e)&&(t[Ar[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Lr=e=>(t={})=>Mr({method:e,params:jr(t)}),Dr=Lr("verto.invite"),Wr=Lr("verto.bye"),Nr=Lr("verto.modify"),Vr=Lr("verto.info"),Ur=Lr("verto.answer"),$r=Lr("verto.subscribe"),Br=Lr("verto.pong"),zr=(e,t)=>Rr({id:e,result:{method:t}}),Hr={};Qt(Hr,{authErrorAction:()=>Zr,authExpiringAction:()=>to,authSuccessAction:()=>eo,createAction:()=>qr,destroyAction:()=>Xr,getCustomSagaActionType:()=>co,initAction:()=>Qr,makeCustomSagaAction:()=>ao,reauthAction:()=>Yr,sessionDisconnectedAction:()=>oo,sessionForceCloseAction:()=>io,sessionReconnectingAction:()=>no,socketMessageAction:()=>ro});var Fr={};function qr(e,t){function r(...r){if(t){let o=t(...r);if(!o)throw new Error("prepareAction did not return an object");return Kt(Kt({type:e,payload:o.payload},"meta"in o&&{meta:o.meta}),"error"in o&&{error:o.error})}return{type:e,payload:r[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=t=>t.type===e,r}Qt(Fr,{configureStore:()=>Gr,createAction:()=>qr}),Yt(Fr,W);var Kr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?L:L.apply(null,arguments)},Jr=!0;function Gr(e){const t=function(){return[]},{reducer:r,middleware:o=t(),devTools:n=!0,preloadedState:i,enhancers:s}=e||{};let a;if("function"==typeof r)a=r;else{if(!function(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=t;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return t===r}(r))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');a=A(r)}let c=o;"function"==typeof c&&(c=c(t));const d=D(...c);let l=L;n&&(l=Kr(Kt({trace:!Jr},"object"==typeof n&&n)));let u=[d];return Array.isArray(s)?u=[d,...s]:"function"==typeof s&&(u=s(u)),O(a,i,l(...u))}var Qr=qr("swSdk/init"),Xr=qr("swSdk/destroy"),Yr=qr("swSdk/reauth"),Zr=qr("auth/error"),eo=qr("auth/success"),to=qr("auth/expiring"),ro=qr("socket/message"),oo=qr("session.disconnected"),no=qr("session.reconnecting"),io=qr("session.forceClose"),so=(e,t)=>`${t.type}/${e}`,ao=(e,t)=>Jt(Kt({},t),{type:so(e,t)}),co=(e,t)=>so(e,t);function lo(e){const t={},r=[];let o;const n={addCase(e,r){const o="string"==typeof e?e:e.type;if(o in t)throw new Error("addCase cannot be called with two reducers for the same action type");return t[o]=r,n},addMatcher:(e,t)=>(r.push({matcher:e,reducer:t}),n),addDefaultCase:e=>(o=e,n)};return e(n),[t,r,o]}var uo=({name:e="",initialState:t,reducers:r,extraReducers:o})=>function(e){const{name:t}=e;if(!t)throw new Error("`name` is a required option for createSlice");const r=e.initialState,o=e.reducers||{},n=Object.keys(o),i={},s={},a={};function c(){const[t={},o=[],n]="function"==typeof e.extraReducers?lo(e.extraReducers):[e.extraReducers],i=Kt(Kt({},t),s);return function(e,t,r=[],o){let n,[i,s,a]="function"==typeof t?lo(t):[t,r,o];function c(e=n(),t){let r=[i[t.type],...s.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===r.filter((e=>!!e)).length&&(r=[a]),r.reduce(((e,r)=>r?r(e,t):e),e)}return n="function"==typeof e?()=>e():()=>e,c.getInitialState=n,c}(r,i,o,n)}let d;return n.forEach((e=>{const r=o[e],n=`${t}/${e}`;let c,d;"reducer"in r?(c=r.reducer,d=r.prepare):c=r,i[e]=c,s[n]=c,a[e]=d?qr(n,d):qr(n)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:i,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(Xr.type,(()=>t)),"function"==typeof o&&o(e)}});function ho(e){return[Qr.type,Yr.type].includes(e.type)}var po=uo({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,o;return Jt(Kt({},e),{authStatus:"authorized",authState:null==t?void 0:t.authorization,authCount:e.authCount+1,protocol:null!=(r=null==t?void 0:t.protocol)?r:"",iceServers:null!=(o=null==t?void 0:t.ice_servers)?o:[]})},authStatus:(e,{payload:t})=>Jt(Kt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Jt(Kt({},e),{authState:t})},extraReducers:e=>{e.addCase(Zr.type,((e,{payload:t})=>Jt(Kt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(ho,(e=>Jt(Kt({},e),{authStatus:"authorizing"})))}}),{actions:mo,reducer:go}=po,fo=Symbol("BaseSession"),vo=class{constructor(e){var t,r;this.options=e,Zt(this,"__sw_symbol",fo),Zt(this,"uuid",w()),Zt(this,"WebSocketConstructor"),Zt(this,"CloseEventConstructor"),Zt(this,"agent"),Zt(this,"connectVersion",xr),Zt(this,"_rpcConnectResult"),Zt(this,"_requests",new Map),Zt(this,"_socket",null),Zt(this,"_host","wss://relay.signalwire.com"),Zt(this,"_executeTimeoutMs",1e4),Zt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Zt(this,"_executeQueue",new Set),Zt(this,"_swConnectError",Symbol.for("sw-connect-error")),Zt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Zt(this,"_checkPingDelay",15e3),Zt(this,"_checkPingTimer",null),Zt(this,"_reconnectTimer"),Zt(this,"_status","unknown"),Zt(this,"_sessionChannel"),Zt(this,"wsOpenHandler"),Zt(this,"wsCloseHandler"),Zt(this,"wsErrorHandler");const{host:o,logLevel:n="info",sessionChannel:i}=e;o&&(this._host=(e=>`${Sr.test(e)?"":"wss://"}${e}`)(o)),i&&(this._sessionChannel=i),n&&(null==(r=(t=this.logger).setLevel)||r.call(t,n)),this._onSocketOpen=this._onSocketOpen.bind(this),this._onSocketError=this._onSocketError.bind(this),this._onSocketClose=this._onSocketClose.bind(this),this._onSocketMessage=this._onSocketMessage.bind(this),this.execute=this.execute.bind(this),this.connect=this.connect.bind(this),this.wsOpenHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("open",this.wsOpenHandler),this._onSocketOpen(e)},this.wsCloseHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("close",this.wsCloseHandler),this._onSocketClose(e)},this.wsErrorHandler=e=>{var t;null==(t=this._socket)||t.removeEventListener("error",this.wsErrorHandler),this._onSocketError(e)}}get host(){return this._host}get rpcConnectResult(){return this._rpcConnectResult}get relayProtocol(){var e,t;return null!=(t=null==(e=this._rpcConnectResult)?void 0:e.protocol)?t:""}get signature(){if(this._rpcConnectResult){const{authorization:e}=this._rpcConnectResult;return Tr(e)?e.jti:e.signature}}get logger(){return lr()}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"});if("disconnected"===this._status)return Promise.reject({code:"400",message:"The SDK is disconnected"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),kr(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,t;const r={agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}};this._relayProtocolIsValid()&&(r.protocol=this.relayProtocol),(null==(e=this.options.topics)?void 0:e.length)?r.contexts=this.options.topics:(null==(t=this.options.contexts)?void 0:t.length)&&(r.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(Or(r))}authError(e){this._removeSocketListeners(),this.dispatch(Zr({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._status="unknown",this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(eo())}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(no()),this._clearTimers(),this._clearPendingRequests(),this._reconnectTimer=setTimeout((()=>{this.connect()}),1e3*Math.floor(4*Math.random()+1))),this._socket=null}_clearTimers(){clearTimeout(this._reconnectTimer)}_clearPendingRequests(){this.logger.debug("_clearPendingRequests",this._requests.size),this._requests.forEach((({reject:e})=>{e(this._executeConnectionClosed)}))}_onSocketMessage(e){const t=this.decode(e.data);if(this.logger.wsTraffic({type:"recv",payload:t}),(e=>!(e=>Boolean(e.method))(e))(t)){const e=this._requests.get(t.id);if(e){const{rpcRequest:r,resolve:o,reject:n}=e;this._requests.delete(t.id);const{result:i,error:s}=(({response:e,request:t})=>{const{result:r={},error:o}=e;return o?{error:o}:"signalwire.connect"===t.method?{result:r}:gr(e)})({response:t,request:r});return this._checkCurrentStatus(),s?n(s):o(i)}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,Rr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this._eventAcknowledgingHandler(t).catch((e=>this.logger.error("Event Acknowledging Error",e))),this.dispatch(ro(t))}var r}dispatch(e){if(!this._sessionChannel)throw new Error("Session channel does not exist");this._sessionChannel.put(e)}_relayProtocolIsValid(){var e;return this.signature&&(null==(e=null==this?void 0:this.relayProtocol)?void 0:e.split("_")[1])===this.signature}encode(e){return JSON.stringify(e)}decode(e){return(e=>{if("string"!=typeof e)return e;try{return JSON.parse(e)}catch(t){return e}})(e)}async onSwAuthorizationState(e){this.persistSwAuthorizationState(e)}async retrieveSwAuthorizationState(){return""}async persistSwAuthorizationState(e){}_send(e){this.logger.wsTraffic({type:"send",payload:e}),this._socket.send(this.encode(e))}_addToExecuteQueue(e){this.logger.warn("Request queued waiting for session to reconnect",e),this._executeQueue.add(e)}_flushExecuteQueue(){if(this._executeQueue.size){if(!this.ready)return this.logger.warn("Session not ready to flush the queue."),void this._closeConnection("reconnecting");this.logger.debug(`${this._executeQueue.size} messages to flush`),this._executeQueue.forEach((e=>{this._send(e),this._executeQueue.delete(e)})),this._executeQueue.clear()}}_clearCheckPingTimer(){clearTimeout(this._checkPingTimer)}async _pingHandler(e){var t,r,o;this._clearCheckPingTimer(),this._checkPingTimer=setTimeout((()=>{this.logger.debug("Timeout waiting for ping"),this._closeConnection("reconnecting")}),this._checkPingDelay),await this.execute((r=e.id,o=null==(t=null==e?void 0:e.params)?void 0:t.timestamp,Rr({id:r,result:{timestamp:o||Date.now()/1e3}})))}async _eventAcknowledgingHandler(e){const{method:t,id:r}=e;return"signalwire.event"===t?this.execute((e=>Rr({id:e,result:{}}))(r)):Promise.resolve()}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(oo());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(mo.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},yo=class extends vo{constructor(e){super(e),this.options=e,Zt(this,"_expiredDiffSeconds",0),Zt(this,"_refreshTokenNotificationDiff",120),Zt(this,"_checkTokenExpirationDelay",2e4),Zt(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=Tr(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(Or(e)),await this.persistRelayProtocol(),await this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,Mr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}async _checkTokenExpiration(){if(!this.expiresAt)return;const e=this.options._onRefreshToken||this.options.onRefreshToken;if(this.expiresIn<=this._refreshTokenNotificationDiff)if(this.dispatch(to()),"function"==typeof e)try{await e()}catch(e){this.logger.error(e)}else this.logger.warn("The token is going to expire!");clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay))}},bo={};Qt(bo,{authErrorAction:()=>Zr,authExpiringAction:()=>to,authSuccessAction:()=>eo,configureStore:()=>qo,connect:()=>Ho,createAction:()=>qr,createCatchableSaga:()=>Po,createRestartableSaga:()=>Eo,destroyAction:()=>Xr,eventChannel:()=>ut,getCustomSagaActionType:()=>co,initAction:()=>Qr,makeCustomSagaAction:()=>ao,reauthAction:()=>Yr,sessionDisconnectedAction:()=>oo,sessionForceCloseAction:()=>io,sessionReconnectingAction:()=>no,socketMessageAction:()=>ro});var _o=uo({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Jt(Kt({},e),t.id in e.byId?{byId:Jt(Kt({},e.byId),{[t.id]:Kt(Kt({},e.byId[t.id]),t)})}:{byId:Jt(Kt({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>Jt(Kt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,o])=>(t.ids.includes(r)||(e[r]=o),e)),{})})}}),{actions:wo,reducer:So}=_o,ko=(0,Fr.combineReducers)({components:So,session:go}),Co={};Qt(Co,{createCatchableSaga:()=>Po,createRestartableSaga:()=>Eo,eventChannel:()=>ut});var Eo=e=>function*(){Fe((function*(){for(;;)try{lr().debug("Run a restartable saga"),yield ze(e),lr().debug("One of the restartable saga has ended. Restarting..")}catch(e){lr().error("Restartable Saga Error",e)}}))},Io=e=>lr().error("Catchable Saga Error",e),Po=(e,t=Io)=>function*(...r){try{yield ze(e,...r)}catch(e){t(e)}},To=e=>pr(null==e?void 0:e.event_type),Mo=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},Ro=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*xo({sessionChannel:e,swEventChannel:t,session:r}){function*o(e){yield $e(t,br(e)),To(e)||Mo(e)||(Ro(e)?r.onSwAuthorizationState(e.params.authorization_state):yield $e({type:e.event_type,payload:e}))}const n=Po((function*(e){if(e.type!==ro.type)return void(yield $e(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return lr().debug(`Unknown message: ${t}`,e);yield He(o,r)}),(e=>{lr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield He(n,t)}}catch(e){lr().error("sessionChannelWorker error:",e)}finally{lr().debug("sessionChannelWorker finally")}}var Oo=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Zt(this,"name","AuthError"),Object.setPrototypeOf(this,Oo.prototype)}},Ao=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Zt(this,"name","HttpError"),Object.setPrototypeOf(this,Ao.prototype)}};function*jo({initSession:e,sessionEmitter:t,userOptions:r,channels:o}){var n;const i=e(),s=o.swEventChannel,a=o.sessionChannel;let c=[];if(null==(n=r.workers)?void 0:n.length)try{const e=r.workers.map((e=>ze(Eo(e))));c=yield function(e){var t=Ne(Ae,e);return t.combinator=!0,t}(e)}catch(e){lr().error("Error running custom workers",e)}yield He(xo,{session:i,sessionChannel:a,swEventChannel:s});const d=yield He(Do,{session:i,sessionEmitter:t,sessionChannel:a,userOptions:r});i.connect(),yield Ue(Xr.type),i.disconnect(),yield Ue(oo.type),t.emit("session.disconnected"),d.cancel(),c.forEach((e=>e.cancel()))}function*Lo({session:e,token:t,sessionEmitter:r}){try{e.reauthenticate&&(e.token=t,yield ze(e.reauthenticate),yield $e(mo.connected(e.rpcConnectResult)),r.emit("session.connected"))}catch(t){lr().error("Reauthenticate Error",t),e.authError(t)}}function*Do(e){lr().debug("sessionStatusWatcher [started]");const{session:t,sessionEmitter:r}=e;try{for(;;){const o=yield Ue([eo.type,Zr.type,to.type,Yr.type,no.type,io.type]);switch(lr().trace("sessionStatusWatcher",o.type,o.payload),o.type){case eo.type:yield $e(mo.connected(t.rpcConnectResult)),r.emit("session.connected");break;case Zr.type:yield He(Wo,Jt(Kt({},e),{action:o}));break;case to.type:r.emit("session.expiring");break;case Yr.type:yield He(Lo,{session:t,token:o.payload.token,sessionEmitter:r});break;case no.type:r.emit("session.reconnecting");break;case io.type:t.forceClose()}}}finally{(yield Ke())&&lr().debug("sessionStatusWatcher [cancelled]")}}function*Wo(e){lr().debug("sessionAuthErrorSaga [started]");try{const{action:t,sessionEmitter:r}=e,{error:o}=t.payload,n=o?new Oo(o.code,o.message):new Error("Unauthorized");r.emit("session.auth_error",n)}finally{(yield Ke())&&lr().debug("sessionAuthErrorSaga [cancelled]")}}var No={};Qt(No,{getAuthError:()=>Bo,getAuthState:()=>zo,getAuthStatus:()=>$o,getIceServers:()=>Vo,getSession:()=>Uo});var Vo=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Uo=e=>e.session,$o=({session:e})=>e.authStatus,Bo=({session:e})=>e.authError,zo=({session:e})=>e.authState,Ho=e=>{const{sessionListeners:t={},store:r,Component:o,customSagas:n=[]}=e,i=Object.keys(t);return e=>{const s=new o(Jt(Kt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),o=Uo(e);for(const e of i){if(!1===c)return;const r=`session.${e}`,n=a.get(r),i=o[e];if(void 0!==i&&n!==i){a.set(r,i);const n=t[e];"string"==typeof n?s[n](o):"function"==typeof n&&n(o)}}})),l=null==n?void 0:n.map((e=>r.runSaga(e,{instance:s,runSaga:r.runSaga})));return s.destroyer=()=>{c=!1,d(),a.clear(),(null==l?void 0:l.length)&&l.forEach((e=>e.cancel()))},s}},Fo=()=>new Wt;Yt(bo,Fr);var qo=e=>{var t;const{userOptions:r,SessionConstructor:o,preloadedState:n={},runSagaMiddleware:i=!0}=e,s=Lt(),a=ht(),c=lt(),d={swEventChannel:a,sessionChannel:c},l=Gr({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:ko,preloadedState:n,middleware:e=>e().concat(s)}),{initSession:u,getSession:h,sessionEmitter:p}=(e=>{const{SessionConstructor:t,userOptions:r,sessionChannel:o}=e,n=Fo();let i=null;return{session:i,initSession:()=>(i=new t(Jt(Kt({},r),{sessionChannel:o})),i),getSession:()=>(i||lr().warn("Custom worker started without the session"),i),sessionEmitter:n}})({userOptions:r,sessionChannel:c,SessionConstructor:o}),m=(()=>{const e=new Map;return{get:t=>e.get(t),set:(t,r)=>(e.set(t,r),e),remove:t=>(e.delete(t),e)}})();if(i){const e=(e=>function*({userOptions:t,channels:r}){var o;for(t.logger&&(ir=t.logger),t.debug&&(e=>{null!=e?Object.assign(ar,e):ar={}})(t.debug);;){const n=yield Ue([Qr.type,Yr.type]);(null==(o=null==n?void 0:n.payload)?void 0:o.token)&&(t.token=n.payload.token);try{yield ze(jo,Jt(Kt({},e),{userOptions:t,channels:r}))}catch(e){lr().error("RootSaga Error:",e)}finally{(yield Ke())&&lr().debug("rootSaga [cancelled]"),lr().debug("Reboot rootSaga")}}})({initSession:u,sessionEmitter:p});s.run(e,{userOptions:r,channels:d})}return Jt(Kt({},l),{runSaga:(e,t)=>s.run(e,Jt(Kt({},t),{channels:d,getSession:h,instanceMap:m})),channels:d,instanceMap:m,sessionEmitter:p})},Ko=function*(e){const{initialState:t,onDone:r,onFail:o,getSession:n}=e,{requestId:i,method:s,params:a}=t,c=n();if(!c){const e=new Error("Session does not exist!");return lr().error(e),void(null==o||o(e))}try{const e=(({method:e,params:t})=>Mr({method:e,params:t}))({id:i,method:s,params:a}),t=yield ze(c.execute,e);null==r||r(t)}catch(e){lr().warn("Execute error: ",e),null==o||o(e)}},Jo=e=>e,Go=Symbol("BaseComponent"),Qo=class{constructor(e){this.options=e,Zt(this,"__sw_symbol",Go),Zt(this,"uuid",w()),Zt(this,"_customSagaTriggers",new Map),Zt(this,"_destroyer"),Zt(this,"eventEmitter"),Zt(this,"_runningWorkers",[]),Zt(this,"_workers",new Map),this.eventEmitter=new Wt}get __uuid(){return this.uuid}get logger(){return lr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.options.store.instanceMap}get emitter(){return this.eventEmitter}get sessionEmitter(){return this.options.store.sessionEmitter}get session(){return this.sessionEmitter}on(e,t){return this.emitter.on(e,t)}once(e,t){return this.emitter.once(e,t)}off(e,t){return this.emitter.off(e,t)}removeAllListeners(e){return e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.sessionEventNames().forEach((e=>{this.sessionEmitter.off(e)})),this.emitter)}eventNames(){return this.emitter.eventNames()}sessionEventNames(){return this.sessionEmitter.eventNames()}getSubscriptions(){return Ir(this.eventNames())}emit(e,...t){return this.emitter.emit(e,...t)}listenerCount(e){return this.emitter.listenerCount(e)}destroy(){var e;null==(e=this._destroyer)||e.call(this),this.removeAllListeners(),this.detachWorkers()}execute({method:e,params:t},{transformParams:r=Jo,transformResolve:o=Jo,transformReject:n=Jo}={transformParams:Jo,transformResolve:Jo,transformReject:Jo}){return new Promise(((i,s)=>{const a=w();this.runWorker("executeActionWorker",{worker:Ko,onDone:e=>i(o(e)),onFail:e=>s(n(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const o=w();this._customSagaTriggers.set(o,{resolve:t,reject:r}),this.store.dispatch(Kt({dispatchId:o},ao(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const o=this._customSagaTriggers.get(e);o&&(o[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}getStateProperty(e){return this[e]}get _sessionAuthStatus(){return $o(this.store.getState())}get _sessionAuthState(){return zo(this.store.getState())}_waitUntilSessionAuthorized(){switch($o(this.store.getState())){case"authorized":return Promise.resolve(this);case"unknown":case"authorizing":return new Promise(((e,t)=>{const r=this.store.subscribe((()=>{const o=$o(this.store.getState()),n=Bo(this.store.getState());if("authorized"===o)e(this),r();else if("unauthorized"===o){const e=n?new Oo(n.code,n.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}runWorker(e,t){return this._workers.has(e)?lr().warn(`[runWorker] Worker with name ${e} has already been registerd.`):this._setWorker(e,t),this._attachWorker(e,t)}_setWorker(e,t){this._workers.set(e,t)}_attachWorker(e,t){var r=t,{worker:o}=r,n=Gt(r,["worker"]);const i=this.store.runSaga(o,Kt({instance:this,runSaga:this.store.runSaga},n));return this._runningWorkers.push(i),this._workers.delete(e),i}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},Xo=class extends Qo{constructor(e){super(e),this.options=e}connect(){const e=$o(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(Qr()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(Xr())}},Yo=class extends Qo{constructor(e){super(e),this.options=e,Zt(this,"subscribeMethod","signalwire.subscribe"),Zt(this,"subscribeParams",{}),Zt(this,"_latestExecuteParams");const t=()=>{this._latestExecuteParams=void 0};super.session.on("session.connected",t),super.session.on("session.disconnected",t),super.session.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:Jt(Kt({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},Zo={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(Zo).map((e=>`video.member.updated.${e}`));var en=vr(Zo);Object.keys(en).map((e=>`member.updated.${e}`));var tn={};Qt(tn,{getComponent:()=>rn,getComponentsById:()=>on,getComponentsToCleanup:()=>nn});var rn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},on=({components:e})=>e.byId,nn=e=>{const t=on(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},sn={};Qt(sn,{RoomSessionPlaybackAPI:()=>Zn,RoomSessionRecordingAPI:()=>Xn,RoomSessionStreamAPI:()=>ti,audioMuteMember:()=>xn,audioUnmuteMember:()=>On,createRoomSessionPlaybackObject:()=>ei,createRoomSessionRecordingObject:()=>Yn,createRoomSessionStreamObject:()=>ri,deafMember:()=>Ln,deleteMemberMeta:()=>Gn,deleteMeta:()=>Pn,demote:()=>Bn,getLayouts:()=>ln,getMemberMeta:()=>qn,getMembers:()=>un,getMeta:()=>Cn,getPlaybacks:()=>wn,getRecordings:()=>bn,getStreams:()=>Tn,hideVideoMuted:()=>mn,lock:()=>fn,play:()=>Sn,promote:()=>$n,removeAllMembers:()=>Fn,removeMember:()=>Hn,setDeaf:()=>Wn,setHideVideoMuted:()=>yn,setInputSensitivityMember:()=>Un,setInputVolumeMember:()=>Nn,setLayout:()=>hn,setMemberMeta:()=>Kn,setMemberPosition:()=>zn,setMeta:()=>En,setOutputVolumeMember:()=>Vn,setPositions:()=>pn,setPrioritizeHandraise:()=>Rn,setRaisedHand:()=>Qn,showVideoMuted:()=>gn,startRecording:()=>_n,startStream:()=>Mn,undeafMember:()=>Dn,unlock:()=>vn,updateMemberMeta:()=>Jn,updateMeta:()=>In,videoMuteMember:()=>An,videoUnmuteMember:()=>jn});var an=()=>{},cn=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:Kt({room_session_id:this.roomSessionId},r)},t)}}),dn=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,i=Gt(o,["memberId"]);return this.execute({method:e,params:Kt({room_session_id:this.roomSessionId,member_id:n||this.memberId},i)},t)}}),ln=cn("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),un=cn("video.members.get",{transformResolve:e=>({members:e.members})}),hn=cn("video.set_layout",{transformResolve:an}),pn=cn("video.set_position",{transformResolve:an}),mn=cn("video.hide_video_muted",{transformResolve:an}),gn=cn("video.show_video_muted",{transformResolve:an}),fn=cn("video.lock",{transformResolve:an}),vn=cn("video.unlock",{transformResolve:an}),yn={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:an})}},bn={value:function(){return new Promise((async(e,t)=>{try{const{recordings:t}=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}):t=Yn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({recordings:r})}catch(e){t(e)}}))}},_n={value:function(){return new Promise((async(e,t)=>{try{const{recording:t}=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}}),r=Yn({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},wn={value:function(){return new Promise((async(e,t)=>{try{const{playbacks:t}=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}):t=ei({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({playbacks:r})}catch(e){t(e)}}))}},Sn={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Gt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||o,{playback:i}=await this.execute({method:"video.playback.start",params:Kt({room_session_id:this.roomSessionId,seek_position:t},n)}),s=ei({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:i}});this.instanceMap.set(s.id,s),e(s)}catch(e){t(e)}}))}},kn=e=>cn(e,{transformResolve:an,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Gt(t,["room_session_id"])}}}),Cn=cn("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),En=kn("video.set_meta"),In=kn("video.update_meta"),Pn={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},Tn={value:function(){return new Promise((async(e,t)=>{try{const{streams:t}=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}):t=ri({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({streams:r})}catch(e){t(e)}}))}},Mn={value:function(e){return new Promise((async(t,r)=>{try{const{stream:r}=await this.execute({method:"video.stream.start",params:Kt({room_session_id:this.roomSessionId},e)}),o=ri({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:r}});this.instanceMap.set(o.id,o),t({stream:o})}catch(e){r(e)}}))}},Rn={value:function(e){return this.execute({method:"video.prioritize_handraise",params:{room_session_id:this.roomSessionId,enable:e}})}},xn=dn("video.member.audio_mute",{transformResolve:an}),On=dn("video.member.audio_unmute",{transformResolve:an}),An=dn("video.member.video_mute",{transformResolve:an}),jn=dn("video.member.video_unmute",{transformResolve:an}),Ln=dn("video.member.deaf",{transformResolve:an}),Dn=dn("video.member.undeaf",{transformResolve:an}),Wn={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:an})}},Nn=dn("video.member.set_input_volume",{transformResolve:an}),Vn=dn("video.member.set_output_volume",{transformResolve:an}),Un=dn("video.member.set_input_sensitivity",{transformResolve:an}),$n={value:function(e){var t=e,{memberId:r,mediaAllowed:o,joinAudioMuted:n,joinVideoMuted:i}=t,s=Gt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:Kt({room_session_id:this.roomSessionId,member_id:r,media_allowed:o,join_audio_muted:n,join_video_muted:i},s)},{transformResolve:an})}},Bn={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:an})}},zn=dn("video.member.set_position",{transformResolve:an}),Hn={value:function(e){var t=e,{memberId:r}=t,o=Gt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:Kt({room_session_id:this.roomSessionId,member_id:r},o)},{transformResolve:an})}},Fn={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:an})}},qn=dn("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Kn=dn("video.member.set_meta",{transformResolve:an}),Jn=dn("video.member.update_meta",{transformResolve:an}),Gn=dn("video.member.delete_meta",{transformResolve:an}),Qn={value:function(e){const{raised:t=!0,memberId:r=this.memberId}=e||{};if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:t?"video.member.raisehand":"video.member.lowerhand",params:{room_session_id:this.roomSessionId,member_id:r}},{transformResolve:an})}},Xn=class extends Qo{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.recording.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.recording.state}get duration(){return this._payload.recording.duration}get startedAt(){if(this._payload.recording.started_at)return new Date(1e3*this._payload.recording.started_at)}get endedAt(){if(this._payload.recording.ended_at)return new Date(1e3*this._payload.recording.ended_at)}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.recording.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.recording.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.recording.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}},Yn=e=>Ho({store:e.store,Component:Xn})(e),Zn=class extends Qo{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.playback.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get url(){return this._payload.playback.url}get state(){return this._payload.playback.state}get volume(){return this._payload.playback.volume}get startedAt(){if(this._payload.playback.started_at)return new Date(1e3*this._payload.playback.started_at)}get endedAt(){if(this._payload.playback.ended_at)return new Date(1e3*this._payload.playback.ended_at)}get position(){return this._payload.playback.position}get seekable(){return this._payload.playback.seekable}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.playback.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.playback.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.playback.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async setVolume(e){await this.execute({method:"video.playback.set_volume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),volume:e}})}async seek(e){await this.execute({method:"video.playback.seek_absolute",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async forward(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async rewind(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:-Math.abs(e)}})}},ei=e=>Ho({store:e.store,Component:Zn})(e),ti=class extends Qo{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.stream.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.stream.state}get duration(){return this._payload.stream.duration}get url(){return this._payload.stream.url}get startedAt(){if(this._payload.stream.started_at)return new Date(1e3*this._payload.stream.started_at)}get endedAt(){if(this._payload.stream.ended_at)return new Date(1e3*this._payload.stream.ended_at)}setPayload(e){this._payload=e}async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},ri=e=>Ho({store:e.store,Component:ti})(e),oi={};Qt(oi,{BaseChatAPI:()=>ki,BaseChatConsumer:()=>Si,ChatMember:()=>Ii,ChatMessage:()=>Ei,applyCommonMethods:()=>Mi,createBaseChatObject:()=>Ci,getMemberState:()=>mi,getMembers:()=>ui,getMessages:()=>li,publish:()=>di,setMemberState:()=>pi});var ni=e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]},ii=e=>Array.isArray(e)||"string"==typeof e,si=()=>{},ai=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),ci=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,i=Gt(o,["memberId"]);return this.execute({method:e,params:Kt({member_id:n},i)},t)}}),di=ai("chat.publish",{transformResolve:si}),li=ai("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>vr(e))),cursor:e.cursor})}),ui=ai("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>vr(e)))})}),hi=e=>{const t=ii(null==e?void 0:e.channels)?ni(e.channels):void 0;return Jt(Kt({},e),{channels:t})},pi=ci("chat.member.set_state",{transformResolve:si,transformParams:hi}),mi=ci("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:hi}),gi={};Qt(gi,{BasePubSubConsumer:()=>yi,PubSubMessage:()=>_i,createBasePubSubObject:()=>bi});var fi=function*(e){lr().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case`${rr}.channel.message`:{const{channel:e,message:r}=o,n=Gt(r,["member"]),i=vr(Jt(Kt({},n),{channel:e})),s=new _i(i);t.emit("message",s);break}default:lr().warn(`Unknown pubsub event: "${r}"`)}}const n=e=>e.type.startsWith(`${rr}.`);for(;;){const e=yield Ue(r,n);yield He(o,e)}lr().trace("pubSubWorker ended")},vi=e=>e.map((e=>({name:e}))),yi=class extends Yo{constructor(e){super(e),Zt(this,"subscribeMethod",`${rr}.subscribe`),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:fi})}_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:vi(r)}}_setSubscribeParams(e){this.subscribeParams=Kt(Kt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return Kt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return Kt({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}getSubscriptions(){const e=this.eventNames().map((e=>`${rr}.${String(e)}`));return Ir(e)}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const o=this.getSubscriptions();if(o.length>0){const e={method:`${rr}.unsubscribe`,params:Jt(Kt({},t),{events:o})};try{await this.execute(e)}catch(e){return r(e)}}else this.logger.warn("`unsubscribe()` was called without any listeners attached.");return e()}))}updateToken(e){return new Promise(((t,r)=>{this.session.once("session.auth_error",(e=>{r(e)})),this.session.once("session.connected",(()=>{t()})),this.store.dispatch(Hr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${rr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(zo);return e&&"channels"in e&&e.channels?e.channels:{}}},bi=e=>Ho({store:e.store,Component:yi})(e),_i=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}},wi=function*(e){lr().trace("chatWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*o(e){const{type:r,payload:o}=e;switch(r){case"chat.channel.message":{const{channel:e,message:r}=o,n=vr(Jt(Kt({},r),{channel:e})),i=new Ei(n);t.emit("message",i);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=o,n=vr(e),i=new Ii(n),s=wr(r);t.emit(s,i);break}default:lr().warn(`Unknown chat event: "${r}"`)}}const n=e=>e.type.startsWith("chat.");for(;;){const e=yield Ue(r,n);yield He(o,e)}lr().trace("chatWorker ended")},Si=class extends yi{constructor(e){super(e),Zt(this,"subscribeMethod","chat.subscribe")}initWorker(){this.runWorker("chat",{worker:wi})}},ki=_r(Si,{publish:di,getMembers:ui,getMessages:li,setMemberState:pi,getMemberState:mi}),Ci=e=>Ho({store:e.store,Component:ki})(e),Ei=class extends _i{get member(){return this.payload.member}},Ii=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:{}}},Pi=e=>{const t=ii(null==e?void 0:e.channels)?ni(e.channels):void 0;return Jt(Kt({},e),{channels:t})},Ti=()=>{};function Mi(e){return class extends e{getMembers(e){return this._client.execute({method:"chat.members.get",params:e},{transformResolve:e=>({members:e.members.map((e=>vr(e)))})})}getMessages(e){return this._client.execute({method:"chat.messages.get",params:e},{transformResolve:e=>({messages:e.messages.map((e=>vr(e))),cursor:e.cursor})})}setMemberState(e={}){var t=e,{memberId:r}=t,o=Gt(t,["memberId"]);return this._client.execute({method:"chat.member.set_state",params:Kt({member_id:r},o)},{transformResolve:Ti,transformParams:Pi})}getMemberState(e={}){var t=e,{memberId:r}=t,o=Gt(t,["memberId"]);return this._client.execute({method:"chat.member.get_state",params:Kt({member_id:r},o)},{transformResolve:e=>({channels:e.channels}),transformParams:Pi})}}}var Ri={};Qt(Ri,{MEMBER_POSITION_COMPOUND_EVENTS:()=>ji,memberPositionWorker:()=>Li,memberUpdatedWorker:()=>Ai});var xi=function*(e,t,r){r.emit(e,t)};function*Oi(e){const{action:t,memberList:r,instance:o,dispatcher:n=xi}=e,i={};t.payload.layout.layers.forEach((e=>{var t;const o=e.member_id;if(!o)return;const n=r.get(o);n&&e.position!==(null==(t=n.member)?void 0:t.current_position)?(Di({memberList:r,memberId:o,currentPosition:e.position}),i[o]=!0):i[o]=!1}));for(const[e,t]of r)if(i[e])yield null==n?void 0:n("member.updated",t,o);else if(void 0===i[e]){const t=Di({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==n?void 0:n("member.updated",t,o)}}function*Ai({action:e,memberList:t,instance:r,dispatcher:o=xi}){var n,i;const s=e.payload.member.id,a=Di({memberList:t,memberId:s,currentPosition:null==(i=null==(n=t.get(s))?void 0:n.member)?void 0:i.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=Jt(Kt({},a),{member:Kt(Kt({},a.member),e.payload.member)});t.set(s,d);const l=wr(e.type);for(const e of c){const t=`${l}.${e}`;yield null==o?void 0:o(t,d,r)}yield null==o?void 0:o(l,d,r)}var ji=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Li=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:n,dispatcher:i=xi}){if(!r)return;const{swEventChannel:s}=t;let a=Wi(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield Ue(s,(e=>"video.member.updated"===e.type||"video.layout.changed"===e.type||"video.member.joined"===e.type||"video.member.left"===e.type));switch(r.type){case"video.member.updated":c(r.payload),yield He(Ai,{action:r,channels:t,memberList:a,instance:e,getSession:o,instanceMap:n,dispatcher:i});break;case"video.member.joined":c(r.payload);break;case"video.member.left":a.delete(r.payload.member.id);break;case"video.layout.changed":yield He(Oi,{action:r,channels:t,memberList:a,instance:e,dispatcher:i})}}},Di=({memberList:e,memberId:t,currentPosition:r})=>{const o=e.get(t);if(!o)return;if(!r)return o;const n=Jt(Kt({},o),{member:Jt(Kt({},null==o?void 0:o.member),{current_position:r})});return e.set(t,n),n},Wi=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};Qt({},{configureFullStack:()=>Bi,configureJestStore:()=>$i,createMockedLogger:()=>Ui,createSessionChannel:()=>qi,createSwEventChannel:()=>Fi,rpcConnectResultVRT:()=>Hi,wait:()=>zi});var Ni="8f0a119a-cda7-4497-a47d-c81493b824d4",Vi="<VRT>",Ui=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),$i=e=>qo(Kt({userOptions:{project:Ni,token:Vi,devTools:!1,emitter:new Wt},SessionConstructor:vo,runSagaMiddleware:!1},e)),Bi=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Wt,r=qo({userOptions:{project:Ni,token:Vi,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Hr.initAction()),r.dispatch(Hr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Hr.destroyAction())}},zi=e=>new Promise((t=>{setTimeout(t,e)})),Hi={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"}]},Fi=()=>ht(),qi=()=>lt(),Ki=Kt({},No);async function Ji(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new Oo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Ao(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const Gi=({baseUrl:e,timeout:t=3e4,...r},o=Ji)=>async(n,i)=>{const s={...i?.body?{"Content-Type":"application/json"}:{},...r.headers,...i?.headers},a=Qi({...r,...i,headers:s});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(Xi({path:n,baseUrl:e,searchParams:i?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Qi=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(o=r,"string"==typeof o?o:JSON.stringify(o))}:null!=r?{...e,[t]:r}:e;var o}),{}),Xi=({path:e,baseUrl:t,searchParams:r})=>{const o=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&o.searchParams.append(e,t)})),o.toString()},Yi=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Zi=()=>{if(!Yi())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},es=()=>Zi().getSupportedConstraints(),ts=e=>e&&e instanceof MediaStream,rs=()=>"sinkId"in HTMLMediaElement.prototype,os=async(e,t)=>{if(null!==e)if("string"==typeof t)if(rs())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?lr().error(`You need to use HTTPS for selecting audio output device: ${e}`):lr().error(`Error: ${e}`),e}else lr().warn("Browser does not support output device selection.");else lr().warn(`Invalid speaker deviceId: '${t}'`);else lr().warn("No HTMLMediaElement to attach the speakerId")},ns=e=>{var t;ts(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(is))},is=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},ss={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},as=e=>{if(e)return ss[e]},cs=()=>Zi().enumerateDevices(),ds=async e=>{let t=await cs().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},ls=async e=>{if("permissions"in navigator&&"function"==typeof navigator.permissions.query&&e)try{return"granted"===(await navigator.permissions.query({name:e})).state}catch(e){}return(async e=>{const t=await ds(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(lr().warn(`No ${e} devices to check for permissions!`),null)})(as(e))},us=()=>ls("camera"),hs=()=>ls("microphone"),ps=()=>ls("speaker"),ms=async(e={audio:!0,video:!0})=>{var t;try{const t=Zi().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(hs()),(null==e?void 0:e.video)&&t.push(us()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await kr(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":lr().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":lr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":lr().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":lr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),lr().info("List of available constraints:",es());break;case"NotAllowedError":lr().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?lr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):lr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":lr().error("User media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.")}throw r}},gs=e=>Zi().getDisplayMedia(e),fs=async(e,t=!1)=>ys(e,t),vs=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:o,groupId:n})=>{var i;if(!e||t.targets&&!(null===(i=t.targets)||void 0===i?void 0:i.includes(o)))return!1;if(!n)return!0;const s=`${o}-${n}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(s)||!a||(r.push(s),0))}))},ys=async(e,t=!1)=>{let r;if(!1===await ls(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await ms(t)}var o;const n=await ds(as(e));return r&&ns(r),!0===t?n:vs(n)},bs=()=>ys("speaker"),_s=async(e,t,r)=>{const o=await ys(r,!0);for(let r=0;r<o.length;r++){const{deviceId:n,label:i}=o[r];if(e===n||t===i)return n}return null},ws=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},Ss={camera:us,microphone:hs,speaker:ps},ks=["camera","microphone","speaker"],Cs=`Allowed targets are: '${ks.join("', '")}'`,Es={speaker:rs},Is=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:ks).filter((e=>!!ks.includes(e)||(lr().warn(`We'll ignore the "${e}" target as it is not allowed. ${Cs}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${Cs}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Ss[e]())))).reduce(((e,r,o)=>{var n;const i=t[o];return e[!(i in Es)||(null===(n=Es[i])||void 0===n?void 0:n.call(Es))?"supported":"unsupported"].push([i,!!r]),e}),{supported:[],unsupported:[]})})({targets:r});if(o.unsupported.length>0&&r.length===o.unsupported.length)throw new Error(`The platform doesn't support "${r.join(", ")}" as target/s, which means it's not possible to watch for changes on those devices.`);if(o.supported.every((([e,t])=>!t)))throw new Error("You must ask the user for permissions before being able to listen for device changes. Try calling getUserMedia() before calling `createDeviceWatcher()`.");let n=[];const i=o.supported.reduce(((e,[t,r])=>(r?e.push(t):n.push(t),e)),[]);if(i.length!==r.length){const e=o.unsupported.length>0?`The platform doesn't support "${o.unsupported.map((([e])=>e)).join(", ")}" as target/s, which means it's not possible to watch for changes on those devices. `:"",t=n.length>0?`The user hasn't granted permissions for the following targets: ${n.join(", ")}. `:"";lr().warn(`${e}${t}We'll be watching for the following targets instead: "${i.join(", ")}"`)}return lr().debug(`Watching these targets: "${i.join(", ")}"`),i})({targets:e.targets}),r=new Wt,o=await cs(),n=null==t?void 0:t.reduce(((e,t)=>{const r=as(t);return r&&e.push(r),e}),[]);let i=vs(o,{excludeDefault:!0,targets:n});return Zi().addEventListener("devicechange",(async()=>{const e=await cs(),t=i,o=vs(e,{excludeDefault:!0,targets:n});i=o;const s=((e,t)=>{const r=ws(e),o=ws(e),n=[];lr().debug("[_getDeviceListDiff] <- oldDevices",e),lr().debug("[_getDeviceListDiff] -> newDevices",t);const i=t.filter((e=>{const t=e.deviceId,i=r.get(t);return i&&(o.delete(t),e.label!==i.label&&n.push(e)),void 0===i}));return{updated:n.map((e=>({type:"updated",payload:e}))),removed:Array.from(o,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:i.map((e=>({type:"added",payload:e})))}})(t,o),a=s.added.length>0,c=s.removed.length>0,d=s.updated.length>0;(a||c||d)&&r.emit("changed",{changes:s,devices:o}),a&&r.emit("added",{changes:s.added,devices:o}),c&&r.emit("removed",{changes:s.removed,devices:o}),d&&r.emit("updated",{changes:s.updated,devices:o})})),r},Ps=()=>Is({targets:["speaker"]}),Ts=e=>"function"==typeof(null==e?void 0:e.getTracks),Ms=async e=>(await bs()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e)),Rs=e=>{lr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return ms(e)},xs=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:o=""}=e;if(r){const e=await _s(r,o,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:n=!1,camId:i}=e;const{camLabel:s=""}=e;if(i){const e=await _s(i,s,"camera").catch((e=>null));e&&("boolean"==typeof n&&(n={}),n.deviceId={exact:e})}return{audio:t,video:n}},Os=(e,t)=>{const{disableUdpIceServers:r=!1}=t,o=e=>{const t="transport=udp";return Array.isArray(e)?e.filter((e=>!e.includes(t))):e.includes(t)?"":e};return e.map((e=>Object.assign(Object.assign({},e),{urls:r?o(e.urls):e.urls})))};var As={exports:{}};!function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;t.push("rtp"===r?1:"rtcp"===r?2:r),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const o=e.type;return t.push("typ"),t.push(o),"host"!==o&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substring(14).split(" ")},t.parseRtpMap=function(e){let t=e.substring(9).split(" ");const r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){const t=e.substring(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},t.parseFmtp=function(e){const t={};let r;const o=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e<o.length;e++)r=o[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const o=[];Object.keys(e.parameters).forEach((t=>{o.push(void 0!==e.parameters[t]?t+"="+e.parameters[t]:t)})),t+="a=fmtp:"+r+" "+o.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},o=e.indexOf(":",t);return o>-1?(r.attribute=e.substring(t+1,o),r.value=e.substring(o+1)):r.attribute=e.substring(t+1),r},t.parseSsrcGroup=function(e){const t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substring(6)},t.parseFingerprint=function(e){const t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){const t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const o=t.matchPrefix(e+r,"a=ice-ufrag:")[0],n=t.matchPrefix(e+r,"a=ice-pwd:")[0];return o&&n?{usernameFragment:o.substring(12),password:n.substring(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},o=t.splitLines(e)[0].split(" ");r.profile=o[2];for(let n=3;n<o.length;n++){const i=o[n],s=t.matchPrefix(e,"a=rtpmap:"+i+" ")[0];if(s){const o=t.parseRtpMap(s),n=t.matchPrefix(e,"a=fmtp:"+i+" ");switch(o.parameters=n.length?t.parseFmtp(n[0]):{},o.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+i+" ").map(t.parseRtcpFb),r.codecs.push(o),o.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(o.name.toUpperCase())}}}t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))}));const n=t.matchPrefix(e,"a=rtcp-fb:* ").map(t.parseRtcpFb);return r.codecs.forEach((e=>{n.forEach((t=>{e.rtcpFeedback.find((e=>e.type===t.type&&e.parameter===t.parameter))||e.rtcpFeedback.push(t)}))})),r},t.writeRtpDescription=function(e,r){let o="";o+="m="+e+" ",o+=r.codecs.length>0?"9":"0",o+=" "+(r.profile||"UDP/TLS/RTP/SAVPF")+" ",o+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",o+="c=IN IP4 0.0.0.0\r\n",o+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{o+=t.writeRtpMap(e),o+=t.writeFmtp(e),o+=t.writeRtcpFb(e)}));let n=0;return r.codecs.forEach((e=>{e.maxptime>n&&(n=e.maxptime)})),n>0&&(o+="a=maxptime:"+n+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{o+=t.writeExtmap(e)})),o},t.parseRtpEncodingParameters=function(e){const r=[],o=t.parseRtpParameters(e),n=-1!==o.fecMechanisms.indexOf("RED"),i=-1!==o.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),o.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&c&&(t.rtx={ssrc:c}),r.push(t),n&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:a,mechanism:i?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substring(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=l}))),r},t.parseRtcpParameters=function(e){const r={},o=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];o&&(r.cname=o.value,r.ssrc=o.ssrc);const n=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=n.length>0,r.compound=0===n.length;const i=t.matchPrefix(e,"a=rtcp-mux");return r.mux=i.length>0,r},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let r;const o=t.matchPrefix(e,"a=msid:");if(1===o.length)return r=o[0].substring(7).split(" "),{stream:r[0],track:r[1]};const n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return n.length>0?(r=n[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),o=t.matchPrefix(e,"a=max-message-size:");let n;o.length>0&&(n=parseInt(o[0].substring(19),10)),isNaN(n)&&(n=65536);const i=t.matchPrefix(e,"a=sctp-port:");if(i.length>0)return{port:parseInt(i[0].substring(12),10),protocol:r.fmt,maxMessageSize:n};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:n}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,o){let n;const i=void 0!==r?r:2;return n=e||t.generateSessionId(),"v=0\r\no="+(o||"thisisadapterortc")+" "+n+" "+i+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const o=t.splitLines(e);for(let e=0;e<o.length;e++)switch(o[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return o[e].substring(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substring(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const r=t.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(As);var js=As.exports;const Ls=e=>/^m=audio/.test(e),Ds=e=>/^m=video/.test(e),Ws=(e,t)=>e.includes(`\r\nm=${t}`),Ns=e=>{const t="\r\n",r=e.split(t),o=r.findIndex((e=>/^a=rtpmap/.test(e)&&/opus\/48000/.test(e)));if(o<0)return e;const n=(e=>{const t=new RegExp("a=rtpmap:(\\d+) \\w+\\/\\d+"),r=e.match(t);return r&&2==r.length?r[1]:null})(r[o]),i=new RegExp(`a=fmtp:${n}`),s=r.findIndex((e=>i.test(e)));return s>=0?/stereo=1;/.test(r[s])||(r[s]+="; stereo=1; sprop-stereo=1"):r[o]+=`${t}a=fmtp:${n} stereo=1; sprop-stereo=1`,r.join(t)};class Vs{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this._restartingIce=!1,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this._onEndedTrackHandler=this._onEndedTrackHandler.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&ts(this.options.localStream)&&(this._localStream=this.options.localStream),this.rtcConfigPolyfill=this.config}get logger(){return lr()}get options(){return this.call.options}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:Os(this.call.iceServers,{disableUdpIceServers:this.options.disableUdpIceServers}),sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(is(r.track),null===(t=this._localStream)||void 0===t||t.removeTrack(r.track))}catch(t){this.logger.error("RTCPeer stopTrackSender error",e,t)}}async restoreTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to restore.`);if(r.track&&"ended"!==r.track.readyState)return this.logger.info(`There is already an active ${e} track.`);const o=await xs(this.options),n=await Rs({[e]:o[e]});if(n&&ts(n)){const o=n.getTracks().find((t=>t.kind===e));o&&(await r.replaceTrack(o),null===(t=this._localStream)||void 0===t||t.addTrack(o))}}catch(t){this.logger.error("RTCPeer restoreTrackSender error",e,t)}}getDeviceId(e){try{const t=this._getSenderByKind(e);if(!t||!t.track)return null;const{deviceId:r=null}=t.track.getSettings();return r}catch(t){return this.logger.error("RTCPeer getDeviceId error",e,t),null}}getTrackSettings(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.getSettings():null}catch(t){return this.logger.error("RTCPeer getTrackSettings error",e,t),null}}getDeviceLabel(e){try{const t=this._getSenderByKind(e);return t&&t.track?t.track.label:null}catch(t){return this.logger.error("RTCPeer getDeviceLabel error",e,t),null}}restartIceWithRelayOnly(){try{if(this.isAnswer)return this.logger.warn("Skip restartIceWithRelayOnly since we need to generate answer");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.warn("RTCPeer already with iceTransportPolicy relay only");const t=Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"});this.setConfiguration(t),this.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){if(this._negotiating||this._restartingIce)return this.logger.warn("Skip restartIce");this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this._resumeTimer?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this._resumeTimer=setTimeout((()=>{this.logger.warn("Disconnecting due to RECONNECTION_ATTEMPT_TIMEOUT"),this.call.emit("media.disconnected"),this.call.leaveReason="RECONNECTION_ATTEMPT_TIMEOUT",this.call.setState("hangup")}),12e3),this.call._closeWSConnection())}resetNeedResume(){this.clearResumeTimer(),this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void lr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);lr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,o=0,n=!0;const i=()=>{clearTimeout(t)},s=async()=>{var a,c;let d=0,l=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,o=null===(c=e.remoteVideoTrack)||void 0===c?void 0:c.id;t.forEach((e=>{"inbound-rtp"===e.type&&"audio"===e.kind&&e.trackIdentifier===r&&(lr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===o&&(lr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),l=e.packetsReceived)}))}catch(e){lr().warn("getStats error",e)}finally{d&&d<=r&&l&&l<=o?(lr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),lr().warn(`videoPacketsReceived: ${l} - previousVideoValue: ${o}`),e.triggerResume()):(r=null!=d?d:r,o=null!=l?l:o,i(),n&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>s()),e.watchMediaPacketsTimeout)))}};return{start:()=>{i(),s()},stop:()=>{n=!1,i()}}})(this),null===(e=this._mediaWatcher)||void 0===e||e.start()}async applyMediaConstraints(e,t){try{const r=this._getSenderByKind(e);if(!r||!r.track)return this.logger.info("No sender to apply constraints",e,t);if("live"===r.track.readyState){const o=Object.assign(Object.assign({},r.track.getConstraints()),t),n=this.getDeviceId(e);n&&!this.options.screenShare&&(o.deviceId={exact:n}),this.logger.info(`Apply ${e} constraints`,this.call.id,o),await r.track.applyConstraints(o)}}catch(r){this.logger.error("Error applying constraints",e,t)}}_getSenderByKind(e){return this.instance.getSenders?this.instance.getSenders().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getSenders() not available."),null)}_getReceiverByKind(e){return this.instance.getReceivers?this.instance.getReceivers().find((({track:t})=>t&&t.kind===e)):(this.logger.warn("RTCPeerConnection.getReceivers() not available."),null)}async startNegotiation(e=!1){var t,r;if(this._negotiating)return this.logger.warn("Skip twice onnegotiationneeded!");this._negotiating=!0;try{if((this.options.additionalDevice||this.options.screenShare)&&(null===(r=null===(t=this.instance)||void 0===t?void 0:t.getTransceivers)||void 0===r||r.call(t).forEach((e=>{e.direction="sendonly"}))),this.instance.removeEventListener("icecandidate",this._onIce),this.instance.addEventListener("icecandidate",this._onIce),this.isOffer){this.logger.debug("Trying to generate offer");const e={voiceActivityDetection:!1};this._supportsAddTransceiver()||(e.offerToReceiveAudio=this.options.negotiateAudio,e.offerToReceiveVideo=this.options.negotiateVideo);const t=await this.instance.createOffer(e);await this._setLocalDescription(t)}if(this.isAnswer){this.logger.debug("Trying to generate answer"),await this._setRemoteDescription({sdp:this.options.remoteSdp,type:"offer"});const e=await this.instance.createAnswer({voiceActivityDetection:!1});await this._setLocalDescription(e)}e&&this._sdpReady(),this.logger.info("iceGatheringState",this.instance.iceGatheringState),"gathering"===this.instance.iceGatheringState&&(this._iceTimeout=setTimeout((()=>{this._onIceTimeout()}),this.options.maxIceGatheringTimeout))}catch(e){this.logger.error(`Error creating ${this.type}:`,e)}}onRemoteBye({code:e,message:t}){var r;null===(r=this._rejectStartMethod)||void 0===r||r.call(this,{code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}_remoteSdpHasVideo(){var e;return Ws(null!==(e=this.remoteSdp)&&void 0!==e?e:"","video")}_remoteSdpHasAudio(){var e;return Ws(null!==(e=this.remoteSdp)&&void 0!==e?e:"","audio")}async start(){return new Promise((async(e,t)=>{this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let r=!1;if(this._localStream&&ts(this._localStream)){const e=this.isOffer||this._remoteSdpHasAudio()?this._localStream.getAudioTracks():[];this.logger.debug("Local audio tracks: ",e);const t=this.isOffer||this._remoteSdpHasVideo()?this._localStream.getVideoTracks():[];if(this.logger.debug("Local video tracks: ",t),r=Boolean(e.length||t.length),this.isOffer&&"function"==typeof this.instance.addTransceiver){const r={direction:this.options.negotiateAudio?"sendrecv":"sendonly",streams:[this._localStream]};this.logger.debug("Applying audioTransceiverParams",r),e.forEach((e=>{this.instance.addTransceiver(e,r)}));const o={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(o.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",o),t.forEach((e=>{this.instance.addTransceiver(e,o)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),o.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",o)}}else if("function"==typeof this.instance.addTrack){const r=this._localStream;e.forEach((e=>this.instance.addTrack(e,r))),t.forEach((e=>this.instance.addTrack(e,r)))}else this.instance.addStream(this._localStream)}this.isOffer?(this.options.negotiateAudio&&this._checkMediaToNegotiate("audio"),this.options.negotiateVideo&&this._checkMediaToNegotiate("video"),this._supportsAddTransceiver()||r||this.startNegotiation()):this.startNegotiation()}))}detachAndStop(){var e;"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getTransceivers)&&this.instance.getTransceivers().forEach((e=>{e.sender.track&&e.sender.track.stop(),e.receiver.track&&e.receiver.track.stop()})),this.stop()}stop(){var e,t,r;null===(e=this._localStream)||void 0===e||e.getTracks().forEach((e=>e.stop())),null===(t=this._remoteStream)||void 0===t||t.getTracks().forEach((e=>e.stop())),null===(r=this.instance)||void 0===r||r.close(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this),this.isAnswer&&this._resolveStartMethod()}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=js.getMediaSections(e);for(const e of r)if(!js.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return lr().error("Error checking SDP",e),!1}})(this.localSdp):Boolean(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.info('RTCPeer already with "iceTransportPolicy: relay"'),this._rejectStartMethod({code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"}),void this.call.setState("destroy");this.setConfiguration(Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:o,googleStartBitrate:n}=this.options;return e.sdp&&t&&(e.sdp=Ns(e.sdp)),e.sdp&&r&&o&&n&&(e.sdp=((e,t,r,o)=>{const n=e.split("\r\n");return n.forEach(((e,i)=>{/^a=fmtp:\d*/.test(e)?n[i]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${o}`:/^a=mid:(1|video)/.test(e)&&(n[i]+=`\r\nb=AS:${t}`)})),n.join("\r\n")})(e.sdp,r,o,n)),this.instance.setLocalDescription(e)}_setRemoteDescription(e){e.sdp&&this.options.useStereo&&(e.sdp=Ns(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r),n=o.findIndex(Ls),i=o.findIndex(Ds);if(-1==i||-1==n||n<i)return e;const s=e.split(r),a=s.findIndex(Ls),c=s.findIndex(Ds),d=s.slice(a,c),l=s.slice(c,s.length-1);return[...s.slice(0,a),...l,...d,""].join(r)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(ts(this.options.localStream))return this.options.localStream;const e=await xs(this.options);return Rs(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":this.logger.debug("[test] Prevent reattach!");break;case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)})),this._attachAudioTrackListener(),this._attachVideoTrackListener()}clearTimers(){this.clearResumeTimer(),this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}clearResumeTimer(){clearTimeout(this._resumeTimer),this._resumeTimer=void 0}emitMediaConnected(){this.call.emit("media.connected")}_onEndedTrackHandler(e){const t=e.target;this.call.emit(("audio"===t.kind?"microphone":"camera")+".disconnected",{deviceId:t.id,label:t.label})}_attachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_attachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_detachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}_detachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}setConfiguration(e){var t;this.rtcConfigPolyfill=e,this.instance&&"function"==typeof(null===(t=this.instance)||void 0===t?void 0:t.setConfiguration)&&this.instance.setConfiguration(e)}getConfiguration(){var e;return this.instance&&"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getConfiguration)?this.instance.getConfiguration():this.rtcConfigPolyfill||this.config}}
|
|
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 i(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(t,r){for(var o=0;o<n.length;o++){var i=n[o];this[i]=o<t?e:this.methodFactory(i,t,r)}this.log=this.debug}function a(e,r,n){return function(){typeof console!==t&&(s.call(this,r,n),this[e].apply(this,arguments))}}function c(n,s,c){return function(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?i: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 i,a=this;r=null==r?"WARN":r;var d="loglevel";function l(){var e;if(typeof window!==t&&d){try{e=window.localStorage[d]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,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 i},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(i=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),s.call(a,r,e),typeof console===t&&r<a.levels.SILENT)return"No console available for logging"},a.setDefaultLevel=function(e){r=e,l()||a.setLevel(e,!1)},a.resetLevel=function(){a.setLevel(r,!1),function(){if(typeof window!==t&&d){try{return void window.localStorage.removeItem(d)}catch(e){}try{window.document.cookie=encodeURIComponent(d)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(e){}}}()},a.enableAll=function(e){a.setLevel(a.levels.TRACE,e)},a.disableAll=function(e){a.setLevel(a.levels.SILENT,e)};var u=l();null==u&&(u=r),a.setLevel(u,!1)}var l=new d,u={};l.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=u[e];return t||(t=u[e]=new d(e,l.getLevel(),l.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return l.noConflict=function(){return typeof window!==t&&window.log===l&&(window.log=h),l},l.getLoggers=function(){return u},l.default=l,l},e.exports?e.exports=n():r.log=n()}(r);var n=r.exports;let o;const i=new Uint8Array(16);function s(){if(!o&&(o="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!o))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return o(i)}var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));function d(e,t=0){return(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase()}const l="6ba7b810-9dad-11d1-80b4-00c04fd430c8",u="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function h(e,t,r){function n(e,n,o,i){var s;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof n&&(n=function(e){if(!function(e){return"string"==typeof e&&a.test(e)}(e))throw TypeError("Invalid UUID");let t;const r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}(n)),16!==(null===(s=n)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let c=new Uint8Array(16+e.length);if(c.set(n),c.set(e,n.length),c=r(c),c[6]=15&c[6]|t,c[8]=63&c[8]|128,o){i=i||0;for(let e=0;e<16;++e)o[i+e]=c[e];return o}return d(c)}try{n.name=e}catch(e){}return n.DNS=l,n.URL=u,n}function m(e){return 14+(e+64>>>9<<4)+1}function p(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function g(e,t,r,n,o,i){return p((s=p(p(t,e),p(n,i)))<<(a=o)|s>>>32-a,r);var s,a}function f(e,t,r,n,o,i,s){return g(t&r|~t&n,e,t,o,i,s)}function v(e,t,r,n,o,i,s){return g(t&n|r&~n,e,t,o,i,s)}function y(e,t,r,n,o,i,s){return g(t^r^n,e,t,o,i,s)}function b(e,t,r,n,o,i,s){return g(r^(t|~n),e,t,o,i,s)}h("v3",48,(function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){const t=[],r=32*e.length,n="0123456789abcdef";for(let o=0;o<r;o+=8){const r=e[o>>5]>>>o%32&255,i=parseInt(n.charAt(r>>>4&15)+n.charAt(15&r),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[m(t)-1]=t;let r=1732584193,n=-271733879,o=-1732584194,i=271733878;for(let t=0;t<e.length;t+=16){const s=r,a=n,c=o,d=i;r=f(r,n,o,i,e[t],7,-680876936),i=f(i,r,n,o,e[t+1],12,-389564586),o=f(o,i,r,n,e[t+2],17,606105819),n=f(n,o,i,r,e[t+3],22,-1044525330),r=f(r,n,o,i,e[t+4],7,-176418897),i=f(i,r,n,o,e[t+5],12,1200080426),o=f(o,i,r,n,e[t+6],17,-1473231341),n=f(n,o,i,r,e[t+7],22,-45705983),r=f(r,n,o,i,e[t+8],7,1770035416),i=f(i,r,n,o,e[t+9],12,-1958414417),o=f(o,i,r,n,e[t+10],17,-42063),n=f(n,o,i,r,e[t+11],22,-1990404162),r=f(r,n,o,i,e[t+12],7,1804603682),i=f(i,r,n,o,e[t+13],12,-40341101),o=f(o,i,r,n,e[t+14],17,-1502002290),n=f(n,o,i,r,e[t+15],22,1236535329),r=v(r,n,o,i,e[t+1],5,-165796510),i=v(i,r,n,o,e[t+6],9,-1069501632),o=v(o,i,r,n,e[t+11],14,643717713),n=v(n,o,i,r,e[t],20,-373897302),r=v(r,n,o,i,e[t+5],5,-701558691),i=v(i,r,n,o,e[t+10],9,38016083),o=v(o,i,r,n,e[t+15],14,-660478335),n=v(n,o,i,r,e[t+4],20,-405537848),r=v(r,n,o,i,e[t+9],5,568446438),i=v(i,r,n,o,e[t+14],9,-1019803690),o=v(o,i,r,n,e[t+3],14,-187363961),n=v(n,o,i,r,e[t+8],20,1163531501),r=v(r,n,o,i,e[t+13],5,-1444681467),i=v(i,r,n,o,e[t+2],9,-51403784),o=v(o,i,r,n,e[t+7],14,1735328473),n=v(n,o,i,r,e[t+12],20,-1926607734),r=y(r,n,o,i,e[t+5],4,-378558),i=y(i,r,n,o,e[t+8],11,-2022574463),o=y(o,i,r,n,e[t+11],16,1839030562),n=y(n,o,i,r,e[t+14],23,-35309556),r=y(r,n,o,i,e[t+1],4,-1530992060),i=y(i,r,n,o,e[t+4],11,1272893353),o=y(o,i,r,n,e[t+7],16,-155497632),n=y(n,o,i,r,e[t+10],23,-1094730640),r=y(r,n,o,i,e[t+13],4,681279174),i=y(i,r,n,o,e[t],11,-358537222),o=y(o,i,r,n,e[t+3],16,-722521979),n=y(n,o,i,r,e[t+6],23,76029189),r=y(r,n,o,i,e[t+9],4,-640364487),i=y(i,r,n,o,e[t+12],11,-421815835),o=y(o,i,r,n,e[t+15],16,530742520),n=y(n,o,i,r,e[t+2],23,-995338651),r=b(r,n,o,i,e[t],6,-198630844),i=b(i,r,n,o,e[t+7],10,1126891415),o=b(o,i,r,n,e[t+14],15,-1416354905),n=b(n,o,i,r,e[t+5],21,-57434055),r=b(r,n,o,i,e[t+12],6,1700485571),i=b(i,r,n,o,e[t+3],10,-1894986606),o=b(o,i,r,n,e[t+10],15,-1051523),n=b(n,o,i,r,e[t+1],21,-2054922799),r=b(r,n,o,i,e[t+8],6,1873313359),i=b(i,r,n,o,e[t+15],10,-30611744),o=b(o,i,r,n,e[t+6],15,-1560198380),n=b(n,o,i,r,e[t+13],21,1309151649),r=b(r,n,o,i,e[t+4],6,-145523070),i=b(i,r,n,o,e[t+11],10,-1120210379),o=b(o,i,r,n,e[t+2],15,718787259),n=b(n,o,i,r,e[t+9],21,-343485551),r=p(r,s),n=p(n,a),o=p(o,c),i=p(i,d)}return[r,n,o,i]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(m(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}));var _={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function w(e,t,r){if(_.randomUUID&&!t&&!e)return _.randomUUID();const n=(e=e||{}).random||(e.rng||s)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=n[e];return t}return d(n)}function S(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 k(e,t){return e<<t|e>>>32-t}function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function I(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===C(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach((function(t){I(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function 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. "}h("v5",80,(function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const n=Math.ceil((e.length/4+2)/16),o=new Array(n);for(let t=0;t<n;++t){const r=new Uint32Array(16);for(let n=0;n<16;++n)r[n]=e[64*t+4*n]<<24|e[64*t+4*n+1]<<16|e[64*t+4*n+2]<<8|e[64*t+4*n+3];o[t]=r}o[n-1][14]=8*(e.length-1)/Math.pow(2,32),o[n-1][14]=Math.floor(o[n-1][14]),o[n-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<n;++e){const n=new Uint32Array(80);for(let t=0;t<16;++t)n[t]=o[e][t];for(let e=16;e<80;++e)n[e]=k(n[e-3]^n[e-8]^n[e-14]^n[e-16],1);let i=r[0],s=r[1],a=r[2],c=r[3],d=r[4];for(let e=0;e<80;++e){const r=Math.floor(e/20),o=k(i,5)+S(r,s,a,c)+d+t[r]+n[e]>>>0;d=c,c=a,a=k(s,30)>>>0,s=i,i=o}r[0]=r[0]+i>>>0,r[1]=r[1]+s>>>0,r[2]=r[2]+a>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+d>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));var T="function"==typeof Symbol&&Symbol.observable||"@@observable",R=function(){return Math.random().toString(36).substring(7).split("").join(".")},x={INIT:"@@redux/INIT"+R(),REPLACE:"@@redux/REPLACE"+R(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+R()}};function A(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(A)(e,t)}if("function"!=typeof e)throw new Error(M(2));var o=e,i=t,s=[],a=s,c=!1;function d(){a===s&&(a=s.slice())}function l(){if(c)throw new Error(M(3));return i}function u(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),s=null}}}function h(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error(M(7));if(void 0===e.type)throw new Error(M(8));if(c)throw new Error(M(9));try{c=!0,i=o(i,e)}finally{c=!1}for(var t=s=a,r=0;r<t.length;r++)(0,t[r])();return e}return h({type:x.INIT}),(n={dispatch:h,subscribe:u,getState:l,replaceReducer:function(e){if("function"!=typeof e)throw new Error(M(10));o=e,h({type:x.REPLACE})}})[T]=function(){var e,t=u;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(M(11));function r(){e.next&&e.next(l())}return r(),{unsubscribe:t(r)}}})[T]=function(){return this},e},n}function O(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 i,s=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:x.INIT}))throw new Error(M(12));if(void 0===r(void 0,{type:x.PROBE_UNKNOWN_ACTION()}))throw new Error(M(13))}))}(r)}catch(e){i=e}return function(e,t){if(void 0===e&&(e={}),i)throw i;for(var n=!1,o={},a=0;a<s.length;a++){var c=s[a],d=e[c],l=(0,r[c])(d,t);if(void 0===l)throw new Error(M(14));o[c]=l,n=n||l!==d}return(n=n||s.length!==Object.keys(e).length)?o:e}}function j(e,t){return function(){return t(e.apply(this,arguments))}}function L(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function D(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),n=function(){throw new Error(M(15))},o={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},i=t.map((function(e){return e(o)}));return n=L.apply(void 0,i)(r.dispatch),P(P({},r),{},{dispatch:n})}}}var W=Object.freeze({__proto__:null,__DO_NOT_USE__ActionTypes:x,applyMiddleware:D,bindActionCreators:function(e,t){if("function"==typeof e)return j(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]=j(o,t))}return r},combineReducers:O,compose:L,createStore:A,legacy_createStore:A}),N=function(e){return"@@redux-saga/"+e},V=N("CANCEL_PROMISE"),U=N("CHANNEL_END"),$=N("IO"),B=N("MATCH"),z=N("MULTICAST"),H=N("SAGA_ACTION"),F=N("SELF_CANCELLATION"),q=N("TASK"),K=N("TASK_CANCEL"),J=N("TERMINATE"),G=N("LOCATION");function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Q.apply(this,arguments)}var X=function(e){return null==e},Y=function(e){return null!=e},Z=function(e){return"function"==typeof e},ee=function(e){return"string"==typeof e},te=Array.isArray,re=function(e){return e&&Z(e.then)},ne=function(e){return e&&Z(e.next)&&Z(e.throw)},oe=function e(t){return t&&(ee(t)||ae(t)||Z(t)||te(t)&&t.every(e))},ie=function(e){return e&&Z(e.take)&&Z(e.close)},se=function(e){return Z(e)&&e.hasOwnProperty("toString")},ae=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype},ce=function(e){return ie(e)&&e[z]},de=function(e){return function(){return!0}}(),le=function(){},ue=function(e){return e},he=function(e,t){Q(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(r){e[r]=t[r]}))},me=function(e,t){var r;return(r=[]).concat.apply(r,t.map(e))};function pe(e,t){var r=e.indexOf(t);r>=0&&e.splice(r,1)}function ge(e){var t=!1;return function(){t||(t=!0,e())}}var fe=function(e){throw e},ve=function(e){return{value:e,done:!0}};function ye(e,t,r){void 0===t&&(t=fe),void 0===r&&(r="iterator");var n={meta:{name:r},next:e,throw:t,return:ve,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(n[Symbol.iterator]=function(){return n}),n}function be(e,t){var r=t.sagaStack;console.error(e),console.error(r)}var _e=function(e){return Array.apply(null,new Array(e))},we=function(e){return function(t){return e(Object.defineProperty(t,H,{value:!0}))}},Se=function(e){return e===J},ke=function(e){return e===K},Ce=function(e){return Se(e)||ke(e)};function Ie(e,t){var r,n=Object.keys(e),o=n.length,i=0,s=te(e)?_e(o):{},a={};return n.forEach((function(e){var n=function(n,a){r||(a||Ce(n)?(t.cancel(),t(n,a)):(s[e]=n,++i===o&&(r=!0,t(s))))};n.cancel=le,a[e]=n})),t.cancel=function(){r||(r=!0,n.forEach((function(e){return a[e].cancel()})))},a}function Ee(e){return{name:e.name||"anonymous",location:Pe(e)}}function Pe(e){return e[G]}var Me={isEmpty:de,put:le,take:le},Te=function(){return Me},Re=function(e){return function(e,t){void 0===e&&(e=10);var r=new Array(e),n=0,o=0,i=0,s=function(){if(0!=n){var t=r[i];return r[i]=null,n--,i=(i+1)%e,t}},a=function(){for(var e=[];n;)e.push(s());return e};return{isEmpty:function(){return 0==n},put:function(t){var s;n<e||(s=2*e,r=a(),n=r.length,o=r.length,i=0,r.length=s,e=s),function(t){r[o]=t,o=(o+1)%e,n++}(t)},take:s,flush:a}}(e)},xe="TAKE",Ae="PUT",Oe="ALL",je="CALL",Le="FORK",De="SELECT",We="CANCELLED",Ne=function(e,t){var r;return(r={})[$]=!0,r.combinator=!1,r.type=e,r.payload=t,r},Ve=function(e){return Ne(Le,Q({},e.payload,{detached:!0}))};function Ue(e,t){return void 0===e&&(e="*"),oe(e)?(Y(t)&&console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"),Ne(xe,{pattern:e})):ce(e)&&Y(t)&&oe(t)?Ne(xe,{channel:e,pattern:t}):ie(e)?(Y(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),Ne(xe,{channel:e})):void 0}function $e(e,t){return X(t)&&(t=e,e=void 0),Ne(Ae,{channel:e,action:t})}function Be(e,t){var r,n=null;return Z(e)?r=e:(te(e)?(n=e[0],r=e[1]):(n=e.context,r=e.fn),n&&ee(r)&&Z(n[r])&&(r=n[r])),{context:n,fn:r,args:t}}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 Ne(je,Be(e,r))}function He(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 Ne(Le,Be(e,r))}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(He.apply(void 0,[e].concat(r)))}function qe(e){void 0===e&&(e=ue);for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return Ne(De,{selector:e,args:r})}function Ke(){return Ne(We,{})}var Je=[],Ge=0;function Qe(e){try{Ze(),e()}finally{et()}}function Xe(e){Je.push(e),Ge||(Ze(),tt())}function Ye(e){try{return Ze(),e()}finally{tt()}}function Ze(){Ge++}function et(){Ge--}function tt(){var e;for(et();!Ge&&void 0!==(e=Je.shift());)Qe(e)}var rt=function(e){return function(t){return e.some((function(e){return at(e)(t)}))}},nt=function(e){return function(t){return e(t)}},ot=function(e){return function(t){return t.type===String(e)}},it=function(e){return function(t){return t.type===e}},st=function(){return de};function at(e){var t="*"===e?st:ee(e)?ot:te(e)?rt:se(e)?ot:Z(e)?nt:ae(e)?it:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var ct={type:U},dt=function(e){return e&&e.type===U};function lt(e){void 0===e&&(e=Re());var t=!1,r=[];return{take:function(n){t&&e.isEmpty()?n(ct):e.isEmpty()?(r.push(n),n.cancel=function(){pe(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(ct):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])(ct)}}}}function ut(e,t){void 0===t&&(t=Te());var r,n=!1,o=lt(t),i=function(){n||(n=!0,Z(r)&&r(),o.close())};return r=ge(r=e((function(e){dt(e)?i():o.put(e)}))),n&&r(),{take:o.take,flush:o.flush,close:i}}function ht(){var e,t=!1,r=[],n=r,o=function(){n===r&&(n=r.slice())},i=function(){t=!0;var e=r=n;n=[],e.forEach((function(e){e(ct)}))};return(e={})[z]=!0,e.put=function(e){if(!t)if(dt(e))i();else for(var o=r=n,s=0,a=o.length;s<a;s++){var c=o[s];c[B](e)&&(c.cancel(),c(e))}},e.take=function(e,r){void 0===r&&(r=st),t?e(ct):(e[B]=r,o(),n.push(e),e.cancel=ge((function(){o(),pe(n,e)})))},e.close=i,e}function mt(){var e=ht(),t=e.put;return e.put=function(e){e[H]?t(e):Xe((function(){t(e)}))},e}var pt=0,gt=1,ft=2,vt=3;function yt(e,t){var r=e[V];Z(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var bt,_t=0,wt=function(){return++_t};function St(e){e.isRunning()&&e.cancel()}var kt=((bt={})[xe]=function(e,t,r){var n=t.channel,o=void 0===n?e.channel:n,i=t.pattern,s=t.maybe,a=function(e){e instanceof Error?r(e,!0):!dt(e)||s?r(e):r(J)};try{o.take(a,Y(i)?at(i):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},bt[Ae]=function(e,t,r){var n=t.channel,o=t.action,i=t.resolve;Xe((function(){var t;try{t=(n?n.put:e.dispatch)(o)}catch(e){return void r(e,!0)}i&&re(t)?yt(t,r):r(t)}))},bt[Oe]=function(e,t,r,n){var o=n.digestEffect,i=_t,s=Object.keys(t);if(0!==s.length){var a=Ie(t,r);s.forEach((function(e){o(t[e],i,a[e],e)}))}else r(te(t)?[]:{})},bt.RACE=function(e,t,r,n){var o=n.digestEffect,i=_t,s=Object.keys(t),a=te(t)?_e(s.length):{},c={},d=!1;s.forEach((function(e){var t=function(t,n){d||(n||Ce(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,s.forEach((function(e){return c[e].cancel()})))},s.forEach((function(e){d||o(t[e],i,c[e],e)}))},bt[je]=function(e,t,r,n){var o=t.context,i=t.fn,s=t.args,a=n.task;try{var c=i.apply(o,s);if(re(c))return void yt(c,r);if(ne(c))return void Ot(e,c,a.context,_t,Ee(i),!1,r);r(c)}catch(e){r(e,!0)}},bt.CPS=function(e,t,r){var n=t.context,o=t.fn,i=t.args;try{var s=function(e,t){X(e)?r(t):r(e,!0)};o.apply(n,i.concat(s)),s.cancel&&(r.cancel=s.cancel)}catch(e){r(e,!0)}},bt[Le]=function(e,t,r,n){var o=t.fn,i=t.detached,s=n.task,a=function(e){var t=e.context,r=e.fn,n=e.args;try{var o=r.apply(t,n);if(ne(o))return o;var i=!1;return ye((function(e){return i?{value:e,done:!0}:(i=!0,{value:o,done:!re(o)})}))}catch(e){return ye((function(){throw e}))}}({context:t.context,fn:o,args:t.args}),c=function(e,t){return e.isSagaIterator?{name:e.meta.name}:Ee(t)}(a,o);Ye((function(){var t=Ot(e,a,s.context,_t,c,i,void 0);i?r(t):t.isRunning()?(s.queue.addTask(t),r(t)):t.isAborted()?s.queue.abort(t.error()):r(t)}))},bt.JOIN=function(e,t,r,n){var o=n.task,i=function(e,t){if(e.isRunning()){var r={task:o,cb:t};t.cancel=function(){e.isRunning()&&pe(e.joiners,r)},e.joiners.push(r)}else e.isAborted()?t(e.error(),!0):t(e.result())};if(te(t)){if(0===t.length)return void r([]);var s=Ie(t,r);t.forEach((function(e,t){i(e,s[t])}))}else i(t,r)},bt.CANCEL=function(e,t,r,n){t===F?St(n.task):te(t)?t.forEach(St):St(t),r()},bt[De]=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)}},bt.ACTION_CHANNEL=function(e,t,r){var n=t.pattern,o=lt(t.buffer),i=at(n),s=function t(r){dt(r)||e.channel.take(t,i),o.put(r)},a=o.close;o.close=function(){s.cancel(),a()},e.channel.take(s,i),r(o)},bt[We]=function(e,t,r,n){r(n.task.isCancelled())},bt.FLUSH=function(e,t,r){t.flush(r)},bt.GET_CONTEXT=function(e,t,r,n){r(n.task.context[t])},bt.SET_CONTEXT=function(e,t,r,n){he(n.task.context,t),r()},bt);function Ct(e,t){return e+"?"+t}function It(e){var t=e.name,r=e.location;return r?t+" "+Ct(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 Pt=null,Mt=[],Tt=function(e){e.crashedEffect=Pt,Mt.push(e)},Rt=function(){Pt=null,Mt.length=0},xt=function(e){Pt=e},At=function(){var e,t=Mt[0],r=Mt.slice(1),n=t.crashedEffect?(e=Pe(t.crashedEffect))?e.code+" "+Ct(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+It(t.meta)+(n?" \n when executing effect "+n:"")].concat(r.map((function(e){return" created by "+It(e.meta)})),[Et(Mt)]).join("\n")};function Ot(e,t,r,n,o,i,s){var a=e.finalizeRunEffect((function(t,r,n){re(t)?yt(t,n):ne(t)?Ot(e,t,d.context,r,o,!1,n):t&&t[$]?(0,kt[t.type])(e,t.payload,n,l):n(t)}));u.cancel=le;var c={meta:o,cancel:function(){c.status===pt&&(c.status=gt,u(K))},status:pt},d=function(e,t,r,n,o,i,s){var a;void 0===s&&(s=le);var c,d,l=pt,u=null,h=[],m=Object.create(r),p=function(e,t,r){var n,o=[],i=!1;function s(e){h.push.apply(h,p.getTasks().map((function(e){return e.meta.name}))),c(),r(e,!0)}function a(t){o.push(t),t.cont=function(a,c){i||(pe(o,t),t.cont=le,c?s(a):(t===e&&(n=a),o.length||(i=!0,r(n))))}}function c(){i||(i=!0,o.forEach((function(e){e.cont=le,e.cancel()})),o=[])}return a(e),{addTask:a,cancelAll:c,abort:s,getTasks:function(){return o}}}(t,0,g);function g(t,r){if(r){if(l=ft,Tt({meta:o,cancelledTasks:h}),f.isRoot){var n=At();Rt(),e.onError(t,{sagaStack:n})}d=t,u&&u.reject(t)}else t===K?l=gt:l!==gt&&(l=vt),c=t,u&&u.resolve(t);f.cont(t,r),f.joiners.forEach((function(e){e.cb(t,r)})),f.joiners=null}var f=((a={})[q]=!0,a.id=n,a.meta=o,a.isRoot=i,a.context=m,a.joiners=[],a.queue=p,a.cancel=function(){l===pt&&(l=gt,p.cancelAll(),g(K,!1))},a.cont=s,a.end=g,a.setContext=function(e){he(m,e)},a.toPromise=function(){return u||((e={}).promise=new Promise((function(t,r){e.resolve=t,e.reject=r})),u=e,l===ft?u.reject(d):l!==pt&&u.resolve(c)),u.promise;var e},a.isRunning=function(){return l===pt},a.isCancelled=function(){return l===gt||l===pt&&t.status===gt},a.isAborted=function(){return l===ft},a.result=function(){return c},a.error=function(){return d},a);return f}(e,c,r,n,o,i,s),l={task:d,digestEffect:h};return s&&(s.cancel=d.cancel),u(),d;function u(e,r){try{var o;r?(o=t.throw(e),Rt()):ke(e)?(c.status=gt,u.cancel(),o=Z(t.return)?t.return(K):{done:!0,value:K}):o=Se(e)?Z(t.return)?t.return():{done:!0}:t.next(e),o.done?(c.status!==gt&&(c.status=vt),c.cont(o.value)):h(o.value,n,u)}catch(e){if(c.status===gt)throw e;c.status=ft,c.cont(e,!0)}}function h(t,r,n,o){void 0===o&&(o="");var i,s=wt();function c(r,o){i||(i=!0,n.cancel=le,e.sagaMonitor&&(o?e.sagaMonitor.effectRejected(s,r):e.sagaMonitor.effectResolved(s,r)),o&&xt(t),n(r,o))}e.sagaMonitor&&e.sagaMonitor.effectTriggered({effectId:s,parentEffectId:r,label:o,effect:t}),c.cancel=le,n.cancel=function(){i||(i=!0,c.cancel(),c.cancel=le,e.sagaMonitor&&e.sagaMonitor.effectCancelled(s))},a(t,s,c)}}function jt(e,t){for(var r=e.channel,n=void 0===r?mt():r,o=e.dispatch,i=e.getState,s=e.context,a=void 0===s?{}:s,c=e.sagaMonitor,d=e.effectMiddlewares,l=e.onError,u=void 0===l?be:l,h=arguments.length,m=new Array(h>2?h-2:0),p=2;p<h;p++)m[p-2]=arguments[p];var g,f=t.apply(void 0,m),v=wt();if(c&&(c.rootSagaStarted=c.rootSagaStarted||le,c.effectTriggered=c.effectTriggered||le,c.effectResolved=c.effectResolved||le,c.effectRejected=c.effectRejected||le,c.effectCancelled=c.effectCancelled||le,c.actionDispatched=c.actionDispatched||le,c.rootSagaStarted({effectId:v,saga:t,args:m})),d){var y=L.apply(void 0,d);g=function(e){return function(t,r,n){return y((function(t){return e(t,r,n)}))(t)}}}else g=ue;var b={channel:n,dispatch:we(o),getState:i,sagaMonitor:c,onError:u,finalizeRunEffect:g};return Ye((function(){var e=Ot(b,f,a,v,Ee(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function Lt(e){var t,r=void 0===e?{}:e,n=r.context,o=void 0===n?{}:n,i=r.channel,s=void 0===i?mt():i,a=r.sagaMonitor,c=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)t.indexOf(r=i[n])>=0||(o[r]=e[r]);return o}(r,["context","channel","sagaMonitor"]);function d(e){return t=jt.bind(null,Q({},c,{context:o,channel:s,dispatch:e.dispatch,getState:e.getState,sagaMonitor:a})),function(e){return function(t){a&&a.actionDispatched&&a.actionDispatched(t);var r=e(t);return s.put(t),r}}}return d.run=function(){return t.apply(void 0,arguments)},d.setContext=function(e){he(o,e)},d}var Dt={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 i(e,t,n,i,s){if("function"!=typeof n)throw new TypeError("The listener must be a function");var a=new o(n,i||e,s),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function s(e,t){0==--e._eventsCount?e._events=new 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,i=new Array(o);n<o;n++)i[n]=t[n].fn;return i},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,i,s){var a=r?r+e:e;if(!this._events[a])return!1;var c,d,l=this._events[a],u=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),u){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,n),!0;case 4:return l.fn.call(l.context,t,n,o),!0;case 5:return l.fn.call(l.context,t,n,o,i),!0;case 6:return l.fn.call(l.context,t,n,o,i,s),!0}for(d=1,c=new Array(u-1);d<u;d++)c[d-1]=arguments[d];l.fn.apply(l.context,c)}else{var h,m=l.length;for(d=0;d<m;d++)switch(l[d].once&&this.removeListener(e,l[d].fn,void 0,!0),u){case 1:l[d].fn.call(l[d].context);break;case 2:l[d].fn.call(l[d].context,t);break;case 3:l[d].fn.call(l[d].context,t,n);break;case 4:l[d].fn.call(l[d].context,t,n,o);break;default:if(!c)for(h=1,c=new Array(u-1);h<u;h++)c[h-1]=arguments[h];l[d].fn.apply(l[d].context,c)}}return!0},a.prototype.on=function(e,t,r){return i(this,e,t,r,!1)},a.prototype.once=function(e,t,r){return i(this,e,t,r,!0)},a.prototype.removeListener=function(e,t,n,o){var i=r?r+e:e;if(!this._events[i])return this;if(!t)return s(this,i),this;var a=this._events[i];if(a.fn)a.fn!==t||o&&!a.once||n&&a.context!==n||s(this,i);else{for(var c=0,d=[],l=a.length;c<l;c++)(a[c].fn!==t||o&&!a[c].once||n&&a[c].context!==n)&&d.push(a[c]);d.length?this._events[i]=1===d.length?d[0]:d:s(this,i)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=r?r+e:e]&&s(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}(Dt);var Wt=Dt.exports,Nt=Object.defineProperty,Vt=Object.defineProperties,Ut=Object.getOwnPropertyDescriptor,$t=Object.getOwnPropertyDescriptors,Bt=Object.getOwnPropertyNames,zt=Object.getOwnPropertySymbols,Ht=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable,qt=(e,t,r)=>t in e?Nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kt=(e,t)=>{for(var r in t||(t={}))Ht.call(t,r)&&qt(e,r,t[r]);if(zt)for(var r of zt(t))Ft.call(t,r)&&qt(e,r,t[r]);return e},Jt=(e,t)=>Vt(e,$t(t)),Gt=(e,t)=>{var r={};for(var n in e)Ht.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&zt)for(var n of zt(e))t.indexOf(n)<0&&Ft.call(e,n)&&(r[n]=e[n]);return r},Qt=(e,t)=>{for(var r in t)Nt(e,r,{get:t[r],enumerable:!0})},Xt=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of Bt(t))Ht.call(e,o)||o===r||Nt(e,o,{get:()=>t[o],enumerable:!(n=Ut(t,o))||n.enumerable});return e},Yt=(e,t,r)=>(Xt(e,t,"default"),r&&Xt(r,t,"default")),Zt=(e,t,r)=>(qt(e,"symbol"!=typeof t?t+"":t,r),r),er="__local__",tr="__synthetic__",rr="chat",nr=n.getLogger("signalwire"),or=nr.methodFactory;nr.methodFactory=(e,t,r)=>{const n=or(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),n.apply(void 0,e)}};var ir,sr=nr.getLevel();nr.setLevel(sr);var ar={},cr=()=>null!=ir?ir:nr,dr=({type:e,payload:t})=>{const r=cr(),{logWsTraffic:n}=ar||{};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")},lr=()=>{const e=cr();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?dr:Reflect.get(e,t,r)})},ur=/[A-Z]/g,hr=["webrtc.message"],mr=e=>hr.includes(e),pr=/^2[0-9][0-9]$/,gr=(e,t)=>{const{result:r={},error:n}=e;if(n)return{error:n};const{code:o,node_id:i,result:s=null}=r;return o&&!pr.test(o)?{error:r}:null===s?(t&&(r.node_id=t),{result:r}):s?s.jsonrpc?gr(s,i):{result:s}:{result:r}},fr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},vr=(e,t=fr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,n])=>{const o=yr(r);return e[o]="object"==typeof n&&n?Array.isArray(n)?t.propsToUpdateValue.includes(r)?n.map((e=>"string"==typeof e?yr(e):vr(e))):n:vr(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}),{}),yr=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,br=e=>{const{event_type:t,params:r,node_id:n}=e;if("queuing.relay.tasks"===t)return{type:t,payload:e};if(mr(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}},_r=(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),wr=(e,t)=>{if(t&&"string"==typeof t){const r=new RegExp(`^${t}.`);return e.replace(r,"")}const r=e.split(".");return r.length>1?(r.shift(),r.join(".")):e},Sr=/^(ws|wss):\/\//,kr=(e,t,r)=>{let n=null;return Promise.race([e,new Promise(((e,o)=>n=setTimeout(o,t,r)))]).finally((()=>clearTimeout(n)))},Cr=["video.member.updated","video.member.talking"],Ir=["video.room.joined","video.track","video.active","video.answering","video.destroy","video.early","video.hangup","video.held","video.new","video.purge","video.recovering","video.requesting","video.ringing","video.trying","video.media.connected","video.media.reconnecting","video.media.disconnected","video.microphone.updated","video.camera.updated","video.speaker.updated","video.microphone.disconnected","video.camera.disconnected","video.speaker.disconnected"],Er=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return Ir.includes(t)||(e=>e.includes(tr))(t)||Pr(t)||(e=>e.includes("session."))(t)?null:Cr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},Pr=e=>e.includes(er),Mr=e=>void 0!==e&&"jti"in e,Tr=e=>{var t;return Kt({jsonrpc:"2.0",id:null!=(t=e.id)?t:w()},e)},Rr=e=>Kt({jsonrpc:"2.0"},e),xr={major:3,minor:0,revision:0},Ar={major:4,minor:0,revision:0},Or=e=>Tr({method:"signalwire.connect",params:Kt({version:xr,event_acks:!0},e)}),jr={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},Lr=e=>{if(e.hasOwnProperty("dialogParams")){const t=Gt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in jr)e&&t.hasOwnProperty(e)&&(t[jr[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Dr=e=>(t={})=>Tr({method:e,params:Lr(t)}),Wr=Dr("verto.invite"),Nr=Dr("verto.bye"),Vr=Dr("verto.modify"),Ur=Dr("verto.info"),$r=Dr("verto.answer"),Br=Dr("verto.subscribe"),zr=Dr("verto.pong"),Hr=(e,t)=>Rr({id:e,result:{method:t}}),Fr={};Qt(Fr,{authErrorAction:()=>en,authExpiringAction:()=>rn,authSuccessAction:()=>tn,createAction:()=>Kr,destroyAction:()=>Yr,getCustomSagaActionType:()=>ln,initAction:()=>Xr,makeCustomSagaAction:()=>dn,reauthAction:()=>Zr,sessionDisconnectedAction:()=>on,sessionForceCloseAction:()=>an,sessionReconnectingAction:()=>sn,socketMessageAction:()=>nn});var qr={};function Kr(e,t){function r(...r){if(t){let n=t(...r);if(!n)throw new Error("prepareAction did not return an object");return Kt(Kt({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}Qt(qr,{configureStore:()=>Qr,createAction:()=>Kr}),Yt(qr,W);var Jr="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?L:L.apply(null,arguments)},Gr=!0;function Qr(e){const t=function(){return[]},{reducer:r,middleware:n=t(),devTools:o=!0,preloadedState:i,enhancers:s}=e||{};let a;if("function"==typeof r)a=r;else{if(!function(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=t;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return t===r}(r))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');a=O(r)}let c=n;"function"==typeof c&&(c=c(t));const d=D(...c);let l=L;o&&(l=Jr(Kt({trace:!Gr},"object"==typeof o&&o)));let u=[d];return Array.isArray(s)?u=[d,...s]:"function"==typeof s&&(u=s(u)),A(a,i,l(...u))}var Xr=Kr("swSdk/init"),Yr=Kr("swSdk/destroy"),Zr=Kr("swSdk/reauth"),en=Kr("auth/error"),tn=Kr("auth/success"),rn=Kr("auth/expiring"),nn=Kr("socket/message"),on=Kr("session.disconnected"),sn=Kr("session.reconnecting"),an=Kr("session.forceClose"),cn=(e,t)=>`${t.type}/${e}`,dn=(e,t)=>Jt(Kt({},t),{type:cn(e,t)}),ln=(e,t)=>cn(e,t);function un(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 hn=({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),i={},s={},a={};function c(){const[t={},n=[],o]="function"==typeof e.extraReducers?un(e.extraReducers):[e.extraReducers],i=Kt(Kt({},t),s);return function(e,t,r=[],n){let o,[i,s,a]="function"==typeof t?un(t):[t,r,n];function c(e=o(),t){let r=[i[t.type],...s.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===r.filter((e=>!!e)).length&&(r=[a]),r.reduce(((e,r)=>r?r(e,t):e),e)}return o="function"==typeof e?()=>e():()=>e,c.getInitialState=o,c}(r,i,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,i[e]=c,s[o]=c,a[e]=d?Kr(o,d):Kr(o)})),{name:t,reducer:(e,t)=>(d||(d=c()),d(e,t)),actions:a,caseReducers:i,getInitialState:()=>(d||(d=c()),d.getInitialState())}}({name:e,initialState:t,reducers:r,extraReducers:e=>{e.addCase(Yr.type,(()=>t)),"function"==typeof n&&n(e)}});function mn(e){return[Xr.type,Zr.type].includes(e.type)}var pn=hn({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,n;return Jt(Kt({},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})=>Jt(Kt({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>Jt(Kt({},e),{authState:t})},extraReducers:e=>{e.addCase(en.type,((e,{payload:t})=>Jt(Kt({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(mn,(e=>Jt(Kt({},e),{authStatus:"authorizing"})))}}),{actions:gn,reducer:fn}=pn,vn=Symbol("BaseSession"),yn=class{constructor(e){var t,r;this.options=e,Zt(this,"__sw_symbol",vn),Zt(this,"uuid",w()),Zt(this,"WebSocketConstructor"),Zt(this,"CloseEventConstructor"),Zt(this,"agent"),Zt(this,"connectVersion",xr),Zt(this,"unifiedEventing",!1),Zt(this,"_rpcConnectResult"),Zt(this,"_requests",new Map),Zt(this,"_socket",null),Zt(this,"_host","wss://relay.signalwire.com"),Zt(this,"_executeTimeoutMs",1e4),Zt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Zt(this,"_executeQueue",new Set),Zt(this,"_swConnectError",Symbol.for("sw-connect-error")),Zt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Zt(this,"_checkPingDelay",15e3),Zt(this,"_checkPingTimer",null),Zt(this,"_reconnectTimer"),Zt(this,"_status","unknown"),Zt(this,"_sessionChannel"),Zt(this,"wsOpenHandler"),Zt(this,"wsCloseHandler"),Zt(this,"wsErrorHandler");const{host:n,logLevel:o="info",sessionChannel:i,unifiedEventing:s=!1}=e;this.unifiedEventing=s,this.connectVersion=s?Ar:xr,n&&(this._host=(e=>`${Sr.test(e)?"":"wss://"}${e}`)(n)),i&&(this._sessionChannel=i),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 Mr(e)?e.jti:e.signature}}get logger(){return lr()}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"});if("disconnected"===this._status)return Promise.reject({code:"400",message:"The SDK is disconnected"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),kr(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this._checkCurrentStatus(),this.logger.error("Request Timeout",e),"disconnected"===this.status)return this.logger.debug("Request failed because the session is disconnected",this.status,this._socket);this._closeConnection("reconnecting")}))):(this._addToExecuteQueue(e),this.connect(),t)}get _connectParams(){return{agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}}}async authenticate(){var e,t;const r=this._connectParams;this._relayProtocolIsValid()&&(r.protocol=this.relayProtocol),(null==(e=this.options.topics)?void 0:e.length)?r.contexts=this.options.topics:(null==(t=this.options.contexts)?void 0:t.length)&&(r.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(Or(r))}authError(e){this._removeSocketListeners(),this.dispatch(en({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._status="unknown",this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(tn())}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(sn()),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:i,error:s}=(({response:e,request:t})=>{const{result:r={},error:n}=e;return n?{error:n}:"signalwire.connect"===t.method?{result:r}:gr(e)})({response:t,request:r});return this._checkCurrentStatus(),s?o(s):n(i)}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,Rr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this._eventAcknowledgingHandler(t).catch((e=>this.logger.error("Event Acknowledging Error",e))),this.dispatch(nn(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,Rr({id:r,result:{timestamp:n||Date.now()/1e3}})))}async _eventAcknowledgingHandler(e){const{method:t,id:r}=e;return"signalwire.event"===t?this.execute((e=>Rr({id:e,result:{}}))(r)):Promise.resolve()}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(on());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(gn.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},bn=class extends yn{constructor(e){super(e),this.options=e,Zt(this,"_expiredDiffSeconds",0),Zt(this,"_refreshTokenNotificationDiff",120),Zt(this,"_checkTokenExpirationDelay",2e4),Zt(this,"_checkTokenExpirationTimer",null),this._checkTokenExpiration=this._checkTokenExpiration.bind(this),this.reauthenticate=this.reauthenticate.bind(this)}get expiresAt(){var e;if(!(null==this?void 0:this._rpcConnectResult))return 0;const{authorization:t}=this._rpcConnectResult,r=null!=(e=Mr(t)?t.fabric_subscriber.expires_at:null==t?void 0:t.expires_at)?e:0;if("string"==typeof r){const e=Date.parse(r);if(!isNaN(e))return Math.floor(e/1e3)}return r}get expiresIn(){const e=Math.floor(Date.now()/1e3);return this.expiresAt-e}get expired(){return this.expiresAt>0&&this.expiresIn<=this._expiredDiffSeconds}async authenticate(){const e=Jt(Kt({},this._connectParams),{authentication:{jwt_token:this.options.token}});if(this._relayProtocolIsValid())e.protocol=this.relayProtocol;else{const t=await this.retrieveRelayProtocol();t&&(e.protocol=t)}if(e.protocol){const t=await this.retrieveSwAuthorizationState();t&&(e.authorization_state=t)}try{this._rpcConnectResult=await this.execute(Or(e)),await this.persistRelayProtocol(),await this._checkTokenExpiration()}catch(e){throw this.logger.debug("BaseJWTSession authenticate error",e),e}}async retrieveRelayProtocol(){return""}async persistRelayProtocol(){}async reauthenticate(){if(this.logger.debug("Session Reauthenticate",{ready:this.ready,expired:this.expired}),!this.ready||this.expired)return this.connect();const e={project:this._rpcConnectResult.authorization.project_id,jwt_token:this.options.token};try{this._rpcConnectResult=await this.execute((t=e,Tr({method:"signalwire.reauthenticate",params:{authentication:t}})))}catch(e){throw clearTimeout(this._checkTokenExpirationTimer),e}var t}_onSocketClose(e){clearTimeout(this._checkTokenExpirationTimer),super._onSocketClose(e)}async _checkTokenExpiration(){if(!this.expiresAt)return;const e=this.options.onRefreshToken;if(this.expiresIn<=this._refreshTokenNotificationDiff)if(this.dispatch(rn()),"function"==typeof e)try{const t=await e();this.dispatch(Zr({token:t}))}catch(e){this.logger.error(e)}else this.logger.warn("The token is going to expire!");clearTimeout(this._checkTokenExpirationTimer),this.expired||(this._checkTokenExpirationTimer=setTimeout(this._checkTokenExpiration,this._checkTokenExpirationDelay))}},_n={};Qt(_n,{authErrorAction:()=>en,authExpiringAction:()=>rn,authSuccessAction:()=>tn,configureStore:()=>Kn,connect:()=>Fn,createAction:()=>Kr,createCatchableSaga:()=>Mn,createRestartableSaga:()=>En,destroyAction:()=>Yr,eventChannel:()=>ut,getCustomSagaActionType:()=>ln,initAction:()=>Xr,makeCustomSagaAction:()=>dn,reauthAction:()=>Zr,sessionDisconnectedAction:()=>on,sessionForceCloseAction:()=>an,sessionReconnectingAction:()=>sn,socketMessageAction:()=>nn});var wn=hn({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>Jt(Kt({},e),t.id in e.byId?{byId:Jt(Kt({},e.byId),{[t.id]:Kt(Kt({},e.byId[t.id]),t)})}:{byId:Jt(Kt({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>Jt(Kt({},e),{byId:Object.entries(e.byId).reduce(((e,[r,n])=>(t.ids.includes(r)||(e[r]=n),e)),{})})}}),{actions:Sn,reducer:kn}=wn,Cn=(0,qr.combineReducers)({components:kn,session:fn}),In={};Qt(In,{createCatchableSaga:()=>Mn,createRestartableSaga:()=>En,eventChannel:()=>ut});var En=e=>function*(){Fe((function*(){for(;;)try{lr().debug("Run a restartable saga"),yield ze(e),lr().debug("One of the restartable saga has ended. Restarting..")}catch(e){lr().error("Restartable Saga Error",e)}}))},Pn=e=>lr().error("Catchable Saga Error",e),Mn=(e,t=Pn)=>function*(...r){try{yield ze(e,...r)}catch(e){t(e)}},Tn=e=>mr(null==e?void 0:e.event_type),Rn=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},xn=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*An({sessionChannel:e,swEventChannel:t,session:r}){function*n(e){yield $e(t,br(e)),Tn(e)||Rn(e)||(xn(e)?r.onSwAuthorizationState(e.params.authorization_state):yield $e({type:e.event_type,payload:e}))}const o=Mn((function*(e){if(e.type!==nn.type)return void(yield $e(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return lr().debug(`Unknown message: ${t}`,e);yield He(n,r)}),(e=>{lr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield He(o,t)}}catch(e){lr().error("sessionChannelWorker error:",e)}finally{lr().debug("sessionChannelWorker finally")}}var On=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Zt(this,"name","AuthError"),Object.setPrototypeOf(this,On.prototype)}},jn=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Zt(this,"name","HttpError"),Object.setPrototypeOf(this,jn.prototype)}};function*Ln({initSession:e,sessionEmitter:t,userOptions:r,channels:n}){var o;const i=e(),s=n.swEventChannel,a=n.sessionChannel;let c=[];if(null==(o=r.workers)?void 0:o.length)try{const e=r.workers.map((e=>ze(En(e))));c=yield function(e){var t=Ne(Oe,e);return t.combinator=!0,t}(e)}catch(e){lr().error("Error running custom workers",e)}yield He(An,{session:i,sessionChannel:a,swEventChannel:s});const d=yield He(Wn,{session:i,sessionEmitter:t,sessionChannel:a,userOptions:r});i.connect(),yield Ue(Yr.type),i.disconnect(),yield Ue(on.type),t.emit("session.disconnected"),d.cancel(),c.forEach((e=>e.cancel()))}function*Dn({session:e,token:t,sessionEmitter:r}){try{e.reauthenticate&&(e.token=t,yield ze(e.reauthenticate),yield $e(gn.connected(e.rpcConnectResult)),r.emit("session.connected"))}catch(t){lr().error("Reauthenticate Error",t),e.authError(t)}}function*Wn(e){lr().debug("sessionStatusWatcher [started]");const{session:t,sessionEmitter:r}=e;try{for(;;){const n=yield Ue([tn.type,en.type,rn.type,Zr.type,sn.type,an.type]);switch(lr().trace("sessionStatusWatcher",n.type,n.payload),n.type){case tn.type:yield $e(gn.connected(t.rpcConnectResult)),r.emit("session.connected");break;case en.type:yield He(Nn,Jt(Kt({},e),{action:n}));break;case rn.type:r.emit("session.expiring");break;case Zr.type:yield He(Dn,{session:t,token:n.payload.token,sessionEmitter:r});break;case sn.type:r.emit("session.reconnecting");break;case an.type:t.forceClose()}}}finally{(yield Ke())&&lr().debug("sessionStatusWatcher [cancelled]")}}function*Nn(e){lr().debug("sessionAuthErrorSaga [started]");try{const{action:t,sessionEmitter:r}=e,{error:n}=t.payload,o=n?new On(n.code,n.message):new Error("Unauthorized");r.emit("session.auth_error",o)}finally{(yield Ke())&&lr().debug("sessionAuthErrorSaga [cancelled]")}}var Vn={};Qt(Vn,{getAuthError:()=>zn,getAuthState:()=>Hn,getAuthStatus:()=>Bn,getIceServers:()=>Un,getSession:()=>$n});var Un=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},$n=e=>e.session,Bn=({session:e})=>e.authStatus,zn=({session:e})=>e.authError,Hn=({session:e})=>e.authState,Fn=e=>{const{sessionListeners:t={},store:r,Component:n,customSagas:o=[]}=e,i=Object.keys(t);return e=>{const s=new n(Jt(Kt({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),n=$n(e);for(const e of i){if(!1===c)return;const r=`session.${e}`,o=a.get(r),i=n[e];if(void 0!==i&&o!==i){a.set(r,i);const o=t[e];"string"==typeof o?s[o](n):"function"==typeof o&&o(n)}}})),l=null==o?void 0:o.map((e=>r.runSaga(e,{instance:s,runSaga:r.runSaga})));return s.destroyer=()=>{c=!1,d(),a.clear(),(null==l?void 0:l.length)&&l.forEach((e=>e.cancel()))},s}},qn=()=>new Wt;Yt(_n,qr);var Kn=e=>{var t;const{userOptions:r,SessionConstructor:n,preloadedState:o={},runSagaMiddleware:i=!0}=e,s=Lt(),a=ht(),c=lt(),d={swEventChannel:a,sessionChannel:c},l=Qr({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:Cn,preloadedState:o,middleware:e=>e().concat(s)}),u=(()=>{const e=new Map;return{get:t=>e.get(t),set:(t,r)=>(e.set(t,r),e),remove:t=>(e.delete(t),e),getAll:()=>Array.from(e.entries()),deleteAll:()=>(e.clear(),e)}})(),h=[],{initSession:m,getSession:p,sessionEmitter:g}=(e=>{const{SessionConstructor:t,userOptions:r,sessionChannel:n}=e,o=qn();let i=null;return{session:i,initSession:()=>(i=new t(Jt(Kt({},r),{sessionChannel:n})),i),getSession:()=>(i||lr().warn("Custom worker started without the session"),i),sessionEmitter:o}})({userOptions:r,sessionChannel:c,SessionConstructor:n});if(i){const e=(e=>function*({userOptions:t,channels:r}){var n;for(t.logger&&(ir=t.logger),t.debug&&(e=>{null!=e?Object.assign(ar,e):ar={}})(t.debug);;){const o=yield Ue([Xr.type,Zr.type]);(null==(n=null==o?void 0:o.payload)?void 0:n.token)&&(t.token=o.payload.token);try{yield ze(Ln,Jt(Kt({},e),{userOptions:t,channels:r}))}catch(e){lr().error("RootSaga Error:",e)}finally{(yield Ke())&&lr().debug("rootSaga [cancelled]"),lr().debug("Reboot rootSaga")}}})({initSession:m,sessionEmitter:g});s.run(e,{userOptions:r,channels:d})}return Jt(Kt({},l),{runSaga:(e,t)=>s.run(e,Jt(Kt({},t),{channels:d,getSession:p,instanceMap:u,callSegments:h})),channels:d,instanceMap:u,callSegments:h,sessionEmitter:g,unifiedEventing:r.unifiedEventing})},Jn=function*(e){const{initialState:t,onDone:r,onFail:n,getSession:o}=e,{requestId:i,method:s,params:a}=t,c=o();if(!c){const e=new Error("Session does not exist!");return lr().error(e),void(null==n||n(e))}try{let e=(({method:e,params:t})=>Tr({method:e,params:t}))({id:i,method:s,params:a});const t=yield ze(c.execute,e);null==r||r(t)}catch(e){lr().warn("Execute error: ",e),null==n||n(e)}},Gn=e=>e,Qn=Symbol("BaseComponent"),Xn=class{constructor(e){this.options=e,Zt(this,"__sw_symbol",Qn),Zt(this,"uuid",w()),Zt(this,"_customSagaTriggers",new Map),Zt(this,"_destroyer"),Zt(this,"eventEmitter"),Zt(this,"_runningWorkers",[]),Zt(this,"_workers",new Map),this.eventEmitter=new Wt}get __uuid(){return this.uuid}get logger(){return lr()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.store.instanceMap}get callSegments(){return this.store.callSegments}get unifiedEventing(){return this.store.unifiedEventing}get emitter(){return this.eventEmitter}get sessionEmitter(){return this.store.sessionEmitter}get session(){return this.sessionEmitter}on(e,t){return this.emitter.on(e,t)}once(e,t){return this.emitter.once(e,t)}off(e,t){return this.emitter.off(e,t)}removeAllListeners(e){return e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.sessionEventNames().forEach((e=>{this.sessionEmitter.off(e)})),this.emitter)}eventNames(){return this.emitter.eventNames()}sessionEventNames(){return this.sessionEmitter.eventNames()}getSubscriptions(){return Er(this.eventNames())}emit(e,...t){return this.emitter.emit(e,...t)}listenerCount(e){return this.emitter.listenerCount(e)}destroy(){var e;null==(e=this._destroyer)||e.call(this),this.removeAllListeners(),this.detachWorkers()}execute({method:e,params:t},{transformParams:r=Gn,transformResolve:n=Gn,transformReject:o=Gn}={transformParams:Gn,transformResolve:Gn,transformReject:Gn}){return new Promise(((i,s)=>{const a=w();this.runWorker("executeActionWorker",{worker:Jn,onDone:e=>i(n(e)),onFail:e=>s(o(e)),initialState:{requestId:a,componentId:this.__uuid,method:e,params:r(t)}})}))}triggerCustomSaga(e){return new Promise(((t,r)=>{const n=w();this._customSagaTriggers.set(n,{resolve:t,reject:r}),this.store.dispatch(Kt({dispatchId:n},dn(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]}get _sessionAuthStatus(){return Bn(this.store.getState())}get _sessionAuthState(){return Hn(this.store.getState())}_waitUntilSessionAuthorized(){switch(Bn(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=Bn(this.store.getState()),o=zn(this.store.getState());if("authorized"===n)e(this),r();else if("unauthorized"===n){const e=o?new On(o.code,o.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}runWorker(e,t){return this._workers.has(e)?lr().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=Gt(r,["worker"]);const i=this.store.runSaga(n,Kt({instance:this,runSaga:this.store.runSaga},o));return this._runningWorkers.push(i),this._workers.delete(e),i}detachWorkers(){this._runningWorkers.forEach((e=>{e.cancel()})),this._runningWorkers=[]}},Yn=class extends Xn{constructor(e){super(e),this.options=e}connect(){const e=Bn(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(Xr()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(Yr())}},Zn=class extends Xn{constructor(e){super(e),this.options=e,Zt(this,"subscribeMethod","signalwire.subscribe"),Zt(this,"subscribeParams",{}),Zt(this,"_latestExecuteParams");const t=()=>{this._latestExecuteParams=void 0};super.session.on("session.connected",t),super.session.on("session.disconnected",t),super.session.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:Jt(Kt({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},eo={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(eo).map((e=>`video.member.updated.${e}`));var to=vr(eo);Object.keys(to).map((e=>`member.updated.${e}`));var ro={};Qt(ro,{getComponent:()=>no,getComponentsById:()=>oo,getComponentsToCleanup:()=>io});var no=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},oo=({components:e})=>e.byId,io=e=>{const t=oo(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},so={};Qt(so,{RoomSessionMemberAPI:()=>oi,RoomSessionPlaybackAPI:()=>ei,RoomSessionRecordingAPI:()=>Yo,RoomSessionStreamAPI:()=>ri,audioMuteMember:()=>Ao,audioUnmuteMember:()=>Oo,createRoomSessionMemberObject:()=>ii,createRoomSessionPlaybackObject:()=>ti,createRoomSessionRecordingObject:()=>Zo,createRoomSessionStreamObject:()=>ni,deafMember:()=>Do,deleteMemberMeta:()=>Qo,deleteMeta:()=>Mo,demote:()=>zo,getLayouts:()=>uo,getMemberMeta:()=>Ko,getMembers:()=>ho,getMeta:()=>Io,getPlaybacks:()=>So,getRecordings:()=>_o,getStreams:()=>To,hideVideoMuted:()=>go,lock:()=>vo,play:()=>ko,promote:()=>Bo,removeAllMembers:()=>qo,removeMember:()=>Fo,setDeaf:()=>No,setHideVideoMuted:()=>bo,setInputSensitivityMember:()=>$o,setInputVolumeMember:()=>Vo,setLayout:()=>mo,setMemberMeta:()=>Jo,setMemberPosition:()=>Ho,setMeta:()=>Eo,setOutputVolumeMember:()=>Uo,setPositions:()=>po,setPrioritizeHandraise:()=>xo,setRaisedHand:()=>Xo,showVideoMuted:()=>fo,startRecording:()=>wo,startStream:()=>Ro,undeafMember:()=>Wo,unlock:()=>yo,updateMemberMeta:()=>Go,updateMeta:()=>Po,videoMuteMember:()=>jo,videoUnmuteMember:()=>Lo});var ao=()=>{},co=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:Kt({room_session_id:this.roomSessionId},r)},t)}}),lo=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,i=Gt(n,["memberId"]);return this.execute({method:e,params:Kt({room_session_id:this.roomSessionId,member_id:o||this.memberId},i)},t)}}),uo=co("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),ho=co("video.members.get",{transformResolve:e=>({members:e.members})}),mo=co("video.set_layout",{transformResolve:ao}),po=co("video.set_position",{transformResolve:ao}),go=co("video.hide_video_muted",{transformResolve:ao}),fo=co("video.show_video_muted",{transformResolve:ao}),vo=co("video.lock",{transformResolve:ao}),yo=co("video.unlock",{transformResolve:ao}),bo={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:ao})}},_o={value:function(){return new Promise((async(e,t)=>{try{const{recordings:t}=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}):t=Zo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({recordings:r})}catch(e){t(e)}}))}},wo={value:function(){return new Promise((async(e,t)=>{try{const{recording:t}=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}}),r=Zo({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},So={value:function(){return new Promise((async(e,t)=>{try{const{playbacks:t}=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}):t=ti({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({playbacks:r})}catch(e){t(e)}}))}},ko={value:function(e){var t=e,{seekPosition:r,currentTimecode:n}=t,o=Gt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||n,{playback:i}=await this.execute({method:"video.playback.start",params:Kt({room_session_id:this.roomSessionId,seek_position:t},o)}),s=ti({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:i}});this.instanceMap.set(s.id,s),e(s)}catch(e){t(e)}}))}},Co=e=>co(e,{transformResolve:ao,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Gt(t,["room_session_id"])}}}),Io=co("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Eo=Co("video.set_meta"),Po=Co("video.update_meta"),Mo={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},To={value:function(){return new Promise((async(e,t)=>{try{const{streams:t}=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}}),r=[];t.forEach((e=>{let t=this.instanceMap.get(e.id);t?t.setPayload({room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}):t=ni({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({streams:r})}catch(e){t(e)}}))}},Ro={value:function(e){return new Promise((async(t,r)=>{try{const{stream:r}=await this.execute({method:"video.stream.start",params:Kt({room_session_id:this.roomSessionId},e)}),n=ni({store:this.store,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:r}});this.instanceMap.set(n.id,n),t({stream:n})}catch(e){r(e)}}))}},xo={value:function(e){return this.execute({method:"video.prioritize_handraise",params:{room_session_id:this.roomSessionId,enable:e}})}},Ao=lo("video.member.audio_mute",{transformResolve:ao}),Oo=lo("video.member.audio_unmute",{transformResolve:ao}),jo=lo("video.member.video_mute",{transformResolve:ao}),Lo=lo("video.member.video_unmute",{transformResolve:ao}),Do=lo("video.member.deaf",{transformResolve:ao}),Wo=lo("video.member.undeaf",{transformResolve:ao}),No={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:ao})}},Vo=lo("video.member.set_input_volume",{transformResolve:ao}),Uo=lo("video.member.set_output_volume",{transformResolve:ao}),$o=lo("video.member.set_input_sensitivity",{transformResolve:ao}),Bo={value:function(e){var t=e,{memberId:r,mediaAllowed:n,joinAudioMuted:o,joinVideoMuted:i}=t,s=Gt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:Kt({room_session_id:this.roomSessionId,member_id:r,media_allowed:n,join_audio_muted:o,join_video_muted:i},s)},{transformResolve:ao})}},zo={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:ao})}},Ho=lo("video.member.set_position",{transformResolve:ao}),Fo={value:function(e){var t=e,{memberId:r}=t,n=Gt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:Kt({room_session_id:this.roomSessionId,member_id:r},n)},{transformResolve:ao})}},qo={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:ao})}},Ko=lo("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Jo=lo("video.member.set_meta",{transformResolve:ao}),Go=lo("video.member.update_meta",{transformResolve:ao}),Qo=lo("video.member.delete_meta",{transformResolve:ao}),Xo={value:function(e){const{raised:t=!0,memberId:r=this.memberId}=e||{};if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:t?"video.member.raisehand":"video.member.lowerhand",params:{room_session_id:this.roomSessionId,member_id:r}},{transformResolve:ao})}},Yo=class extends Xn{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.recording.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.recording.state}get duration(){return this._payload.recording.duration}get startedAt(){if(this._payload.recording.started_at)return new Date(1e3*this._payload.recording.started_at)}get endedAt(){if(this._payload.recording.ended_at)return new Date(1e3*this._payload.recording.ended_at)}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.recording.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.recording.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.recording.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),recording_id:this.getStateProperty("id")}})}},Zo=e=>Fn({store:e.store,Component:Yo})(e),ei=class extends Xn{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.playback.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get url(){return this._payload.playback.url}get state(){return this._payload.playback.state}get volume(){return this._payload.playback.volume}get startedAt(){if(this._payload.playback.started_at)return new Date(1e3*this._payload.playback.started_at)}get endedAt(){if(this._payload.playback.ended_at)return new Date(1e3*this._payload.playback.ended_at)}get position(){return this._payload.playback.position}get seekable(){return this._payload.playback.seekable}setPayload(e){this._payload=e}async pause(){await this.execute({method:"video.playback.pause",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async resume(){await this.execute({method:"video.playback.resume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async stop(){await this.execute({method:"video.playback.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id")}})}async setVolume(e){await this.execute({method:"video.playback.set_volume",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),volume:e}})}async seek(e){await this.execute({method:"video.playback.seek_absolute",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async forward(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:Math.abs(e)}})}async rewind(e=5e3){await this.execute({method:"video.playback.seek_relative",params:{room_session_id:this.getStateProperty("roomSessionId"),playback_id:this.getStateProperty("id"),position:-Math.abs(e)}})}},ti=e=>Fn({store:e.store,Component:ei})(e),ri=class extends Xn{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){return this._payload.stream.id}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get state(){return this._payload.stream.state}get duration(){return this._payload.stream.duration}get url(){return this._payload.stream.url}get startedAt(){if(this._payload.stream.started_at)return new Date(1e3*this._payload.stream.started_at)}get endedAt(){if(this._payload.stream.ended_at)return new Date(1e3*this._payload.stream.ended_at)}setPayload(e){this._payload=e}async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},ni=e=>Fn({store:e.store,Component:ri})(e),oi=class extends Xn{constructor(e){super(e),Zt(this,"_payload"),this._payload=e.payload}get id(){var e;return null!=(e=this._payload.member.id)?e:this._payload.member.member_id}get callId(){return this._payload.member.call_id}get nodeId(){return this._payload.member.node_id}get memberId(){return this.id}get roomSessionId(){return this._payload.room_session_id}get roomId(){return this._payload.room_id}get parentId(){return this._payload.member.parent_id}get name(){return this._payload.member.name}get type(){return this._payload.member.type}get meta(){return this._payload.member.meta}get requestedPosition(){return this._payload.member.requested_position}get currentPosition(){return this._payload.member.current_position}get visible(){return this._payload.member.visible}get audioMuted(){return this._payload.member.audio_muted}get videoMuted(){return this._payload.member.video_muted}get deaf(){return this._payload.member.deaf}get inputVolume(){return this._payload.member.input_volume}get outputVolume(){return this._payload.member.output_volume}get inputSensitivity(){return this._payload.member.input_sensitivity}get talking(){return this._payload.member.talking}get handraised(){return this._payload.member.handraised}setPayload(e){const t=Jt(Kt({},this._payload),{member:Kt(Kt({},this._payload.member),e.member)});this._payload=t}},ii=e=>Fn({store:e.store,Component:oi})(e),si={};Qt(si,{BaseChatAPI:()=>Ei,BaseChatConsumer:()=>Ii,ChatMember:()=>Ti,ChatMessage:()=>Mi,applyCommonMethods:()=>Ai,createBaseChatObject:()=>Pi,getMemberState:()=>vi,getMembers:()=>pi,getMessages:()=>mi,publish:()=>hi,setMemberState:()=>fi});var ai=e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]},ci=e=>Array.isArray(e)||"string"==typeof e,di=()=>{},li=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),ui=(e,t={})=>({value:function(r={}){var n=r,{memberId:o}=n,i=Gt(n,["memberId"]);return this.execute({method:e,params:Kt({member_id:o},i)},t)}}),hi=li("chat.publish",{transformResolve:di}),mi=li("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>vr(e))),cursor:e.cursor})}),pi=li("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>vr(e)))})}),gi=e=>{const t=ci(null==e?void 0:e.channels)?ai(e.channels):void 0;return Jt(Kt({},e),{channels:t})},fi=ui("chat.member.set_state",{transformResolve:di,transformParams:gi}),vi=ui("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:gi}),yi={};Qt(yi,{BasePubSubConsumer:()=>wi,PubSubMessage:()=>ki,createBasePubSubObject:()=>Si});var bi=function*(e){lr().trace("pubSubWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*n(e){const{type:r,payload:n}=e;switch(r){case`${rr}.channel.message`:{const{channel:e,message:r}=n,o=Gt(r,["member"]),i=vr(Jt(Kt({},o),{channel:e})),s=new ki(i);t.emit("message",s);break}default:lr().warn(`Unknown pubsub event: "${r}"`)}}const o=e=>e.type.startsWith(`${rr}.`);for(;;){const e=yield Ue(r,o);yield He(n,e)}lr().trace("pubSubWorker ended")},_i=e=>e.map((e=>({name:e}))),wi=class extends Zn{constructor(e){super(e),Zt(this,"subscribeMethod",`${rr}.subscribe`),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:bi})}_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:_i(r)}}_setSubscribeParams(e){this.subscribeParams=Kt(Kt({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return Kt({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return Kt({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}getSubscriptions(){const e=this.eventNames().map((e=>`${rr}.${String(e)}`));return Er(e)}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const n=this.getSubscriptions();if(n.length>0){const e={method:`${rr}.unsubscribe`,params:Jt(Kt({},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.session.once("session.auth_error",(e=>{r(e)})),this.session.once("session.connected",(()=>{t()})),this.store.dispatch(Fr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${rr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(Hn);return e&&"channels"in e&&e.channels?e.channels:{}}},Si=e=>Fn({store:e.store,Component:wi})(e),ki=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}},Ci=function*(e){lr().trace("chatWorker started");const{instance:t,channels:{swEventChannel:r}}=e;function*n(e){const{type:r,payload:n}=e;switch(r){case"chat.channel.message":{const{channel:e,message:r}=n,o=vr(Jt(Kt({},r),{channel:e})),i=new Mi(o);t.emit("message",i);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=n,o=vr(e),i=new Ti(o),s=wr(r);t.emit(s,i);break}default:lr().warn(`Unknown chat event: "${r}"`)}}const o=e=>e.type.startsWith("chat.");for(;;){const e=yield Ue(r,o);yield He(n,e)}lr().trace("chatWorker ended")},Ii=class extends wi{constructor(e){super(e),Zt(this,"subscribeMethod","chat.subscribe")}initWorker(){this.runWorker("chat",{worker:Ci})}},Ei=_r(Ii,{publish:hi,getMembers:pi,getMessages:mi,setMemberState:fi,getMemberState:vi}),Pi=e=>Fn({store:e.store,Component:Ei})(e),Mi=class extends ki{get member(){return this.payload.member}},Ti=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:{}}},Ri=e=>{const t=ci(null==e?void 0:e.channels)?ai(e.channels):void 0;return Jt(Kt({},e),{channels:t})},xi=()=>{};function Ai(e){return class extends e{getMembers(e){return this._client.execute({method:"chat.members.get",params:e},{transformResolve:e=>({members:e.members.map((e=>vr(e)))})})}getMessages(e){return this._client.execute({method:"chat.messages.get",params:e},{transformResolve:e=>({messages:e.messages.map((e=>vr(e))),cursor:e.cursor})})}setMemberState(e={}){var t=e,{memberId:r}=t,n=Gt(t,["memberId"]);return this._client.execute({method:"chat.member.set_state",params:Kt({member_id:r},n)},{transformResolve:xi,transformParams:Ri})}getMemberState(e={}){var t=e,{memberId:r}=t,n=Gt(t,["memberId"]);return this._client.execute({method:"chat.member.get_state",params:Kt({member_id:r},n)},{transformResolve:e=>({channels:e.channels}),transformParams:Ri})}}}var Oi={};Qt(Oi,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Wi,memberPositionWorker:()=>Ni,memberUpdatedWorker:()=>Di});var ji=function*(e,t,r){const n=wr(e);r.emit(n,t)};function*Li(e){const{action:t,memberList:r,instance:n,dispatcher:o=ji}=e,i={};t.payload.layout.layers.forEach((e=>{var t;const n=e.member_id;if(!n)return;const o=r.get(n);o&&e.position!==(null==(t=o.member)?void 0:t.current_position)?(Vi({memberList:r,memberId:n,currentPosition:e.position}),i[n]=!0):i[n]=!1}));for(const[e,t]of r)if(i[e])yield null==o?void 0:o("video.member.updated",t,n);else if(void 0===i[e]){const t=Vi({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==o?void 0:o("video.member.updated",t,n)}}function*Di({action:e,memberList:t,instance:r,dispatcher:n=ji}){var o,i;const s=e.payload.member.id,a=Vi({memberList:t,memberId:s,currentPosition:null==(i=null==(o=t.get(s))?void 0:o.member)?void 0:i.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=Jt(Kt({},a),{member:Kt(Kt({},a.member),e.payload.member)});t.set(s,d);for(const t of c){const o=`${e.type}.${t}`;yield null==n?void 0:n(o,d,r)}yield null==n?void 0:n(e.type,d,r)}var Wi=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Ni=function*({instance:e,channels:t,initialState:r,getSession:n,instanceMap:o,callSegments:i,dispatcher:s=ji}){if(!r)return;const{swEventChannel:a}=t;let c=Ui(r);const d=e=>{c.has(e.member.id)||c.set(e.member.id,e)};for(;;){const r=yield Ue(a,(e=>"video.member.updated"===e.type||"video.layout.changed"===e.type||"video.member.joined"===e.type||"video.member.left"===e.type));switch(r.type){case"video.member.updated":d(r.payload),yield He(Di,{action:r,channels:t,memberList:c,instance:e,getSession:n,instanceMap:o,callSegments:i,dispatcher:s});break;case"video.member.joined":d(r.payload);break;case"video.member.left":c.delete(r.payload.member.id);break;case"video.layout.changed":yield He(Li,{action:r,channels:t,memberList:c,instance:e,dispatcher:s})}}},Vi=({memberList:e,memberId:t,currentPosition:r})=>{const n=e.get(t);if(!n)return;if(!r)return n;const o=Jt(Kt({},n),{member:Jt(Kt({},null==n?void 0:n.member),{current_position:r})});return e.set(t,o),o},Ui=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};Qt({},{configureFullStack:()=>Fi,configureJestStore:()=>Hi,createMockedLogger:()=>zi,createSessionChannel:()=>Gi,createSwEventChannel:()=>Ji,rpcConnectResultVRT:()=>Ki,wait:()=>qi});var $i="8f0a119a-cda7-4497-a47d-c81493b824d4",Bi="<VRT>",zi=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),Hi=e=>Kn(Kt({userOptions:{project:$i,token:Bi,devTools:!1,emitter:new Wt},SessionConstructor:yn,runSagaMiddleware:!1},e)),Fi=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Wt,r=Kn({userOptions:{project:$i,token:Bi,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Fr.initAction()),r.dispatch(Fr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Fr.destroyAction())}},qi=e=>new Promise((t=>{setTimeout(t,e)})),Ki={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"}]},Ji=()=>ht(),Gi=()=>lt(),Qi=Kt({},Vn);const Xi=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,Yi=()=>{if(!Xi())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},Zi=()=>Yi().getSupportedConstraints(),es=e=>e&&e instanceof MediaStream,ts=()=>"sinkId"in HTMLMediaElement.prototype,rs=async(e,t)=>{if(null!==e)if("string"==typeof t)if(ts())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?lr().error(`You need to use HTTPS for selecting audio output device: ${e}`):lr().error(`Error: ${e}`),e}else lr().warn("Browser does not support output device selection.");else lr().warn(`Invalid speaker deviceId: '${t}'`);else lr().warn("No HTMLMediaElement to attach the speakerId")},ns=e=>{var t;es(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(os))},os=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},is={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},ss=e=>{if(e)return is[e]},as=()=>Yi().enumerateDevices(),cs=async e=>{let t=await as().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},ds=async e=>{if("permissions"in navigator&&"function"==typeof navigator.permissions.query&&e)try{return"granted"===(await navigator.permissions.query({name:e})).state}catch(e){}return(async e=>{const t=await cs(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(lr().warn(`No ${e} devices to check for permissions!`),null)})(ss(e))},ls=()=>ds("camera"),us=()=>ds("microphone"),hs=()=>ds("speaker"),ms=async(e={audio:!0,video:!0})=>{var t;try{const t=Yi().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(us()),(null==e?void 0:e.video)&&t.push(ls()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await kr(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":lr().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":lr().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":lr().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":lr().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),lr().info("List of available constraints:",Zi());break;case"NotAllowedError":lr().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?lr().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):lr().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":lr().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}},ps=e=>Yi().getDisplayMedia(e),gs=async(e,t=!1)=>vs(e,t),fs=(e,t={})=>{const r=[];return e.filter((({deviceId:e,kind:n,groupId:o})=>{var i;if(!e||t.targets&&!(null===(i=t.targets)||void 0===i?void 0:i.includes(n)))return!1;if(!o)return!0;const s=`${n}-${o}`,a=!(null==t?void 0:t.excludeDefault)||"default"!==e;return!(r.includes(s)||!a||(r.push(s),0))}))},vs=async(e,t=!1)=>{let r;if(!1===await ds(e)){const t={audio:!(n=e)||"all"===n||"microphone"===n||"speaker"===n,video:!n||"all"===n||"camera"===n};r=await ms(t)}var n;const o=await cs(ss(e));return r&&ns(r),!0===t?o:fs(o)},ys=()=>vs("speaker"),bs=async(e,t,r)=>{const n=await vs(r,!0);for(let r=0;r<n.length;r++){const{deviceId:o,label:i}=n[r];if(e===o||t===i)return o}return null},_s=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},ws={camera:ls,microphone:us,speaker:hs},Ss=["camera","microphone","speaker"],ks=`Allowed targets are: '${Ss.join("', '")}'`,Cs={speaker:ts},Is=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:Ss).filter((e=>!!Ss.includes(e)||(lr().warn(`We'll ignore the "${e}" target as it is not allowed. ${ks}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${ks}.`);const n=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>ws[e]())))).reduce(((e,r,n)=>{var o;const i=t[n];return e[!(i in Cs)||(null===(o=Cs[i])||void 0===o?void 0:o.call(Cs))?"supported":"unsupported"].push([i,!!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 i=n.supported.reduce(((e,[t,r])=>(r?e.push(t):o.push(t),e)),[]);if(i.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(", ")}. `:"";lr().warn(`${e}${t}We'll be watching for the following targets instead: "${i.join(", ")}"`)}return lr().debug(`Watching these targets: "${i.join(", ")}"`),i})({targets:e.targets}),r=new Wt,n=await as(),o=null==t?void 0:t.reduce(((e,t)=>{const r=ss(t);return r&&e.push(r),e}),[]);let i=fs(n,{excludeDefault:!0,targets:o});return Yi().addEventListener("devicechange",(async()=>{const e=await as(),t=i,n=fs(e,{excludeDefault:!0,targets:o});i=n;const s=((e,t)=>{const r=_s(e),n=_s(e),o=[];lr().debug("[_getDeviceListDiff] <- oldDevices",e),lr().debug("[_getDeviceListDiff] -> newDevices",t);const i=t.filter((e=>{const t=e.deviceId,i=r.get(t);return i&&(n.delete(t),e.label!==i.label&&o.push(e)),void 0===i}));return{updated:o.map((e=>({type:"updated",payload:e}))),removed:Array.from(n,(([e,t])=>t)).map((e=>({type:"removed",payload:e}))),added:i.map((e=>({type:"added",payload:e})))}})(t,n),a=s.added.length>0,c=s.removed.length>0,d=s.updated.length>0;(a||c||d)&&r.emit("changed",{changes:s,devices:n}),a&&r.emit("added",{changes:s.added,devices:n}),c&&r.emit("removed",{changes:s.removed,devices:n}),d&&r.emit("updated",{changes:s.updated,devices:n})})),r},Es=()=>Is({targets:["speaker"]}),Ps=e=>"function"==typeof(null==e?void 0:e.getTracks),Ms=async e=>(await ys()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e)),Ts=e=>{lr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return ms(e)},Rs=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:n=""}=e;if(r){const e=await bs(r,n,"microphone").catch((e=>null));e&&("boolean"==typeof t&&(t={}),t.deviceId={exact:e})}let{video:o=!1,camId:i}=e;const{camLabel:s=""}=e;if(i){const e=await bs(i,s,"camera").catch((e=>null));e&&("boolean"==typeof o&&(o={}),o.deviceId={exact:e})}return{audio:t,video:o}},xs=(e,t)=>{const{disableUdpIceServers:r=!1}=t,n=e=>{const t="transport=udp";return Array.isArray(e)?e.filter((e=>!e.includes(t))):e.includes(t)?"":e};return e.map((e=>Object.assign(Object.assign({},e),{urls:r?n(e.urls):e.urls})))};var As={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 i=n[o],s=t.matchPrefix(e,"a=rtpmap:"+i+" ")[0];if(s){const n=t.parseRtpMap(s),o=t.matchPrefix(e,"a=fmtp:"+i+" ");switch(n.parameters=o.length?t.parseFmtp(o[0]):{},n.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+i+" ").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"),i=-1!==n.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),a=s.length>0&&s[0].ssrc;let c;const d=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substring(17).split(" ").map((e=>parseInt(e,10)))));d.length>0&&d[0].length>1&&d[0][0]===a&&(c=d[0][1]),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:i?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&a&&r.push({ssrc:a});let l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substring(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substring(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=l}))),r},t.parseRtcpParameters=function(e){const r={},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 i=t.matchPrefix(e,"a=rtcp-mux");return r.mux=i.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 i=t.matchPrefix(e,"a=sctp-port:");if(i.length>0)return{port:parseInt(i[0].substring(12),10),protocol:r.fmt,maxMessageSize:o};const s=t.matchPrefix(e,"a=sctpmap:");if(s.length>0){const e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:o}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,22)},t.writeSessionBoilerplate=function(e,r,n){let o;const i=void 0!==r?r:2;return o=e||t.generateSessionId(),"v=0\r\no="+(n||"thisisadapterortc")+" "+o+" "+i+" 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}(As);var Os=As.exports;const js=e=>/^m=audio/.test(e),Ls=e=>/^m=video/.test(e),Ds=(e,t)=>e.includes(`\r\nm=${t}`),Ws=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]),i=new RegExp(`a=fmtp:${o}`),s=r.findIndex((e=>i.test(e)));return s>=0?/stereo=1;/.test(r[s])||(r[s]+="; stereo=1; sprop-stereo=1"):r[n]+=`${t}a=fmtp:${o} stereo=1; sprop-stereo=1`,r.join(t)};class Ns{constructor(e,t){this.call=e,this.type=t,this.uuid=w(),this._negotiating=!1,this._processingRemoteSDP=!1,this._restartingIce=!1,this.logger.debug("New Peer with type:",this.type,"Options:",this.options),this._onIce=this._onIce.bind(this),this._onEndedTrackHandler=this._onEndedTrackHandler.bind(this),this.options.prevCallId&&(this.uuid=this.options.prevCallId),this.options.prevCallId=void 0,this.options.localStream&&es(this.options.localStream)&&(this._localStream=this.options.localStream),this.rtcConfigPolyfill=this.config}get logger(){return lr()}get options(){return this.call.options}get watchMediaPacketsTimeout(){var e;return null!==(e=this.options.watchMediaPacketsTimeout)&&void 0!==e?e:2e3}get localStream(){return this._localStream}set localStream(e){this._localStream=e}get remoteStream(){return this._remoteStream}get isOffer(){return"offer"===this.type}get isAnswer(){return"answer"===this.type}get isSimulcast(){return!0===this.options.simulcast}get isSfu(){return!0===this.options.sfu}get localVideoTrack(){const e=this._getSenderByKind("video");return(null==e?void 0:e.track)||null}get localAudioTrack(){const e=this._getSenderByKind("audio");return(null==e?void 0:e.track)||null}get remoteVideoTrack(){const e=this._getReceiverByKind("video");return(null==e?void 0:e.track)||null}get remoteAudioTrack(){const e=this._getReceiverByKind("audio");return(null==e?void 0:e.track)||null}get hasAudioSender(){return!!this._getSenderByKind("audio")}get hasVideoSender(){return!!this._getSenderByKind("video")}get hasAudioReceiver(){return!!this._getReceiverByKind("audio")}get hasVideoReceiver(){return!!this._getReceiverByKind("video")}get config(){const{rtcPeerConfig:e={}}=this.options,t=Object.assign({bundlePolicy:"max-compat",iceServers:xs(this.call.iceServers,{disableUdpIceServers:this.options.disableUdpIceServers}),sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.getConfiguration();return Boolean(null==e?void 0:e.length)}return!1}stopTrackSender(e){var t;try{const r=this._getSenderByKind(e);if(!r)return this.logger.info(`There is not a '${e}' sender to stop.`);r.track&&(os(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 Rs(this.options),o=await Ts({[e]:n[e]});if(o&&es(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{if(this.isAnswer)return this.logger.warn("Skip restartIceWithRelayOnly since we need to generate answer");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.warn("RTCPeer already with iceTransportPolicy relay only");const t=Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"});this.setConfiguration(t),this.restartIce()}catch(e){this.logger.error("restartIceWithRelayOnly",e)}}restartIce(){if(this._negotiating||this._restartingIce)return this.logger.warn("Skip restartIce");this._restartingIce=!0,this.logger.debug("Restart ICE"),this.type="offer",this.instance.restartIce()}triggerResume(){this.logger.info("Probably half-open so force close from client"),this._resumeTimer?this.logger.info('[skipped] Already in "resume" state'):(this.call.emit("media.disconnected"),this.call.emit("media.reconnecting"),this.clearTimers(),this._resumeTimer=setTimeout((()=>{this.logger.warn("Disconnecting due to RECONNECTION_ATTEMPT_TIMEOUT"),this.call.emit("media.disconnected"),this.call.leaveReason="RECONNECTION_ATTEMPT_TIMEOUT",this.call.setState("hangup")}),12e3),this.call._closeWSConnection())}resetNeedResume(){this.clearResumeTimer(),this.options.watchMediaPackets&&this.startWatchMediaPackets()}stopWatchMediaPackets(){this._mediaWatcher&&this._mediaWatcher.stop()}startWatchMediaPackets(){var e;this.stopWatchMediaPackets(),this._mediaWatcher=(e=>{if(!e.hasAudioReceiver&&!e.hasVideoReceiver)return void lr().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);lr().debug(`Start watching media for RTCPeer "${e.uuid}"`);let t,r=0,n=0,o=!0;const i=()=>{clearTimeout(t)},s=async()=>{var a,c;let d=0,l=0;try{const t=await e.instance.getStats(null),r=null===(a=e.remoteAudioTrack)||void 0===a?void 0:a.id,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&&(lr().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===n&&(lr().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),l=e.packetsReceived)}))}catch(e){lr().warn("getStats error",e)}finally{d&&d<=r&&l&&l<=n?(lr().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),lr().warn(`videoPacketsReceived: ${l} - previousVideoValue: ${n}`),e.triggerResume()):(r=null!=d?d:r,n=null!=l?l:n,i(),o&&"closed"!==e.instance.connectionState&&(t=setTimeout((()=>s()),e.watchMediaPacketsTimeout)))}};return{start:()=>{i(),s()},stop:()=>{o=!1,i()}}})(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}){var r;null===(r=this._rejectStartMethod)||void 0===r||r.call(this,{code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}_remoteSdpHasVideo(){var e,t;return Ds(null!==(t=null!==(e=this.remoteSdp)&&void 0!==e?e:this.options.remoteSdp)&&void 0!==t?t:"","video")}_remoteSdpHasAudio(){var e,t;return Ds(null!==(t=null!==(e=this.remoteSdp)&&void 0!==e?e:this.options.remoteSdp)&&void 0!==t?t:"","audio")}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&&es(this._localStream)){const e=this.isOffer||this._remoteSdpHasAudio()?this._localStream.getAudioTracks():[];this.logger.debug("Local audio tracks: ",e);const t=this.isOffer||this._remoteSdpHasVideo()?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),this.isAnswer&&this._resolveStartMethod()}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Os.getMediaSections(e);for(const e of r)if(!Os.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return lr().error("Error checking SDP",e),!1}})(this.localSdp):Boolean(this.localSdp)}_forceNegotiation(){this.logger.info("Force negotiation again"),this._negotiating=!1,this.startNegotiation()}_onIceTimeout(){if(this._sdpIsValid())return void this._sdpReady();this.logger.info("ICE gathering timeout");const e=this.getConfiguration();if("relay"===e.iceTransportPolicy)return this.logger.info('RTCPeer already with "iceTransportPolicy: relay"'),this._rejectStartMethod({code:"ICE_GATHERING_FAILED",message:"Ice gathering timeout"}),void this.call.setState("destroy");this.setConfiguration(Object.assign(Object.assign({},e),{iceTransportPolicy:"relay"})),this._forceNegotiation()}_onIce(e){if(this._iceTimeout&&clearTimeout(this._iceTimeout),!e.candidate)return this.instance.removeEventListener("icecandidate",this._onIce),void this._sdpReady();this.logger.debug("RTCPeer Candidate:",e.candidate),this._iceTimeout="host"===e.candidate.type?setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._onIceTimeout()}),this.options.maxIceGatheringTimeout):setTimeout((()=>{this.instance.removeEventListener("icecandidate",this._onIce),this._sdpReady()}),this.options.iceGatheringTimeout)}_setLocalDescription(e){const{useStereo:t,googleMaxBitrate:r,googleMinBitrate:n,googleStartBitrate:o}=this.options;return e.sdp&&t&&(e.sdp=Ws(e.sdp)),e.sdp&&r&&n&&o&&(e.sdp=((e,t,r,n)=>{const o=e.split("\r\n");return o.forEach(((e,i)=>{/^a=fmtp:\d*/.test(e)?o[i]+=`;x-google-max-bitrate=${t};x-google-min-bitrate=${r};x-google-start-bitrate=${n}`:/^a=mid:(1|video)/.test(e)&&(o[i]+=`\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=Ws(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",n=this.instance.localDescription.sdp.split(r),o=n.findIndex(js),i=n.findIndex(Ls);if(-1==i||-1==o||o<i)return e;const s=e.split(r),a=s.findIndex(js),c=s.findIndex(Ls),d=s.slice(a,c),l=s.slice(c,s.length-1);return[...s.slice(0,a),...l,...d,""].join(r)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(es(this.options.localStream))return this.options.localStream;const e=await Rs(this.options);return Ts(e)}_attachListeners(){this.instance.addEventListener("signalingstatechange",(()=>{switch(this.logger.debug("signalingState:",this.instance.signalingState),this.instance.signalingState){case"stable":this._negotiating=!1,this._restartingIce=!1,this.resetNeedResume(),"connected"===this.instance.connectionState&&this.emitMediaConnected();break;case"have-local-offer":"complete"===this.instance.iceGatheringState&&this._sdpReady();break;case"closed":delete this.instance;break;default:this._negotiating=!0}})),this.instance.addEventListener("connectionstatechange",(()=>{switch(this.logger.debug("connectionState:",this.instance.connectionState),this.instance.connectionState){case"connecting":this._connectionStateTimer=setTimeout((()=>{this.logger.warn("connectionState timed out"),this.restartIceWithRelayOnly()}),this.options.maxConnectionStateTimeout);break;case"connected":this.clearConnectionStateTimer(),this.emitMediaConnected();break;case"disconnected":this.logger.debug("[test] Prevent reattach!");break;case"failed":this.triggerResume()}})),this.instance.addEventListener("negotiationneeded",(()=>{this.logger.debug("Negotiation needed event"),this.startNegotiation()})),this.instance.addEventListener("iceconnectionstatechange",(()=>{this.logger.debug("iceConnectionState:",this.instance.iceConnectionState)})),this.instance.addEventListener("icegatheringstatechange",(()=>{this.logger.debug("iceGatheringState:",this.instance.iceGatheringState)})),this.instance.addEventListener("track",(e=>{this.call.emit("track",e),this._remoteStream=e.streams[0]})),this.instance.addEventListener("addstream",(e=>{e.stream&&(this._remoteStream=e.stream)})),this._attachAudioTrackListener(),this._attachVideoTrackListener()}clearTimers(){this.clearResumeTimer(),this.clearWatchMediaPacketsTimer(),this.clearConnectionStateTimer()}clearConnectionStateTimer(){clearTimeout(this._connectionStateTimer)}clearWatchMediaPacketsTimer(){clearTimeout(this._watchMediaPacketsTimer)}clearResumeTimer(){clearTimeout(this._resumeTimer),this._resumeTimer=void 0}emitMediaConnected(){this.call.emit("media.connected")}_onEndedTrackHandler(e){const t=e.target;this.call.emit(("audio"===t.kind?"microphone":"camera")+".disconnected",{deviceId:t.id,label:t.label})}_attachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_attachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.addEventListener("ended",this._onEndedTrackHandler)}))}_detachAudioTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getAudioTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}_detachVideoTrackListener(){var e;null===(e=this.localStream)||void 0===e||e.getVideoTracks().forEach((e=>{e.removeEventListener("ended",this._onEndedTrackHandler)}))}setConfiguration(e){var t;this.rtcConfigPolyfill=e,this.instance&&"function"==typeof(null===(t=this.instance)||void 0===t?void 0:t.setConfiguration)&&this.instance.setConfiguration(e)}getConfiguration(){var e;return this.instance&&"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getConfiguration)?this.instance.getConfiguration():this.rtcConfigPolyfill||this.config}}
|
|
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 Us=e=>pr(e.type),$s=function*(e){lr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=Co.createCatchableSaga((function*(e){var t,o;const{id:n,method:s,params:a={}}=e.payload,{callID:c,nodeId:d}=a,l=r.getRTCPeerById(c);if(!l)return void lr().warn(`RTCPeer '${c}' not found for method: '${s}'`,a);const u=r.peer;switch(s){case"verto.media":case"verto.answer":l.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===s?"early":"active"),(null==a?void 0:a.sdp)&&l.onRemoteSdp(a.sdp),yield $e(wo.upsert({id:null===(t=e.payload.params)||void 0===t?void 0:t.callID,nodeId:null===(o=e.payload.params)||void 0===o?void 0:o.nodeId})),yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:zr(n,s),node_id:d}});break;case"verto.bye":yield ze([r,r.onVertoBye],{rtcPeerId:c,byeCause:null==a?void 0:a.cause,byeCauseCode:null==a?void 0:a.causeCode,redirectDestination:null==a?void 0:a.redirectDestination}),yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:zr(n,s),node_id:d}});break;case"verto.ping":{const{nodeId:e}=a,t=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(a,["nodeId"]);yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:Br(t),node_id:e}});break}case"verto.mediaParams":{if(!c||!a.mediaParams){lr().warn("Invalid mediaParams event",a);break}const{audio:e,video:t}=a.mediaParams;l&&t&&l.applyMediaConstraints("video",t),l&&e&&l.applyMediaConstraints("audio",e);break}case"verto.display":r.setActiveRTCPeer(i),r.emit("verto.display",e.payload.params);break;default:return lr().warn(`Unknown Verto method: ${s}`,a)}}),(e=>{lr().error("Verto Error",e)}));for(;;){const e=yield Ue(n,(e=>{var t;return!!Us(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===i}));yield He(s,e)}lr().trace("vertoEventWorker ended")},Bs=function*(e){lr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=yield Ue(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i)),a=JSON.parse(JSON.stringify(s.payload));r.setActiveRTCPeer(i),yield $e(wo.upsert({id:s.payload.call_id,roomId:s.payload.room_session.room_id,roomSessionId:s.payload.room_session.id,memberId:s.payload.member_id,previewUrl:s.payload.room_session.preview_url})),r.emit("room.joined",zs.call(r,a)),lr().debug("roomSubscribedWorker ended",i)};function zs(e){return["room_session","room"].forEach((t=>{e[t].recordings&&(e[t].recordings=(e[t].recordings||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}):r=sn.createRoomSessionRecordingObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}}),this.instanceMap.set(t.id,r),r}))),e[t].playbacks&&(e[t].playbacks=(e[t].playbacks||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}):r=sn.createRoomSessionPlaybackObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}}),this.instanceMap.set(t.id,r),r}))),e[t].streams&&(e[t].streams=(e[t].streams||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}):r=sn.createRoomSessionStreamObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}}),this.instanceMap.set(t.id,r),r})))})),e}const Hs=function*(e){lr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const s=yield Ue(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));lr().debug("promoteDemoteWorker:",s.type,s.payload),yield $e(mo.updateAuthState(s.payload.authorization));const a=yield qe(Ki.getAuthState);if(!a)throw new Error(`Invalid authState for '${s.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(s.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),lr().debug("promoteDemoteWorker ended",i)},Fs=function*(e){lr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ue([Hr.authSuccessAction.type,Hr.authErrorAction.type])).type){case Hr.authSuccessAction.type:yield ze([t,t.resume]);break;case Hr.authErrorAction.type:yield ze([t,t.setState],"hangup")}lr().debug("sessionAuthWorker ended")},qs={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Ks=Object.assign(Object.assign({},qs),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Js={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},Gs={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:qs,video:Js,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Qs extends Qo{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{this.logger.debug("onVertoBye",e);const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const i=this.getRTCPeerById(t);return i?n&&i.localSdp?(this.logger.debug("Redirect Destination to:",n,"for RTCPeer:",i.uuid),void this.executeInvite(i.localSdp,i.uuid,n)):(i.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==i?void 0:i.uuid)&&(this.logger.debug("onVertoBye go hangup"),this.setState("hangup")))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},Gs),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this._initPeer()}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get nodeId(){return this.component.nodeId||this.options.nodeId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(Ki.getIceServers)}get component(){return this.select((e=>tn.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:i,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:i,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l,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.peer.instance&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!ts(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),n=e.getAudioTracks();n.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;is(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),n.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const i=this.localStream.getVideoTracks(),s=e.getVideoTracks();s.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(i.forEach((e=>{var t;is(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),s.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Ki.getAuthState);return e&&Tr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=this._buildPeer("offer");this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.updateConstraints({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.updateConstraints({audio:e})}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,o)=>{var n,i,s;try{if(!this.peer)return o(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return o(new Error("Invalid audio/video constraints."));if(this.logger.debug("updateConstraints trying constraints",this.__uuid,e),!this.manageSendersWithConstraints(e))return this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped"),r();let i,s={};null===(n=this.localStream)||void 0===n||n.getTracks().forEach((t=>{var r;s[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks first?"),this.logger.debug("Track readyState:",t.kind,t.readyState),is(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),i=await ms(e)}catch(e){return this.logger.error("Error updating device constraints:",e.name,e.message,e),this.logger.info("Restoring previous constraints",s),await this.updateConstraints(s,{attempt:t+1}),o(e)}await this.updateStream(i),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}finally{null===(i=this.peer)||void 0===i||i._attachAudioTrackListener(),null===(s=this.peer)||void 0===s||s._attachVideoTrackListener()}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");const t=this.localVideoTrack,r=this.localAudioTrack;this.peer._detachAudioTrackListener(),this.peer._detachVideoTrackListener(),this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:o}=this.peer,n=e.getTracks();this.logger.debug(`updateStream got ${n.length} tracks`);for(let e=0;e<n.length;e++){const i=n[e];this.logger.debug("updateStream apply track: ",i);const s=o.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===i.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===i.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));s&&s.sender?(this.logger.debug("updateStream got transceiver",s.currentDirection,s.mid),await s.sender.replaceTrack(i),this.logger.debug("updateStream replaceTrack"),s.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===i.kind&&e.id!==i.id&&(this.logger.debug("updateStream stop old track and apply new one - "),is(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(i)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(i),o.addTrack(i,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===i.kind?(this.emit("microphone.updated",{previous:{deviceId:null==r?void 0:r.id,label:null==r?void 0:r.label},current:{deviceId:null==i?void 0:i.id,label:null==i?void 0:i.label}}),this.options.micId=i.getSettings().deviceId):"video"===i.kind&&(this.emit("camera.updated",{previous:{deviceId:null==t?void 0:t.id,label:null==t?void 0:t.label},current:{deviceId:null==i?void 0:i.id,label:null==i?void 0:i.label}}),this.options.camId=i.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:$s,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Bs,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Hs,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=this._buildPeer("offer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer||(this.peer=this._buildPeer("answer"));try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,o=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",o),t){case"offer":return this._watchSessionAuth(),!this.resuming&&e.instance.remoteDescription?this.executeUpdateMedia(o,e.uuid):this.executeInvite(o,e.uuid);case"answer":return this.executeAnswer(o,e.uuid);default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Hr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Fs})}async resume(){var e;if(this.logger.warn(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const o=this.getRTCPeerById(t);if(!o||o.instance.remoteDescription&&!this.resuming)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const o=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},n=Dr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let i=[];i=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions();const s=await this.vertoExecute({message:n,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:i});this.logger.debug("Invite response",s),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeAnswer(e,t,r){"new"===this.state&&this.setState("answering");try{const o=Ur(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e})),n=await this.vertoExecute({message:o,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:this.getSubscriptions()});this.logger.debug("Answer response",n),this.resuming=!1,this.setActiveRTCPeer(t)}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=Nr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t,node_id:this.nodeId});if(o.sdp||this.logger.error("UpdateMedia invalid SDP answer",o),this.logger.debug("UpdateMedia response",o),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(o.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Wr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t,node_id:this.nodeId})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}async hangupAll(){const e=this.callId;if(!e)throw new Error("Invalid RTCPeer ID to hangup");try{const t=Wr(Object.assign({cause:"REJECT_ALL",causeCode:"825"},this.dialogParams(e)));await this.vertoExecute({message:t,callID:e,node_id:this.nodeId})}catch(e){this.logger.error("HangupAll error:",e)}finally{this.setState("hangup")}}async sendDigits(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Vr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));await this.vertoExecute({message:r,callID:t,node_id:this.nodeId})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emitter.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=Js),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Ks:qs)}_initPeer(){this.options.remoteSdp&&(this.peer=this._buildPeer("answer"))}_buildPeer(e){const t=new Vs(this,e);return this.appendRTCPeer(t),this.runRTCPeerWorkers(t.uuid),t}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const Xs=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{lr().error("Video Element Paused",e,t)}))})),e},Ys=({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()}))})),Zs=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ea=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},ta=({video:e,rootElement:t,paddingWrapper:r})=>{const o=e.videoHeight/e.videoWidth*100,n=function(e,t=0,r){let o=null,n=null;const i=function(){o&&(clearTimeout(o),n=null,o=null)},s=function(){if(!t)return e.apply(this,arguments);const s=this,a=arguments,c=r&&!o;return i(),n=function(){e.apply(s,a)},o=setTimeout((function(){if(o=null,!c){const e=n;return n=null,null==e?void 0:e()}}),t),c&&n?n():void 0};return s.cancel=i,s.flush=function(){const e=n;i(),e&&e()},s}((({width:t,height:n})=>{if(r){const i=n/t*100;r.style.paddingBottom=`${i>o?o:i}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,n)}}),100),i=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;n({width:t,height:r})}else e.contentRect&&n({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>i.observe(t),stop:()=>i.disconnect()}},ra=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),oa=Hr.createAction("swJs/audioSetSpeakerAction"),na=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,i=Xs(),s={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(lr().debug("Set localOverlay",e),n.set(this.id,e)):(lr().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return lr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?lr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):lr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return lr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return lr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:o,localStream:n})=>{lr().debug("Process layout.changed");try{const{layers:i=[]}=r,s=i.find((({member_id:e})=>e===o));let a=e.domElement;if(e.status=s?"visible":"hidden",!s)return lr().debug("Location not found"),void(a&&(lr().debug("Current layer not visible"),e.hide()));if(!a){lr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=Zs(e),i=document.createElement("div");return i.style.position="absolute",i.style.overflow="hidden",i.style.top=t,i.style.left=r,i.style.width=o,i.style.height=n,i})({location:s}),a.id=e.id;const r=Xs();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",r.style.objectFit="cover",a.appendChild(r);const o=t.querySelector(".mcuLayers"),i=o?.querySelector(`#${a.id}`);return o&&!i?(lr().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void lr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:l,height:u}=Zs(s);lr().debug("Update myLayer:",c,d,l,u);const h=n.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(n),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=l,a.style.height=u}catch(e){lr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:s});let c=!1,d=null;const l=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):s.hide()};let u;r.on(`${er}.mirror.video`,(e=>{s.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{lr().debug("Received layout.changed - videoTrack",c),c?l(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){lr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){lr().error("Error handling video_muted",e)}r.localStream&&s.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?s.hide():s.show())}catch(e){lr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(u=o(aa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:i}),c=!0,d&&l(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),n.clear(),u?.cancel()}))}catch(e){lr().error("videoElementSaga",e)}};function*ia({element:e,room:t}){const r=Hr.getCustomSagaActionType(t.__uuid,oa);for(;;){const o=yield Ue([r]);try{if(o.type===r){const r=yield ze(os,e,o.payload);t.emit(`${er}.speaker.updated`,o.payload),t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),lr().error(e)}}}function*sa({track:e,element:t,speakerId:r,room:o}){ra({track:e,element:t}),r&&os(t,r).catch((()=>{})),yield He(ia,{element:t,room:o})}function*aa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ea({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void lr().debug("MCU Content already there");const n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.right="0",n.style.bottom="0",n.appendChild(o);const i=document.createElement("div");i.classList.add("paddingWrapper"),i.style.paddingBottom="56.25%",i.style.position="relative",i.style.width="100%",i.appendChild(n);const s=document.createElement("div");s.classList.add("mcuLayers"),s.style.display="none",i.appendChild(s);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(i),e.style.width="100%",e.style.height="100%",e.appendChild(a),lr().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(lr().debug("Wait for the MCU to be ready"),yield ze(Ys,{element:o})),lr().debug("MCU is ready..");const c=ta({rootElement:e,video:o,paddingWrapper:i});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),s.style.display="block"}catch(e){lr().error("Handle video track error",e)}}const ca={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},da=_r(class extends Qs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:sn.audioMuteMember,audioUnmute:sn.audioUnmuteMember,videoMute:sn.videoMuteMember,videoUnmute:sn.videoUnmuteMember,setMicrophoneVolume:sn.setInputVolumeMember,setInputVolume:sn.setInputVolumeMember,setInputSensitivity:sn.setInputSensitivityMember}),la=_r(class extends Qs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:sn.audioMuteMember,audioUnmute:sn.audioUnmuteMember,videoMute:sn.videoMuteMember,videoUnmute:sn.videoUnmuteMember,setInputVolume:sn.setInputVolumeMember,setMicrophoneVolume:sn.setInputVolumeMember,setInputSensitivity:sn.setInputSensitivityMember}),ua=()=>{},ha="memberList.updated",pa=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(tr),e)),[]).join(".")})((({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(ur,(e=>`_${e.toLowerCase()}`)))(e=(({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`)({event:e,namespace:t}))),e))({event:ha})),ma=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],ga=e=>ma.includes(e),fa=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*va({swEventChannel:e,instance:t}){const r=new Map;function*o(e){const o="video.room.joined"===e.type?e.payload.room_session.id:e.payload.room_session_id,n=fa({action:e,memberList:r});t.emit(pa,{room_session_id:o,members:n})}for(;;){const t=yield Ue(e,(({type:e})=>ga(e)));yield He(o,t)}}const ya=function*({channels:{swEventChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ha))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ir(ma).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,ua)}));const o=({members:t})=>{e.emit(ha,{members:t})};return e.on(pa,o),{cleanup:()=>{e.off(pa,o)}}})(t,r);yield He(va,{swEventChannel:e,instance:t}),t.once("destroy",(()=>{o()}))},ba=function*(e){lr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:n,onFail:i}=e,{swEventChannel:s}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield Ue(s,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield qe(tn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(yield $e(wo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),n?.()):i?.({error:new Error("Unknown parent_id")})}lr().trace("childMemberJoinedWorker ended")},_a=function*(e){lr().trace("videoStreamWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:n,set:i,remove:s}}=e;let a=n(o.stream.id);switch(a?a.setPayload(o):a=sn.createRoomSessionStreamObject({store:t.store,payload:o}),i(o.stream.id,a),r){case"video.stream.started":t.emit("stream.started",a);break;case"video.stream.ended":t.emit("stream.ended",a),s(o.stream.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoStreamWorker ended")},wa=function*(e){lr().trace("videoRecordWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:n,set:i,remove:s}}=e;let a=n(o.recording.id);a?a.setPayload(o):a=sn.createRoomSessionRecordingObject({store:t.store,payload:o}),i(o.recording.id,a);const c=wr(r);switch(r){case"video.recording.started":case"video.recording.updated":t.emit(c,a);break;case"video.recording.ended":t.emit(c,a),s(o.recording.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoRecordWorker ended")},Sa=function*(e){lr().trace("videoPlaybackWorker started");const{instance:t,action:{type:r,payload:o},instanceMap:{get:n,set:i,remove:s}}=e;let a=n(o.playback.id);a?a.setPayload(o):a=sn.createRoomSessionPlaybackObject({store:t.store,payload:o}),i(o.playback.id,a);const c=wr(r);switch(r){case"video.playback.started":case"video.playback.updated":t.emit(c,a);break;case"video.playback.ended":t.emit(c,a),s(o.playback.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoPlaybackWorker ended")},ka=function*(e){const{channels:t,instance:r}=e,{swEventChannel:o}=t;function*n(t){const{type:o,payload:n}=t;switch(o){case"video.room.subscribed":yield Fe(Ri.memberPositionWorker,{...e,instance:r,initialState:n});break;case"video.playback.started":case"video.playback.updated":case"video.playback.ended":return void(yield He(Sa,{action:t,...e}));case"video.recording.started":case"video.recording.updated":case"video.recording.ended":return void(yield He(wa,{action:t,...e}));case"video.stream.ended":case"video.stream.started":return void(yield He(_a,{action:t,...e}));case"video.room.audience_count":return void r.emit("room.audienceCount",n);case"video.member.talking":{const{member:e}=n;"talking"in e&&(r.emit("member.talking."+(e.talking?"started":"ended"),n),r.emit("member.talking."+(e.talking?"start":"stop"),n));break}}r.emit(wr(o),n)}const i=e=>e.type.startsWith("video.");for(;;){const e=yield Ue(o,i);yield He(n,e)}lr().trace("videoWorker ended")},Ca=_r(class extends Qs{_screenShareList=new Set;_deviceList=new Set;_mirrored;_audioEl;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay,this.runWorker("videoWorker",{worker:ka})}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??[]}))}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:ya})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:i=!0,layout:s,positions:a}=e,c=await gs({audio:!0===n?ca:n,video:i}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:s,positions:a},l=Ho({store:this.store,Component:da})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{l&&l.active&&l.leave()}))})),l.once("destroy",(()=>{l.emit("room.left"),this._screenShareList.delete(l)}));try{return l.runWorker("childMemberJoinedWorker",{worker:ba,onDone:()=>t(l),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(l),o?await l.join():t(l)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:i=!1}=e;if(!n&&!i)throw new TypeError("At least one of `audio` or `video` must be requested.");const s={...this.options,localStream:void 0,remoteStream:void 0,audio:n,video:i,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=Ho({store:this.store,Component:la})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:ba,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),o?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){const t=this._audioEl.sinkId;return this.once(`${er}.speaker.updated`,(async e=>{const r=await Ms(t),o=await Ms(e),n=o?.deviceId===r?.deviceId;o?.deviceId&&!n&&this.emit("speaker.updated",{previous:{deviceId:r?.deviceId,label:r?.label},current:{deviceId:o.deviceId,label:o.label}})})),this.triggerCustomSaga(oa(e))}_attachSpeakerTrackListener(){rs()&&Ps().then((e=>{e.on("removed",(async e=>{const t=this._audioEl.sinkId,r=e.changes.find((e=>{const r=e.payload.deviceId;return r===t||""===r&&"default"===t||"default"===r&&""===t}));if(r){this.emit("speaker.disconnected",{deviceId:r.payload.deviceId,label:r.payload.label}),await(this._audioEl.setSinkId?.(""));const e=await Ms("default");if(!e?.deviceId)return;this.emit("speaker.updated",{previous:{deviceId:r.payload.deviceId,label:r.payload.label},current:{deviceId:e.deviceId,label:e.label}})}}))}))}getAudioEl(){return this._audioEl||(this._audioEl=new Audio,this._attachSpeakerTrackListener()),this._audioEl}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit(`${er}.mirror.video`,this._mirrored)}}}getSubscriptions(){const e=this.eventNames().map((e=>`video.${e}`));return Ir(e)}},{audioMute:sn.audioMuteMember,audioUnmute:sn.audioUnmuteMember,videoMute:sn.videoMuteMember,videoUnmute:sn.videoUnmuteMember,deaf:sn.deafMember,undeaf:sn.undeafMember,setInputVolume:sn.setInputVolumeMember,setOutputVolume:sn.setOutputVolumeMember,setMicrophoneVolume:sn.setInputVolumeMember,setSpeakerVolume:sn.setOutputVolumeMember,setInputSensitivity:sn.setInputSensitivityMember,removeMember:sn.removeMember,removeAllMembers:sn.removeAllMembers,getMembers:sn.getMembers,getLayouts:sn.getLayouts,setLayout:sn.setLayout,setPositions:sn.setPositions,setMemberPosition:sn.setMemberPosition,hideVideoMuted:sn.hideVideoMuted,showVideoMuted:sn.showVideoMuted,getRecordings:sn.getRecordings,startRecording:sn.startRecording,getPlaybacks:sn.getPlaybacks,play:sn.play,setHideVideoMuted:sn.setHideVideoMuted,getMeta:sn.getMeta,setMeta:sn.setMeta,updateMeta:sn.updateMeta,deleteMeta:sn.deleteMeta,getMemberMeta:sn.getMemberMeta,setMemberMeta:sn.setMemberMeta,updateMemberMeta:sn.updateMemberMeta,deleteMemberMeta:sn.deleteMemberMeta,promote:sn.promote,demote:sn.demote,getStreams:sn.getStreams,startStream:sn.startStream,lock:sn.lock,unlock:sn.unlock,setRaisedHand:sn.setRaisedHand,setPrioritizeHandraise:sn.setPrioritizeHandraise}),Ea=function*(e){lr().trace("videoManagerRoomsWorker started");const{instance:t,action:{type:r,payload:o}}=e,n={rooms:o.rooms.map((e=>vr(e)))};t.emit(wr(r),n),lr().trace("videoManagerRoomsWorker ended")},Ia=function*(e){lr().trace("videoManagerRoomWorker started");const{instance:t,action:{type:r,payload:o}}=e;t.emit(wr(r),vr(o)),lr().trace("videoManagerRoomWorker ended")},Pa=function*(e){lr().trace("videoManagerWorker started");const{channels:{swEventChannel:t}}=e;function*r(t){const{type:r}=t;switch(r){case"video-manager.rooms.subscribed":yield He(Ea,{action:t,...e});break;case"video-manager.room.added":case"video-manager.room.deleted":case"video-manager.room.ended":case"video-manager.room.started":case"video-manager.room.updated":yield He(Ia,{action:t,...e});break;default:lr().warn(`Unknown video-manager event: "${r}"`)}}for(;;){const e=yield Ue(t,(e=>e.type.startsWith("video-manager.")));yield He(r,e)}lr().trace("videoManagerWorker ended")};class Ta extends Yo{constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Pa})}getSubscriptions(){const e=this.eventNames().map((e=>`video-manager.${e}`));return Ir(e)}}class Ma extends Xo{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,...i}=e,s=[];s.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=t.getAudioEl();let n;t.on("track",(function(i){"audio"===i.track.kind&&(n=r(sa,{track:i.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){lr().error("audioElementSaga",e)}else lr().warn("`Audio` is not supported on this environment.")})({speakerId:i.speakerId})),t&&s.push(na({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...i,store:this.store,customSagas:s},Ho({store:c.store,customSagas:c.customSagas,Component:Ca})(c));var c;return n&&a.on("member.updated.audio_muted",(({member:e})=>{try{e.id===a.memberId&&"audio_muted"in e&&(e.audio_muted?a.stopOutboundAudio():a.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&a.on("member.updated.video_muted",(({member:e})=>{try{e.id===a.memberId&&"video_muted"in e&&(e.video_muted?a.stopOutboundVideo():a.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),a}}}get chat(){return this._chat||(this._chat=oi.createBaseChatObject({store:this.store})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=gi.createBasePubSubObject({store:this.store})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Ho({store:e.store,Component:Ta})(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(Hr.reauthAction({token:e}))}}function Ra(e){this.message=e}(Ra.prototype=new Error).name="InvalidCharacterError";var xa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Ra("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,n=0,i=0,s="";o=t.charAt(i++);~o&&(r=n%4?64*r+o:o,n++%4)?s+=String.fromCharCode(255&r>>(-2*n&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return s};function Oa(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(xa(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return xa(t)}}function Aa(e){this.message=e}function ja(e,t){if("string"!=typeof e)throw new Aa("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Oa(e.split(".")[r]))}catch(e){throw new Aa("Invalid token specified: "+e.message)}}(Aa.prototype=new Error).name="InvalidTokenError";const La=()=>{if(window&&window.sessionStorage)return window.sessionStorage},Da=e=>{let t="";try{const r=ja(e);t=r?.r??""}catch(e){t=""}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},Wa="function"==typeof CloseEvent?CloseEvent:class{constructor(e,t={}){this.type=e,Zt(this,"code"),Zt(this,"reason"),Zt(this,"wasClean"),this.code=void 0===t.code?0:t.code,this.reason=void 0===t.reason?"":t.reason,this.wasClean=void 0!==t.wasClean&&t.wasClean}};class Na extends yo{options;WebSocketConstructor=WebSocket;CloseEventConstructor=Wa;agent="@signalwire/js/browser/3.26.0";tokenTyp;constructor(e){let t={};try{t=ja(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e,this.tokenTyp=t.typ??"VRT"}get allowReattach(){return!1!==this.options?.reattach&&this.isVRT()}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const{protocolKey:e}=Da(this.options.token);return e?(this.logger.trace("Search protocol for",e),La()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=Da(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),La()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=Da(this.options.token);return e?La()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=Da(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),La()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=Da(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),La()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),La()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),La()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}}const Va=e=>{const t={...e,emitter:Fo()},r=qo({userOptions:t,SessionConstructor:Na});return Ho({store:r,Component:Ma})(t)},Ua={aspectRatio:{ideal:16/9}},$a=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:n=!0,iceServers:i,rootElementId:s,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:l=!0,speakerId:u,...h}=e,p=Va({...h});if(await p.connect(),!p)return;let m;if(s){const e=document.getElementById(s);e?m=e:(m=document.body,lr().warn(`We couldn't find an element with id: ${s}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ua:n,negotiateAudio:!0,negotiateVideo:!0,iceServers:i,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:l,speakerId:u});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){lr().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)})),Ba=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote","lock","unlock"],za=["member.joined","layout.changed"],Ha=()=>{},Fa=function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:i=!0,mirrorLocalVideoOverlay:s=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:p,disableUdpIceServers:m=!1,...g}=e;["audio","video"].forEach((t=>{t in e&&lr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const f=!1!==e?.reattach,{callIdKey:v}=Da(g.token),y={joined:({call_id:e})=>{f&&v&&La()?.setItem(v,e)},init:()=>{f&&_.on("room.subscribed",y.joined),_.options.prevCallId=y.getPrevCallId()},destroy:()=>{f&&(_.off("room.subscribed",y.joined),v&&La()?.removeItem(v))},getPrevCallId:()=>{if(f&&v)return La()?.getItem(v)??void 0}},b=Va(g),_=b.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:i,mirrorLocalVideoOverlay:s,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:p,prevCallId:y.getPrevCallId(),disableUdpIceServers:m});_.once("destroy",(()=>{_.emit("room.left",{reason:_.leaveReason}),y.destroy(),b.disconnect()})),b.session.once("session.disconnected",(()=>{_.destroy()}));const w={join:e=>new Promise((async(o,n)=>{try{_.attachPreConnectWorkers(),await b.connect();const i=e?.audio??t,s=e?.video??r,a=b._sessionAuthState;if(lr().debug("getJoinMediaParams authState?",a),a&&"video"===a.type){const t=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:n,sendVideo:i,receiveAudio:s,receiveVideo:a}=e;lr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:l}=t,u="member"===(l??"member"),h=u&&"both"===c,p=u&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(n??r),v=Boolean(i??o),y=Boolean(s??r),b=Boolean(a??o);return!h&&f&&lr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&lr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&lr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&lr().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(i),sendVideo:Boolean(s),...e});if(!Object.values(t).some(Boolean))return b.disconnect(),n(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));lr().debug("Set mediaOptions",t),_.updateMediaOptions({audio:!!t.mustSendAudio&&(i||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}_.once("room.subscribed",(()=>{o(_)})),y.init(),za.forEach((e=>_.once(e,Ha))),await _.join()}catch(e){lr().error("RoomSession Join",e),b.disconnect(),n(e)}}))};return new Proxy(_,{get(e,t,r){if(t in w)return w[t];if(!e.active&&Ba.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 qa=Object.freeze({__proto__:null,RoomSession:Fa,createRoomObject:$a,joinRoom:e=>$a({...e,autoJoin:!0}),createClient:Va});class Ka{options;httpClient;constructor(e){this.options=e,this.httpClient=Gi({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get httpHost(){return this.options.httpHost??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async registerDevice({deviceType:e,deviceToken:t}){const{body:r}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:e,device_token:t}});return r}async unregisterDevice({id:e}){const t=`/subscriber/devices/${e}`;return await this.httpClient(t,{method:"DELETE"})}}const Ja=function*(e){lr().debug("WSClientWorker started");const{channels:t,instance:r}=e,{swEventChannel:o}=t;for(lr().debug("WSClientWorker instance",r);;){const e=yield Ue(o,(e=>(lr().debug("WSClientWorker action",e),"webrtc.message"===e.type&&"verto.invite"===e.payload.method)));lr().debug("Build new call to answer",e)}lr().trace("WSClientWorker ended")};class Ga{options;wsClient;logger=lr();constructor(e){this.options=e,this.wsClient=Va({host:this.options.host,token:this.options.token,debug:{logWsTraffic:!0},logLevel:"debug"})}connect(){return this.wsClient.runWorker("WSClientWorker",{worker:Ja}),this.wsClient.connect()}disconnect(){return this.wsClient.disconnect()}async dial(e){return new Promise((async(t,r)=>{try{console.log("WSClient dial with:",e),await this.connect();const r=this.wsClient.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,rootElement:this.options.rootElement,applyLocalVideoOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,destinationNumber:e.to,watchMediaPackets:!1,nodeId:e.nodeId,disableUdpIceServers:this.options.disableUdpIceServers||!1});r.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed")})),this.wsClient.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected")})),r.attachPreConnectWorkers(),r.start=()=>new Promise((async(e,t)=>{try{r.once("verto.display",(()=>e(r))),r.once("room.subscribed",(()=>e(r))),await r.join()}catch(e){lr().error("WSClient call start",e),t(e)}})),t(r)}catch(e){lr().error("WSClient dial",e),r(e)}}))}handlePushNotification(e){return new Promise((async(t,r)=>{const{decrypted:o,type:n}=e;if("call_invite"!==n)return void this.logger.warn("Unknown notification type",e);this.logger.debug("handlePushNotification",e);const{params:i,node_id:s}=o,{params:{callID:a,sdp:c,caller_id_name:d,caller_id_number:l,callee_id_name:u,callee_id_number:h,display_direction:p}}=i;this.logger.debug("handlePushNotification data",{callID:a,sdp:c,caller_id_name:d,caller_id_number:l,callee_id_name:u,callee_id_number:h,display_direction:p});try{await this.connect();try{await this.executeVertoSubscribe(a,s)}catch(e){this.logger.warn("Verto Subscribe",e)}const e=this.wsClient.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,rootElement:this.options.rootElement,applyLocalVideoOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,remoteSdp:c,prevCallId:a,nodeId:s});e.once("destroy",(()=>{lr().debug("RTC Connection Destroyed")})),e.attachPreConnectWorkers(),lr().debug("Resolving Call",e),t({resultType:"inboundCall",resultObject:e})}catch(e){r(e)}}))}async executeVertoSubscribe(e,t){try{return await this.wsClient.execute({method:"webrtc.verto",params:{callID:e,node_id:t,subscribe:[],message:$r({sessid:e,eventChannel:[]})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}updateToken(e){return new Promise(((t,r)=>{this.wsClient.once("session.auth_error",(e=>{r(e)})),this.wsClient.once("session.connected",(()=>{t()})),this.wsClient.reauthenticate(e)}))}}class Qa{options;httpClient;constructor(e){this.options=e,this.httpClient=Gi({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get httpHost(){let e={};try{e=ja(this.options.token,{header:!0})}catch(e){}const t=this.options.host||e?.ch;return t?`fabric.${t.split(".").splice(1).join(".")}`:"fabric.signalwire.com"}async getAddresses(e){const{type:t,displayName:r}=e||{};let o="/addresses";if(t||r){const e=new URLSearchParams;t&&e.append("type",t),r&&e.append("display_name",r),o+=`?${e.toString()}`}const{body:n}=await this.httpClient(o),i=async e=>{const{body:t}=await this.httpClient(e);return s(t)},s=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?i(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?i(t):void 0},firstPage:async()=>{const{first:t}=e.links;return t?i(t):void 0},hasNext:Boolean(e.links.next),hasPrev:Boolean(e.links.prev)});return s(n)}async registerDevice({deviceType:e,deviceToken:t}){const{body:r}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:e,device_token:t}});return r}async unregisterDevice({id:e}){const t=`/subscriber/devices/${e}`;return await this.httpClient(t,{method:"DELETE"})}}const Xa=e=>new Promise((async(t,r)=>{try{const r=new Qa(e),o=new Ga(e);t({httpHost:r.httpHost,getAddresses:r.getAddresses.bind(r),registerDevice:r.registerDevice.bind(r),unregisterDevice:r.unregisterDevice.bind(r),connect:o.connect.bind(o),disconnect:o.disconnect.bind(o),dial:o.dial.bind(o),handlePushNotification:o.handlePushNotification.bind(o),updateToken:o.updateToken.bind(o),__httpClient:r,__wsClient:o})}catch(e){r(e)}}));var Ya=Object.freeze({__proto__:null,Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=Gi({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let o,n;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);o=new Fa({token:t.token,debug:{logWsTraffic:!0},logLevel:"debug",watchMediaPackets:!1,...r}),n=e=>new Promise(((t,r)=>(o.once("room.joined",(e=>t(e))),o.emitter.once("verto.display",(e=>t(e))),o.join(e).catch((e=>r(e))))));const i={start:n};return new Proxy(o,{get:(e,t,r)=>t in i?i[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}},SWClient:Ka,WSClient:Ga,SignalWire:Xa});const Za=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var ec=Object.freeze({__proto__:null,Client:function(e){const t=Va(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Za.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})},ChatMember:Ii,ChatMessage:Ei});const tc=["getAllowedChannels","subscribe","publish"];var rc=Object.freeze({__proto__:null,PubSubMessage:gi.PubSubMessage,Client:function(e){const t=Va(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:tc.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}}),oc=Object.freeze({__proto__:null,getDevices:ys,getCameraDevices:()=>ys("camera"),getMicrophoneDevices:()=>ys("microphone"),getSpeakerDevices:bs,getDevicesWithPermissions:fs,getCameraDevicesWithPermissions:()=>fs("camera"),getMicrophoneDevicesWithPermissions:()=>fs("microphone"),getSpeakerDevicesWithPermissions:()=>fs("speaker"),checkPermissions:ls,checkCameraPermissions:us,checkMicrophonePermissions:hs,checkSpeakerPermissions:ps,requestPermissions:async e=>{try{const t=await ms(e);ns(t)}catch(e){throw e}},createDeviceWatcher:Is,createCameraDeviceWatcher:()=>Is({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Is({targets:["microphone"]}),createSpeakerDeviceWatcher:Ps,supportsMediaDevices:Yi,supportsGetUserMedia:()=>"function"==typeof Zi().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Zi().getDisplayMedia,getUserMedia:ms,getDisplayMedia:gs,enumerateDevices:cs,getSupportedConstraints:es,supportsMediaOutput:rs,setMediaElementSinkId:os,stopStream:ns,stopTrack:is,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Ts(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},ms(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Wt,o=new(window.AudioContext||window.webkitAudioContext),n=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let i,s;try{o.createMediaStreamSource(t).connect(n)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(n.frequencyBinCount);n.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;s!==t&&(s=t,r.emit("volumeChanged",Math.min(s,100))),i=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};i=requestAnimationFrame(a);const c=()=>{i&&cancelAnimationFrame(i),"closed"!==o.state&&o.close().catch((e=>{lr().error("Error closing the AudioContext",e)})),Ts(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=ec,e.Fabric=Ya,e.PubSub=rc,e.SWClient=Ka,e.SignalWire=Xa,e.Video=qa,e.WebRTC=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
20
|
+
***************************************************************************** */const Vs=e=>mr(e.type),Us=function*(e){lr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:i}=n;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=In.createCatchableSaga((function*(e){var t,n;const{id:o,method:s,params:a={}}=e.payload,{callID:c,nodeId:d}=a,l=r.getRTCPeerById(c);if(!l)return void lr().warn(`RTCPeer '${c}' not found for method: '${s}'`,a);const u=r.peer;switch(s){case"verto.media":case"verto.answer":l.uuid===(null==u?void 0:u.uuid)&&r.setState("verto.media"===s?"early":"active"),(null==a?void 0:a.sdp)&&l.onRemoteSdp(a.sdp),yield $e(Sn.upsert({id:null===(t=e.payload.params)||void 0===t?void 0:t.callID,nodeId:null===(n=e.payload.params)||void 0===n?void 0:n.nodeId})),yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:Hr(o,s),node_id:d}});break;case"verto.bye":yield ze([r,r.onVertoBye],{rtcPeerId:c,byeCause:null==a?void 0:a.cause,byeCauseCode:null==a?void 0:a.causeCode,redirectDestination:null==a?void 0:a.redirectDestination}),yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:Hr(o,s),node_id:d}});break;case"verto.ping":{const{nodeId:e}=a,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}(a,["nodeId"]);yield ze([r,r.execute],{method:r._getRPCMethod(),params:{message:zr(t),node_id:e}});break}case"verto.mediaParams":{if(!c||!a.mediaParams){lr().warn("Invalid mediaParams event",a);break}const{audio:e,video:t}=a.mediaParams;l&&t&&l.applyMediaConstraints("video",t),l&&e&&l.applyMediaConstraints("audio",e);break}case"verto.display":r.setActiveRTCPeer(i),r.emit("verto.display",e.payload.params);break;default:return lr().warn(`Unknown Verto method: ${s}`,a)}}),(e=>{lr().error("Verto Error",e)}));for(;;){const e=yield Ue(o,(e=>{var t;return!!Vs(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===i}));yield He(s,e)}lr().trace("vertoEventWorker ended")},$s=function*(e){lr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:i}=n;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const s=yield Ue(o,(e=>("video.room.subscribed"===e.type||"call.joined"===e.type)&&e.payload.call_id===i)),a=JSON.parse(JSON.stringify(s.payload));r.setActiveRTCPeer(i);const c=s.payload.room_session.id||s.payload.room_session.room_session_id;yield $e(Sn.upsert({id:s.payload.call_id,roomId:s.payload.room_session.room_id,roomSessionId:c,memberId:s.payload.member_id,previewUrl:s.payload.room_session.preview_url})),r.emit("room.joined",Bs.call(r,a)),lr().debug("roomSubscribedWorker ended",i)};function Bs(e){return["room_session","room"].forEach((t=>{e[t]&&e[t].recordings&&(e[t].recordings=(e[t].recordings||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}):r=so.createRoomSessionRecordingObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,recording:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].playbacks&&(e[t].playbacks=(e[t].playbacks||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}):r=so.createRoomSessionPlaybackObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,playback:t}}),this.instanceMap.set(t.id,r),r}))),e[t]&&e[t].streams&&(e[t].streams=(e[t].streams||[]).map((t=>{let r=this.instanceMap.get(t.id);return r?r.setPayload({room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}):r=so.createRoomSessionStreamObject({store:this.store,payload:{room_id:e.room.room_id,room_session_id:e.room_session.id,stream:t}}),this.instanceMap.set(t.id,r),r})))})),e}const zs=function*(e){lr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:n}=e,{swEventChannel:o}=t,{rtcPeerId:i}=n;if(!i)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const s=yield Ue(o,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));lr().debug("promoteDemoteWorker:",s.type,s.payload),yield $e(gn.updateAuthState(s.payload.authorization));const a=yield qe(Qi.getAuthState);if(!a)throw new Error(`Invalid authState for '${s.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(s.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),lr().debug("promoteDemoteWorker ended",i)},Hs=function*(e){lr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ue([Fr.authSuccessAction.type,Fr.authErrorAction.type])).type){case Fr.authSuccessAction.type:yield ze([t,t.resume]);break;case Fr.authErrorAction.type:yield ze([t,t.setState],"hangup")}lr().debug("sessionAuthWorker ended")},Fs={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},qs=Object.assign(Object.assign({},Fs),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Ks={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},Js={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Fs,video:Ks,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class Gs extends Xn{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{this.logger.debug("onVertoBye",e);const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:n="16",redirectDestination:o}=e;this.cause=String(r),this.causeCode=String(n);const i=this.getRTCPeerById(t);return i?o&&i.localSdp?(this.logger.debug("Redirect Destination to:",o,"for RTCPeer:",i.uuid),void this.executeInvite(i.localSdp,i.uuid,o)):(i.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==i?void 0:i.uuid)&&(this.logger.debug("onVertoBye go hangup"),this.setState("hangup")))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},Js),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this._initPeer()}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get nodeId(){return this.component.nodeId||this.options.nodeId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(Qi.getIceServers)}get component(){return this.select((e=>ro.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:n,callerNumber:o,remoteCallerName:i,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:n,callerNumber:o,remoteCallerName:i,remoteCallerNumber:s,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:l,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.peer.instance&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!es(e))return r(new Error("Invalid stream provided."));const n=this.localStream.getAudioTracks(),o=e.getAudioTracks();o.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(n.forEach((e=>{var t;os(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),o.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const i=this.localStream.getVideoTracks(),s=e.getVideoTracks();s.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(i.forEach((e=>{var t;os(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),s.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(Qi.getAuthState);return e&&Mr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=this._buildPeer("offer");this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.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,i,s;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 this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped"),r();let i,s={};null===(o=this.localStream)||void 0===o||o.getTracks().forEach((t=>{var r;s[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks first?"),this.logger.debug("Track readyState:",t.kind,t.readyState),os(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),i=await ms(e)}catch(e){return this.logger.error("Error updating device constraints:",e.name,e.message,e),this.logger.info("Restoring previous constraints",s),await this.updateConstraints(s,{attempt:t+1}),n(e)}await this.updateStream(i),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),n(e)}finally{null===(i=this.peer)||void 0===i||i._attachAudioTrackListener(),null===(s=this.peer)||void 0===s||s._attachVideoTrackListener()}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");const t=this.localVideoTrack,r=this.localAudioTrack;this.peer._detachAudioTrackListener(),this.peer._detachVideoTrackListener(),this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:n}=this.peer,o=e.getTracks();this.logger.debug(`updateStream got ${o.length} tracks`);for(let e=0;e<o.length;e++){const i=o[e];this.logger.debug("updateStream apply track: ",i);const s=n.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===i.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===i.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));s&&s.sender?(this.logger.debug("updateStream got transceiver",s.currentDirection,s.mid),await s.sender.replaceTrack(i),this.logger.debug("updateStream replaceTrack"),s.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===i.kind&&e.id!==i.id&&(this.logger.debug("updateStream stop old track and apply new one - "),os(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(i)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(i),n.addTrack(i,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===i.kind?(this.emit("microphone.updated",{previous:{deviceId:null==r?void 0:r.id,label:null==r?void 0:r.label},current:{deviceId:null==i?void 0:i.id,label:null==i?void 0:i.label}}),this.options.micId=i.getSettings().deviceId):"video"===i.kind&&(this.emit("camera.updated",{previous:{deviceId:null==t?void 0:t.id,label:null==t?void 0:t.label},current:{deviceId:null==i?void 0:i.id,label:null==i?void 0:i.label}}),this.options.camId=i.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:Us,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:$s,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:zs,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=this._buildPeer("offer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer||(this.peer=this._buildPeer("answer"));try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,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":return this.executeAnswer(n,e.uuid);default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Fr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Hs})}async resume(){var e;if(this.logger.warn(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const 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=Wr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),n),{sdp:e}));let i=[];i=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions(),this.logger.debug("Subscribing to",i);const s=await this.vertoExecute({message:o,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:i});this.logger.debug("Invite response",s),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeAnswer(e,t,r){"new"===this.state&&this.setState("answering");try{const n=$r(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e})),o=await this.vertoExecute({message:n,callID:t,node_id:null!=r?r:this.options.nodeId,subscribe:this.getSubscriptions()});this.logger.debug("Answer response",o),this.resuming=!1,this.setActiveRTCPeer(t)}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=Vr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),n=await this.vertoExecute({message:r,callID:t,node_id:this.nodeId});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=Nr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t,node_id:this.nodeId})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}async hangupAll(){const e=this.callId;if(!e)throw new Error("Invalid RTCPeer ID to hangup");try{const t=Nr(Object.assign({cause:"REJECT_ALL",causeCode:"825"},this.dialogParams(e)));await this.vertoExecute({message:t,callID:e,node_id:this.nodeId})}catch(e){this.logger.error("HangupAll error:",e)}finally{this.setState("hangup")}}async sendDigits(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Ur(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));await this.vertoExecute({message:r,callID:t,node_id:this.nodeId})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emitter.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=Ks),!0===this.options.audio&&(this.options.audio=this.options.screenShare?qs:Fs)}_initPeer(){this.options.remoteSdp&&(this.peer=this._buildPeer("answer"))}_buildPeer(e){const t=new Ns(this,e);return this.appendRTCPeer(t),this.runRTCPeerWorkers(t.uuid),t}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const Qs=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{lr().error("Video Element Paused",e,t)}))})),e},Xs=({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()}))})),Ys=({x:e,y:t,width:r,height:n})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${n}%`}),Zs=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},ea=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),ta=Fr.createAction("swJs/audioSetSpeakerAction"),ra=["loadedmetadata","resize"],na=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:n}){try{const o=new Map,i=Qs(),s={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return o.get(this.id)},set domElement(e){e?(lr().debug("Set localOverlay",e),o.set(this.id,e)):(lr().debug("Remove localOverlay"),o.delete(this.id))},hide(){if(!this.domElement)return lr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?lr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):lr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return lr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return lr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:n,localStream:o})=>{lr().debug("Process layout.changed");try{const{layers:i=[]}=r,s=i.find((({member_id:e})=>e===n));let a=e.domElement;if(e.status=s?"visible":"hidden",!s)return lr().debug("Location not found"),void(a&&(lr().debug("Current layer not visible"),e.hide()));if(!a){lr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:n,height:o}=Ys(e),i=document.createElement("div");return i.style.position="absolute",i.style.overflow="hidden",i.style.top=t,i.style.left=r,i.style.width=n,i.style.height=o,i})({location:s}),a.id=e.id;const r=Qs();r.srcObject=o,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",r.style.objectFit="cover",a.appendChild(r);const n=t.querySelector(".mcuLayers"),i=n?.querySelector(`#${a.id}`);return n&&!i?(lr().debug("Build myLayer append it"),n.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void lr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:l,height:u}=Ys(s);lr().debug("Update myLayer:",c,d,l,u);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=l,a.style.height=u}catch(e){lr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:s});let c=!1,d=null;const l=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):s.hide()};let u;r.on(`${er}.mirror.video`,(e=>{s.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{lr().debug("Received layout.changed - videoTrack",c),c?l(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){lr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){lr().error("Error handling video_muted",e)}r.localStream&&s.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?s.hide():s.show())}catch(e){lr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(u=n(sa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:i}),c=!0,d&&l(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),o.clear(),u?.cancel()}))}catch(e){lr().error("videoElementSaga",e)}};function*oa({element:e,room:t}){const r=Fr.getCustomSagaActionType(t.__uuid,ta);for(;;){const n=yield Ue([r]);try{if(n.type===r){const r=yield ze(rs,e,n.payload);t.emit(`${er}.speaker.updated`,n.payload),t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:n.dispatchId,payload:e,kind:"reject"}),lr().error(e)}}}function*ia({track:e,element:t,speakerId:r,room:n}){ea({track:e,element:t}),r&&rs(t,r).catch((()=>{})),yield He(oa,{element:t,room:n})}function*sa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:n}){try{if(Zs({element:n,track:r}),n.style.width="100%",n.style.maxHeight="100%",!t)return void e.appendChild(n);if(e.querySelector(".mcuContent"))return void lr().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 i=document.createElement("div");i.classList.add("paddingWrapper"),i.style.position="relative",i.style.width="100%",i.appendChild(o),function({videoElement:e,paddingWrapper:t,fixInLandscapeOrientation:r=!1,debugDivElementId:n="videoDimensionsDebug",samplingInterval:o=0}){const i=(t,n)=>{const o=document.createElement("p");o.innerHTML=((e,t,n)=>`Video dimensions on <strong>${e} event</strong>:</strong> ${t}x${n}px - fixInLandscapeOrientation: ${r}`)(n,e.videoWidth,e.videoHeight),t.appendChild(o)};let s;try{s=document.getElementById(n)}catch{}ra.forEach((n=>e.addEventListener(n,(()=>{t.style.paddingBottom=`${r?"56.25":e.videoHeight/e.videoWidth*100}%`,s&&i(s,n)})))),o>0&&setInterval((()=>{if(t.style.paddingBottom=e.videoHeight/e.videoWidth*100+"%",s){let e=s.querySelector(".timer-values");e||(e=document.createElement("div"),e.className="timer-values",s.appendChild(e)),i(s,"timer")}}))}({videoElement:n,paddingWrapper:i,fixInLandscapeOrientation:e.classList.contains("landscape-only")});const s=document.createElement("div");s.classList.add("mcuLayers"),s.style.display="none",i.appendChild(s);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(i),e.style.width="100%",e.style.height="100%",e.appendChild(a),lr().debug("MCU readyState 1 >>",n.readyState),n.readyState===HTMLMediaElement.HAVE_NOTHING&&(lr().debug("Wait for the MCU to be ready"),yield ze(Xs,{element:n})),lr().debug("MCU is ready.."),s.style.display="block"}catch(e){lr().error("Handle video track error",e)}}const aa={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ca=_r(class extends Gs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:so.audioMuteMember,audioUnmute:so.audioUnmuteMember,videoMute:so.videoMuteMember,videoUnmute:so.videoUnmuteMember,setMicrophoneVolume:so.setInputVolumeMember,setInputVolume:so.setInputVolumeMember,setInputSensitivity:so.setInputSensitivityMember}),da=_r(class extends Gs{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:so.audioMuteMember,audioUnmute:so.audioUnmuteMember,videoMute:so.videoMuteMember,videoUnmute:so.videoUnmuteMember,setInputVolume:so.setInputVolumeMember,setMicrophoneVolume:so.setInputVolumeMember,setInputSensitivity:so.setInputSensitivityMember}),la=()=>{},ua="memberList.updated",ha=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(tr),e)),[]).join(".")})((({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(ur,(e=>`_${e.toLowerCase()}`)))(e=(({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`)({event:e,namespace:t}))),e))({event:ua})),ma=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],pa=e=>ma.includes(e),ga=({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*fa({swEventChannel:e,instance:t}){const r=new Map;function*n(e){const n="video.room.joined"===e.type?e.payload.room_session.id:e.payload.room_session_id,o=ga({action:e,memberList:r});t.emit(ha,{room_session_id:n,members:o})}for(;;){const t=yield Ue(e,(({type:e})=>pa(e)));yield He(n,t)}}const va=function*({channels:{swEventChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ua))))(r))return;const{cleanup:n}=((e,t)=>{const r=(e=>Er(ma).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,la)}));const n=({members:t})=>{e.emit(ua,{members:t})};return e.on(ha,n),{cleanup:()=>{e.off(ha,n)}}})(t,r);yield He(fa,{swEventChannel:e,instance:t}),t.once("destroy",(()=>{n()}))},ya=function*(e){lr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:n,onDone:o,onFail:i}=e,{swEventChannel:s}=t,{parentId:a}=n;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield Ue(s,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield qe(ro.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(yield $e(Sn.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),o?.()):i?.({error:new Error("Unknown parent_id")})}lr().trace("childMemberJoinedWorker ended")},ba=function*(e){lr().trace("videoStreamWorker started");const{instance:t,action:{type:r,payload:n},instanceMap:{get:o,set:i,remove:s}}=e;let a=o(n.stream.id);switch(a?a.setPayload(n):a=so.createRoomSessionStreamObject({store:t.store,payload:n}),i(n.stream.id,a),r){case"video.stream.started":t.emit("stream.started",a);break;case"video.stream.ended":t.emit("stream.ended",a),s(n.stream.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoStreamWorker ended")},_a=function*(e){lr().trace("videoRecordWorker started");const{instance:t,action:{type:r,payload:n},instanceMap:{get:o,set:i,remove:s}}=e;let a=o(n.recording.id);a?a.setPayload(n):a=so.createRoomSessionRecordingObject({store:t.store,payload:n}),i(n.recording.id,a);const c=wr(r);switch(r){case"video.recording.started":case"video.recording.updated":t.emit(c,a);break;case"video.recording.ended":t.emit(c,a),s(n.recording.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoRecordWorker ended")},wa=function*(e){lr().trace("videoPlaybackWorker started");const{instance:t,action:{type:r,payload:n},instanceMap:{get:o,set:i,remove:s}}=e;let a=o(n.playback.id);a?a.setPayload(n):a=so.createRoomSessionPlaybackObject({store:t.store,payload:n}),i(n.playback.id,a);const c=wr(r);switch(r){case"video.playback.started":case"video.playback.updated":t.emit(c,a);break;case"video.playback.ended":t.emit(c,a),s(n.playback.id);break;default:lr().warn(`Unknown video.stream event: "${r}"`)}lr().trace("videoPlaybackWorker ended")},Sa=function*(e){lr().trace("videoWorker started");const{channels:t,instance:r}=e,{swEventChannel:n}=t;function*o(t){const{type:n,payload:o}=t;switch(n){case"video.room.subscribed":yield Fe(Oi.memberPositionWorker,{...e,instance:r,initialState:o});break;case"video.playback.started":case"video.playback.updated":case"video.playback.ended":return void(yield He(wa,{action:t,...e}));case"video.recording.started":case"video.recording.updated":case"video.recording.ended":return void(yield He(_a,{action:t,...e}));case"video.stream.ended":case"video.stream.started":return void(yield He(ba,{action:t,...e}));case"video.room.audience_count":return void r.emit("room.audienceCount",o);case"video.member.talking":{const{member:e}=o;"talking"in e&&(r.emit("member.talking."+(e.talking?"started":"ended"),o),r.emit("member.talking."+(e.talking?"start":"stop"),o));break}}const i=wr(n,"video");r.emit(i,o)}const i=e=>e.type.startsWith("video.")||e.type.startsWith("call.");for(;;){const e=yield Ue(n,i);yield He(o,e)}lr().trace("videoWorker ended")},ka=function*(e){lr().trace("videoMemberWorker started");const{instance:t,callSegments:r,action:{type:n,payload:o},instanceMap:{get:i,set:s,remove:a}}=e,c=o.member?.id||o.member?.member_id;let d=i(c);d?d.setPayload(o):d=so.createRoomSessionMemberObject({store:t.store,payload:o}),s(c,d);let l={...o};o.member.member_id===r[r.length-1].memberId&&(l={...o,member:{...o.member,id:t.callSegments[0].memberId,member_id:t.callSegments[0].memberId}});const u=wr(n);switch(n.startsWith("video.member.updated.")&&t.emit(u,l),n){case"video.member.joined":case"video.member.updated":t.emit(u,l);break;case"video.member.left":t.emit(u,l),a(c);break;case"video.member.talking":t.emit(u,l),"talking"in o.member&&(t.emit(`${u}.${o.member.talking?"started":"ended"}`,l),t.emit(`${u}.${o.member.talking?"start":"stop"}`,l))}lr().trace("videoMemberWorker ended")};class Ca extends Gs{_screenShareList=new Set;_deviceList=new Set;_mirrored;_audioEl;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay,this.initWorker()}initWorker(){this.runWorker("videoWorker",{worker:Sa})}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??[]}))}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:va})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:n=!0,audio:o=!1,video:i=!0,layout:s,positions:a}=e,c=await ps({audio:!0===o?aa:o,video:i}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:s,positions:a},l=Fn({store:this.store,Component:ca})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{l&&l.active&&l.leave()}))})),l.once("destroy",(()=>{l.emit("room.left"),this._screenShareList.delete(l)}));try{return l.runWorker("childMemberJoinedWorker",{worker:ya,onDone:()=>t(l),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(l),n?await l.join():t(l)}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:i=!1}=e;if(!o&&!i)throw new TypeError("At least one of `audio` or `video` must be requested.");const s={...this.options,localStream:void 0,remoteStream:void 0,audio:o,video:i,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=Fn({store:this.store,Component:da})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:ya,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}){const t=this._audioEl.sinkId;return this.once(`${er}.speaker.updated`,(async e=>{const r=await Ms(t),n=await Ms(e),o=n?.deviceId===r?.deviceId;n?.deviceId&&!o&&this.emit("speaker.updated",{previous:{deviceId:r?.deviceId,label:r?.label},current:{deviceId:n.deviceId,label:n.label}})})),this.triggerCustomSaga(ta(e))}_attachSpeakerTrackListener(){ts()&&Es().then((e=>{e.on("removed",(async e=>{const t=this._audioEl.sinkId,r=e.changes.find((e=>{const r=e.payload.deviceId;return r===t||""===r&&"default"===t||"default"===r&&""===t}));if(r){this.emit("speaker.disconnected",{deviceId:r.payload.deviceId,label:r.payload.label}),await(this._audioEl.setSinkId?.(""));const e=await Ms("default");if(!e?.deviceId)return;this.emit("speaker.updated",{previous:{deviceId:r.payload.deviceId,label:r.payload.label},current:{deviceId:e.deviceId,label:e.label}})}}))}))}getAudioEl(){return this._audioEl||(this._audioEl=new Audio,this._attachSpeakerTrackListener()),this._audioEl}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit(`${er}.mirror.video`,this._mirrored)}}}getSubscriptions(){const e=this.eventNames().map((e=>`video.${e}`));return Er(e)}}const Ia=_r(Ca,{audioMute:so.audioMuteMember,audioUnmute:so.audioUnmuteMember,videoMute:so.videoMuteMember,videoUnmute:so.videoUnmuteMember,deaf:so.deafMember,undeaf:so.undeafMember,setInputVolume:so.setInputVolumeMember,setOutputVolume:so.setOutputVolumeMember,setMicrophoneVolume:so.setInputVolumeMember,setSpeakerVolume:so.setOutputVolumeMember,setInputSensitivity:so.setInputSensitivityMember,removeMember:so.removeMember,removeAllMembers:so.removeAllMembers,getMembers:so.getMembers,getLayouts:so.getLayouts,setLayout:so.setLayout,setPositions:so.setPositions,setMemberPosition:so.setMemberPosition,hideVideoMuted:so.hideVideoMuted,showVideoMuted:so.showVideoMuted,getRecordings:so.getRecordings,startRecording:so.startRecording,getPlaybacks:so.getPlaybacks,play:so.play,setHideVideoMuted:so.setHideVideoMuted,getMeta:so.getMeta,setMeta:so.setMeta,updateMeta:so.updateMeta,deleteMeta:so.deleteMeta,getMemberMeta:so.getMemberMeta,setMemberMeta:so.setMemberMeta,updateMemberMeta:so.updateMemberMeta,deleteMemberMeta:so.deleteMemberMeta,promote:so.promote,demote:so.demote,getStreams:so.getStreams,startStream:so.startStream,lock:so.lock,unlock:so.unlock,setRaisedHand:so.setRaisedHand,setPrioritizeHandraise:so.setPrioritizeHandraise}),Ea=e=>Fn({store:e.store,customSagas:e.customSagas,Component:Ia})(e),Pa=function*(e){lr().trace("videoManagerRoomsWorker started");const{instance:t,action:{type:r,payload:n}}=e,o={rooms:n.rooms.map((e=>vr(e)))};t.emit(wr(r),o),lr().trace("videoManagerRoomsWorker ended")},Ma=function*(e){lr().trace("videoManagerRoomWorker started");const{instance:t,action:{type:r,payload:n}}=e;t.emit(wr(r),vr(n)),lr().trace("videoManagerRoomWorker ended")},Ta=function*(e){lr().trace("videoManagerWorker started");const{channels:{swEventChannel:t}}=e;function*r(t){const{type:r}=t;switch(r){case"video-manager.rooms.subscribed":yield He(Pa,{action:t,...e});break;case"video-manager.room.added":case"video-manager.room.deleted":case"video-manager.room.ended":case"video-manager.room.started":case"video-manager.room.updated":yield He(Ma,{action:t,...e});break;default:lr().warn(`Unknown video-manager event: "${r}"`)}}for(;;){const e=yield Ue(t,(e=>e.type.startsWith("video-manager.")));yield He(r,e)}lr().trace("videoManagerWorker ended")};class Ra extends Zn{constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ta})}getSubscriptions(){const e=this.eventNames().map((e=>`video-manager.${e}`));return Er(e)}}const xa=function*(e){lr().trace("wsClientWorker started");const{channels:t,initialState:r}=e,{swEventChannel:n}=t,{buildInboundCall:o}=r;for(;;){const e=yield Ue(n,(e=>"webrtc.message"===e.type&&"verto.invite"===e.payload.method));lr().debug("Receiving a new call over WebSocket",e),o(e.payload.params)}lr().trace("wsClientWorker ended")},Aa=function*(e){lr().debug("conversationWorker started");const{channels:{swEventChannel:t},initialState:r}=e,{conversation:n}=r,o=e=>"conversation.message"===e.type;for(;;){const e=yield Ue(t,o);n.handleEvent(e.payload)}lr().trace("conversationWorker ended")};function Oa(e){this.message=e}(Oa.prototype=new Error).name="InvalidCharacterError";var ja="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Oa("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,o=0,i=0,s="";n=t.charAt(i++);~n&&(r=o%4?64*r+n:n,o++%4)?s+=String.fromCharCode(255&r>>(-2*o&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return s};function La(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(ja(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 ja(t)}}function Da(e){this.message=e}function Wa(e,t){if("string"!=typeof e)throw new Da("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(La(e.split(".")[r]))}catch(e){throw new Da("Invalid token specified: "+e.message)}}(Da.prototype=new Error).name="InvalidTokenError";const Na=()=>{if(window&&window.sessionStorage)return window.sessionStorage},Va=e=>{let t="";try{const r=Wa(e);t=r?.r??""}catch(e){t=""}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},Ua="function"==typeof CloseEvent?CloseEvent:class{constructor(e,t={}){this.type=e,Zt(this,"code"),Zt(this,"reason"),Zt(this,"wasClean"),this.code=void 0===t.code?0:t.code,this.reason=void 0===t.reason?"":t.reason,this.wasClean=void 0!==t.wasClean&&t.wasClean}};class $a extends bn{options;WebSocketConstructor=WebSocket;CloseEventConstructor=Ua;agent="@signalwire/js/browser/3.27.0-dev.202404301530.94a97d7.0";tokenTyp;constructor(e){let t={};try{t=Wa(e.token,{header:!0})}catch(e){}super({...e,host:t?.ch||e.host}),this.options=e,this.tokenTyp=t.typ??"VRT"}get allowReattach(){return!1!==this.options?.reattach&&this.isVRT()}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const{protocolKey:e}=Va(this.options.token);return e?(this.logger.trace("Search protocol for",e),Na()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=Va(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),Na()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=Va(this.options.token);return e?Na()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=Va(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),Na()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=Va(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),Na()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),Na()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),Na()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}}class Ba extends Xn{_payload;constructor(e){super(e),this._payload=e.payload}get roomId(){return this._payload.room_id}get roomSessionId(){return this._payload.room_session_id}get callId(){return this._payload.call_id}get memberId(){return this._payload.member_id}get roomSession(){return this._payload.room_session}get members(){return this._payload.members}get member(){return this.members?.find((e=>e.memberId===this.memberId))}setPayload(e){this._payload=e}}const za=function*(e){lr().trace("callJoinWorker started");const{action:t,callSegments:r,instanceMap:n,instance:o}=e,{payload:i}=t,{get:s,set:a}=n,c=i.room_session.members?.map((e=>{let t=s(e.member_id);return t?t.setPayload({room_id:i.room_id,room_session_id:i.room_session_id,member:e}):t=so.createRoomSessionMemberObject({store:o.store,payload:{room_id:i.room_id,room_session_id:i.room_session_id,member:e}}),a(e.member_id,t),t})),d=(l={store:o.store,payload:{...i,members:c}},Fn({store:l.store,Component:Ba})(l));var l;r.push(d),o.runWorker("memberPositionWorker",{worker:Oi.memberPositionWorker,...e,instance:o,initialState:i,dispatcher:function*(t,r){yield He(ka,{...e,action:{type:t,payload:r}})}});for(const t of i.room_session.members||[])yield He(ka,{...e,action:{type:"video.member.joined",payload:{member:t}}});o.emit("room.subscribed",i),o.emit("call.joined",i),lr().trace("callJoinWorker ended")},Ha=function*(e){lr().trace("callLeftWorker started");const{action:{payload:t},instance:r,callSegments:n,instanceMap:o}=e,{call_id:i,room_session_id:s}=t,a=n.findIndex((e=>e.callId==i));a>=0&&n.splice(a,1),o.getAll().forEach((([e,t])=>{t instanceof so.RoomSessionMemberAPI&&t.roomSessionId===s&&o.remove(e)})),r.emit("call.left",t),lr().trace("callLeftWorker ended")},Fa=function*(e){lr().trace("callStateWorker started");const{instance:t,action:{payload:r},callSegments:n}=e;"ended"===r.call_state?(t.emit("call.state",r),n.length<1&&"destroy"===t.state&&(console.log(">> destroy"),t.destroy())):t.emit("call.state",r),lr().trace("callStateWorker ended")},qa=function*(e){lr().trace("callFabricWorker started");const{channels:t,instance:r}=e,{swEventChannel:n}=t;function*o(t){const{type:o,payload:i}=t;switch(o){case"call.joined":return void(yield He(za,{action:t,...e}));case"call.left":return void(yield He(Ha,{action:t,...e}));case"call.state":return void(yield He(Fa,{action:t,...e}));case"call.started":case"call.updated":case"call.ended":{const e=o.split(".")[1];r.emit(`room.${e}`,i);break}case"member.joined":case"member.left":case"member.updated":case"member.talking":{const r={...t,type:`video.${o}`};return void(yield He(ka,{action:r,...e}))}case"layout.changed":{const e={...t,type:`video.${o}`};yield $e(n,e);break}case"member.demoted":case"member.promoted":{const e={...t,type:`video.${o}`};return void(yield $e(n,e))}}r.emit(o,i)}const i=e=>e.type.startsWith("call.")||e.type.startsWith("member.")||e.type.startsWith("layout.");for(;;){const e=yield Ue(n,i);yield He(o,e)}lr().trace("callFabricWorker ended")};class Ka extends Ca{initWorker(){this.runWorker("callFabricWorker",{worker:qa})}get selfMember(){return this.callSegments[0]?.member}get targetMember(){return this.callSegments[this.callSegments.length-1]?.member}isSelfMember(e){return this.callSegments.findIndex((t=>t.memberId===e))>-1}executeAction(e,t={}){const{method:r,extraParams:n={}}=e;return this.execute({method:r,params:{self:{member_id:this.selfMember.id,call_id:this.selfMember.callId,node_id:this.selfMember.nodeId},...n}},t)}executeMemberAction(e,t={}){const{method:r,channel:n,memberId:o,extraParams:i={}}=e;let s=this.targetMember;if(o&&!this.isSelfMember(o)){const e=this.callSegments[this.callSegments.length-1].members.find((e=>e.id===o));if(!e)throw new Error("The memberId is not a part of the current call segment!");s=e}return this.execute({method:r,params:{...n&&{channels:[n]},self:{member_id:this.selfMember.id,call_id:this.selfMember.callId,node_id:this.selfMember.nodeId},target:{member_id:s.id,call_id:s.callId,node_id:s.nodeId},...i}},t)}audioMute(e){return this.executeMemberAction({method:"call.mute",channel:"audio",memberId:e?.memberId})}audioUnmute(e){return this.executeMemberAction({method:"call.unmute",channel:"audio",memberId:e?.memberId})}videoMute(e){return this.executeMemberAction({method:"call.mute",channel:"video",memberId:e?.memberId})}videoUnmute(e){return this.executeMemberAction({method:"call.unmute",channel:"video",memberId:e?.memberId})}deaf(e){return this.executeMemberAction({method:"call.deaf",memberId:e?.memberId})}undeaf(e){return this.executeMemberAction({method:"call.undeaf",memberId:e?.memberId})}getLayouts(){return this.executeAction({method:"call.layout.list"},{transformResolve:e=>({layouts:e.layouts})})}getMembers(){return this.executeAction({method:"call.member.list"},{transformResolve:e=>({members:e.members})})}removeMember(e){if(!e?.memberId)throw new TypeError('Invalid or missing "memberId" argument');return this.executeMemberAction({method:"call.member.remove",memberId:e.memberId})}setLayout(e){const t={name:e?.name,layout:Object.values(e?.positions||{})[0]};return this.executeAction({method:"call.layout.set",extraParams:t})}setInputVolume(e){return this.executeMemberAction({method:"call.microphone.volume.set",memberId:e?.memberId,extraParams:{volume:e?.volume}})}setOutputVolume(e){return this.executeMemberAction({method:"video.member.set_output_volume",memberId:e?.memberId,extraParams:{volume:e?.volume}})}setInputSensitivity(e){return this.executeMemberAction({method:"call.microphone.sensitivity.set",memberId:e?.memberId,extraParams:{value:e?.value}})}}const Ja=e=>Fn({store:e.store,customSagas:e.customSagas,Component:Ka})(e);class Ga extends Yn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:n=!0,stopMicrophoneWhileMuted:o=!0,unifiedEventing:i=!1,...s}=e,a=[];a.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const n=t.getAudioEl();let o;t.on("track",(function(i){"audio"===i.track.kind&&(o=r(ia,{track:i.track,element:n,speakerId:e,room:t}))})),t.once("destroy",(()=>{o?.cancel()}))}catch(e){lr().error("audioElementSaga",e)}else lr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&a.push(na({rootElement:t,applyLocalVideoOverlay:r}));let c=Ea;i&&(c=Ja);const d=c({...s,store:this.store,customSagas:a});return o&&d.on("member.updated.audio_muted",(({member:e})=>{try{e.id===d.memberId&&"audio_muted"in e&&(e.audio_muted?d.stopOutboundAudio():d.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),n&&d.on("member.updated.video_muted",(({member:e})=>{try{e.id===d.memberId&&"video_muted"in e&&(e.video_muted?d.stopOutboundVideo():d.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),d}}}get chat(){return this._chat||(this._chat=si.createBaseChatObject({store:this.store})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=yi.createBasePubSubObject({store:this.store})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Fn({store:e.store,Component:Ra})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Fr.reauthAction({token:e}))}}const Qa=e=>{const t={...e,emitter:qn()},r=Kn({userOptions:t,SessionConstructor:$a});return Fn({store:r,Component:Ga})(t)},Xa=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ya=Object.freeze({__proto__:null,Client:function(e){const t=Qa(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,n,o)=>n in r?r[n]:Xa.includes(n)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(n):Reflect.get(e,n,o)})},ChatMember:Ti,ChatMessage:Mi});const Za=["getAllowedChannels","subscribe","publish"];var ec=Object.freeze({__proto__:null,PubSubMessage:yi.PubSubMessage,Client:function(e){const t=Qa(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,n,o)=>n in r?r[n]:Za.includes(n)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(n):Reflect.get(e,n,o)})}});async function tc(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new On(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new jn(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const rc=({baseUrl:e,timeout:t=3e4,...r},n=tc)=>async(o,i)=>{const s={...i?.body?{"Content-Type":"application/json"}:{},...r.headers,...i?.headers},a=nc({...r,...i,headers:s});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await n(oc({path:o,baseUrl:e,searchParams:i?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},nc=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}),{}),oc=({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()},ic={aspectRatio:{ideal:16/9}},sc=e=>new Promise((async(t,r)=>{const{audio:n=!0,video:o=!0,iceServers:i,rootElementId:s,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:l=!0,speakerId:u,...h}=e,m=Qa({...h});if(await m.connect(),!m)return;let p;if(s){const e=document.getElementById(s);e?p=e:(p=document.body,lr().warn(`We couldn't find an element with id: ${s}: using 'document.body' instead.`))}const g=m.rooms.makeRoomObject({audio:n,video:!0===o?ic:o,negotiateAudio:!0,negotiateVideo:!0,iceServers:i,rootElement:p,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:l,speakerId:u});g.once("destroy",(()=>{g.emit("room.left"),m.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){lr().error("Join",e),m.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),ac=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote","lock","unlock"],cc=["member.joined","layout.changed"],dc=()=>{},lc=function(e){const{audio:t=!0,video:r=!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:i=!0,mirrorLocalVideoOverlay:s=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,disableUdpIceServers:p=!1,...g}=e;["audio","video"].forEach((t=>{t in e&&lr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const f=!1!==e?.reattach,{callIdKey:v}=Va(g.token),y={joined:({call_id:e})=>{f&&v&&Na()?.setItem(v,e)},init:()=>{f&&_.on("room.subscribed",y.joined),_.options.prevCallId=y.getPrevCallId()},destroy:()=>{f&&(_.off("room.subscribed",y.joined),v&&Na()?.removeItem(v))},getPrevCallId:()=>{if(f&&v)return Na()?.getItem(v)??void 0}},b=Qa(g),_=b.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:n,rootElement:o,applyLocalVideoOverlay:i,mirrorLocalVideoOverlay:s,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:l,localStream:u,watchMediaPackets:h,watchMediaPacketsTimeout:m,prevCallId:y.getPrevCallId(),disableUdpIceServers:p});_.once("destroy",(()=>{_.emit("room.left",{reason:_.leaveReason}),y.destroy(),b.disconnect()})),b.session.once("session.disconnected",(()=>{_.destroy()}));const w={join:e=>new Promise((async(n,o)=>{try{_.attachPreConnectWorkers(),await b.connect();const i=e?.audio??t,s=e?.video??r,a=b._sessionAuthState;if(lr().debug("getJoinMediaParams authState?",a),a&&"video"===a.type){const t=(e=>{const{authState:t,audio:r=!0,video:n=!0,sendAudio:o,sendVideo:i,receiveAudio:s,receiveVideo:a}=e;lr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:l}=t,u="member"===(l??"member"),h=u&&"both"===c,m=u&&"both"===d,p="none"!==c,g="none"!==d,f=Boolean(o??r),v=Boolean(i??n),y=Boolean(s??r),b=Boolean(a??n);return!h&&f&&lr().info("Not allowed to send audio on this room. Default values will be used."),!m&&v&&lr().info("Not allowed to send video on this room. Default values will be used."),!p&&y&&lr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&lr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:m&&v,mustRecvAudio:p&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(i),sendVideo:Boolean(s),...e});if(!Object.values(t).some(Boolean))return b.disconnect(),o(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));lr().debug("Set mediaOptions",t),_.updateMediaOptions({audio:!!t.mustSendAudio&&(i||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}_.once("room.subscribed",(()=>{n(_)})),y.init(),cc.forEach((e=>_.once(e,dc))),await _.join()}catch(e){lr().error("RoomSession Join",e),b.disconnect(),o(e)}}))};return new Proxy(_,{get(e,t,r){if(t in w)return w[t];if(!e.active&&ac.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 uc=Object.freeze({__proto__:null,RoomSession:lc,createRoomObject:sc,joinRoom:e=>sc({...e,autoJoin:!0}),createClient:Qa});class hc{options;httpClient;constructor(e){this.options=e,this.httpClient=rc({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get httpHost(){return this.options.httpHost??"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 registerDevice({deviceType:e,deviceToken:t}){const{body:r}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:e,device_token:t}});return r}async unregisterDevice({id:e}){const t=`/subscriber/devices/${e}`;return await this.httpClient(t,{method:"DELETE"})}}class mc{_buildCallObject;_executeReject;_pendingInvites={};_handlers={};constructor(e,t){this._buildCallObject=e,this._executeReject=t}_buildNotification(e){const t=async t=>new Promise(((r,n)=>{delete this._pendingInvites[e.callID];try{const n=this._buildCallObject(e,t);n.answer(),r(n)}catch(e){n(e)}})),r=()=>(delete this._pendingInvites[e.callID],this._executeReject(e.callID,e.nodeId));return{invite:{details:e,accept:e=>t(e),reject:()=>r()}}}setNotificationHandlers(e){this._handlers.all=e.all,(e.pushNotification&&this._handlers.all!=e.pushNotification||!e.pushNotification)&&(this._handlers.pushNotification=e.pushNotification),(e.websocket&&this._handlers.all!=e.websocket||!e.websocket)&&(this._handlers.websocket=e.websocket)}handleIncomingInvite(e){if(e.callID in this._pendingInvites)return void console.log(`skiping nottification for pending invite to callID: ${e.callID}`);if(this._pendingInvites[e.callID]=e,!this._handlers.all&&!this._handlers[e.source])return void console.log("skiping nottification no listeners:");const t=this._buildNotification(e);this._handlers.all?.(t);const r=this._handlers[e.source];r?.(t)}}class pc{options;wsClient;logger=lr();_incomingCallManager;constructor(e){this.options=e,this.wsClient=Qa({...this.options,unifiedEventing:!0}),this._incomingCallManager=new mc(((e,t)=>this.buildInboundCall(e,t)),((e,t)=>this.executeVertoBye(e,t)))}get clientApi(){return this.wsClient}async connect(){this.wsClient.connected||(this.wsClient.runWorker("wsClientWorker",{worker:xa,initialState:{buildInboundCall:e=>this.notifyIncomingInvite("websocket",e)}}),await this.wsClient.connect())}disconnect(){return this.wsClient.disconnect()}async dial(e){return new Promise((async(t,r)=>{try{await this.connect();const r=this.wsClient.rooms.makeRoomObject({audio:e.audio??!0,video:e.video??!0,negotiateAudio:!0,negotiateVideo:!0,rootElement:e.rootElement,applyLocalVideoOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,destinationNumber:e.to,watchMediaPackets:!1,nodeId:e.nodeId,disableUdpIceServers:e.disableUdpIceServers||!1,unifiedEventing:!0});r.once("destroy",(()=>{this.logger.debug("RTC Connection Destroyed")})),this.wsClient.once("session.disconnected",(()=>{this.logger.debug("Session Disconnected")})),r.attachPreConnectWorkers(),r.start=()=>new Promise((async(e,t)=>{try{r.once("room.subscribed",(()=>e(r))),await r.join()}catch(e){lr().error("WSClient call start",e),t(e)}})),t(r)}catch(e){lr().error("WSClient dial",e),r(e)}}))}handlePushNotification(e){return new Promise((async(t,r)=>{const{decrypted:n,type:o}=e;if("call_invite"!==o)return void this.logger.warn("Unknown notification type",e);this.logger.debug("handlePushNotification",e);const{params:i,node_id:s}=n,{params:{callID:a,sdp:c,caller_id_name:d,caller_id_number:l,callee_id_name:u,callee_id_number:h,display_direction:m}}=i;try{await this.connect();try{await this.executeVertoSubscribe(a,s)}catch(e){this.logger.warn("Verto Subscribe",e)}this.notifyIncomingInvite("pushNotification",{callID:a,sdp:c,caller_id_name:d,caller_id_number:l,callee_id_name:u,callee_id_number:h,display_direction:m,nodeId:s}),t({resultType:"inboundCall"})}catch(e){r(e)}}))}notifyIncomingInvite(e,t){this._incomingCallManager.handleIncomingInvite({source:e,...t})}async executeVertoBye(e,t){try{return await this.wsClient.execute({method:"webrtc.verto",params:{callID:e,node_id:t,message:Nr({cause:"USER_BUSY",causeCode:"17",dialogParams:{callID:e}})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}async executeVertoSubscribe(e,t){try{return await this.wsClient.execute({method:"webrtc.verto",params:{callID:e,node_id:t,subscribe:[],message:Br({sessid:e,eventChannel:[]})}})}catch(t){throw this.logger.warn("The call is not available anymore",e),t}}buildInboundCall(e,t){lr().debug("Build new call to answer");const{callID:r,nodeId:n,sdp:o}=e,i=this.wsClient.rooms.makeRoomObject({audio:t.audio??!0,video:t.video??!0,negotiateAudio:!0,negotiateVideo:!0,rootElement:t.rootElement,applyLocalVideoOverlay:!0,stopCameraWhileMuted:!0,stopMicrophoneWhileMuted:!0,watchMediaPackets:!1,remoteSdp:o,prevCallId:r,nodeId:n,disableUdpIceServers:t.disableUdpIceServers||!1,unifiedEventing:!0});return i.once("destroy",(()=>{lr().debug("RTC Connection Destroyed")})),i.attachPreConnectWorkers(),lr().debug("Resolving Call",i),i}updateToken(e){return new Promise(((t,r)=>{this.wsClient.once("session.auth_error",(e=>{r(e)})),this.wsClient.once("session.connected",(()=>{t()})),this.wsClient.reauthenticate(e)}))}async online({incomingCallHandlers:e}){return this._incomingCallManager.setNotificationHandlers(e),await this.connect(),this.wsClient.execute({method:"subscriber.online",params:{}})}offline(){return this._incomingCallManager.setNotificationHandlers({}),this.wsClient.execute({method:"subscriber.offline",params:{}})}}function gc(e,t){const r=async e=>{const{body:r}=await t(e);return gc(r,t)};return{data:e.data,self:async()=>{const{self:t}=e.links;return t?r(t):void 0},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},firstPage:async()=>{const{first:t}=e.links;return t?r(t):void 0},hasNext:Boolean(e.links.next),hasPrev:Boolean(e.links.prev)}}function fc(e,t){const r=t.toString();return r?`${e}?${r}`:e}class vc{options;httpClient;constructor(e){this.options=e,this.httpClient=rc({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get fetch(){return this.httpClient}get httpHost(){let e={};try{e=Wa(this.options.token,{header:!0})}catch(e){}const t=this.options.host||e?.ch;return t?`fabric.${t.split(".").splice(1).join(".")}`:"fabric.signalwire.com"}async getAddress(e){const{id:t}=e;let r=`/api/fabric/addresses/${t}`;const{body:n}=await this.httpClient(r);return n}async getAddresses(e){const{type:t,displayName:r,pageSize:n}=e||{},o=new URLSearchParams;t&&o.append("type",t),r&&o.append("display_name",r),n&&o.append("page_size",n.toString());const{body:i}=await this.httpClient(fc("/api/fabric/addresses",o));return gc(i,this.httpClient)}async registerDevice({deviceType:e,deviceToken:t}){const{body:r}=await this.httpClient("/subscriber/devices",{method:"POST",body:{device_type:e,device_token:t}});return r}async unregisterDevice({id:e}){const t=`/subscriber/devices/${e}`;return await this.httpClient(t,{method:"DELETE"})}async getSubscriberInfo(){const{body:e}=await this.httpClient("/api/fabric/subscriber/info");return e}}class yc{conversation;data;get id(){return this.data.id}get created_at(){return this.data.created_at}get last_message_at(){return this.data.last_message_at}get metadata(){return this.data.metadata}get name(){return this.data.name}constructor(e,t){this.conversation=e,this.data=t}sendMessage(e){return this.conversation.sendMessage({addressId:this.id,text:e.text})}getMessages(e){return this.conversation.getConversationMessages({addressId:this.id,...e})}}class bc{httpClient;wsClient;callbacks=[];constructor(e){this.httpClient=e.httpClient,this.wsClient=e.wsClient,this.wsClient.clientApi.runWorker("conversationWorker",{worker:Aa,initialState:{conversation:this}})}async sendMessage(e){try{const{addressId:t,text:r}=e,n="/api/fabric/messages",{body:o}=await this.httpClient.fetch(n,{method:"POST",body:{conversation_id:t,text:r}});return o}catch(e){throw new Error("Error sending message to conversation!",e)}}async getConversations(e){try{const{pageSize:t}=e||{},r="/api/fabric/conversations",n=new URLSearchParams;t&&n.append("page_size",t.toString());const{body:o}=await this.httpClient.fetch(fc(r,n)),i=this,s=o.data.map((e=>new yc(i,e)));return gc({...o,data:s},this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation history!",e)}}async getMessages(e){try{const{pageSize:t}=e||{},r="/api/fabric/messages",n=new URLSearchParams;t&&n.append("page_size",t.toString());const{body:o}=await this.httpClient.fetch(fc(r,n));return gc(o,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async getConversationMessages(e){try{const{addressId:t,pageSize:r}=e||{},n=`/api/fabric/conversations/${t}/messages`,o=new URLSearchParams;r&&o.append("page_size",r.toString());const{body:i}=await this.httpClient.fetch(fc(n,o));return gc(i,this.httpClient.fetch)}catch(e){throw new Error("Error fetching the conversation messages!",e)}}async subscribe(e){this.wsClient.connect(),this.callbacks.push(e)}handleEvent(e){this.callbacks.length&&this.callbacks.forEach((t=>{t(e)}))}}const _c=e=>new Promise((async(t,r)=>{try{const r=new vc(e),n=new pc(e),o=new bc({httpClient:r,wsClient:n});t({httpHost:r.httpHost,registerDevice:r.registerDevice.bind(r),unregisterDevice:r.unregisterDevice.bind(r),getSubscriberInfo:r.getSubscriberInfo.bind(r),connect:n.connect.bind(n),disconnect:n.disconnect.bind(n),online:n.online.bind(n),offline:n.offline.bind(n),dial:n.dial.bind(n),handlePushNotification:n.handlePushNotification.bind(n),updateToken:n.updateToken.bind(n),address:{getAddresses:r.getAddresses.bind(r),getAddress:r.getAddress.bind(r)},conversation:{getConversations:o.getConversations.bind(o),getMessages:o.getMessages.bind(o),getConversationMessages:o.getConversationMessages.bind(o),subscribe:o.subscribe.bind(o),sendMessage:o.sendMessage.bind(o)},__httpClient:r,__wsClient:n})}catch(e){r(e)}}));var wc=Object.freeze({__proto__:null,Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=rc({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 lc({token:t.token,debug:{logWsTraffic:!0},logLevel:"debug",watchMediaPackets:!1,...r}),o=e=>new Promise(((t,r)=>(n.once("room.joined",(e=>t(e))),n.emitter.once("verto.display",(e=>t(e))),n.join(e).catch((e=>r(e))))));const i={start:o};return new Proxy(n,{get:(e,t,r)=>t in i?i[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}},SWClient:hc,WSClient:pc,HTTPClient:vc,SignalWire:_c,IncomingCallManager:mc,ConversationAPI:yc}),Sc=Object.freeze({__proto__:null,getDevices:vs,getCameraDevices:()=>vs("camera"),getMicrophoneDevices:()=>vs("microphone"),getSpeakerDevices:ys,getDevicesWithPermissions:gs,getCameraDevicesWithPermissions:()=>gs("camera"),getMicrophoneDevicesWithPermissions:()=>gs("microphone"),getSpeakerDevicesWithPermissions:()=>gs("speaker"),checkPermissions:ds,checkCameraPermissions:ls,checkMicrophonePermissions:us,checkSpeakerPermissions:hs,requestPermissions:async e=>{try{const t=await ms(e);ns(t)}catch(e){throw e}},createDeviceWatcher:Is,createCameraDeviceWatcher:()=>Is({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Is({targets:["microphone"]}),createSpeakerDeviceWatcher:Es,supportsMediaDevices:Xi,supportsGetUserMedia:()=>"function"==typeof Yi().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof Yi().getDisplayMedia,getUserMedia:ms,getDisplayMedia:ps,enumerateDevices:as,getSupportedConstraints:Zi,supportsMediaOutput:ts,setMediaElementSinkId:rs,stopStream:ns,stopTrack:os,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Ps(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},ms(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Wt,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 i,s;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;s!==t&&(s=t,r.emit("volumeChanged",Math.min(s,100))),i=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};i=requestAnimationFrame(a);const c=()=>{i&&cancelAnimationFrame(i),"closed"!==n.state&&n.close().catch((e=>{lr().error("Error closing the AudioContext",e)})),Ps(e)||t.getTracks().forEach((e=>e.stop())),r.emit("destroyed",null),r.removeAllListeners()};return new Proxy(r,{get:(e,t,r)=>"destroy"===t?c:Reflect.get(e,t,r)})}});e.Chat=Ya,e.Fabric=wc,e.PubSub=ec,e.SWClient=hc,e.SignalWire=_c,e.Video=uc,e.WebRTC=Sc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
21
21
|
//# sourceMappingURL=index.umd.js.map
|