@ethora/chat-component-rn 26.7.10 → 26.8.1
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 +0 -96
- package/README.md +10 -43
- package/lib/commonjs/assets/icons.js +2 -7
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/AuthForms/Login.js +4 -4
- package/lib/commonjs/components/AuthForms/Login.js.map +1 -1
- package/lib/commonjs/components/Header/HeaderRoomList.js +7 -26
- package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +3 -9
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +14 -150
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +38 -34
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/LoginWrapper.js +1 -2
- package/lib/commonjs/components/MainComponents/LoginWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +9 -29
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +1 -5
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +5 -13
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ProfileImagePlaceholder.js +13 -14
- package/lib/commonjs/components/MainComponents/ProfileImagePlaceholder.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +24 -3
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +35 -208
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +98 -317
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageTranslate.js +16 -7
- package/lib/commonjs/components/MessageBubble/MessageTranslate.js.map +1 -1
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +112 -320
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +215 -556
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js +9 -7
- package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +27 -69
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +1 -2
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/Modal.js +0 -8
- package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js +1 -2
- package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +109 -205
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/UpdNewChatModal.js +0 -8
- package/lib/commonjs/components/Modals/NewChatModal/UpdNewChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +2 -4
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js +21 -7
- package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +244 -507
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +46 -74
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/Modals/styledModalComponents.js +2 -9
- package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +39 -23
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +3 -22
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +3 -17
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +3 -17
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js +3 -6
- package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/commonjs/components/styled/AudioMessage.js +1 -2
- package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/DateLabel.js +10 -3
- package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
- package/lib/commonjs/components/styled/MessageImage.js +9 -37
- package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
- package/lib/commonjs/components/styled/NewMessageLabel.js +3 -1
- package/lib/commonjs/components/styled/NewMessageLabel.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +17 -86
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/components/styled/StyledComponents.js +3 -9
- package/lib/commonjs/components/styled/StyledComponents.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +4 -11
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/commonjs/components/styled/UnsupportedType.js +4 -14
- package/lib/commonjs/components/styled/UnsupportedType.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +61 -119
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +59 -177
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/createMessageFromXml.js +1 -19
- package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
- package/lib/commonjs/helpers/ensureScopedChatCache.js +2 -2
- package/lib/commonjs/helpers/ensureScopedChatCache.js.map +1 -1
- package/lib/commonjs/helpers/getDataFromXml.js +24 -1
- package/lib/commonjs/helpers/getDataFromXml.js.map +1 -1
- package/lib/commonjs/helpers/historyPreloadScheduler.js +2 -65
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/initXmppRooms.js +8 -14
- package/lib/commonjs/helpers/initXmppRooms.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +22 -51
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/isUnresolvedSenderId.js +6 -1
- package/lib/commonjs/helpers/isUnresolvedSenderId.js.map +1 -1
- package/lib/commonjs/helpers/keyboardLayout.js +2 -12
- package/lib/commonjs/helpers/keyboardLayout.js.map +1 -1
- package/lib/commonjs/helpers/mimeToExtension.js +14 -6
- package/lib/commonjs/helpers/mimeToExtension.js.map +1 -1
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +17 -130
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/commonjs/helpers/resolveLangSource.js +38 -0
- package/lib/commonjs/helpers/resolveLangSource.js.map +1 -0
- package/lib/commonjs/helpers/xmppUsername.js +39 -0
- package/lib/commonjs/helpers/xmppUsername.js.map +1 -0
- package/lib/commonjs/hooks/useChatRoomFocus.js +12 -45
- package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -1
- package/lib/commonjs/hooks/useChatWrapperInit.js +14 -32
- package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/commonjs/hooks/useComposing.js +0 -27
- package/lib/commonjs/hooks/useComposing.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +7 -23
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/usePendingNotification.js +11 -8
- package/lib/commonjs/hooks/usePendingNotification.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +14 -50
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -6
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +133 -121
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/i18n/useT.js +1 -1
- package/lib/commonjs/main.js +0 -44
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +60 -134
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/roomMembers.api.js +1 -1
- package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +9 -9
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/user.api.js +9 -68
- package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
- package/lib/commonjs/networking/apiClient.js +112 -62
- package/lib/commonjs/networking/apiClient.js.map +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js +51 -93
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
- package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +1 -8
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
- package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +8 -124
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js +7 -26
- package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/commonjs/roomStore/index.js +2 -35
- package/lib/commonjs/roomStore/index.js.map +1 -1
- package/lib/commonjs/roomStore/persistence.js +39 -226
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +38 -151
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/services/pushSubscriptionService.js +13 -15
- package/lib/commonjs/services/pushSubscriptionService.js.map +1 -1
- package/lib/commonjs/version.js +3 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/assets/icons.js +1 -6
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/AuthForms/Login.js +4 -4
- package/lib/module/components/AuthForms/Login.js.map +1 -1
- package/lib/module/components/Header/HeaderRoomList.js +7 -26
- package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +3 -9
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +16 -152
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +40 -36
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/LoginWrapper.js +1 -2
- package/lib/module/components/MainComponents/LoginWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +10 -30
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +1 -5
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +5 -13
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/ProfileImagePlaceholder.js +13 -14
- package/lib/module/components/MainComponents/ProfileImagePlaceholder.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +26 -5
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +35 -207
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/Menu/HeaderRoomListMenu.js +101 -319
- package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageTranslate.js +16 -7
- package/lib/module/components/MessageBubble/MessageTranslate.js.map +1 -1
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js +115 -311
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +219 -559
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js +9 -7
- package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +28 -70
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +1 -2
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/Modal/Modal.js +1 -9
- package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/ModalContent.js +1 -2
- package/lib/module/components/Modals/NewChatModal/ModalContent.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js +111 -208
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js +0 -8
- package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js.map +1 -1
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +2 -4
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/EditUserModal.js +23 -9
- package/lib/module/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +248 -509
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +48 -76
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/Modals/styledModalComponents.js +2 -9
- package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +40 -24
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +3 -22
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +3 -17
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +3 -17
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/VideoCalls/VideoCallSession.js +3 -6
- package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
- package/lib/module/components/styled/AudioMessage.js +1 -2
- package/lib/module/components/styled/AudioMessage.js.map +1 -1
- package/lib/module/components/styled/DateLabel.js +10 -3
- package/lib/module/components/styled/DateLabel.js.map +1 -1
- package/lib/module/components/styled/MessageImage.js +9 -37
- package/lib/module/components/styled/MessageImage.js.map +1 -1
- package/lib/module/components/styled/NewMessageLabel.js +3 -1
- package/lib/module/components/styled/NewMessageLabel.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +18 -87
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/components/styled/StyledComponents.js +3 -9
- package/lib/module/components/styled/StyledComponents.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +4 -11
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/module/components/styled/UnsupportedType.js +4 -14
- package/lib/module/components/styled/UnsupportedType.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +62 -120
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/context/xmppProvider.js +60 -177
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/createMessageFromXml.js +1 -19
- package/lib/module/helpers/createMessageFromXml.js.map +1 -1
- package/lib/module/helpers/ensureScopedChatCache.js +2 -2
- package/lib/module/helpers/ensureScopedChatCache.js.map +1 -1
- package/lib/module/helpers/getDataFromXml.js +23 -1
- package/lib/module/helpers/getDataFromXml.js.map +1 -1
- package/lib/module/helpers/historyPreloadScheduler.js +3 -66
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/initXmppRooms.js +8 -14
- package/lib/module/helpers/initXmppRooms.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +22 -52
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/isUnresolvedSenderId.js +6 -1
- package/lib/module/helpers/isUnresolvedSenderId.js.map +1 -1
- package/lib/module/helpers/keyboardLayout.js +2 -12
- package/lib/module/helpers/keyboardLayout.js.map +1 -1
- package/lib/module/helpers/mimeToExtension.js +13 -6
- package/lib/module/helpers/mimeToExtension.js.map +1 -1
- package/lib/module/helpers/resolveInitBeforeLoadUser.js +16 -130
- package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/module/helpers/resolveLangSource.js +32 -0
- package/lib/module/helpers/resolveLangSource.js.map +1 -0
- package/lib/module/helpers/xmppUsername.js +35 -0
- package/lib/module/helpers/xmppUsername.js.map +1 -0
- package/lib/module/hooks/useChatRoomFocus.js +13 -46
- package/lib/module/hooks/useChatRoomFocus.js.map +1 -1
- package/lib/module/hooks/useChatWrapperInit.js +14 -32
- package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/module/hooks/useComposing.js +1 -28
- package/lib/module/hooks/useComposing.js.map +1 -1
- package/lib/module/hooks/useLogout.js +7 -23
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/usePendingNotification.js +11 -8
- package/lib/module/hooks/usePendingNotification.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +16 -52
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js +1 -6
- package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/module/i18n/strings.js +133 -121
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/i18n/useT.js +1 -1
- package/lib/module/main.js +2 -14
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +59 -131
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/roomMembers.api.js +1 -1
- package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +9 -9
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/api-requests/user.api.js +7 -64
- package/lib/module/networking/api-requests/user.api.js.map +1 -1
- package/lib/module/networking/apiClient.js +113 -61
- package/lib/module/networking/apiClient.js.map +1 -1
- package/lib/module/networking/stanzaHandlers.js +52 -94
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
- package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +1 -8
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
- package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +8 -124
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/chatSettingsSlice.js +7 -26
- package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/module/roomStore/index.js +4 -37
- package/lib/module/roomStore/index.js.map +1 -1
- package/lib/module/roomStore/persistence.js +38 -223
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +34 -139
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/services/pushSubscriptionService.js +13 -15
- package/lib/module/services/pushSubscriptionService.js.map +1 -1
- package/lib/module/version.js +3 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/assets/icons.d.ts +0 -16
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
- package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/LoginWrapper.d.ts.map +1 -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/MessageList.d.ts +1 -10
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ProfileImagePlaceholder.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts +0 -7
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts +0 -3
- package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageTranslate.d.ts.map +1 -1
- package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts +0 -9
- package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts +0 -10
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/DeleteChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts +2 -4
- package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts.map +1 -1
- package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts +1 -1
- package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/NewChatModal/UpdNewChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts +1 -6
- package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/EditUserModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts +0 -16
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts +0 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts.map +1 -1
- package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
- package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/MessageImage.d.ts +0 -14
- package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
- package/lib/typescript/components/styled/NewMessageLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts +0 -8
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/getDataFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/initXmppRooms.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/isUnresolvedSenderId.d.ts.map +1 -1
- package/lib/typescript/helpers/keyboardLayout.d.ts +1 -5
- package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -1
- package/lib/typescript/helpers/mimeToExtension.d.ts +15 -0
- package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -1
- package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
- package/lib/typescript/helpers/resolveLangSource.d.ts +30 -0
- package/lib/typescript/helpers/resolveLangSource.d.ts.map +1 -0
- package/lib/typescript/helpers/xmppUsername.d.ts +13 -0
- package/lib/typescript/helpers/xmppUsername.d.ts.map +1 -0
- package/lib/typescript/hooks/useChatRoomFocus.d.ts +1 -4
- package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -1
- package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
- package/lib/typescript/hooks/useComposing.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/usePendingNotification.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts +0 -1
- package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts.map +1 -1
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/i18n/useT.d.ts +1 -1
- package/lib/typescript/main.d.ts +2 -9
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +1 -3
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/user.api.d.ts +0 -27
- package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
- package/lib/typescript/networking/apiClient.d.ts +6 -12
- package/lib/typescript/networking/apiClient.d.ts.map +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts +2 -10
- package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/subscribeToRoomMessages.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +0 -14
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts +0 -16
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
- package/lib/typescript/roomStore/index.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistence.d.ts +1 -18
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +3 -43
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/services/pushSubscriptionService.d.ts +1 -1
- package/lib/typescript/services/pushSubscriptionService.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +5 -50
- 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 +29 -41
- package/src/assets/icons.tsx +9 -48
- package/src/components/AuthForms/Login.tsx +3 -3
- package/src/components/Header/HeaderRoomList.tsx +6 -24
- package/src/components/MainComponents/ChatHeader.tsx +3 -9
- package/src/components/MainComponents/ChatRoom.tsx +15 -161
- package/src/components/MainComponents/ChatWrapper.tsx +53 -36
- package/src/components/MainComponents/LoginWrapper.tsx +0 -1
- package/src/components/MainComponents/MediaMessage.tsx +8 -26
- package/src/components/MainComponents/MessageContainer.tsx +1 -5
- package/src/components/MainComponents/MessageList.tsx +4 -23
- package/src/components/MainComponents/ProfileImagePlaceholder.tsx +14 -21
- package/src/components/MainComponents/ReduxWrapper.tsx +18 -1
- package/src/components/MainComponents/RoomList.tsx +39 -236
- package/src/components/Menu/HeaderRoomListMenu.tsx +75 -328
- package/src/components/MessageBubble/MessageTranslate.tsx +17 -12
- package/src/components/Modals/AttachSheet/AttachSheet.tsx +99 -331
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +293 -611
- package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +9 -7
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +38 -79
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +1 -2
- package/src/components/Modals/Modal/Modal.tsx +0 -7
- package/src/components/Modals/NewChatModal/ModalContent.tsx +3 -6
- package/src/components/Modals/NewChatModal/NewChatModal.tsx +126 -223
- package/src/components/Modals/NewChatModal/UpdNewChatModal.tsx +1 -12
- package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +4 -14
- package/src/components/Modals/UserProfileModal/EditUserModal.tsx +25 -9
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +307 -617
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +58 -75
- package/src/components/Modals/styledModalComponents.tsx +2 -9
- package/src/components/RoomComponents/ChatRoomItem.tsx +50 -21
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +4 -28
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +3 -18
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +3 -18
- package/src/components/VideoCalls/VideoCallSession.tsx +3 -8
- package/src/components/styled/AudioMessage.tsx +1 -2
- package/src/components/styled/DateLabel.tsx +10 -3
- package/src/components/styled/MessageImage.tsx +7 -53
- package/src/components/styled/NewMessageLabel.tsx +3 -1
- package/src/components/styled/SendInput.tsx +18 -91
- package/src/components/styled/StyledComponents.ts +3 -9
- package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +4 -11
- package/src/components/styled/UnsupportedType.tsx +4 -14
- package/src/components/styled/VideoMessage.tsx +54 -131
- package/src/context/xmppProvider.tsx +57 -209
- package/src/helpers/createMessageFromXml.ts +1 -20
- package/src/helpers/ensureScopedChatCache.ts +2 -2
- package/src/helpers/getDataFromXml.ts +25 -1
- package/src/helpers/historyPreloadScheduler.ts +3 -80
- package/src/helpers/initXmppRooms.tsx +10 -14
- package/src/helpers/insertMessageWithDelimiter.ts +32 -55
- package/src/helpers/isUnresolvedSenderId.ts +9 -1
- package/src/helpers/keyboardLayout.ts +2 -23
- package/src/helpers/mimeToExtension.ts +22 -6
- package/src/helpers/resolveInitBeforeLoadUser.ts +18 -125
- package/src/helpers/resolveLangSource.ts +40 -0
- package/src/helpers/xmppUsername.ts +38 -0
- package/src/hooks/useChatRoomFocus.ts +9 -49
- package/src/hooks/useChatWrapperInit.ts +16 -32
- package/src/hooks/useComposing.tsx +1 -37
- package/src/hooks/useLogout.tsx +9 -29
- package/src/hooks/usePendingNotification.ts +11 -5
- package/src/hooks/useSendMessage.tsx +15 -60
- package/src/hooks/useUnreadMessagesCounter.ts +0 -11
- package/src/i18n/strings.ts +133 -121
- package/src/i18n/useT.ts +1 -1
- package/src/main.ts +2 -26
- package/src/networking/api-requests/auth.api.ts +48 -156
- package/src/networking/api-requests/roomMembers.api.ts +1 -1
- package/src/networking/api-requests/rooms.api.ts +9 -9
- package/src/networking/api-requests/user.api.ts +7 -79
- package/src/networking/apiClient.ts +123 -68
- package/src/networking/stanzaHandlers.ts +51 -92
- package/src/networking/xmpp/flushLastViewedToPrivateStore.ts +10 -71
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +1 -6
- package/src/networking/xmpp/subscribeToRoomMessages.xmpp.ts +1 -12
- package/src/networking/xmppClient.ts +9 -141
- package/src/roomStore/chatSettingsSlice.ts +10 -34
- package/src/roomStore/index.ts +4 -40
- package/src/roomStore/persistence.ts +40 -234
- package/src/roomStore/roomsSlice.ts +29 -161
- package/src/services/pushSubscriptionService.ts +13 -18
- package/src/types/types.ts +5 -72
- package/src/version.ts +3 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +0 -226
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js +0 -556
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js +0 -210
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
- package/lib/commonjs/helpers/getChatBackground.js +0 -23
- package/lib/commonjs/helpers/getChatBackground.js.map +0 -1
- package/lib/commonjs/helpers/getDisplayFileName.js +0 -79
- package/lib/commonjs/helpers/getDisplayFileName.js.map +0 -1
- package/lib/commonjs/helpers/getServerReadTimestamp.js +0 -188
- package/lib/commonjs/helpers/getServerReadTimestamp.js.map +0 -1
- package/lib/commonjs/helpers/isOwnMessage.js +0 -75
- package/lib/commonjs/helpers/isOwnMessage.js.map +0 -1
- package/lib/commonjs/helpers/mediaLibraryRuntime.js +0 -31
- package/lib/commonjs/helpers/mediaLibraryRuntime.js.map +0 -1
- package/lib/commonjs/helpers/msgSortableMs.js +0 -37
- package/lib/commonjs/helpers/msgSortableMs.js.map +0 -1
- package/lib/commonjs/helpers/persistCrypto.js +0 -122
- package/lib/commonjs/helpers/persistCrypto.js.map +0 -1
- package/lib/commonjs/helpers/pickImageAsset.js +0 -68
- package/lib/commonjs/helpers/pickImageAsset.js.map +0 -1
- package/lib/commonjs/helpers/pushPayload.js +0 -71
- package/lib/commonjs/helpers/pushPayload.js.map +0 -1
- package/lib/commonjs/helpers/secureFileUrl.js +0 -101
- package/lib/commonjs/helpers/secureFileUrl.js.map +0 -1
- package/lib/commonjs/helpers/secureKeyValue.js +0 -83
- package/lib/commonjs/helpers/secureKeyValue.js.map +0 -1
- package/lib/commonjs/helpers/secureStoreRuntime.js +0 -59
- package/lib/commonjs/helpers/secureStoreRuntime.js.map +0 -1
- package/lib/commonjs/helpers/secureUserStorage.js +0 -75
- package/lib/commonjs/helpers/secureUserStorage.js.map +0 -1
- package/lib/commonjs/helpers/shallowEqual.js +0 -36
- package/lib/commonjs/helpers/shallowEqual.js.map +0 -1
- package/lib/commonjs/helpers/sheetGestures.js +0 -32
- package/lib/commonjs/helpers/sheetGestures.js.map +0 -1
- package/lib/commonjs/hooks/useFileToken.js +0 -10
- package/lib/commonjs/hooks/useFileToken.js.map +0 -1
- package/lib/commonjs/networking/authRefresh.js +0 -332
- package/lib/commonjs/networking/authRefresh.js.map +0 -1
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +0 -223
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
- package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js +0 -548
- package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
- package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js +0 -205
- package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
- package/lib/module/helpers/getChatBackground.js +0 -18
- package/lib/module/helpers/getChatBackground.js.map +0 -1
- package/lib/module/helpers/getDisplayFileName.js +0 -73
- package/lib/module/helpers/getDisplayFileName.js.map +0 -1
- package/lib/module/helpers/getServerReadTimestamp.js +0 -181
- package/lib/module/helpers/getServerReadTimestamp.js.map +0 -1
- package/lib/module/helpers/isOwnMessage.js +0 -70
- package/lib/module/helpers/isOwnMessage.js.map +0 -1
- package/lib/module/helpers/mediaLibraryRuntime.js +0 -25
- package/lib/module/helpers/mediaLibraryRuntime.js.map +0 -1
- package/lib/module/helpers/msgSortableMs.js +0 -32
- package/lib/module/helpers/msgSortableMs.js.map +0 -1
- package/lib/module/helpers/persistCrypto.js +0 -115
- package/lib/module/helpers/persistCrypto.js.map +0 -1
- package/lib/module/helpers/pickImageAsset.js +0 -63
- package/lib/module/helpers/pickImageAsset.js.map +0 -1
- package/lib/module/helpers/pushPayload.js +0 -63
- package/lib/module/helpers/pushPayload.js.map +0 -1
- package/lib/module/helpers/secureFileUrl.js +0 -91
- package/lib/module/helpers/secureFileUrl.js.map +0 -1
- package/lib/module/helpers/secureKeyValue.js +0 -75
- package/lib/module/helpers/secureKeyValue.js.map +0 -1
- package/lib/module/helpers/secureStoreRuntime.js +0 -52
- package/lib/module/helpers/secureStoreRuntime.js.map +0 -1
- package/lib/module/helpers/secureUserStorage.js +0 -72
- package/lib/module/helpers/secureUserStorage.js.map +0 -1
- package/lib/module/helpers/shallowEqual.js +0 -31
- package/lib/module/helpers/shallowEqual.js.map +0 -1
- package/lib/module/helpers/sheetGestures.js +0 -26
- package/lib/module/helpers/sheetGestures.js.map +0 -1
- package/lib/module/hooks/useFileToken.js +0 -5
- package/lib/module/hooks/useFileToken.js.map +0 -1
- package/lib/module/networking/authRefresh.js +0 -321
- package/lib/module/networking/authRefresh.js.map +0 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts +0 -9
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +0 -1
- package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts +0 -75
- package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts.map +0 -1
- package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts +0 -25
- package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts.map +0 -1
- package/lib/typescript/helpers/getChatBackground.d.ts +0 -15
- package/lib/typescript/helpers/getChatBackground.d.ts.map +0 -1
- package/lib/typescript/helpers/getDisplayFileName.d.ts +0 -49
- package/lib/typescript/helpers/getDisplayFileName.d.ts.map +0 -1
- package/lib/typescript/helpers/getServerReadTimestamp.d.ts +0 -108
- package/lib/typescript/helpers/getServerReadTimestamp.d.ts.map +0 -1
- package/lib/typescript/helpers/isOwnMessage.d.ts +0 -36
- package/lib/typescript/helpers/isOwnMessage.d.ts.map +0 -1
- package/lib/typescript/helpers/mediaLibraryRuntime.d.ts +0 -3
- package/lib/typescript/helpers/mediaLibraryRuntime.d.ts.map +0 -1
- package/lib/typescript/helpers/msgSortableMs.d.ts +0 -2
- package/lib/typescript/helpers/msgSortableMs.d.ts.map +0 -1
- package/lib/typescript/helpers/persistCrypto.d.ts +0 -13
- package/lib/typescript/helpers/persistCrypto.d.ts.map +0 -1
- package/lib/typescript/helpers/pickImageAsset.d.ts +0 -27
- package/lib/typescript/helpers/pickImageAsset.d.ts.map +0 -1
- package/lib/typescript/helpers/pushPayload.d.ts +0 -7
- package/lib/typescript/helpers/pushPayload.d.ts.map +0 -1
- package/lib/typescript/helpers/secureFileUrl.d.ts +0 -7
- package/lib/typescript/helpers/secureFileUrl.d.ts.map +0 -1
- package/lib/typescript/helpers/secureKeyValue.d.ts +0 -13
- package/lib/typescript/helpers/secureKeyValue.d.ts.map +0 -1
- package/lib/typescript/helpers/secureStoreRuntime.d.ts +0 -29
- package/lib/typescript/helpers/secureStoreRuntime.d.ts.map +0 -1
- package/lib/typescript/helpers/secureUserStorage.d.ts +0 -23
- package/lib/typescript/helpers/secureUserStorage.d.ts.map +0 -1
- package/lib/typescript/helpers/shallowEqual.d.ts +0 -11
- package/lib/typescript/helpers/shallowEqual.d.ts.map +0 -1
- package/lib/typescript/helpers/sheetGestures.d.ts +0 -20
- package/lib/typescript/helpers/sheetGestures.d.ts.map +0 -1
- package/lib/typescript/hooks/useFileToken.d.ts +0 -2
- package/lib/typescript/hooks/useFileToken.d.ts.map +0 -1
- package/lib/typescript/networking/authRefresh.d.ts +0 -95
- package/lib/typescript/networking/authRefresh.d.ts.map +0 -1
- package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +0 -244
- package/src/components/Modals/ProfileHeader/ProfileHeader.tsx +0 -615
- package/src/components/Modals/ProfileHeader/ProfileMenu.tsx +0 -217
- package/src/helpers/getChatBackground.ts +0 -18
- package/src/helpers/getDisplayFileName.ts +0 -87
- package/src/helpers/getServerReadTimestamp.ts +0 -197
- package/src/helpers/isOwnMessage.ts +0 -90
- package/src/helpers/mediaLibraryRuntime.ts +0 -25
- package/src/helpers/msgSortableMs.ts +0 -25
- package/src/helpers/persistCrypto.ts +0 -127
- package/src/helpers/pickImageAsset.ts +0 -68
- package/src/helpers/pushPayload.ts +0 -62
- package/src/helpers/secureFileUrl.ts +0 -103
- package/src/helpers/secureKeyValue.ts +0 -80
- package/src/helpers/secureStoreRuntime.ts +0 -62
- package/src/helpers/secureUserStorage.ts +0 -80
- package/src/helpers/shallowEqual.ts +0 -33
- package/src/helpers/sheetGestures.ts +0 -25
- package/src/hooks/useFileToken.ts +0 -7
- package/src/networking/authRefresh.ts +0 -451
|
@@ -14,7 +14,7 @@ import { VideoCallOverlay } from '../components/VideoCalls/VideoCallOverlay';
|
|
|
14
14
|
import XmppClient, {
|
|
15
15
|
XmppCredentialsProvider,
|
|
16
16
|
} from '../networking/xmppClient';
|
|
17
|
-
import {
|
|
17
|
+
import { refreshTokens } from '../roomStore/chatSettingsSlice';
|
|
18
18
|
import {
|
|
19
19
|
IConfig,
|
|
20
20
|
ProviderBootstrapStatus,
|
|
@@ -37,7 +37,6 @@ import {
|
|
|
37
37
|
import { ensureScopedChatCache } from '../helpers/ensureScopedChatCache';
|
|
38
38
|
import { getRooms as prefetchRoomsViaRest } from '../networking/api-requests/rooms.api';
|
|
39
39
|
import { allRoomPresences } from '../networking/xmpp/allRoomPresences.xmpp';
|
|
40
|
-
import { pushSubscriptionService } from '../services/pushSubscriptionService';
|
|
41
40
|
import { store } from '../roomStore';
|
|
42
41
|
import { logout, setStoreClient, setConfig } from '../roomStore/chatSettingsSlice';
|
|
43
42
|
import {
|
|
@@ -46,15 +45,12 @@ import {
|
|
|
46
45
|
clearVisibleRoom,
|
|
47
46
|
setLastViewedTimestamp,
|
|
48
47
|
deleteRoomMessage,
|
|
48
|
+
msgSortableMs,
|
|
49
49
|
setUnreadSyncing,
|
|
50
50
|
} from '../roomStore/roomsSlice';
|
|
51
|
-
import {
|
|
52
|
-
getFlushBoundaryTs,
|
|
53
|
-
getReadMarkerTimestamp,
|
|
54
|
-
} from '../helpers/getServerReadTimestamp';
|
|
55
51
|
import { runHistoryPreloadScheduler } from '../helpers/historyPreloadScheduler';
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
52
|
+
import { asyncLocalStorage } from '../hooks/useLocalStorage';
|
|
53
|
+
import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
|
|
58
54
|
import { clearPersistedState } from '../roomStore/persistence';
|
|
59
55
|
import { pushLog as devPushLog } from '../utils/devLogger';
|
|
60
56
|
|
|
@@ -87,16 +83,6 @@ interface XmppProviderProps {
|
|
|
87
83
|
|
|
88
84
|
const LOGOUT_EVENT = 'ethora-xmpp-logout';
|
|
89
85
|
|
|
90
|
-
const subscribeAllRoomsForPush = (client: any, reason: string) => {
|
|
91
|
-
const rooms = Object.keys(store.getState().rooms.rooms || {});
|
|
92
|
-
if (!client || !rooms.length) {return;}
|
|
93
|
-
const nick = client.jid?.getLocal();
|
|
94
|
-
pushSubscriptionService
|
|
95
|
-
.subscribeToRooms(client, rooms, nick)
|
|
96
|
-
.then(() => devPushLog('xmpp', `${reason}: mucsub ok for ${rooms.length} rooms`))
|
|
97
|
-
.catch((e) => devPushLog('warn', `${reason}: mucsub subscribe failed`, e));
|
|
98
|
-
};
|
|
99
|
-
|
|
100
86
|
export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, isVisible }) => {
|
|
101
87
|
const [client, setClient] = useState<XmppClient | null>(null);
|
|
102
88
|
const [providerBootstrapStatus, setProviderBootstrapStatus] =
|
|
@@ -121,25 +107,23 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
121
107
|
// the XmppClient at least doesn't crash on `undefined.password`.
|
|
122
108
|
const credentialsProvider = useMemo<XmppCredentialsProvider>(() => {
|
|
123
109
|
return async () => {
|
|
124
|
-
// 1.
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
password: rotated.xmppPassword,
|
|
142
|
-
};
|
|
110
|
+
// 1. Consumer-supplied REST refresh (when wired). This runs
|
|
111
|
+
// before the SDK's own refresh chain so non-Ethora backends
|
|
112
|
+
// can keep auth state in sync with their own token endpoint.
|
|
113
|
+
const customRefresh = config?.refreshTokens?.refreshFunction;
|
|
114
|
+
if (customRefresh) {
|
|
115
|
+
try {
|
|
116
|
+
const result = await customRefresh();
|
|
117
|
+
if (result?.accessToken) {
|
|
118
|
+
store.dispatch(
|
|
119
|
+
refreshTokens({
|
|
120
|
+
token: result.accessToken,
|
|
121
|
+
refreshToken: result.refreshToken || '',
|
|
122
|
+
})
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
} catch (err) {
|
|
126
|
+
devPushLog('warn', 'XMPP creds refresh: customRefresh failed', err);
|
|
143
127
|
}
|
|
144
128
|
}
|
|
145
129
|
|
|
@@ -179,7 +163,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
179
163
|
}, [
|
|
180
164
|
config?.jwtLogin?.enabled,
|
|
181
165
|
config?.jwtLogin?.token,
|
|
182
|
-
config?.refreshTokens?.
|
|
166
|
+
config?.refreshTokens?.refreshFunction,
|
|
183
167
|
config?.userLogin?.enabled,
|
|
184
168
|
config?.customLogin?.enabled,
|
|
185
169
|
config?.initBeforeLoadAuth?.myEndpoint,
|
|
@@ -243,11 +227,9 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
243
227
|
created.setOnOnline(() => {
|
|
244
228
|
const underlying = (created as any).client;
|
|
245
229
|
if (!underlying) {return;}
|
|
246
|
-
allRoomPresences(underlying)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
)
|
|
250
|
-
.finally(() => subscribeAllRoomsForPush(underlying, 'reconnect'));
|
|
230
|
+
allRoomPresences(underlying).catch((e) =>
|
|
231
|
+
devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e)
|
|
232
|
+
);
|
|
251
233
|
// Also refresh the private store so unread / lastViewed markers
|
|
252
234
|
// are accurate after a long reconnect — the MUC re-join above only
|
|
253
235
|
// restores delivery, not unread state. Idempotent on first connect.
|
|
@@ -256,19 +238,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
256
238
|
.catch((e: unknown) =>
|
|
257
239
|
devPushLog('warn', 'reconnect: privateStore refresh failed', e)
|
|
258
240
|
);
|
|
259
|
-
// Pull whatever landed in each room's archive while the stream was
|
|
260
|
-
// down. MUC presence re-join above only restores delivery for
|
|
261
|
-
// messages sent AFTER this reconnect — anything sent during the
|
|
262
|
-
// offline window has no live stanza to catch, and previously only
|
|
263
|
-
// came back on a full app restart (fresh useChatWrapperInit mount
|
|
264
|
-
// re-running its own one-shot boot sync). Safe on the very first
|
|
265
|
-
// connect too: rooms have no `lastMessageTimestamp` yet at that
|
|
266
|
-
// point, so this is a no-op until the bootstrap's own history load
|
|
267
|
-
// populates it. Customer-reported #32.
|
|
268
|
-
const rooms = store.getState().rooms?.rooms || {};
|
|
269
|
-
updateMessagesTillLast(rooms, created).catch((e: unknown) =>
|
|
270
|
-
devPushLog('warn', 'reconnect: offline catch-up sync failed', e)
|
|
271
|
-
);
|
|
272
241
|
});
|
|
273
242
|
|
|
274
243
|
setClient(created);
|
|
@@ -353,7 +322,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
353
322
|
devPushLog('rn', 'initBeforeLoad: clearStoreBeforeInit');
|
|
354
323
|
store.dispatch(setLogoutState());
|
|
355
324
|
store.dispatch(logout());
|
|
356
|
-
await
|
|
325
|
+
await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove().catch(() => undefined);
|
|
357
326
|
}
|
|
358
327
|
|
|
359
328
|
await ensureScopedChatCache(config);
|
|
@@ -384,29 +353,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
384
353
|
store.dispatch(setConfig(config));
|
|
385
354
|
}
|
|
386
355
|
|
|
387
|
-
// Rotate BEFORE the first XMPP connect. On the rotating backend
|
|
388
|
-
// the xmpp password is a short-lived JWT that only the newest
|
|
389
|
-
// rotation knows, and each rotation invalidates its predecessors
|
|
390
|
-
// — so a snapshot's password (a host's cached `userLogin.user`,
|
|
391
|
-
// a persisted session) is usually already dead at boot. Without
|
|
392
|
-
// this, the first SASL attempt fails `not-authorized`, all three
|
|
393
|
-
// bootstrap retries re-present the same dead password, and the
|
|
394
|
-
// user dead-ends on the Connection error modal even though one
|
|
395
|
-
// rotation away a perfectly good session existed. The rotation
|
|
396
|
-
// also lands the fileToken pre-render, so secure media never
|
|
397
|
-
// paints blank first. Quiet + deduped; when it can't rotate
|
|
398
|
-
// (no refresh material, non-rotating backend) we just connect
|
|
399
|
-
// with what the snapshot has, exactly as before.
|
|
400
|
-
// jwtLogin is skipped: /users/client just minted fresh creds.
|
|
401
|
-
let connectPassword = resolved.xmppPassword;
|
|
402
|
-
if (config?.refreshTokens?.enabled && !config?.jwtLogin?.enabled) {
|
|
403
|
-
const rotated = await refreshAuthTokensQuietly({ force: true });
|
|
404
|
-
if (cancelled) {return;}
|
|
405
|
-
if (rotated?.xmppPassword) {
|
|
406
|
-
connectPassword = rotated.xmppPassword;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
356
|
// Kick off REST /chats/my; allRoomPresences below needs the
|
|
411
357
|
// room list to be in redux, otherwise it joins 0 MUCs and the
|
|
412
358
|
// user receives zero realtime messages until they manually tap
|
|
@@ -416,7 +362,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
416
362
|
|
|
417
363
|
const c = await initializeClient(
|
|
418
364
|
resolved.xmppUsername!,
|
|
419
|
-
|
|
365
|
+
resolved.xmppPassword,
|
|
420
366
|
config?.xmppSettings
|
|
421
367
|
);
|
|
422
368
|
if (cancelled) {return;}
|
|
@@ -452,7 +398,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
452
398
|
} catch (e) {
|
|
453
399
|
devPushLog('warn', 'initBeforeLoad: allRoomPresences failed', e);
|
|
454
400
|
}
|
|
455
|
-
subscribeAllRoomsForPush((c as any).client, 'initBeforeLoad');
|
|
456
401
|
|
|
457
402
|
store.dispatch(setStoreClient(c));
|
|
458
403
|
completedBootstrapKeyRef.current = key;
|
|
@@ -597,14 +542,9 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
597
542
|
// be re-marked visible on return. Lives in the effect closure (one per
|
|
598
543
|
// client) — persists across the listener's many invocations.
|
|
599
544
|
let visibleBeforeBackground: string | null = null;
|
|
600
|
-
const suspendInBackground = !config?.xmppSettings?.keepAliveInBackground;
|
|
601
545
|
const sub = AppState.addEventListener('change', (next) => {
|
|
602
546
|
const c = client;
|
|
603
547
|
if (next === 'active') {
|
|
604
|
-
if (c?.isSuspended) {
|
|
605
|
-
devPushLog('rn', 'AppState active: resuming suspended XMPP client');
|
|
606
|
-
c.resume();
|
|
607
|
-
}
|
|
608
548
|
// Returned to foreground. If the socket died while backgrounded
|
|
609
549
|
// (iOS suspends the WebSocket; long background kills it), the
|
|
610
550
|
// status may still read 'online' until xmpp.js notices the dead
|
|
@@ -632,52 +572,22 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
632
572
|
}
|
|
633
573
|
// Going to background/inactive (sleep / app switcher / tray):
|
|
634
574
|
if (!c) {return;}
|
|
635
|
-
if (next === 'background' && suspendInBackground) {
|
|
636
|
-
c.suspend().catch(() => undefined);
|
|
637
|
-
}
|
|
638
575
|
const state = store.getState();
|
|
639
576
|
const rooms = state.rooms?.rooms;
|
|
640
577
|
const visibleRoomJID = state.rooms?.visibleRoomJID || null;
|
|
641
578
|
// Mark the open room "not visible" while backgrounded so messages
|
|
642
579
|
// that arrive (or MAM-replay on reconnect) count as unread instead
|
|
643
580
|
// of being silently treated as read — the "mounted == visible ==
|
|
644
|
-
// read" gap. Stamp lastViewed
|
|
645
|
-
//
|
|
646
|
-
//
|
|
647
|
-
//
|
|
648
|
-
//
|
|
649
|
-
// clear visibility and flush that marker to the server private
|
|
650
|
-
// store. Restored on the next 'active' transition above. Handled
|
|
651
|
-
// here in the provider so consumers using the component as a
|
|
652
|
-
// package get correct unread without reaching into the chat store
|
|
653
|
-
// themselves.
|
|
654
|
-
//
|
|
655
|
-
// The read boundary (rooms.readBoundaries) is deliberately left
|
|
656
|
-
// untouched here - MessageList normally stays mounted through a
|
|
657
|
-
// simple background/foreground cycle, so its own scroll-tracking
|
|
658
|
-
// ref (the only thing that could re-derive this value) is still
|
|
659
|
-
// intact, and clearing the redux copy would desync the two. It's
|
|
660
|
-
// only USED here for the one-shot stamp+flush, matching customer
|
|
661
|
-
// #42: leaving (or backgrounding) a room while scrolled up must not
|
|
662
|
-
// mark messages the user never reached as read.
|
|
581
|
+
// read" gap. Stamp lastViewed=now as the read baseline, clear
|
|
582
|
+
// visibility, then flush that marker to the server private store.
|
|
583
|
+
// Restored on the next 'active' transition above. Handled here in
|
|
584
|
+
// the provider so consumers using the component as a package get
|
|
585
|
+
// correct unread without reaching into the chat store themselves.
|
|
663
586
|
visibleBeforeBackground = visibleRoomJID;
|
|
664
|
-
let boundaryTs: number | null = null;
|
|
665
587
|
if (visibleRoomJID) {
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
rooms?.[visibleRoomJID],
|
|
669
|
-
state.roomHeapSlice,
|
|
670
|
-
boundaryTs
|
|
588
|
+
store.dispatch(
|
|
589
|
+
setLastViewedTimestamp({ chatJID: visibleRoomJID, timestamp: Date.now() })
|
|
671
590
|
);
|
|
672
|
-
// Nothing to anchor to yet (no known messages, no prior marker)
|
|
673
|
-
// - skip the local stamp rather than fall back to the device
|
|
674
|
-
// clock. The flush below still runs so the visibility clear
|
|
675
|
-
// isn't blocked on this.
|
|
676
|
-
if (readTs > 0) {
|
|
677
|
-
store.dispatch(
|
|
678
|
-
setLastViewedTimestamp({ chatJID: visibleRoomJID, timestamp: readTs })
|
|
679
|
-
);
|
|
680
|
-
}
|
|
681
591
|
// Drop the "New messages" divider for the room we're leaving so it
|
|
682
592
|
// doesn't linger when the user comes back (mirrors ChatRoom's
|
|
683
593
|
// unmount cleanup, which never runs while the pane stays mounted).
|
|
@@ -687,24 +597,13 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
687
597
|
store.dispatch(clearVisibleRoom());
|
|
688
598
|
}
|
|
689
599
|
// Fire-and-forget — we're going to the background and don't
|
|
690
|
-
// care about the resolution path.
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
c.flushLastViewedToPrivateStoreStanza(rooms, {
|
|
695
|
-
visibleRoomJID,
|
|
696
|
-
// Clamped through the same helper as the local stamp above.
|
|
697
|
-
visibleRoomTs: visibleRoomJID
|
|
698
|
-
? getFlushBoundaryTs(
|
|
699
|
-
rooms?.[visibleRoomJID],
|
|
700
|
-
state.roomHeapSlice,
|
|
701
|
-
boundaryTs
|
|
702
|
-
)
|
|
703
|
-
: undefined,
|
|
704
|
-
}).catch(() => {});
|
|
600
|
+
// care about the resolution path.
|
|
601
|
+
c.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID }).catch(
|
|
602
|
+
() => {}
|
|
603
|
+
);
|
|
705
604
|
});
|
|
706
605
|
return () => sub.remove();
|
|
707
|
-
}, [client
|
|
606
|
+
}, [client]);
|
|
708
607
|
|
|
709
608
|
// -----------------------------------------------------------
|
|
710
609
|
// Consumer visibility signal (`isVisible` prop). For hosts that keep
|
|
@@ -713,11 +612,11 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
713
612
|
// "shown" from "hidden", so the unread middleware would keep the open
|
|
714
613
|
// room's badge at 0 and messages arriving while you're elsewhere look
|
|
715
614
|
// already-read. When the host passes `isVisible`, mirror the AppState
|
|
716
|
-
// background/foreground handling: hidden → stamp lastViewed
|
|
717
|
-
//
|
|
718
|
-
//
|
|
719
|
-
//
|
|
720
|
-
//
|
|
615
|
+
// background/foreground handling: hidden → stamp lastViewed=now + clear
|
|
616
|
+
// room visibility (so later messages count) + flush; shown → restore
|
|
617
|
+
// visibility for the open room. Doing it here means consumers never
|
|
618
|
+
// touch the chat store themselves. (Undefined = host unmounts on hide,
|
|
619
|
+
// nothing to do.)
|
|
721
620
|
// -----------------------------------------------------------
|
|
722
621
|
const chatWasVisibleRef = useRef(false);
|
|
723
622
|
useEffect(() => {
|
|
@@ -732,30 +631,10 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
732
631
|
store.dispatch(setVisibleRoom({ roomJID: activeRoomJID }));
|
|
733
632
|
}
|
|
734
633
|
} else {
|
|
735
|
-
// The read boundary (rooms.readBoundaries) is USED for the stamp
|
|
736
|
-
// and flush below but deliberately left in place - a host using
|
|
737
|
-
// `isVisible` keeps <Chat> mounted while hidden, so MessageList's
|
|
738
|
-
// own scroll-tracking ref is still intact and the redux copy must
|
|
739
|
-
// stay in sync with it. Only consumed, never Date.now(): a fast
|
|
740
|
-
// device clock would write a future marker that the forward-only
|
|
741
|
-
// private-store merge could then never correct (bug #38). And
|
|
742
|
-
// never "the newest acked message" unconditionally either - that
|
|
743
|
-
// silently marks messages the user scrolled past and never reached
|
|
744
|
-
// as read (bug #42, a regression of #33).
|
|
745
|
-
const boundaryTs = activeRoomJID
|
|
746
|
-
? state.rooms?.readBoundaries?.[activeRoomJID] ?? null
|
|
747
|
-
: null;
|
|
748
634
|
if (wasVisible && activeRoomJID) {
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
state.roomHeapSlice,
|
|
752
|
-
boundaryTs
|
|
635
|
+
store.dispatch(
|
|
636
|
+
setLastViewedTimestamp({ chatJID: activeRoomJID, timestamp: Date.now() })
|
|
753
637
|
);
|
|
754
|
-
if (readTs > 0) {
|
|
755
|
-
store.dispatch(
|
|
756
|
-
setLastViewedTimestamp({ chatJID: activeRoomJID, timestamp: readTs })
|
|
757
|
-
);
|
|
758
|
-
}
|
|
759
638
|
// Drop the "New messages" divider so it's gone when the user
|
|
760
639
|
// returns to the chat (mirrors ChatRoom's unmount cleanup).
|
|
761
640
|
store.dispatch(
|
|
@@ -766,19 +645,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
766
645
|
store.dispatch(clearVisibleRoom());
|
|
767
646
|
if (wasVisible && client?.flushLastViewedToPrivateStoreStanza) {
|
|
768
647
|
client
|
|
769
|
-
.flushLastViewedToPrivateStoreStanza(rooms, {
|
|
770
|
-
visibleRoomJID: activeRoomJID,
|
|
771
|
-
// Carry the same boundary to the SERVER marker - without it
|
|
772
|
-
// the flush defaults to "everything" for the visible room.
|
|
773
|
-
// Clamped exactly like the local stamp above.
|
|
774
|
-
visibleRoomTs: activeRoomJID
|
|
775
|
-
? getFlushBoundaryTs(
|
|
776
|
-
rooms?.[activeRoomJID],
|
|
777
|
-
state.roomHeapSlice,
|
|
778
|
-
boundaryTs
|
|
779
|
-
)
|
|
780
|
-
: undefined,
|
|
781
|
-
})
|
|
648
|
+
.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: activeRoomJID })
|
|
782
649
|
.catch(() => {});
|
|
783
650
|
}
|
|
784
651
|
}
|
|
@@ -799,45 +666,26 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
|
|
|
799
666
|
if (room.messages === lastMessagesRef) {return;}
|
|
800
667
|
lastMessagesRef = room.messages;
|
|
801
668
|
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
// incoming message while scrolled up advanced the marker to
|
|
811
|
-
// "newest" regardless of scroll position, and the later, smaller
|
|
812
|
-
// boundary write on leave was rejected by the forward-only
|
|
813
|
-
// private-store merge, leaving 0 unread even after a restart
|
|
814
|
-
// (customer #42, a regression of #33 reintroduced by #38).
|
|
815
|
-
const boundaryTs = s.rooms?.readBoundaries?.[jid] ?? null;
|
|
816
|
-
const newest = getReadMarkerTimestamp(room, s.roomHeapSlice, boundaryTs);
|
|
817
|
-
if (!newest || newest <= lastStampedMs) {return;}
|
|
669
|
+
let newest = 0;
|
|
670
|
+
const list = room.messages || [];
|
|
671
|
+
for (const m of list) {
|
|
672
|
+
if (!m || m.id === 'delimiter-new') {continue;}
|
|
673
|
+
const ms = msgSortableMs(m);
|
|
674
|
+
if (ms > newest) {newest = ms;}
|
|
675
|
+
}
|
|
676
|
+
if (newest <= lastStampedMs) {return;}
|
|
818
677
|
lastStampedMs = newest;
|
|
819
678
|
|
|
820
679
|
store.dispatch(
|
|
821
|
-
setLastViewedTimestamp({ chatJID: jid, timestamp:
|
|
680
|
+
setLastViewedTimestamp({ chatJID: jid, timestamp: Date.now() })
|
|
822
681
|
);
|
|
823
682
|
|
|
824
683
|
if (flushTimer) {clearTimeout(flushTimer);}
|
|
825
684
|
if (client?.flushLastViewedToPrivateStoreStanza) {
|
|
826
685
|
flushTimer = setTimeout(() => {
|
|
827
|
-
// Re-read fresh state rather than closing over `boundaryTs`:
|
|
828
|
-
// the user may have scrolled back to the bottom (clearing the
|
|
829
|
-
// boundary) in the 2s between the stamp and this flush, and
|
|
830
|
-
// the flush should reflect that.
|
|
831
|
-
const freshState = store.getState();
|
|
832
|
-
const freshBoundaryTs = freshState.rooms?.readBoundaries?.[jid] ?? null;
|
|
833
686
|
client
|
|
834
|
-
.flushLastViewedToPrivateStoreStanza(
|
|
687
|
+
.flushLastViewedToPrivateStoreStanza(store.getState().rooms?.rooms, {
|
|
835
688
|
visibleRoomJID: jid,
|
|
836
|
-
visibleRoomTs: getFlushBoundaryTs(
|
|
837
|
-
freshState.rooms?.rooms?.[jid],
|
|
838
|
-
freshState.roomHeapSlice,
|
|
839
|
-
freshBoundaryTs
|
|
840
|
-
),
|
|
841
689
|
})
|
|
842
690
|
.catch(() => {});
|
|
843
691
|
}, 2000);
|
|
@@ -93,25 +93,6 @@ export const createMessageFromXml = async (
|
|
|
93
93
|
const senderLocal = senderJID.includes('@')
|
|
94
94
|
? senderJID.split('@')[0]
|
|
95
95
|
: senderJID;
|
|
96
|
-
|
|
97
|
-
// Bug #41 root cause: the resource of the MUC `from` (room@conference/
|
|
98
|
-
// occupant-id) is the SAME field getDataFromXml uses to derive
|
|
99
|
-
// `user.id` for live messages and for the wrapped MAM convention
|
|
100
|
-
// (getHistory.xmpp.ts) - it's stamped by the server itself when the
|
|
101
|
-
// sender joined the room, so it's always present and always correct.
|
|
102
|
-
// The positional convention (onMessageHistory's MAM catch-up path)
|
|
103
|
-
// never called getDataFromXml, so it fell back to splitting the
|
|
104
|
-
// sender-supplied `<data senderJID>` attr on '@' instead - usually the
|
|
105
|
-
// same value, but WRONG (picks up the room's own id, not the
|
|
106
|
-
// sender's) whenever senderJID is absent from the stanza, and simply a
|
|
107
|
-
// different derivation than the live path even when it happens to
|
|
108
|
-
// agree. Prefer the resource-of-`from` here too so every path that
|
|
109
|
-
// reaches this function resolves the same sender identity the same
|
|
110
|
-
// way, instead of MAM catch-up rows needing a later correction once
|
|
111
|
-
// the "official" fetch lands.
|
|
112
|
-
const xmppFrom = (merged.xmppFrom || '').toString();
|
|
113
|
-
const fromResource = xmppFrom.includes('/') ? xmppFrom.split('/')[1] : '';
|
|
114
|
-
|
|
115
96
|
const composed = [firstName, lastName].filter(Boolean).join(' ').trim();
|
|
116
97
|
const existingName = String(merged?.user?.name || '').trim();
|
|
117
98
|
const resolvedName =
|
|
@@ -126,7 +107,7 @@ export const createMessageFromXml = async (
|
|
|
126
107
|
...merged,
|
|
127
108
|
user: {
|
|
128
109
|
...(merged.user || {}),
|
|
129
|
-
id: merged?.user?.id ||
|
|
110
|
+
id: merged?.user?.id || senderLocal,
|
|
130
111
|
name: resolvedName,
|
|
131
112
|
firstName: firstName || merged?.user?.firstName,
|
|
132
113
|
lastName: lastName || merged?.user?.lastName,
|
|
@@ -3,7 +3,7 @@ import { store } from '../roomStore';
|
|
|
3
3
|
import { logout } from '../roomStore/chatSettingsSlice';
|
|
4
4
|
import { setLogoutState } from '../roomStore/roomsSlice';
|
|
5
5
|
import { asyncLocalStorage } from '../hooks/useLocalStorage';
|
|
6
|
-
import {
|
|
6
|
+
import { localStorageConstants } from './constants/LOCAL_STORAGE';
|
|
7
7
|
import { clearRoomsRestCache } from '../networking/api-requests/rooms.api';
|
|
8
8
|
import { clearPersistedState } from '../roomStore/persistence';
|
|
9
9
|
import {
|
|
@@ -53,7 +53,7 @@ export async function ensureScopedChatCache(config?: IConfig): Promise<void> {
|
|
|
53
53
|
clearRoomsRestCache();
|
|
54
54
|
store.dispatch(setLogoutState());
|
|
55
55
|
store.dispatch(logout());
|
|
56
|
-
await
|
|
56
|
+
await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove();
|
|
57
57
|
await clearPersistedState();
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { Element } from 'ltx';
|
|
2
2
|
import { Iso639_1Codes, IUser } from '../types/types';
|
|
3
3
|
import { transformArrayToObject } from './transformTranslatations';
|
|
4
|
+
import { normalizeXmppUsername } from './xmppUsername';
|
|
5
|
+
|
|
6
|
+
const getLocalpartFromJid = (jid?: string): string | undefined => {
|
|
7
|
+
const value = String(jid || '').trim();
|
|
8
|
+
if (!value) {return undefined;}
|
|
9
|
+
return value.split('@')[0] || undefined;
|
|
10
|
+
};
|
|
4
11
|
|
|
5
12
|
// Tolerant JSON parse: a malformed `translations` attr must not reject the
|
|
6
13
|
// whole stanza (which would silently drop the message). Mirrors the web
|
|
@@ -64,7 +71,7 @@ export const getDataFromXml = async (stanza: Element): Promise<DataXml | undefin
|
|
|
64
71
|
|
|
65
72
|
const xmppId = fullData?.attrs.id;
|
|
66
73
|
const xmppFrom = fullData?.attrs?.from;
|
|
67
|
-
const [roomJid,
|
|
74
|
+
const [roomJid, userWalletFromResource] = (xmppFrom || '').split('/');
|
|
68
75
|
let id =
|
|
69
76
|
stanza.getChild('result')?.attrs.id ||
|
|
70
77
|
extractTimestamp(stanza?.getChild('stanza-id')?.attrs?.id, stanza);
|
|
@@ -93,6 +100,23 @@ export const getDataFromXml = async (stanza: Element): Promise<DataXml | undefin
|
|
|
93
100
|
const data = fullData?.getChild('data') || stanza?.getChild('data');
|
|
94
101
|
const photoURL = data?.attrs?.photo;
|
|
95
102
|
|
|
103
|
+
// Sender identity, resolved the way the web SDK does it: the occupant
|
|
104
|
+
// RESOURCE of `from` first, then the localpart of `<data senderJID>`.
|
|
105
|
+
//
|
|
106
|
+
// RN only had the first. The translate-tagged send path arrives with no
|
|
107
|
+
// occupant resource and no senderJID either, so `user.id` came out
|
|
108
|
+
// undefined and every downstream fallback landed on the bare room jid's
|
|
109
|
+
// localpart — which for a 1:1 room is `<appId>_<userA>-<appId>_<userB>`.
|
|
110
|
+
// That composite id is what got rendered as the sender's name.
|
|
111
|
+
//
|
|
112
|
+
// normalizeXmppUsername collapses a doubled `<appId>_` prefix so the key
|
|
113
|
+
// matches what usersSet is indexed by.
|
|
114
|
+
const rawUserWallet =
|
|
115
|
+
userWalletFromResource ||
|
|
116
|
+
getLocalpartFromJid(data?.attrs?.senderJID) ||
|
|
117
|
+
undefined;
|
|
118
|
+
const userWallet = normalizeXmppUsername(rawUserWallet) || rawUserWallet;
|
|
119
|
+
|
|
96
120
|
const user = {
|
|
97
121
|
id: userWallet,
|
|
98
122
|
photoURL,
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { AppState } from 'react-native';
|
|
2
2
|
import XmppClient from '../networking/xmppClient';
|
|
3
3
|
import { store } from '../roomStore';
|
|
4
|
-
import {
|
|
5
|
-
applyRoomsPreloadBatch,
|
|
6
|
-
setUnreadSyncing,
|
|
7
|
-
RUNTIME_MESSAGE_LIMIT,
|
|
8
|
-
} from '../roomStore/roomsSlice';
|
|
4
|
+
import { applyRoomsPreloadBatch, setUnreadSyncing } from '../roomStore/roomsSlice';
|
|
9
5
|
import { IMessage, IRoom } from '../types/types';
|
|
10
6
|
|
|
11
7
|
interface HistoryPreloadSchedulerOptions {
|
|
@@ -34,13 +30,6 @@ const DEFAULT_CONCURRENCY = 3;
|
|
|
34
30
|
// `mergeHistoryIntoCache` rarely has to fall back to clear-and-replace.
|
|
35
31
|
const DEFAULT_PAGE_SIZE = 20;
|
|
36
32
|
const DEFAULT_RETRY_LIMIT = 2;
|
|
37
|
-
// When the first page is entirely unread (every fetched message is newer
|
|
38
|
-
// than `lastViewedTimestamp`), the true unread count could be far bigger
|
|
39
|
-
// than `pageSize` — `useUnread()` only ever sees what's been loaded. Page
|
|
40
|
-
// further back, up to this many extra fetches, until we either find the
|
|
41
|
-
// boundary or give up (`unreadCapped` then stays true so callers at least
|
|
42
|
-
// know the count is a floor, not exact). Customer-reported #34.
|
|
43
|
-
const MAX_UNREAD_CATCHUP_PAGES = 8;
|
|
44
33
|
|
|
45
34
|
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
46
35
|
|
|
@@ -237,75 +226,9 @@ export const runHistoryPreloadScheduler = async (
|
|
|
237
226
|
}
|
|
238
227
|
|
|
239
228
|
const nextRoom = store.getState().rooms.rooms[item.jid];
|
|
240
|
-
let combined: IMessage[] = fetchedMessages || [];
|
|
241
|
-
const lastViewed = Number(nextRoom?.lastViewedTimestamp) || 0;
|
|
242
|
-
|
|
243
|
-
// The first page was entirely unread — keep paging older until
|
|
244
|
-
// we find a message at/before `lastViewedTimestamp` (the true
|
|
245
|
-
// boundary) or run out of catch-up budget, so the count isn't
|
|
246
|
-
// silently truncated at `pageSize`.
|
|
247
|
-
if (lastViewed > 0 && computeUnreadCapped(nextRoom, combined, pageSize)) {
|
|
248
|
-
let lastPageLen = combined.length;
|
|
249
|
-
let extraPages = 0;
|
|
250
|
-
while (
|
|
251
|
-
extraPages < MAX_UNREAD_CATCHUP_PAGES &&
|
|
252
|
-
lastPageLen >= pageSize &&
|
|
253
|
-
!signal?.aborted
|
|
254
|
-
) {
|
|
255
|
-
const oldestId = combined.reduce<number | null>((min, m) => {
|
|
256
|
-
const idNum = Number((m as any)?.id);
|
|
257
|
-
if (!Number.isFinite(idNum)) {return min;}
|
|
258
|
-
return min === null || idNum < min ? idNum : min;
|
|
259
|
-
}, null);
|
|
260
|
-
if (oldestId === null) {break;}
|
|
261
|
-
|
|
262
|
-
let older: IMessage[] | undefined;
|
|
263
|
-
try {
|
|
264
|
-
older = await client.getHistoryStanza(
|
|
265
|
-
item.jid,
|
|
266
|
-
pageSize,
|
|
267
|
-
oldestId,
|
|
268
|
-
undefined,
|
|
269
|
-
{
|
|
270
|
-
coalesceRoom: true,
|
|
271
|
-
skipIfPreloaded: !forceReload,
|
|
272
|
-
source: 'background',
|
|
273
|
-
}
|
|
274
|
-
);
|
|
275
|
-
} catch {
|
|
276
|
-
break;
|
|
277
|
-
}
|
|
278
|
-
if (!older || !older.length) {break;}
|
|
279
|
-
|
|
280
|
-
combined = [...older, ...combined];
|
|
281
|
-
lastPageLen = older.length;
|
|
282
|
-
extraPages++;
|
|
283
|
-
|
|
284
|
-
const oldestTs = combined.reduce<number>((minTs, m) => {
|
|
285
|
-
const ts = messageTimestamp(m);
|
|
286
|
-
return ts > 0 ? Math.min(minTs, ts) : minTs;
|
|
287
|
-
}, Number.MAX_SAFE_INTEGER);
|
|
288
|
-
if (oldestTs !== Number.MAX_SAFE_INTEGER && oldestTs <= lastViewed) {
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// `mergeHistoryIntoCache` (roomsSlice) caps whatever we dispatch
|
|
295
|
-
// here to the newest RUNTIME_MESSAGE_LIMIT messages before it
|
|
296
|
-
// ever reaches `unreadMiddleware` — so a catch-up fetch that
|
|
297
|
-
// pulled the true boundary can still have it silently dropped
|
|
298
|
-
// by that cap, leaving a falsely-confident `unreadCapped:false`
|
|
299
|
-
// (bug #34's failure mode again, just one layer downstream).
|
|
300
|
-
// Simulate that cap here so the flag reflects what will
|
|
301
|
-
// actually survive, not just what this fetch retrieved.
|
|
302
|
-
const simulatedStored =
|
|
303
|
-
combined.length > RUNTIME_MESSAGE_LIMIT
|
|
304
|
-
? combined.slice(-RUNTIME_MESSAGE_LIMIT)
|
|
305
|
-
: combined;
|
|
306
229
|
const unreadCapped = computeUnreadCapped(
|
|
307
230
|
nextRoom,
|
|
308
|
-
|
|
231
|
+
fetchedMessages || [],
|
|
309
232
|
pageSize
|
|
310
233
|
);
|
|
311
234
|
|
|
@@ -314,7 +237,7 @@ export const runHistoryPreloadScheduler = async (
|
|
|
314
237
|
rooms: [
|
|
315
238
|
{
|
|
316
239
|
jid: item.jid,
|
|
317
|
-
messages:
|
|
240
|
+
messages: fetchedMessages || [],
|
|
318
241
|
unreadCapped,
|
|
319
242
|
historyPreloadState: 'done',
|
|
320
243
|
},
|