@ethora/chat-component-rn 26.10.9 → 26.10.11

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 (608) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +126 -1
  3. package/lib/commonjs/booking/index.js +44 -0
  4. package/lib/commonjs/booking/index.js.map +1 -0
  5. package/lib/commonjs/booking/pendingScheduledCall.js +275 -0
  6. package/lib/commonjs/booking/pendingScheduledCall.js.map +1 -0
  7. package/lib/commonjs/booking/scheduleForm.js +91 -0
  8. package/lib/commonjs/booking/scheduleForm.js.map +1 -0
  9. package/lib/commonjs/booking/scheduledCall.js +141 -0
  10. package/lib/commonjs/booking/scheduledCall.js.map +1 -0
  11. package/lib/commonjs/booking/scheduledCallActions.js +128 -0
  12. package/lib/commonjs/booking/scheduledCallActions.js.map +1 -0
  13. package/lib/commonjs/booking/scheduledCallLink.js +143 -0
  14. package/lib/commonjs/booking/scheduledCallLink.js.map +1 -0
  15. package/lib/commonjs/booking/scheduledCallStore.js +64 -0
  16. package/lib/commonjs/booking/scheduledCallStore.js.map +1 -0
  17. package/lib/commonjs/booking/startRoomCall.js +84 -0
  18. package/lib/commonjs/booking/startRoomCall.js.map +1 -0
  19. package/lib/commonjs/calls/callBusy.js +18 -0
  20. package/lib/commonjs/calls/callBusy.js.map +1 -0
  21. package/lib/commonjs/calls/callDisplay.js +73 -0
  22. package/lib/commonjs/calls/callDisplay.js.map +1 -0
  23. package/lib/commonjs/calls/callMode.js +175 -0
  24. package/lib/commonjs/calls/callMode.js.map +1 -0
  25. package/lib/commonjs/calls/declineReport.js +20 -0
  26. package/lib/commonjs/calls/declineReport.js.map +1 -0
  27. package/lib/commonjs/calls/p2p/P2PCallController.js +724 -0
  28. package/lib/commonjs/calls/p2p/P2PCallController.js.map +1 -0
  29. package/lib/commonjs/calls/p2p/icePolicy.js +107 -0
  30. package/lib/commonjs/calls/p2p/icePolicy.js.map +1 -0
  31. package/lib/commonjs/calls/p2p/negotiator.js +202 -0
  32. package/lib/commonjs/calls/p2p/negotiator.js.map +1 -0
  33. package/lib/commonjs/calls/p2p/p2pRuntime.js +147 -0
  34. package/lib/commonjs/calls/p2p/p2pRuntime.js.map +1 -0
  35. package/lib/commonjs/calls/p2p/signalInbox.js +98 -0
  36. package/lib/commonjs/calls/p2p/signalInbox.js.map +1 -0
  37. package/lib/commonjs/calls/p2p/signalStanza.js +141 -0
  38. package/lib/commonjs/calls/p2p/signalStanza.js.map +1 -0
  39. package/lib/commonjs/calls/p2p/webrtcRuntime.js +53 -0
  40. package/lib/commonjs/calls/p2p/webrtcRuntime.js.map +1 -0
  41. package/lib/commonjs/calls/senderTrust.js +43 -0
  42. package/lib/commonjs/calls/senderTrust.js.map +1 -0
  43. package/lib/commonjs/calls/startCall.js +51 -0
  44. package/lib/commonjs/calls/startCall.js.map +1 -0
  45. package/lib/commonjs/components/Booking/BookingIcons.js +55 -0
  46. package/lib/commonjs/components/Booking/BookingIcons.js.map +1 -0
  47. package/lib/commonjs/components/Booking/ScheduleCallButton.js +64 -0
  48. package/lib/commonjs/components/Booking/ScheduleCallButton.js.map +1 -0
  49. package/lib/commonjs/components/Booking/ScheduleCallSheet.js +351 -0
  50. package/lib/commonjs/components/Booking/ScheduleCallSheet.js.map +1 -0
  51. package/lib/commonjs/components/Booking/ScheduledCallCard.js +203 -0
  52. package/lib/commonjs/components/Booking/ScheduledCallCard.js.map +1 -0
  53. package/lib/commonjs/components/Booking/ScheduledCallHost.js +23 -0
  54. package/lib/commonjs/components/Booking/ScheduledCallHost.js.map +1 -0
  55. package/lib/commonjs/components/Booking/ScheduledCallMessage.js +55 -0
  56. package/lib/commonjs/components/Booking/ScheduledCallMessage.js.map +1 -0
  57. package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js +235 -0
  58. package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js.map +1 -0
  59. package/lib/commonjs/components/Booking/bookingShared.js +305 -0
  60. package/lib/commonjs/components/Booking/bookingShared.js.map +1 -0
  61. package/lib/commonjs/components/MainComponents/AlbumGrid.js +6 -2
  62. package/lib/commonjs/components/MainComponents/AlbumGrid.js.map +1 -1
  63. package/lib/commonjs/components/MainComponents/ChatHeader.js +18 -12
  64. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  65. package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js +5 -2
  66. package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js.map +1 -1
  67. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js +6 -3
  68. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  69. package/lib/commonjs/components/MainComponents/MediaMessage.js +13 -0
  70. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  71. package/lib/commonjs/components/MainComponents/MessageContainer.js +13 -0
  72. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  73. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +10 -0
  74. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  75. package/lib/commonjs/components/MainComponents/RoomList.js +7 -16
  76. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  77. package/lib/commonjs/components/MessageBubble/Message.js +27 -1
  78. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  79. package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js +159 -0
  80. package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
  81. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +203 -134
  82. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  83. package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js +180 -0
  84. package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
  85. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +19 -15
  86. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  87. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -162
  88. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  89. package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js +824 -0
  90. package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
  91. package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js +179 -0
  92. package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
  93. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js +22 -5
  94. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
  95. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +15 -8
  96. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  97. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
  98. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
  99. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js +3 -2
  100. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js.map +1 -1
  101. package/lib/commonjs/components/VideoCalls/CallButtons.js +19 -11
  102. package/lib/commonjs/components/VideoCalls/CallButtons.js.map +1 -1
  103. package/lib/commonjs/components/VideoCalls/CallControlBar.js +119 -0
  104. package/lib/commonjs/components/VideoCalls/CallControlBar.js.map +1 -0
  105. package/lib/commonjs/components/VideoCalls/CallVideo.js +49 -0
  106. package/lib/commonjs/components/VideoCalls/CallVideo.js.map +1 -0
  107. package/lib/commonjs/components/VideoCalls/GroupCallView.js +281 -0
  108. package/lib/commonjs/components/VideoCalls/GroupCallView.js.map +1 -0
  109. package/lib/commonjs/components/VideoCalls/P2PCallRunner.js +151 -0
  110. package/lib/commonjs/components/VideoCalls/P2PCallRunner.js.map +1 -0
  111. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js +38 -14
  112. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  113. package/lib/commonjs/components/VideoCalls/VideoCallSession.js +57 -128
  114. package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
  115. package/lib/commonjs/components/VideoCalls/callActions.js +3 -0
  116. package/lib/commonjs/components/VideoCalls/callActions.js.map +1 -1
  117. package/lib/commonjs/components/VideoCalls/callElapsed.js +38 -0
  118. package/lib/commonjs/components/VideoCalls/callElapsed.js.map +1 -0
  119. package/lib/commonjs/components/VideoCalls/callLive.js +15 -0
  120. package/lib/commonjs/components/VideoCalls/callLive.js.map +1 -0
  121. package/lib/commonjs/components/VideoCalls/callSessionController.js +81 -24
  122. package/lib/commonjs/components/VideoCalls/callSessionController.js.map +1 -1
  123. package/lib/commonjs/components/VideoCalls/callSessionTypes.js +41 -0
  124. package/lib/commonjs/components/VideoCalls/callSessionTypes.js.map +1 -0
  125. package/lib/commonjs/components/VideoCalls/groupLayout.js +43 -0
  126. package/lib/commonjs/components/VideoCalls/groupLayout.js.map +1 -0
  127. package/lib/commonjs/components/VideoCalls/p2pCallSession.js +272 -0
  128. package/lib/commonjs/components/VideoCalls/p2pCallSession.js.map +1 -0
  129. package/lib/commonjs/components/VideoCalls/useCallKeep.js +7 -2
  130. package/lib/commonjs/components/VideoCalls/useCallKeep.js.map +1 -1
  131. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js +2 -1
  132. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
  133. package/lib/commonjs/components/styled/MessageImage.js +4 -1
  134. package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
  135. package/lib/commonjs/components/styled/VideoMessage.js +5 -1
  136. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  137. package/lib/commonjs/context/MediaSourceContext.js +18 -0
  138. package/lib/commonjs/context/MediaSourceContext.js.map +1 -0
  139. package/lib/commonjs/context/xmppProvider.js +2 -1
  140. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  141. package/lib/commonjs/helpers/callPush.js +3 -1
  142. package/lib/commonjs/helpers/callPush.js.map +1 -1
  143. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +3 -1
  144. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  145. package/lib/commonjs/helpers/constants/MODAL_TYPES.js +2 -0
  146. package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
  147. package/lib/commonjs/helpers/incomingCallFromPush.js +63 -7
  148. package/lib/commonjs/helpers/incomingCallFromPush.js.map +1 -1
  149. package/lib/commonjs/helpers/publicChatsEntry.js +8 -6
  150. package/lib/commonjs/helpers/publicChatsEntry.js.map +1 -1
  151. package/lib/commonjs/helpers/pushPayload.js +5 -0
  152. package/lib/commonjs/helpers/pushPayload.js.map +1 -1
  153. package/lib/commonjs/helpers/reportRoom.js +76 -0
  154. package/lib/commonjs/helpers/reportRoom.js.map +1 -0
  155. package/lib/commonjs/helpers/roomMedia.js +118 -0
  156. package/lib/commonjs/helpers/roomMedia.js.map +1 -0
  157. package/lib/commonjs/i18n/strings.js +480 -0
  158. package/lib/commonjs/i18n/strings.js.map +1 -1
  159. package/lib/commonjs/main.js +93 -0
  160. package/lib/commonjs/main.js.map +1 -1
  161. package/lib/commonjs/networking/api-requests/callState.api.js +75 -0
  162. package/lib/commonjs/networking/api-requests/callState.api.js.map +1 -0
  163. package/lib/commonjs/networking/api-requests/push.api.js +29 -6
  164. package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
  165. package/lib/commonjs/networking/api-requests/rooms.api.js +17 -15
  166. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  167. package/lib/commonjs/networking/api-requests/scheduledCalls.api.js +141 -0
  168. package/lib/commonjs/networking/api-requests/scheduledCalls.api.js.map +1 -0
  169. package/lib/commonjs/networking/callTokenStanza.js +210 -50
  170. package/lib/commonjs/networking/callTokenStanza.js.map +1 -1
  171. package/lib/commonjs/roomStore/callSlice.js +59 -4
  172. package/lib/commonjs/roomStore/callSlice.js.map +1 -1
  173. package/lib/commonjs/services/appBadge.js +80 -0
  174. package/lib/commonjs/services/appBadge.js.map +1 -0
  175. package/lib/commonjs/services/languageSettings.js +47 -15
  176. package/lib/commonjs/services/languageSettings.js.map +1 -1
  177. package/lib/commonjs/services/pushRegistration.js +21 -5
  178. package/lib/commonjs/services/pushRegistration.js.map +1 -1
  179. package/lib/commonjs/version.js +1 -1
  180. package/lib/commonjs/version.js.map +1 -1
  181. package/lib/module/booking/index.js +5 -0
  182. package/lib/module/booking/index.js.map +1 -0
  183. package/lib/module/booking/pendingScheduledCall.js +261 -0
  184. package/lib/module/booking/pendingScheduledCall.js.map +1 -0
  185. package/lib/module/booking/scheduleForm.js +79 -0
  186. package/lib/module/booking/scheduleForm.js.map +1 -0
  187. package/lib/module/booking/scheduledCall.js +129 -0
  188. package/lib/module/booking/scheduledCall.js.map +1 -0
  189. package/lib/module/booking/scheduledCallActions.js +118 -0
  190. package/lib/module/booking/scheduledCallActions.js.map +1 -0
  191. package/lib/module/booking/scheduledCallLink.js +136 -0
  192. package/lib/module/booking/scheduledCallLink.js.map +1 -0
  193. package/lib/module/booking/scheduledCallStore.js +60 -0
  194. package/lib/module/booking/scheduledCallStore.js.map +1 -0
  195. package/lib/module/booking/startRoomCall.js +80 -0
  196. package/lib/module/booking/startRoomCall.js.map +1 -0
  197. package/lib/module/calls/callBusy.js +13 -0
  198. package/lib/module/calls/callBusy.js.map +1 -0
  199. package/lib/module/calls/callDisplay.js +65 -0
  200. package/lib/module/calls/callDisplay.js.map +1 -0
  201. package/lib/module/calls/callMode.js +168 -0
  202. package/lib/module/calls/callMode.js.map +1 -0
  203. package/lib/module/calls/declineReport.js +16 -0
  204. package/lib/module/calls/declineReport.js.map +1 -0
  205. package/lib/module/calls/p2p/P2PCallController.js +718 -0
  206. package/lib/module/calls/p2p/P2PCallController.js.map +1 -0
  207. package/lib/module/calls/p2p/icePolicy.js +102 -0
  208. package/lib/module/calls/p2p/icePolicy.js.map +1 -0
  209. package/lib/module/calls/p2p/negotiator.js +197 -0
  210. package/lib/module/calls/p2p/negotiator.js.map +1 -0
  211. package/lib/module/calls/p2p/p2pRuntime.js +137 -0
  212. package/lib/module/calls/p2p/p2pRuntime.js.map +1 -0
  213. package/lib/module/calls/p2p/signalInbox.js +93 -0
  214. package/lib/module/calls/p2p/signalInbox.js.map +1 -0
  215. package/lib/module/calls/p2p/signalStanza.js +135 -0
  216. package/lib/module/calls/p2p/signalStanza.js.map +1 -0
  217. package/lib/module/calls/p2p/webrtcRuntime.js +46 -0
  218. package/lib/module/calls/p2p/webrtcRuntime.js.map +1 -0
  219. package/lib/module/calls/senderTrust.js +38 -0
  220. package/lib/module/calls/senderTrust.js.map +1 -0
  221. package/lib/module/calls/startCall.js +47 -0
  222. package/lib/module/calls/startCall.js.map +1 -0
  223. package/lib/module/components/Booking/BookingIcons.js +48 -0
  224. package/lib/module/components/Booking/BookingIcons.js.map +1 -0
  225. package/lib/module/components/Booking/ScheduleCallButton.js +59 -0
  226. package/lib/module/components/Booking/ScheduleCallButton.js.map +1 -0
  227. package/lib/module/components/Booking/ScheduleCallSheet.js +345 -0
  228. package/lib/module/components/Booking/ScheduleCallSheet.js.map +1 -0
  229. package/lib/module/components/Booking/ScheduledCallCard.js +197 -0
  230. package/lib/module/components/Booking/ScheduledCallCard.js.map +1 -0
  231. package/lib/module/components/Booking/ScheduledCallHost.js +18 -0
  232. package/lib/module/components/Booking/ScheduledCallHost.js.map +1 -0
  233. package/lib/module/components/Booking/ScheduledCallMessage.js +48 -0
  234. package/lib/module/components/Booking/ScheduledCallMessage.js.map +1 -0
  235. package/lib/module/components/Booking/ScheduledCallPreJoin.js +229 -0
  236. package/lib/module/components/Booking/ScheduledCallPreJoin.js.map +1 -0
  237. package/lib/module/components/Booking/bookingShared.js +291 -0
  238. package/lib/module/components/Booking/bookingShared.js.map +1 -0
  239. package/lib/module/components/MainComponents/AlbumGrid.js +6 -2
  240. package/lib/module/components/MainComponents/AlbumGrid.js.map +1 -1
  241. package/lib/module/components/MainComponents/ChatHeader.js +20 -14
  242. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  243. package/lib/module/components/MainComponents/LanguageSelectorButton.js +5 -2
  244. package/lib/module/components/MainComponents/LanguageSelectorButton.js.map +1 -1
  245. package/lib/module/components/MainComponents/LanguageSelectorModal.js +7 -4
  246. package/lib/module/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  247. package/lib/module/components/MainComponents/MediaMessage.js +13 -0
  248. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  249. package/lib/module/components/MainComponents/MessageContainer.js +13 -0
  250. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  251. package/lib/module/components/MainComponents/ReduxWrapper.js +10 -0
  252. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  253. package/lib/module/components/MainComponents/RoomList.js +7 -16
  254. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  255. package/lib/module/components/MessageBubble/Message.js +27 -1
  256. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  257. package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js +154 -0
  258. package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
  259. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +204 -136
  260. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  261. package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js +175 -0
  262. package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
  263. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +21 -15
  264. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  265. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -163
  266. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  267. package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js +819 -0
  268. package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
  269. package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js +172 -0
  270. package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
  271. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js +20 -4
  272. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
  273. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +17 -10
  274. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  275. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
  276. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
  277. package/lib/module/components/VideoCalls/ActiveCallBar.js +3 -2
  278. package/lib/module/components/VideoCalls/ActiveCallBar.js.map +1 -1
  279. package/lib/module/components/VideoCalls/CallButtons.js +19 -11
  280. package/lib/module/components/VideoCalls/CallButtons.js.map +1 -1
  281. package/lib/module/components/VideoCalls/CallControlBar.js +113 -0
  282. package/lib/module/components/VideoCalls/CallControlBar.js.map +1 -0
  283. package/lib/module/components/VideoCalls/CallVideo.js +43 -0
  284. package/lib/module/components/VideoCalls/CallVideo.js.map +1 -0
  285. package/lib/module/components/VideoCalls/GroupCallView.js +275 -0
  286. package/lib/module/components/VideoCalls/GroupCallView.js.map +1 -0
  287. package/lib/module/components/VideoCalls/P2PCallRunner.js +147 -0
  288. package/lib/module/components/VideoCalls/P2PCallRunner.js.map +1 -0
  289. package/lib/module/components/VideoCalls/VideoCallOverlay.js +38 -14
  290. package/lib/module/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  291. package/lib/module/components/VideoCalls/VideoCallSession.js +46 -127
  292. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  293. package/lib/module/components/VideoCalls/callActions.js +3 -0
  294. package/lib/module/components/VideoCalls/callActions.js.map +1 -1
  295. package/lib/module/components/VideoCalls/callElapsed.js +33 -0
  296. package/lib/module/components/VideoCalls/callElapsed.js.map +1 -0
  297. package/lib/module/components/VideoCalls/callLive.js +10 -0
  298. package/lib/module/components/VideoCalls/callLive.js.map +1 -0
  299. package/lib/module/components/VideoCalls/callSessionController.js +80 -24
  300. package/lib/module/components/VideoCalls/callSessionController.js.map +1 -1
  301. package/lib/module/components/VideoCalls/callSessionTypes.js +37 -0
  302. package/lib/module/components/VideoCalls/callSessionTypes.js.map +1 -0
  303. package/lib/module/components/VideoCalls/groupLayout.js +36 -0
  304. package/lib/module/components/VideoCalls/groupLayout.js.map +1 -0
  305. package/lib/module/components/VideoCalls/p2pCallSession.js +256 -0
  306. package/lib/module/components/VideoCalls/p2pCallSession.js.map +1 -0
  307. package/lib/module/components/VideoCalls/useCallKeep.js +8 -2
  308. package/lib/module/components/VideoCalls/useCallKeep.js.map +1 -1
  309. package/lib/module/components/VideoCalls/useOngoingCallNotification.js +2 -1
  310. package/lib/module/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
  311. package/lib/module/components/styled/MessageImage.js +4 -1
  312. package/lib/module/components/styled/MessageImage.js.map +1 -1
  313. package/lib/module/components/styled/VideoMessage.js +5 -1
  314. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  315. package/lib/module/context/MediaSourceContext.js +13 -0
  316. package/lib/module/context/MediaSourceContext.js.map +1 -0
  317. package/lib/module/context/xmppProvider.js +2 -1
  318. package/lib/module/context/xmppProvider.js.map +1 -1
  319. package/lib/module/helpers/callPush.js +3 -1
  320. package/lib/module/helpers/callPush.js.map +1 -1
  321. package/lib/module/helpers/constants/MODAL_COMPONENTS.js +2 -1
  322. package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  323. package/lib/module/helpers/constants/MODAL_TYPES.js +2 -0
  324. package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
  325. package/lib/module/helpers/incomingCallFromPush.js +63 -7
  326. package/lib/module/helpers/incomingCallFromPush.js.map +1 -1
  327. package/lib/module/helpers/publicChatsEntry.js +8 -6
  328. package/lib/module/helpers/publicChatsEntry.js.map +1 -1
  329. package/lib/module/helpers/pushPayload.js +5 -0
  330. package/lib/module/helpers/pushPayload.js.map +1 -1
  331. package/lib/module/helpers/reportRoom.js +70 -0
  332. package/lib/module/helpers/reportRoom.js.map +1 -0
  333. package/lib/module/helpers/roomMedia.js +112 -0
  334. package/lib/module/helpers/roomMedia.js.map +1 -0
  335. package/lib/module/i18n/strings.js +480 -0
  336. package/lib/module/i18n/strings.js.map +1 -1
  337. package/lib/module/main.js +5 -0
  338. package/lib/module/main.js.map +1 -1
  339. package/lib/module/networking/api-requests/callState.api.js +66 -0
  340. package/lib/module/networking/api-requests/callState.api.js.map +1 -0
  341. package/lib/module/networking/api-requests/push.api.js +29 -6
  342. package/lib/module/networking/api-requests/push.api.js.map +1 -1
  343. package/lib/module/networking/api-requests/rooms.api.js +17 -15
  344. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  345. package/lib/module/networking/api-requests/scheduledCalls.api.js +130 -0
  346. package/lib/module/networking/api-requests/scheduledCalls.api.js.map +1 -0
  347. package/lib/module/networking/callTokenStanza.js +210 -50
  348. package/lib/module/networking/callTokenStanza.js.map +1 -1
  349. package/lib/module/roomStore/callSlice.js +57 -3
  350. package/lib/module/roomStore/callSlice.js.map +1 -1
  351. package/lib/module/services/appBadge.js +74 -0
  352. package/lib/module/services/appBadge.js.map +1 -0
  353. package/lib/module/services/languageSettings.js +44 -13
  354. package/lib/module/services/languageSettings.js.map +1 -1
  355. package/lib/module/services/pushRegistration.js +21 -5
  356. package/lib/module/services/pushRegistration.js.map +1 -1
  357. package/lib/module/version.js +1 -1
  358. package/lib/module/version.js.map +1 -1
  359. package/lib/typescript/booking/index.d.ts +3 -0
  360. package/lib/typescript/booking/index.d.ts.map +1 -0
  361. package/lib/typescript/booking/pendingScheduledCall.d.ts +80 -0
  362. package/lib/typescript/booking/pendingScheduledCall.d.ts.map +1 -0
  363. package/lib/typescript/booking/scheduleForm.d.ts +28 -0
  364. package/lib/typescript/booking/scheduleForm.d.ts.map +1 -0
  365. package/lib/typescript/booking/scheduledCall.d.ts +52 -0
  366. package/lib/typescript/booking/scheduledCall.d.ts.map +1 -0
  367. package/lib/typescript/booking/scheduledCallActions.d.ts +22 -0
  368. package/lib/typescript/booking/scheduledCallActions.d.ts.map +1 -0
  369. package/lib/typescript/booking/scheduledCallLink.d.ts +37 -0
  370. package/lib/typescript/booking/scheduledCallLink.d.ts.map +1 -0
  371. package/lib/typescript/booking/scheduledCallStore.d.ts +47 -0
  372. package/lib/typescript/booking/scheduledCallStore.d.ts.map +1 -0
  373. package/lib/typescript/booking/startRoomCall.d.ts +12 -0
  374. package/lib/typescript/booking/startRoomCall.d.ts.map +1 -0
  375. package/lib/typescript/calls/callBusy.d.ts +9 -0
  376. package/lib/typescript/calls/callBusy.d.ts.map +1 -0
  377. package/lib/typescript/calls/callDisplay.d.ts +23 -0
  378. package/lib/typescript/calls/callDisplay.d.ts.map +1 -0
  379. package/lib/typescript/calls/callMode.d.ts +106 -0
  380. package/lib/typescript/calls/callMode.d.ts.map +1 -0
  381. package/lib/typescript/calls/declineReport.d.ts +11 -0
  382. package/lib/typescript/calls/declineReport.d.ts.map +1 -0
  383. package/lib/typescript/calls/p2p/P2PCallController.d.ts +150 -0
  384. package/lib/typescript/calls/p2p/P2PCallController.d.ts.map +1 -0
  385. package/lib/typescript/calls/p2p/icePolicy.d.ts +37 -0
  386. package/lib/typescript/calls/p2p/icePolicy.d.ts.map +1 -0
  387. package/lib/typescript/calls/p2p/negotiator.d.ts +57 -0
  388. package/lib/typescript/calls/p2p/negotiator.d.ts.map +1 -0
  389. package/lib/typescript/calls/p2p/p2pRuntime.d.ts +41 -0
  390. package/lib/typescript/calls/p2p/p2pRuntime.d.ts.map +1 -0
  391. package/lib/typescript/calls/p2p/signalInbox.d.ts +35 -0
  392. package/lib/typescript/calls/p2p/signalInbox.d.ts.map +1 -0
  393. package/lib/typescript/calls/p2p/signalStanza.d.ts +52 -0
  394. package/lib/typescript/calls/p2p/signalStanza.d.ts.map +1 -0
  395. package/lib/typescript/calls/p2p/webrtcRuntime.d.ts +32 -0
  396. package/lib/typescript/calls/p2p/webrtcRuntime.d.ts.map +1 -0
  397. package/lib/typescript/calls/senderTrust.d.ts +8 -0
  398. package/lib/typescript/calls/senderTrust.d.ts.map +1 -0
  399. package/lib/typescript/calls/startCall.d.ts +17 -0
  400. package/lib/typescript/calls/startCall.d.ts.map +1 -0
  401. package/lib/typescript/components/Booking/BookingIcons.d.ts +9 -0
  402. package/lib/typescript/components/Booking/BookingIcons.d.ts.map +1 -0
  403. package/lib/typescript/components/Booking/ScheduleCallButton.d.ts +11 -0
  404. package/lib/typescript/components/Booking/ScheduleCallButton.d.ts.map +1 -0
  405. package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts +4 -0
  406. package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts.map +1 -0
  407. package/lib/typescript/components/Booking/ScheduledCallCard.d.ts +14 -0
  408. package/lib/typescript/components/Booking/ScheduledCallCard.d.ts.map +1 -0
  409. package/lib/typescript/components/Booking/ScheduledCallHost.d.ts +10 -0
  410. package/lib/typescript/components/Booking/ScheduledCallHost.d.ts.map +1 -0
  411. package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts +20 -0
  412. package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts.map +1 -0
  413. package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts +8 -0
  414. package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts.map +1 -0
  415. package/lib/typescript/components/Booking/bookingShared.d.ts +199 -0
  416. package/lib/typescript/components/Booking/bookingShared.d.ts.map +1 -0
  417. package/lib/typescript/components/MainComponents/AlbumGrid.d.ts.map +1 -1
  418. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  419. package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts +3 -1
  420. package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts.map +1 -1
  421. package/lib/typescript/components/MainComponents/LanguageSelectorModal.d.ts.map +1 -1
  422. package/lib/typescript/components/MainComponents/MediaMessage.d.ts +3 -1
  423. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  424. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  425. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  426. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  427. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  428. package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts +16 -0
  429. package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts.map +1 -0
  430. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  431. package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts +18 -0
  432. package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts.map +1 -0
  433. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
  434. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +16 -0
  435. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  436. package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts +27 -0
  437. package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts.map +1 -0
  438. package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts +9 -0
  439. package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts.map +1 -0
  440. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts +8 -0
  441. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts.map +1 -1
  442. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  443. package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts.map +1 -1
  444. package/lib/typescript/components/VideoCalls/ActiveCallBar.d.ts.map +1 -1
  445. package/lib/typescript/components/VideoCalls/CallButtons.d.ts +2 -1
  446. package/lib/typescript/components/VideoCalls/CallButtons.d.ts.map +1 -1
  447. package/lib/typescript/components/VideoCalls/CallControlBar.d.ts +17 -0
  448. package/lib/typescript/components/VideoCalls/CallControlBar.d.ts.map +1 -0
  449. package/lib/typescript/components/VideoCalls/CallVideo.d.ts +23 -0
  450. package/lib/typescript/components/VideoCalls/CallVideo.d.ts.map +1 -0
  451. package/lib/typescript/components/VideoCalls/GroupCallView.d.ts +22 -0
  452. package/lib/typescript/components/VideoCalls/GroupCallView.d.ts.map +1 -0
  453. package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts +2 -0
  454. package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts.map +1 -0
  455. package/lib/typescript/components/VideoCalls/VideoCallOverlay.d.ts.map +1 -1
  456. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts +10 -12
  457. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  458. package/lib/typescript/components/VideoCalls/callActions.d.ts.map +1 -1
  459. package/lib/typescript/components/VideoCalls/callElapsed.d.ts +8 -0
  460. package/lib/typescript/components/VideoCalls/callElapsed.d.ts.map +1 -0
  461. package/lib/typescript/components/VideoCalls/callLive.d.ts +9 -0
  462. package/lib/typescript/components/VideoCalls/callLive.d.ts.map +1 -0
  463. package/lib/typescript/components/VideoCalls/callSessionController.d.ts +10 -31
  464. package/lib/typescript/components/VideoCalls/callSessionController.d.ts.map +1 -1
  465. package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts +60 -0
  466. package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts.map +1 -0
  467. package/lib/typescript/components/VideoCalls/groupLayout.d.ts +23 -0
  468. package/lib/typescript/components/VideoCalls/groupLayout.d.ts.map +1 -0
  469. package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts +31 -0
  470. package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts.map +1 -0
  471. package/lib/typescript/components/VideoCalls/useCallKeep.d.ts.map +1 -1
  472. package/lib/typescript/components/VideoCalls/useOngoingCallNotification.d.ts.map +1 -1
  473. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  474. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  475. package/lib/typescript/context/MediaSourceContext.d.ts +4 -0
  476. package/lib/typescript/context/MediaSourceContext.d.ts.map +1 -0
  477. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  478. package/lib/typescript/helpers/callPush.d.ts +11 -1
  479. package/lib/typescript/helpers/callPush.d.ts.map +1 -1
  480. package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
  481. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +2 -0
  482. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
  483. package/lib/typescript/helpers/incomingCallFromPush.d.ts.map +1 -1
  484. package/lib/typescript/helpers/publicChatsEntry.d.ts +7 -5
  485. package/lib/typescript/helpers/publicChatsEntry.d.ts.map +1 -1
  486. package/lib/typescript/helpers/pushPayload.d.ts +1 -1
  487. package/lib/typescript/helpers/pushPayload.d.ts.map +1 -1
  488. package/lib/typescript/helpers/reportRoom.d.ts +19 -0
  489. package/lib/typescript/helpers/reportRoom.d.ts.map +1 -0
  490. package/lib/typescript/helpers/roomMedia.d.ts +26 -0
  491. package/lib/typescript/helpers/roomMedia.d.ts.map +1 -0
  492. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  493. package/lib/typescript/main.d.ts +6 -1
  494. package/lib/typescript/main.d.ts.map +1 -1
  495. package/lib/typescript/networking/api-requests/callState.api.d.ts +25 -0
  496. package/lib/typescript/networking/api-requests/callState.api.d.ts.map +1 -0
  497. package/lib/typescript/networking/api-requests/push.api.d.ts +9 -2
  498. package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
  499. package/lib/typescript/networking/api-requests/rooms.api.d.ts +8 -6
  500. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  501. package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts +86 -0
  502. package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts.map +1 -0
  503. package/lib/typescript/networking/callTokenStanza.d.ts.map +1 -1
  504. package/lib/typescript/roomStore/callSlice.d.ts +23 -1
  505. package/lib/typescript/roomStore/callSlice.d.ts.map +1 -1
  506. package/lib/typescript/services/appBadge.d.ts +3 -0
  507. package/lib/typescript/services/appBadge.d.ts.map +1 -0
  508. package/lib/typescript/services/languageSettings.d.ts +7 -0
  509. package/lib/typescript/services/languageSettings.d.ts.map +1 -1
  510. package/lib/typescript/services/pushRegistration.d.ts.map +1 -1
  511. package/lib/typescript/types/models/modal.model.d.ts +18 -0
  512. package/lib/typescript/types/models/modal.model.d.ts.map +1 -1
  513. package/lib/typescript/types/types.d.ts +85 -4
  514. package/lib/typescript/types/types.d.ts.map +1 -1
  515. package/lib/typescript/version.d.ts +1 -1
  516. package/lib/typescript/version.d.ts.map +1 -1
  517. package/package.json +9 -2
  518. package/src/booking/index.ts +10 -0
  519. package/src/booking/pendingScheduledCall.ts +272 -0
  520. package/src/booking/scheduleForm.ts +84 -0
  521. package/src/booking/scheduledCall.ts +163 -0
  522. package/src/booking/scheduledCallActions.ts +141 -0
  523. package/src/booking/scheduledCallLink.ts +145 -0
  524. package/src/booking/scheduledCallStore.ts +69 -0
  525. package/src/booking/startRoomCall.ts +103 -0
  526. package/src/calls/callBusy.ts +10 -0
  527. package/src/calls/callDisplay.ts +74 -0
  528. package/src/calls/callMode.ts +286 -0
  529. package/src/calls/declineReport.ts +16 -0
  530. package/src/calls/p2p/P2PCallController.ts +813 -0
  531. package/src/calls/p2p/icePolicy.ts +99 -0
  532. package/src/calls/p2p/negotiator.ts +186 -0
  533. package/src/calls/p2p/p2pRuntime.ts +164 -0
  534. package/src/calls/p2p/signalInbox.ts +117 -0
  535. package/src/calls/p2p/signalStanza.ts +205 -0
  536. package/src/calls/p2p/webrtcRuntime.ts +60 -0
  537. package/src/calls/senderTrust.ts +40 -0
  538. package/src/calls/startCall.ts +56 -0
  539. package/src/components/Booking/BookingIcons.tsx +44 -0
  540. package/src/components/Booking/ScheduleCallButton.tsx +66 -0
  541. package/src/components/Booking/ScheduleCallSheet.tsx +380 -0
  542. package/src/components/Booking/ScheduledCallCard.tsx +216 -0
  543. package/src/components/Booking/ScheduledCallHost.tsx +18 -0
  544. package/src/components/Booking/ScheduledCallMessage.tsx +62 -0
  545. package/src/components/Booking/ScheduledCallPreJoin.tsx +230 -0
  546. package/src/components/Booking/bookingShared.tsx +295 -0
  547. package/src/components/MainComponents/AlbumGrid.tsx +5 -1
  548. package/src/components/MainComponents/ChatHeader.tsx +18 -11
  549. package/src/components/MainComponents/LanguageSelectorButton.tsx +9 -2
  550. package/src/components/MainComponents/LanguageSelectorModal.tsx +10 -6
  551. package/src/components/MainComponents/MediaMessage.tsx +13 -2
  552. package/src/components/MainComponents/MessageContainer.tsx +15 -0
  553. package/src/components/MainComponents/ReduxWrapper.tsx +10 -0
  554. package/src/components/MainComponents/RoomList.tsx +8 -19
  555. package/src/components/MessageBubble/Message.tsx +24 -1
  556. package/src/components/Modals/ChatProfileModal/ChatMediaGrid.tsx +174 -0
  557. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +119 -48
  558. package/src/components/Modals/ChatProfileModal/LeaveChatModal.tsx +191 -0
  559. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +22 -22
  560. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +115 -185
  561. package/src/components/Modals/FilePreviewModal/MediaViewer.tsx +880 -0
  562. package/src/components/Modals/FilePreviewModal/useSaveFile.ts +207 -0
  563. package/src/components/Modals/MessageSearchModal/MessageSearchModal.tsx +56 -30
  564. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +28 -9
  565. package/src/components/Modals/UserSettingsModal/LanguageCard.tsx +9 -7
  566. package/src/components/VideoCalls/ActiveCallBar.tsx +6 -5
  567. package/src/components/VideoCalls/CallButtons.tsx +23 -12
  568. package/src/components/VideoCalls/CallControlBar.tsx +131 -0
  569. package/src/components/VideoCalls/CallVideo.tsx +59 -0
  570. package/src/components/VideoCalls/GroupCallView.tsx +324 -0
  571. package/src/components/VideoCalls/P2PCallRunner.tsx +192 -0
  572. package/src/components/VideoCalls/VideoCallOverlay.tsx +62 -17
  573. package/src/components/VideoCalls/VideoCallSession.tsx +55 -133
  574. package/src/components/VideoCalls/callActions.ts +3 -0
  575. package/src/components/VideoCalls/callElapsed.ts +27 -0
  576. package/src/components/VideoCalls/callLive.ts +13 -0
  577. package/src/components/VideoCalls/callSessionController.ts +130 -55
  578. package/src/components/VideoCalls/callSessionTypes.ts +80 -0
  579. package/src/components/VideoCalls/groupLayout.ts +48 -0
  580. package/src/components/VideoCalls/p2pCallSession.ts +291 -0
  581. package/src/components/VideoCalls/useCallKeep.ts +9 -2
  582. package/src/components/VideoCalls/useOngoingCallNotification.ts +2 -2
  583. package/src/components/styled/MessageImage.tsx +3 -1
  584. package/src/components/styled/VideoMessage.tsx +5 -1
  585. package/src/context/MediaSourceContext.tsx +14 -0
  586. package/src/context/xmppProvider.tsx +3 -0
  587. package/src/helpers/callPush.ts +13 -1
  588. package/src/helpers/constants/MODAL_COMPONENTS.tsx +4 -1
  589. package/src/helpers/constants/MODAL_TYPES.ts +2 -0
  590. package/src/helpers/incomingCallFromPush.ts +65 -7
  591. package/src/helpers/publicChatsEntry.ts +8 -7
  592. package/src/helpers/pushPayload.ts +9 -1
  593. package/src/helpers/reportRoom.ts +93 -0
  594. package/src/helpers/roomMedia.ts +126 -0
  595. package/src/i18n/strings.ts +480 -0
  596. package/src/main.ts +33 -0
  597. package/src/networking/api-requests/callState.api.ts +83 -0
  598. package/src/networking/api-requests/push.api.ts +28 -3
  599. package/src/networking/api-requests/rooms.api.ts +25 -15
  600. package/src/networking/api-requests/scheduledCalls.api.ts +232 -0
  601. package/src/networking/callTokenStanza.ts +247 -50
  602. package/src/roomStore/callSlice.ts +86 -2
  603. package/src/services/appBadge.ts +85 -0
  604. package/src/services/languageSettings.ts +43 -8
  605. package/src/services/pushRegistration.ts +34 -3
  606. package/src/types/models/modal.model.ts +16 -0
  607. package/src/types/types.ts +86 -4
  608. package/src/version.ts +1 -1
@@ -35,7 +35,9 @@ import { sendCallStateSignal } from '../../networking/callTokenStanza';
35
35
  import { useTheme } from '../../hooks/useTheme';
36
36
  import type { ChatTheme } from '../../theme/theme';
37
37
  import { VideoCallSession } from './VideoCallSession';
38
+ import { P2PCallRunner } from './P2PCallRunner';
38
39
  import { startCallSession } from './callSessionController';
40
+ import { callCanRenderSession } from './callLive';
39
41
  import { declineActiveCall, terminateActiveCall } from './callActions';
40
42
  import {
41
43
  CALL_BAR_HEIGHT,
@@ -197,7 +199,7 @@ const RingingCard: FC<RingingCardProps> = ({
197
199
  <View style={styles.ringingIdentity}>
198
200
  <Text style={[styles.ringingName, { color: theme.text }]}>
199
201
  {roomName ||
200
- (variant === 'incoming' ? t('call.unknownCaller') : t('call.title'))}
202
+ (variant === 'incoming' ? t('call.incomingNeutral') : t('call.title'))}
201
203
  </Text>
202
204
  <View style={styles.ringingSubtitleRow}>
203
205
  {kind === 'audio' ? (
@@ -470,7 +472,14 @@ const VideoCallOverlayInner: FC = () => {
470
472
 
471
473
  const videoCallsConfig = config?.videoCalls;
472
474
  const enabled = videoCallsConfig?.enabled === true;
473
- const livekitUrl = (videoCallsConfig?.livekitUrl || '').trim();
475
+ // The server's own LiveKit URL (call-token or create response) wins over
476
+ // the host config.
477
+ const livekitUrl = (
478
+ call.livekitUrl ||
479
+ videoCallsConfig?.livekitUrl ||
480
+ ''
481
+ ).trim();
482
+ const isP2P = call.mode === 'p2p';
474
483
  const primaryColor = theme.primary || config?.colors?.primary || DEFAULT_PRIMARY;
475
484
 
476
485
  const isOpen = enabled && call.phase !== 'idle';
@@ -486,10 +495,11 @@ const VideoCallOverlayInner: FC = () => {
486
495
  // Shared with the header strip (ActiveCallBar), which expands it again.
487
496
  const { minimized, systemRinging } = useCallUi();
488
497
 
489
- const canRenderSession =
490
- !!call.token &&
491
- (call.phase === 'connecting' || call.phase === 'in-call') &&
492
- !!livekitUrl;
498
+ // A p2p call has no LiveKit token or URL: the media is the peer connection
499
+ // owned by P2PCallRunner.
500
+ const canRenderSession = isP2P
501
+ ? callCanRenderSession(call)
502
+ : callCanRenderSession(call) && !!livekitUrl;
493
503
  const isMinimized = minimized && canRenderSession;
494
504
  // Expanding from the header strip slides the call down from the top
495
505
  // instead of fading it in.
@@ -502,16 +512,17 @@ const VideoCallOverlayInner: FC = () => {
502
512
  // Join the LiveKit room once the call has a token. Idempotent, and the
503
513
  // controller tears itself down when the call slice leaves these phases.
504
514
  useEffect(() => {
505
- if (!enabled || !canRenderSession || !call.token) {return;}
515
+ if (!enabled || isP2P || !canRenderSession || !call.token) {return;}
506
516
  startCallSession({
507
517
  token: call.token,
508
518
  livekitUrl,
509
519
  kind: call.kind,
520
+ isGroup: call.isGroup,
510
521
  startWithMicOn: videoCallsConfig?.startWithMicOn,
511
522
  startWithCameraOn: videoCallsConfig?.startWithCameraOn,
512
523
  });
513
524
  // eslint-disable-next-line react-hooks/exhaustive-deps
514
- }, [enabled, canRenderSession, call.token, livekitUrl, call.kind]);
525
+ }, [enabled, isP2P, canRenderSession, call.token, livekitUrl, call.kind, call.isGroup]);
515
526
 
516
527
  // Give up on an unanswered outgoing dial. Unlike web (which only shows
517
528
  useEffect(() => {
@@ -575,6 +586,11 @@ const VideoCallOverlayInner: FC = () => {
575
586
 
576
587
  const ringingHeader = useMemo(() => {
577
588
  if (call.direction === 'incoming') {
589
+ if (call.isGroup) {
590
+ return call.kind === 'audio'
591
+ ? t('call.incomingGroupAudio')
592
+ : t('call.incomingGroupVideo');
593
+ }
578
594
  return call.kind === 'audio'
579
595
  ? t('call.incomingAudio')
580
596
  : t('call.incomingVideo');
@@ -583,16 +599,38 @@ const VideoCallOverlayInner: FC = () => {
583
599
  if (call.phase === 'connecting') {return t('call.connecting');}
584
600
  if (call.phase === 'error') {return t('call.failed');}
585
601
  return t('call.title');
586
- }, [call.direction, call.phase, call.kind, t]);
602
+ }, [call.direction, call.phase, call.kind, call.isGroup, t]);
587
603
 
588
604
  const ringingSubtitle = useMemo(() => {
605
+ // The card title is the room's name; make it clear it is a group ring.
606
+ const label = call.isGroup
607
+ ? call.kind === 'audio'
608
+ ? t('call.groupAudioCall')
609
+ : t('call.groupVideoCall')
610
+ : call.kind === 'audio'
611
+ ? t('call.audioCall')
612
+ : t('call.videoCall');
589
613
  if (call.direction === 'incoming') {
590
- return call.kind === 'audio' ? t('call.audioCall') : t('call.videoCall');
614
+ // "<person> is calling in <room>" once both are known.
615
+ return call.isGroup && call.callerName && call.roomName
616
+ ? t('call.callingIn', { caller: call.callerName, room: call.roomName })
617
+ : label;
618
+ }
619
+ if (call.phase === 'connecting') {
620
+ return isP2P ? t('call.connecting') : t('call.connectingToRoom');
591
621
  }
592
- if (call.phase === 'connecting') {return t('call.connectingToRoom');}
593
622
  if (call.phase === 'error') {return t('call.tryAgainLater');}
594
- return call.kind === 'audio' ? t('call.audioCall') : t('call.videoCall');
595
- }, [call.direction, call.kind, call.phase, t]);
623
+ return label;
624
+ }, [
625
+ call.direction,
626
+ call.kind,
627
+ call.phase,
628
+ call.isGroup,
629
+ call.callerName,
630
+ call.roomName,
631
+ isP2P,
632
+ t,
633
+ ]);
596
634
 
597
635
  if (!isOpen) {
598
636
  return null;
@@ -610,6 +648,7 @@ const VideoCallOverlayInner: FC = () => {
610
648
  const renderSession = (collapse: () => void) => (
611
649
  <VideoCallSession
612
650
  kind={call.kind}
651
+ isGroup={call.isGroup}
613
652
  peerName={call.roomName}
614
653
  primaryColor={primaryColor}
615
654
  icons={videoCallsConfig?.icons}
@@ -670,7 +709,7 @@ const VideoCallOverlayInner: FC = () => {
670
709
  theme={theme}
671
710
  errorMessage={
672
711
  call.error ||
673
- (!livekitUrl ? t('call.error.missingLivekitUrl') : null)
712
+ (!livekitUrl && !isP2P ? t('call.error.missingLivekitUrl') : null)
674
713
  }
675
714
  onDismiss={() => dispatch(resetCall())}
676
715
  />
@@ -697,10 +736,16 @@ export const VideoCallOverlay: FC = () => {
697
736
  const callId = useSelector(
698
737
  (state: RootState) => state.call.callId || String(state.call.startedAt || '')
699
738
  );
739
+ // The runner is headless and owns the p2p controller. It sits beside the
740
+ // boundary, not inside it: a crash in the call UI blanks the screen, it
741
+ // must not tear the call down.
700
742
  return (
701
- <CallErrorBoundary resetKey={callId}>
702
- <VideoCallOverlayInner />
703
- </CallErrorBoundary>
743
+ <>
744
+ <P2PCallRunner />
745
+ <CallErrorBoundary resetKey={callId}>
746
+ <VideoCallOverlayInner />
747
+ </CallErrorBoundary>
748
+ </>
704
749
  );
705
750
  };
706
751
 
@@ -1,4 +1,4 @@
1
- import React, { FC, useEffect, useState } from 'react';
1
+ import React, { FC, useState } from 'react';
2
2
  import {
3
3
  ActivityIndicator,
4
4
  Animated,
@@ -12,27 +12,18 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
12
12
  import { VideoCallIcons } from '../../types/types';
13
13
  import { ProfileImagePlaceholder } from '../MainComponents/ProfileImagePlaceholder';
14
14
  import {
15
- CameraOffIcon,
16
- CameraOnIcon,
17
15
  FillVideoIcon,
18
16
  FitVideoIcon,
19
- HangUpIcon,
20
17
  MicOffIcon,
21
- MicOnIcon,
22
18
  MinimizeIcon,
23
- SpeakerIcon,
24
- SpeakerOffIcon,
25
- SwitchCameraIcon,
26
19
  } from './CallIcons';
27
20
  import { loadLiveKit } from './livekitRuntime';
28
- import {
29
- dismissCallDeviceError,
30
- switchCallCamera,
31
- toggleCallCamera,
32
- toggleCallMic,
33
- toggleCallSpeaker,
34
- useCallSession,
35
- } from './callSessionController';
21
+ import { loadWebRTC } from '../../calls/p2p/webrtcRuntime';
22
+ import { dismissCallDeviceError, useCallSession } from './callSessionController';
23
+ import { CallVideo } from './CallVideo';
24
+ import { CallControlBar } from './CallControlBar';
25
+ import { GroupCallView } from './GroupCallView';
26
+ import { formatCallDuration, useSharedCallElapsed } from './callElapsed';
36
27
  import { usePipTile } from './usePipTile';
37
28
  import { useT } from '../../i18n/useT';
38
29
 
@@ -40,11 +31,15 @@ const DEFAULT_PRIMARY = '#0052CD';
40
31
  const SURFACE_DARK = '#0B1220';
41
32
  const TEXT_ON_DARK = '#FFFFFF';
42
33
  const TEXT_MUTED = '#9AA4B2';
43
- const DANGER = '#E53935';
44
34
  const CONTROL_IDLE = 'rgba(255, 255, 255, 0.16)';
45
35
 
36
+ // Re-exported for the header strip, which shares the timer with this screen.
37
+ export { formatCallDuration, useSharedCallElapsed };
38
+
46
39
  export interface VideoCallSessionProps {
47
40
  kind?: 'audio' | 'video';
41
+ /** Group room call: everyone in a grid, instead of the 1:1 stage. */
42
+ isGroup?: boolean;
48
43
  /** Display name of the peer, shown until LiveKit reports theirs. */
49
44
  peerName?: string | null;
50
45
  primaryColor?: string;
@@ -55,42 +50,18 @@ export interface VideoCallSessionProps {
55
50
  }
56
51
 
57
52
  /**
58
- * Seconds since the call truly connected, counted from the server-set
59
- * `joinedAt` anchor so both sides show the same time (web's
60
- * useSharedCallElapsed). Null until the peer is in.
61
- */
62
- export const useSharedCallElapsed = (anchorAt: number | null): number | null => {
63
- const [, tick] = useState(0);
64
- useEffect(() => {
65
- if (anchorAt === null) {return;}
66
- const id = setInterval(() => tick((n) => n + 1), 1000);
67
- return () => clearInterval(id);
68
- }, [anchorAt]);
69
- if (anchorAt === null) {return null;}
70
- return Math.max(0, Math.floor((Date.now() - anchorAt) / 1000));
71
- };
72
-
73
- export const formatCallDuration = (totalSeconds: number): string => {
74
- const safe = Math.max(0, Math.floor(totalSeconds));
75
- const hours = Math.floor(safe / 3600);
76
- const minutes = Math.floor((safe % 3600) / 60);
77
- const seconds = safe % 60;
78
- const mm = String(minutes).padStart(2, '0');
79
- const ss = String(seconds).padStart(2, '0');
80
- return hours > 0 ? `${hours}:${mm}:${ss}` : `${mm}:${ss}`;
81
- };
82
-
83
- /**
84
- * The call screen, React Native edition. Pure view over the LiveKit session
85
- * owned by callSessionController.ts: it can unmount and remount (minimize,
86
- * leaving the chat screen) without touching the connection.
53
+ * The call screen, React Native edition. Pure view over the media session
54
+ * of the call (the LiveKit room in callSessionController.ts, or the peer to
55
+ * peer connection in p2pCallSession.ts): it can unmount and remount
56
+ * (minimize, leaving the chat screen) without touching the connection.
87
57
  *
88
58
  * The web SDK builds this on `@livekit/components-react` hooks, which
89
- * assume a DOM. Only the video surface comes from `@livekit/react-native`
90
- * (`<VideoTrack />`, `trackRef` prop, >= 2.7).
59
+ * assume a DOM. Only the video surfaces come from the native packages
60
+ * (`<CallVideo />`: LiveKit's `<VideoTrack />` or the fork's `<RTCView />`).
91
61
  */
92
62
  export const VideoCallSession: FC<VideoCallSessionProps> = ({
93
63
  kind = 'video',
64
+ isGroup = false,
94
65
  peerName,
95
66
  primaryColor = DEFAULT_PRIMARY,
96
67
  icons,
@@ -99,7 +70,8 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
99
70
  }) => {
100
71
  const t = useT();
101
72
  const insets = useSafeAreaInsets();
102
- const runtime = loadLiveKit();
73
+ // A p2p call needs the WebRTC package only, a LiveKit call the LiveKit one.
74
+ const hasMedia = !!loadLiveKit() || !!loadWebRTC();
103
75
  const session = useCallSession();
104
76
  const pipTile = usePipTile({ topInset: insets.top });
105
77
  const elapsed = useSharedCallElapsed(session.anchorAt);
@@ -110,7 +82,7 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
110
82
  // minimize stretches it to fill (the old behaviour) and back.
111
83
  const [fillRemote, setFillRemote] = useState(false);
112
84
 
113
- if (!runtime) {
85
+ if (!hasMedia) {
114
86
  return (
115
87
  <View style={[styles.canvas, styles.centered]}>
116
88
  <Text style={styles.errorText}>{t('call.error.sdkMissing')}</Text>
@@ -118,7 +90,20 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
118
90
  );
119
91
  }
120
92
 
121
- const { VideoTrack } = runtime;
93
+ if (isGroup) {
94
+ return (
95
+ <GroupCallView
96
+ session={session}
97
+ kind={kind}
98
+ title={peerName}
99
+ primaryColor={primaryColor}
100
+ icons={icons}
101
+ onToggleMinimize={onToggleMinimize}
102
+ onHangup={onHangup}
103
+ />
104
+ );
105
+ }
106
+
122
107
  const {
123
108
  connected,
124
109
  remoteJoined,
@@ -126,11 +111,11 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
126
111
  localVideo,
127
112
  micOn,
128
113
  cameraOn,
129
- speakerOn,
130
114
  deviceError,
131
115
  remoteMicMuted,
132
116
  facingMode,
133
117
  localVideoEpoch,
118
+ reconnecting,
134
119
  } = session;
135
120
  // The call slice's name (the chat title) first, as web does: LiveKit's
136
121
  // participant name is often just the opaque xmpp identity.
@@ -150,11 +135,16 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
150
135
  const selfMirror = facingMode === 'user';
151
136
  // The local view remounts when the camera is re-acquired (switching
152
137
  // front/back), so it never keeps rendering the stopped stream.
138
+ // A p2p stream handle also carries its track ids (`key`), so a track that
139
+ // arrives or is replaced remounts the view.
153
140
  const videoKey = (ref: any) =>
154
- ref === localVideo ? `local-${localVideoEpoch}` : 'remote';
141
+ `${ref === localVideo ? `local-${localVideoEpoch}` : 'remote'}${
142
+ ref?.key ? `:${ref.key}` : ''
143
+ }`;
155
144
 
156
- const statusText =
157
- elapsed !== null
145
+ const statusText = reconnecting
146
+ ? t('call.status.reconnecting')
147
+ : elapsed !== null
158
148
  ? formatCallDuration(elapsed)
159
149
  : !connected
160
150
  ? t('call.status.connecting')
@@ -169,9 +159,9 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
169
159
  {/* Stage */}
170
160
  <View style={styles.stage} onLayout={pipTile.onStageLayout}>
171
161
  {mainVideo ? (
172
- <VideoTrack
162
+ <CallVideo
173
163
  key={videoKey(mainVideo)}
174
- trackRef={mainVideo}
164
+ source={mainVideo}
175
165
  style={styles.remoteVideo}
176
166
  objectFit={mainFit}
177
167
  mirror={isSwapped && selfMirror}
@@ -232,9 +222,9 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
232
222
  accessibilityRole="button"
233
223
  accessibilityLabel={t('call.action.swapVideo')}
234
224
  >
235
- <VideoTrack
225
+ <CallVideo
236
226
  key={videoKey(pipVideo)}
237
- trackRef={pipVideo}
227
+ source={pipVideo}
238
228
  style={styles.pipVideo}
239
229
  objectFit="cover"
240
230
  mirror={!isSwapped && selfMirror}
@@ -286,62 +276,12 @@ export const VideoCallSession: FC<VideoCallSessionProps> = ({
286
276
  </View>
287
277
 
288
278
  {/* Control bar */}
289
- <View style={[styles.controls, { paddingBottom: 20 + insets.bottom }]}>
290
- <TouchableOpacity
291
- accessibilityRole="button"
292
- accessibilityLabel={micOn ? t('call.action.muteMic') : t('call.action.unmuteMic')}
293
- onPress={toggleCallMic}
294
- style={[styles.controlButton, { backgroundColor: micOn ? CONTROL_IDLE : DANGER }]}
295
- >
296
- {micOn
297
- ? (icons?.micOn ?? <MicOnIcon color={TEXT_ON_DARK} />)
298
- : (icons?.micOff ?? <MicOffIcon color={TEXT_ON_DARK} />)}
299
- </TouchableOpacity>
300
-
301
- {isVideo && (
302
- <TouchableOpacity
303
- accessibilityRole="button"
304
- accessibilityLabel={
305
- cameraOn ? t('call.action.stopCamera') : t('call.action.startCamera')
306
- }
307
- onPress={toggleCallCamera}
308
- style={[styles.controlButton, { backgroundColor: cameraOn ? CONTROL_IDLE : DANGER }]}
309
- >
310
- {cameraOn
311
- ? (icons?.cameraOn ?? <CameraOnIcon color={TEXT_ON_DARK} />)
312
- : (icons?.cameraOff ?? <CameraOffIcon color={TEXT_ON_DARK} />)}
313
- </TouchableOpacity>
314
- )}
315
-
316
- {isVideo && cameraOn && (
317
- <TouchableOpacity
318
- accessibilityRole="button"
319
- accessibilityLabel={t('call.action.switchCamera')}
320
- onPress={switchCallCamera}
321
- style={[styles.controlButton, { backgroundColor: CONTROL_IDLE }]}
322
- >
323
- <SwitchCameraIcon color={TEXT_ON_DARK} />
324
- </TouchableOpacity>
325
- )}
326
-
327
- <TouchableOpacity
328
- accessibilityRole="button"
329
- accessibilityLabel={speakerOn ? t('call.action.speakerOff') : t('call.action.speakerOn')}
330
- onPress={toggleCallSpeaker}
331
- style={[styles.controlButton, { backgroundColor: CONTROL_IDLE }]}
332
- >
333
- {speakerOn ? <SpeakerIcon color={TEXT_ON_DARK} /> : <SpeakerOffIcon color={TEXT_ON_DARK} />}
334
- </TouchableOpacity>
335
-
336
- <TouchableOpacity
337
- accessibilityRole="button"
338
- accessibilityLabel={t('call.action.hangUp')}
339
- onPress={onHangup}
340
- style={[styles.controlButton, styles.hangupButton]}
341
- >
342
- {icons?.hangup ?? <HangUpIcon color={TEXT_ON_DARK} />}
343
- </TouchableOpacity>
344
- </View>
279
+ <CallControlBar
280
+ session={session}
281
+ isVideo={isVideo}
282
+ icons={icons}
283
+ onHangup={onHangup}
284
+ />
345
285
  </View>
346
286
  );
347
287
  };
@@ -454,24 +394,6 @@ const styles = StyleSheet.create({
454
394
  fitButton: {
455
395
  left: 60,
456
396
  },
457
- controls: {
458
- flexDirection: 'row',
459
- alignItems: 'center',
460
- justifyContent: 'center',
461
- gap: 16,
462
- paddingTop: 20,
463
- paddingHorizontal: 16,
464
- },
465
- controlButton: {
466
- width: 56,
467
- height: 56,
468
- borderRadius: 28,
469
- alignItems: 'center',
470
- justifyContent: 'center',
471
- },
472
- hangupButton: {
473
- backgroundColor: DANGER,
474
- },
475
397
  errorText: {
476
398
  color: TEXT_ON_DARK,
477
399
  fontSize: 14,
@@ -8,6 +8,7 @@ import {
8
8
  } from '../../networking/callTokenStanza';
9
9
  import { translateKey } from '../../i18n/strings';
10
10
  import { getGlobalXmppClient } from '../../utils/clientRegistry';
11
+ import { reportDeclineIfP2P } from '../../calls/declineReport';
11
12
 
12
13
  /**
13
14
  * Call teardown that doesn't need a mounted component.
@@ -48,6 +49,7 @@ export const terminateActiveCall = (state: CallSignalState): void => {
48
49
  };
49
50
 
50
51
  export const declineActiveCall = (): void => {
52
+ reportDeclineIfP2P(store.getState().call);
51
53
  sendCallStateSignal('declined');
52
54
  store.dispatch(declineIncomingCall());
53
55
  };
@@ -62,6 +64,7 @@ const DECLINE_SIGNAL_POLL_MS = 500;
62
64
  */
63
65
  export const declineActiveCallWhenOnline = (): void => {
64
66
  const call = store.getState().call;
67
+ reportDeclineIfP2P(call);
65
68
  const signal = {
66
69
  peerXmppUsername: call.peerXmppUsername,
67
70
  callId: call.callId,
@@ -0,0 +1,27 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ /**
4
+ * Seconds since the call truly connected, counted from the server-set
5
+ * `joinedAt` anchor so both sides show the same time (web's
6
+ * useSharedCallElapsed). Null until the peer is in.
7
+ */
8
+ export const useSharedCallElapsed = (anchorAt: number | null): number | null => {
9
+ const [, tick] = useState(0);
10
+ useEffect(() => {
11
+ if (anchorAt === null) {return;}
12
+ const id = setInterval(() => tick((n) => n + 1), 1000);
13
+ return () => clearInterval(id);
14
+ }, [anchorAt]);
15
+ if (anchorAt === null) {return null;}
16
+ return Math.max(0, Math.floor((Date.now() - anchorAt) / 1000));
17
+ };
18
+
19
+ export const formatCallDuration = (totalSeconds: number): string => {
20
+ const safe = Math.max(0, Math.floor(totalSeconds));
21
+ const hours = Math.floor(safe / 3600);
22
+ const minutes = Math.floor((safe % 3600) / 60);
23
+ const seconds = safe % 60;
24
+ const mm = String(minutes).padStart(2, '0');
25
+ const ss = String(seconds).padStart(2, '0');
26
+ return hours > 0 ? `${hours}:${mm}:${ss}` : `${mm}:${ss}`;
27
+ };
@@ -0,0 +1,13 @@
1
+ import type { CallState } from '../../roomStore/callSlice';
2
+
3
+ /**
4
+ * True while a call is far enough along to have a media session: connecting
5
+ * or in the call. A LiveKit call also needs its token (that is what the room
6
+ * is joined with); a peer to peer call has none, its media is the peer
7
+ * connection, so the phase alone decides.
8
+ */
9
+ export const callCanRenderSession = (
10
+ call: Pick<CallState, 'phase' | 'mode' | 'token'>
11
+ ): boolean =>
12
+ (call.phase === 'connecting' || call.phase === 'in-call') &&
13
+ (call.mode === 'p2p' || !!call.token);