@nethesis/phone-island 1.1.4 → 1.1.5-dev.2

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 (451) hide show
  1. package/dist/App.js.map +1 -1
  2. package/dist/components/AlertView/index.js.map +1 -1
  3. package/dist/components/AudioBars.js.map +1 -1
  4. package/dist/components/AudioPlayerView/PlayerFooterActions.js +1 -1
  5. package/dist/components/AudioPlayerView/PlayerFooterActions.js.map +1 -1
  6. package/dist/components/AudioPlayerView/Progress.js.map +1 -1
  7. package/dist/components/AudioPlayerView/index.js +1 -1
  8. package/dist/components/AudioPlayerView/index.js.map +1 -1
  9. package/dist/components/CallView/Actions.js +1 -1
  10. package/dist/components/CallView/Actions.js.map +1 -1
  11. package/dist/components/CallView/BackCall.js +1 -1
  12. package/dist/components/CallView/BackCall.js.map +1 -1
  13. package/dist/components/CallView/DeviceIcon.js +1 -1
  14. package/dist/components/CallView/DeviceIcon.js.map +1 -1
  15. package/dist/components/CallView/DisplayName.js +1 -1
  16. package/dist/components/CallView/DisplayName.js.map +1 -1
  17. package/dist/components/CallView/DisplayNameUtils.js.map +1 -1
  18. package/dist/components/CallView/Number.js +1 -1
  19. package/dist/components/CallView/Number.js.map +1 -1
  20. package/dist/components/CallView/NumberPopover.js +1 -1
  21. package/dist/components/CallView/NumberPopover.js.map +1 -1
  22. package/dist/components/CallView/index.js +1 -1
  23. package/dist/components/CallView/index.js.map +1 -1
  24. package/dist/components/ConferenceView/ConferenceUsersList.js +1 -1
  25. package/dist/components/ConferenceView/ConferenceUsersList.js.map +1 -1
  26. package/dist/components/ConferenceView/index.js +1 -1
  27. package/dist/components/ConferenceView/index.js.map +1 -1
  28. package/dist/components/ContactView/ContactListView.js +1 -1
  29. package/dist/components/ContactView/ContactListView.js.map +1 -1
  30. package/dist/components/ContactView/SelectContactNumberView.js +1 -1
  31. package/dist/components/ContactView/SelectContactNumberView.js.map +1 -1
  32. package/dist/components/ContactView/TransferActions.js +1 -1
  33. package/dist/components/ContactView/TransferActions.js.map +1 -1
  34. package/dist/components/Hangup.js +1 -1
  35. package/dist/components/Hangup.js.map +1 -1
  36. package/dist/components/KeypadView/index.js +1 -1
  37. package/dist/components/KeypadView/index.js.map +1 -1
  38. package/dist/components/OperatorBusyView/index.js +1 -1
  39. package/dist/components/OperatorBusyView/index.js.map +1 -1
  40. package/dist/components/PhysicalRecorderView/index.js +1 -1
  41. package/dist/components/PhysicalRecorderView/index.js.map +1 -1
  42. package/dist/components/RecorderView/Actions.js +1 -1
  43. package/dist/components/RecorderView/Actions.js.map +1 -1
  44. package/dist/components/RecorderView/BarsGroup.js.map +1 -1
  45. package/dist/components/RecorderView/index.js +1 -1
  46. package/dist/components/RecorderView/index.js.map +1 -1
  47. package/dist/components/SettingsView/AudioView.js +1 -1
  48. package/dist/components/SettingsView/AudioView.js.map +1 -1
  49. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  50. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  51. package/dist/components/SettingsView/SettingsHeader.js +1 -1
  52. package/dist/components/SettingsView/SettingsHeader.js.map +1 -1
  53. package/dist/components/SettingsView/ThemeView.js +1 -1
  54. package/dist/components/SettingsView/ThemeView.js.map +1 -1
  55. package/dist/components/SettingsView/index.js +1 -1
  56. package/dist/components/SettingsView/index.js.map +1 -1
  57. package/dist/components/SideView/SideView.js +1 -1
  58. package/dist/components/SideView/SideView.js.map +1 -1
  59. package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
  60. package/dist/components/Socket.js.map +1 -1
  61. package/dist/components/SwitchDeviceView/index.js +1 -1
  62. package/dist/components/SwitchDeviceView/index.js.map +1 -1
  63. package/dist/components/SwitchInputView/DropdownContent.js +1 -1
  64. package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
  65. package/dist/components/SwitchInputView/Index.js +1 -1
  66. package/dist/components/TextScroll.js +1 -1
  67. package/dist/components/TextScroll.js.map +1 -1
  68. package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
  69. package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
  70. package/dist/components/VideoStreamingEmptyState/index.js +1 -1
  71. package/dist/components/VideoStreamingEmptyState/index.js.map +1 -1
  72. package/dist/components/VideoStreamingSkeleton/index.js +1 -1
  73. package/dist/components/VideoStreamingSkeleton/index.js.map +1 -1
  74. package/dist/components/VideoView/index.js.map +1 -1
  75. package/dist/components/WebRTC.js.map +1 -1
  76. package/dist/events/SocketEvents.js.map +1 -1
  77. package/dist/lib/i18n.js +1 -1
  78. package/dist/lib/i18n.js.map +1 -1
  79. package/dist/lib/phone/call.js +1 -1
  80. package/dist/lib/phone/call.js.map +1 -1
  81. package/dist/lib/phone/counterpartDevice.js.map +1 -1
  82. package/dist/lib/phone/video.js.map +1 -1
  83. package/dist/lib/player/audio.js.map +1 -1
  84. package/dist/lib/user/default_device.js.map +1 -1
  85. package/dist/lib/user/extensions.js.map +1 -1
  86. package/dist/models/currentCall.js.map +1 -1
  87. package/dist/models/island.js.map +1 -1
  88. package/dist/models/player.js +1 -1
  89. package/dist/models/player.js.map +1 -1
  90. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js +1 -1
  91. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js.map +1 -1
  92. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
  93. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
  94. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
  95. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
  96. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
  97. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
  98. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs.js.map +1 -1
  99. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs.js.map +1 -1
  100. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.mjs.js.map +1 -1
  101. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs.js.map +1 -1
  102. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs.js.map +1 -1
  103. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js +1 -1
  104. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js.map +1 -1
  105. package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js.map +1 -1
  106. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js +1 -1
  107. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js.map +1 -1
  108. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js +1 -1
  109. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js.map +1 -1
  110. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
  111. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
  112. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js +1 -1
  113. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js.map +1 -1
  114. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js +1 -1
  115. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js.map +1 -1
  116. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js +1 -1
  117. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js.map +1 -1
  118. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js +1 -1
  119. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js.map +1 -1
  120. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js +1 -1
  121. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js.map +1 -1
  122. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs.js.map +1 -1
  123. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js +1 -1
  124. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js.map +1 -1
  125. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js +1 -1
  126. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js.map +1 -1
  127. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js +1 -1
  128. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js.map +1 -1
  129. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
  130. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
  131. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js +1 -1
  132. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js.map +1 -1
  133. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js +1 -1
  134. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js.map +1 -1
  135. package/dist/node_modules/i18next/dist/esm/i18next.js +1 -1
  136. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  137. package/dist/node_modules/js-base64/base64.mjs.js +1 -1
  138. package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
  139. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
  140. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
  141. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
  142. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
  143. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js +1 -1
  144. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
  145. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js +1 -1
  146. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js.map +1 -1
  147. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js +1 -1
  148. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js.map +1 -1
  149. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js +1 -1
  150. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js.map +1 -1
  151. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js +1 -1
  152. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
  153. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js +1 -1
  154. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
  155. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js +1 -1
  156. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js.map +1 -1
  157. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs.js +1 -1
  158. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs.js.map +1 -1
  159. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js +1 -1
  160. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js.map +1 -1
  161. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js +1 -1
  162. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js.map +1 -1
  163. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js +1 -1
  164. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -1
  165. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js +1 -1
  166. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -1
  167. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js +1 -1
  168. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -1
  169. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js +1 -1
  170. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -1
  171. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
  172. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
  173. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
  174. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
  175. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js +1 -1
  176. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js.map +1 -1
  177. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs.js +1 -1
  178. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs.js.map +1 -1
  179. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
  180. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
  181. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs.js +1 -1
  182. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs.js.map +1 -1
  183. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js +1 -1
  184. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js.map +1 -1
  185. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js +1 -1
  186. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js.map +1 -1
  187. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js +1 -1
  188. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js.map +1 -1
  189. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js +1 -1
  190. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js.map +1 -1
  191. package/dist/node_modules/motion-dom/dist/es/animation/utils/notify-inspector.mjs.js +2 -0
  192. package/dist/node_modules/motion-dom/dist/es/animation/utils/notify-inspector.mjs.js.map +1 -0
  193. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-start-time.mjs.js +2 -0
  194. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-start-time.mjs.js.map +1 -0
  195. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js +1 -1
  196. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js.map +1 -1
  197. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/TransformAnimation.mjs.js +2 -0
  198. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/TransformAnimation.mjs.js.map +1 -0
  199. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/groups.mjs.js +2 -0
  200. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/groups.mjs.js.map +1 -0
  201. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js +1 -1
  202. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js.map +1 -1
  203. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/needs-mixer.mjs.js +2 -0
  204. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/needs-mixer.mjs.js.map +1 -0
  205. package/dist/node_modules/motion-dom/dist/es/events/add-pointer-event.mjs.js +2 -0
  206. package/dist/node_modules/motion-dom/dist/es/events/add-pointer-event.mjs.js.map +1 -0
  207. package/dist/node_modules/motion-dom/dist/es/events/event-info.mjs.js +2 -0
  208. package/dist/node_modules/motion-dom/dist/es/events/event-info.mjs.js.map +1 -0
  209. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
  210. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
  211. package/dist/node_modules/motion-dom/dist/es/frameloop/frame-data.mjs.js +2 -0
  212. package/dist/node_modules/motion-dom/dist/es/frameloop/frame-data.mjs.js.map +1 -0
  213. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.mjs.js +1 -1
  214. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.mjs.js.map +1 -1
  215. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js +1 -1
  216. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
  217. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js +1 -1
  218. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js.map +1 -1
  219. package/dist/node_modules/motion-dom/dist/es/gestures/drag/VisualElementDragControls.mjs.js +2 -0
  220. package/dist/node_modules/motion-dom/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -0
  221. package/dist/node_modules/motion-dom/dist/es/gestures/drag/utils/constraints.mjs.js +2 -0
  222. package/dist/node_modules/motion-dom/dist/es/gestures/drag/utils/constraints.mjs.js.map +1 -0
  223. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
  224. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
  225. package/dist/node_modules/motion-dom/dist/es/gestures/pan/PanSession.mjs.js +2 -0
  226. package/dist/node_modules/motion-dom/dist/es/gestures/pan/PanSession.mjs.js.map +1 -0
  227. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
  228. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
  229. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js +1 -1
  230. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js.map +1 -1
  231. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs.js +1 -1
  232. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs.js.map +1 -1
  233. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js +1 -1
  234. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js.map +1 -1
  235. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js +1 -1
  236. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js.map +1 -1
  237. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js +1 -1
  238. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -1
  239. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js +1 -1
  240. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js.map +1 -1
  241. package/dist/node_modules/motion-dom/dist/es/projection/geometry/round.mjs.js +2 -0
  242. package/dist/node_modules/motion-dom/dist/es/projection/geometry/round.mjs.js.map +1 -0
  243. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js +1 -1
  244. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js.map +1 -1
  245. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js +1 -1
  246. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js.map +1 -1
  247. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js +1 -1
  248. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js.map +1 -1
  249. package/dist/node_modules/motion-dom/dist/es/projection/node/root.mjs.js +2 -0
  250. package/dist/node_modules/motion-dom/dist/es/projection/node/root.mjs.js.map +1 -0
  251. package/dist/node_modules/motion-dom/dist/es/projection/styles/default-scale-correctors.mjs.js +2 -0
  252. package/dist/node_modules/motion-dom/dist/es/projection/styles/default-scale-correctors.mjs.js.map +1 -0
  253. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js +1 -1
  254. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js.map +1 -1
  255. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.mjs.js +1 -1
  256. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.mjs.js.map +1 -1
  257. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.mjs.js.map +1 -1
  258. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js +1 -1
  259. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js.map +1 -1
  260. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.mjs.js +1 -1
  261. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.mjs.js.map +1 -1
  262. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js +1 -1
  263. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js.map +1 -1
  264. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -1
  265. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js +1 -1
  266. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js.map +1 -1
  267. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js +1 -1
  268. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -1
  269. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js +1 -1
  270. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js.map +1 -1
  271. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js +1 -1
  272. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js.map +1 -1
  273. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js +1 -1
  274. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js.map +1 -1
  275. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js +1 -1
  276. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js.map +1 -1
  277. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js +1 -1
  278. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js.map +1 -1
  279. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js +1 -1
  280. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js.map +1 -1
  281. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js +1 -1
  282. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js.map +1 -1
  283. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs.js +1 -1
  284. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs.js.map +1 -1
  285. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js +1 -1
  286. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js.map +1 -1
  287. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs.js +1 -1
  288. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs.js.map +1 -1
  289. package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js +1 -1
  290. package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js.map +1 -1
  291. package/dist/node_modules/motion-dom/dist/es/scope/active.mjs.js +2 -0
  292. package/dist/node_modules/motion-dom/dist/es/scope/active.mjs.js.map +1 -0
  293. package/dist/node_modules/motion-dom/dist/es/stats/buffer.mjs.js +2 -0
  294. package/dist/node_modules/motion-dom/dist/es/stats/buffer.mjs.js.map +1 -0
  295. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js +1 -1
  296. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js.map +1 -1
  297. package/dist/node_modules/motion-dom/dist/es/utils/distance.mjs.js.map +1 -0
  298. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js +1 -1
  299. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
  300. package/dist/node_modules/motion-dom/dist/es/utils/is-ref-object.mjs.js.map +1 -0
  301. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js +1 -1
  302. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js.map +1 -1
  303. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js +1 -1
  304. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js.map +1 -1
  305. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.mjs.js +1 -1
  306. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.mjs.js.map +1 -1
  307. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js +1 -1
  308. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js.map +1 -1
  309. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
  310. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
  311. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.mjs.js +1 -1
  312. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.mjs.js.map +1 -1
  313. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js +1 -1
  314. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js.map +1 -1
  315. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js +1 -1
  316. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js.map +1 -1
  317. package/dist/node_modules/motion-dom/dist/es/value/utils/as-number.mjs.js +2 -0
  318. package/dist/node_modules/motion-dom/dist/es/value/utils/as-number.mjs.js.map +1 -0
  319. package/dist/node_modules/motion-utils/dist/es/easing/circ.mjs.js.map +1 -1
  320. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js +1 -1
  321. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js.map +1 -1
  322. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js +1 -1
  323. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js.map +1 -1
  324. package/dist/node_modules/motion-utils/dist/es/errors.mjs.js +1 -1
  325. package/dist/node_modules/motion-utils/dist/es/errors.mjs.js.map +1 -1
  326. package/dist/node_modules/motion-utils/dist/es/subscription-manager.mjs.js +1 -1
  327. package/dist/node_modules/motion-utils/dist/es/subscription-manager.mjs.js.map +1 -1
  328. package/dist/node_modules/react-i18next/dist/es/context.js +1 -1
  329. package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -1
  330. package/dist/node_modules/react-i18next/dist/es/defaults.js +1 -1
  331. package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -1
  332. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +1 -1
  333. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +1 -1
  334. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +1 -1
  335. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +1 -1
  336. package/dist/node_modules/react-i18next/dist/es/unescape.js +1 -1
  337. package/dist/node_modules/react-i18next/dist/es/unescape.js.map +1 -1
  338. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +1 -1
  339. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  340. package/dist/node_modules/react-i18next/dist/es/utils.js +1 -1
  341. package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -1
  342. package/dist/package.json.js +1 -1
  343. package/dist/services/astproxy.js +1 -1
  344. package/dist/services/astproxy.js.map +1 -1
  345. package/dist/services/phonebook.js +1 -1
  346. package/dist/services/phonebook.js.map +1 -1
  347. package/dist/utils/customHooks/useLocalStorage.js.map +1 -1
  348. package/dist/utils/deviceUtils.js.map +1 -1
  349. package/package.json +12 -7
  350. package/dist/_virtual/arrayLikeToArray.js +0 -2
  351. package/dist/_virtual/arrayLikeToArray.js.map +0 -1
  352. package/dist/_virtual/arrayWithHoles.js +0 -2
  353. package/dist/_virtual/arrayWithHoles.js.map +0 -1
  354. package/dist/_virtual/classCallCheck.js +0 -2
  355. package/dist/_virtual/classCallCheck.js.map +0 -1
  356. package/dist/_virtual/createClass.js +0 -2
  357. package/dist/_virtual/createClass.js.map +0 -1
  358. package/dist/_virtual/defineProperty.js +0 -2
  359. package/dist/_virtual/defineProperty.js.map +0 -1
  360. package/dist/_virtual/iterableToArrayLimit.js +0 -2
  361. package/dist/_virtual/iterableToArrayLimit.js.map +0 -1
  362. package/dist/_virtual/nonIterableRest.js +0 -2
  363. package/dist/_virtual/nonIterableRest.js.map +0 -1
  364. package/dist/_virtual/objectWithoutProperties.js +0 -2
  365. package/dist/_virtual/objectWithoutProperties.js.map +0 -1
  366. package/dist/_virtual/objectWithoutPropertiesLoose.js +0 -2
  367. package/dist/_virtual/objectWithoutPropertiesLoose.js.map +0 -1
  368. package/dist/_virtual/slicedToArray.js +0 -2
  369. package/dist/_virtual/slicedToArray.js.map +0 -1
  370. package/dist/_virtual/toPrimitive.js +0 -2
  371. package/dist/_virtual/toPrimitive.js.map +0 -1
  372. package/dist/_virtual/toPropertyKey.js +0 -2
  373. package/dist/_virtual/toPropertyKey.js.map +0 -1
  374. package/dist/_virtual/typeof.js +0 -2
  375. package/dist/_virtual/typeof.js.map +0 -1
  376. package/dist/_virtual/unsupportedIterableToArray.js +0 -2
  377. package/dist/_virtual/unsupportedIterableToArray.js.map +0 -1
  378. package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +0 -2
  379. package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js.map +0 -1
  380. package/dist/node_modules/@babel/runtime/helpers/arrayWithHoles.js +0 -2
  381. package/dist/node_modules/@babel/runtime/helpers/arrayWithHoles.js.map +0 -1
  382. package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js +0 -2
  383. package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js.map +0 -1
  384. package/dist/node_modules/@babel/runtime/helpers/createClass.js +0 -2
  385. package/dist/node_modules/@babel/runtime/helpers/createClass.js.map +0 -1
  386. package/dist/node_modules/@babel/runtime/helpers/defineProperty.js +0 -2
  387. package/dist/node_modules/@babel/runtime/helpers/defineProperty.js.map +0 -1
  388. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +0 -2
  389. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +0 -1
  390. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +0 -2
  391. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js.map +0 -1
  392. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -2
  393. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +0 -1
  394. package/dist/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +0 -2
  395. package/dist/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js.map +0 -1
  396. package/dist/node_modules/@babel/runtime/helpers/esm/inherits.js +0 -2
  397. package/dist/node_modules/@babel/runtime/helpers/esm/inherits.js.map +0 -1
  398. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +0 -2
  399. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +0 -1
  400. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +0 -2
  401. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js.map +0 -1
  402. package/dist/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +0 -2
  403. package/dist/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js.map +0 -1
  404. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +0 -2
  405. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +0 -1
  406. package/dist/node_modules/@babel/runtime/helpers/esm/toArray.js +0 -2
  407. package/dist/node_modules/@babel/runtime/helpers/esm/toArray.js.map +0 -1
  408. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +0 -2
  409. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +0 -1
  410. package/dist/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js +0 -2
  411. package/dist/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js.map +0 -1
  412. package/dist/node_modules/@babel/runtime/helpers/nonIterableRest.js +0 -2
  413. package/dist/node_modules/@babel/runtime/helpers/nonIterableRest.js.map +0 -1
  414. package/dist/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +0 -2
  415. package/dist/node_modules/@babel/runtime/helpers/objectWithoutProperties.js.map +0 -1
  416. package/dist/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +0 -2
  417. package/dist/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js.map +0 -1
  418. package/dist/node_modules/@babel/runtime/helpers/slicedToArray.js +0 -2
  419. package/dist/node_modules/@babel/runtime/helpers/slicedToArray.js.map +0 -1
  420. package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js +0 -2
  421. package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js.map +0 -1
  422. package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js +0 -2
  423. package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js.map +0 -1
  424. package/dist/node_modules/@babel/runtime/helpers/typeof.js +0 -2
  425. package/dist/node_modules/@babel/runtime/helpers/typeof.js.map +0 -1
  426. package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +0 -2
  427. package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js.map +0 -1
  428. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js +0 -2
  429. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js.map +0 -1
  430. package/dist/node_modules/framer-motion/dist/es/events/event-info.mjs.js +0 -2
  431. package/dist/node_modules/framer-motion/dist/es/events/event-info.mjs.js.map +0 -1
  432. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +0 -2
  433. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +0 -1
  434. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js +0 -2
  435. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js.map +0 -1
  436. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js +0 -2
  437. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +0 -1
  438. package/dist/node_modules/framer-motion/dist/es/utils/distance.mjs.js.map +0 -1
  439. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js +0 -2
  440. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +0 -1
  441. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs.js.map +0 -1
  442. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.js +0 -2
  443. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.js.map +0 -1
  444. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs.js +0 -2
  445. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs.js.map +0 -1
  446. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.mjs.js +0 -2
  447. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.mjs.js.map +0 -1
  448. package/dist/node_modules/void-elements/index.js +0 -2
  449. package/dist/node_modules/void-elements/index.js.map +0 -1
  450. /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/utils/distance.mjs.js +0 -0
  451. /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/utils/is-ref-object.mjs.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n CurrentUserQueueCallEventTypes,\n ParkingUpdateTypes,\n ParkingUpdateEventTypes,\n} from '../types'\n\nexport interface VideoCallStartedEvent {\n initiator: 'local' | 'remote'\n callUser?: string\n destUser?: string\n}\n\nconst PARKING_UPDATE_DISPATCH_DELAY_MS = 200\nlet parkingUpdateBuffer: ParkingUpdateEventTypes = {}\nlet parkingUpdateDispatchTimer: ReturnType<typeof setTimeout> | null = null\n\nfunction flushParkingUpdates() {\n if (Object.keys(parkingUpdateBuffer).length === 0) {\n parkingUpdateDispatchTimer = null\n return\n }\n\n eventDispatch('phone-island-parking-update', parkingUpdateBuffer)\n parkingUpdateBuffer = {}\n parkingUpdateDispatchTimer = null\n}\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchExtensions(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-extensions-update', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n * @param extensionType The type of the extension (webrtc, mobile, nethlink, physical)\n */\nexport function dispatchConversations(event: ExtensionTypes, extensionType?: string) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n extensionType: extensionType,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the current user queue call waiting event\n *\n * @param event The current user queue call data\n */\nexport function dispatchCurrentUserQueueCallWaiting(event: CurrentUserQueueCallEventTypes) {\n eventDispatch('phone-island-current-user-queue-call-waiting', event)\n}\n\n/**\n * The dispatch function for the current user queue call connected event\n *\n * @param event The current user queue call data\n */\nexport function dispatchCurrentUserQueueCallConnected(event: CurrentUserQueueCallEventTypes) {\n eventDispatch('phone-island-current-user-queue-call-connected', event)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n\n/**\n * The dispatch function for server reload\n *\n * @param event The serverReload event from socket\n */\nexport function dispatchServerReload() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-server-reloaded', {})\n}\n\n/**\n * The dispatch function for parking update\n *\n * @param event The parking update event from socket\n */\nexport function dispatchParkingUpdate(event: ParkingUpdateTypes) {\n // Batch rapid socket bursts into one browser event to avoid redundant refreshes\n if (!event?.parking) {\n eventDispatch('phone-island-parking-update', {})\n return\n }\n\n parkingUpdateBuffer[event.parking] = event\n\n if (!parkingUpdateDispatchTimer) {\n parkingUpdateDispatchTimer = setTimeout(\n flushParkingUpdates,\n PARKING_UPDATE_DISPATCH_DELAY_MS,\n )\n }\n}\n\n/**\n * The dispatch function for url physical call\n *\n * @param event The parking update event from socket\n */\nexport function dispatchUrlCall(url: string, urlType: string) {\n // Dispatch the event on window for external handlers\n let urlCallObject = {\n url: url,\n urlType: urlType,\n }\n eventDispatch('phone-island-action-physical', { urlCallObject })\n}\n\n/**\n * The dispatch function to update the default device\n *\n * @param extension The default_device_update event from socket\n */\nexport function dispatchDefaultDeviceUpdate(extension: string) {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-default-device-updated', { id: extension })\n}\n\n/**\n * The dispatch function for video call start notifications.\n *\n * @param event Video call start metadata\n */\nexport function dispatchVideoCallStarted(event: VideoCallStartedEvent) {\n eventDispatch('phone-island-video-call-started', event)\n}\n"],"names":["parkingUpdateBuffer","parkingUpdateDispatchTimer","flushParkingUpdates","Object","keys","length","eventDispatch","event","extensionType","data","_a","username","conversations","status","sipuseragent","port","dnd","number","exten","ip","name","extension","id","mainPresence","parking","setTimeout","member","queue","url","urlType","urlCallObject"],"mappings":"4NAuBA,IACIA,EAA+C,CAAA,EAC/CC,EAAmE,KAEvE,SAASC,IACyC,IAA5CC,OAAOC,KAAKJ,GAAqBK,QAKrCC,gBAAc,8BAA+BN,GAC7CA,EAAsB,CAAA,EACtBC,EAA6B,MAN3BA,EAA6B,IAOjC,yCAqHEK,gBAAc,kCAAmC,CAAA,EACnD,gCAxEgB,SAAsBC,EAAuBC,SACrDC,IAAIC,EAAA,CAAA,GACPH,EAAMI,UAAW,CAChBC,cAAeL,aAAA,EAAAA,EAAOK,cACtBC,OAAQN,aAAA,EAAAA,EAAOM,OACfC,aAAcP,aAAA,EAAAA,EAAOO,aACrBH,SAAUJ,aAAA,EAAAA,EAAOI,SACjBI,KAAMR,aAAA,EAAAA,EAAOQ,KACbC,IAAKT,aAAA,EAAAA,EAAOS,IACZC,OAAQV,aAAA,EAAAA,EAAOW,MACfC,GAAIZ,aAAA,EAAAA,EAAOY,GACXD,MAAOX,aAAA,EAAAA,EAAOW,MACdE,KAAMb,aAAA,EAAAA,EAAOa,KACbZ,cAAeA,MAInBF,gBAAc,6BAA8BG,EAC9C,gDA0CM,SAAgDF,GACpDD,gBAAc,iDAAkDC,EAClE,8CAXM,SAA8CA,GAClDD,gBAAc,+CAAgDC,EAChE,sCAwEM,SAAsCc,GAE1Cf,EAAAA,cAAc,sCAAuC,CAAEgB,GAAID,GAC7D,6BAzJM,SAA6Bd,SAC3BE,IAAIC,EAAA,CAAA,GACPH,EAAMI,UAAW,CAChBC,cAAeL,aAAA,EAAAA,EAAOK,cACtBC,OAAQN,aAAA,EAAAA,EAAOM,OACfC,aAAcP,aAAA,EAAAA,EAAOO,aACrBH,SAAUJ,aAAA,EAAAA,EAAOI,SACjBI,KAAMR,aAAA,EAAAA,EAAOQ,KACbC,IAAKT,aAAA,EAAAA,EAAOS,IACZC,OAAQV,aAAA,EAAAA,EAAOW,MACfC,GAAIZ,aAAA,EAAAA,EAAOY,GACXD,MAAOX,aAAA,EAAAA,EAAOW,MACdE,KAAMb,aAAA,EAAAA,EAAOa,SAIjBd,gBAAc,iCAAkCG,EAClD,+BA/BM,SAA+BF,SAC7BE,IAAIC,EAAA,CAAA,GACPH,EAAMgB,aAAaZ,UAAW,CAC7BY,aAAchB,EAAMgB,aAAaV,WAGrCP,gBAAc,6BAA8BG,EAC9C,gCAyHM,SAAgCF,IAE/BA,eAAAA,EAAOiB,UAKZxB,EAAoBO,EAAMiB,SAAWjB,EAEhCN,IACHA,EAA6BwB,WAC3BvB,EA/JmC,OAuJrCI,gBAAc,8BAA+B,CAAA,EAYjD,oCAlEM,SAAoCC,SAClCE,IAAIC,EAAA,CAAA,GACPH,EAAMmB,QAASnB,KAGlBD,gBAAc,mCAAoCG,EACpD,8BAnBM,SAA8BF,SAC5BE,IAAIC,EAAA,CAAA,GACPH,EAAMoB,OAAQpB,KAGjBD,gBAAc,4BAA6BG,EAC7C,0CAkDEH,gBAAc,+BAAgC,CAAA,EAChD,0BA6BgB,SAAgBsB,EAAaC,GAE3C,IAAIC,EAAgB,CAClBF,IAAKA,EACLC,QAASA,GAEXvB,EAAAA,cAAc,+BAAgC,CAAEwB,cAAaA,GAC/D,mCAiBM,SAAmCvB,GACvCD,gBAAc,kCAAmCC,EACnD"}
1
+ {"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n CurrentUserQueueCallEventTypes,\n ParkingUpdateTypes,\n ParkingUpdateEventTypes,\n} from '../types'\n\nexport interface VideoCallStartedEvent {\n initiator: 'local' | 'remote'\n callUser?: string\n destUser?: string\n}\n\nconst PARKING_UPDATE_DISPATCH_DELAY_MS = 200\nlet parkingUpdateBuffer: ParkingUpdateEventTypes = {}\nlet parkingUpdateDispatchTimer: ReturnType<typeof setTimeout> | null = null\n\nfunction flushParkingUpdates() {\n if (Object.keys(parkingUpdateBuffer).length === 0) {\n parkingUpdateDispatchTimer = null\n return\n }\n\n eventDispatch('phone-island-parking-update', parkingUpdateBuffer)\n parkingUpdateBuffer = {}\n parkingUpdateDispatchTimer = null\n}\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchExtensions(event: ExtensionTypes) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-extensions-update', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n * @param extensionType The type of the extension (webrtc, mobile, nethlink, physical)\n */\nexport function dispatchConversations(event: ExtensionTypes, extensionType?: string) {\n const data: any = {\n [event.username]: {\n conversations: event?.conversations,\n status: event?.status,\n sipuseragent: event?.sipuseragent,\n username: event?.username,\n port: event?.port,\n dnd: event?.dnd,\n number: event?.exten,\n ip: event?.ip,\n exten: event?.exten,\n name: event?.name,\n extensionType: extensionType,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the current user queue call waiting event\n *\n * @param event The current user queue call data\n */\nexport function dispatchCurrentUserQueueCallWaiting(event: CurrentUserQueueCallEventTypes) {\n eventDispatch('phone-island-current-user-queue-call-waiting', event)\n}\n\n/**\n * The dispatch function for the current user queue call connected event\n *\n * @param event The current user queue call data\n */\nexport function dispatchCurrentUserQueueCallConnected(event: CurrentUserQueueCallEventTypes) {\n eventDispatch('phone-island-current-user-queue-call-connected', event)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n\n/**\n * The dispatch function for server reload\n *\n * @param event The serverReload event from socket\n */\nexport function dispatchServerReload() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-server-reloaded', {})\n}\n\n/**\n * The dispatch function for parking update\n *\n * @param event The parking update event from socket\n */\nexport function dispatchParkingUpdate(event: ParkingUpdateTypes) {\n // Batch rapid socket bursts into one browser event to avoid redundant refreshes\n if (!event?.parking) {\n eventDispatch('phone-island-parking-update', {})\n return\n }\n\n parkingUpdateBuffer[event.parking] = event\n\n if (!parkingUpdateDispatchTimer) {\n parkingUpdateDispatchTimer = setTimeout(\n flushParkingUpdates,\n PARKING_UPDATE_DISPATCH_DELAY_MS,\n )\n }\n}\n\n/**\n * The dispatch function for url physical call\n *\n * @param event The parking update event from socket\n */\nexport function dispatchUrlCall(url: string, urlType: string) {\n // Dispatch the event on window for external handlers\n let urlCallObject = {\n url: url,\n urlType: urlType,\n }\n eventDispatch('phone-island-action-physical', { urlCallObject })\n}\n\n/**\n * The dispatch function to update the default device\n *\n * @param extension The default_device_update event from socket\n */\nexport function dispatchDefaultDeviceUpdate(extension: string) {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-default-device-updated', { id: extension })\n}\n\n/**\n * The dispatch function for video call start notifications.\n *\n * @param event Video call start metadata\n */\nexport function dispatchVideoCallStarted(event: VideoCallStartedEvent) {\n eventDispatch('phone-island-video-call-started', event)\n}\n"],"names":["parkingUpdateBuffer","parkingUpdateDispatchTimer","flushParkingUpdates","Object","keys","length","eventDispatch","event","extensionType","data","_a","username","conversations","status","sipuseragent","port","dnd","number","exten","ip","name","extension","id","mainPresence","parking","setTimeout","member","queue","url","urlType","urlCallObject"],"mappings":"4NAuBA,IACIA,EAA+C,CAAA,EAC/CC,EAAmE,KAEvE,SAASC,IACyC,IAA5CC,OAAOC,KAAKJ,GAAqBK,QAKrCC,gBAAc,8BAA+BN,GAC7CA,EAAsB,CAAA,EACtBC,EAA6B,MAN3BA,EAA6B,IAOjC,yCAqHEK,gBAAc,kCAAmC,CAAA,EACnD,gCAxEgB,SAAsBC,EAAuBC,SACrDC,IAAIC,EAAA,CAAA,GACPH,EAAMI,UAAW,CAChBC,cAAeL,aAAA,EAAAA,EAAOK,cACtBC,OAAQN,aAAA,EAAAA,EAAOM,OACfC,aAAcP,aAAA,EAAAA,EAAOO,aACrBH,SAAUJ,aAAA,EAAAA,EAAOI,SACjBI,KAAMR,aAAA,EAAAA,EAAOQ,KACbC,IAAKT,aAAA,EAAAA,EAAOS,IACZC,OAAQV,aAAA,EAAAA,EAAOW,MACfC,GAAIZ,aAAA,EAAAA,EAAOY,GACXD,MAAOX,aAAA,EAAAA,EAAOW,MACdE,KAAMb,aAAA,EAAAA,EAAOa,KACbZ,cAAeA,MAInBF,gBAAc,6BAA8BG,EAC9C,gDA0CM,SAAgDF,GACpDD,gBAAc,iDAAkDC,EAClE,8CAXM,SAA8CA,GAClDD,gBAAc,+CAAgDC,EAChE,sCAwEM,SAAsCc,GAE1Cf,EAAAA,cAAc,sCAAuC,CAAEgB,GAAID,GAC7D,6BAzJM,SAA6Bd,SAC3BE,IAAIC,EAAA,CAAA,GACPH,EAAMI,UAAW,CAChBC,cAAeL,aAAA,EAAAA,EAAOK,cACtBC,OAAQN,aAAA,EAAAA,EAAOM,OACfC,aAAcP,aAAA,EAAAA,EAAOO,aACrBH,SAAUJ,aAAA,EAAAA,EAAOI,SACjBI,KAAMR,aAAA,EAAAA,EAAOQ,KACbC,IAAKT,aAAA,EAAAA,EAAOS,IACZC,OAAQV,aAAA,EAAAA,EAAOW,MACfC,GAAIZ,aAAA,EAAAA,EAAOY,GACXD,MAAOX,aAAA,EAAAA,EAAOW,MACdE,KAAMb,aAAA,EAAAA,EAAOa,SAIjBd,gBAAc,iCAAkCG,EAClD,+BA/BM,SAA+BF,SAC7BE,IAAIC,EAAA,CAAA,GACPH,EAAMgB,aAAaZ,UAAW,CAC7BY,aAAchB,EAAMgB,aAAaV,WAGrCP,gBAAc,6BAA8BG,EAC9C,gCAyHM,SAAgCF,IAE/BA,aAAA,EAAAA,EAAOiB,UAKZxB,EAAoBO,EAAMiB,SAAWjB,EAEhCN,IACHA,EAA6BwB,WAC3BvB,EA/JmC,OAuJrCI,gBAAc,8BAA+B,CAAA,EAYjD,oCAlEM,SAAoCC,SAClCE,IAAIC,EAAA,CAAA,GACPH,EAAMmB,QAASnB,KAGlBD,gBAAc,mCAAoCG,EACpD,8BAnBM,SAA8BF,SAC5BE,IAAIC,EAAA,CAAA,GACPH,EAAMoB,OAAQpB,KAGjBD,gBAAc,4BAA6BG,EAC7C,0CAkDEH,gBAAc,+BAAgC,CAAA,EAChD,0BA6BgB,SAAgBsB,EAAaC,GAE3C,IAAIC,EAAgB,CAClBF,IAAKA,EACLC,QAASA,GAEXvB,EAAAA,cAAc,+BAAgC,CAAEwB,cAAaA,GAC/D,mCAiBM,SAAmCvB,GACvCD,gBAAc,kCAAmCC,EACnD"}
package/dist/lib/i18n.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/i18next/dist/esm/i18next.js");require("../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("react"),require("../node_modules/@babel/runtime/helpers/typeof.js"),require("../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../node_modules/react-i18next/dist/es/context.js"),require("../node_modules/@babel/runtime/helpers/slicedToArray.js");var t=require("../node_modules/react-i18next/dist/es/initReactI18next.js"),r=require("../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js"),s=require("../public/locales/en/translation.json.js"),n=require("../public/locales/it/translation.json.js"),i=!1;e.default.createInstance(),exports.initI18n=function(){if(i)return Promise.resolve();var o={resources:{en:{translations:s.default},it:{translations:n.default}},fallbackLng:"en",ns:["translations"],defaultNS:"translations",interpolation:{escapeValue:!1},detection:{order:["navigator"]},react:{useSuspense:!1},supportedLngs:["en","it"]};return i=!0,e.default.use(r.default).use(t.initReactI18next).init(o)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/i18next/dist/esm/i18next.js");require("react"),require("../node_modules/react-i18next/dist/es/context.js");var t=require("../node_modules/react-i18next/dist/es/initReactI18next.js"),n=require("../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js"),s=require("../public/locales/en/translation.json.js"),r=require("../public/locales/it/translation.json.js"),i=!1;e.default.createInstance(),exports.initI18n=function(){if(i)return Promise.resolve();var a={resources:{en:{translations:s.default},it:{translations:r.default}},fallbackLng:"en",ns:["translations"],defaultNS:"translations",interpolation:{escapeValue:!1},detection:{order:["navigator"]},react:{useSuspense:!1},supportedLngs:["en","it"]};return i=!0,e.default.use(n.default).use(t.initReactI18next).init(a)};
2
2
  //# sourceMappingURL=i18n.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sources":["../../src/lib/i18n.ts"],"sourcesContent":["import i18next from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport en from '../../public/locales/en/translation.json'\nimport it from '../../public/locales/it/translation.json'\n\nlet isInitialized = false\n\nexport const initI18n = () => {\n if (isInitialized) {\n return Promise.resolve()\n }\n\n const i18nConfig = {\n resources: {\n en: { translations: en },\n it: { translations: it }\n },\n fallbackLng: 'en',\n ns: ['translations'],\n defaultNS: 'translations',\n interpolation: {\n escapeValue: false\n },\n detection: {\n order: ['navigator']\n },\n react: {\n useSuspense: false\n },\n supportedLngs: ['en', 'it']\n }\n\n isInitialized = true\n return i18next\n .use(LanguageDetector)\n .use(initReactI18next)\n .init(i18nConfig)\n}\n\nexport default i18next.createInstance()\n"],"names":["isInitialized","i18next","createInstance","Promise","resolve","i18nConfig","resources","en","translations","it","fallbackLng","ns","defaultNS","interpolation","escapeValue","detection","order","react","useSuspense","supportedLngs","use","LanguageDetector","initReactI18next","init"],"mappings":"20BAMIA,GAAgB,EAkCLC,EAAO,QAACC,kCAhCC,WACtB,GAAIF,EACF,OAAOG,QAAQC,UAGjB,IAAMC,EAAa,CACjBC,UAAW,CACTC,GAAI,CAAEC,aAAcD,WACpBE,GAAI,CAAED,aAAcC,YAEtBC,YAAa,KACbC,GAAI,CAAC,gBACLC,UAAW,eACXC,cAAe,CACbC,aAAa,GAEfC,UAAW,CACTC,MAAO,CAAC,cAEVC,MAAO,CACLC,aAAa,GAEfC,cAAe,CAAC,KAAM,OAIxB,OADAnB,GAAgB,EACTC,EAAO,QACXmB,IAAIC,EAAAA,SACJD,IAAIE,EAAAA,kBACJC,KAAKlB,EACV"}
1
+ {"version":3,"file":"i18n.js","sources":["../../src/lib/i18n.ts"],"sourcesContent":["import i18next from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport en from '../../public/locales/en/translation.json'\nimport it from '../../public/locales/it/translation.json'\n\nlet isInitialized = false\n\nexport const initI18n = () => {\n if (isInitialized) {\n return Promise.resolve()\n }\n\n const i18nConfig = {\n resources: {\n en: { translations: en },\n it: { translations: it }\n },\n fallbackLng: 'en',\n ns: ['translations'],\n defaultNS: 'translations',\n interpolation: {\n escapeValue: false\n },\n detection: {\n order: ['navigator']\n },\n react: {\n useSuspense: false\n },\n supportedLngs: ['en', 'it']\n }\n\n isInitialized = true\n return i18next\n .use(LanguageDetector)\n .use(initReactI18next)\n .init(i18nConfig)\n}\n\nexport default i18next.createInstance()\n"],"names":["isInitialized","i18next","createInstance","Promise","resolve","i18nConfig","resources","en","translations","it","fallbackLng","ns","defaultNS","interpolation","escapeValue","detection","order","react","useSuspense","supportedLngs","use","LanguageDetector","initReactI18next","init"],"mappings":"8eAMIA,GAAgB,EAkCLC,EAAO,QAACC,kCAhCC,WACtB,GAAIF,EACF,OAAOG,QAAQC,UAGjB,IAAMC,EAAa,CACjBC,UAAW,CACTC,GAAI,CAAEC,aAAcD,WACpBE,GAAI,CAAED,aAAcC,YAEtBC,YAAa,KACbC,GAAI,CAAC,gBACLC,UAAW,eACXC,cAAe,CACbC,aAAa,GAEfC,UAAW,CACTC,MAAO,CAAC,cAEVC,MAAO,CACLC,aAAa,GAEfC,cAAe,CAAC,KAAM,OAIxB,OADAnB,GAAgB,EACTC,EAAO,QACXmB,IAAIC,EAAAA,SACJD,IAAIE,EAAAA,kBACJC,KAAKlB,EACV"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,o=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=r.store.getState().island.isFromStreaming;if(o||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),d&&l){var p=u.getStreamingSourceId(l);p&&(a.unsubscribe({id:p}).then(function(){return console.debug("Unsubscribed from streaming source: ".concat(p))}).catch(function(e){return console.error("Error unsubscribing from streaming source:",e)}),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),i.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);i.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,function(){var n,o,i;return e.__generator(this,function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,o=r.store.getState().currentUser.default_device,i=(null==o?void 0:o.id)||(null==o?void 0:o.exten),n&&i&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:i})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})}function v(){var t;return e.__awaiter(this,void 0,void 0,function(){var n,o,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,function(e){switch(e.label){case 0:if(n=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.currentCall,o=n.accepted,a=n.chSource,u=n.chDest,l=n.incoming,d=n.outgoing,p=n.incomingSocket,v=n.outgoingSocket,f=n.conversationId,h=r.store.getState().currentUser.default_device,g=(null==h?void 0:h.id)||(null==h?void 0:h.exten),C="",o&&(l||p)&&!c.isEmpty(a)?C=null==a?void 0:a.callerNum:o&&(d||v)&&!c.isEmpty(u)&&(C=null==u?void 0:u.callerNum),""===g||""===f||""===C)return[3,4];if(!(m={convid:null==f?void 0:f.toString(),addEndpointId:null==C?void 0:C.toString(),ownerEndpointId:null==g?void 0:g.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(m)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),i.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return b=e.sent(),console.error(b),[2,!1];case 4:return[2,!1]}})})}function f(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o;return e.__generator(this,function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2,!1]}})})}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,o=n.conference,a=o.isActive,c=o.isOwnerInside,u=o.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find(function(t){return t.exten===e}):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame(function(){setTimeout(function(){i.eventDispatch("phone-island-call-start",{number:e})},1e3)})};function C(t,r){return e.__awaiter(this,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame(function(){r.player.playRemoteAudio(),i.eventDispatch("phone-island-call-transfered",{})})),[2]}})})}exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o;return e.__generator(this,function(e){switch(e.label){case 0:return(o=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:o,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})},exports.callNumber=function(e,o,a){void 0===a&&(a={});var c="sip:".concat(e,"@").concat(o);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(c,a):s.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}})})},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})})};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.hangupConversation({convid:e,endpointId:t})})};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o,a;return e.__generator(this,function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(o={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(o)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}})})},exports.muteAllUsersConference=function(t,n){var o;return e.__awaiter(this,void 0,void 0,function(){var i,a,c,u,l,d,p,v;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(i=r.store.getState().conference.usersList)||0===Object.keys(i).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),a=Object.values(i),c=n?s.unmuteUserConf:s.muteUserConf,u=0,l=a,e.label=2;case 2:return u<l.length?(d=l[u],p={confId:null==t?void 0:t.toString(),userId:null===(o=d.id)||void 0===o?void 0:o.toString()},[4,c(p)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:d.extenId,muted:!n}),e.label=4;case 4:return u++,[3,2];case 5:return[2,!0];case 6:return v=e.sent(),console.error(v),[2,!1];case 7:return[2]}})})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),i.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,function(){var o,i;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];o={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(o)];case 2:return[2,!!e.sent()];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2]}})})},exports.parkCurrentCall=function(){var e,t,n,o,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,o,i,a;return e.__awaiter(this,void 0,void 0,function(){var c,u,l,d,p,v,f;return e.__generator(this,function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(c))?[3,1]:[2];case 1:switch(l=null===(i=null==u?void 0:u.id)||void 0===i?void 0:i.match(/\/(\d+)-/),d=l[1],p={convid:null===(a=null==u?void 0:u.id)||void 0===a?void 0:a.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return f=e.sent(),console.error(f),[2,[]];case 5:return[2]}})})},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o,i,a=this;return e.__generator(this,function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(o={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(o)];case 2:return c.sent()?(setTimeout(function(){return e.__awaiter(a,void 0,void 0,function(){var t,s;return e.__generator(this,function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter(function(e){return!e.owner&&e.extenId!==n}).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}})})},500),[2,!0]):[2,!1];case 3:return i=c.sent(),console.error(i),[2,!1];case 4:return[2,!1]}})})},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,o=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=r.store.getState().island.isFromStreaming;if(o||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),d&&l){var p=u.getStreamingSourceId(l);p&&(a.unsubscribe({id:p}).then(function(){return console.debug("Unsubscribed from streaming source: ".concat(p))}).catch(function(e){return console.error("Error unsubscribing from streaming source:",e)}),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),i.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);i.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,function(){var n,o,i;return e.__generator(this,function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,o=r.store.getState().currentUser.default_device,i=(null==o?void 0:o.id)||(null==o?void 0:o.exten),n&&i&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:i})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})}function v(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,function(e){switch(e.label){case 0:if(t=null===(b=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===b?void 0:b.currentCall,n=t.accepted,o=t.chSource,a=t.chDest,u=t.incoming,l=t.outgoing,d=t.incomingSocket,p=t.outgoingSocket,v=t.conversationId,f=r.store.getState().currentUser.default_device,h=(null==f?void 0:f.id)||(null==f?void 0:f.exten),g="",n&&(u||d)&&!c.isEmpty(o)?g=null==o?void 0:o.callerNum:n&&(l||p)&&!c.isEmpty(a)&&(g=null==a?void 0:a.callerNum),""===h||""===v||""===g)return[3,4];if(!(C={convid:null==v?void 0:v.toString(),addEndpointId:null==g?void 0:g.toString(),ownerEndpointId:null==h?void 0:h.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(C)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),i.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return m=e.sent(),console.error(m),[2,!1];case 4:return[2,!1]}})})}function f(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o;return e.__generator(this,function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2,!1]}})})}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,o=n.conference,a=o.isActive,c=o.isOwnerInside,u=o.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find(function(t){return t.exten===e}):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame(function(){setTimeout(function(){i.eventDispatch("phone-island-call-start",{number:e})},1e3)})};function C(t,r){return e.__awaiter(this,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame(function(){r.player.playRemoteAudio(),i.eventDispatch("phone-island-call-transfered",{})})),[2]}})})}exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o;return e.__generator(this,function(e){switch(e.label){case 0:return(o=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:o,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})},exports.callNumber=function(e,o,a){void 0===a&&(a={});var c="sip:".concat(e,"@").concat(o);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(c,a):s.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}})})},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})})};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.hangupConversation({convid:e,endpointId:t})})};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o,a;return e.__generator(this,function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(o={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(o)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}})})},exports.muteAllUsersConference=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o,i,a,c,u,l,d,p,v;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(o=r.store.getState().conference.usersList)||0===Object.keys(o).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),i=Object.values(o),a=n?s.unmuteUserConf:s.muteUserConf,c=0,u=i,e.label=2;case 2:return c<u.length?(l=u[c],d={confId:null==t?void 0:t.toString(),userId:null===(v=l.id)||void 0===v?void 0:v.toString()},[4,a(d)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:l.extenId,muted:!n}),e.label=4;case 4:return c++,[3,2];case 5:return[2,!0];case 6:return p=e.sent(),console.error(p),[2,!1];case 7:return[2]}})})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),i.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,function(){var o,i;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];o={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(o)];case 2:return[2,!!e.sent()];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2]}})})},exports.parkCurrentCall=function(){var e,t,n,o,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){return e.__awaiter(this,void 0,void 0,function(){var n,o,i,a,c,u,l,d,p,v,f;return e.__generator(this,function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),n=null===(p=null===(d=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===d?void 0:d.currentUser)||void 0===p?void 0:p.conversations,(o=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(n))?[3,1]:[2];case 1:switch(i=null===(v=null==o?void 0:o.id)||void 0===v?void 0:v.match(/\/(\d+)-/),a=i[1],c={convid:null===(f=null==o?void 0:o.id)||void 0===f?void 0:f.toString(),endpointId:null==a?void 0:a.toString()},u="",null==o?void 0:o.recording){case"false":u="start_record";break;case"true":u="mute_record";break;case"mute":u="unmute_record";break;default:u=""}if(!c)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(u,c)];case 3:return e.sent(),[3,5];case 4:return l=e.sent(),console.error(l),[2,[]];case 5:return[2]}})})},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o,i,a=this;return e.__generator(this,function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(o={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(o)];case 2:return c.sent()?(setTimeout(function(){return e.__awaiter(a,void 0,void 0,function(){var t,s;return e.__generator(this,function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter(function(e){return!e.owner&&e.extenId!==n}).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}})})},500),[2,!0]):[2,!1];case 3:return i=c.sent(),console.error(i),[2,!1];case 4:return[2,!1]}})})},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
2
2
  //# sourceMappingURL=call.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string, options: { video?: boolean } = {}) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI, options)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber } = store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isFromStreaming","island","isWebRTC","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","setIsFromStreaming","resetOperatorBusy","eventDispatch","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","answerWebRTC","answerPhysical","resetOperatorBusyCompletely","endpointIdInConversation","blindTransferRequest","sipHost","options","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","setIslandView","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string, options: { video?: boolean } = {}) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI, options)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber } = store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isFromStreaming","island","isWebRTC","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","setIsFromStreaming","resetOperatorBusy","eventDispatch","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","answerWebRTC","answerPhysical","resetOperatorBusyCompletely","endpointIdInConversation","blindTransferRequest","sipHost","options","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","setIslandView","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"counterpartDevice.js","sources":["../../../src/lib/phone/counterpartDevice.ts"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport type {\n ConversationTypes,\n ExtensionsTypes,\n ExtensionTypeTypes,\n UsersEndpointsTypes,\n} from '../../types'\n\ninterface UsersDataTypes {\n extensions: ExtensionsTypes | null\n endpoints: UsersEndpointsTypes | null\n}\n\nexport function getExtensionFromChannel(channel?: string): string {\n if (!channel || typeof channel !== 'string' || channel.startsWith('Local/')) return ''\n const dashIndex = channel.lastIndexOf('-')\n const base = dashIndex > 0 ? channel.substring(0, dashIndex) : channel\n const parts = base.split('/')\n return parts.length > 1 ? parts[1] : ''\n}\n\nfunction getDeviceType(\n exten: string,\n username: string,\n endpoints: UsersEndpointsTypes | null,\n): ExtensionTypeTypes | '' {\n const userExtensions = endpoints?.[username]?.endpoints?.extension || []\n return userExtensions.find((extension) => extension?.id === exten)?.type || ''\n}\n\nfunction findDeviceByLinkedId(\n conv: ConversationTypes,\n username: string,\n extensions: ExtensionsTypes,\n): string {\n if (!conv.linkedId) return ''\n\n const candidates = Object.values(extensions).filter(\n (extension) => extension?.username === username && extension?.exten !== conv.owner,\n )\n\n for (const extension of candidates) {\n const conversations = Object.values(extension?.conversations || {})\n const match = conversations.find(\n (conversation) =>\n conversation?.linkedId === conv.linkedId &&\n (conv.connected ? conversation.connected : conversation.direction === 'out'),\n )\n if (match) return extension.exten\n }\n\n return ''\n}\n\nexport function getMainExtensionNumber(number: string, users: UsersDataTypes): string {\n const username = users.extensions?.[number]?.username\n if (!username) return number\n return users.endpoints?.[username]?.endpoints?.mainextension?.[0]?.id || number\n}\n\nexport function getCounterpartDeviceType(\n conv: ConversationTypes,\n users: UsersDataTypes,\n): ExtensionTypeTypes | '' {\n const { extensions, endpoints } = users\n if (!conv || !extensions) return ''\n\n const counterpartNum = `${conv.counterpartNum || ''}`\n const username = extensions[counterpartNum]?.username\n if (!username) return ''\n\n const channelExtensions = [conv.chSource?.channel, conv.chDest?.channel]\n .map(getExtensionFromChannel)\n .filter((exten) => exten && exten !== conv.owner)\n\n let deviceExten =\n channelExtensions.find((exten) => extensions[exten]?.username === username) || ''\n\n if (!deviceExten) {\n deviceExten = findDeviceByLinkedId(conv, username, extensions)\n }\n\n if (!deviceExten) return ''\n\n return getDeviceType(deviceExten, username, endpoints)\n}\n"],"names":["getExtensionFromChannel","channel","startsWith","dashIndex","lastIndexOf","parts","substring","split","length","conv","users","extensions","endpoints","counterpartNum","concat","username","_a","deviceExten","_b","chSource","chDest","_c","map","filter","exten","owner","find","linkedId","candidates","Object","values","extension","candidates_1","_i","conversations","conversation","connected","direction","findDeviceByLinkedId","id","type","getDeviceType","number","_f","_e","_d","mainextension","_g"],"mappings":"aAeM,SAAUA,EAAwBC,GACtC,IAAKA,GAA8B,iBAAZA,GAAwBA,EAAQC,WAAW,UAAW,MAAO,GACpF,IAAMC,EAAYF,EAAQG,YAAY,KAEhCC,GADOF,EAAY,EAAIF,EAAQK,UAAU,EAAGH,GAAaF,GAC5CM,MAAM,KACzB,OAAOF,EAAMG,OAAS,EAAIH,EAAM,GAAK,EACvC,yFAyCgB,SACdI,EACAC,aAEQC,EAA0BD,EAAKC,WAAnBC,EAAcF,EAAKE,UACvC,IAAKH,IAASE,EAAY,MAAO,GAEjC,IAAME,EAAiB,GAAGC,OAAAL,EAAKI,gBAAkB,IAC3CE,EAAuC,QAA5BC,EAAAL,EAAWE,UAAiB,IAAAG,OAAA,EAAAA,EAAAD,SAC7C,IAAKA,EAAU,MAAO,GAEtB,IAIIE,EAJsB,CAAc,QAAbC,EAAAT,EAAKU,gBAAQ,IAAAD,OAAA,EAAAA,EAAEjB,QAAoB,UAAXQ,EAAKW,cAAM,IAAAC,OAAA,EAAAA,EAAEpB,SAC7DqB,IAAItB,GACJuB,OAAO,SAACC,GAAU,OAAAA,GAASA,IAAUf,EAAKgB,KAAxB,GAGDC,KAAK,SAACF,GAAU,IAAAR,EAAA,OAAiB,QAAjBA,EAAAL,EAAWa,UAAM,IAAAR,OAAA,EAAAA,EAAED,YAAaA,CAAQ,IAAK,GAMjF,OAJKE,IACHA,EAjDJ,SACER,EACAM,EACAJ,GAEA,IAAKF,EAAKkB,SAAU,MAAO,GAM3B,IAJA,IAAMC,EAAaC,OAAOC,OAAOnB,GAAYY,OAC3C,SAACQ,GAAc,OAAAA,aAAS,EAATA,EAAWhB,YAAaA,IAAYgB,aAAS,EAATA,EAAWP,SAAUf,EAAKgB,KAAK,OAG5DO,EAAAJ,EAAAK,EAAUD,EAAAxB,OAAVyB,IAAY,CAA/B,IAAMF,EAASC,EAAAC,GAOlB,GANsBJ,OAAOC,QAAOC,eAAAA,EAAWG,gBAAiB,CAAE,GACtCR,KAC1B,SAACS,GACC,OAAAA,aAAY,EAAZA,EAAcR,YAAalB,EAAKkB,WAC/BlB,EAAK2B,UAAYD,EAAaC,UAAuC,QAA3BD,EAAaE,UADxD,GAGO,OAAON,EAAUP,KAC7B,CAED,MAAO,EACT,CA2BkBc,CAAqB7B,EAAMM,EAAUJ,IAGhDM,EA7DP,SACEO,EACAT,EACAH,aAGA,OAAoE,QAA7DS,cADuC,QAAvBL,EAAAJ,aAAS,EAATA,EAAYG,UAAW,IAAAC,OAAA,EAAAA,EAAAJ,gCAAWmB,YAAa,IAChDL,KAAK,SAACK,GAAc,OAAAA,aAAS,EAATA,EAAWQ,MAAOf,CAAK,UAAG,IAAAH,OAAA,EAAAA,EAAAmB,OAAQ,EAC9E,CAwDSC,CAAcxB,EAAaF,EAAUH,GAFnB,EAG3B,mEA/BgB,SAAuB8B,EAAgBhC,qBAC/CK,EAAuC,QAA5BG,EAAgB,QAAhBF,EAAAN,EAAMC,kBAAU,IAAAK,OAAA,EAAAA,EAAG0B,UAAS,IAAAxB,OAAA,EAAAA,EAAAH,SAC7C,OAAKA,IAC8D,UAAJ,QAAxD4B,EAAwC,QAAxCC,EAA6B,UAAX,QAAlBvB,EAAAX,EAAME,iBAAY,IAAAS,OAAA,EAAAA,EAAAN,UAAW,IAAA8B,OAAA,EAAAA,EAAAjC,iBAAW,IAAAgC,OAAA,EAAAA,EAAAE,qBAAgB,IAAAH,OAAA,EAAAA,EAAA,UAAI,IAAAI,OAAA,EAAAA,EAAAR,KAD7CG,CAExB"}
1
+ {"version":3,"file":"counterpartDevice.js","sources":["../../../src/lib/phone/counterpartDevice.ts"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport type {\n ConversationTypes,\n ExtensionsTypes,\n ExtensionTypeTypes,\n UsersEndpointsTypes,\n} from '../../types'\n\ninterface UsersDataTypes {\n extensions: ExtensionsTypes | null\n endpoints: UsersEndpointsTypes | null\n}\n\nexport function getExtensionFromChannel(channel?: string): string {\n if (!channel || typeof channel !== 'string' || channel.startsWith('Local/')) return ''\n const dashIndex = channel.lastIndexOf('-')\n const base = dashIndex > 0 ? channel.substring(0, dashIndex) : channel\n const parts = base.split('/')\n return parts.length > 1 ? parts[1] : ''\n}\n\nfunction getDeviceType(\n exten: string,\n username: string,\n endpoints: UsersEndpointsTypes | null,\n): ExtensionTypeTypes | '' {\n const userExtensions = endpoints?.[username]?.endpoints?.extension || []\n return userExtensions.find((extension) => extension?.id === exten)?.type || ''\n}\n\nfunction findDeviceByLinkedId(\n conv: ConversationTypes,\n username: string,\n extensions: ExtensionsTypes,\n): string {\n if (!conv.linkedId) return ''\n\n const candidates = Object.values(extensions).filter(\n (extension) => extension?.username === username && extension?.exten !== conv.owner,\n )\n\n for (const extension of candidates) {\n const conversations = Object.values(extension?.conversations || {})\n const match = conversations.find(\n (conversation) =>\n conversation?.linkedId === conv.linkedId &&\n (conv.connected ? conversation.connected : conversation.direction === 'out'),\n )\n if (match) return extension.exten\n }\n\n return ''\n}\n\nexport function getMainExtensionNumber(number: string, users: UsersDataTypes): string {\n const username = users.extensions?.[number]?.username\n if (!username) return number\n return users.endpoints?.[username]?.endpoints?.mainextension?.[0]?.id || number\n}\n\nexport function getCounterpartDeviceType(\n conv: ConversationTypes,\n users: UsersDataTypes,\n): ExtensionTypeTypes | '' {\n const { extensions, endpoints } = users\n if (!conv || !extensions) return ''\n\n const counterpartNum = `${conv.counterpartNum || ''}`\n const username = extensions[counterpartNum]?.username\n if (!username) return ''\n\n const channelExtensions = [conv.chSource?.channel, conv.chDest?.channel]\n .map(getExtensionFromChannel)\n .filter((exten) => exten && exten !== conv.owner)\n\n let deviceExten =\n channelExtensions.find((exten) => extensions[exten]?.username === username) || ''\n\n if (!deviceExten) {\n deviceExten = findDeviceByLinkedId(conv, username, extensions)\n }\n\n if (!deviceExten) return ''\n\n return getDeviceType(deviceExten, username, endpoints)\n}\n"],"names":["getExtensionFromChannel","channel","startsWith","dashIndex","lastIndexOf","parts","substring","split","length","conv","users","extensions","endpoints","counterpartNum","concat","username","_a","deviceExten","_b","chSource","chDest","_c","map","filter","exten","owner","find","linkedId","candidates","Object","values","extension","_i","candidates_1","conversations","conversation","connected","direction","findDeviceByLinkedId","id","type","getDeviceType","number","_f","_e","_d","mainextension","_g"],"mappings":"aAeM,SAAUA,EAAwBC,GACtC,IAAKA,GAA8B,iBAAZA,GAAwBA,EAAQC,WAAW,UAAW,MAAO,GACpF,IAAMC,EAAYF,EAAQG,YAAY,KAEhCC,GADOF,EAAY,EAAIF,EAAQK,UAAU,EAAGH,GAAaF,GAC5CM,MAAM,KACzB,OAAOF,EAAMG,OAAS,EAAIH,EAAM,GAAK,EACvC,yFAyCgB,SACdI,EACAC,aAEQC,EAA0BD,EAAKC,WAAnBC,EAAcF,EAAKE,UACvC,IAAKH,IAASE,EAAY,MAAO,GAEjC,IAAME,EAAiB,GAAGC,OAAAL,EAAKI,gBAAkB,IAC3CE,EAAuC,QAA5BC,EAAAL,EAAWE,UAAiB,IAAAG,OAAA,EAAAA,EAAAD,SAC7C,IAAKA,EAAU,MAAO,GAEtB,IAIIE,EAJsB,CAAc,QAAbC,EAAAT,EAAKU,gBAAQ,IAAAD,OAAA,EAAAA,EAAEjB,QAAoB,UAAXQ,EAAKW,cAAM,IAAAC,OAAA,EAAAA,EAAEpB,SAC7DqB,IAAItB,GACJuB,OAAO,SAACC,GAAU,OAAAA,GAASA,IAAUf,EAAKgB,KAAxB,GAGDC,KAAK,SAACF,GAAU,IAAAR,EAAA,OAAiB,QAAjBA,EAAAL,EAAWa,UAAM,IAAAR,OAAA,EAAAA,EAAED,YAAaA,CAAQ,IAAK,GAMjF,OAJKE,IACHA,EAjDJ,SACER,EACAM,EACAJ,GAEA,IAAKF,EAAKkB,SAAU,MAAO,GAM3B,IAJA,IAAMC,EAAaC,OAAOC,OAAOnB,GAAYY,OAC3C,SAACQ,GAAc,OAAAA,aAAS,EAATA,EAAWhB,YAAaA,IAAYgB,aAAS,EAATA,EAAWP,SAAUf,EAAKgB,KAAK,GAG5DO,EAAA,EAAAC,EAAUL,EAAVI,WAAAA,IAAY,CAA/B,IAAMD,EAASE,EAAAD,GAOlB,GANsBH,OAAOC,QAAOC,eAAAA,EAAWG,gBAAiB,CAAE,GACtCR,KAC1B,SAACS,GACC,OAAAA,aAAY,EAAZA,EAAcR,YAAalB,EAAKkB,WAC/BlB,EAAK2B,UAAYD,EAAaC,UAAuC,QAA3BD,EAAaE,UADxD,GAGO,OAAON,EAAUP,KAC7B,CAED,MAAO,EACT,CA2BkBc,CAAqB7B,EAAMM,EAAUJ,IAGhDM,EA7DP,SACEO,EACAT,EACAH,aAGA,OAAoE,QAA7DS,cADuC,QAAvBL,EAAAJ,aAAS,EAATA,EAAYG,UAAW,IAAAC,OAAA,EAAAA,EAAAJ,gCAAWmB,YAAa,IAChDL,KAAK,SAACK,GAAc,OAAAA,aAAS,EAATA,EAAWQ,MAAOf,CAAK,UAAG,IAAAH,OAAA,EAAAA,EAAAmB,OAAQ,EAC9E,CAwDSC,CAAcxB,EAAaF,EAAUH,GAFnB,EAG3B,mEA/BgB,SAAuB8B,EAAgBhC,qBAC/CK,EAAuC,QAA5BG,EAAgB,QAAhBF,EAAAN,EAAMC,kBAAU,IAAAK,OAAA,EAAAA,EAAG0B,UAAS,IAAAxB,OAAA,EAAAA,EAAAH,SAC7C,OAAKA,IAC8D,UAAJ,QAAxD4B,EAAwC,QAAxCC,EAA6B,UAAX,QAAlBvB,EAAAX,EAAME,iBAAY,IAAAS,OAAA,EAAAA,EAAAN,UAAW,IAAA8B,OAAA,EAAAA,EAAAjC,iBAAW,IAAAgC,OAAA,EAAAA,EAAAE,qBAAgB,IAAAH,OAAA,EAAAA,EAAA,UAAI,IAAAI,OAAA,EAAAA,EAAAR,KAD7CG,CAExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sources":["../../../src/lib/phone/video.ts"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\nimport Janus from '../webrtc/janus'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Tells the peer (through the websocket) that a video call started, so that\n * a WebRTC peer opens its video view\n */\nexport function notifyPeerVideoStart() {\n const { socket } = store.getState().websocket\n const { username: destUser } = store.getState().currentCall\n const { username: callUser } = store.getState().currentUser\n\n if (!socket || !destUser || !callUser) {\n return\n }\n\n socket.emit('message', {\n message: 'videoCallStart',\n destUser,\n callUser,\n })\n}\n\n/**\n * True when the SDP answer carries an active video stream\n */\nexport function sdpHasActiveVideo(sdp: string | undefined): boolean {\n if (typeof sdp !== 'string') {\n return false\n }\n return /^m=video (?!0 )/m.test(sdp)\n}\n\n/**\n * True when the SDP declines the video stream (m=video with port 0)\n */\nexport function sdpDeclinesVideo(sdp: string | undefined): boolean {\n return typeof sdp === 'string' && /^m=video 0 /m.test(sdp)\n}\n\n/**\n * Stops the local camera and brings the island back to an audio call: used when the\n * remote party, or Asterisk on its behalf, declines the video stream\n */\nexport function releaseLocalVideo() {\n const { localVideoStream, sipcall }: { localVideoStream: MediaStream | null; sipcall: any } =\n store.getState().webrtc\n if (localVideoStream) {\n // @ts-ignore\n Janus.stopAllTracks(localVideoStream)\n }\n store.dispatch.webrtc.updateLocalVideoStream(null)\n const senders: RTCRtpSender[] = sipcall?.webrtcStuff?.pc?.getSenders?.() ?? []\n senders.forEach((sender) => {\n if (sender.track?.kind === 'video') {\n sender.track.stop()\n sender.replaceTrack(null).catch(() => {})\n }\n })\n store.dispatch.currentCall.updateCurrentCall({ isLocalVideoEnabled: false })\n if (store.getState().island.view === 'video') {\n store.dispatch.island.setIslandView('call')\n }\n eventDispatch('phone-island-video-disabled', {})\n}\n"],"names":["socket","store","getState","websocket","destUser","currentCall","username","callUser","currentUser","emit","message","_e","webrtc","localVideoStream","sipcall","Janus","stopAllTracks","dispatch","updateLocalVideoStream","_d","_c","_a","webrtcStuff","pc","_b","getSenders","call","forEach","sender","track","kind","stop","replaceTrack","catch","updateCurrentCall","isLocalVideoEnabled","island","view","setIslandView","eventDispatch","sdp","test"],"mappings":"mTAYU,IAAAA,EAAWC,EAAKA,MAACC,WAAWC,UAASH,OAC3BI,EAAaH,EAAKA,MAACC,WAAWG,YAAWC,SACzCC,EAAaN,EAAKA,MAACC,WAAWM,YAAWF,SAEtDN,GAAWI,GAAaG,GAI7BP,EAAOS,KAAK,UAAW,CACrBC,QAAS,iBACTN,SAAQA,EACRG,SAAQA,GAEZ,mDAwBQI,EACJV,EAAAA,MAAMC,WAAWU,OADXC,EAAgBF,EAAAE,iBAAEC,YAEtBD,GAEFE,UAAMC,cAAcH,GAEtBZ,EAAAA,MAAMgB,SAASL,OAAOM,uBAAuB,OAC2B,QAAxCC,EAAwC,QAAxCC,EAAwB,kBAAxBC,EAAAP,aAAO,EAAPA,EAASQ,kCAAaC,UAAE,IAAAC,OAAA,EAAAA,EAAEC,kBAAc,IAAAL,OAAA,EAAAA,EAAAM,KAAAF,UAAA,IAAAL,EAAAA,EAAI,IACpEQ,QAAQ,SAACC,SACY,WAAT,UAAdA,EAAOC,aAAO,IAAAR,OAAA,EAAAA,EAAAS,QAChBF,EAAOC,MAAME,OACbH,EAAOI,aAAa,MAAMC,MAAM,WAAQ,GAE5C,GACAhC,EAAKA,MAACgB,SAASZ,YAAY6B,kBAAkB,CAAEC,qBAAqB,IAC/B,UAAjClC,EAAKA,MAACC,WAAWkC,OAAOC,MAC1BpC,EAAAA,MAAMgB,SAASmB,OAAOE,cAAc,QAEtCC,gBAAc,8BAA+B,CAAA,EAC/C,2BA5BM,SAA2BC,GAC/B,MAAsB,iBAARA,GAAoB,eAAeC,KAAKD,EACxD,4BAZM,SAA4BA,GAChC,MAAmB,iBAARA,GAGJ,mBAAmBC,KAAKD,EACjC"}
1
+ {"version":3,"file":"video.js","sources":["../../../src/lib/phone/video.ts"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\nimport Janus from '../webrtc/janus'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Tells the peer (through the websocket) that a video call started, so that\n * a WebRTC peer opens its video view\n */\nexport function notifyPeerVideoStart() {\n const { socket } = store.getState().websocket\n const { username: destUser } = store.getState().currentCall\n const { username: callUser } = store.getState().currentUser\n\n if (!socket || !destUser || !callUser) {\n return\n }\n\n socket.emit('message', {\n message: 'videoCallStart',\n destUser,\n callUser,\n })\n}\n\n/**\n * True when the SDP answer carries an active video stream\n */\nexport function sdpHasActiveVideo(sdp: string | undefined): boolean {\n if (typeof sdp !== 'string') {\n return false\n }\n return /^m=video (?!0 )/m.test(sdp)\n}\n\n/**\n * True when the SDP declines the video stream (m=video with port 0)\n */\nexport function sdpDeclinesVideo(sdp: string | undefined): boolean {\n return typeof sdp === 'string' && /^m=video 0 /m.test(sdp)\n}\n\n/**\n * Stops the local camera and brings the island back to an audio call: used when the\n * remote party, or Asterisk on its behalf, declines the video stream\n */\nexport function releaseLocalVideo() {\n const { localVideoStream, sipcall }: { localVideoStream: MediaStream | null; sipcall: any } =\n store.getState().webrtc\n if (localVideoStream) {\n // @ts-ignore\n Janus.stopAllTracks(localVideoStream)\n }\n store.dispatch.webrtc.updateLocalVideoStream(null)\n const senders: RTCRtpSender[] = sipcall?.webrtcStuff?.pc?.getSenders?.() ?? []\n senders.forEach((sender) => {\n if (sender.track?.kind === 'video') {\n sender.track.stop()\n sender.replaceTrack(null).catch(() => {})\n }\n })\n store.dispatch.currentCall.updateCurrentCall({ isLocalVideoEnabled: false })\n if (store.getState().island.view === 'video') {\n store.dispatch.island.setIslandView('call')\n }\n eventDispatch('phone-island-video-disabled', {})\n}\n"],"names":["socket","store","getState","websocket","destUser","currentCall","username","callUser","currentUser","emit","message","_e","webrtc","localVideoStream","sipcall","Janus","stopAllTracks","dispatch","updateLocalVideoStream","_d","_c","_a","webrtcStuff","pc","_b","getSenders","call","forEach","sender","track","kind","stop","replaceTrack","catch","updateCurrentCall","isLocalVideoEnabled","island","view","setIslandView","eventDispatch","sdp","test"],"mappings":"mTAYU,IAAAA,EAAWC,EAAKA,MAACC,WAAWC,UAASH,OAC3BI,EAAaH,EAAKA,MAACC,WAAWG,YAAWC,SACzCC,EAAaN,EAAKA,MAACC,WAAWM,YAAWF,SAEtDN,GAAWI,GAAaG,GAI7BP,EAAOS,KAAK,UAAW,CACrBC,QAAS,iBACTN,SAAQA,EACRG,SAAQA,GAEZ,mDAwBQI,EACJV,EAAAA,MAAMC,WAAWU,OADXC,EAAgBF,EAAAE,iBAAEC,YAEtBD,GAEFE,UAAMC,cAAcH,GAEtBZ,EAAAA,MAAMgB,SAASL,OAAOM,uBAAuB,OAC2B,QAAxCC,EAAwC,QAAxCC,EAAwB,kBAAxBC,EAAAP,aAAO,EAAPA,EAASQ,kCAAaC,UAAE,IAAAC,OAAA,EAAAA,EAAEC,kBAAc,IAAAL,OAAA,EAAAA,EAAAM,KAAAF,UAAA,IAAAL,EAAAA,EAAI,IACpEQ,QAAQ,SAACC,SACY,mBAAvBP,EAAAO,EAAOC,4BAAOC,QAChBF,EAAOC,MAAME,OACbH,EAAOI,aAAa,MAAMC,MAAM,WAAQ,GAE5C,GACAhC,EAAKA,MAACgB,SAASZ,YAAY6B,kBAAkB,CAAEC,qBAAqB,IAC/B,UAAjClC,EAAKA,MAACC,WAAWkC,OAAOC,MAC1BpC,EAAAA,MAAMgB,SAASmB,OAAOE,cAAc,QAEtCC,gBAAc,8BAA+B,CAAA,EAC/C,2BA5BM,SAA2BC,GAC/B,MAAsB,iBAARA,GAAoB,eAAeC,KAAKD,EACxD,4BAZM,SAA4BA,GAChC,MAAmB,iBAARA,GAGJ,mBAAmBC,KAAKD,EACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sources":["../../../src/lib/player/audio.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { getAnnouncement, getAllAnnouncementsInfo } from '../../services/offhour'\nimport { getCallRecording, getRecordingFileName } from '../../services/history_call'\nimport { store } from '../../store'\nimport { AnnouncementInfoTypes } from '../../types'\nimport { getVoicemailBase64, getVoicemailFileName } from '../../services/voicemail'\n\n/**\n * Given an id plays an announcement\n */\nexport async function playAnnouncement(id: string) {\n if (id) {\n const audioFile: string = await getAnnouncement(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('announcement')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id plays a call recording\n */\nexport async function playCallRecording(id: string) {\n if (id) {\n const audioFile: string = await getCallRecording(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('call_recording')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id plays a call recording\n */\nexport async function playVoicemail(id: string) {\n if (id) {\n const audioFile: string = await getVoicemailBase64(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('voicemail')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id retrieves the name of the call recording\n */\nexport async function getRecordingName(id: string) {\n if (id) {\n const fileName: string = await getRecordingFileName(id)\n if (fileName) {\n store.dispatch.player.setAudioPlayerTrackName(fileName)\n }\n }\n}\n\n/**\n * Given an id retrieves the name of the call recording\n */\nexport async function getAnnouncementName(id: string) {\n if (id) {\n const allAnnouncements: AnnouncementInfoTypes[] = await getAllAnnouncementsInfo()\n const announcement = allAnnouncements.find((announcement) => announcement.id.toString() === id)\n if (announcement?.description) {\n store.dispatch.player.setAudioPlayerTrackName(announcement.description)\n }\n }\n}\n\nexport async function getVoicemailName(id: string) {\n if (id) {\n const fileName: string = await getVoicemailFileName(id)\n\n if (fileName) {\n store.dispatch.player.setAudioPlayerTrackName(fileName)\n }\n }\n}\n"],"names":["id","getAllAnnouncementsInfo","allAnnouncements","_a","sent","announcement","find","toString","description","store","dispatch","player","setAudioPlayerTrackName","getRecordingFileName","fileName","getVoicemailFileName","getAnnouncement","audioFile","island","setIslandView","setAudioPlayerType","updateStartAudioPlayer","src","getCallRecording","getVoicemailBase64"],"mappings":"qTAwEM,SAAoCA,yHACpC,OAAAA,EACsD,CAAA,EAAAC,EAAuBA,2BAD3E,CAAA,EAAA,UACEC,EAA4CC,EAA+BC,QAE7EC,OADEA,EAAeH,EAAiBI,KAAK,SAACD,GAAiB,OAAAA,EAAaL,GAAGO,aAAeP,CAAE,WAC1FK,EAAcG,cAChBC,EAAKA,MAACC,SAASC,OAAOC,wBAAwBP,EAAaG,4CAGhE,2BApBK,SAAiCR,uHACjC,OAAAA,EACuB,CAAA,EAAMa,uBAAqBb,IADhD,CAAA,EAAA,WACEc,EAAmBX,EAA8BC,SAErDK,EAAAA,MAAMC,SAASC,OAAOC,wBAAwBE,kCAGnD,2BAeK,SAAiCd,uHACjC,OAAAA,EACuB,CAAA,EAAMe,uBAAqBf,IADhD,CAAA,EAAA,WACEc,EAAmBX,EAA8BC,SAGrDK,EAAAA,MAAMC,SAASC,OAAOC,wBAAwBE,kCAGnD,2BA9EK,SAAiCd,uHACjC,OAAAA,EACwB,CAAA,EAAMgB,kBAAgBhB,IAD5C,CAAA,EAAA,WACEiB,EAAoBd,EAAyBC,UAEjDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,gBACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ,4BAKK,SAAkCjB,uHAClC,OAAAA,EACwB,CAAA,EAAMuB,mBAAiBvB,IAD7C,CAAA,EAAA,WACEiB,EAAoBd,EAA0BC,UAElDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,kBACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ,wBAKK,SAA8BjB,uHAC9B,OAAAA,EACwB,CAAA,EAAMwB,qBAAmBxB,IAD/C,CAAA,EAAA,WACEiB,EAAoBd,EAA4BC,UAEpDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,aACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ"}
1
+ {"version":3,"file":"audio.js","sources":["../../../src/lib/player/audio.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { getAnnouncement, getAllAnnouncementsInfo } from '../../services/offhour'\nimport { getCallRecording, getRecordingFileName } from '../../services/history_call'\nimport { store } from '../../store'\nimport { AnnouncementInfoTypes } from '../../types'\nimport { getVoicemailBase64, getVoicemailFileName } from '../../services/voicemail'\n\n/**\n * Given an id plays an announcement\n */\nexport async function playAnnouncement(id: string) {\n if (id) {\n const audioFile: string = await getAnnouncement(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('announcement')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id plays a call recording\n */\nexport async function playCallRecording(id: string) {\n if (id) {\n const audioFile: string = await getCallRecording(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('call_recording')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id plays a call recording\n */\nexport async function playVoicemail(id: string) {\n if (id) {\n const audioFile: string = await getVoicemailBase64(id)\n if (audioFile) {\n store.dispatch.island.setIslandView('player')\n store.dispatch.player.setAudioPlayerType('voicemail')\n store.dispatch.player.updateStartAudioPlayer({\n src: audioFile,\n })\n }\n }\n}\n\n/**\n * Given an id retrieves the name of the call recording\n */\nexport async function getRecordingName(id: string) {\n if (id) {\n const fileName: string = await getRecordingFileName(id)\n if (fileName) {\n store.dispatch.player.setAudioPlayerTrackName(fileName)\n }\n }\n}\n\n/**\n * Given an id retrieves the name of the call recording\n */\nexport async function getAnnouncementName(id: string) {\n if (id) {\n const allAnnouncements: AnnouncementInfoTypes[] = await getAllAnnouncementsInfo()\n const announcement = allAnnouncements.find((announcement) => announcement.id.toString() === id)\n if (announcement?.description) {\n store.dispatch.player.setAudioPlayerTrackName(announcement.description)\n }\n }\n}\n\nexport async function getVoicemailName(id: string) {\n if (id) {\n const fileName: string = await getVoicemailFileName(id)\n\n if (fileName) {\n store.dispatch.player.setAudioPlayerTrackName(fileName)\n }\n }\n}\n"],"names":["id","getAllAnnouncementsInfo","allAnnouncements","_a","sent","announcement","find","toString","description","store","dispatch","player","setAudioPlayerTrackName","getRecordingFileName","fileName","getVoicemailFileName","getAnnouncement","audioFile","island","setIslandView","setAudioPlayerType","updateStartAudioPlayer","src","getCallRecording","getVoicemailBase64"],"mappings":"qTAwEM,SAAoCA,yHACpC,OAAAA,EACsD,CAAA,EAAAC,EAAuBA,2BAD3E,CAAA,EAAA,UACEC,EAA4CC,EAA+BC,QAE7EC,OADEA,EAAeH,EAAiBI,KAAK,SAACD,GAAiB,OAAAA,EAAaL,GAAGO,aAAeP,CAAE,SAC9E,EAAZK,EAAcG,cAChBC,EAAKA,MAACC,SAASC,OAAOC,wBAAwBP,EAAaG,4CAGhE,2BApBK,SAAiCR,uHACjC,OAAAA,EACuB,CAAA,EAAMa,uBAAqBb,IADhD,CAAA,EAAA,WACEc,EAAmBX,EAA8BC,SAErDK,EAAAA,MAAMC,SAASC,OAAOC,wBAAwBE,kCAGnD,2BAeK,SAAiCd,uHACjC,OAAAA,EACuB,CAAA,EAAMe,uBAAqBf,IADhD,CAAA,EAAA,WACEc,EAAmBX,EAA8BC,SAGrDK,EAAAA,MAAMC,SAASC,OAAOC,wBAAwBE,kCAGnD,2BA9EK,SAAiCd,uHACjC,OAAAA,EACwB,CAAA,EAAMgB,kBAAgBhB,IAD5C,CAAA,EAAA,WACEiB,EAAoBd,EAAyBC,UAEjDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,gBACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ,4BAKK,SAAkCjB,uHAClC,OAAAA,EACwB,CAAA,EAAMuB,mBAAiBvB,IAD7C,CAAA,EAAA,WACEiB,EAAoBd,EAA0BC,UAElDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,kBACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ,wBAKK,SAA8BjB,uHAC9B,OAAAA,EACwB,CAAA,EAAMwB,qBAAmBxB,IAD/C,CAAA,EAAA,WACEiB,EAAoBd,EAA4BC,UAEpDK,EAAAA,MAAMC,SAASQ,OAAOC,cAAc,UACpCV,EAAAA,MAAMC,SAASC,OAAOS,mBAAmB,aACzCX,QAAMC,SAASC,OAAOU,uBAAuB,CAC3CC,IAAKL,oCAIZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"default_device.js","sources":["../../../src/lib/user/default_device.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Checks if the current device is webrtc\n */\nexport function isWebRTC() {\n const { default_device } = store.getState().currentUser\n if (default_device?.type === 'webrtc' || default_device?.type === 'nethlink') {\n return true\n }\n return false\n}\n\nexport function isPhysical() {\n const { default_device } = store.getState().currentUser\n if (default_device?.type === 'physical') {\n return true\n }\n return false\n}\n"],"names":["default_device","store","getState","currentUser","type"],"mappings":"wIAiBU,IAAAA,EAAmBC,EAAKA,MAACC,WAAWC,YAAWH,eACvD,MAA6B,cAAzBA,aAAc,EAAdA,EAAgBI,KAItB,8BAbU,IAAAJ,EAAmBC,EAAKA,MAACC,WAAWC,YAAWH,eACvD,MAA6B,YAAzBA,eAAAA,EAAgBI,OAA8C,cAAzBJ,aAAc,EAAdA,EAAgBI,KAI3D"}
1
+ {"version":3,"file":"default_device.js","sources":["../../../src/lib/user/default_device.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Checks if the current device is webrtc\n */\nexport function isWebRTC() {\n const { default_device } = store.getState().currentUser\n if (default_device?.type === 'webrtc' || default_device?.type === 'nethlink') {\n return true\n }\n return false\n}\n\nexport function isPhysical() {\n const { default_device } = store.getState().currentUser\n if (default_device?.type === 'physical') {\n return true\n }\n return false\n}\n"],"names":["default_device","store","getState","currentUser","type"],"mappings":"wIAiBU,IAAAA,EAAmBC,EAAKA,MAACC,WAAWC,YAAWH,eACvD,MAA6B,cAAzBA,aAAc,EAAdA,EAAgBI,KAItB,8BAbU,IAAAJ,EAAmBC,EAAKA,MAACC,WAAWC,YAAWH,eACvD,MAA6B,YAAzBA,eAAAA,EAAgBI,OAA8C,cAAzBJ,aAAA,EAAAA,EAAgBI,KAI3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\nimport { isFromTrunk } from '../phone/trunk'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter(\n (extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink',\n )\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n\nexport { isFromTrunk }\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"mIAmCM,SAA2BA,GACvB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAC7C,OAAOA,GAAcA,EAAWD,GAAMC,EAAWD,GAAM,IACzD,uCAyBU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,OAAOA,eAAAA,EAAWE,UAAUC,IAAI,SAACD,GAAc,OAAAA,EAAUP,OAAO,EAClE,yCAlDU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,IAAIA,aAAS,EAATA,EAAWE,YAAaF,EAAUE,UAAUE,OAAS,EAAG,CAC1D,IAAMC,EAAmBL,aAAS,EAATA,EAAWE,UAAUI,OAC5C,SAACJ,GAAc,MAAoB,YAApBA,aAAA,EAAAA,EAAWK,OAAyC,cAApBL,aAAA,EAAAA,EAAWK,KAA3C,GAEjB,OAAmC,IAA5BF,EAAiBD,OACpBC,EAAiB,GACjBA,EAAiBD,OAAS,EAC1BC,EACA,IACL,CACD,OAAO,IACT,qCAiBU,IAAAT,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WACrCI,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAElD,GAAIJ,GAAcI,EAChB,IAAwB,IAAAQ,EAAA,EAAAC,EAAAT,EAAUE,UAAVM,EAAAC,EAAAL,OAAAI,IAAqB,CAAxC,IAAMN,EAASO,EAAAD,GAClB,GAAIZ,EAAWM,EAAUP,KAAOC,EAAWM,EAAUP,IAAIe,eACnDC,OAAOC,KAAKhB,EAAWM,EAAUP,IAAIe,eAAeN,OAAS,EAC/D,OAAO,CAGZ,CAEH,OAAO,CACT"}
1
+ {"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\nimport { isFromTrunk } from '../phone/trunk'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter(\n (extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink',\n )\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n\nexport { isFromTrunk }\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"mIAmCM,SAA2BA,GACvB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAC7C,OAAOA,GAAcA,EAAWD,GAAMC,EAAWD,GAAM,IACzD,uCAyBU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,OAAOA,eAAAA,EAAWE,UAAUC,IAAI,SAACD,GAAc,OAAAA,EAAUP,OAAO,EAClE,yCAlDU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,IAAIA,aAAS,EAATA,EAAWE,YAAaF,EAAUE,UAAUE,OAAS,EAAG,CAC1D,IAAMC,EAAmBL,aAAS,EAATA,EAAWE,UAAUI,OAC5C,SAACJ,GAAc,MAAoB,YAApBA,aAAA,EAAAA,EAAWK,OAAyC,cAApBL,aAAA,EAAAA,EAAWK,KAA3C,GAEjB,OAAmC,IAA5BF,EAAiBD,OACpBC,EAAiB,GACjBA,EAAiBD,OAAS,EAC1BC,EACA,IACL,CACD,OAAO,IACT,qCAiBU,IAAAT,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WACrCI,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAElD,GAAIJ,GAAcI,EAChB,IAAwB,IAAAQ,EAAA,EAAAC,EAAAT,EAAUE,UAAVM,EAAmBC,EAAAL,OAAnBI,IAAqB,CAAxC,IAAMN,EAASO,EAAAD,GAClB,GAAIZ,EAAWM,EAAUP,KAAOC,EAAWM,EAAUP,IAAIe,eACnDC,OAAOC,KAAKhB,EAAWM,EAAUP,IAAIe,eAAeN,OAAS,EAC/D,OAAO,CAGZ,CAEH,OAAO,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\nimport { PhonebookContact } from '../types/phonebook'\nimport { ExtensionTypeTypes } from '../types/user'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n conferencing: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n isLocalVideoEnabled: false,\n showRemoteVideoPlaceHolder: true,\n hasVideoTrackAdded: false,\n isStartingVideoCall: false,\n streamingSourceNumber: '',\n chDest: new Array(),\n chSource: new Array(),\n throughQueue: false,\n queueId: '',\n queueName: '',\n queueNumber: '',\n queuePosition: '',\n queueWaitingTime: 0,\n counterpartDeviceType: '' as ExtensionTypeTypes | '',\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n if (Number(payload.startTime) && state.startTime) {\n // avoid updating startTime if it's already set (e.g. while switching to a video call)\n delete payload.startTime\n }\n\n if (payload.throughQueue === false) {\n payload.queueId = ''\n payload.queueName = ''\n payload.queueNumber = ''\n payload.queuePosition = ''\n payload.queueWaitingTime = 0\n }\n\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n deleteTransferCalls: (state) => {\n return {\n ...state,\n transferCalls: state.transferCalls.filter((item) => item.type !== 'transferred'),\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n updateIncoming: (state, payload: boolean) => {\n state.incoming = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n setLocalVideoEnabled: (state, payload: boolean) => {\n state.isLocalVideoEnabled = payload\n return state\n },\n setVideoTrackAdded: (state, payload: boolean) => {\n state.hasVideoTrackAdded = payload\n return state\n },\n updateConferencing: (state, payload: boolean) => {\n return {\n ...state,\n conferencing: payload,\n }\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState?.currentUser?.default_device?.type === 'webrtc' && payload?.incomingWebRTC) ||\n (rootState?.currentUser?.default_device?.type === 'physical' && payload?.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Get selected ringtone from store and play the audio\n const selectedRingtoneAudio = rootState.ringtones\n ? (rootState.ringtones.availableRingtones as any[]).find(\n (r: any) => r.name === rootState.ringtones.selectedRingtone,\n )?.base64Audio || rootState.ringtones.availableRingtones[0]?.base64Audio\n : undefined\n \n if (selectedRingtoneAudio) {\n dispatch.player.updateStartAudioPlayer({ src: selectedRingtoneAudio, loop: true, useRingtoneOutput: true })\n }\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport type chDestTypes = {\n type: 'dest'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport type chSourceTypes = {\n type: 'source'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n conferencing?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n isLocalVideoEnabled?: boolean\n hasVideoTrackAdded?: boolean\n showRemoteVideoPlaceHolder?: boolean\n isStartingVideoCall?: boolean\n streamingSourceNumber?: string\n chDest?: any\n chSource?: any\n throughQueue?: boolean\n queueId?: string\n queueName?: string\n queueNumber?: string\n queuePosition?: string\n queueWaitingTime?: number\n counterpartDeviceType?: ExtensionTypeTypes | ''\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","conferencing","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","isStartingVideoCall","streamingSourceNumber","chDest","chSource","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","counterpartDeviceType","currentCall","createModel","state","reducers","updateCurrentCall","payload","Number","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","deleteTransferCalls","filter","type","setParked","updateRecordingStatus","updateStartTime","updateIncoming","reset","setLocalVideoEnabled","setVideoTrackAdded","updateConferencing","effects","dispatch","checkIncomingUpdatePlay","rootState","_b","_a","currentUser","default_device","_d","_c","_f","_e","selectedRingtoneAudio","ringtones","_g","availableRingtones","r","name","selectedRingtone","base64Audio","_h","undefined","player","updateStartAudioPlayer","src","loop","useRingtoneOutput","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"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"}
1
+ {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\nimport { PhonebookContact } from '../types/phonebook'\nimport { ExtensionTypeTypes } from '../types/user'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n conferencing: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n isLocalVideoEnabled: false,\n showRemoteVideoPlaceHolder: true,\n hasVideoTrackAdded: false,\n isStartingVideoCall: false,\n streamingSourceNumber: '',\n chDest: new Array(),\n chSource: new Array(),\n throughQueue: false,\n queueId: '',\n queueName: '',\n queueNumber: '',\n queuePosition: '',\n queueWaitingTime: 0,\n counterpartDeviceType: '' as ExtensionTypeTypes | '',\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n if (Number(payload.startTime) && state.startTime) {\n // avoid updating startTime if it's already set (e.g. while switching to a video call)\n delete payload.startTime\n }\n\n if (payload.throughQueue === false) {\n payload.queueId = ''\n payload.queueName = ''\n payload.queueNumber = ''\n payload.queuePosition = ''\n payload.queueWaitingTime = 0\n }\n\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n deleteTransferCalls: (state) => {\n return {\n ...state,\n transferCalls: state.transferCalls.filter((item) => item.type !== 'transferred'),\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n updateIncoming: (state, payload: boolean) => {\n state.incoming = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n setLocalVideoEnabled: (state, payload: boolean) => {\n state.isLocalVideoEnabled = payload\n return state\n },\n setVideoTrackAdded: (state, payload: boolean) => {\n state.hasVideoTrackAdded = payload\n return state\n },\n updateConferencing: (state, payload: boolean) => {\n return {\n ...state,\n conferencing: payload,\n }\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState?.currentUser?.default_device?.type === 'webrtc' && payload?.incomingWebRTC) ||\n (rootState?.currentUser?.default_device?.type === 'physical' && payload?.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Get selected ringtone from store and play the audio\n const selectedRingtoneAudio = rootState.ringtones\n ? (rootState.ringtones.availableRingtones as any[]).find(\n (r: any) => r.name === rootState.ringtones.selectedRingtone,\n )?.base64Audio || rootState.ringtones.availableRingtones[0]?.base64Audio\n : undefined\n \n if (selectedRingtoneAudio) {\n dispatch.player.updateStartAudioPlayer({ src: selectedRingtoneAudio, loop: true, useRingtoneOutput: true })\n }\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport type chDestTypes = {\n type: 'dest'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport type chSourceTypes = {\n type: 'source'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n conferencing?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n isLocalVideoEnabled?: boolean\n hasVideoTrackAdded?: boolean\n showRemoteVideoPlaceHolder?: boolean\n isStartingVideoCall?: boolean\n streamingSourceNumber?: string\n chDest?: any\n chSource?: any\n throughQueue?: boolean\n queueId?: string\n queueName?: string\n queueNumber?: string\n queuePosition?: string\n queueWaitingTime?: number\n counterpartDeviceType?: ExtensionTypeTypes | ''\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","conferencing","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","isStartingVideoCall","streamingSourceNumber","chDest","chSource","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","counterpartDeviceType","currentCall","createModel","state","reducers","updateCurrentCall","payload","Number","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","deleteTransferCalls","filter","type","setParked","updateRecordingStatus","updateStartTime","updateIncoming","reset","setLocalVideoEnabled","setVideoTrackAdded","updateConferencing","effects","dispatch","checkIncomingUpdatePlay","rootState","_b","_a","currentUser","default_device","_d","_c","_f","_e","selectedRingtoneAudio","ringtones","_g","availableRingtones","r","name","selectedRingtone","base64Audio","_h","undefined","player","updateStartAudioPlayer","src","loop","useRingtoneOutput","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"island.js","sources":["../../src/models/island.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { eventDispatch } from '../utils'\n\nconst defaultState: IslandTypes = {\n view: null,\n isOpen: true,\n actionsExpanded: false,\n startPosition: {\n x: 0,\n y: 0,\n },\n inputOutputOpened: false,\n settingsView: 'main',\n contactListView: 'main',\n sideViewIsVisible: false,\n transcriptionViewIsVisible: false,\n isConferenceList: false,\n previousView: null,\n avoidToShow: false,\n isFullScreen: false,\n isFromStreaming: false,\n isExtraLarge: false,\n urlOpened: false,\n previewCallFromMobileOrNethlink: false,\n forceReload: false,\n operatorBusy: {\n isActive: false,\n calledNumber: null,\n callerNumber: null,\n },\n}\n\nexport const island = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setIslandView: (state, newView: IslandViewType | null) => {\n if (newView === state?.view) {\n // Don't change view if it's the same\n return state\n } else {\n return {\n ...state,\n view: newView,\n previousView: state?.view,\n }\n }\n },\n toggleIsOpen: (state, payload: boolean) => {\n return {\n ...state,\n isOpen: payload,\n }\n },\n toggleActionsExpanded: (state, payload: boolean) => {\n state.actionsExpanded = payload\n return state\n },\n toggleInputOutputOpened: (state, payload: boolean) => {\n state.inputOutputOpened = payload\n return state\n },\n setSettingsView: (state, payload: SettingsViewType) => {\n state.settingsView = payload\n },\n setContactListView: (state, payload: ContactListViewType) => {\n state.contactListView = payload\n },\n toggleSideViewVisible: (state, payload: boolean) => {\n state.sideViewIsVisible = payload\n },\n toggleTranscriptionViewVisible: (state, payload: boolean) => {\n state.transcriptionViewIsVisible = payload\n },\n toggleConferenceList: (state, payload: boolean) => {\n state.isConferenceList = payload\n },\n toggleAvoidToShow: (state, payload: boolean) => {\n state.avoidToShow = payload\n },\n setUrlOpened: (state, payload: boolean) => {\n state.urlOpened = payload\n return state\n },\n setPreviewCallFromMobileOrNethlink: (state, payload: boolean) => {\n state.previewCallFromMobileOrNethlink = payload\n return state\n },\n setForceReload: (state, payload: boolean) => {\n state.forceReload = payload\n return state\n },\n resetSettingsView: (state) => {\n state.settingsView = 'main'\n },\n setFullScreen: (state, payload: boolean) => {\n return {\n ...state,\n isFullScreen: payload,\n }\n },\n setIsFromStreaming: (state, payload: boolean) => {\n return {\n ...state,\n isFromStreaming: payload,\n }\n },\n setExtraLarge: (state, payload: boolean) => {\n return {\n ...state,\n isExtraLarge: payload,\n }\n },\n resetPlayerClose: (state) => {\n return getResetState(state, false)\n },\n resetIslandStore: (state) => {\n return getResetState(state, true)\n },\n _resetIslandStoreInternal: (state) => {\n return getResetState(state, true)\n },\n _resetPlayerCloseInternal: (state) => {\n return getResetState(state, false)\n },\n setOperatorBusyCalledNumber: (state, payload: string) => {\n state.operatorBusy.calledNumber = payload\n return state\n },\n setOperatorBusyActive: (state, payload: { callerNumber: string }) => {\n state.operatorBusy.isActive = true\n state.operatorBusy.callerNumber = payload.callerNumber\n return state\n },\n resetOperatorBusy: (state) => {\n state.operatorBusy.isActive = false\n state.operatorBusy.callerNumber = null\n // Keep calledNumber for potential reuse\n return state\n },\n resetOperatorBusyCompletely: (state) => {\n state.operatorBusy.isActive = false\n state.operatorBusy.calledNumber = null\n state.operatorBusy.callerNumber = null\n return state\n },\n },\n effects: (dispatch) => ({\n handleToggleIsOpen: (_: void, rootState) => {\n if (\n rootState.island.isOpen &&\n rootState.alerts.status.activeAlertsCount > 0 &&\n !rootState.currentCall.displayName\n ) {\n eventDispatch('phone-island-expanded', {})\n dispatch.island.toggleIsOpen(true)\n } else {\n eventDispatch('phone-island-' + (rootState.island.isOpen ? 'compressed' : 'expanded'), {})\n if (rootState.island.isOpen) {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n }\n dispatch.island.toggleIsOpen(!rootState.island.isOpen)\n }\n },\n handleResetIslandStore: () => {\n dispatch.island._resetIslandStoreInternal()\n eventDispatch('phone-island-transcription-close', {})\n },\n handleResetPlayerClose: () => {\n dispatch.island._resetPlayerCloseInternal()\n eventDispatch('phone-island-transcription-close', {})\n },\n }),\n})\n\nfunction getResetState(state: IslandTypes, includeRecorder: boolean): IslandTypes {\n // Keep beginning position\n const preservedStartPosition = state.startPosition\n // Determine which view to preserve\n const viewsToPreserve = ['waitingConference']\n if (includeRecorder) {\n viewsToPreserve.push('recorder')\n }\n\n const preservedView = viewsToPreserve.includes(state.view as string)\n ? state.view\n : defaultState.view\n const avoidToShow = state.avoidToShow\n\n return {\n ...defaultState,\n startPosition: preservedStartPosition,\n view: preservedView,\n avoidToShow: avoidToShow,\n isFromStreaming: false,\n previewCallFromMobileOrNethlink: false,\n forceReload: false,\n // Keep previousView if waitingConference\n previousView:\n state.view === 'waitingConference' ? state.previousView : defaultState.previousView,\n // Preserve calledNumber for potential operator busy scenarios\n operatorBusy: {\n isActive: false,\n calledNumber: state.operatorBusy.calledNumber,\n callerNumber: null,\n },\n }\n}\n\ntype IslandViewType =\n | 'call'\n | 'keypad'\n | 'player'\n | 'transfer'\n | 'recorder'\n | 'physicalPhoneRecorder'\n | 'settings'\n | 'video'\n | 'conference'\n | 'switchDevice'\n | 'waitingConference'\n | 'streamingAnswer'\n | 'operatorBusy'\ntype SettingsViewType = 'microphone' | 'audioInput' | 'videoInput' | 'theme' | 'main'\ntype ContactListViewType = 'main' | 'selectContactNumber'\n\ninterface IslandTypes {\n view?: IslandViewType | null\n isOpen: boolean\n actionsExpanded: boolean\n startPosition: {\n x: number\n y: number\n }\n inputOutputOpened: boolean\n settingsView: SettingsViewType\n contactListView: ContactListViewType\n sideViewIsVisible: boolean\n transcriptionViewIsVisible: boolean\n isConferenceList: boolean\n previousView?: IslandViewType | null\n avoidToShow?: boolean\n isFullScreen: boolean\n isFromStreaming: boolean\n isExtraLarge: boolean\n urlOpened: boolean\n previewCallFromMobileOrNethlink: boolean\n forceReload: boolean\n operatorBusy: {\n isActive: boolean\n calledNumber: string | null\n callerNumber: string | null\n }\n}\n"],"names":["defaultState","view","isOpen","actionsExpanded","startPosition","x","y","inputOutputOpened","settingsView","contactListView","sideViewIsVisible","transcriptionViewIsVisible","isConferenceList","previousView","avoidToShow","isFullScreen","isFromStreaming","isExtraLarge","urlOpened","previewCallFromMobileOrNethlink","forceReload","operatorBusy","isActive","calledNumber","callerNumber","island","createModel","state","reducers","setIslandView","newView","__assign","toggleIsOpen","payload","toggleActionsExpanded","toggleInputOutputOpened","setSettingsView","setContactListView","toggleSideViewVisible","toggleTranscriptionViewVisible","toggleConferenceList","toggleAvoidToShow","setUrlOpened","setPreviewCallFromMobileOrNethlink","setForceReload","resetSettingsView","setFullScreen","setIsFromStreaming","setExtraLarge","resetPlayerClose","getResetState","resetIslandStore","_resetIslandStoreInternal","_resetPlayerCloseInternal","setOperatorBusyCalledNumber","setOperatorBusyActive","resetOperatorBusy","resetOperatorBusyCompletely","effects","dispatch","handleToggleIsOpen","_","rootState","alerts","status","activeAlertsCount","currentCall","displayName","eventDispatch","handleResetIslandStore","handleResetPlayerClose","includeRecorder","preservedStartPosition","viewsToPreserve","push","preservedView","includes"],"mappings":"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"}
1
+ {"version":3,"file":"island.js","sources":["../../src/models/island.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { eventDispatch } from '../utils'\n\nconst defaultState: IslandTypes = {\n view: null,\n isOpen: true,\n actionsExpanded: false,\n startPosition: {\n x: 0,\n y: 0,\n },\n inputOutputOpened: false,\n settingsView: 'main',\n contactListView: 'main',\n sideViewIsVisible: false,\n transcriptionViewIsVisible: false,\n isConferenceList: false,\n previousView: null,\n avoidToShow: false,\n isFullScreen: false,\n isFromStreaming: false,\n isExtraLarge: false,\n urlOpened: false,\n previewCallFromMobileOrNethlink: false,\n forceReload: false,\n operatorBusy: {\n isActive: false,\n calledNumber: null,\n callerNumber: null,\n },\n}\n\nexport const island = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setIslandView: (state, newView: IslandViewType | null) => {\n if (newView === state?.view) {\n // Don't change view if it's the same\n return state\n } else {\n return {\n ...state,\n view: newView,\n previousView: state?.view,\n }\n }\n },\n toggleIsOpen: (state, payload: boolean) => {\n return {\n ...state,\n isOpen: payload,\n }\n },\n toggleActionsExpanded: (state, payload: boolean) => {\n state.actionsExpanded = payload\n return state\n },\n toggleInputOutputOpened: (state, payload: boolean) => {\n state.inputOutputOpened = payload\n return state\n },\n setSettingsView: (state, payload: SettingsViewType) => {\n state.settingsView = payload\n },\n setContactListView: (state, payload: ContactListViewType) => {\n state.contactListView = payload\n },\n toggleSideViewVisible: (state, payload: boolean) => {\n state.sideViewIsVisible = payload\n },\n toggleTranscriptionViewVisible: (state, payload: boolean) => {\n state.transcriptionViewIsVisible = payload\n },\n toggleConferenceList: (state, payload: boolean) => {\n state.isConferenceList = payload\n },\n toggleAvoidToShow: (state, payload: boolean) => {\n state.avoidToShow = payload\n },\n setUrlOpened: (state, payload: boolean) => {\n state.urlOpened = payload\n return state\n },\n setPreviewCallFromMobileOrNethlink: (state, payload: boolean) => {\n state.previewCallFromMobileOrNethlink = payload\n return state\n },\n setForceReload: (state, payload: boolean) => {\n state.forceReload = payload\n return state\n },\n resetSettingsView: (state) => {\n state.settingsView = 'main'\n },\n setFullScreen: (state, payload: boolean) => {\n return {\n ...state,\n isFullScreen: payload,\n }\n },\n setIsFromStreaming: (state, payload: boolean) => {\n return {\n ...state,\n isFromStreaming: payload,\n }\n },\n setExtraLarge: (state, payload: boolean) => {\n return {\n ...state,\n isExtraLarge: payload,\n }\n },\n resetPlayerClose: (state) => {\n return getResetState(state, false)\n },\n resetIslandStore: (state) => {\n return getResetState(state, true)\n },\n _resetIslandStoreInternal: (state) => {\n return getResetState(state, true)\n },\n _resetPlayerCloseInternal: (state) => {\n return getResetState(state, false)\n },\n setOperatorBusyCalledNumber: (state, payload: string) => {\n state.operatorBusy.calledNumber = payload\n return state\n },\n setOperatorBusyActive: (state, payload: { callerNumber: string }) => {\n state.operatorBusy.isActive = true\n state.operatorBusy.callerNumber = payload.callerNumber\n return state\n },\n resetOperatorBusy: (state) => {\n state.operatorBusy.isActive = false\n state.operatorBusy.callerNumber = null\n // Keep calledNumber for potential reuse\n return state\n },\n resetOperatorBusyCompletely: (state) => {\n state.operatorBusy.isActive = false\n state.operatorBusy.calledNumber = null\n state.operatorBusy.callerNumber = null\n return state\n },\n },\n effects: (dispatch) => ({\n handleToggleIsOpen: (_: void, rootState) => {\n if (\n rootState.island.isOpen &&\n rootState.alerts.status.activeAlertsCount > 0 &&\n !rootState.currentCall.displayName\n ) {\n eventDispatch('phone-island-expanded', {})\n dispatch.island.toggleIsOpen(true)\n } else {\n eventDispatch('phone-island-' + (rootState.island.isOpen ? 'compressed' : 'expanded'), {})\n if (rootState.island.isOpen) {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n }\n dispatch.island.toggleIsOpen(!rootState.island.isOpen)\n }\n },\n handleResetIslandStore: () => {\n dispatch.island._resetIslandStoreInternal()\n eventDispatch('phone-island-transcription-close', {})\n },\n handleResetPlayerClose: () => {\n dispatch.island._resetPlayerCloseInternal()\n eventDispatch('phone-island-transcription-close', {})\n },\n }),\n})\n\nfunction getResetState(state: IslandTypes, includeRecorder: boolean): IslandTypes {\n // Keep beginning position\n const preservedStartPosition = state.startPosition\n // Determine which view to preserve\n const viewsToPreserve = ['waitingConference']\n if (includeRecorder) {\n viewsToPreserve.push('recorder')\n }\n\n const preservedView = viewsToPreserve.includes(state.view as string)\n ? state.view\n : defaultState.view\n const avoidToShow = state.avoidToShow\n\n return {\n ...defaultState,\n startPosition: preservedStartPosition,\n view: preservedView,\n avoidToShow: avoidToShow,\n isFromStreaming: false,\n previewCallFromMobileOrNethlink: false,\n forceReload: false,\n // Keep previousView if waitingConference\n previousView:\n state.view === 'waitingConference' ? state.previousView : defaultState.previousView,\n // Preserve calledNumber for potential operator busy scenarios\n operatorBusy: {\n isActive: false,\n calledNumber: state.operatorBusy.calledNumber,\n callerNumber: null,\n },\n }\n}\n\ntype IslandViewType =\n | 'call'\n | 'keypad'\n | 'player'\n | 'transfer'\n | 'recorder'\n | 'physicalPhoneRecorder'\n | 'settings'\n | 'video'\n | 'conference'\n | 'switchDevice'\n | 'waitingConference'\n | 'streamingAnswer'\n | 'operatorBusy'\ntype SettingsViewType = 'microphone' | 'audioInput' | 'videoInput' | 'theme' | 'main'\ntype ContactListViewType = 'main' | 'selectContactNumber'\n\ninterface IslandTypes {\n view?: IslandViewType | null\n isOpen: boolean\n actionsExpanded: boolean\n startPosition: {\n x: number\n y: number\n }\n inputOutputOpened: boolean\n settingsView: SettingsViewType\n contactListView: ContactListViewType\n sideViewIsVisible: boolean\n transcriptionViewIsVisible: boolean\n isConferenceList: boolean\n previousView?: IslandViewType | null\n avoidToShow?: boolean\n isFullScreen: boolean\n isFromStreaming: boolean\n isExtraLarge: boolean\n urlOpened: boolean\n previewCallFromMobileOrNethlink: boolean\n forceReload: boolean\n operatorBusy: {\n isActive: boolean\n calledNumber: string | null\n callerNumber: string | null\n }\n}\n"],"names":["defaultState","view","isOpen","actionsExpanded","startPosition","x","y","inputOutputOpened","settingsView","contactListView","sideViewIsVisible","transcriptionViewIsVisible","isConferenceList","previousView","avoidToShow","isFullScreen","isFromStreaming","isExtraLarge","urlOpened","previewCallFromMobileOrNethlink","forceReload","operatorBusy","isActive","calledNumber","callerNumber","island","createModel","state","reducers","setIslandView","newView","__assign","toggleIsOpen","payload","toggleActionsExpanded","toggleInputOutputOpened","setSettingsView","setContactListView","toggleSideViewVisible","toggleTranscriptionViewVisible","toggleConferenceList","toggleAvoidToShow","setUrlOpened","setPreviewCallFromMobileOrNethlink","setForceReload","resetSettingsView","setFullScreen","setIsFromStreaming","setExtraLarge","resetPlayerClose","getResetState","resetIslandStore","_resetIslandStoreInternal","_resetPlayerCloseInternal","setOperatorBusyCalledNumber","setOperatorBusyActive","resetOperatorBusy","resetOperatorBusyCompletely","effects","dispatch","handleToggleIsOpen","_","rootState","alerts","status","activeAlertsCount","currentCall","displayName","eventDispatch","handleResetIslandStore","handleResetPlayerClose","includeRecorder","preservedStartPosition","viewsToPreserve","push","preservedView","includes"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),a=require("../lib/phone/audio.js"),u=require("../events/PlayerEvents.js"),n={audioPlayer:null,audioPlayerPlaying:!1,audioPlayerPaused:!1,audioPlayerLoop:!1,audioPlayerTrackType:null,audioPlayerTrackName:null,audioPlayerTrackDuration:null,localAudio:null,remoteAudio:null,localVideo:null,largeRemoteVideo:null,smallRemoteVideo:null,localScreen:null,remoteScreen:null},i=r.createModel()({state:n,reducers:{updatePlayer:function(r,a){return e.__assign(e.__assign({},r),a)},updateAudioPlayerTrackDuration:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackDuration:a})},updateAudioPlayerSrc:function(e,r){return e.audioPlayer&&e.audioPlayer.current&&(e.audioPlayer.current.src=r),e},stopAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)return r.audioPlayer.current.pause(),r.audioPlayer.current.currentTime=0,"function"==typeof r.audioPlayer.current.setSinkId&&r.audioPlayer.current.setSinkId("default").catch(function(e){console.warn("Failed to reset audio output device to default:",e)}),e.__assign(e.__assign({},r),{audioPlayerPlaying:!1})},emergencyStopAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)try{r.audioPlayer.current.pause(),r.audioPlayer.current.currentTime=0,r.audioPlayer.current.src="","function"==typeof r.audioPlayer.current.setSinkId&&r.audioPlayer.current.setSinkId("default").catch(function(e){console.warn("Failed to reset audio output device to default:",e)})}catch(e){console.error("Error in emergency stop audio player:",e)}return e.__assign(e.__assign({},r),{audioPlayerPlaying:!1,audioPlayerPaused:!1,audioPlayerLoop:!1,audioPlayerTrackType:null,audioPlayerTrackName:null})},pauseAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)return r.audioPlayer.current.pause(),e.__assign(e.__assign({},r),{audioPlayerPaused:!0,audioPlayerPlaying:!1})},setAudioPlayerPaused:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerPaused:a})},setAudioPlayerLoop:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerLoop:a})},setAudioPlayerType:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackType:a})},setAudioPlayerPlaying:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerPlaying:a})},resetAudioPlayerType:function(r){return e.__assign(e.__assign({},r),{audioPlayerTrackType:null})},setAudioPlayerTrackName:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackName:a})},playRemoteAudio:function(e){var r;e.remoteAudio&&(null===(r=e.remoteAudio.current)||void 0===r||r.play())},pauseRemoteAudio:function(e){var r;e.remoteAudio&&(null===(r=e.remoteAudio.current)||void 0===r||r.pause())},setAudioPlayerCurrentTime:function(e,r){e.audioPlayer&&e.audioPlayer.current&&(e.audioPlayer.current.currentTime=r)},reset:function(){return n}},effects:function(r){return{startAudioPlayer:function(e,a){if(a.player.audioPlayer&&a.player.audioPlayer.current){a.player.audioPlayerPlaying&&(a.player.audioPlayer.current.pause(),a.player.audioPlayer.current.currentTime=0);var n=function(){r.player.setAudioPlayerPlaying(!1),a.player.audioPlayer.current.removeEventListener("ended",n),e()};a.player.audioPlayer.current.addEventListener("ended",n),a.player.audioPlayer.current.play(),r.player.setAudioPlayerPlaying(!0),r.player.setAudioPlayerPaused(!1),"player"===a.island.view&&u.dispatchAudioPlayerStarted()}},updateStartAudioPlayer:function(u,n){var i=u.src,o=u.loop,t=void 0!==o&&o,l=u.useRingtoneOutput,d=void 0!==l&&l;return e.__awaiter(void 0,void 0,void 0,function(){var u,o,l,s,c;return e.__generator(this,function(e){switch(e.label){case 0:if(r.player.setAudioPlayerLoop(t),!(u=d?null===(s=n.ringtones)||void 0===s?void 0:s.outputDeviceId:null)||!(null===(c=n.player.audioPlayer)||void 0===c?void 0:c.current)||"function"!=typeof n.player.audioPlayer.current.setSinkId)return[3,8];e.label=1;case 1:return e.trys.push([1,3,,8]),[4,n.player.audioPlayer.current.setSinkId(u)];case 2:return e.sent(),console.info("Ringtone output device applied:",u),[3,8];case 3:o=e.sent(),console.warn("Failed to set ringtone output device, trying fallback to default:",o),e.label=4;case 4:return e.trys.push([4,6,,7]),[4,n.player.audioPlayer.current.setSinkId("default")];case 5:return e.sent(),console.info("Ringtone output fallback to default successful"),r.ringtones.setOutputDeviceId("default"),[3,7];case 6:return l=e.sent(),console.error("Even default device failed for ringtone:",l),[3,7];case 7:return[3,8];case 8:return[4,a.updateAudioPlayerSource("data:audio/ogg;base64, ".concat(i))];case 9:return e.sent(),r.player.startAudioPlayer(function(){}),[2]}})})}}}});exports.player=i;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),a=require("../lib/phone/audio.js"),u=require("../events/PlayerEvents.js"),n={audioPlayer:null,audioPlayerPlaying:!1,audioPlayerPaused:!1,audioPlayerLoop:!1,audioPlayerTrackType:null,audioPlayerTrackName:null,audioPlayerTrackDuration:null,localAudio:null,remoteAudio:null,localVideo:null,largeRemoteVideo:null,smallRemoteVideo:null,localScreen:null,remoteScreen:null},i=r.createModel()({state:n,reducers:{updatePlayer:function(r,a){return e.__assign(e.__assign({},r),a)},updateAudioPlayerTrackDuration:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackDuration:a})},updateAudioPlayerSrc:function(e,r){return e.audioPlayer&&e.audioPlayer.current&&(e.audioPlayer.current.src=r),e},stopAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)return r.audioPlayer.current.pause(),r.audioPlayer.current.currentTime=0,"function"==typeof r.audioPlayer.current.setSinkId&&r.audioPlayer.current.setSinkId("default").catch(function(e){console.warn("Failed to reset audio output device to default:",e)}),e.__assign(e.__assign({},r),{audioPlayerPlaying:!1})},emergencyStopAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)try{r.audioPlayer.current.pause(),r.audioPlayer.current.currentTime=0,r.audioPlayer.current.src="","function"==typeof r.audioPlayer.current.setSinkId&&r.audioPlayer.current.setSinkId("default").catch(function(e){console.warn("Failed to reset audio output device to default:",e)})}catch(e){console.error("Error in emergency stop audio player:",e)}return e.__assign(e.__assign({},r),{audioPlayerPlaying:!1,audioPlayerPaused:!1,audioPlayerLoop:!1,audioPlayerTrackType:null,audioPlayerTrackName:null})},pauseAudioPlayer:function(r){if(r.audioPlayer&&r.audioPlayer.current)return r.audioPlayer.current.pause(),e.__assign(e.__assign({},r),{audioPlayerPaused:!0,audioPlayerPlaying:!1})},setAudioPlayerPaused:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerPaused:a})},setAudioPlayerLoop:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerLoop:a})},setAudioPlayerType:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackType:a})},setAudioPlayerPlaying:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerPlaying:a})},resetAudioPlayerType:function(r){return e.__assign(e.__assign({},r),{audioPlayerTrackType:null})},setAudioPlayerTrackName:function(r,a){return e.__assign(e.__assign({},r),{audioPlayerTrackName:a})},playRemoteAudio:function(e){var r;e.remoteAudio&&(null===(r=e.remoteAudio.current)||void 0===r||r.play())},pauseRemoteAudio:function(e){var r;e.remoteAudio&&(null===(r=e.remoteAudio.current)||void 0===r||r.pause())},setAudioPlayerCurrentTime:function(e,r){e.audioPlayer&&e.audioPlayer.current&&(e.audioPlayer.current.currentTime=r)},reset:function(){return n}},effects:function(r){return{startAudioPlayer:function(e,a){if(a.player.audioPlayer&&a.player.audioPlayer.current){a.player.audioPlayerPlaying&&(a.player.audioPlayer.current.pause(),a.player.audioPlayer.current.currentTime=0);var n=function(){r.player.setAudioPlayerPlaying(!1),a.player.audioPlayer.current.removeEventListener("ended",n),e()};a.player.audioPlayer.current.addEventListener("ended",n),a.player.audioPlayer.current.play(),r.player.setAudioPlayerPlaying(!0),r.player.setAudioPlayerPaused(!1),"player"===a.island.view&&u.dispatchAudioPlayerStarted()}},updateStartAudioPlayer:function(u,n){return e.__awaiter(void 0,[u,n],void 0,function(u,n){var i,o,t,l,d,s=u.src,c=u.loop,y=void 0!==c&&c,P=u.useRingtoneOutput,p=void 0!==P&&P;return e.__generator(this,function(e){switch(e.label){case 0:if(r.player.setAudioPlayerLoop(y),!(i=p?null===(l=n.ringtones)||void 0===l?void 0:l.outputDeviceId:null)||!(null===(d=n.player.audioPlayer)||void 0===d?void 0:d.current)||"function"!=typeof n.player.audioPlayer.current.setSinkId)return[3,8];e.label=1;case 1:return e.trys.push([1,3,,8]),[4,n.player.audioPlayer.current.setSinkId(i)];case 2:return e.sent(),console.info("Ringtone output device applied:",i),[3,8];case 3:o=e.sent(),console.warn("Failed to set ringtone output device, trying fallback to default:",o),e.label=4;case 4:return e.trys.push([4,6,,7]),[4,n.player.audioPlayer.current.setSinkId("default")];case 5:return e.sent(),console.info("Ringtone output fallback to default successful"),r.ringtones.setOutputDeviceId("default"),[3,7];case 6:return t=e.sent(),console.error("Even default device failed for ringtone:",t),[3,7];case 7:return[3,8];case 8:return[4,a.updateAudioPlayerSource("data:audio/ogg;base64, ".concat(s))];case 9:return e.sent(),r.player.startAudioPlayer(function(){}),[2]}})})}}}});exports.player=i;
2
2
  //# sourceMappingURL=player.js.map