@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.
- package/CHANGELOG.md +17 -0
- package/README.md +126 -1
- package/lib/commonjs/booking/index.js +44 -0
- package/lib/commonjs/booking/index.js.map +1 -0
- package/lib/commonjs/booking/pendingScheduledCall.js +275 -0
- package/lib/commonjs/booking/pendingScheduledCall.js.map +1 -0
- package/lib/commonjs/booking/scheduleForm.js +91 -0
- package/lib/commonjs/booking/scheduleForm.js.map +1 -0
- package/lib/commonjs/booking/scheduledCall.js +141 -0
- package/lib/commonjs/booking/scheduledCall.js.map +1 -0
- package/lib/commonjs/booking/scheduledCallActions.js +128 -0
- package/lib/commonjs/booking/scheduledCallActions.js.map +1 -0
- package/lib/commonjs/booking/scheduledCallLink.js +143 -0
- package/lib/commonjs/booking/scheduledCallLink.js.map +1 -0
- package/lib/commonjs/booking/scheduledCallStore.js +64 -0
- package/lib/commonjs/booking/scheduledCallStore.js.map +1 -0
- package/lib/commonjs/booking/startRoomCall.js +84 -0
- package/lib/commonjs/booking/startRoomCall.js.map +1 -0
- package/lib/commonjs/calls/callBusy.js +18 -0
- package/lib/commonjs/calls/callBusy.js.map +1 -0
- package/lib/commonjs/calls/callDisplay.js +73 -0
- package/lib/commonjs/calls/callDisplay.js.map +1 -0
- package/lib/commonjs/calls/callMode.js +175 -0
- package/lib/commonjs/calls/callMode.js.map +1 -0
- package/lib/commonjs/calls/declineReport.js +20 -0
- package/lib/commonjs/calls/declineReport.js.map +1 -0
- package/lib/commonjs/calls/p2p/P2PCallController.js +724 -0
- package/lib/commonjs/calls/p2p/P2PCallController.js.map +1 -0
- package/lib/commonjs/calls/p2p/icePolicy.js +107 -0
- package/lib/commonjs/calls/p2p/icePolicy.js.map +1 -0
- package/lib/commonjs/calls/p2p/negotiator.js +202 -0
- package/lib/commonjs/calls/p2p/negotiator.js.map +1 -0
- package/lib/commonjs/calls/p2p/p2pRuntime.js +147 -0
- package/lib/commonjs/calls/p2p/p2pRuntime.js.map +1 -0
- package/lib/commonjs/calls/p2p/signalInbox.js +98 -0
- package/lib/commonjs/calls/p2p/signalInbox.js.map +1 -0
- package/lib/commonjs/calls/p2p/signalStanza.js +141 -0
- package/lib/commonjs/calls/p2p/signalStanza.js.map +1 -0
- package/lib/commonjs/calls/p2p/webrtcRuntime.js +53 -0
- package/lib/commonjs/calls/p2p/webrtcRuntime.js.map +1 -0
- package/lib/commonjs/calls/senderTrust.js +43 -0
- package/lib/commonjs/calls/senderTrust.js.map +1 -0
- package/lib/commonjs/calls/startCall.js +51 -0
- package/lib/commonjs/calls/startCall.js.map +1 -0
- package/lib/commonjs/components/Booking/BookingIcons.js +55 -0
- package/lib/commonjs/components/Booking/BookingIcons.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduleCallButton.js +64 -0
- package/lib/commonjs/components/Booking/ScheduleCallButton.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduleCallSheet.js +351 -0
- package/lib/commonjs/components/Booking/ScheduleCallSheet.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduledCallCard.js +203 -0
- package/lib/commonjs/components/Booking/ScheduledCallCard.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduledCallHost.js +23 -0
- package/lib/commonjs/components/Booking/ScheduledCallHost.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduledCallMessage.js +55 -0
- package/lib/commonjs/components/Booking/ScheduledCallMessage.js.map +1 -0
- package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js +235 -0
- package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js.map +1 -0
- package/lib/commonjs/components/Booking/bookingShared.js +305 -0
- package/lib/commonjs/components/Booking/bookingShared.js.map +1 -0
- package/lib/commonjs/components/MainComponents/AlbumGrid.js +6 -2
- package/lib/commonjs/components/MainComponents/AlbumGrid.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +18 -12
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js +5 -2
- package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js.map +1 -1
- package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js +6 -3
- package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +13 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +13 -0
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +10 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +7 -16
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +27 -1
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js +159 -0
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +203 -134
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js +180 -0
- package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +19 -15
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -162
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js +824 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js +179 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js +22 -5
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +15 -8
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/ActiveCallBar.js +3 -2
- package/lib/commonjs/components/VideoCalls/ActiveCallBar.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/CallButtons.js +19 -11
- package/lib/commonjs/components/VideoCalls/CallButtons.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/CallControlBar.js +119 -0
- package/lib/commonjs/components/VideoCalls/CallControlBar.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/CallVideo.js +49 -0
- package/lib/commonjs/components/VideoCalls/CallVideo.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/GroupCallView.js +281 -0
- package/lib/commonjs/components/VideoCalls/GroupCallView.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/P2PCallRunner.js +151 -0
- package/lib/commonjs/components/VideoCalls/P2PCallRunner.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js +38 -14
- package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js +57 -128
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/callActions.js +3 -0
- package/lib/commonjs/components/VideoCalls/callActions.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/callElapsed.js +38 -0
- package/lib/commonjs/components/VideoCalls/callElapsed.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/callLive.js +15 -0
- package/lib/commonjs/components/VideoCalls/callLive.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/callSessionController.js +81 -24
- package/lib/commonjs/components/VideoCalls/callSessionController.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/callSessionTypes.js +41 -0
- package/lib/commonjs/components/VideoCalls/callSessionTypes.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/groupLayout.js +43 -0
- package/lib/commonjs/components/VideoCalls/groupLayout.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/p2pCallSession.js +272 -0
- package/lib/commonjs/components/VideoCalls/p2pCallSession.js.map +1 -0
- package/lib/commonjs/components/VideoCalls/useCallKeep.js +7 -2
- package/lib/commonjs/components/VideoCalls/useCallKeep.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js +2 -1
- package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
- package/lib/commonjs/components/styled/MessageImage.js +4 -1
- package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +5 -1
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/context/MediaSourceContext.js +18 -0
- package/lib/commonjs/context/MediaSourceContext.js.map +1 -0
- package/lib/commonjs/context/xmppProvider.js +2 -1
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/callPush.js +3 -1
- package/lib/commonjs/helpers/callPush.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +3 -1
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js +2 -0
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/commonjs/helpers/incomingCallFromPush.js +63 -7
- package/lib/commonjs/helpers/incomingCallFromPush.js.map +1 -1
- package/lib/commonjs/helpers/publicChatsEntry.js +8 -6
- package/lib/commonjs/helpers/publicChatsEntry.js.map +1 -1
- package/lib/commonjs/helpers/pushPayload.js +5 -0
- package/lib/commonjs/helpers/pushPayload.js.map +1 -1
- package/lib/commonjs/helpers/reportRoom.js +76 -0
- package/lib/commonjs/helpers/reportRoom.js.map +1 -0
- package/lib/commonjs/helpers/roomMedia.js +118 -0
- package/lib/commonjs/helpers/roomMedia.js.map +1 -0
- package/lib/commonjs/i18n/strings.js +480 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +93 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/callState.api.js +75 -0
- package/lib/commonjs/networking/api-requests/callState.api.js.map +1 -0
- package/lib/commonjs/networking/api-requests/push.api.js +29 -6
- package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +17 -15
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/scheduledCalls.api.js +141 -0
- package/lib/commonjs/networking/api-requests/scheduledCalls.api.js.map +1 -0
- package/lib/commonjs/networking/callTokenStanza.js +210 -50
- package/lib/commonjs/networking/callTokenStanza.js.map +1 -1
- package/lib/commonjs/roomStore/callSlice.js +59 -4
- package/lib/commonjs/roomStore/callSlice.js.map +1 -1
- package/lib/commonjs/services/appBadge.js +80 -0
- package/lib/commonjs/services/appBadge.js.map +1 -0
- package/lib/commonjs/services/languageSettings.js +47 -15
- package/lib/commonjs/services/languageSettings.js.map +1 -1
- package/lib/commonjs/services/pushRegistration.js +21 -5
- package/lib/commonjs/services/pushRegistration.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/booking/index.js +5 -0
- package/lib/module/booking/index.js.map +1 -0
- package/lib/module/booking/pendingScheduledCall.js +261 -0
- package/lib/module/booking/pendingScheduledCall.js.map +1 -0
- package/lib/module/booking/scheduleForm.js +79 -0
- package/lib/module/booking/scheduleForm.js.map +1 -0
- package/lib/module/booking/scheduledCall.js +129 -0
- package/lib/module/booking/scheduledCall.js.map +1 -0
- package/lib/module/booking/scheduledCallActions.js +118 -0
- package/lib/module/booking/scheduledCallActions.js.map +1 -0
- package/lib/module/booking/scheduledCallLink.js +136 -0
- package/lib/module/booking/scheduledCallLink.js.map +1 -0
- package/lib/module/booking/scheduledCallStore.js +60 -0
- package/lib/module/booking/scheduledCallStore.js.map +1 -0
- package/lib/module/booking/startRoomCall.js +80 -0
- package/lib/module/booking/startRoomCall.js.map +1 -0
- package/lib/module/calls/callBusy.js +13 -0
- package/lib/module/calls/callBusy.js.map +1 -0
- package/lib/module/calls/callDisplay.js +65 -0
- package/lib/module/calls/callDisplay.js.map +1 -0
- package/lib/module/calls/callMode.js +168 -0
- package/lib/module/calls/callMode.js.map +1 -0
- package/lib/module/calls/declineReport.js +16 -0
- package/lib/module/calls/declineReport.js.map +1 -0
- package/lib/module/calls/p2p/P2PCallController.js +718 -0
- package/lib/module/calls/p2p/P2PCallController.js.map +1 -0
- package/lib/module/calls/p2p/icePolicy.js +102 -0
- package/lib/module/calls/p2p/icePolicy.js.map +1 -0
- package/lib/module/calls/p2p/negotiator.js +197 -0
- package/lib/module/calls/p2p/negotiator.js.map +1 -0
- package/lib/module/calls/p2p/p2pRuntime.js +137 -0
- package/lib/module/calls/p2p/p2pRuntime.js.map +1 -0
- package/lib/module/calls/p2p/signalInbox.js +93 -0
- package/lib/module/calls/p2p/signalInbox.js.map +1 -0
- package/lib/module/calls/p2p/signalStanza.js +135 -0
- package/lib/module/calls/p2p/signalStanza.js.map +1 -0
- package/lib/module/calls/p2p/webrtcRuntime.js +46 -0
- package/lib/module/calls/p2p/webrtcRuntime.js.map +1 -0
- package/lib/module/calls/senderTrust.js +38 -0
- package/lib/module/calls/senderTrust.js.map +1 -0
- package/lib/module/calls/startCall.js +47 -0
- package/lib/module/calls/startCall.js.map +1 -0
- package/lib/module/components/Booking/BookingIcons.js +48 -0
- package/lib/module/components/Booking/BookingIcons.js.map +1 -0
- package/lib/module/components/Booking/ScheduleCallButton.js +59 -0
- package/lib/module/components/Booking/ScheduleCallButton.js.map +1 -0
- package/lib/module/components/Booking/ScheduleCallSheet.js +345 -0
- package/lib/module/components/Booking/ScheduleCallSheet.js.map +1 -0
- package/lib/module/components/Booking/ScheduledCallCard.js +197 -0
- package/lib/module/components/Booking/ScheduledCallCard.js.map +1 -0
- package/lib/module/components/Booking/ScheduledCallHost.js +18 -0
- package/lib/module/components/Booking/ScheduledCallHost.js.map +1 -0
- package/lib/module/components/Booking/ScheduledCallMessage.js +48 -0
- package/lib/module/components/Booking/ScheduledCallMessage.js.map +1 -0
- package/lib/module/components/Booking/ScheduledCallPreJoin.js +229 -0
- package/lib/module/components/Booking/ScheduledCallPreJoin.js.map +1 -0
- package/lib/module/components/Booking/bookingShared.js +291 -0
- package/lib/module/components/Booking/bookingShared.js.map +1 -0
- package/lib/module/components/MainComponents/AlbumGrid.js +6 -2
- package/lib/module/components/MainComponents/AlbumGrid.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +20 -14
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/LanguageSelectorButton.js +5 -2
- package/lib/module/components/MainComponents/LanguageSelectorButton.js.map +1 -1
- package/lib/module/components/MainComponents/LanguageSelectorModal.js +7 -4
- package/lib/module/components/MainComponents/LanguageSelectorModal.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +13 -0
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +13 -0
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +10 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +7 -16
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +27 -1
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js +154 -0
- package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +204 -136
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js +175 -0
- package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +21 -15
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -163
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js +819 -0
- package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
- package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js +172 -0
- package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js +20 -4
- package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +17 -10
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
- package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
- package/lib/module/components/VideoCalls/ActiveCallBar.js +3 -2
- package/lib/module/components/VideoCalls/ActiveCallBar.js.map +1 -1
- package/lib/module/components/VideoCalls/CallButtons.js +19 -11
- package/lib/module/components/VideoCalls/CallButtons.js.map +1 -1
- package/lib/module/components/VideoCalls/CallControlBar.js +113 -0
- package/lib/module/components/VideoCalls/CallControlBar.js.map +1 -0
- package/lib/module/components/VideoCalls/CallVideo.js +43 -0
- package/lib/module/components/VideoCalls/CallVideo.js.map +1 -0
- package/lib/module/components/VideoCalls/GroupCallView.js +275 -0
- package/lib/module/components/VideoCalls/GroupCallView.js.map +1 -0
- package/lib/module/components/VideoCalls/P2PCallRunner.js +147 -0
- package/lib/module/components/VideoCalls/P2PCallRunner.js.map +1 -0
- package/lib/module/components/VideoCalls/VideoCallOverlay.js +38 -14
- package/lib/module/components/VideoCalls/VideoCallOverlay.js.map +1 -1
- package/lib/module/components/VideoCalls/VideoCallSession.js +46 -127
- package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/module/components/VideoCalls/callActions.js +3 -0
- package/lib/module/components/VideoCalls/callActions.js.map +1 -1
- package/lib/module/components/VideoCalls/callElapsed.js +33 -0
- package/lib/module/components/VideoCalls/callElapsed.js.map +1 -0
- package/lib/module/components/VideoCalls/callLive.js +10 -0
- package/lib/module/components/VideoCalls/callLive.js.map +1 -0
- package/lib/module/components/VideoCalls/callSessionController.js +80 -24
- package/lib/module/components/VideoCalls/callSessionController.js.map +1 -1
- package/lib/module/components/VideoCalls/callSessionTypes.js +37 -0
- package/lib/module/components/VideoCalls/callSessionTypes.js.map +1 -0
- package/lib/module/components/VideoCalls/groupLayout.js +36 -0
- package/lib/module/components/VideoCalls/groupLayout.js.map +1 -0
- package/lib/module/components/VideoCalls/p2pCallSession.js +256 -0
- package/lib/module/components/VideoCalls/p2pCallSession.js.map +1 -0
- package/lib/module/components/VideoCalls/useCallKeep.js +8 -2
- package/lib/module/components/VideoCalls/useCallKeep.js.map +1 -1
- package/lib/module/components/VideoCalls/useOngoingCallNotification.js +2 -1
- package/lib/module/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
- package/lib/module/components/styled/MessageImage.js +4 -1
- package/lib/module/components/styled/MessageImage.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +5 -1
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/context/MediaSourceContext.js +13 -0
- package/lib/module/context/MediaSourceContext.js.map +1 -0
- package/lib/module/context/xmppProvider.js +2 -1
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/callPush.js +3 -1
- package/lib/module/helpers/callPush.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js +2 -1
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_TYPES.js +2 -0
- package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/module/helpers/incomingCallFromPush.js +63 -7
- package/lib/module/helpers/incomingCallFromPush.js.map +1 -1
- package/lib/module/helpers/publicChatsEntry.js +8 -6
- package/lib/module/helpers/publicChatsEntry.js.map +1 -1
- package/lib/module/helpers/pushPayload.js +5 -0
- package/lib/module/helpers/pushPayload.js.map +1 -1
- package/lib/module/helpers/reportRoom.js +70 -0
- package/lib/module/helpers/reportRoom.js.map +1 -0
- package/lib/module/helpers/roomMedia.js +112 -0
- package/lib/module/helpers/roomMedia.js.map +1 -0
- package/lib/module/i18n/strings.js +480 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +5 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/callState.api.js +66 -0
- package/lib/module/networking/api-requests/callState.api.js.map +1 -0
- package/lib/module/networking/api-requests/push.api.js +29 -6
- package/lib/module/networking/api-requests/push.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +17 -15
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/api-requests/scheduledCalls.api.js +130 -0
- package/lib/module/networking/api-requests/scheduledCalls.api.js.map +1 -0
- package/lib/module/networking/callTokenStanza.js +210 -50
- package/lib/module/networking/callTokenStanza.js.map +1 -1
- package/lib/module/roomStore/callSlice.js +57 -3
- package/lib/module/roomStore/callSlice.js.map +1 -1
- package/lib/module/services/appBadge.js +74 -0
- package/lib/module/services/appBadge.js.map +1 -0
- package/lib/module/services/languageSettings.js +44 -13
- package/lib/module/services/languageSettings.js.map +1 -1
- package/lib/module/services/pushRegistration.js +21 -5
- package/lib/module/services/pushRegistration.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/booking/index.d.ts +3 -0
- package/lib/typescript/booking/index.d.ts.map +1 -0
- package/lib/typescript/booking/pendingScheduledCall.d.ts +80 -0
- package/lib/typescript/booking/pendingScheduledCall.d.ts.map +1 -0
- package/lib/typescript/booking/scheduleForm.d.ts +28 -0
- package/lib/typescript/booking/scheduleForm.d.ts.map +1 -0
- package/lib/typescript/booking/scheduledCall.d.ts +52 -0
- package/lib/typescript/booking/scheduledCall.d.ts.map +1 -0
- package/lib/typescript/booking/scheduledCallActions.d.ts +22 -0
- package/lib/typescript/booking/scheduledCallActions.d.ts.map +1 -0
- package/lib/typescript/booking/scheduledCallLink.d.ts +37 -0
- package/lib/typescript/booking/scheduledCallLink.d.ts.map +1 -0
- package/lib/typescript/booking/scheduledCallStore.d.ts +47 -0
- package/lib/typescript/booking/scheduledCallStore.d.ts.map +1 -0
- package/lib/typescript/booking/startRoomCall.d.ts +12 -0
- package/lib/typescript/booking/startRoomCall.d.ts.map +1 -0
- package/lib/typescript/calls/callBusy.d.ts +9 -0
- package/lib/typescript/calls/callBusy.d.ts.map +1 -0
- package/lib/typescript/calls/callDisplay.d.ts +23 -0
- package/lib/typescript/calls/callDisplay.d.ts.map +1 -0
- package/lib/typescript/calls/callMode.d.ts +106 -0
- package/lib/typescript/calls/callMode.d.ts.map +1 -0
- package/lib/typescript/calls/declineReport.d.ts +11 -0
- package/lib/typescript/calls/declineReport.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/P2PCallController.d.ts +150 -0
- package/lib/typescript/calls/p2p/P2PCallController.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/icePolicy.d.ts +37 -0
- package/lib/typescript/calls/p2p/icePolicy.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/negotiator.d.ts +57 -0
- package/lib/typescript/calls/p2p/negotiator.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/p2pRuntime.d.ts +41 -0
- package/lib/typescript/calls/p2p/p2pRuntime.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/signalInbox.d.ts +35 -0
- package/lib/typescript/calls/p2p/signalInbox.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/signalStanza.d.ts +52 -0
- package/lib/typescript/calls/p2p/signalStanza.d.ts.map +1 -0
- package/lib/typescript/calls/p2p/webrtcRuntime.d.ts +32 -0
- package/lib/typescript/calls/p2p/webrtcRuntime.d.ts.map +1 -0
- package/lib/typescript/calls/senderTrust.d.ts +8 -0
- package/lib/typescript/calls/senderTrust.d.ts.map +1 -0
- package/lib/typescript/calls/startCall.d.ts +17 -0
- package/lib/typescript/calls/startCall.d.ts.map +1 -0
- package/lib/typescript/components/Booking/BookingIcons.d.ts +9 -0
- package/lib/typescript/components/Booking/BookingIcons.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduleCallButton.d.ts +11 -0
- package/lib/typescript/components/Booking/ScheduleCallButton.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts +4 -0
- package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduledCallCard.d.ts +14 -0
- package/lib/typescript/components/Booking/ScheduledCallCard.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduledCallHost.d.ts +10 -0
- package/lib/typescript/components/Booking/ScheduledCallHost.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts +20 -0
- package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts.map +1 -0
- package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts +8 -0
- package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts.map +1 -0
- package/lib/typescript/components/Booking/bookingShared.d.ts +199 -0
- package/lib/typescript/components/Booking/bookingShared.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/AlbumGrid.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts +3 -1
- package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/LanguageSelectorModal.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts +3 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts +16 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts.map +1 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts +18 -0
- package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts.map +1 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +16 -0
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts +27 -0
- package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts.map +1 -0
- package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts +9 -0
- package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts +8 -0
- package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/ActiveCallBar.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/CallButtons.d.ts +2 -1
- package/lib/typescript/components/VideoCalls/CallButtons.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/CallControlBar.d.ts +17 -0
- package/lib/typescript/components/VideoCalls/CallControlBar.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/CallVideo.d.ts +23 -0
- package/lib/typescript/components/VideoCalls/CallVideo.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/GroupCallView.d.ts +22 -0
- package/lib/typescript/components/VideoCalls/GroupCallView.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts +2 -0
- package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/VideoCallOverlay.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts +10 -12
- package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/callActions.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/callElapsed.d.ts +8 -0
- package/lib/typescript/components/VideoCalls/callElapsed.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/callLive.d.ts +9 -0
- package/lib/typescript/components/VideoCalls/callLive.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/callSessionController.d.ts +10 -31
- package/lib/typescript/components/VideoCalls/callSessionController.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts +60 -0
- package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/groupLayout.d.ts +23 -0
- package/lib/typescript/components/VideoCalls/groupLayout.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts +31 -0
- package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts.map +1 -0
- package/lib/typescript/components/VideoCalls/useCallKeep.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/useOngoingCallNotification.d.ts.map +1 -1
- package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/context/MediaSourceContext.d.ts +4 -0
- package/lib/typescript/context/MediaSourceContext.d.ts.map +1 -0
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/callPush.d.ts +11 -1
- package/lib/typescript/helpers/callPush.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +2 -0
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
- package/lib/typescript/helpers/incomingCallFromPush.d.ts.map +1 -1
- package/lib/typescript/helpers/publicChatsEntry.d.ts +7 -5
- package/lib/typescript/helpers/publicChatsEntry.d.ts.map +1 -1
- package/lib/typescript/helpers/pushPayload.d.ts +1 -1
- package/lib/typescript/helpers/pushPayload.d.ts.map +1 -1
- package/lib/typescript/helpers/reportRoom.d.ts +19 -0
- package/lib/typescript/helpers/reportRoom.d.ts.map +1 -0
- package/lib/typescript/helpers/roomMedia.d.ts +26 -0
- package/lib/typescript/helpers/roomMedia.d.ts.map +1 -0
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +6 -1
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/callState.api.d.ts +25 -0
- package/lib/typescript/networking/api-requests/callState.api.d.ts.map +1 -0
- package/lib/typescript/networking/api-requests/push.api.d.ts +9 -2
- package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +8 -6
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts +86 -0
- package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts.map +1 -0
- package/lib/typescript/networking/callTokenStanza.d.ts.map +1 -1
- package/lib/typescript/roomStore/callSlice.d.ts +23 -1
- package/lib/typescript/roomStore/callSlice.d.ts.map +1 -1
- package/lib/typescript/services/appBadge.d.ts +3 -0
- package/lib/typescript/services/appBadge.d.ts.map +1 -0
- package/lib/typescript/services/languageSettings.d.ts +7 -0
- package/lib/typescript/services/languageSettings.d.ts.map +1 -1
- package/lib/typescript/services/pushRegistration.d.ts.map +1 -1
- package/lib/typescript/types/models/modal.model.d.ts +18 -0
- package/lib/typescript/types/models/modal.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +85 -4
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/lib/typescript/version.d.ts.map +1 -1
- package/package.json +9 -2
- package/src/booking/index.ts +10 -0
- package/src/booking/pendingScheduledCall.ts +272 -0
- package/src/booking/scheduleForm.ts +84 -0
- package/src/booking/scheduledCall.ts +163 -0
- package/src/booking/scheduledCallActions.ts +141 -0
- package/src/booking/scheduledCallLink.ts +145 -0
- package/src/booking/scheduledCallStore.ts +69 -0
- package/src/booking/startRoomCall.ts +103 -0
- package/src/calls/callBusy.ts +10 -0
- package/src/calls/callDisplay.ts +74 -0
- package/src/calls/callMode.ts +286 -0
- package/src/calls/declineReport.ts +16 -0
- package/src/calls/p2p/P2PCallController.ts +813 -0
- package/src/calls/p2p/icePolicy.ts +99 -0
- package/src/calls/p2p/negotiator.ts +186 -0
- package/src/calls/p2p/p2pRuntime.ts +164 -0
- package/src/calls/p2p/signalInbox.ts +117 -0
- package/src/calls/p2p/signalStanza.ts +205 -0
- package/src/calls/p2p/webrtcRuntime.ts +60 -0
- package/src/calls/senderTrust.ts +40 -0
- package/src/calls/startCall.ts +56 -0
- package/src/components/Booking/BookingIcons.tsx +44 -0
- package/src/components/Booking/ScheduleCallButton.tsx +66 -0
- package/src/components/Booking/ScheduleCallSheet.tsx +380 -0
- package/src/components/Booking/ScheduledCallCard.tsx +216 -0
- package/src/components/Booking/ScheduledCallHost.tsx +18 -0
- package/src/components/Booking/ScheduledCallMessage.tsx +62 -0
- package/src/components/Booking/ScheduledCallPreJoin.tsx +230 -0
- package/src/components/Booking/bookingShared.tsx +295 -0
- package/src/components/MainComponents/AlbumGrid.tsx +5 -1
- package/src/components/MainComponents/ChatHeader.tsx +18 -11
- package/src/components/MainComponents/LanguageSelectorButton.tsx +9 -2
- package/src/components/MainComponents/LanguageSelectorModal.tsx +10 -6
- package/src/components/MainComponents/MediaMessage.tsx +13 -2
- package/src/components/MainComponents/MessageContainer.tsx +15 -0
- package/src/components/MainComponents/ReduxWrapper.tsx +10 -0
- package/src/components/MainComponents/RoomList.tsx +8 -19
- package/src/components/MessageBubble/Message.tsx +24 -1
- package/src/components/Modals/ChatProfileModal/ChatMediaGrid.tsx +174 -0
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +119 -48
- package/src/components/Modals/ChatProfileModal/LeaveChatModal.tsx +191 -0
- package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +22 -22
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +115 -185
- package/src/components/Modals/FilePreviewModal/MediaViewer.tsx +880 -0
- package/src/components/Modals/FilePreviewModal/useSaveFile.ts +207 -0
- package/src/components/Modals/MessageSearchModal/MessageSearchModal.tsx +56 -30
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +28 -9
- package/src/components/Modals/UserSettingsModal/LanguageCard.tsx +9 -7
- package/src/components/VideoCalls/ActiveCallBar.tsx +6 -5
- package/src/components/VideoCalls/CallButtons.tsx +23 -12
- package/src/components/VideoCalls/CallControlBar.tsx +131 -0
- package/src/components/VideoCalls/CallVideo.tsx +59 -0
- package/src/components/VideoCalls/GroupCallView.tsx +324 -0
- package/src/components/VideoCalls/P2PCallRunner.tsx +192 -0
- package/src/components/VideoCalls/VideoCallOverlay.tsx +62 -17
- package/src/components/VideoCalls/VideoCallSession.tsx +55 -133
- package/src/components/VideoCalls/callActions.ts +3 -0
- package/src/components/VideoCalls/callElapsed.ts +27 -0
- package/src/components/VideoCalls/callLive.ts +13 -0
- package/src/components/VideoCalls/callSessionController.ts +130 -55
- package/src/components/VideoCalls/callSessionTypes.ts +80 -0
- package/src/components/VideoCalls/groupLayout.ts +48 -0
- package/src/components/VideoCalls/p2pCallSession.ts +291 -0
- package/src/components/VideoCalls/useCallKeep.ts +9 -2
- package/src/components/VideoCalls/useOngoingCallNotification.ts +2 -2
- package/src/components/styled/MessageImage.tsx +3 -1
- package/src/components/styled/VideoMessage.tsx +5 -1
- package/src/context/MediaSourceContext.tsx +14 -0
- package/src/context/xmppProvider.tsx +3 -0
- package/src/helpers/callPush.ts +13 -1
- package/src/helpers/constants/MODAL_COMPONENTS.tsx +4 -1
- package/src/helpers/constants/MODAL_TYPES.ts +2 -0
- package/src/helpers/incomingCallFromPush.ts +65 -7
- package/src/helpers/publicChatsEntry.ts +8 -7
- package/src/helpers/pushPayload.ts +9 -1
- package/src/helpers/reportRoom.ts +93 -0
- package/src/helpers/roomMedia.ts +126 -0
- package/src/i18n/strings.ts +480 -0
- package/src/main.ts +33 -0
- package/src/networking/api-requests/callState.api.ts +83 -0
- package/src/networking/api-requests/push.api.ts +28 -3
- package/src/networking/api-requests/rooms.api.ts +25 -15
- package/src/networking/api-requests/scheduledCalls.api.ts +232 -0
- package/src/networking/callTokenStanza.ts +247 -50
- package/src/roomStore/callSlice.ts +86 -2
- package/src/services/appBadge.ts +85 -0
- package/src/services/languageSettings.ts +43 -8
- package/src/services/pushRegistration.ts +34 -3
- package/src/types/models/modal.model.ts +16 -0
- package/src/types/types.ts +86 -4
- package/src/version.ts +1 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { Element } from 'ltx';
|
|
2
|
+
import { xml } from '@xmpp/client';
|
|
3
|
+
|
|
4
|
+
// Wire format of the peer to peer call signalling. It travels as a direct
|
|
5
|
+
// XMPP chat message between the two users, no server involvement:
|
|
6
|
+
//
|
|
7
|
+
// <message type="chat" to="<peer bare jid>">
|
|
8
|
+
// <body>system</body>
|
|
9
|
+
// <data type="call-p2p" callId="..." signal="offer|answer|candidate|end"
|
|
10
|
+
// payload="<JSON string>"/>
|
|
11
|
+
// </message>
|
|
12
|
+
//
|
|
13
|
+
// payload is the SDP init ({type, sdp}) for offer/answer, the
|
|
14
|
+
// RTCIceCandidateInit for candidate and {reason} for end. This module only
|
|
15
|
+
// builds and parses stanzas, so it stays unit testable without a connection.
|
|
16
|
+
|
|
17
|
+
export const P2P_SIGNAL_TYPE = 'call-p2p';
|
|
18
|
+
|
|
19
|
+
export type P2PSignalName = 'offer' | 'answer' | 'candidate' | 'end';
|
|
20
|
+
|
|
21
|
+
export interface P2PSdpPayload {
|
|
22
|
+
type: 'offer' | 'answer';
|
|
23
|
+
sdp: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface P2PCandidatePayload {
|
|
27
|
+
candidate: string;
|
|
28
|
+
sdpMid?: string | null;
|
|
29
|
+
sdpMLineIndex?: number | null;
|
|
30
|
+
usernameFragment?: string | null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface P2PEndPayload {
|
|
34
|
+
reason?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type P2PSignalPayload =
|
|
38
|
+
| P2PSdpPayload
|
|
39
|
+
| P2PCandidatePayload
|
|
40
|
+
| P2PEndPayload;
|
|
41
|
+
|
|
42
|
+
export interface P2PSignal {
|
|
43
|
+
callId: string;
|
|
44
|
+
signal: P2PSignalName;
|
|
45
|
+
payload: P2PSignalPayload;
|
|
46
|
+
/** Sender's bare JID as written in `from` (lower-cased), '' when missing. */
|
|
47
|
+
fromBare: string;
|
|
48
|
+
/** Sender's xmpp localpart (the part before '@'), '' when missing. */
|
|
49
|
+
fromLocal: string;
|
|
50
|
+
/**
|
|
51
|
+
* Age of the stanza from the server's stanza-id timestamp, null when the
|
|
52
|
+
* stanza carries none (direct messages often do not).
|
|
53
|
+
*/
|
|
54
|
+
ageMs: number | null;
|
|
55
|
+
/** Carries <delay/>: it was stored offline and replayed, so it is stale. */
|
|
56
|
+
delayed: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// SDP for a call with audio + video + data-less sections is a few KB; this
|
|
60
|
+
// only guards against a hostile peer pushing megabytes through an attribute.
|
|
61
|
+
const MAX_SDP_LENGTH = 64 * 1024;
|
|
62
|
+
const MAX_REASON_LENGTH = 64;
|
|
63
|
+
|
|
64
|
+
// A signal older than this (by the server's own timestamp) is not part of a
|
|
65
|
+
// live negotiation. Call-tokens use 5 s; signalling gets more headroom because
|
|
66
|
+
// candidates can queue behind a slow permission prompt on the sender, but
|
|
67
|
+
// anything the server replays after a reconnect is far older.
|
|
68
|
+
export const MAX_P2P_SIGNAL_AGE_MS = 15_000;
|
|
69
|
+
|
|
70
|
+
let outgoingCounter = 0;
|
|
71
|
+
|
|
72
|
+
export const buildP2PSignalStanza = (params: {
|
|
73
|
+
to: string;
|
|
74
|
+
callId: string;
|
|
75
|
+
signal: P2PSignalName;
|
|
76
|
+
payload?: P2PSignalPayload;
|
|
77
|
+
}): Element => {
|
|
78
|
+
outgoingCounter = (outgoingCounter + 1) % 1_000_000;
|
|
79
|
+
return xml(
|
|
80
|
+
'message',
|
|
81
|
+
{
|
|
82
|
+
to: params.to,
|
|
83
|
+
type: 'chat',
|
|
84
|
+
id: `call-p2p-${Date.now()}-${outgoingCounter}`,
|
|
85
|
+
},
|
|
86
|
+
xml('body', {}, 'system'),
|
|
87
|
+
xml('data', {
|
|
88
|
+
type: P2P_SIGNAL_TYPE,
|
|
89
|
+
callId: params.callId,
|
|
90
|
+
signal: params.signal,
|
|
91
|
+
// JSON.stringify escapes newlines in the SDP, so the attribute survives
|
|
92
|
+
// XML attribute-value normalisation on the receiving parser.
|
|
93
|
+
payload: JSON.stringify(params.payload ?? {}),
|
|
94
|
+
}),
|
|
95
|
+
// Signalling is only meaningful live: keep it out of the archive and the
|
|
96
|
+
// offline store (a replayed offer for a finished call is just noise).
|
|
97
|
+
xml('no-store', { xmlns: 'urn:xmpp:hints' }),
|
|
98
|
+
xml('no-permanent-store', { xmlns: 'urn:xmpp:hints' })
|
|
99
|
+
) as unknown as Element;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const SIGNAL_NAMES: ReadonlySet<string> = new Set([
|
|
103
|
+
'offer',
|
|
104
|
+
'answer',
|
|
105
|
+
'candidate',
|
|
106
|
+
'end',
|
|
107
|
+
]);
|
|
108
|
+
|
|
109
|
+
const validatePayload = (
|
|
110
|
+
signal: P2PSignalName,
|
|
111
|
+
raw: unknown
|
|
112
|
+
): P2PSignalPayload | null => {
|
|
113
|
+
if (!raw || typeof raw !== 'object') return null;
|
|
114
|
+
const p = raw as Record<string, unknown>;
|
|
115
|
+
if (signal === 'offer' || signal === 'answer') {
|
|
116
|
+
if (p.type !== signal) return null;
|
|
117
|
+
if (typeof p.sdp !== 'string' || !p.sdp || p.sdp.length > MAX_SDP_LENGTH) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return { type: signal, sdp: p.sdp };
|
|
121
|
+
}
|
|
122
|
+
if (signal === 'candidate') {
|
|
123
|
+
if (typeof p.candidate !== 'string' || p.candidate.length > 2048) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
candidate: p.candidate,
|
|
128
|
+
sdpMid: typeof p.sdpMid === 'string' ? p.sdpMid : null,
|
|
129
|
+
sdpMLineIndex:
|
|
130
|
+
typeof p.sdpMLineIndex === 'number' ? p.sdpMLineIndex : null,
|
|
131
|
+
usernameFragment:
|
|
132
|
+
typeof p.usernameFragment === 'string' ? p.usernameFragment : null,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
reason:
|
|
137
|
+
typeof p.reason === 'string'
|
|
138
|
+
? p.reason.slice(0, MAX_REASON_LENGTH)
|
|
139
|
+
: undefined,
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// Same trick as the call-token freshness check: the server stamps a
|
|
144
|
+
// microsecond id on archived stanzas and the first 13 digits are epoch ms.
|
|
145
|
+
const stanzaAgeMs = (stanza: Element, now: number): number | null => {
|
|
146
|
+
const id = String(stanza.getChild('stanza-id')?.attrs?.id || '').trim();
|
|
147
|
+
if (!id) return null;
|
|
148
|
+
const match = id.match(/\d{13,}/)?.[0];
|
|
149
|
+
if (!match) return null;
|
|
150
|
+
const ts = Number(match.slice(0, 13));
|
|
151
|
+
return Number.isFinite(ts) && ts > 0 ? Math.abs(now - ts) : null;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Reads a `call-p2p` message. Returns null for anything that is not a
|
|
156
|
+
* well formed signal (wrong type, unknown signal, bad JSON, bad payload).
|
|
157
|
+
*/
|
|
158
|
+
export const parseP2PSignalStanza = (
|
|
159
|
+
stanza: Element,
|
|
160
|
+
now: number = Date.now()
|
|
161
|
+
): P2PSignal | null => {
|
|
162
|
+
const data = stanza?.getChild?.('data');
|
|
163
|
+
if (!data || String(data.attrs?.type || '').toLowerCase() !== P2P_SIGNAL_TYPE) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
const callId = String(data.attrs?.callId || data.attrs?.callid || '').trim();
|
|
167
|
+
const signal = String(data.attrs?.signal || '')
|
|
168
|
+
.trim()
|
|
169
|
+
.toLowerCase();
|
|
170
|
+
if (!callId || !SIGNAL_NAMES.has(signal)) return null;
|
|
171
|
+
|
|
172
|
+
let parsed: unknown;
|
|
173
|
+
try {
|
|
174
|
+
parsed = JSON.parse(String(data.attrs?.payload || '{}'));
|
|
175
|
+
} catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const payload = validatePayload(signal as P2PSignalName, parsed);
|
|
179
|
+
if (!payload) return null;
|
|
180
|
+
|
|
181
|
+
const fromBare = String(stanza.attrs?.from || '')
|
|
182
|
+
.split('/')[0]
|
|
183
|
+
.trim()
|
|
184
|
+
.toLowerCase();
|
|
185
|
+
return {
|
|
186
|
+
callId,
|
|
187
|
+
signal: signal as P2PSignalName,
|
|
188
|
+
payload,
|
|
189
|
+
fromBare,
|
|
190
|
+
fromLocal: fromBare.split('@')[0],
|
|
191
|
+
ageMs: stanzaAgeMs(stanza, now),
|
|
192
|
+
delayed: !!stanza.getChild?.('delay'),
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Whether a parsed signal belongs to a live negotiation. An `end` is always
|
|
198
|
+
* accepted unless replayed (it only ever acts on a call that is still
|
|
199
|
+
* active, and stopping a call late is better than never).
|
|
200
|
+
*/
|
|
201
|
+
export const isP2PSignalFresh = (signal: P2PSignal): boolean => {
|
|
202
|
+
if (signal.delayed) return false;
|
|
203
|
+
if (signal.signal === 'end') return true;
|
|
204
|
+
return signal.ageMs === null || signal.ageMs <= MAX_P2P_SIGNAL_AGE_MS;
|
|
205
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional-dependency bridge for the WebRTC classes behind peer to peer calls.
|
|
3
|
+
*
|
|
4
|
+
* LiveKit's React Native SDK already ships a fork of react-native-webrtc,
|
|
5
|
+
* `@livekit/react-native-webrtc`. The p2p path uses ITS RTCPeerConnection and
|
|
6
|
+
* mediaDevices rather than adding the upstream `react-native-webrtc` package:
|
|
7
|
+
* two copies of the WebRTC native classes in one app do not link. Like every
|
|
8
|
+
* other call dependency it is an optional peer, so it is required lazily and
|
|
9
|
+
* a host without it simply cannot take or place a p2p call (a call-token for
|
|
10
|
+
* one is declined, see callTokenStanza).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export interface WebRTCRuntime {
|
|
14
|
+
/** `RTCPeerConnection` constructor of the fork. */
|
|
15
|
+
RTCPeerConnection: any;
|
|
16
|
+
/** `mediaDevices.getUserMedia` of the fork. */
|
|
17
|
+
mediaDevices: any;
|
|
18
|
+
/** `MediaStream` constructor of the fork. */
|
|
19
|
+
MediaStream: any;
|
|
20
|
+
/** `<RTCView streamURL={...} />` renderer. */
|
|
21
|
+
RTCView: any;
|
|
22
|
+
/**
|
|
23
|
+
* `RTCAudioSession`: tells WebRTC when CallKit activates/deactivates the
|
|
24
|
+
* iOS audio session. Null on builds that lack it.
|
|
25
|
+
*/
|
|
26
|
+
RTCAudioSession: any;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let cached: WebRTCRuntime | null | undefined;
|
|
30
|
+
|
|
31
|
+
export const loadWebRTC = (): WebRTCRuntime | null => {
|
|
32
|
+
if (cached !== undefined) {
|
|
33
|
+
return cached;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const webrtc = require('@livekit/react-native-webrtc');
|
|
37
|
+
if (!webrtc?.RTCPeerConnection || !webrtc?.mediaDevices) {
|
|
38
|
+
cached = null;
|
|
39
|
+
} else {
|
|
40
|
+
cached = {
|
|
41
|
+
RTCPeerConnection: webrtc.RTCPeerConnection,
|
|
42
|
+
mediaDevices: webrtc.mediaDevices,
|
|
43
|
+
MediaStream: webrtc.MediaStream,
|
|
44
|
+
RTCView: webrtc.RTCView,
|
|
45
|
+
RTCAudioSession: webrtc.RTCAudioSession ?? null,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
} catch {
|
|
49
|
+
cached = null;
|
|
50
|
+
}
|
|
51
|
+
return cached;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** True when this build can run a peer to peer call. */
|
|
55
|
+
export const isP2PAvailable = (): boolean => loadWebRTC() !== null;
|
|
56
|
+
|
|
57
|
+
/** Reset memoised state. Test seam only. */
|
|
58
|
+
export const __resetWebRTCRuntimeForTests = (): void => {
|
|
59
|
+
cached = undefined;
|
|
60
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Which senders may steer a call's network targets.
|
|
2
|
+
//
|
|
3
|
+
// A call-token can carry two attributes that decide WHERE media goes: the
|
|
4
|
+
// LiveKit `livekitUrl` and, for p2p, the `ice` list (TURN servers and their
|
|
5
|
+
// credentials). Honouring them from an arbitrary sender would let any user
|
|
6
|
+
// ring a victim with a forged call-token and route their camera and
|
|
7
|
+
// microphone to a server the sender controls once the call is accepted. The
|
|
8
|
+
// backend sends every genuine call-token from the app's system account, and
|
|
9
|
+
// ejabberd stamps the real JID on every message a client sends, so a normal
|
|
10
|
+
// user cannot appear as that account.
|
|
11
|
+
//
|
|
12
|
+
// The system account's local part is `<appId>_<appId>`: the 24 hex character
|
|
13
|
+
// app id, an underscore, the same 24 hex characters again.
|
|
14
|
+
|
|
15
|
+
const SYSTEM_ACCOUNT_LOCAL = /^([0-9a-fA-F]{24})_\1$/;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* True when `fromJid` is the app's system account. The resource is ignored.
|
|
19
|
+
* When `expectedDomain` is given the sender must also be on that XMPP domain,
|
|
20
|
+
* so a same-looking account on a federated server is not accepted. A missing
|
|
21
|
+
* or malformed JID is never trusted.
|
|
22
|
+
*/
|
|
23
|
+
export const isSystemAccountSender = (
|
|
24
|
+
fromJid: unknown,
|
|
25
|
+
expectedDomain?: string | null
|
|
26
|
+
): boolean => {
|
|
27
|
+
const from = typeof fromJid === 'string' ? fromJid.trim() : '';
|
|
28
|
+
if (!from) return false;
|
|
29
|
+
const bare = from.split('/')[0];
|
|
30
|
+
const at = bare.indexOf('@');
|
|
31
|
+
if (at <= 0 || bare.indexOf('@', at + 1) !== -1) return false;
|
|
32
|
+
const local = bare.slice(0, at);
|
|
33
|
+
const domain = bare.slice(at + 1).toLowerCase();
|
|
34
|
+
if (!domain) return false;
|
|
35
|
+
if (!SYSTEM_ACCOUNT_LOCAL.test(local)) return false;
|
|
36
|
+
const expected = String(expectedDomain || '')
|
|
37
|
+
.trim()
|
|
38
|
+
.toLowerCase();
|
|
39
|
+
return !expected || domain === expected;
|
|
40
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { store } from '../roomStore';
|
|
2
|
+
import { setOutgoingCallRoute } from '../roomStore/callSlice';
|
|
3
|
+
import { createChatCall } from '../networking/api-requests/rooms.api';
|
|
4
|
+
import { reportCallEnded } from '../networking/api-requests/callState.api';
|
|
5
|
+
import { sendCallStateSignal } from '../networking/callTokenStanza';
|
|
6
|
+
import type { CallKindName } from './callMode';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Second half of placing a call, shared by every dial entry point (chat
|
|
10
|
+
* header, profile modal): POST /v1/chats/call/create and record how the server
|
|
11
|
+
* decided to carry the call in the call slice. The caller has already
|
|
12
|
+
* dispatched startOutgoingCall.
|
|
13
|
+
*
|
|
14
|
+
* Throws when the request fails (the entry point shows the message). A p2p
|
|
15
|
+
* answer that lands after the user already cancelled is cleaned up here: the
|
|
16
|
+
* server has already rung the callee, and nothing else knows its callId.
|
|
17
|
+
*/
|
|
18
|
+
export async function requestOutgoingCall(params: {
|
|
19
|
+
chatName: string;
|
|
20
|
+
kind: CallKindName;
|
|
21
|
+
peerXmppUsername?: string | null;
|
|
22
|
+
}): Promise<void> {
|
|
23
|
+
const startedAt = store.getState().call.startedAt;
|
|
24
|
+
const result = await createChatCall(params.chatName, { kind: params.kind });
|
|
25
|
+
|
|
26
|
+
const current = store.getState().call;
|
|
27
|
+
const stillCurrent =
|
|
28
|
+
current.phase !== 'idle' &&
|
|
29
|
+
current.direction === 'outgoing' &&
|
|
30
|
+
current.startedAt === startedAt;
|
|
31
|
+
|
|
32
|
+
if (!stillCurrent) {
|
|
33
|
+
if (result.mode === 'p2p') {
|
|
34
|
+
reportCallEnded(result.callId);
|
|
35
|
+
if (params.peerXmppUsername) {
|
|
36
|
+
sendCallStateSignal('cancelled', {
|
|
37
|
+
peerXmppUsername: params.peerXmppUsername,
|
|
38
|
+
callId: result.callId,
|
|
39
|
+
roomBareName: params.chatName,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
store.dispatch(
|
|
47
|
+
setOutgoingCallRoute({
|
|
48
|
+
startedAt,
|
|
49
|
+
callId: result.callId,
|
|
50
|
+
mode: result.mode,
|
|
51
|
+
group: result.group,
|
|
52
|
+
livekitUrl: result.livekitUrl,
|
|
53
|
+
iceServers: result.iceServers,
|
|
54
|
+
})
|
|
55
|
+
);
|
|
56
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Svg, { Line, Rect } from 'react-native-svg';
|
|
3
|
+
|
|
4
|
+
interface IconProps {
|
|
5
|
+
color?: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Calendar glyph for the header's "Schedule a call" button. */
|
|
10
|
+
export const ScheduleCallIcon: React.FC<IconProps> = ({
|
|
11
|
+
color = '#000000',
|
|
12
|
+
size = 22,
|
|
13
|
+
}) => (
|
|
14
|
+
<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
15
|
+
<Rect
|
|
16
|
+
x="3.5"
|
|
17
|
+
y="5"
|
|
18
|
+
width="17"
|
|
19
|
+
height="15.5"
|
|
20
|
+
rx="2.5"
|
|
21
|
+
stroke={color}
|
|
22
|
+
strokeWidth={1.8}
|
|
23
|
+
/>
|
|
24
|
+
<Line x1="3.5" y1="10" x2="20.5" y2="10" stroke={color} strokeWidth={1.8} />
|
|
25
|
+
<Line
|
|
26
|
+
x1="8"
|
|
27
|
+
y1="3"
|
|
28
|
+
x2="8"
|
|
29
|
+
y2="6.5"
|
|
30
|
+
stroke={color}
|
|
31
|
+
strokeWidth={1.8}
|
|
32
|
+
strokeLinecap="round"
|
|
33
|
+
/>
|
|
34
|
+
<Line
|
|
35
|
+
x1="16"
|
|
36
|
+
y1="3"
|
|
37
|
+
x2="16"
|
|
38
|
+
y2="6.5"
|
|
39
|
+
stroke={color}
|
|
40
|
+
strokeWidth={1.8}
|
|
41
|
+
strokeLinecap="round"
|
|
42
|
+
/>
|
|
43
|
+
</Svg>
|
|
44
|
+
);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, TouchableOpacity } from 'react-native';
|
|
3
|
+
import { useSelector } from 'react-redux';
|
|
4
|
+
import type { RootState } from '../../roomStore';
|
|
5
|
+
import { useChatSettingState } from '../../hooks/useChatSettingState';
|
|
6
|
+
import { useT } from '../../i18n/useT';
|
|
7
|
+
import { getIconColor } from '../../helpers/getIconColor';
|
|
8
|
+
import { scheduledCallUi } from '../../booking/scheduledCallStore';
|
|
9
|
+
import { ScheduleCallIcon } from './BookingIcons';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* "Schedule a call" next to the call buttons of the room header. Renders
|
|
13
|
+
* nothing unless calls are on and calls are allowed in this kind of room
|
|
14
|
+
* (`videoCalls.allowedRoomTypes`, private and group by default) and `scheduledCalls.enabled`
|
|
15
|
+
* is not false, so a host that does
|
|
16
|
+
* not use calls sees no change.
|
|
17
|
+
*/
|
|
18
|
+
export const ScheduleCallButton: React.FC = () => {
|
|
19
|
+
const t = useT();
|
|
20
|
+
const { config } = useChatSettingState();
|
|
21
|
+
const room = useSelector((state: RootState) => {
|
|
22
|
+
const jid = state.rooms.activeRoomJID;
|
|
23
|
+
return jid ? state.rooms.rooms[jid] : null;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const calls = config?.videoCalls;
|
|
27
|
+
// 1:1 and members-only group rooms by default (the room types a call can run
|
|
28
|
+
// in), narrowed or widened by the host's videoCalls.allowedRoomTypes.
|
|
29
|
+
const allowed = ((calls?.allowedRoomTypes as string[] | undefined) || [
|
|
30
|
+
'private',
|
|
31
|
+
'group',
|
|
32
|
+
]).includes(String(room?.type || ''));
|
|
33
|
+
if (
|
|
34
|
+
calls?.enabled !== true ||
|
|
35
|
+
config?.scheduledCalls?.enabled === false ||
|
|
36
|
+
!room?.jid ||
|
|
37
|
+
!allowed
|
|
38
|
+
) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<TouchableOpacity
|
|
44
|
+
testID="schedule-call-button"
|
|
45
|
+
accessibilityRole="button"
|
|
46
|
+
accessibilityLabel={t('booking.scheduleCallLabel')}
|
|
47
|
+
onPress={() => scheduledCallUi.openCreate(room.jid)}
|
|
48
|
+
style={styles.button}
|
|
49
|
+
hitSlop={8}
|
|
50
|
+
>
|
|
51
|
+
<ScheduleCallIcon color={getIconColor(config)} size={22} />
|
|
52
|
+
</TouchableOpacity>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const styles = StyleSheet.create({
|
|
57
|
+
button: {
|
|
58
|
+
width: 36,
|
|
59
|
+
height: 36,
|
|
60
|
+
borderRadius: 18,
|
|
61
|
+
alignItems: 'center',
|
|
62
|
+
justifyContent: 'center',
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
export default ScheduleCallButton;
|