@signalwire/js 3.23.3 → 3.23.4

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.
Files changed (175) hide show
  1. package/dist/core/src/BaseClient.d.ts.map +1 -1
  2. package/dist/core/src/BaseComponent.d.ts +8 -114
  3. package/dist/core/src/BaseComponent.d.ts.map +1 -1
  4. package/dist/core/src/BaseConsumer.d.ts +2 -2
  5. package/dist/core/src/BaseConsumer.d.ts.map +1 -1
  6. package/dist/core/src/BaseSession.d.ts.map +1 -1
  7. package/dist/core/src/RPCMessages/RPCConnect.d.ts +1 -0
  8. package/dist/core/src/RPCMessages/RPCConnect.d.ts.map +1 -1
  9. package/dist/core/src/chat/BaseChat.d.ts +5 -6
  10. package/dist/core/src/chat/BaseChat.d.ts.map +1 -1
  11. package/dist/core/src/chat/workers/chatWorker.d.ts.map +1 -1
  12. package/dist/core/src/index.d.ts +4 -5
  13. package/dist/core/src/index.d.ts.map +1 -1
  14. package/dist/core/src/memberPosition/workers.d.ts +1 -1
  15. package/dist/core/src/memberPosition/workers.d.ts.map +1 -1
  16. package/dist/core/src/pubSub/BasePubSub.d.ts +8 -9
  17. package/dist/core/src/pubSub/BasePubSub.d.ts.map +1 -1
  18. package/dist/core/src/pubSub/workers/pubSubWorker.d.ts.map +1 -1
  19. package/dist/core/src/redux/actions.d.ts +0 -9
  20. package/dist/core/src/redux/actions.d.ts.map +1 -1
  21. package/dist/core/src/redux/features/session/sessionSaga.d.ts +2 -3
  22. package/dist/core/src/redux/features/session/sessionSaga.d.ts.map +1 -1
  23. package/dist/core/src/redux/index.d.ts +1 -0
  24. package/dist/core/src/redux/index.d.ts.map +1 -1
  25. package/dist/core/src/redux/interfaces.d.ts +0 -1
  26. package/dist/core/src/redux/interfaces.d.ts.map +1 -1
  27. package/dist/core/src/redux/rootSaga.d.ts +10 -10
  28. package/dist/core/src/redux/rootSaga.d.ts.map +1 -1
  29. package/dist/core/src/redux/utils/useInstanceMap.d.ts +6 -0
  30. package/dist/core/src/redux/utils/useInstanceMap.d.ts.map +1 -0
  31. package/dist/core/src/redux/utils/useSession.d.ts +16 -0
  32. package/dist/core/src/redux/utils/useSession.d.ts.map +1 -0
  33. package/dist/core/src/rooms/RoomSessionPlayback.d.ts +20 -3
  34. package/dist/core/src/rooms/RoomSessionPlayback.d.ts.map +1 -1
  35. package/dist/core/src/rooms/RoomSessionRecording.d.ts +18 -5
  36. package/dist/core/src/rooms/RoomSessionRecording.d.ts.map +1 -1
  37. package/dist/core/src/rooms/RoomSessionStream.d.ts +19 -5
  38. package/dist/core/src/rooms/RoomSessionStream.d.ts.map +1 -1
  39. package/dist/core/src/rooms/index.d.ts +0 -4
  40. package/dist/core/src/rooms/index.d.ts.map +1 -1
  41. package/dist/core/src/rooms/methods.d.ts +6 -2
  42. package/dist/core/src/rooms/methods.d.ts.map +1 -1
  43. package/dist/core/src/testUtils.d.ts +3 -2
  44. package/dist/core/src/testUtils.d.ts.map +1 -1
  45. package/dist/core/src/types/chat.d.ts +0 -1
  46. package/dist/core/src/types/chat.d.ts.map +1 -1
  47. package/dist/core/src/types/index.d.ts +2 -0
  48. package/dist/core/src/types/index.d.ts.map +1 -1
  49. package/dist/core/src/types/messaging.d.ts +0 -1
  50. package/dist/core/src/types/messaging.d.ts.map +1 -1
  51. package/dist/core/src/types/pubSub.d.ts +0 -1
  52. package/dist/core/src/types/pubSub.d.ts.map +1 -1
  53. package/dist/core/src/types/video.d.ts +8 -7
  54. package/dist/core/src/types/video.d.ts.map +1 -1
  55. package/dist/core/src/types/videoRoomDevice.d.ts +6 -4
  56. package/dist/core/src/types/videoRoomDevice.d.ts.map +1 -1
  57. package/dist/core/src/types/videoRoomSession.d.ts +9 -0
  58. package/dist/core/src/types/videoRoomSession.d.ts.map +1 -1
  59. package/dist/core/src/types/voiceCall.d.ts +16 -5
  60. package/dist/core/src/types/voiceCall.d.ts.map +1 -1
  61. package/dist/core/src/utils/eventUtils.d.ts +2 -0
  62. package/dist/core/src/utils/eventUtils.d.ts.map +1 -0
  63. package/dist/core/src/utils/eventUtils.test.d.ts +2 -0
  64. package/dist/core/src/utils/eventUtils.test.d.ts.map +1 -0
  65. package/dist/core/src/utils/index.d.ts +3 -2
  66. package/dist/core/src/utils/index.d.ts.map +1 -1
  67. package/dist/core/src/utils/interfaces.d.ts +9 -117
  68. package/dist/core/src/utils/interfaces.d.ts.map +1 -1
  69. package/dist/index.esm.js +365 -320
  70. package/dist/index.esm.js.map +3 -3
  71. package/dist/index.js +366 -342
  72. package/dist/index.js.map +3 -3
  73. package/dist/index.umd.js +3 -3
  74. package/dist/index.umd.js.map +1 -1
  75. package/dist/js/src/BaseRoomSession.d.ts +5 -15
  76. package/dist/js/src/BaseRoomSession.d.ts.map +1 -1
  77. package/dist/js/src/Client.d.ts.map +1 -1
  78. package/dist/js/src/RoomSession.d.ts.map +1 -1
  79. package/dist/js/src/cantina/VideoManager.d.ts +4 -5
  80. package/dist/js/src/cantina/VideoManager.d.ts.map +1 -1
  81. package/dist/js/src/cantina/workers/index.d.ts +2 -0
  82. package/dist/js/src/cantina/workers/index.d.ts.map +1 -0
  83. package/dist/js/src/cantina/workers/videoManagerRoomWorker.d.ts +4 -0
  84. package/dist/js/src/cantina/workers/videoManagerRoomWorker.d.ts.map +1 -0
  85. package/dist/js/src/cantina/workers/videoManagerRoomsWorker.d.ts +4 -0
  86. package/dist/js/src/cantina/workers/videoManagerRoomsWorker.d.ts.map +1 -0
  87. package/dist/js/src/cantina/workers/videoManagerWorker.d.ts +7 -0
  88. package/dist/js/src/cantina/workers/videoManagerWorker.d.ts.map +1 -0
  89. package/dist/js/src/createRoomObject.d.ts.map +1 -1
  90. package/dist/js/src/fabric/WSClient.d.ts.map +1 -1
  91. package/dist/js/src/features/mediaElements/mediaElementsSagas.d.ts.map +1 -1
  92. package/dist/js/src/testUtils.d.ts +2 -0
  93. package/dist/js/src/testUtils.d.ts.map +1 -1
  94. package/dist/js/src/utils/interfaces.d.ts +2 -2
  95. package/dist/js/src/utils/interfaces.d.ts.map +1 -1
  96. package/dist/js/src/utils/videoElement.d.ts.map +1 -1
  97. package/dist/js/src/video/childMemberJoinedWorker.d.ts.map +1 -1
  98. package/dist/js/src/video/memberListUpdatedWorker.d.ts.map +1 -1
  99. package/dist/js/src/video/videoPlaybackWorker.d.ts +4 -0
  100. package/dist/js/src/video/videoPlaybackWorker.d.ts.map +1 -0
  101. package/dist/js/src/video/videoRecordWorker.d.ts +4 -0
  102. package/dist/js/src/video/videoRecordWorker.d.ts.map +1 -0
  103. package/dist/js/src/video/videoStreamWorker.d.ts +4 -0
  104. package/dist/js/src/video/videoStreamWorker.d.ts.map +1 -0
  105. package/dist/js/src/video/videoWorker.d.ts +7 -0
  106. package/dist/js/src/video/videoWorker.d.ts.map +1 -0
  107. package/dist/js/src/video/workers.d.ts +1 -1
  108. package/dist/js/src/video/workers.d.ts.map +1 -1
  109. package/dist/js/tsconfig.build.tsbuildinfo +1 -1
  110. package/dist/webrtc/src/BaseConnection.d.ts +4 -5
  111. package/dist/webrtc/src/BaseConnection.d.ts.map +1 -1
  112. package/dist/webrtc/src/RTCPeer.d.ts +1 -1
  113. package/dist/webrtc/src/RTCPeer.d.ts.map +1 -1
  114. package/dist/webrtc/src/workers/roomSubscribedWorker.d.ts.map +1 -1
  115. package/dist/webrtc/src/workers/vertoEventWorker.d.ts.map +1 -1
  116. package/package.json +4 -4
  117. package/src/BaseRoomSession.test.ts +4 -6
  118. package/src/BaseRoomSession.ts +47 -211
  119. package/src/Client.ts +1 -11
  120. package/src/RoomSession.ts +5 -5
  121. package/src/RoomSessionDevice.test.ts +0 -1
  122. package/src/RoomSessionScreenShare.test.ts +0 -1
  123. package/src/cantina/VideoManager.test.ts +0 -2
  124. package/src/cantina/VideoManager.ts +10 -51
  125. package/src/cantina/workers/index.ts +1 -0
  126. package/src/cantina/workers/videoManagerRoomWorker.ts +28 -0
  127. package/src/cantina/workers/videoManagerRoomsWorker.ts +33 -0
  128. package/src/cantina/workers/videoManagerWorker.ts +64 -0
  129. package/src/createRoomObject.ts +0 -1
  130. package/src/fabric/WSClient.ts +1 -2
  131. package/src/features/mediaElements/mediaElementsSagas.ts +7 -3
  132. package/src/utils/interfaces.ts +4 -2
  133. package/src/utils/videoElement.ts +1 -0
  134. package/src/video/childMemberJoinedWorker.test.ts +11 -12
  135. package/src/video/childMemberJoinedWorker.ts +0 -9
  136. package/src/video/memberListUpdatedWorker.ts +15 -15
  137. package/src/video/videoPlaybackWorker.ts +54 -0
  138. package/src/video/videoRecordWorker.ts +54 -0
  139. package/src/video/videoStreamWorker.ts +48 -0
  140. package/src/video/videoWorker.ts +96 -0
  141. package/src/video/workers.ts +1 -1
  142. package/dist/core/src/ApplyEventListeners.d.ts +0 -11
  143. package/dist/core/src/ApplyEventListeners.d.ts.map +0 -1
  144. package/dist/core/src/redux/features/pubSub/pubSubSaga.d.ts +0 -10
  145. package/dist/core/src/redux/features/pubSub/pubSubSaga.d.ts.map +0 -1
  146. package/dist/core/src/redux/features/pubSub/pubSubSaga.test.d.ts +0 -2
  147. package/dist/core/src/redux/features/pubSub/pubSubSaga.test.d.ts.map +0 -1
  148. package/dist/core/src/redux/features/session/sessionSaga.test.d.ts +0 -2
  149. package/dist/core/src/redux/features/session/sessionSaga.test.d.ts.map +0 -1
  150. package/dist/core/src/rooms/RoomSessionRTPlayback.d.ts +0 -47
  151. package/dist/core/src/rooms/RoomSessionRTPlayback.d.ts.map +0 -1
  152. package/dist/core/src/rooms/RoomSessionRTPlayback.test.d.ts +0 -2
  153. package/dist/core/src/rooms/RoomSessionRTPlayback.test.d.ts.map +0 -1
  154. package/dist/core/src/rooms/RoomSessionRTRecording.d.ts +0 -37
  155. package/dist/core/src/rooms/RoomSessionRTRecording.d.ts.map +0 -1
  156. package/dist/core/src/rooms/RoomSessionRTRecording.test.d.ts +0 -2
  157. package/dist/core/src/rooms/RoomSessionRTRecording.test.d.ts.map +0 -1
  158. package/dist/core/src/rooms/RoomSessionRTStream.d.ts +0 -36
  159. package/dist/core/src/rooms/RoomSessionRTStream.d.ts.map +0 -1
  160. package/dist/core/src/rooms/RoomSessionRTStream.test.d.ts +0 -2
  161. package/dist/core/src/rooms/RoomSessionRTStream.test.d.ts.map +0 -1
  162. package/dist/core/src/rooms/methodsRT.d.ts +0 -65
  163. package/dist/core/src/rooms/methodsRT.d.ts.map +0 -1
  164. package/dist/core/src/utils/eventTransformUtils.d.ts +0 -16
  165. package/dist/core/src/utils/eventTransformUtils.d.ts.map +0 -1
  166. package/dist/core/src/utils/eventTransformUtils.test.d.ts +0 -2
  167. package/dist/core/src/utils/eventTransformUtils.test.d.ts.map +0 -1
  168. package/dist/core/src/utils/proxyUtils.d.ts +0 -17
  169. package/dist/core/src/utils/proxyUtils.d.ts.map +0 -1
  170. package/dist/js/src/cantina/workers.d.ts +0 -4
  171. package/dist/js/src/cantina/workers.d.ts.map +0 -1
  172. package/dist/js/src/video/memberPositionWorker.d.ts +0 -3
  173. package/dist/js/src/video/memberPositionWorker.d.ts.map +0 -1
  174. package/src/cantina/workers.ts +0 -28
  175. package/src/video/memberPositionWorker.ts +0 -15
package/dist/index.umd.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * SignalWire JS SDK v3.23.3 (https://signalwire.com)
2
+ * SignalWire JS SDK v3.23.4 (https://signalwire.com)
3
3
  * Copyright 2018-2023 SignalWire
4
4
  * Licensed under MIT(https://github.com/signalwire/signalwire-js/blob/main/LICENSE)
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SignalWire={})}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r={exports:{}};!function(e){var r,o;r=t,o=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"];function n(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function 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 S(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 w(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 T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function P(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){E(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function I(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)+w(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 A(e,t,r){var o;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(I(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(I(1));return r(A)(e,t)}if("function"!=typeof e)throw new Error(I(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(I(3));return i}function u(e){if("function"!=typeof e)throw new Error(I(4));if(c)throw new Error(I(5));var t=!0;return d(),a.push(e),function(){if(t){if(c)throw new Error(I(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(I(7));if(void 0===e.type)throw new Error(I(8));if(c)throw new Error(I(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(I(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(I(11));function r(){e.next&&e.next(l())}return r(),{unsubscribe:t(r)}}})[M]=function(){return this},e},o}function O(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(I(12));if(void 0===r(void 0,{type:x.PROBE_UNKNOWN_ACTION()}))throw new Error(I(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(I(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(I(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 N=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(I(16));var r={};for(var o in e){var n=e[o];"function"==typeof n&&(r[o]=j(n,t))}return r},combineReducers:O,compose:L,createStore:A,legacy_createStore:A}),W=function(e){return"@@redux-saga/"+e},V=W("CANCEL_PROMISE"),U=W("CHANNEL_END"),$=W("IO"),B=W("MATCH"),F=W("MULTICAST"),z=W("SAGA_ACTION"),H=W("SELF_CANCELLATION"),q=W("TASK"),K=W("TASK_CANCEL"),Q=W("TERMINATE"),J=W("LOCATION");function G(){return G=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},G.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[F]},de=function(e){return function(){return!0}}(),le=function(){},ue=function(e){return e},he=function(e,t){G(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))},Se=function(e){return function(t){return e(Object.defineProperty(t,z,{value:!0}))}},we=function(e){return e===Q},ke=function(e){return e===K},Ce=function(e){return we(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 Te(e){return{name:e.name||"anonymous",location:Pe(e)}}function Pe(e){return e[J]}var Ie={isEmpty:de,put:le,take:le},Me=function(){return Ie},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",Ae="PUT",Oe="ALL",je="CALL",Le="FORK",De="SELECT",Ne="CANCELLED",We=function(e,t){var r;return(r={})[$]=!0,r.combinator=!1,r.type=e,r.payload=t,r};function Ve(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"),We(xe,{pattern:e})):ce(e)&&Y(t)&&ne(t)?We(xe,{channel:e,pattern:t}):ie(e)?(Y(t)&&console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."),We(xe,{channel:e})):void 0}function Ue(e,t){return X(t)&&(t=e,e=void 0),We(Ae,{channel:e,action:t})}function $e(e,t){var r,o=null;return Z(e)?r=e:(te(e)?(o=e[0],r=e[1]):(o=e.context,r=e.fn),o&&ee(r)&&Z(o[r])&&(r=o[r])),{context:o,fn:r,args:t}}function Be(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return We(je,$e(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 We(Le,$e(e,r))}function ze(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 We(De,{selector:e,args:r})}function He(){return We(Ne,{})}var qe=[],Ke=0;function Qe(e){try{Xe(),e()}finally{Ye()}}function Je(e){qe.push(e),Ke||(Xe(),Ze())}function Ge(e){try{return Xe(),e()}finally{Ze()}}function Xe(){Ke++}function Ye(){Ke--}function Ze(){var e;for(Ye();!Ke&&void 0!==(e=qe.shift());)Qe(e)}var et=function(e){return function(t){return e.some((function(e){return it(e)(t)}))}},tt=function(e){return function(t){return e(t)}},rt=function(e){return function(t){return t.type===String(e)}},ot=function(e){return function(t){return t.type===e}},nt=function(){return de};function it(e){var t="*"===e?nt:ee(e)?rt:te(e)?et:se(e)?rt:Z(e)?tt:ae(e)?ot:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var st={type:U},at=function(e){return e&&e.type===U};function ct(e){void 0===e&&(e=Re());var t=!1,r=[];return{take:function(o){t&&e.isEmpty()?o(st):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(st):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])(st)}}}}function dt(e,t){void 0===t&&(t=Me());var r,o=!1,n=ct(t),i=function(){o||(o=!0,Z(r)&&r(),n.close())};return r=ge(r=e((function(e){at(e)?i():n.put(e)}))),o&&r(),{take:n.take,flush:n.flush,close:i}}function lt(){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(st)}))};return(e={})[F]=!0,e.put=function(e){if(!t)if(at(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=nt),t?e(st):(e[B]=r,n(),o.push(e),e.cancel=ge((function(){n(),me(o,e)})))},e.close=i,e}function ut(){var e=lt(),t=e.put;return e.put=function(e){e[z]?t(e):Je((function(){t(e)}))},e}var ht=0,pt=1,mt=2,gt=3;function ft(e,t){var r=e[V];Z(r)&&(t.cancel=r),e.then(t,(function(e){t(e,!0)}))}var vt,yt=0,bt=function(){return++yt};function _t(e){e.isRunning()&&e.cancel()}var St=((vt={})[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):!at(e)||s?r(e):r(Q)};try{n.take(a,Y(i)?it(i):null)}catch(e){return void r(e,!0)}r.cancel=a.cancel},vt[Ae]=function(e,t,r){var o=t.channel,n=t.action,i=t.resolve;Je((function(){var t;try{t=(o?o.put:e.dispatch)(n)}catch(e){return void r(e,!0)}i&&re(t)?ft(t,r):r(t)}))},vt[Oe]=function(e,t,r,o){var n=o.digestEffect,i=yt,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)?[]:{})},vt.RACE=function(e,t,r,o){var n=o.digestEffect,i=yt,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)}))},vt[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 ft(c,r);if(oe(c))return void xt(e,c,a.context,yt,Te(i),!1,r);r(c)}catch(e){r(e,!0)}},vt.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)}},vt[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}:Te(t)}(a,n);Ge((function(){var t=xt(e,a,s.context,yt,c,i,void 0);i?r(t):t.isRunning()?(s.queue.addTask(t),r(t)):t.isAborted()?s.queue.abort(t.error()):r(t)}))},vt.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)},vt.CANCEL=function(e,t,r,o){t===H?_t(o.task):te(t)?t.forEach(_t):_t(t),r()},vt[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)}},vt.ACTION_CHANNEL=function(e,t,r){var o=t.pattern,n=ct(t.buffer),i=it(o),s=function t(r){at(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)},vt[Ne]=function(e,t,r,o){r(o.task.isCancelled())},vt.FLUSH=function(e,t,r){t.flush(r)},vt.GET_CONTEXT=function(e,t,r,o){r(o.task.context[t])},vt.SET_CONTEXT=function(e,t,r,o){he(o.task.context,t),r()},vt);function wt(e,t){return e+"?"+t}function kt(e){var t=e.name,r=e.location;return r?t+" "+wt(r.fileName,r.lineNumber):t}function Ct(e){var t=pe((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var Et=null,Tt=[],Pt=function(e){e.crashedEffect=Et,Tt.push(e)},It=function(){Et=null,Tt.length=0},Mt=function(e){Et=e},Rt=function(){var e,t=Tt[0],r=Tt.slice(1),o=t.crashedEffect?(e=Pe(t.crashedEffect))?e.code+" "+wt(e.fileName,e.lineNumber):"":null;return["The above error occurred in task "+kt(t.meta)+(o?" \n when executing effect "+o:"")].concat(r.map((function(e){return" created by "+kt(e.meta)})),[Ct(Tt)]).join("\n")};function xt(e,t,r,o,n,i,s){var a=e.finalizeRunEffect((function(t,r,o){re(t)?ft(t,o):oe(t)?xt(e,t,d.context,r,n,!1,o):t&&t[$]?(0,St[t.type])(e,t.payload,o,l):o(t)}));u.cancel=le;var c={meta:n,cancel:function(){c.status===ht&&(c.status=pt,u(K))},status:ht},d=function(e,t,r,o,n,i,s){var a;void 0===s&&(s=le);var c,d,l=ht,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=mt,Pt({meta:n,cancelledTasks:h}),f.isRoot){var o=Rt();It(),e.onError(t,{sagaStack:o})}d=t,u&&u.reject(t)}else t===K?l=pt:l!==pt&&(l=gt),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===ht&&(l=pt,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===mt?u.reject(d):l!==ht&&u.resolve(c)),u.promise;var e},a.isRunning=function(){return l===ht},a.isCancelled=function(){return l===pt||l===ht&&t.status===pt},a.isAborted=function(){return l===mt},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),It()):ke(e)?(c.status=pt,u.cancel(),n=Z(t.return)?t.return(K):{done:!0,value:K}):n=we(e)?Z(t.return)?t.return():{done:!0}:t.next(e),n.done?(c.status!==pt&&(c.status=gt),c.cont(n.value)):h(n.value,o,u)}catch(e){if(c.status===pt)throw e;c.status=mt,c.cont(e,!0)}}function h(t,r,o,n){void 0===n&&(n="");var i,s=bt();function c(r,n){i||(i=!0,o.cancel=le,e.sagaMonitor&&(n?e.sagaMonitor.effectRejected(s,r):e.sagaMonitor.effectResolved(s,r)),n&&Mt(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 At(e,t){for(var r=e.channel,o=void 0===r?ut():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=bt();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:Se(n),getState:i,sagaMonitor:c,onError:u,finalizeRunEffect:g};return Ge((function(){var e=xt(b,f,a,v,Te(t),!0,void 0);return c&&c.effectResolved(v,e),e}))}function Ot(e){var t,r=void 0===e?{}:e,o=r.context,n=void 0===o?{}:o,i=r.channel,s=void 0===i?ut():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=At.bind(null,G({},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 jt={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}(jt);var Lt=jt.exports,Dt=Object.defineProperty,Nt=Object.defineProperties,Wt=Object.getOwnPropertyDescriptor,Vt=Object.getOwnPropertyDescriptors,Ut=Object.getOwnPropertyNames,$t=Object.getOwnPropertySymbols,Bt=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable,zt=(e,t,r)=>t in e?Dt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ht=(e,t)=>{for(var r in t||(t={}))Bt.call(t,r)&&zt(e,r,t[r]);if($t)for(var r of $t(t))Ft.call(t,r)&&zt(e,r,t[r]);return e},qt=(e,t)=>Nt(e,Vt(t)),Kt=(e,t)=>{var r={};for(var o in e)Bt.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&$t)for(var o of $t(e))t.indexOf(o)<0&&Ft.call(e,o)&&(r[o]=e[o]);return r},Qt=(e,t)=>{for(var r in t)Dt(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of Ut(t))Bt.call(e,n)||n===r||Dt(e,n,{get:()=>t[n],enumerable:!(o=Wt(t,n))||o.enumerable});return e},Gt=(e,t,r)=>(Jt(e,t,"default"),r&&Jt(r,t,"default")),Xt=(e,t,r)=>(zt(e,"symbol"!=typeof t?t+"":t,r),r),Yt="__local__",Zt="__synthetic__",er="video",tr="chat",rr="chat",or=["room.started","room.ended"].map((e=>`${er}.${e}`)),nr=o.getLogger("signalwire"),ir=nr.methodFactory;nr.methodFactory=(e,t,r)=>{const o=ir(e,t,r);return function(...e){e.unshift((new Date).toISOString(),"-"),o.apply(void 0,e)}};var sr,ar=nr.getLevel();nr.setLevel(ar);var cr={},dr=()=>null!=sr?sr:nr,lr=({type:e,payload:t})=>{const r=dr(),{logWsTraffic:o}=cr||{};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")},ur=()=>{const e=dr();return new Proxy(e,{get:(e,t,r)=>"wsTraffic"===t?lr:Reflect.get(e,t,r)})},hr=/[A-Z]/g,pr=["webrtc.message"],mr=e=>pr.includes(e),gr=/^2[0-9][0-9]$/,fr=(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&&!gr.test(n)?{error:r}:null===s?(t&&(r.node_id=t),{result:r}):s?s.jsonrpc?fr(s,i):{result:s}:{result:r}},vr={propsToUpdateValue:["updated","layers","members","recordings","playbacks"]},yr=(e,t=vr)=>(null==e?void 0:e.__sw_symbol)||(null==e?void 0:e.__sw_proxy)?e:Object.entries(e).reduce(((e,[r,o])=>{const n=br(r);return e[n]="object"==typeof o&&o?Array.isArray(o)?t.propsToUpdateValue.includes(r)?o.map((e=>"string"==typeof e?br(e):yr(e))):o:yr(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}),{}),br=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,_r=({event:e,namespace:t})=>("string"==typeof e&&(e=(e=>e.replace(hr,(e=>`_${e.toLowerCase()}`)))(e=Sr({event:e,namespace:t}))),e),Sr=({namespace:e,event:t})=>!e||t.startsWith(e)?t:`${e}:${t}`,wr=e=>{const{event_type:t,params:r,node_id:o}=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=o),{type:t,payload:e}}return{type:t,payload:r}},kr=(e,t)=>(Object.keys(t).forEach((t=>{if(e.prototype.hasOwnProperty(t))throw new Error(`[extendComponent] Duplicated method name: ${t}`)})),Object.defineProperties(e.prototype,t),e),Cr=({instance:e,transform:t,payload:r,transformedPayload:o})=>(({instance:e,proxiedObj:t,payload:r,transformedPayload:o,transform:n})=>{const i=Ht(qt(Ht({},o),{_eventsNamespace:n.getInstanceEventNamespace?n.getInstanceEventNamespace(r):void 0,eventChannel:n.getInstanceEventChannel?n.getInstanceEventChannel(r):void 0}),(e=>{let t={},r=e,o=!0;for(;o;)Object.getOwnPropertyNames(r).forEach((r=>{"function"!=typeof e[r]||"string"!=typeof r||r in t||(t[r]=e[r])})),r&&r.__sw_symbol?r=Object.getPrototypeOf(r):o=!1;return t})(e));return Object.defineProperties(t,Object.entries(i).reduce(((e,[t,r])=>(void 0===r||(e[t]={value:r,enumerable:!0,configurable:!0,writable:!0}),e)),{}))})({instance:e,proxiedObj:new Proxy(e,{get:(e,n,i)=>"__sw_proxy"===n||("__sw_update_payload"===n?function(e){o=e}:"toString"===n?(({property:e,payload:t})=>"function"==typeof e?()=>JSON.stringify(t):e)({property:e[n],payload:o}):"_eventsNamespace"===n&&t.getInstanceEventNamespace?t.getInstanceEventNamespace(r):"eventChannel"===n&&t.getInstanceEventChannel?t.getInstanceEventChannel(r):n in o?o[n]:Reflect.get(e,n,i))}),payload:r,transformedPayload:o,transform:t}),Er=new Map,Tr=/^(ws|wss):\/\//,Pr=(e,t,r)=>{let o=null;return Promise.race([e,new Promise(((e,n)=>o=setTimeout(n,t,r)))]).finally((()=>clearTimeout(o)))},Ir=e=>or.includes(e),Mr=e=>e.includes("session."),Rr=["video.member.updated","video.member.talking"],xr=["video.room.joined","video.track","video.active","video.answering","video.destroy","video.early","video.hangup","video.held","video.new","video.purge","video.recovering","video.requesting","video.ringing","video.trying","video.media.connected","video.media.reconnecting","video.media.disconnected"],Ar=e=>{const t=e.map((e=>{if("string"==typeof e){const t=(e=>{const t=e.split(":");return t[t.length-1]})(e);return xr.includes(t)||(e=>e.includes(Zt))(t)||Or(t)||Mr(t)?null:Rr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},Or=e=>e.includes(Yt),jr=e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Yt),e)),[]).join(".")},Lr=e=>void 0!==e&&"jti"in e,Dr=e=>{var t;return Ht({jsonrpc:"2.0",id:null!=(t=e.id)?t:S()},e)},Nr=e=>Ht({jsonrpc:"2.0"},e),Wr={major:3,minor:0,revision:0},Vr=e=>Dr({method:"signalwire.connect",params:Ht({version:Wr},e)}),Ur={id:"callID",destinationNumber:"destination_number",remoteCallerName:"remote_caller_id_name",remoteCallerNumber:"remote_caller_id_number",callerName:"caller_id_name",callerNumber:"caller_id_number"},$r=e=>{if(e.hasOwnProperty("dialogParams")){const t=Kt(e.dialogParams,["remoteSdp","localStream","remoteStream"]);for(const e in Ur)e&&t.hasOwnProperty(e)&&(t[Ur[e]]=t[e],delete t[e]);e.dialogParams=t}return e},Br=e=>(t={})=>Dr({method:e,params:$r(t)}),Fr=Br("verto.invite"),zr=Br("verto.bye"),Hr=Br("verto.modify"),qr=Br("verto.info"),Kr=Br("verto.answer"),Qr=Br("verto.subscribe"),Jr=Br("verto.pong"),Gr=(e,t)=>Nr({id:e,result:{method:t}}),Xr={};Qt(Xr,{authErrorAction:()=>so,authExpiringAction:()=>co,authSuccessAction:()=>ao,compoundEventAttachAction:()=>_o,createAction:()=>Zr,destroyAction:()=>no,getCustomSagaActionType:()=>bo,initAction:()=>oo,makeCustomSagaAction:()=>yo,reauthAction:()=>io,sessionAuthErrorAction:()=>mo,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>ho,sessionExpiringAction:()=>go,sessionForceCloseAction:()=>fo,sessionReconnectingAction:()=>po,socketMessageAction:()=>lo});var Yr={};function Zr(e,t){function r(...r){if(t){let o=t(...r);if(!o)throw new Error("prepareAction did not return an object");return Ht(Ht({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(Yr,{configureStore:()=>ro,createAction:()=>Zr}),Gt(Yr,N);var eo="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)},to=!0;function ro(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=O(r)}let c=o;"function"==typeof c&&(c=c(t));const d=D(...c);let l=L;n&&(l=eo(Ht({trace:!to},"object"==typeof n&&n)));let u=[d];return Array.isArray(s)?u=[d,...s]:"function"==typeof s&&(u=s(u)),A(a,i,l(...u))}var oo=Zr("swSdk/init"),no=Zr("swSdk/destroy"),io=Zr("swSdk/reauth"),so=Zr("auth/error"),ao=Zr("auth/success"),co=Zr("auth/expiring"),lo=Zr("socket/message"),uo=Zr("session.connected"),ho=Zr("session.disconnected"),po=Zr("session.reconnecting"),mo=Zr("session.auth_error"),go=Zr("session.expiring"),fo=Zr("session.forceClose"),vo=(e,t)=>`${t.type}/${e}`,yo=(e,t)=>qt(Ht({},t),{type:vo(e,t)}),bo=(e,t)=>vo(e,t),_o=Zr("compound_event:attach");function So(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 wo=({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?So(e.extraReducers):[e.extraReducers],i=Ht(Ht({},t),s);return function(e,t,r=[],o){let n,[i,s,a]="function"==typeof t?So(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?Zr(n,d):Zr(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(no.type,(()=>t)),"function"==typeof o&&o(e)}});function ko(e){return[oo.type,io.type].includes(e.type)}var Co=wo({name:"session",initialState:{protocol:"",iceServers:[],authStatus:"unknown",authState:void 0,authError:void 0,authCount:0},reducers:{connected:(e,{payload:t})=>{var r,o;return qt(Ht({},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})=>qt(Ht({},e),{authStatus:t}),updateAuthState:(e,{payload:t})=>qt(Ht({},e),{authState:t})},extraReducers:e=>{e.addCase(so.type,((e,{payload:t})=>qt(Ht({},e),{authStatus:"unauthorized",authError:t.error}))),e.addMatcher(ko,(e=>qt(Ht({},e),{authStatus:"authorizing"})))}}),{actions:Eo,reducer:To}=Co,Po=Symbol("BaseSession"),Io=class{constructor(e){var t,r;this.options=e,Xt(this,"__sw_symbol",Po),Xt(this,"uuid",S()),Xt(this,"WebSocketConstructor"),Xt(this,"CloseEventConstructor"),Xt(this,"agent"),Xt(this,"connectVersion",Wr),Xt(this,"_rpcConnectResult"),Xt(this,"_requests",new Map),Xt(this,"_socket",null),Xt(this,"_host","wss://relay.signalwire.com"),Xt(this,"_executeTimeoutMs",1e4),Xt(this,"_executeTimeoutError",Symbol.for("sw-execute-timeout")),Xt(this,"_executeQueue",new Set),Xt(this,"_swConnectError",Symbol.for("sw-connect-error")),Xt(this,"_executeConnectionClosed",Symbol.for("sw-execute-connection-closed")),Xt(this,"_checkPingDelay",15e3),Xt(this,"_checkPingTimer",null),Xt(this,"_reconnectTimer"),Xt(this,"_status","unknown"),Xt(this,"_sessionChannel"),Xt(this,"wsOpenHandler"),Xt(this,"wsCloseHandler"),Xt(this,"wsErrorHandler");const{host:o,logLevel:n="info",sessionChannel:i}=e;o&&(this._host=(e=>`${Tr.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 Lr(e)?e.jti:e.signature}}get logger(){return ur()}get connecting(){var e;return 0===(null==(e=this._socket)?void 0:e.readyState)}get connected(){var e;return 1===(null==(e=this._socket)?void 0:e.readyState)}get closing(){var e;return 2===(null==(e=this._socket)?void 0:e.readyState)}get closed(){return!this._socket||3===this._socket.readyState}get status(){return this._status}get idle(){return"idle"===this._status}get ready(){return!Boolean(this.idle||!this.connected)}set token(e){this.options.token=e}connect(){if(!(null==this?void 0:this.WebSocketConstructor))throw new Error("Missing WebSocketConstructor");if(!(null==this?void 0:this.CloseEventConstructor))throw new Error("Missing CloseEventConstructor");this._clearTimers(),this.connecting||this.connected?this.logger.warn("Session already connected."):(this._removeSocketListeners(),this.destroySocket(),this._clearCheckPingTimer(),this._socket=this._createSocket(),this._addSocketListeners())}_createSocket(){return new this.WebSocketConstructor(this._host)}destroySocket(){this._socket&&(this._socket.close(),this._socket=null)}_addSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to add listeners");this._removeSocketListeners(),this._socket.addEventListener("open",this.wsOpenHandler),this._socket.addEventListener("close",this.wsCloseHandler),this._socket.addEventListener("error",this.wsErrorHandler),this._socket.addEventListener("message",this._onSocketMessage)}_removeSocketListeners(){if(!this._socket)return this.logger.debug("Invalid socket instance to remove listeners");this._socket.removeEventListener("open",this.wsOpenHandler),this._socket.removeEventListener("close",this.wsCloseHandler),this._socket.removeEventListener("error",this.wsErrorHandler),this._socket.removeEventListener("message",this._onSocketMessage)}async disconnect(){this._socket&&!this.closing?(this._status="disconnecting",this._checkCurrentStatus()):this.logger.debug("Session not connected or already in closing state.")}execute(e){if("disconnecting"===this._status)return this.logger.warn("Reject request because the session is disconnecting",e),Promise.reject({code:"400",message:"The SDK session is disconnecting"});let t=Promise.resolve();return"params"in e&&(t=new Promise(((t,r)=>{this._requests.set(e.id,{rpcRequest:e,resolve:t,reject:r})}))),this.ready?(this._send(e),Pr(t,this._executeTimeoutMs,this._executeTimeoutError).catch((t=>{if(t===this._executeConnectionClosed)throw this._executeConnectionClosed;if(t!==this._executeTimeoutError)throw t;if("method"in e&&"signalwire.connect"===e.method)throw this._swConnectError;if(this._checkCurrentStatus(),this.logger.error("Request Timeout",e),"disconnected"===this.status)return this.logger.debug("Request failed because the session is disconnected",this.status,this._socket);this._closeConnection("reconnecting")}))):(this._addToExecuteQueue(e),this.connect(),t)}async authenticate(){var e;const t={agent:this.agent,version:this.connectVersion,authentication:{project:this.options.project,token:this.options.token}};this._relayProtocolIsValid()&&(t.protocol=this.relayProtocol),(null==(e=this.options.contexts)?void 0:e.length)&&(t.contexts=this.options.contexts),this._rpcConnectResult=await this.execute(Vr(t))}authError(e){this._removeSocketListeners(),this.dispatch(so({error:e}))}forceClose(){return this._removeSocketListeners(),this._closeConnection("reconnecting")}async _onSocketOpen(e){this.logger.debug("_onSocketOpen",e.type);try{this._status="unknown",this._clearTimers(),await this.authenticate(),this._status="connected",this._flushExecuteQueue(),this.dispatch(ao())}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(po()),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}:fr(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,Nr({id:r,result:{}}))).catch((e=>{this.logger.error("SwDisconnect Error",e)})).finally((()=>{this._status="idle"}));break;default:this.dispatch(lo(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,Nr({id:r,result:{timestamp:o||Date.now()/1e3}})))}_checkCurrentStatus(){switch(this._status){case"disconnecting":if(this._requests.size>0)return;this._requests.clear(),this._closeConnection("disconnected");break;case"disconnected":this.dispatch(ho());break;case"reconnecting":this.wsCloseHandler(new this.CloseEventConstructor("close",{reason:"Client-side closed"}))}}_closeConnection(e){this._clearCheckPingTimer(),this.logger.debug("Close Connection:",e),this._status=e,this.dispatch(Eo.authStatus("disconnected"===e?"unauthorized":"unknown")),this._removeSocketListeners(),this.destroySocket(),this._checkCurrentStatus()}},Mo=class extends Io{constructor(e){super(e),this.options=e,Xt(this,"_expiredDiffSeconds",0),Xt(this,"_refreshTokenNotificationDiff",120),Xt(this,"_checkTokenExpirationDelay",2e4),Xt(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=Lr(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(Vr(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,Dr({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(co()),"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))}},Ro={};Qt(Ro,{authErrorAction:()=>so,authExpiringAction:()=>co,authSuccessAction:()=>ao,compoundEventAttachAction:()=>_o,configureStore:()=>nn,connect:()=>on,createAction:()=>Zr,createCatchableSaga:()=>Wo,createRestartableSaga:()=>Do,destroyAction:()=>no,eventChannel:()=>dt,getCustomSagaActionType:()=>bo,initAction:()=>oo,makeCustomSagaAction:()=>yo,reauthAction:()=>io,sessionAuthErrorAction:()=>mo,sessionConnectedAction:()=>uo,sessionDisconnectedAction:()=>ho,sessionExpiringAction:()=>go,sessionForceCloseAction:()=>fo,sessionReconnectingAction:()=>po,socketMessageAction:()=>lo});var xo=wo({name:"components",initialState:{byId:{}},reducers:{upsert:(e,{payload:t})=>qt(Ht({},e),t.id in e.byId?{byId:qt(Ht({},e.byId),{[t.id]:Ht(Ht({},e.byId[t.id]),t)})}:{byId:qt(Ht({},e.byId),{[t.id]:t})}),cleanup:(e,{payload:t})=>qt(Ht({},e),{byId:Object.entries(e.byId).reduce(((e,[r,o])=>(t.ids.includes(r)||(e[r]=o),e)),{})})}}),{actions:Ao,reducer:Oo}=xo,jo=(0,Yr.combineReducers)({components:Oo,session:To}),Lo={};Qt(Lo,{createCatchableSaga:()=>Wo,createRestartableSaga:()=>Do,eventChannel:()=>dt});var Do=e=>function*(){!function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];var n;n=Fe.apply(void 0,[e].concat(r)),We(Le,G({},n.payload,{detached:!0}))}((function*(){for(;;)try{ur().debug("Run a restartable saga"),yield Be(e),ur().debug("One of the restartable saga has ended. Restarting..")}catch(e){ur().error("Restartable Saga Error",e)}}))},No=e=>ur().error("Catchable Saga Error",e),Wo=(e,t=No)=>function*(...r){try{yield Be(e,...r)}catch(e){t(e)}},Vo=e=>mr(null==e?void 0:e.event_type),Uo=e=>{var t;return!!(null==(t=null==e?void 0:e.event_type)?void 0:t.startsWith("video."))},$o=e=>"signalwire.authorization.state"===(null==e?void 0:e.event_type);function*Bo({sessionChannel:e,pubSubChannel:t,swEventChannel:r,session:o}){function*n(e){switch(e.event_type){case"video.room.audience_count":return void(yield Ue(t,{type:"video.room.audienceCount",payload:e.params}));case"video.member.updated":return;case"video.member.talking":{const{member:r}=e.params;if("talking"in r){const o=r.talking?"started":"ended";yield Ue(t,{type:`video.member.talking.${o}`,payload:e.params});const n=r.talking?"start":"stop";yield Ue(t,{type:`video.member.talking.${n}`,payload:e.params})}break}}yield Ue(t,{type:e.event_type,payload:e.params})}function*i(e){yield Ue(r,wr(e)),Vo(e)||($o(e)?o.onSwAuthorizationState(e.params.authorization_state):Uo(e)?yield Fe(n,e):yield Ue({type:e.event_type,payload:e}))}const s=Wo((function*(e){if(e.type!==lo.type)return void(yield Ue(e));const{method:t,params:r}=e.payload;if("signalwire.event"!==t)return ur().debug(`Unknown message: ${t}`,e);yield Fe(i,r)}),(e=>{ur().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ve(e);yield Fe(s,t)}}catch(e){ur().error("sessionChannelWorker error:",e)}finally{ur().debug("sessionChannelWorker finally")}}var Fo=e=>{var t;return void 0===e.payload?"":(e=>e.type.startsWith("video.member.")||e.type.startsWith("video.__synthetic__.member"))(e)||(e=>e.type.startsWith("video.layout."))(e)||(e=>e.type.startsWith("video.recording."))(e)||(e=>e.type.startsWith("video.playback."))(e)||(e=>e.type.startsWith("video.stream."))(e)||(e=>"video.room.audience_count"===e.type||"video.room.audienceCount"===e.type)(e)?e.payload.room_session_id:(e=>e.type.startsWith("video.room."))(e)?e.payload.room_session.id:(e=>e.type.startsWith("chat."))(e)?"":(e=>e.type.startsWith("calling."))(e)&&null!=(t=e.payload.tag)?t:""};function*zo({pubSubChannel:e,emitter:t}){ur().debug("pubSubSaga [started]");try{for(;;){const r=yield Ve(e,"*"),{type:o,payload:n}=r;try{const e=Fo(r);Ir(o)&&t.emit(o,n),ur().trace("Emit:",_r({namespace:e,event:o})),t.emit(_r({namespace:e,event:o}),n)}catch(e){ur().error(e)}}}finally{(yield He())&&ur().debug("pubSubSaga [cancelled]")}}var Ho=class extends Error{constructor(e,t){super(t),this.code=e,this.message=t,Xt(this,"name","AuthError"),Object.setPrototypeOf(this,Ho.prototype)}},qo=class extends Error{constructor(e,t,r){super(t),this.code=e,this.message=t,this.response=r,Xt(this,"name","HttpError"),Object.setPrototypeOf(this,qo.prototype)}};function*Ko({initSession:e,userOptions:t,channels:r}){var o;const n=e(),i=r.pubSubChannel,s=r.swEventChannel,a=r.sessionChannel;let c=[];if(null==(o=t.workers)?void 0:o.length)try{const e=t.workers.map((e=>Be(Do(e))));c=yield function(e){var t=We(Oe,e);return t.combinator=!0,t}(e)}catch(e){ur().error("Error running custom workers",e)}yield Fe(Bo,{session:n,sessionChannel:a,pubSubChannel:i,swEventChannel:s});const d=yield Fe(zo,{pubSubChannel:i,emitter:t.emitter}),l=yield Fe(Jo,{session:n,sessionChannel:a,pubSubChannel:i,userOptions:t});n.connect(),yield Ve(no.type),n.disconnect(),yield Ve(ho.type),yield Ue(i,ho()),d.cancel(),l.cancel(),c.forEach((e=>e.cancel()))}function*Qo({session:e,token:t,pubSubChannel:r}){try{e.reauthenticate&&(e.token=t,yield Be(e.reauthenticate),yield Ue(Eo.connected(e.rpcConnectResult)),yield Ue(r,uo()))}catch(t){ur().error("Reauthenticate Error",t),e.authError(t)}}function*Jo(e){ur().debug("sessionStatusWatcher [started]");try{for(;;){const t=yield Ve([ao.type,so.type,co.type,io.type,po.type,fo.type]);switch(ur().trace("sessionStatusWatcher",t.type,t.payload),t.type){case ao.type:{const{session:t,pubSubChannel:r}=e;yield Ue(Eo.connected(t.rpcConnectResult)),yield Ue(r,uo());break}case so.type:yield Fe(Go,qt(Ht({},e),{action:t}));break;case co.type:yield Ue(e.pubSubChannel,go());break;case io.type:yield Fe(Qo,{session:e.session,token:t.payload.token,pubSubChannel:e.pubSubChannel});break;case po.type:yield Ue(e.pubSubChannel,po());break;case fo.type:e.session.forceClose()}}}finally{(yield He())&&ur().debug("sessionStatusWatcher [cancelled]")}}function*Go(e){ur().debug("sessionAuthErrorSaga [started]");try{const{pubSubChannel:t,action:r}=e,{error:o}=r.payload,n=o?new Ho(o.code,o.message):new Error("Unauthorized");yield Ue(t,mo(n))}finally{(yield He())&&ur().debug("sessionAuthErrorSaga [cancelled]")}}var Xo={};Qt(Xo,{getAuthError:()=>tn,getAuthState:()=>rn,getAuthStatus:()=>en,getIceServers:()=>Yo,getSession:()=>Zo});var Yo=({session:e})=>{var t;return null!=(t=null==e?void 0:e.iceServers)?t:[]},Zo=e=>e.session,en=({session:e})=>e.authStatus,tn=({session:e})=>e.authError,rn=({session:e})=>e.authState,on=e=>{const{sessionListeners:t={},store:r,Component:o,customSagas:n=[]}=e,i=Object.keys(t);return e=>{const s=new o(qt(Ht({},e),{store:r})),a=new Map;let c=!0;const d=r.subscribe((()=>{const e=r.getState(),o=Zo(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}};Gt(Ro,Yr);var nn=e=>{var t;const{userOptions:r,SessionConstructor:o,preloadedState:n={},runSagaMiddleware:i=!0}=e,s=Ot(),a=lt(),c=lt(),d=ct(),l={pubSubChannel:a,swEventChannel:c,sessionChannel:d},u=ro({devTools:null==(t=null==r?void 0:r.devTools)||t,reducer:jo,preloadedState:n,middleware:e=>e().concat(s)});let h;const p=()=>(h=new o(qt(Ht({},r),{sessionChannel:d})),h),m=()=>(h||ur().warn("Custom worker started without the session"),h),g=new Map,f={get:e=>g.get(e),set:(e,t)=>(g.set(e,t),g),remove:e=>(g.delete(e),g)};if(i){const e=(e=>function*({userOptions:t,channels:r}){var o;for(t.logger&&(sr=t.logger),t.debug&&(e=>{null!=e?Object.assign(cr,e):cr={}})(t.debug);;){const n=yield Ve([oo.type,io.type]);(null==(o=null==n?void 0:n.payload)?void 0:o.token)&&(t.token=n.payload.token);try{yield Be(Ko,qt(Ht({},e),{userOptions:t,channels:r}))}catch(e){ur().error("RootSaga Error:",e)}finally{(yield He())&&ur().debug("rootSaga [cancelled]"),ur().debug("Reboot rootSaga")}}})({initSession:p});s.run(e,{userOptions:r,channels:l})}return qt(Ht({},u),{runSaga:(e,t)=>s.run(e,qt(Ht({},t),{channels:l,getSession:m,instanceMap:f})),channels:l,instanceMap:f})},sn=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 ur().error(e),void(null==o||o(e))}try{const e=(({method:e,params:t})=>Dr({method:e,params:t}))({id:i,method:s,params:a}),t=yield Be(c.execute,e);null==r||r(t)}catch(e){ur().warn("Execute error: ",e),null==o||o(e)}},an=e=>e,cn=Symbol("BaseComponent"),dn=class{constructor(e){this.options=e,Xt(this,"__sw_symbol",cn),Xt(this,"uuid",S()),Xt(this,"_eventsPrefix",""),Xt(this,"_eventsRegisterQueue",new Set),Xt(this,"_eventsEmitQueue",new Set),Xt(this,"_eventsNamespace"),Xt(this,"_eventsTransformsCache",new Map),Xt(this,"_customSagaTriggers",new Map),Xt(this,"_destroyer"),Xt(this,"baseEventEmitter"),Xt(this,"_emitterTransforms",new Map),Xt(this,"_emitterListenersCache",new Map),Xt(this,"_trackedEvents",[]),Xt(this,"_runningWorkers",[]),Xt(this,"_workers",new Map),this.baseEventEmitter=new Lt}get __uuid(){return this.uuid}_handleCompoundEvents(e){const t=this._getInternalEvent(e);let r;for(const e of this.getCompoundEvents().keys())if(this._getInternalEvent(e)===t){r=this.getCompoundEvents().get(e);break}r&&0!==r.length&&(this.store.dispatch(_o({compoundEvents:r,event:t,namespace:this._eventsNamespace})),r.forEach((e=>{"string"==typeof e&&this._trackEvent(e)})))}_getNamespacedEvent(e){let t=this._eventsNamespace;return"string"==typeof e&&Or(e)&&(t=this.__uuid),_r({event:e,namespace:t})}_getPrefixedEvent(e){return!this._eventsPrefix||"string"!=typeof e||e.includes(`${this._eventsPrefix}.`)||Mr(e)?e:`${this._eventsPrefix}.${e}`}_getInternalEvent(e){return this._getNamespacedEvent(this._getPrefixedEvent(e))}get logger(){return ur()}set destroyer(e){this._destroyer=e}get store(){return this.options.store}get instanceMap(){return this.options.store.instanceMap}get emitter(){return this.options.emitter}get baseEmitter(){return this.baseEventEmitter}addEventToRegisterQueue(e){const[t,r]=e.params;return this.logger.trace("Adding event to the register queue",{event:t,fn:r}),this._eventsRegisterQueue.add({type:e.type,params:e.params}),this.emitter}_addEventToEmitQueue(e,t){this.logger.trace("Adding to the emit queue",e),this._eventsEmitQueue.add({event:e,args:t})}shouldAddToQueue(){return void 0===this._eventsNamespace}runAndCacheEventHandlerTransform({internalEvent:e,transform:t,payload:r}){if("no-cache"===t.mode)return t.instanceFactory(r);if(!this._eventsTransformsCache.has(e)){const o=t.instanceFactory(r);return this._eventsTransformsCache.set(e,o),o}return this._eventsTransformsCache.get(e)}cleanupEventHandlerTransformCache({internalEvent:e,force:t}){const r=this._eventsTransformsCache.get(e),o=this.listenerCount(e);return r&&(t||o<=1)?(r.__uuid!==this.__uuid&&"function"==typeof r.destroy&&r.destroy(),this._eventsTransformsCache.delete(e)):(this.logger.trace("[cleanupEventHandlerTransformCache] Key wasn't cached",e),!1)}getEmitterListenersMapByInternalEventName(e){var t;return null!=(t=this._emitterListenersCache.get(e))?t:new Map}getAndRemoveStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);if(t&&r.has(t)){const o=r.get(t);return r.delete(t),this._emitterListenersCache.set(e,r),o}return t}_createStableEventHandler(e,t){return r=>{const o=this._emitterTransforms.get(e);if(this.logger.trace("Got emitterTransform for",e,o),!o)return t(r);const n=this.runAndCacheEventHandlerTransform({internalEvent:e,transform:o,payload:r});let i;const s=this._parseNestedFields(r,o);return i=Cr({instance:n,payload:r,transformedPayload:s,transform:o}),o.afterCreateHook&&o.afterCreateHook(i),t(i)}}_parseNestedFields(e,t,r=(e=>e),o=undefined){if(!t.nestedFieldsToProcess)return t.payloadTransform(e);if(e.__sw_proxy)return e;if(!o){const o=t.payloadTransform(e);return this._parseNestedFields(o,t,r,o)}return Array.isArray(e)?o=e.map(((o,n)=>this._parseNestedFields(r(o),t,r,e[n]))):e&&"object"==typeof e&&Object.entries(e).forEach((([e,n])=>{var i;const s=null==(i=t.nestedFieldsToProcess)?void 0:i[e],a=s?this._emitterTransforms.get(s.eventTransformType):void 0;o[e]=n&&"object"==typeof n?this._parseNestedFields(n,t,(e=>s&&a&&e&&"object"==typeof e?(({transform:e,payload:t})=>{const r=(({transform:e,payload:t})=>{if(!Er.has(e.type)){const r=e.instanceFactory(t);return Er.set(e.type,r),r}return Er.get(e.type)})({transform:e,payload:t}),o=e.payloadTransform(t);return Cr({transform:e,payload:t,instance:r,transformedPayload:o})})({transform:a,payload:r(s.processInstancePayload(e))}):e),o[e]):r(n)})),o}getOrCreateStableEventHandler(e,t){const r=this.getEmitterListenersMapByInternalEventName(e);let o=r.get(t);return o||(o=this._createStableEventHandler(e,t),r.set(t,o),this._emitterListenersCache.set(e,r)),o}_trackEvent(e){this._trackedEvents=Array.from(new Set(this._trackedEvents.concat(e)))}_untrackEvent(e){this._trackedEvents=this._trackedEvents.filter((t=>t!==e))}_addListener(e,t,r){this._handleCompoundEvents(e);const o=this._getInternalEvent(e);this._trackEvent(o);const n=r?"once":"on";if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:n,params:[e,t]}),this.emitter;const i=this.getOrCreateStableEventHandler(o,t);return this.logger.trace("Registering event",o),this.emitter[n](o,i)}on(e,t){return this._addListener(e,t)}_on(e,t){return this.baseEmitter.on(e,t)}_once(e,t){return this.baseEmitter.once(e,t)}_off(e,t){return this.baseEmitter.off(e,t)}once(e,t){return this._addListener(e,t,!0)}off(e,t){if(this.shouldAddToQueue())return this.addEventToRegisterQueue({type:"off",params:[e,t]}),this.emitter;const r=this._getInternalEvent(e),o=this.getAndRemoveStableEventHandler(r,t);return this.cleanupEventHandlerTransformCache({internalEvent:r,force:!o}),this.logger.trace("Removing event listener",r),this._untrackEvent(r),this.emitter.off(r,o)}removeAllListeners(e){return this.shouldAddToQueue()?(this.addEventToRegisterQueue({type:"removeAllListeners",params:[e]}),this.emitter):e?this.off(e):(this.eventNames().forEach((e=>{this.off(e)})),this.emitter)}eventNames(){return this._trackedEvents}baseEventNames(){return this.baseEmitter.eventNames()}getSubscriptions(){return Ar(this.eventNames().concat(this.baseEventNames()))}emit(e,...t){if(this.shouldAddToQueue())return this._addEventToEmitQueue(e,t),!1;const r=this._getInternalEvent(e);return this.logger.trace("Emit on event:",r),this.emitter.emit(r,...t)}listenerCount(e){return this.emitter.listenerCount(e)}destroy(){var e;null==(e=this._destroyer)||e.call(this),this.removeAllListeners(),this.detachWorkers()}execute({method:e,params:t},{transformParams:r=an,transformResolve:o=an,transformReject:n=an}={transformParams:an,transformResolve:an,transformReject:an}){return new Promise(((i,s)=>{const a=S();this.runWorker("executeActionWorker",{worker:sn,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=S();this._customSagaTriggers.set(o,{resolve:t,reject:r}),this.store.dispatch(Ht({dispatchId:o},yo(this.__uuid,e)))}))}settleCustomSagaTrigger({dispatchId:e,payload:t,kind:r}){const o=this._customSagaTriggers.get(e);o&&(o[r](t),this._customSagaTriggers.delete(e))}select(e){return e(this.store.getState())}getStateProperty(e){return this[e]}flushEventsRegisterQueue(){this._eventsRegisterQueue.forEach((e=>{this[e.type](...e.params),this._eventsRegisterQueue.delete(e)}))}flushEventsEmitQueue(){this._eventsEmitQueue.forEach((e=>{const{event:t,args:r}=e;this.emit(t,...r),this._eventsEmitQueue.delete(e)}))}flushEventsQueue(){this.flushEventsRegisterQueue(),this.flushEventsEmitQueue()}_attachListeners(e){"string"==typeof e&&(this._eventsNamespace=e),this.flushEventsQueue()}getCompoundEvents(){return new Map}getEmitterTransforms(){return new Map}get _sessionAuthStatus(){return en(this.store.getState())}get _sessionAuthState(){return rn(this.store.getState())}_waitUntilSessionAuthorized(){switch(en(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=en(this.store.getState()),n=tn(this.store.getState());if("authorized"===o)e(this),r();else if("unauthorized"===o){const e=n?new Ho(n.code,n.message):new Error("Unauthorized");t(e),r()}}))}));case"unauthorized":return Promise.reject(new Error("Unauthorized"))}}_setEmitterTransform({event:e,handler:t,local:r}){const o=this._getInternalEvent(e);(r?Or(e):!Or(e)&&this.eventNames().includes(o))&&this._emitterTransforms.set(o,t)}applyEmitterTransforms({local:e=!1}={local:!1}){this.getEmitterTransforms().forEach(((t,r)=>{Array.isArray(r)?r.forEach((r=>{this._setEmitterTransform({event:r,handler:t,local:e})})):this._setEmitterTransform({event:r,handler:t,local:e}),this._emitterTransforms.set(t.type,t)}))}runWorker(e,t){return this._workers.has(e)?ur().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=Kt(r,["worker"]);const i=this.store.runSaga(o,Ht({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=[]}},ln=class extends dn{constructor(e){super(e),this.options=e,this._attachListeners("")}connect(){const e=en(this.store.getState());return"unknown"!==e&&"unauthorized"!==e||this.store.dispatch(oo()),this._waitUntilSessionAuthorized()}disconnect(){this.store.dispatch(no())}},un=class extends dn{constructor(e){super(e),this.options=e,Xt(this,"subscribeMethod","signalwire.subscribe"),Xt(this,"subscribeParams",{}),Xt(this,"_latestExecuteParams"),this.applyEmitterTransforms({local:!0});const t=()=>{this._latestExecuteParams=void 0};super.on("session.connected",t),super.on("session.disconnected",t),super.on("session.reconnecting",t)}shouldExecuteSubscribe(e){return!this._latestExecuteParams||JSON.stringify(e)!==JSON.stringify(this._latestExecuteParams)}async subscribe(){await this._waitUntilSessionAuthorized();const e=this.getSubscriptions();if(0===e.length)return void this.logger.debug("`subscribe()` was called without any listeners attached.");const t={method:this.subscribeMethod,params:qt(Ht({},this.subscribeParams),{event_channel:this.getStateProperty("eventChannel"),events:e})};if(this.shouldExecuteSubscribe(t))return this._latestExecuteParams=t,new Promise((async(e,r)=>{try{return this.applyEmitterTransforms(),await this.execute(t),e(void 0)}catch(e){return r(e)}}));this.logger.debug("BaseConsumer.subscribe() - Skipped .execute() since the execParams are exactly the same as last time")}},hn={audio_muted:!0,video_muted:!0,deaf:!0,visible:!0,input_volume:1,output_volume:1,input_sensitivity:1};Object.keys(hn).map((e=>`${er}.member.updated.${e}`));var pn=yr(hn);Object.keys(pn).map((e=>`member.updated.${e}`));var mn={};Qt(mn,{getComponent:()=>gn,getComponentsById:()=>fn,getComponentsToCleanup:()=>vn});var gn=({components:e},t)=>{var r;return null==(r=e.byId)?void 0:r[t]},fn=({components:e})=>e.byId,vn=e=>{const t=fn(e);let r=[];return Object.keys(t).forEach((e=>{(t[e].responses||t[e].errors)&&r.push(e)})),r},yn={};Qt(yn,{RoomSessionPlaybackAPI:()=>gi,RoomSessionRTPlaybackAPI:()=>vi,RoomSessionRTRecordingAPI:()=>pi,RoomSessionRTStreamAPI:()=>Si,RoomSessionRecordingAPI:()=>ui,RoomSessionStreamAPI:()=>bi,audioMuteMember:()=>Un,audioUnmuteMember:()=>$n,createRoomSessionPlaybackObject:()=>fi,createRoomSessionRTPlaybackObject:()=>yi,createRoomSessionRTRecordingObject:()=>mi,createRoomSessionRTStreamObject:()=>wi,createRoomSessionRecordingObject:()=>hi,createRoomSessionStreamObject:()=>_i,deafMember:()=>zn,deleteMemberMeta:()=>ni,deleteMeta:()=>Nn,demote:()=>Xn,getLayouts:()=>wn,getMemberMeta:()=>ti,getMembers:()=>kn,getMeta:()=>jn,getPlaybacks:()=>xn,getRTPlaybacks:()=>si,getRTRecordings:()=>ci,getRTStreams:()=>li,getRecordings:()=>Mn,getStreams:()=>Wn,hideVideoMuted:()=>Tn,play:()=>An,playRT:()=>ii,promote:()=>Gn,removeAllMembers:()=>ei,removeMember:()=>Zn,setDeaf:()=>qn,setHideVideoMuted:()=>In,setInputSensitivityMember:()=>Jn,setInputVolumeMember:()=>Kn,setLayout:()=>Cn,setMemberMeta:()=>ri,setMemberPosition:()=>Yn,setMeta:()=>Ln,setOutputVolumeMember:()=>Qn,setPositions:()=>En,showVideoMuted:()=>Pn,startRTRecording:()=>ai,startRTStream:()=>di,startRecording:()=>Rn,startStream:()=>Vn,undeafMember:()=>Hn,updateMemberMeta:()=>oi,updateMeta:()=>Dn,videoMuteMember:()=>Bn,videoUnmuteMember:()=>Fn});var bn=()=>{},_n=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:Ht({room_session_id:this.roomSessionId},r)},t)}}),Sn=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,i=Kt(o,["memberId"]);return this.execute({method:e,params:Ht({room_session_id:this.roomSessionId,member_id:n||this.memberId},i)},t)}}),wn=_n("video.list_available_layouts",{transformResolve:e=>({layouts:e.layouts})}),kn=_n("video.members.get",{transformResolve:e=>({members:e.members})}),Cn=_n("video.set_layout",{transformResolve:bn}),En=_n("video.set_position",{transformResolve:bn}),Tn=_n("video.hide_video_muted",{transformResolve:bn}),Pn=_n("video.show_video_muted",{transformResolve:bn}),In={value:function(e){return this.execute({method:e?"video.hide_video_muted":"video.show_video_muted",params:{room_session_id:this.roomSessionId}},{transformResolve:bn})}},Mn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(jr("video.recording.list"),r);try{const e=await this.execute({method:"video.recording.list",params:{room_session_id:this.roomSessionId}});this.emit(jr("video.recording.list"),qt(Ht({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.recording.list"),r),t(e)}}))}},Rn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(jr("video.recording.start"),r);try{const e=await this.execute({method:"video.recording.start",params:{room_session_id:this.roomSessionId}});this.emit(jr("video.recording.start"),qt(Ht({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.recording.start"),r),t(e)}}))}},xn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(jr("video.playback.list"),r);try{const e=await this.execute({method:"video.playback.list",params:{room_session_id:this.roomSessionId}});this.emit(jr("video.playback.list"),qt(Ht({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.playback.list"),r),t(e)}}))}},An={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Kt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{const i=t=>{e(t)};this.on(jr("video.playback.start"),i);try{const e=r||o,t=await this.execute({method:"video.playback.start",params:Ht({room_session_id:this.roomSessionId,seek_position:e},n)});this.emit(jr("video.playback.start"),qt(Ht({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.playback.start"),i),t(e)}}))}},On=e=>_n(e,{transformResolve:bn,transformParams:e=>{const t=e,{room_session_id:r}=t;return{room_session_id:r,meta:Kt(t,["room_session_id"])}}}),jn=_n("video.get_meta",{transformResolve:({meta:e})=>({meta:e})}),Ln=On("video.set_meta"),Dn=On("video.update_meta"),Nn={value:function(e){return this.execute({method:"video.delete_meta",params:{room_session_id:this.roomSessionId,keys:e}})}},Wn={value:function(){return new Promise((async(e,t)=>{const r=t=>{e(t)};this.on(jr("video.stream.list"),r);try{const e=await this.execute({method:"video.stream.list",params:{room_session_id:this.roomSessionId}});this.emit(jr("video.stream.list"),qt(Ht({},e),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.stream.list"),r),t(e)}}))}},Vn={value:function(e){return new Promise((async(t,r)=>{const o=e=>{t(e)};this.on(jr("video.stream.start"),o);try{const t=await this.execute({method:"video.stream.start",params:Ht({room_session_id:this.roomSessionId},e)});this.emit(jr("video.stream.start"),qt(Ht({},t),{room_session_id:this.roomSessionId}))}catch(e){this.off(jr("video.stream.start"),o),r(e)}}))}},Un=Sn("video.member.audio_mute",{transformResolve:bn}),$n=Sn("video.member.audio_unmute",{transformResolve:bn}),Bn=Sn("video.member.video_mute",{transformResolve:bn}),Fn=Sn("video.member.video_unmute",{transformResolve:bn}),zn=Sn("video.member.deaf",{transformResolve:bn}),Hn=Sn("video.member.undeaf",{transformResolve:bn}),qn={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:bn})}},Kn=Sn("video.member.set_input_volume",{transformResolve:bn}),Qn=Sn("video.member.set_output_volume",{transformResolve:bn}),Jn=Sn("video.member.set_input_sensitivity",{transformResolve:bn}),Gn={value:function(e){var t=e,{memberId:r,mediaAllowed:o,joinAudioMuted:n,joinVideoMuted:i}=t,s=Kt(t,["memberId","mediaAllowed","joinAudioMuted","joinVideoMuted"]);return this.execute({method:"video.member.promote",params:Ht({room_session_id:this.roomSessionId,member_id:r,media_allowed:o,join_audio_muted:n,join_video_muted:i},s)},{transformResolve:bn})}},Xn={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:bn})}},Yn=Sn("video.member.set_position",{transformResolve:bn}),Zn={value:function(e){var t=e,{memberId:r}=t,o=Kt(t,["memberId"]);if(!r)throw new TypeError('Invalid or missing "memberId" argument');return this.execute({method:"video.member.remove",params:Ht({room_session_id:this.roomSessionId,member_id:r},o)},{transformResolve:bn})}},ei={value:function(){return this.execute({method:"video.member.remove",params:{room_session_id:this.roomSessionId,member_id:"all"}},{transformResolve:bn})}},ti=Sn("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),ri=Sn("video.member.set_meta",{transformResolve:bn}),oi=Sn("video.member.update_meta",{transformResolve:bn}),ni=Sn("video.member.delete_meta",{transformResolve:bn}),ii={value:function(e){var t=e,{seekPosition:r,currentTimecode:o}=t,n=Kt(t,["seekPosition","currentTimecode"]);return new Promise((async(e,t)=>{try{const t=r||o,{playback:i}=await this.execute({method:"video.playback.start",params:Ht({room_session_id:this.roomSessionId,seek_position:t},n)}),s=yi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:i}});this.instanceMap.set(s.id,s),e(s)}catch(e){t(e)}}))}},si={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=yi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,playback:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({playbacks:r})}catch(e){t(e)}}))}},ai={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=mi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:t}});this.instanceMap.set(r.id,r),e(r)}catch(e){t(e)}}))}},ci={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=mi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,recording:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({recordings:r})}catch(e){t(e)}}))}},di={value:function(e){return new Promise((async(t,r)=>{try{const{stream:r}=await this.execute({method:"video.stream.start",params:Ht({room_session_id:this.roomSessionId},e)}),o=wi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:r}});this.instanceMap.set(o.id,o),t({stream:o})}catch(e){r(e)}}))}},li={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=wi({store:this.store,emitter:this.emitter,payload:{room_id:this.roomId,room_session_id:this.roomSessionId,stream:e}}),r.push(t),this.instanceMap.set(t.id,t)})),e({streams:r})}catch(e){t(e)}}))}},ui=class extends dn{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")}})}},hi=e=>on({store:e.store,Component:ui})(e),pi=class extends dn{constructor(e){super(e),Xt(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")}})}},mi=e=>on({store:e.store,Component:pi})(e),gi=class extends dn{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)}})}},fi=e=>on({store:e.store,Component:gi})(e),vi=class extends dn{constructor(e){super(e),Xt(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)}})}},yi=e=>on({store:e.store,Component:vi})(e),bi=class extends dn{async stop(){await this.execute({method:"video.stream.stop",params:{room_session_id:this.getStateProperty("roomSessionId"),stream_id:this.getStateProperty("id")}})}},_i=e=>on({store:e.store,Component:bi})(e),Si=class extends dn{constructor(e){super(e),Xt(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")}})}},wi=e=>on({store:e.store,Component:Si})(e),ki={};Qt(ki,{BaseChatAPI:()=>Bi,BaseChatConsumer:()=>$i,ChatMember:()=>Hi,ChatMessage:()=>zi,createBaseChatObject:()=>Fi,getMemberState:()=>Ai,getMembers:()=>Mi,getMessages:()=>Ii,publish:()=>Pi,setMemberState:()=>xi});var Ci=()=>{},Ei=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),Ti=(e,t={})=>({value:function(r={}){var o=r,{memberId:n}=o,i=Kt(o,["memberId"]);return this.execute({method:e,params:Ht({member_id:n},i)},t)}}),Pi=Ei("chat.publish",{transformResolve:Ci}),Ii=Ei("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>yr(e))),cursor:e.cursor})}),Mi=Ei("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>yr(e)))})}),Ri=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return qt(Ht({},e),{channels:t})},xi=Ti("chat.member.set_state",{transformResolve:Ci,transformParams:Ri}),Ai=Ti("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:Ri}),Oi={};Qt(Oi,{BasePubSubConsumer:()=>Ni,PubSubMessage:()=>Vi,createBasePubSubObject:()=>Wi});var ji=function*(e){ur().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=Kt(r,["member"]),i=yr(qt(Ht({},n),{channel:e})),s=new Vi(i);t.baseEmitter.emit(`${rr}.message`,s);break}default:ur().warn(`Unknown pubsub event: "${r}"`)}}const n=e=>e.type.startsWith(`${rr}.`);for(;;){const e=yield Ve(r,n);yield Fe(o,e)}ur().trace("pubSubWorker ended")},Li=class extends un{extendEventName(e){return e}on(e,t){return super._on(this.extendEventName(e),t)}once(e,t){return super._once(this.extendEventName(e),t)}off(e,t){return super._off(this.extendEventName(e),t)}},Di=e=>e.map((e=>({name:e}))),Ni=class extends Li{constructor(e){super(e),Xt(this,"_eventsPrefix",rr),Xt(this,"subscribeMethod",`${rr}.subscribe`),this._attachListeners(""),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:ji})}_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:Di(r)}}_setSubscribeParams(e){this.subscribeParams=Ht(Ht({},this.subscribeParams),e)}_getSubscribeParams({channels:e}){return Ht({},this._getChannelsParam(e,"subscribe"))}_getUnsubscribeParams({channels:e}){const t=this._getChannelsParam(e,"unsubscribe");return Ht({},t)}_checkMissingSubscriptions(){0===this.getSubscriptions().length&&(this.logger.info("Subscribe was called before any listeners were attached. Move `.subscribe()` right after your event listeners to suppress this message."),this.once("message",(()=>{})))}async subscribe(e){this._checkMissingSubscriptions();const t=this._getSubscribeParams({channels:e});return this._setSubscribeParams(t),super.subscribe()}async unsubscribe(e){if("unknown"===this._sessionAuthStatus||"unauthorized"===this._sessionAuthStatus)throw new Error("You must be authenticated to unsubscribe from a channel");const t=this._getUnsubscribeParams({channels:e});return new Promise((async(e,r)=>{const o=this.getSubscriptions();if(o.length>0){const e={method:`${rr}.unsubscribe`,params:qt(Ht({},t),{events:o})};try{await this.execute(e)}catch(e){return r(e)}}else this.logger.warn("`unsubscribe()` was called without any listeners attached.");return e()}))}updateToken(e){return new Promise(((t,r)=>{this.once("session.auth_error",(e=>{r(e)})),this.once("session.connected",(()=>{t()})),this.store.dispatch(Xr.reauthAction({token:e}))}))}publish(e){return this.execute({method:`${rr}.publish`,params:e})}async getAllowedChannels(){await this._waitUntilSessionAuthorized();const e=this.select(rn);return e&&"channels"in e&&e.channels?e.channels:{}}extendEventName(e){return`${rr}.${e}`}},Wi=e=>on({store:e.store,Component:Ni})(e),Vi=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}},Ui=function*(e){ur().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=yr(qt(Ht({},r),{channel:e})),i=new zi(n);t.baseEmitter.emit("chat.message",i);break}case"chat.member.joined":case"chat.member.updated":case"chat.member.left":{const{member:e}=o,n=yr(e),i=new Hi(n);t.baseEmitter.emit(r,i);break}default:ur().warn(`Unknown chat event: "${r}"`)}}const n=e=>e.type.startsWith("chat.");for(;;){const e=yield Ve(r,n);yield Fe(o,e)}ur().trace("chatWorker ended")},$i=class extends Ni{constructor(e){super(e),Xt(this,"_eventsPrefix",tr),Xt(this,"subscribeMethod",`${tr}.subscribe`)}initWorker(){this.runWorker("chat",{worker:Ui})}},Bi=kr($i,{publish:Pi,getMembers:Mi,getMessages:Ii,setMemberState:xi,getMemberState:Ai}),Fi=e=>on({store:e.store,Component:Bi})(e),zi=class extends Vi{get member(){return this.payload.member}},Hi=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:{}}},qi={};Qt(qi,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Gi,memberPositionWorker:()=>Xi,memberUpdatedWorker:()=>Ji});var Ki=function*(e,t,r){yield Ue(r,{type:e,payload:t})};function*Qi(e){const{action:t,memberList:r,channels:{pubSubChannel:o},dispatcher:n=Ki}=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)?(Yi({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("video.member.updated",t,o);else if(void 0===i[e]){const t=Yi({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==n?void 0:n("video.member.updated",t,o)}}function*Ji({action:e,channels:t,memberList:r,dispatcher:o=Ki}){var n,i;const s=e.payload.member.id,a=Yi({memberList:r,memberId:s,currentPosition:null==(i=null==(n=r.get(s))?void 0:n.member)?void 0:i.current_position});if(!a)return;const{member:{updated:c=[]}}=e.payload,d=qt(Ht({},a),{member:Ht(Ht({},a.member),e.payload.member)});r.set(s,d);for(const r of c){const n=`${e.type}.${r}`;yield null==o?void 0:o(n,d,t.pubSubChannel)}yield null==o?void 0:o(e.type,d,t.pubSubChannel)}var Gi=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Xi=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:n,dispatcher:i=Ki}){if(!r)return;const{swEventChannel:s}=t;let a=Zi(r);const c=e=>{a.has(e.member.id)||a.set(e.member.id,e)};for(;;){const r=yield Ve(s,(t=>!("video.member.updated"!==t.type&&"video.layout.changed"!==t.type&&"video.member.joined"!==t.type&&"video.member.left"!==t.type||Fo(t)!==e._eventsNamespace&&Fo(t)!==e.roomSessionId)));switch(r.type){case"video.member.updated":c(r.payload),yield Fe(Ji,{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 Fe(Qi,{action:r,channels:t,memberList:a,instance:e,dispatcher:i})}}},Yi=({memberList:e,memberId:t,currentPosition:r})=>{const o=e.get(t);if(!o)return;if(!r)return o;const n=qt(Ht({},o),{member:qt(Ht({},null==o?void 0:o.member),{current_position:r})});return e.set(t,n),n},Zi=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:()=>ns,configureJestStore:()=>os,createMockedLogger:()=>rs,createPubSubChannel:()=>as,createSessionChannel:()=>ds,createSwEventChannel:()=>cs,rpcConnectResultVRT:()=>ss,wait:()=>is});var es="8f0a119a-cda7-4497-a47d-c81493b824d4",ts="<VRT>",rs=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),os=e=>nn(Ht({userOptions:{project:es,token:ts,devTools:!1,emitter:new Lt},SessionConstructor:Io,runSagaMiddleware:!1},e)),ns=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Lt,r=nn({userOptions:{project:es,token:ts,devTools:!1,emitter:t},SessionConstructor:jest.fn().mockImplementation((()=>e))});return r.dispatch(Xr.initAction()),r.dispatch(Xr.authSuccessAction()),{store:r,session:e,emitter:t,destroy:()=>r.dispatch(Xr.destroyAction())}},is=e=>new Promise((t=>{setTimeout(t,e)})),ss={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"}]},as=()=>lt(),cs=()=>lt(),ds=()=>ct(),ls=Ht({},Xo);async function us(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new Ho(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new qo(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const hs=({baseUrl:e,timeout:t=3e4,...r},o=us)=>async(n,i)=>{const s={...i?.body?{"Content-Type":"application/json"}:{},...r.headers,...i?.headers},a=ps({...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(ms({path:n,baseUrl:e,searchParams:i?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},ps=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}),{}),ms=({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()},gs=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,fs=()=>{if(!gs())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},vs=()=>fs().getSupportedConstraints(),ys=e=>e&&e instanceof MediaStream,bs=()=>"sinkId"in HTMLMediaElement.prototype,_s=async(e,t)=>{if(null!==e)if("string"==typeof t)if(bs())try{return await e.setSinkId(t)}catch(e){throw"SecurityError"===e.name?ur().error(`You need to use HTTPS for selecting audio output device: ${e}`):ur().error(`Error: ${e}`),e}else ur().warn("Browser does not support output device selection.");else ur().warn(`Invalid speaker deviceId: '${t}'`);else ur().warn("No HTMLMediaElement to attach the speakerId")},Ss=e=>{var t;ys(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(ws))},ws=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},ks={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},Cs=e=>{if(e)return ks[e]},Es=()=>fs().enumerateDevices(),Ts=async e=>{let t=await Es().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},Ps=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 Ts(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(ur().warn(`No ${e} devices to check for permissions!`),null)})(Cs(e))},Is=()=>Ps("camera"),Ms=()=>Ps("microphone"),Rs=()=>Ps("speaker"),xs=async(e={audio:!0,video:!0})=>{var t;try{const t=fs().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(Ms()),(null==e?void 0:e.video)&&t.push(Is()),!!t.length&&(await Promise.all(t)).every(Boolean)})(e);if(r){const e=new Error("Timeout reading from your devices");return await Pr(t,5e3,e)}return await t}catch(r){switch(r.name){case"Error":ur().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":ur().error("No media tracks of the type specified were found that satisfy the given constraints.");break;case"NotReadableError":ur().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":ur().error(`The constraint: ${r.constraint} cannot be met by the selected device.`),ur().info("List of available constraints:",vs());break;case"NotAllowedError":ur().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?ur().error('Constraints can\'t be empty nor have "video" and "audio" set to false.'):ur().error("Please check that you are calling this method from a secure context (using HTTPS rather than HTTP).");break;case"SecurityError":ur().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}},As=e=>fs().getDisplayMedia(e),Os=async(e,t=!1)=>Ls(e,t),js=(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))}))},Ls=async(e,t=!1)=>{let r;if(!1===await Ps(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await xs(t)}var o;const n=await Ts(Cs(e));return r&&Ss(r),!0===t?n:js(n)},Ds=()=>Ls("speaker"),Ns=async(e,t,r)=>{const o=await Ls(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},Vs={camera:Is,microphone:Ms,speaker:Rs},Us=["camera","microphone","speaker"],$s=`Allowed targets are: '${Us.join("', '")}'`,Bs={speaker:bs},Fs=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:Us).filter((e=>!!Us.includes(e)||(ur().warn(`We'll ignore the "${e}" target as it is not allowed. ${$s}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${$s}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>Vs[e]())))).reduce(((e,r,o)=>{var n;const i=t[o];return e[!(i in Bs)||(null===(n=Bs[i])||void 0===n?void 0:n.call(Bs))?"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(", ")}. `:"";ur().warn(`${e}${t}We'll be watching for the following targets instead: "${i.join(", ")}"`)}return ur().debug(`Watching these targets: "${i.join(", ")}"`),i})({targets:e.targets}),r=new Lt,o=await Es(),n=null==t?void 0:t.reduce(((e,t)=>{const r=Cs(t);return r&&e.push(r),e}),[]);let i=js(o,{excludeDefault:!0,targets:n});return fs().addEventListener("devicechange",(async()=>{const e=await Es(),t=i,o=js(e,{excludeDefault:!0,targets:n});i=o;const s=((e,t)=>{const r=Ws(e),o=Ws(e),n=[];ur().debug("[_getDeviceListDiff] <- oldDevices",e),ur().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},zs=()=>Fs({targets:["speaker"]}),Hs=e=>"function"==typeof(null==e?void 0:e.getTracks),qs=async e=>(await Ds()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e)),Ks=e=>{ur().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return xs(e)},Qs=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:o=""}=e;if(r){const e=await Ns(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 Ns(i,s,"camera").catch((e=>null));e&&("boolean"==typeof n&&(n={}),n.deviceId={exact:e})}return{audio:t,video:n}};var Js={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}(Js);var Gs=Js.exports;const Xs=e=>/^m=audio/.test(e),Ys=e=>/^m=video/.test(e),Zs=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 ea{constructor(e,t){this.call=e,this.type=t,this.uuid=S(),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&&ys(this.options.localStream)&&(this._localStream=this.options.localStream),this.rtcConfigPolyfill=this.config}get logger(){return ur()}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:this.call.iceServers,sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.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&&(ws(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 Qs(this.options),n=await Ks({[e]:o[e]});if(n&&ys(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 ur().warn(`Missing receivers to inspect media for RTCPeer "${e.uuid}"`);ur().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&&(ur().trace(`audio inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),d=e.packetsReceived),"inbound-rtp"===e.type&&"video"===e.kind&&e.trackIdentifier===o&&(ur().trace(`video inbound-rtp: packetsReceived: ${e.packetsReceived} (at ${e.lastPacketReceivedTimestamp})`),l=e.packetsReceived)}))}catch(e){ur().warn("getStats error",e)}finally{d&&d<=r&&l&&l<=o?(ur().warn(`audioPacketsReceived: ${d} - previousAudioValue: ${r}`),ur().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}){this._rejectStartMethod({code:e,message:t}),this.stop()}async onRemoteSdp(e){if(this._processingRemoteSDP||this.remoteSdp&&this.remoteSdp===e)this.logger.warn("Ignore same remote SDP",e);else try{this._processingRemoteSDP=!0;const t=this.isOffer?"answer":"offer";await this._setRemoteDescription({sdp:e,type:t}),this._processingRemoteSDP=!1,this.isOffer&&this._resolveStartMethod(),this.resetNeedResume()}catch(e){this.logger.error(`Error handling remote SDP on call ${this.call.id}:`,e),this.call.hangup(),this._rejectStartMethod(e)}}_setupRTCPeerConnection(){this.instance||(this.instance=new window.RTCPeerConnection(this.config),this._attachListeners())}async start(){return new Promise((async(e,t)=>{this._resolveStartMethod=e,this._rejectStartMethod=t;try{this._localStream=await this._retrieveLocalStream()}catch(e){return this._rejectStartMethod(e),this.call.setState("hangup")}this._setupRTCPeerConnection();let r=!1;if(this._localStream&&ys(this._localStream)){const e=this._localStream.getAudioTracks();this.logger.debug("Local audio tracks: ",e);const t=this._localStream.getVideoTracks();if(this.logger.debug("Local video tracks: ",t),r=Boolean(e.length||t.length),this.isOffer&&"function"==typeof this.instance.addTransceiver){const r={direction:this.options.negotiateAudio?"sendrecv":"sendonly",streams:[this._localStream]};this.logger.debug("Applying audioTransceiverParams",r),e.forEach((e=>{this.instance.addTransceiver(e,r)}));const o={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(o.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",o),t.forEach((e=>{this.instance.addTransceiver(e,o)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),o.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",o)}}else if("function"==typeof this.instance.addTrack){const r=this._localStream;e.forEach((e=>this.instance.addTrack(e,r))),t.forEach((e=>this.instance.addTrack(e,r)))}else this.instance.addStream(this._localStream)}this.isOffer?(this.options.negotiateAudio&&this._checkMediaToNegotiate("audio"),this.options.negotiateVideo&&this._checkMediaToNegotiate("video"),this._supportsAddTransceiver()||r||this.startNegotiation()):this.startNegotiation()}))}detachAndStop(){var e;"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getTransceivers)&&this.instance.getTransceivers().forEach((e=>{e.sender.track&&e.sender.track.stop(),e.receiver.track&&e.receiver.track.stop()})),this.stop()}stop(){var e,t,r;null===(e=this._localStream)||void 0===e||e.getTracks().forEach((e=>e.stop())),null===(t=this._remoteStream)||void 0===t||t.getTracks().forEach((e=>e.stop())),null===(r=this.instance)||void 0===r||r.close(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this),this.isAnswer&&this._resolveStartMethod()}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Gs.getMediaSections(e);for(const e of r)if(!Gs.splitLines(e).some((e=>0===e.indexOf("a=candidate")&&t.test(e))))return!1;return!0}catch(e){return ur().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=Zs(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=Zs(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r);if(o.findIndex(Xs)<o.findIndex(Ys))return e;const n=e.split(r),i=n.findIndex(Xs),s=n.findIndex(Ys),a=n.slice(i,s),c=n.slice(s,n.length-1);return[...n.slice(0,i),...c,...a,""].join(r)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(ys(this.options.localStream))return this.options.localStream;const e=await Qs(this.options);return Ks(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,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 P(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function I(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?P(Object(r),!0).forEach((function(t){E(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):P(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function 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),I(I({},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"),F=N("SAGA_ACTION"),H=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,F,{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 Pe(e){return{name:e.name||"anonymous",location:Ie(e)}}function Ie(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 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 Ne(Le,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 Ve(Fe.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[F]?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,Pe(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}:Pe(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===H?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 Pt(e){var t=pe((function(e){return e.cancelledTasks}),e);return t.length?["Tasks cancelled due to error:"].concat(t).join("\n"):""}var It=null,Tt=[],Mt=function(e){e.crashedEffect=It,Tt.push(e)},Rt=function(){It=null,Tt.length=0},xt=function(e){It=e},Ot=function(){var e,t=Tt[0],r=Tt.slice(1),o=t.crashedEffect?(e=Ie(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)})),[Pt(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,Pe(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,Ft=Object.prototype.hasOwnProperty,Ht=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={}))Ft.call(t,r)&&qt(e,r,t[r]);if(zt)for(var r of zt(t))Ht.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)Ft.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&zt)for(var o of zt(e))t.indexOf(o)<0&&Ht.call(e,o)&&(r[o]=e[o]);return r},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))Ft.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"],Pr=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)||Ir(t)||(e=>e.includes("session."))(t)?null:Cr.find((e=>t.startsWith(e)))||t}return e}));return Array.from(new Set(t)).filter(Boolean)},Ir=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},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}}),Fr={};Qt(Fr,{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 Hr={};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(Hr,{configureStore:()=>Gr,createAction:()=>qr}),Yt(Hr,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"});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.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}})))}_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:()=>Fo,createAction:()=>qr,createCatchableSaga:()=>Io,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,Hr.combineReducers)({components:So,session:go}),Co={};Qt(Co,{createCatchableSaga:()=>Io,createRestartableSaga:()=>Eo,eventChannel:()=>ut});var Eo=e=>function*(){He((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)}}))},Po=e=>lr().error("Catchable Saga Error",e),Io=(e,t=Po)=>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=Io((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 Fe(o,r)}),(e=>{lr().error("Channel Error",e)}));for(;;)try{for(;;){const t=yield Ue(e);yield Fe(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 Fe(xo,{session:i,sessionChannel:a,swEventChannel:s});const d=yield Fe(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 Fe(Wo,Jt(Kt({},e),{action:o}));break;case to.type:r.emit("session.expiring");break;case Yr.type:yield Fe(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,Fo=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}},Ho=()=>new Wt;Yt(bo,Hr);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=Ho();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 Pr(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:()=>Xn,RoomSessionRecordingAPI:()=>Gn,RoomSessionStreamAPI:()=>Zn,audioMuteMember:()=>Rn,audioUnmuteMember:()=>xn,createRoomSessionPlaybackObject:()=>Yn,createRoomSessionRecordingObject:()=>Qn,createRoomSessionStreamObject:()=>ei,deafMember:()=>jn,deleteMemberMeta:()=>Jn,deleteMeta:()=>In,demote:()=>$n,getLayouts:()=>ln,getMemberMeta:()=>Hn,getMembers:()=>un,getMeta:()=>Cn,getPlaybacks:()=>wn,getRecordings:()=>bn,getStreams:()=>Tn,hideVideoMuted:()=>mn,lock:()=>fn,play:()=>Sn,promote:()=>Un,removeAllMembers:()=>Fn,removeMember:()=>zn,setDeaf:()=>Dn,setHideVideoMuted:()=>yn,setInputSensitivityMember:()=>Vn,setInputVolumeMember:()=>Wn,setLayout:()=>hn,setMemberMeta:()=>qn,setMemberPosition:()=>Bn,setMeta:()=>En,setOutputVolumeMember:()=>Nn,setPositions:()=>pn,showVideoMuted:()=>gn,startRecording:()=>_n,startStream:()=>Mn,undeafMember:()=>Ln,unlock:()=>vn,updateMemberMeta:()=>Kn,updateMeta:()=>Pn,videoMuteMember:()=>On,videoUnmuteMember:()=>An});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=Qn({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=Qn({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=Yn({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=Yn({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"),Pn=kn("video.update_meta"),In={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=ei({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=ei({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=dn("video.member.audio_mute",{transformResolve:an}),xn=dn("video.member.audio_unmute",{transformResolve:an}),On=dn("video.member.video_mute",{transformResolve:an}),An=dn("video.member.video_unmute",{transformResolve:an}),jn=dn("video.member.deaf",{transformResolve:an}),Ln=dn("video.member.undeaf",{transformResolve:an}),Dn={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})}},Wn=dn("video.member.set_input_volume",{transformResolve:an}),Nn=dn("video.member.set_output_volume",{transformResolve:an}),Vn=dn("video.member.set_input_sensitivity",{transformResolve:an}),Un={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})}},$n={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})}},Bn=dn("video.member.set_position",{transformResolve:an}),zn={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})}},Hn=dn("video.member.get_meta",{transformResolve:({meta:e})=>({meta:e})}),qn=dn("video.member.set_meta",{transformResolve:an}),Kn=dn("video.member.update_meta",{transformResolve:an}),Jn=dn("video.member.delete_meta",{transformResolve:an}),Gn=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")}})}},Qn=e=>Fo({store:e.store,Component:Gn})(e),Xn=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)}})}},Yn=e=>Fo({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.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")}})}},ei=e=>Fo({store:e.store,Component:Zn})(e),ti={};Qt(ti,{BaseChatAPI:()=>bi,BaseChatConsumer:()=>yi,ChatMember:()=>Si,ChatMessage:()=>wi,createBaseChatObject:()=>_i,getMemberState:()=>li,getMembers:()=>ai,getMessages:()=>si,publish:()=>ii,setMemberState:()=>di});var ri=()=>{},oi=(e,t={})=>({value:function(r={}){return this.execute({method:e,params:r},t)}}),ni=(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)}}),ii=oi("chat.publish",{transformResolve:ri}),si=oi("chat.messages.get",{transformResolve:e=>({messages:e.messages.map((e=>vr(e))),cursor:e.cursor})}),ai=oi("chat.members.get",{transformResolve:e=>({members:e.members.map((e=>vr(e)))})}),ci=e=>{const t=(r=null==e?void 0:e.channels,Array.isArray(r)||"string"==typeof r?(e=>{const t=!e||Array.isArray(e)?e:[e];return Array.isArray(t)?t.map((e=>({name:e}))):[]})(e.channels):void 0);var r;return Jt(Kt({},e),{channels:t})},di=ni("chat.member.set_state",{transformResolve:ri,transformParams:ci}),li=ni("chat.member.get_state",{transformResolve:e=>({channels:e.channels}),transformParams:ci}),ui={};Qt(ui,{BasePubSubConsumer:()=>mi,PubSubMessage:()=>fi,createBasePubSubObject:()=>gi});var hi=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 fi(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 Fe(o,e)}lr().trace("pubSubWorker ended")},pi=e=>e.map((e=>({name:e}))),mi=class extends Yo{constructor(e){super(e),Zt(this,"subscribeMethod",`${rr}.subscribe`),this.initWorker()}initWorker(){this.runWorker("pubSub",{worker:hi})}_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:pi(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 Pr(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(Fr.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:{}}},gi=e=>Fo({store:e.store,Component:mi})(e),fi=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}},vi=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 wi(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 Si(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 Fe(o,e)}lr().trace("chatWorker ended")},yi=class extends mi{constructor(e){super(e),Zt(this,"subscribeMethod","chat.subscribe")}initWorker(){this.runWorker("chat",{worker:vi})}},bi=_r(yi,{publish:ii,getMembers:ai,getMessages:si,setMemberState:di,getMemberState:li}),_i=e=>Fo({store:e.store,Component:bi})(e),wi=class extends fi{get member(){return this.payload.member}},Si=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:{}}},ki={};Qt(ki,{MEMBER_POSITION_COMPOUND_EVENTS:()=>Ii,memberPositionWorker:()=>Ti,memberUpdatedWorker:()=>Pi});var Ci=function*(e,t,r){r.emit(e,t)};function*Ei(e){const{action:t,memberList:r,instance:o,dispatcher:n=Ci}=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)?(Mi({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("video.member.updated",t,o);else if(void 0===i[e]){const t=Mi({memberList:r,memberId:e,currentPosition:"off-canvas"});if(!t)return;yield null==n?void 0:n("video.member.updated",t,o)}}function*Pi({action:e,memberList:t,instance:r,dispatcher:o=Ci}){var n,i;const s=e.payload.member.id,a=Mi({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);for(const t of c){const n=`${e.type}.${t}`;yield null==o?void 0:o(n,d,r)}yield null==o?void 0:o(e.type,d,r)}var Ii=new Map([["video.member.updated",["video.layout.changed","video.member.joined","video.member.left"]]]),Ti=function*({instance:e,channels:t,initialState:r,getSession:o,instanceMap:n,dispatcher:i=Ci}){if(!r)return;const{swEventChannel:s}=t;let a=Ri(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 Fe(Pi,{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 Fe(Ei,{action:r,channels:t,memberList:a,instance:e,dispatcher:i})}}},Mi=({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},Ri=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:()=>Li,configureJestStore:()=>ji,createMockedLogger:()=>Ai,createSessionChannel:()=>Vi,createSwEventChannel:()=>Ni,rpcConnectResultVRT:()=>Wi,wait:()=>Di});var xi="8f0a119a-cda7-4497-a47d-c81493b824d4",Oi="<VRT>",Ai=()=>({fatal:jest.fn(),error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),trace:jest.fn(),wsTraffic:jest.fn()}),ji=e=>qo(Kt({userOptions:{project:xi,token:Oi,devTools:!1,emitter:new Wt},SessionConstructor:vo,runSagaMiddleware:!1},e)),Li=()=>{const e={dispatch:console.log,connect:jest.fn(),disconnect:jest.fn(),execute:jest.fn()},t=new Wt,r=qo({userOptions:{project:xi,token:Oi,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())}},Di=e=>new Promise((t=>{setTimeout(t,e)})),Wi={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"}]},Ni=()=>ht(),Vi=()=>lt(),Ui=Kt({},No);async function $i(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 Bi=({baseUrl:e,timeout:t=3e4,...r},o=$i)=>async(n,i)=>{const s={...i?.body?{"Content-Type":"application/json"}:{},...r.headers,...i?.headers},a=zi({...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(Fi({path:n,baseUrl:e,searchParams:i?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},zi=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}),{}),Fi=({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()},Hi=()=>"undefined"!=typeof navigator&&!!navigator.mediaDevices,qi=()=>{if(!Hi())throw new Error("The media devices API isn't supported in this environment");return navigator.mediaDevices},Ki=()=>qi().getSupportedConstraints(),Ji=e=>e&&e instanceof MediaStream,Gi=()=>"sinkId"in HTMLMediaElement.prototype,Qi=async(e,t)=>{if(null!==e)if("string"==typeof t)if(Gi())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")},Xi=e=>{var t;Ji(e)&&(null===(t=null==e?void 0:e.getTracks())||void 0===t||t.forEach(Yi))},Yi=e=>{e&&"live"===e.readyState&&(e.stop(),e.dispatchEvent(new Event("ended")))},Zi={camera:"videoinput",microphone:"audioinput",speaker:"audiooutput"},es=e=>{if(e)return Zi[e]},ts=()=>qi().enumerateDevices(),rs=async e=>{let t=await ts().catch((e=>[]));return e&&(t=t.filter((({kind:t})=>t===e))),t},os=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 rs(e);return t.length?t.every((({deviceId:e,label:t})=>Boolean(e&&t))):(lr().warn(`No ${e} devices to check for permissions!`),null)})(es(e))},ns=()=>os("camera"),is=()=>os("microphone"),ss=()=>os("speaker"),as=async(e={audio:!0,video:!0})=>{var t;try{const t=qi().getUserMedia(e),r=await(async e=>{const t=[];return(null==e?void 0:e.audio)&&t.push(is()),(null==e?void 0:e.video)&&t.push(ns()),!!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:",Ki());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}},cs=e=>qi().getDisplayMedia(e),ds=async(e,t=!1)=>us(e,t),ls=(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))}))},us=async(e,t=!1)=>{let r;if(!1===await os(e)){const t={audio:!(o=e)||"all"===o||"microphone"===o||"speaker"===o,video:!o||"all"===o||"camera"===o};r=await as(t)}var o;const n=await rs(es(e));return r&&Xi(r),!0===t?n:ls(n)},hs=()=>us("speaker"),ps=async(e,t,r)=>{const o=await us(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},ms=e=>{const t=new Map;return e.forEach((e=>{e.deviceId&&t.set(e.deviceId,e)})),t},gs={camera:ns,microphone:is,speaker:ss},fs=["camera","microphone","speaker"],vs=`Allowed targets are: '${fs.join("', '")}'`,ys={speaker:Gi},bs=async(e={})=>{const t=await(async e=>{var t;const r=(null!==(t=e.targets)&&void 0!==t?t:fs).filter((e=>!!fs.includes(e)||(lr().warn(`We'll ignore the "${e}" target as it is not allowed. ${vs}.`),!1)));if(!r.length)throw new Error(`At least one "target" is required for createDeviceWatcher(). ${vs}.`);const o=await(async e=>{const t=e.targets;return(await Promise.all(t.map((e=>gs[e]())))).reduce(((e,r,o)=>{var n;const i=t[o];return e[!(i in ys)||(null===(n=ys[i])||void 0===n?void 0:n.call(ys))?"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 ts(),n=null==t?void 0:t.reduce(((e,t)=>{const r=es(t);return r&&e.push(r),e}),[]);let i=ls(o,{excludeDefault:!0,targets:n});return qi().addEventListener("devicechange",(async()=>{const e=await ts(),t=i,o=ls(e,{excludeDefault:!0,targets:n});i=o;const s=((e,t)=>{const r=ms(e),o=ms(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},_s=()=>bs({targets:["speaker"]}),ws=e=>"function"==typeof(null==e?void 0:e.getTracks),Ss=async e=>(await hs()).find((t=>t.deviceId===e||"default"===t.deviceId&&""===e||""===t.deviceId&&"default"===e)),ks=e=>{lr().info("RTCService.getUserMedia",e);const{audio:t,video:r}=e;if(t||r)return as(e)},Cs=async e=>{let{audio:t=!0,micId:r}=e;const{micLabel:o=""}=e;if(r){const e=await ps(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 ps(i,s,"camera").catch((e=>null));e&&("boolean"==typeof n&&(n={}),n.deviceId={exact:e})}return{audio:t,video:n}};var Es={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}(Es);var Ps=Es.exports;const Is=e=>/^m=audio/.test(e),Ts=e=>/^m=video/.test(e),Ms=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 Rs{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&&Ji(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:this.call.iceServers,sdpSemantics:"unified-plan"},e);return this.logger.debug("RTC config",t),t}get localSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.localDescription)||void 0===t?void 0:t.sdp}get remoteSdp(){var e,t;return null===(t=null===(e=this.instance)||void 0===e?void 0:e.remoteDescription)||void 0===t?void 0:t.sdp}get hasIceServers(){if(this.instance){const{iceServers:e=[]}=this.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&&(Yi(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 Cs(this.options),n=await ks({[e]:o[e]});if(n&&Ji(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())}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&&Ji(this._localStream)){const e=this._localStream.getAudioTracks();this.logger.debug("Local audio tracks: ",e);const t=this._localStream.getVideoTracks();if(this.logger.debug("Local video tracks: ",t),r=Boolean(e.length||t.length),this.isOffer&&"function"==typeof this.instance.addTransceiver){const r={direction:this.options.negotiateAudio?"sendrecv":"sendonly",streams:[this._localStream]};this.logger.debug("Applying audioTransceiverParams",r),e.forEach((e=>{this.instance.addTransceiver(e,r)}));const o={direction:this.options.negotiateVideo?"sendrecv":"sendonly",streams:[this._localStream]};if(this.isSimulcast&&(o.sendEncodings=["0","1","2"].map((e=>({active:!0,rid:e,scaleResolutionDownBy:6*Number(e)||1})))),this.logger.debug("Applying videoTransceiverParams",o),t.forEach((e=>{this.instance.addTransceiver(e,o)})),this.isSfu){const{msStreamsNumber:e=5}=this.options;this.logger.debug("Add ",e,"recvonly MS Streams"),o.direction="recvonly";for(let t=0;t<Number(e);t++)this.instance.addTransceiver("video",o)}}else if("function"==typeof this.instance.addTrack){const r=this._localStream;e.forEach((e=>this.instance.addTrack(e,r))),t.forEach((e=>this.instance.addTrack(e,r)))}else this.instance.addStream(this._localStream)}this.isOffer?(this.options.negotiateAudio&&this._checkMediaToNegotiate("audio"),this.options.negotiateVideo&&this._checkMediaToNegotiate("video"),this._supportsAddTransceiver()||r||this.startNegotiation()):this.startNegotiation()}))}detachAndStop(){var e;"function"==typeof(null===(e=this.instance)||void 0===e?void 0:e.getTransceivers)&&this.instance.getTransceivers().forEach((e=>{e.sender.track&&e.sender.track.stop(),e.receiver.track&&e.receiver.track.stop()})),this.stop()}stop(){var e,t,r;null===(e=this._localStream)||void 0===e||e.getTracks().forEach((e=>e.stop())),null===(t=this._remoteStream)||void 0===t||t.getTracks().forEach((e=>e.stop())),null===(r=this.instance)||void 0===r||r.close(),this.stopWatchMediaPackets()}_supportsAddTransceiver(){return"function"==typeof this.instance.addTransceiver}_checkMediaToNegotiate(e){if(!this._getSenderByKind(e)&&this._supportsAddTransceiver()){const t=this.instance.addTransceiver(e,{direction:"recvonly"});this.logger.debug("Add transceiver",e,t)}}async _sdpReady(){if(clearTimeout(this._iceTimeout),!this.instance.localDescription)return void this.logger.error("Missing localDescription",this.instance);const{sdp:e}=this.instance.localDescription;if(-1===e.indexOf("candidate"))return this.logger.debug("No candidate - retry \n"),void this.startNegotiation(!0);if(!this._sdpIsValid())return this.logger.info("SDP ready but not valid"),void this._onIceTimeout();this.instance.removeEventListener("icecandidate",this._onIce);try{await this.call.onLocalSDPReady(this),this.isAnswer&&this._resolveStartMethod()}catch(e){this._rejectStartMethod(e)}}_sdpIsValid(){return this.localSdp&&this.hasIceServers?(e=>{try{const t=/typ (?:srflx|prflx|relay)/,r=Ps.getMediaSections(e);for(const e of r)if(!Ps.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=Ms(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=Ms(e.sdp)),e.sdp&&this.instance.localDescription&&(e.sdp=((e,t)=>{const r="\r\n",o=this.instance.localDescription.sdp.split(r);if(o.findIndex(Is)<o.findIndex(Ts))return e;const n=e.split(r),i=n.findIndex(Is),s=n.findIndex(Ts),a=n.slice(i,s),c=n.slice(s,n.length-1);return[...n.slice(0,i),...c,...a,""].join(r)})(e.sdp));const t=e;return this.logger.debug("REMOTE SDP \n",`Type: ${e.type}`,"\n\n",e.sdp),this.instance.setRemoteDescription(t)}async _retrieveLocalStream(){if(Ji(this.options.localStream))return this.options.localStream;const e=await Cs(this.options);return ks(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 ta=e=>mr(e.type),ra=function*(e){ur().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:i}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=Lo.createCatchableSaga((function*(e){var t,o;const{id:n,method:a,params:c={}}=e.payload,{callID:d,nodeId:l}=c,u=r.getRTCPeerById(d);if(!u)return void ur().warn(`RTCPeer '${d}' not found for method: '${a}'`,c);const h=r.peer;switch(a){case"verto.media":case"verto.answer":u.uuid===(null==h?void 0:h.uuid)&&r.setState("verto.media"===a?"early":"active"),(null==c?void 0:c.sdp)&&u.onRemoteSdp(c.sdp),yield Ue(Ao.upsert({id:null===(t=e.payload.params)||void 0===t?void 0:t.callID,nodeId:null===(o=e.payload.params)||void 0===o?void 0:o.nodeId})),yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(n,a),node_id:l}});break;case"verto.bye":yield Be([r,r.onVertoBye],{rtcPeerId:d,byeCause:null==c?void 0:c.cause,byeCauseCode:null==c?void 0:c.causeCode,redirectDestination:null==c?void 0:c.redirectDestination}),yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(n,a),node_id:l}});break;case"verto.ping":{const{nodeId:e}=c,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}(c,["nodeId"]);yield Be([r,r.execute],{method:r._getRPCMethod(),params:{message:Jr(t),node_id:e}});break}case"verto.mediaParams":{if(!d||!c.mediaParams){ur().warn("Invalid mediaParams event",c);break}const{audio:e,video:t}=c.mediaParams;u&&t&&u.applyMediaConstraints("video",t),u&&e&&u.applyMediaConstraints("audio",e);break}case"verto.display":r._attachListeners(""),r.applyEmitterTransforms(),r.setActiveRTCPeer(s),yield Ue(i,{type:"verto.display",payload:e.payload.params});break;default:return ur().warn(`Unknown Verto method: ${a}`,c)}}),(e=>{ur().error("Verto Error",e)}));for(;;){const e=yield Ve(n,(e=>{var t;return!!ta(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield Fe(a,e)}ur().trace("vertoEventWorker ended")},oa=function*(e){ur().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:i}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield Ve(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===s));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(s),yield Ue(Ao.upsert({id:a.payload.call_id,roomId:a.payload.room_session.room_id,roomSessionId:a.payload.room_session.id,memberId:a.payload.member_id,previewUrl:a.payload.room_session.preview_url})),yield Ue(i,{type:"video.room.joined",payload:a.payload}),ur().debug("roomSubscribedWorker ended",s)},na=function*(e){ur().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 Ve(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));ur().debug("promoteDemoteWorker:",s.type,s.payload),yield Ue(Eo.updateAuthState(s.payload.authorization));const a=yield ze(ls.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(),ur().debug("promoteDemoteWorker ended",i)},ia=function*(e){ur().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield Ve([Xr.authSuccessAction.type,Xr.authErrorAction.type])).type){case Xr.authSuccessAction.type:yield Be([t,t.resume]);break;case Xr.authErrorAction.type:yield Be([t,t.setState],"hangup")}ur().debug("sessionAuthWorker ended")},sa={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},aa=Object.assign(Object.assign({},sa),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),ca={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},da={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:sa,video:ca,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class la extends dn{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const 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.setState("hangup"))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},da),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this.applyEmitterTransforms({local:!0}),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(ls.getIceServers)}get component(){return this.select((e=>mn.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(!ys(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;ws(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;ws(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(ls.getAuthState);return e&&Lr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new ea(this,"offer");this.appendRTCPeer(e),this.logger.debug("Run workers for the new RTCPeer",e.uuid),this.runRTCPeerWorkers(e.uuid),this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.updateConstraints({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.updateConstraints({audio:e})}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,o)=>{var n,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),ws(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),i=await xs(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 - "),ws(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:ra,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:oa,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:na,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new ea(this,"offer");try{this.runRTCPeerWorkers(this.peer.uuid),await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer||(this.peer=new ea(this,"answer"));try{this.runRTCPeerWorkers(this.peer.uuid),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(Xr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:ia})}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=Fr(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=Kr(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._attachListeners(""),this.applyEmitterTransforms(),this.setActiveRTCPeer(t)}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=Hr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t,node_id:this.nodeId});if(o.sdp||this.logger.error("UpdateMedia invalid SDP answer",o),this.logger.debug("UpdateMedia response",o),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(o.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=zr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t,node_id:this.nodeId})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}async hangupAll(){const e=this.callId;if(!e)throw new Error("Invalid RTCPeer ID to hangup");try{const t=zr(Object.assign({cause:"REJECT_ALL",causeCode:"825"},this.dialogParams(e)));await this.vertoExecute({message:t,callID:e,node_id:this.nodeId})}catch(e){this.logger.error("HangupAll error:",e)}finally{this.setState("hangup")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t,node_id:this.nodeId})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=ca),!0===this.options.audio&&(this.options.audio=this.options.screenShare?aa:sa)}_initPeer(){this.peer=new ea(this,this.options.remoteSdp?"answer":"offer")}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const ua=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{ur().error("Video Element Paused",e,t)}))})),e},ha=({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()}))})),pa=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ma=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},ga=({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()}},fa=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),va=Xr.createAction("swJs/audioSetSpeakerAction"),ya=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,i=ua(),s={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(ur().debug("Set localOverlay",e),n.set(this.id,e)):(ur().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return ur().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?ur().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):ur().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return ur().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 ur().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})=>{ur().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 ur().debug("Location not found"),void(a&&(ur().debug("Current layer not visible"),e.hide()));if(!a){ur().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=pa(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=ua();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const o=t.querySelector(".mcuLayers"),i=o?.querySelector(`#${a.id}`);return o&&!i?(ur().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void ur().debug("Build myLayer >> wait next")}const{top:c,left:d,width:l,height:u}=pa(s);ur().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){ur().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("_internal.mirror.video",(e=>{s.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{ur().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){ur().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){ur().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){ur().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(u=o(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),n.clear(),u?.cancel()}))}catch(e){ur().error("videoElementSaga",e)}};function*ba({element:e,room:t}){const r=Xr.getCustomSagaActionType(t.__uuid,va);for(;;){const o=yield Ve([r]);try{if(o.type===r){const r=yield Be(_s,e,o.payload);t.emit("_internal.speaker.updated",o.payload),t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),ur().error(e)}}}function*_a({track:e,element:t,speakerId:r,room:o}){fa({track:e,element:t}),r&&_s(t,r).catch((()=>{})),yield Fe(ba,{element:t,room:o})}function*Sa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ma({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void ur().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),ur().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(ur().debug("Wait for the MCU to be ready"),yield Be(ha,{element:o})),ur().debug("MCU is ready..");const c=ga({rootElement:e,video:o,paddingWrapper:i});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),s.style.display="block"}catch(e){ur().error("Handle video track error",e)}}const wa={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ka=kr(class extends la{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:yn.audioMuteMember,audioUnmute:yn.audioUnmuteMember,videoMute:yn.videoMuteMember,videoUnmute:yn.videoUnmuteMember,setMicrophoneVolume:yn.setInputVolumeMember,setInputVolume:yn.setInputVolumeMember,setInputSensitivity:yn.setInputSensitivityMember}),Ca=kr(class extends la{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:yn.audioMuteMember,audioUnmute:yn.audioUnmuteMember,videoMute:yn.videoMuteMember,videoUnmute:yn.videoUnmuteMember,setInputVolume:yn.setInputVolumeMember,setMicrophoneVolume:yn.setInputVolumeMember,setInputSensitivity:yn.setInputSensitivityMember}),Ea=()=>{},Ta="video.memberList.updated",Pa=_r({event:Ta}),Ia=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(Zt),e)),[]).join(".")})(Pa),Ma=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],Ra=e=>Ma.includes(e),xa=({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*Aa({pubSubChannel:e}){const t=new Map;function*r(r){const o={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:xa({action:r,memberList:t})};yield Ue(e,{type:Ia,payload:o})}for(;;){const t=yield Ve(e,(({type:e})=>Ra(e)));yield Fe(r,t)}}const Oa=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(Pa))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ar(Ma).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,Ea)}));const o=({members:t})=>{e.emit(Ta,{members:t})};return e.on(Ia,o),{cleanup:()=>{e.off(Ia,o)}}})(t,r);yield Fe(Aa,{pubSubChannel:e}),t.once("destroy",(()=>{o()}))},ja=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield Fe(qi.memberPositionWorker,e)},La=function*(e){ur().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 Ve(s,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield ze(mn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield Ue(Ao.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")})}ur().trace("childMemberJoinedWorker ended")},Da=kr(class extends la{_screenShareList=new Set;_deviceList=new Set;_mirrored;_audioEl;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}get deviceList(){return Array.from(this._deviceList)}get interactivityMode(){return this.select((({session:e})=>{const{authState:t}=e;return t?.join_as??""}))}get permissions(){return this.select((({session:e})=>{const{authState:t}=e;return t?.room?.scopes??[]}))}getEmitterTransforms(){return new Map([[["video.room.joined"],{type:"roomSession",instanceFactory:()=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})},playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})},streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[jr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[jr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[jr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>yn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>yr({...e.recording,room_session_id:this.roomSessionId})}],[[jr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>yn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>yr({...e.playback,room_session_id:this.roomSessionId})}],[[jr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[jr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>yn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>yr({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...qi.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Oa})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:ja,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:i=!0,layout:s,positions:a}=e,c=await As({audio:!0===n?wa: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=on({store:this.store,Component:ka})(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:La,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=on({store:this.store,Component:Ca})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:La,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("_internal.speaker.updated",(async e=>{const r=await qs(t),o=await qs(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(va(e))}_attachSpeakerTrackListener(){bs()&&zs().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 qs("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,console.log("listener attached!"),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("_internal.mirror.video",this._mirrored)}}}},{audioMute:yn.audioMuteMember,audioUnmute:yn.audioUnmuteMember,videoMute:yn.videoMuteMember,videoUnmute:yn.videoUnmuteMember,deaf:yn.deafMember,undeaf:yn.undeafMember,setInputVolume:yn.setInputVolumeMember,setOutputVolume:yn.setOutputVolumeMember,setMicrophoneVolume:yn.setInputVolumeMember,setSpeakerVolume:yn.setOutputVolumeMember,setInputSensitivity:yn.setInputSensitivityMember,removeMember:yn.removeMember,removeAllMembers:yn.removeAllMembers,getMembers:yn.getMembers,getLayouts:yn.getLayouts,setLayout:yn.setLayout,setPositions:yn.setPositions,setMemberPosition:yn.setMemberPosition,hideVideoMuted:yn.hideVideoMuted,showVideoMuted:yn.showVideoMuted,getRecordings:yn.getRecordings,startRecording:yn.startRecording,getPlaybacks:yn.getPlaybacks,play:yn.play,setHideVideoMuted:yn.setHideVideoMuted,getMeta:yn.getMeta,setMeta:yn.setMeta,updateMeta:yn.updateMeta,deleteMeta:yn.deleteMeta,getMemberMeta:yn.getMemberMeta,setMemberMeta:yn.setMemberMeta,updateMemberMeta:yn.updateMemberMeta,deleteMemberMeta:yn.deleteMemberMeta,promote:yn.promote,demote:yn.demote,getStreams:yn.getStreams,startStream:yn.startStream}),Na=function*(e){ur().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:o}=t;for(;;){const e=yield Ve(r,(e=>e.type.startsWith("video-manager.")));yield Ue(o,e)}};class Wa extends un{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Na})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>yr(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>yr(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>yr(e),payloadTransform:e=>yr(e)}]])}}class Va extends ln{_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(_a,{track:i.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){ur().error("audioElementSaga",e)}else ur().warn("`Audio` is not supported on this environment.")})({speakerId:i.speakerId})),t&&s.push(ya({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...i,store:this.store,emitter:this.emitter,customSagas:s},on({store:c.store,customSagas:c.customSagas,Component:Da})(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=ki.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Oi.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=on({store:e.store,Component:Wa})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Xr.reauthAction({token:e}))}}function Ua(e){this.message=e}(Ua.prototype=new Error).name="InvalidCharacterError";var $a="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Ua("'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 Ba(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($a(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 $a(t)}}function Fa(e){this.message=e}function za(e,t){if("string"!=typeof e)throw new Fa("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(Ba(e.split(".")[r]))}catch(e){throw new Fa("Invalid token specified: "+e.message)}}(Fa.prototype=new Error).name="InvalidTokenError";const Ha=()=>{if(window&&window.sessionStorage)return window.sessionStorage},qa=e=>{let t="";try{const r=za(e);t=r?.r??""}catch(e){t=""}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},Ka="function"==typeof CloseEvent?CloseEvent:class{constructor(e,t={}){this.type=e,Xt(this,"code"),Xt(this,"reason"),Xt(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 Qa extends Mo{options;WebSocketConstructor=WebSocket;CloseEventConstructor=Ka;agent="@signalwire/js/browser/3.23.3";tokenTyp;constructor(e){let t={};try{t=za(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}=qa(this.options.token);return e?(this.logger.trace("Search protocol for",e),Ha()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=qa(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),Ha()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=qa(this.options.token);return e?Ha()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=qa(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),Ha()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=qa(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),Ha()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),Ha()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),Ha()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}}const Ja=e=>{const t={...e,emitter:new Lt},r=nn({userOptions:t,SessionConstructor:Qa});return on({store:r,Component:Va})(t)},Ga={aspectRatio:{ideal:16/9}},Xa=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=Ja({...h});if(await p.connect(),!p)return;let m;if(s){const e=document.getElementById(s);e?m=e:(m=document.body,ur().warn(`We couldn't find an element with id: ${s}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ga: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){ur().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)})),Ya=["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"],Za=["member.joined","layout.changed"],ec=()=>{},tc=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,...m}=e;["audio","video"].forEach((t=>{t in e&&ur().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const g=!1!==e?.reattach,{callIdKey:f}=qa(m.token),v={joined:({call_id:e})=>{g&&f&&Ha()?.setItem(f,e)},init:()=>{g&&b.on("room.subscribed",v.joined),b.options.prevCallId=v.getPrevCallId()},destroy:()=>{g&&(b.off("room.subscribed",v.joined),f&&Ha()?.removeItem(f))},getPrevCallId:()=>{if(g&&f)return Ha()?.getItem(f)??void 0}},y=Ja(m),b=y.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:v.getPrevCallId()});b.once("destroy",(()=>{b.emit("room.left",{reason:b.leaveReason}),v.destroy(),y.disconnect()})),y.once("session.disconnected",(()=>{b.destroy()}));const _={join:e=>new Promise((async(o,n)=>{try{b.attachPreConnectWorkers(),await y.connect();const i=e?.audio??t,s=e?.video??r,a=y._sessionAuthState;if(ur().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;ur().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&&ur().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&ur().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&ur().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&ur().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 y.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`));ur().debug("Set mediaOptions",t),b.updateMediaOptions({audio:!!t.mustSendAudio&&(i||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}b.once("room.subscribed",(e=>{b.attachOnSubscribedWorkers(e),o(b)})),v.init(),Za.forEach((e=>b.once(e,ec))),await b.join()}catch(e){ur().error("RoomSession Join",e),y.disconnect(),n(e)}}))};return new Proxy(b,{get(e,t,r){if(t in _)return _[t];if(!e.active&&Ya.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 rc=Object.freeze({__proto__:null,RoomSession:tc,createRoomObject:Xa,joinRoom:e=>Xa({...e,autoJoin:!0}),createClient:Ja});class oc{options;httpClient;constructor(e){this.options=e,this.httpClient=hs({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 nc=function*(e){ur().debug("WSClientWorker started");const{channels:t,instance:r}=e,{swEventChannel:o}=t;for(ur().debug("WSClientWorker instance",r);;){const e=yield Ve(o,(e=>(ur().debug("WSClientWorker action",e),"webrtc.message"===e.type&&"verto.invite"===e.payload.method)));ur().debug("Build new call to answer",e)}ur().trace("WSClientWorker ended")};class ic{options;wsClient;logger=ur();constructor(e){this.options=e,this.wsClient=Ja({host:this.options.host,token:this.options.token,debug:{logWsTraffic:!0},logLevel:"debug"})}connect(){return this.wsClient.runWorker("WSClientWorker",{worker:nc}),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});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.emitter.once("verto.display",(()=>e(r))),r.once("room.subscribed",(()=>e(r))),await r.join()}catch(e){ur().error("WSClient call start",e),t(e)}})),t(r)}catch(e){ur().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",(()=>{ur().debug("RTC Connection Destroyed")})),e.attachPreConnectWorkers(),ur().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:Qr({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 sc{options;httpClient;constructor(e){this.options=e,this.httpClient=hs({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get httpHost(){const{host:e}=this.options;return e?`fabric.${e.split(".").splice(1).join(".")}`:"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 ac=e=>new Promise((async(t,r)=>{try{const r=new sc(e),o=new ic(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 cc=Object.freeze({__proto__:null,Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=hs({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 tc({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:oc,WSClient:ic,SignalWire:ac});const dc=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var lc=Object.freeze({__proto__:null,ChatMember:ki.ChatMember,ChatMessage:ki.ChatMessage,Client:function(e){const t=Ja(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:dc.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const uc=["getAllowedChannels","subscribe","publish"];var hc=Object.freeze({__proto__:null,PubSubMessage:Oi.PubSubMessage,Client:function(e){const t=Ja(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:uc.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}}),pc=Object.freeze({__proto__:null,getDevices:Ls,getCameraDevices:()=>Ls("camera"),getMicrophoneDevices:()=>Ls("microphone"),getSpeakerDevices:Ds,getDevicesWithPermissions:Os,getCameraDevicesWithPermissions:()=>Os("camera"),getMicrophoneDevicesWithPermissions:()=>Os("microphone"),getSpeakerDevicesWithPermissions:()=>Os("speaker"),checkPermissions:Ps,checkCameraPermissions:Is,checkMicrophonePermissions:Ms,checkSpeakerPermissions:Rs,requestPermissions:async e=>{try{const t=await xs(e);Ss(t)}catch(e){throw e}},createDeviceWatcher:Fs,createCameraDeviceWatcher:()=>Fs({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Fs({targets:["microphone"]}),createSpeakerDeviceWatcher:zs,supportsMediaDevices:gs,supportsGetUserMedia:()=>"function"==typeof fs().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof fs().getDisplayMedia,getUserMedia:xs,getDisplayMedia:As,enumerateDevices:Es,getSupportedConstraints:vs,supportsMediaOutput:bs,setMediaElementSinkId:_s,stopStream:Ss,stopTrack:ws,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Hs(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},xs(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Lt,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=>{ur().error("Error closing the AudioContext",e)})),Hs(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=lc,e.Fabric=cc,e.PubSub=hc,e.SWClient=oc,e.SignalWire=ac,e.Video=rc,e.WebRTC=pc,Object.defineProperty(e,"__esModule",{value:!0})}));
20
+ ***************************************************************************** */const xs=e=>pr(e.type),Os=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!!xs(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===i}));yield Fe(s,e)}lr().trace("vertoEventWorker ended")},As=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",js.call(r,a)),lr().debug("roomSubscribedWorker ended",i)};function js(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 Ls=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(Ui.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)},Ds=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")},Ws={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Ns=Object.assign(Object.assign({},Ws),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),Vs={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},Us={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Ws,video:Vs,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class $s 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({},Us),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(Ui.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(!Ji(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;Yi(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;Yi(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(Ui.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),Yi(t),t.stop(),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{this.logger.info("updateConstraints with",e),i=await as(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 - "),Yi(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:Os,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:As,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Ls,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(Fr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Ds})}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")}}dtmf(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}));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=Vs),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Ns:Ws)}_initPeer(){this.options.remoteSdp&&(this.peer=this._buildPeer("answer"))}_buildPeer(e){const t=new Rs(this,e);return this.appendRTCPeer(t),this.runRTCPeerWorkers(t.uuid),t}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const Bs=()=>{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},zs=({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()}))})),Fs=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),Hs=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},qs=({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()}},Ks=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),Js=Fr.createAction("swJs/audioSetSpeakerAction"),Gs=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,i=Bs(),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}=Fs(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=Bs();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}=Fs(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(Ys,{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*Qs({element:e,room:t}){const r=Fr.getCustomSagaActionType(t.__uuid,Js);for(;;){const o=yield Ue([r]);try{if(o.type===r){const r=yield ze(Qi,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*Xs({track:e,element:t,speakerId:r,room:o}){Ks({track:e,element:t}),r&&Qi(t,r).catch((()=>{})),yield Fe(Qs,{element:t,room:o})}function*Ys({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(Hs({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(zs,{element:o})),lr().debug("MCU is ready..");const c=qs({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 Zs={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ea=_r(class extends $s{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}),ta=_r(class extends $s{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}),ra=()=>{},oa="memberList.updated",na=(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:oa})),ia=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],sa=e=>ia.includes(e),aa=({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*ca({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=aa({action:e,memberList:r});t.emit(na,{room_session_id:o,members:n})}for(;;){const t=yield Ue(e,(({type:e})=>sa(e)));yield Fe(o,t)}}const da=function*({channels:{swEventChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(oa))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Pr(ia).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,ra)}));const o=({members:t})=>{e.emit(oa,{members:t})};return e.on(na,o),{cleanup:()=>{e.off(na,o)}}})(t,r);yield Fe(ca,{swEventChannel:e,instance:t}),t.once("destroy",(()=>{o()}))},la=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")},ua=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")},ha=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")},pa=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")},ma=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 He(ki.memberPositionWorker,{...e,instance:r,initialState:n});break;case"video.playback.started":case"video.playback.updated":case"video.playback.ended":return void(yield Fe(pa,{action:t,...e}));case"video.recording.started":case"video.recording.updated":case"video.recording.ended":return void(yield Fe(ha,{action:t,...e}));case"video.stream.ended":case"video.stream.started":return void(yield Fe(ua,{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 Fe(n,e)}lr().trace("videoWorker ended")},ga=_r(class extends $s{_screenShareList=new Set;_deviceList=new Set;_mirrored;_audioEl;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay,this.runWorker("videoWorker",{worker:ma})}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:da})}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 cs({audio:!0===n?Zs: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=Fo({store:this.store,Component:ea})(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:la,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=Fo({store:this.store,Component:ta})(s);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:la,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 Ss(t),o=await Ss(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(Js(e))}_attachSpeakerTrackListener(){Gi()&&_s().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 Ss("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 Pr(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}),fa=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")},va=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")},ya=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 Fe(fa,{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 Fe(va,{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 Fe(r,e)}lr().trace("videoManagerWorker ended")};class ba extends Yo{constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:ya})}getSubscriptions(){const e=this.eventNames().map((e=>`video-manager.${e}`));return Pr(e)}}class _a 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(Xs,{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(Gs({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...i,store:this.store,customSagas:s},Fo({store:c.store,customSagas:c.customSagas,Component:ga})(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=ti.createBaseChatObject({store:this.store})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=ui.createBasePubSubObject({store:this.store})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=Fo({store:e.store,Component:ba})(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}))}}function wa(e){this.message=e}(wa.prototype=new Error).name="InvalidCharacterError";var Sa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new wa("'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 ka(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(Sa(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 Sa(t)}}function Ca(e){this.message=e}function Ea(e,t){if("string"!=typeof e)throw new Ca("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(ka(e.split(".")[r]))}catch(e){throw new Ca("Invalid token specified: "+e.message)}}(Ca.prototype=new Error).name="InvalidTokenError";const Pa=()=>{if(window&&window.sessionStorage)return window.sessionStorage},Ia=e=>{let t="";try{const r=Ea(e);t=r?.r??""}catch(e){t=""}const r=Boolean(t);return{authStateKey:r&&`as-${t}`,protocolKey:r&&`pt-${t}`,callIdKey:r&&`ci-${t}`}},Ta="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 Ma extends yo{options;WebSocketConstructor=WebSocket;CloseEventConstructor=Ta;agent="@signalwire/js/browser/3.23.4";tokenTyp;constructor(e){let t={};try{t=Ea(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}=Ia(this.options.token);return e?(this.logger.trace("Search protocol for",e),Pa()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const{protocolKey:e}=Ia(this.options.token);e&&(this.logger.trace("Persist protocol",e,this.relayProtocol),Pa()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const{authStateKey:e}=Ia(this.options.token);return e?Pa()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const{authStateKey:t}=Ia(this.options.token);t&&(this.logger.trace("Persist auth state",t,e),Pa()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){const{protocolKey:e,authStateKey:t,callIdKey:r}=Ia(this.options.token);this.logger.debug("Cleaning up storage"),e&&(this.logger.debug("Remove protocolKey",e),Pa()?.removeItem(e)),t&&(this.logger.debug("Remove authStateKey",t),Pa()?.removeItem(t)),r&&(this.logger.debug("Remove callIdKey",r),Pa()?.removeItem(r))}super._onSocketClose(e)}isVRT(){return"VRT"===this.tokenTyp}}const Ra=e=>{const t={...e,emitter:Ho()},r=qo({userOptions:t,SessionConstructor:Ma});return Fo({store:r,Component:_a})(t)},xa={aspectRatio:{ideal:16/9}},Oa=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=Ra({...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?xa: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)})),Aa=["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"],ja=["member.joined","layout.changed"],La=()=>{},Da=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,...m}=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 g=!1!==e?.reattach,{callIdKey:f}=Ia(m.token),v={joined:({call_id:e})=>{g&&f&&Pa()?.setItem(f,e)},init:()=>{g&&b.on("room.subscribed",v.joined),b.options.prevCallId=v.getPrevCallId()},destroy:()=>{g&&(b.off("room.subscribed",v.joined),f&&Pa()?.removeItem(f))},getPrevCallId:()=>{if(g&&f)return Pa()?.getItem(f)??void 0}},y=Ra(m),b=y.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:v.getPrevCallId()});b.once("destroy",(()=>{b.emit("room.left",{reason:b.leaveReason}),v.destroy(),y.disconnect()})),y.session.once("session.disconnected",(()=>{b.destroy()}));const _={join:e=>new Promise((async(o,n)=>{try{b.attachPreConnectWorkers(),await y.connect();const i=e?.audio??t,s=e?.video??r,a=y._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 y.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),b.updateMediaOptions({audio:!!t.mustSendAudio&&(i||!0),video:!!t.mustSendVideo&&(s||!0),negotiateAudio:t.mustRecvAudio,negotiateVideo:t.mustRecvVideo})}b.once("room.subscribed",(()=>{o(b)})),v.init(),ja.forEach((e=>b.once(e,La))),await b.join()}catch(e){lr().error("RoomSession Join",e),y.disconnect(),n(e)}}))};return new Proxy(b,{get(e,t,r){if(t in _)return _[t];if(!e.active&&Aa.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 Wa=Object.freeze({__proto__:null,RoomSession:Da,createRoomObject:Oa,joinRoom:e=>Oa({...e,autoJoin:!0}),createClient:Ra});class Na{options;httpClient;constructor(e){this.options=e,this.httpClient=Bi({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 Va=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 Ua{options;wsClient;logger=lr();constructor(e){this.options=e,this.wsClient=Ra({host:this.options.host,token:this.options.token,debug:{logWsTraffic:!0},logLevel:"debug"})}connect(){return this.wsClient.runWorker("WSClientWorker",{worker:Va}),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});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 $a{options;httpClient;constructor(e){this.options=e,this.httpClient=Bi({baseUrl:`https://${this.httpHost}`,headers:{Authorization:`Bearer ${this.options.token}`}})}get httpHost(){const{host:e}=this.options;return e?`fabric.${e.split(".").splice(1).join(".")}`:"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 Ba=e=>new Promise((async(t,r)=>{try{const r=new $a(e),o=new Ua(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 za=Object.freeze({__proto__:null,Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=Bi({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 Da({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:Na,WSClient:Ua,SignalWire:Ba});const Fa=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ha=Object.freeze({__proto__:null,ChatMember:ti.ChatMember,ChatMessage:ti.ChatMessage,Client:function(e){const t=Ra(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Fa.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const qa=["getAllowedChannels","subscribe","publish"];var Ka=Object.freeze({__proto__:null,PubSubMessage:ui.PubSubMessage,Client:function(e){const t=Ra(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:qa.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}}),Ja=Object.freeze({__proto__:null,getDevices:us,getCameraDevices:()=>us("camera"),getMicrophoneDevices:()=>us("microphone"),getSpeakerDevices:hs,getDevicesWithPermissions:ds,getCameraDevicesWithPermissions:()=>ds("camera"),getMicrophoneDevicesWithPermissions:()=>ds("microphone"),getSpeakerDevicesWithPermissions:()=>ds("speaker"),checkPermissions:os,checkCameraPermissions:ns,checkMicrophonePermissions:is,checkSpeakerPermissions:ss,requestPermissions:async e=>{try{const t=await as(e);Xi(t)}catch(e){throw e}},createDeviceWatcher:bs,createCameraDeviceWatcher:()=>bs({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>bs({targets:["microphone"]}),createSpeakerDeviceWatcher:_s,supportsMediaDevices:Hi,supportsGetUserMedia:()=>"function"==typeof qi().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof qi().getDisplayMedia,getUserMedia:as,getDisplayMedia:cs,enumerateDevices:ts,getSupportedConstraints:Ki,supportsMediaOutput:Gi,setMediaElementSinkId:Qi,stopStream:Xi,stopTrack:Yi,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(ws(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},as(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)})),ws(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=Ha,e.Fabric=za,e.PubSub=Ka,e.SWClient=Na,e.SignalWire=Ba,e.Video=Wa,e.WebRTC=Ja,Object.defineProperty(e,"__esModule",{value:!0})}));
21
21
  //# sourceMappingURL=index.umd.js.map