@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
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import { store } from '../roomStore';
|
|
3
3
|
|
|
4
|
-
import { logout } from '../roomStore/chatSettingsSlice';
|
|
4
|
+
import { logout, refreshTokens } from '../roomStore/chatSettingsSlice';
|
|
5
5
|
import { installAxiosCapture } from '../utils/devLogger';
|
|
6
|
-
import {
|
|
7
|
-
refreshAuthTokens,
|
|
8
|
-
isRefreshFatalError,
|
|
9
|
-
RefreshResult,
|
|
10
|
-
} from './authRefresh';
|
|
11
6
|
|
|
12
7
|
// Per product-code-policy: no compiled-in Ethora endpoints or tokens.
|
|
13
8
|
// Consumers must call `setBaseURL(baseUrl, appToken)` (or pass
|
|
@@ -26,21 +21,10 @@ const http = axios.create({
|
|
|
26
21
|
// `http` instance.
|
|
27
22
|
installAxiosCapture(http);
|
|
28
23
|
|
|
29
|
-
const stripApiVersion = (baseUrl: string): string =>
|
|
30
|
-
baseUrl.replace(/\/+$/, '').replace(/\/v\d+$/, '');
|
|
31
|
-
|
|
32
|
-
export const normalizeApiPath = (path?: string): string | undefined => {
|
|
33
|
-
if (!path) {return path;}
|
|
34
|
-
if (/^https?:\/\//i.test(path)) {return path;}
|
|
35
|
-
if (/^\/v\d+\//.test(path)) {return path;}
|
|
36
|
-
return `/v1${path.startsWith('/') ? '' : '/'}${path}`;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
24
|
export function setBaseURL(baseUrl?: string, appToken?: string) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
http.defaults.baseURL = normalized;
|
|
25
|
+
if (baseUrl && baseUrl !== currentBaseURL) {
|
|
26
|
+
currentBaseURL = baseUrl;
|
|
27
|
+
http.defaults.baseURL = baseUrl;
|
|
44
28
|
}
|
|
45
29
|
if (appToken && appToken !== currentAppToken) {
|
|
46
30
|
currentAppToken = appToken;
|
|
@@ -55,78 +39,149 @@ export function getCurrentBaseURL() {
|
|
|
55
39
|
return currentBaseURL;
|
|
56
40
|
}
|
|
57
41
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
42
|
+
export function refresh(): Promise<{
|
|
43
|
+
data: { refreshToken: string; token: string };
|
|
44
|
+
}> {
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
const user = store.getState().chatSettingStore.user;
|
|
47
|
+
try {
|
|
48
|
+
http
|
|
49
|
+
.post(
|
|
50
|
+
'/users/login/refresh',
|
|
51
|
+
{},
|
|
52
|
+
{ headers: { Authorization: user.refreshToken } }
|
|
53
|
+
)
|
|
54
|
+
.then((response) => {
|
|
55
|
+
store.dispatch(
|
|
56
|
+
refreshTokens({
|
|
57
|
+
token: response.data.token,
|
|
58
|
+
refreshToken: response.data.refreshToken,
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
// BUGFIX: previously the `.then` only dispatched and never
|
|
62
|
+
// resolved, so every `await refresh()` callsite hung forever
|
|
63
|
+
// on the happy path. Resolve with the axios response shape so
|
|
64
|
+
// the interceptor can read `tokens.data.token` to retry.
|
|
65
|
+
resolve(response);
|
|
66
|
+
})
|
|
67
|
+
.catch((error) => {
|
|
68
|
+
reject(error);
|
|
69
|
+
});
|
|
70
|
+
} catch (error) {
|
|
71
|
+
// BUGFIX: previously the outer-try catch dispatched logout but
|
|
72
|
+
// never rejected, so a synchronous throw from `http.post` (e.g.
|
|
73
|
+
// a bad URL) would hang the promise. Reject explicitly.
|
|
74
|
+
console.log('errr');
|
|
75
|
+
store.dispatch(logout());
|
|
76
|
+
reject(error);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
69
79
|
}
|
|
70
80
|
|
|
81
|
+
let isRefreshing = false;
|
|
82
|
+
let failedQueue: any[] = [];
|
|
83
|
+
|
|
84
|
+
const addRequestToQueue = (config: any) => {
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
failedQueue.push({ resolve, reject, config });
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const processQueue = (newAccessToken: string) => {
|
|
91
|
+
for (const request of failedQueue) {
|
|
92
|
+
if (newAccessToken) {
|
|
93
|
+
request.config.headers.Authorization = newAccessToken;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
request.resolve(http(request.config));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
failedQueue = [];
|
|
100
|
+
};
|
|
101
|
+
|
|
71
102
|
http.interceptors.response.use(
|
|
72
103
|
(response) => response,
|
|
73
104
|
async (error) => {
|
|
105
|
+
// BUGFIX: the original condition was `if (!enabled)` — inverted, so
|
|
106
|
+
// turning `refreshTokens.enabled: true` actually DISABLED the refresh
|
|
107
|
+
// path on 401. Use the correct sense.
|
|
108
|
+
if (!store.getState().chatSettingStore?.config?.refreshTokens?.enabled) {
|
|
109
|
+
// BUGFIX: previously this branch fell off the end of the async
|
|
110
|
+
// function and returned `undefined`, which axios treats as a
|
|
111
|
+
// resolved-with-undefined response. Callers expecting an error
|
|
112
|
+
// got `undefined` instead, silently swallowing every failure
|
|
113
|
+
// when the refresh path isn't configured. Re-reject so the
|
|
114
|
+
// original error reaches the caller.
|
|
115
|
+
return Promise.reject(error);
|
|
116
|
+
}
|
|
117
|
+
|
|
74
118
|
const originalRequest = error.config;
|
|
75
119
|
const status = error.response?.status;
|
|
76
120
|
|
|
77
121
|
// Refresh paths only fire on 401. Anything else passes through.
|
|
78
|
-
if (!error.response || status !== 401
|
|
122
|
+
if (!error.response || status !== 401) {
|
|
79
123
|
return Promise.reject(error);
|
|
80
124
|
}
|
|
81
125
|
|
|
82
|
-
// Never retry twice, and never touch the auth endpoints themselves —
|
|
83
|
-
// both would recurse. (`_retry` was set but never checked before,
|
|
84
|
-
// so a request could bounce between 401 and replay indefinitely.)
|
|
85
126
|
if (
|
|
86
|
-
|
|
87
|
-
originalRequest.url === '/v1/users/login/refresh' ||
|
|
88
|
-
originalRequest.url === '/v1/users/login'
|
|
127
|
+
store.getState().chatSettingStore?.config?.refreshTokens?.refreshFunction
|
|
89
128
|
) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
129
|
+
// Consumer-supplied refresh function. Call it, dispatch the new
|
|
130
|
+
// tokens, retry the original request.
|
|
131
|
+
try {
|
|
132
|
+
const fn = store.getState().chatSettingStore?.config?.refreshTokens?.refreshFunction;
|
|
133
|
+
if (!fn) return Promise.reject(error);
|
|
134
|
+
const result = await fn();
|
|
135
|
+
const { refreshToken: newRefreshToken, accessToken } = result || { refreshToken: '', accessToken: '' };
|
|
136
|
+
store.dispatch(
|
|
137
|
+
refreshTokens({
|
|
138
|
+
token: accessToken,
|
|
139
|
+
refreshToken: newRefreshToken || '',
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
// BUGFIX: previously this branch returned `undefined` after
|
|
143
|
+
// dispatching, so the original request was never retried and
|
|
144
|
+
// the caller resolved with undefined. Stamp the new token on
|
|
145
|
+
// the original config and replay.
|
|
146
|
+
if (originalRequest?.headers) {
|
|
147
|
+
originalRequest.headers.Authorization = accessToken;
|
|
148
|
+
}
|
|
149
|
+
return http(originalRequest);
|
|
150
|
+
} catch (refreshErr) {
|
|
151
|
+
return Promise.reject(refreshErr);
|
|
152
|
+
}
|
|
100
153
|
}
|
|
101
154
|
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
)
|
|
108
|
-
if (!hasRefreshableSession) {
|
|
155
|
+
// Built-in `/users/login/refresh` path. Skip if the failing request
|
|
156
|
+
// IS the refresh / login itself — otherwise we'd loop forever.
|
|
157
|
+
if (
|
|
158
|
+
originalRequest.url === '/users/login/refresh' ||
|
|
159
|
+
originalRequest.url === '/users/login'
|
|
160
|
+
) {
|
|
109
161
|
return Promise.reject(error);
|
|
110
162
|
}
|
|
111
163
|
|
|
112
164
|
originalRequest._retry = true;
|
|
113
165
|
|
|
166
|
+
if (isRefreshing) {
|
|
167
|
+
const retryOriginalRequest = addRequestToQueue(originalRequest);
|
|
168
|
+
return retryOriginalRequest;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
isRefreshing = true;
|
|
114
172
|
try {
|
|
115
|
-
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
|
|
119
|
-
originalRequest.headers =
|
|
120
|
-
|
|
173
|
+
const tokens = await refresh();
|
|
174
|
+
// (was: console.log('tokens', tokens) — dumped the full response
|
|
175
|
+
// incl. access/refresh/ws tokens on every refresh; removed.)
|
|
176
|
+
isRefreshing = false;
|
|
177
|
+
originalRequest.headers.Authorization = tokens.data.token;
|
|
178
|
+
processQueue(tokens.data.token);
|
|
121
179
|
return http(originalRequest);
|
|
122
180
|
} catch (refreshErr) {
|
|
123
|
-
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
if (isRefreshFatalError(refreshErr)) {
|
|
128
|
-
store.dispatch(logout());
|
|
129
|
-
}
|
|
181
|
+
isRefreshing = false;
|
|
182
|
+
// BUGFIX: previously this returned the error (resolving the
|
|
183
|
+
// promise with the error as value) instead of rejecting, so
|
|
184
|
+
// axios callers got the error as a "successful" response body.
|
|
130
185
|
return Promise.reject(refreshErr);
|
|
131
186
|
}
|
|
132
187
|
}
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
setCurrentRoom,
|
|
10
10
|
setRoomRole,
|
|
11
11
|
updateRoom,
|
|
12
|
-
mergeUsersSet,
|
|
13
12
|
} from '../roomStore/roomsSlice';
|
|
14
13
|
import { IRoom, RoomMember } from '../types/types';
|
|
15
14
|
import { createMessageFromXml } from '../helpers/createMessageFromXml';
|
|
@@ -17,6 +16,7 @@ import { getDataFromXml } from '../helpers/getDataFromXml';
|
|
|
17
16
|
import { setDeleteModal } from '../roomStore/chatSettingsSlice';
|
|
18
17
|
import { messageNotificationManager } from '../utils/messageNotificationManager';
|
|
19
18
|
import { transformCallLogMessage } from '../helpers/callLogMessage';
|
|
19
|
+
import { translateKey } from '../i18n/strings';
|
|
20
20
|
|
|
21
21
|
// TO DO: we are thinking to refactor this code in the following way:
|
|
22
22
|
// each stanza will be parsed for 'type'
|
|
@@ -121,13 +121,24 @@ const onRealtimeMessage = async (stanza: Element) => {
|
|
|
121
121
|
}
|
|
122
122
|
const room = state.rooms.rooms[roomJID];
|
|
123
123
|
const roomName = room?.title || room?.name || '';
|
|
124
|
+
// Fallback when we don't have a display name for the sender. This is
|
|
125
|
+
// user-visible — it renders as the sender line in the in-app
|
|
126
|
+
// notification toast (see MessageNotificationContext's ToastRow:
|
|
127
|
+
// `{senderName}: {message.body}`) — so it goes through the static
|
|
128
|
+
// i18n table like any other UI caption. We're outside React here
|
|
129
|
+
// (stanza handler, not a component), so resolve the locale from the
|
|
130
|
+
// store directly and call `translateKey` instead of `useT()`.
|
|
131
|
+
const locale =
|
|
132
|
+
state.chatSettingStore.config?.i18n?.locale ||
|
|
133
|
+
state.chatSettingStore.langSource;
|
|
134
|
+
const overrides = state.chatSettingStore.config?.i18n?.strings;
|
|
124
135
|
const senderName = [
|
|
125
136
|
data.attrs.senderFirstName,
|
|
126
137
|
data.attrs.senderLastName,
|
|
127
138
|
]
|
|
128
139
|
.filter(Boolean)
|
|
129
140
|
.join(' ')
|
|
130
|
-
.trim() || '
|
|
141
|
+
.trim() || translateKey('notification.senderFallback', locale, overrides);
|
|
131
142
|
messageNotificationManager.showNotification(
|
|
132
143
|
message,
|
|
133
144
|
roomName,
|
|
@@ -227,11 +238,11 @@ const onMessageHistory = async (stanza: any) => {
|
|
|
227
238
|
// what senderJID would have held — fall back to it. createMessageFromXml
|
|
228
239
|
// already derives a display name from the jid when senderFirstName/
|
|
229
240
|
// senderLastName are absent.
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
241
|
+
const innerFrom =
|
|
242
|
+
stanza
|
|
243
|
+
.getChild('result')
|
|
244
|
+
?.getChild('forwarded')
|
|
245
|
+
?.getChild('message')?.attrs?.from || stanza.attrs.from;
|
|
235
246
|
const senderJID = data?.attrs?.senderJID || innerFrom;
|
|
236
247
|
if (!data?.attrs || !senderJID) {
|
|
237
248
|
// console.log(
|
|
@@ -240,29 +251,27 @@ const onMessageHistory = async (stanza: any) => {
|
|
|
240
251
|
// );
|
|
241
252
|
return;
|
|
242
253
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
//
|
|
246
|
-
//
|
|
247
|
-
//
|
|
248
|
-
//
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
!!deleted
|
|
265
|
-
);
|
|
254
|
+
// Parse the FULL stanza the same way the realtime path does (and the
|
|
255
|
+
// web SDK's history path does): the positional call used here before
|
|
256
|
+
// read only <data> attrs + <body>, so the <translations> payload and
|
|
257
|
+
// the <translate source> tag never made it onto archived messages.
|
|
258
|
+
// Since every transcript is MAM-backfilled on room open, that alone
|
|
259
|
+
// made translation look completely dead — the translations existed on
|
|
260
|
+
// the wire and were dropped at this exact parse. getDataFromXml also
|
|
261
|
+
// supplies xmppId (dedupe against the optimistic copy) and the
|
|
262
|
+
// resource||senderJID-localpart sender id.
|
|
263
|
+
const parsed = await getDataFromXml(stanza);
|
|
264
|
+
const { data: pData, id: pId, body: pBody, ...pRest } =
|
|
265
|
+
parsed ?? ({} as Partial<NonNullable<typeof parsed>>);
|
|
266
|
+
const mergedData: Record<string, unknown> = { ...(pData || data.attrs) };
|
|
267
|
+
if (!mergedData.senderJID) {mergedData.senderJID = senderJID;}
|
|
268
|
+
const rawMessage = await createMessageFromXml({
|
|
269
|
+
data: mergedData,
|
|
270
|
+
id: pId || id,
|
|
271
|
+
body: pBody ?? (typeof body === 'string' ? body : body?.getText?.() || ''),
|
|
272
|
+
...pRest,
|
|
273
|
+
isDeleted: !!deleted || !!pRest?.deleted,
|
|
274
|
+
} as Parameters<typeof createMessageFromXml>[0]);
|
|
266
275
|
|
|
267
276
|
// Same call-log transform as the realtime path, applied to archived
|
|
268
277
|
// history so calls received while offline still render as log entries.
|
|
@@ -363,68 +372,18 @@ const onChatInvite = async (stanza: Element, client: any) => {
|
|
|
363
372
|
|
|
364
373
|
const onGetMembers = (stanza: Element) => {
|
|
365
374
|
if (String(stanza.attrs?.id || '') !== 'roomMemberInfo') {return;}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
if (!jid || activities.length === 0) {return;}
|
|
379
|
-
|
|
380
|
-
const existingRoom = store.getState().rooms.rooms[jid];
|
|
381
|
-
const existingMembers: RoomMember[] = existingRoom?.roomMembers ?? [];
|
|
382
|
-
const existingByJid = new Map<string, RoomMember>(
|
|
383
|
-
existingMembers
|
|
384
|
-
.filter((m): m is RoomMember & { jid: string } => !!m.jid)
|
|
385
|
-
.map((m) => [m.jid, m])
|
|
386
|
-
);
|
|
387
|
-
|
|
388
|
-
const roomMembers: RoomMember[] = activities.map((a) => {
|
|
389
|
-
const memberJid: string | undefined = a.attrs?.jid;
|
|
390
|
-
const existing = memberJid ? existingByJid.get(memberJid) : undefined;
|
|
391
|
-
// The activity stanza carries only the XMPP-side fields
|
|
392
|
-
// (name/role/ban_status/last_active/jid). REST-loaded existing
|
|
393
|
-
// members supply firstName/lastName/xmppUsername/_id; when there's
|
|
394
|
-
// no REST match yet we leave those as empty strings.
|
|
395
|
-
return {
|
|
396
|
-
firstName: existing?.firstName ?? '',
|
|
397
|
-
lastName: existing?.lastName ?? '',
|
|
398
|
-
xmppUsername: existing?.xmppUsername ?? '',
|
|
399
|
-
_id: existing?._id ?? '',
|
|
400
|
-
...existing,
|
|
401
|
-
name: a.attrs?.name,
|
|
402
|
-
role: a.attrs?.role,
|
|
403
|
-
ban_status: a.attrs?.ban_status,
|
|
404
|
-
last_active: Number(a.attrs?.last_active),
|
|
405
|
-
jid: memberJid,
|
|
406
|
-
};
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
store.dispatch(updateRoom({ jid, updates: { roomMembers } }));
|
|
410
|
-
|
|
411
|
-
// Also feed the identity cache Message.tsx reads sender names from
|
|
412
|
-
// (state.rooms.usersSet). Keyed by both the bare local part and the
|
|
413
|
-
// full jid since a message's `user.id` can be either depending on
|
|
414
|
-
// how it was parsed (see createUserNameFromSetUser).
|
|
415
|
-
const usersSetUpdates: Record<string, RoomMember> = {};
|
|
416
|
-
for (const member of roomMembers) {
|
|
417
|
-
if (!member.jid) {continue;}
|
|
418
|
-
const local = member.jid.split('@')[0];
|
|
419
|
-
usersSetUpdates[local] = member;
|
|
420
|
-
usersSetUpdates[member.jid] = member;
|
|
421
|
-
}
|
|
422
|
-
if (Object.keys(usersSetUpdates).length > 0) {
|
|
423
|
-
store.dispatch(mergeUsersSet({ members: usersSetUpdates }));
|
|
424
|
-
}
|
|
425
|
-
} catch (err) {
|
|
426
|
-
console.warn('onGetMembers parse failed', err);
|
|
427
|
-
}
|
|
375
|
+
// Deliberately dispatches NOTHING — mirroring the web SDK, where this
|
|
376
|
+
// handler parses the activity list into a local and never touches the
|
|
377
|
+
// store. The activity stanza carries no firstName/lastName, and both of
|
|
378
|
+
// the old dispatches poisoned good REST data with empty-named entries:
|
|
379
|
+
// - updateRoom wholesale-replaced room.roomMembers (REST members carry
|
|
380
|
+
// no jid, so the existing-by-jid lookup always missed), blanking the
|
|
381
|
+
// ChatProfileModal member list;
|
|
382
|
+
// - mergeUsersSet overwrote REST-hydrated identity entries under the
|
|
383
|
+
// exact localpart key the sender-name resolver reads first, which is
|
|
384
|
+
// why most of usersSet ended up empty.
|
|
385
|
+
// REST (/chats/my → dispatchUsersSetFromRestItems + the roomMembers
|
|
386
|
+
// build in rooms.api.ts) is the one hydration path for both stores.
|
|
428
387
|
};
|
|
429
388
|
|
|
430
389
|
const onGetRoomInfo = (stanza: Element) => {
|
|
@@ -1,45 +1,21 @@
|
|
|
1
1
|
import { getChatsPrivateStoreRequest } from './getChatsPrivateStoreRequest.xmpp';
|
|
2
2
|
import { setChatsPrivateStoreRequest } from './setChatsPrivateStoreRequest.xmpp';
|
|
3
|
-
import {
|
|
4
|
-
getServerReadTimestamp,
|
|
5
|
-
isCorruptFutureReadMarker,
|
|
6
|
-
type ReadTimestampHeapState,
|
|
7
|
-
} from '../../helpers/getServerReadTimestamp';
|
|
8
|
-
import type { IMessage } from '../../types/types';
|
|
9
3
|
|
|
10
4
|
interface RoomLike {
|
|
11
5
|
jid: string;
|
|
12
6
|
lastViewedTimestamp?: number;
|
|
13
7
|
unreadMessages?: number;
|
|
14
|
-
// Needed to resolve a SERVER-timestamp read marker via
|
|
15
|
-
// getServerReadTimestamp instead of the device clock - see bug #38.
|
|
16
|
-
messages?: IMessage[];
|
|
17
8
|
}
|
|
18
9
|
|
|
19
10
|
interface FlushOpts {
|
|
20
11
|
// When visibleRoomJID is set, treat it as "user just viewed everything
|
|
21
|
-
// up to now" and stamp it with
|
|
22
|
-
//
|
|
23
|
-
// has not been updated yet.
|
|
12
|
+
// up to now" and stamp it with Date.now() — even if its in-memory
|
|
13
|
+
// lastViewedTimestamp has not been updated yet.
|
|
24
14
|
visibleRoomJID?: string | null;
|
|
25
|
-
// Explicit read boundary for the visible room, used INSTEAD of the
|
|
26
|
-
// newest-message fallback. ChatRoom passes the timestamp of the newest
|
|
27
|
-
// message the user actually reached when they leave a room while
|
|
28
|
-
// scrolled up - without it, the default writes "read everything" to
|
|
29
|
-
// the server and the messages they never scrolled down to come back as
|
|
30
|
-
// read on the next login, even though the local count was correct.
|
|
31
|
-
// Customer-reported #33 (server half).
|
|
32
|
-
visibleRoomTs?: number | null;
|
|
33
15
|
// If true, only write entries for rooms where unreadMessages === 0
|
|
34
16
|
// (or the visible room). Used at logout time: rooms with outstanding
|
|
35
17
|
// unread keep their old marker so the next login still surfaces them.
|
|
36
18
|
onlyIfNoUnread?: boolean;
|
|
37
|
-
// Pending/failed-send state (store.getState().roomHeapSlice), combined
|
|
38
|
-
// with each room's `messages` to resolve the newest SERVER-acked
|
|
39
|
-
// message timestamp via getServerReadTimestamp. Passed in rather than
|
|
40
|
-
// read from the store here so this module stays a pure function of its
|
|
41
|
-
// arguments - existing jest coverage builds `rooms` by hand.
|
|
42
|
-
heapState?: ReadTimestampHeapState;
|
|
43
19
|
}
|
|
44
20
|
|
|
45
21
|
/**
|
|
@@ -49,11 +25,8 @@ interface FlushOpts {
|
|
|
49
25
|
* each other's entries.
|
|
50
26
|
*
|
|
51
27
|
* Called on: tab change away from chat, AppState background/inactive,
|
|
52
|
-
* and (with onlyIfNoUnread=true) logout. ChatRoom's own unmount path
|
|
53
|
-
*
|
|
54
|
-
* single-room case - actionSetTimestampToPrivateStore is a separate,
|
|
55
|
-
* unconditional low-level write primitive kept for direct/external use
|
|
56
|
-
* and is not part of this merge path.
|
|
28
|
+
* and (with onlyIfNoUnread=true) logout. ChatRoom's own unmount path
|
|
29
|
+
* still uses actionSetTimestampToPrivateStore for the single-room case.
|
|
57
30
|
*/
|
|
58
31
|
export async function flushLastViewedToPrivateStore(
|
|
59
32
|
client: any,
|
|
@@ -61,7 +34,7 @@ export async function flushLastViewedToPrivateStore(
|
|
|
61
34
|
opts: FlushOpts = {}
|
|
62
35
|
): Promise<boolean> {
|
|
63
36
|
if (!client?.client) {return false;}
|
|
64
|
-
const { visibleRoomJID,
|
|
37
|
+
const { visibleRoomJID, onlyIfNoUnread } = opts;
|
|
65
38
|
const roomList = Object.values(rooms || {});
|
|
66
39
|
if (roomList.length === 0) {return false;}
|
|
67
40
|
|
|
@@ -73,6 +46,7 @@ export async function flushLastViewedToPrivateStore(
|
|
|
73
46
|
}
|
|
74
47
|
if (!storeObj || typeof storeObj !== 'object') {storeObj = {};}
|
|
75
48
|
|
|
49
|
+
const nowMs = Date.now();
|
|
76
50
|
let dirty = false;
|
|
77
51
|
|
|
78
52
|
for (const room of roomList) {
|
|
@@ -80,56 +54,21 @@ export async function flushLastViewedToPrivateStore(
|
|
|
80
54
|
const isVisible = !!visibleRoomJID && room.jid === visibleRoomJID;
|
|
81
55
|
const hasUnread = Number(room.unreadMessages || 0) > 0;
|
|
82
56
|
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
// the yardstick for detecting a corrupt (future) stored marker below
|
|
86
|
-
// - never as a substitute for the device clock (bug #38: a device
|
|
87
|
-
// with a fast clock previously stamped Date.now() here, and once
|
|
88
|
-
// that future value reached the server the forward-only check a few
|
|
89
|
-
// lines down rejected every later correct write, forever).
|
|
90
|
-
const newestAckedMs = getServerReadTimestamp(room as any, heapState);
|
|
91
|
-
|
|
92
|
-
// For the visible room, persist "read up to the newest message we
|
|
93
|
-
// know the server has" - read state is driven by room visibility,
|
|
94
|
-
// not by a sentinel timestamp. The exception is an explicit
|
|
95
|
-
// `visibleRoomTs`: the caller knows the user only read up to a
|
|
96
|
-
// certain point (left the room while scrolled up), so stamping
|
|
97
|
-
// "everything" here would mark genuinely-unread messages as read.
|
|
57
|
+
// For the visible room, persist "now" — read state is driven by
|
|
58
|
+
// room visibility, not by a sentinel timestamp.
|
|
98
59
|
let ts: number | undefined;
|
|
99
60
|
if (isVisible) {
|
|
100
|
-
ts =
|
|
101
|
-
typeof visibleRoomTs === 'number' && visibleRoomTs > 0
|
|
102
|
-
? visibleRoomTs
|
|
103
|
-
: newestAckedMs || undefined;
|
|
61
|
+
ts = nowMs;
|
|
104
62
|
} else if (room.lastViewedTimestamp && room.lastViewedTimestamp > 0) {
|
|
105
63
|
ts = room.lastViewedTimestamp;
|
|
106
64
|
}
|
|
107
65
|
|
|
108
|
-
// Nothing to anchor a write to (no boundary, no existing marker, no
|
|
109
|
-
// known messages yet) - skip rather than write a device-clock guess.
|
|
110
66
|
if (!ts) {continue;}
|
|
111
67
|
if (onlyIfNoUnread && hasUnread && !isVisible) {continue;}
|
|
112
68
|
|
|
113
69
|
const prev = storeObj[room.jid];
|
|
114
70
|
const prevNum = prev != null ? Number(prev) : 0;
|
|
115
|
-
|
|
116
|
-
// know this room has is not "fresher" - it's a leftover future
|
|
117
|
-
// marker (bug #38). Forward-only logic normally protects a fresher
|
|
118
|
-
// read from being clobbered by a stale fetch, but applied to a
|
|
119
|
-
// corrupt future value it does the opposite: it permanently blocks
|
|
120
|
-
// the correct (smaller) value from ever landing. Detect that case
|
|
121
|
-
// and waive the forward-only check for it specifically; sane values
|
|
122
|
-
// keep the normal forward-only protection.
|
|
123
|
-
//
|
|
124
|
-
// "Well past the newest message we know about" is deliberately NOT
|
|
125
|
-
// sufficient on its own - see isCorruptFutureReadMarker. THIS device's
|
|
126
|
-
// copy of the room can simply be stale (history not synced yet this
|
|
127
|
-
// session), in which case a legitimate marker written by another
|
|
128
|
-
// device that HAS seen newer messages looks exactly like a corrupt
|
|
129
|
-
// one, and "healing" it here would push the server marker BACKWARDS
|
|
130
|
-
// and resurrect already-read messages on every device.
|
|
131
|
-
const prevLooksCorrupt = isCorruptFutureReadMarker(prevNum, newestAckedMs);
|
|
132
|
-
if (!prevLooksCorrupt && Number.isFinite(prevNum) && prevNum >= ts) {continue;}
|
|
71
|
+
if (Number.isFinite(prevNum) && prevNum >= ts) {continue;}
|
|
133
72
|
storeObj[room.jid] = String(ts);
|
|
134
73
|
dirty = true;
|
|
135
74
|
}
|
|
@@ -70,12 +70,7 @@ export const presenceInRoom = async (
|
|
|
70
70
|
try {
|
|
71
71
|
await createTimeoutPromise(2000, unsubscribe);
|
|
72
72
|
} catch (err) {
|
|
73
|
-
|
|
74
|
-
// default) — the same length as this timeout, so the timeout used
|
|
75
|
-
// to win the race and reject a join that had actually succeeded
|
|
76
|
-
// (allRoomPresences "failed" with undefined on every bootstrap).
|
|
77
|
-
// Only a join that never got an answer is a failure.
|
|
78
|
-
if (!settled) {reject(err);}
|
|
73
|
+
reject(err);
|
|
79
74
|
}
|
|
80
75
|
})();
|
|
81
76
|
});
|
|
@@ -2,14 +2,12 @@ import { Client, xml } from '@xmpp/client';
|
|
|
2
2
|
import { Element } from '@xmpp/xml';
|
|
3
3
|
import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
|
|
4
4
|
|
|
5
|
-
let subscribeIdCounter = 0;
|
|
6
|
-
|
|
7
5
|
export async function subscribeToRoomMessages(
|
|
8
6
|
client: Client,
|
|
9
7
|
roomJID: string,
|
|
10
8
|
userNick?: string
|
|
11
9
|
): Promise<boolean> {
|
|
12
|
-
const id = `newSubscription:${Date.now().toString(
|
|
10
|
+
const id = `newSubscription:${Date.now().toString()}`;
|
|
13
11
|
let stanzaHandler: (stanza: Element) => void;
|
|
14
12
|
|
|
15
13
|
const unsubscribe = () => {
|
|
@@ -35,15 +33,6 @@ export async function subscribeToRoomMessages(
|
|
|
35
33
|
if (stanza.attrs.type === 'result') {
|
|
36
34
|
finish(resolve, true);
|
|
37
35
|
} else if (stanza.attrs.type === 'error') {
|
|
38
|
-
const errorEl = typeof stanza.getChild === 'function' ? stanza.getChild('error') : null;
|
|
39
|
-
const condition = errorEl?.children?.find(
|
|
40
|
-
(c: any) => c?.name && c.name !== 'text'
|
|
41
|
-
) as Element | undefined;
|
|
42
|
-
console.warn(
|
|
43
|
-
'[PushService] MucSub subscribe error for',
|
|
44
|
-
roomJID,
|
|
45
|
-
condition?.name ?? 'unknown'
|
|
46
|
-
);
|
|
47
36
|
finish(resolve, false);
|
|
48
37
|
}
|
|
49
38
|
}
|