@ethora/chat-component-rn 26.7.9 → 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 -93
- package/README.md +10 -33
- 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 +13 -101
- 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 +54 -128
- 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 +13 -0
- 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/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 +8 -17
- 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 -15
- 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 +8 -87
- 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 +14 -102
- 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 +55 -128
- 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 +13 -0
- 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/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 +8 -17
- 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 -15
- 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 +7 -86
- 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.map +1 -1
- package/lib/typescript/helpers/isUnresolvedSenderId.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 +1 -14
- 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 -49
- 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 +16 -111
- 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 +51 -134
- 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 +13 -0
- package/src/helpers/isUnresolvedSenderId.ts +9 -1
- 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 +5 -14
- package/src/hooks/useChatWrapperInit.ts +16 -32
- package/src/hooks/useComposing.tsx +1 -37
- package/src/hooks/useLogout.tsx +9 -15
- 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 +7 -87
- package/src/services/pushSubscriptionService.ts +13 -18
- package/src/types/types.ts +5 -58
- 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 -125
- 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/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 -120
- 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/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 -69
- 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/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 -120
- package/src/helpers/isOwnMessage.ts +0 -90
- package/src/helpers/mediaLibraryRuntime.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
|
@@ -289,9 +289,25 @@ export function ensureFilenameHasExtension(
|
|
|
289
289
|
return `${base}${getExtensionForMime(mime)}`;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
292
|
+
/**
|
|
293
|
+
* Best-effort filename derivation for a message bubble:
|
|
294
|
+
* - server-provided `fileName`
|
|
295
|
+
* - server-provided `originalName`
|
|
296
|
+
* - URL pathname
|
|
297
|
+
* - generic `media_<timestamp>` so we never render an empty label
|
|
298
|
+
*
|
|
299
|
+
* Always returns a string with a valid extension.
|
|
300
|
+
*/
|
|
301
|
+
export function deriveDisplayFilename(opts: {
|
|
302
|
+
fileName?: string | null;
|
|
303
|
+
originalName?: string | null;
|
|
304
|
+
url?: string | null;
|
|
305
|
+
mime?: string | null;
|
|
306
|
+
}): string {
|
|
307
|
+
const candidate =
|
|
308
|
+
(opts.fileName && opts.fileName.trim()) ||
|
|
309
|
+
(opts.originalName && opts.originalName.trim()) ||
|
|
310
|
+
filenameFromUrl(opts.url) ||
|
|
311
|
+
'';
|
|
312
|
+
return ensureFilenameHasExtension(candidate, opts.mime);
|
|
313
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { setBaseURL } from '../networking/apiClient';
|
|
2
|
-
import { refreshAuthTokens, isRefreshFatalError } from '../networking/authRefresh';
|
|
1
|
+
import http, { setBaseURL } from '../networking/apiClient';
|
|
3
2
|
import { loginViaJwt } from '../networking/api-requests/auth.api';
|
|
4
3
|
import { getMyUser } from '../networking/api-requests/user.api';
|
|
5
4
|
import { IConfig, User } from '../types/types';
|
|
6
5
|
import { store } from '../roomStore';
|
|
7
6
|
import { setUser } from '../roomStore/chatSettingsSlice';
|
|
8
7
|
import { walletToUsername } from './walletUsername';
|
|
9
|
-
import {
|
|
8
|
+
import { asyncLocalStorage } from '../hooks/useLocalStorage';
|
|
9
|
+
import { localStorageConstants } from './constants/LOCAL_STORAGE';
|
|
10
10
|
|
|
11
11
|
interface ResolveInitBeforeLoadUserOptions {
|
|
12
12
|
config?: IConfig;
|
|
@@ -46,107 +46,15 @@ const normalizeUserForXmpp = (user?: User | null): User | null => {
|
|
|
46
46
|
return { ...user, xmppUsername: normalizedXmppUsername };
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
// Hermes has no atob/Buffer; hand-decode just enough base64url to read a
|
|
50
|
-
// JWT's `iat`. Claims are ASCII so the byte-per-char string is fine.
|
|
51
|
-
const B64_ALPHABET =
|
|
52
|
-
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
53
|
-
|
|
54
|
-
const readJwtIat = (token?: string | null): number => {
|
|
55
|
-
if (!token || typeof token !== 'string') {return 0;}
|
|
56
|
-
const part = token.split('.')[1];
|
|
57
|
-
if (!part) {return 0;}
|
|
58
|
-
try {
|
|
59
|
-
const clean = part.replace(/-/g, '+').replace(/_/g, '/');
|
|
60
|
-
let out = '';
|
|
61
|
-
let buffer = 0;
|
|
62
|
-
let bits = 0;
|
|
63
|
-
for (let i = 0; i < clean.length; i++) {
|
|
64
|
-
const idx = B64_ALPHABET.indexOf(clean[i]);
|
|
65
|
-
if (idx === -1) {continue;}
|
|
66
|
-
buffer = (buffer << 6) | idx;
|
|
67
|
-
bits += 6;
|
|
68
|
-
if (bits >= 8) {
|
|
69
|
-
bits -= 8;
|
|
70
|
-
out += String.fromCharCode((buffer >> bits) & 0xff);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const iat = JSON.parse(out)?.iat;
|
|
74
|
-
return typeof iat === 'number' ? iat : 0;
|
|
75
|
-
} catch {
|
|
76
|
-
return 0;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* A `userLogin.user` is typically a snapshot the host captured at ITS
|
|
82
|
-
* login time and re-presents verbatim on every mount, while this SDK
|
|
83
|
-
* keeps rotating the session and persisting the newest pair to
|
|
84
|
-
* `ETHORA_USER`. Taking the snapshot as-is therefore discards the live
|
|
85
|
-
* session in favour of an ever-aging copy: media goes blank the moment
|
|
86
|
-
* the snapshot has no `fileToken` (secure-files URLs 401 without it),
|
|
87
|
-
* and once the snapshot's refresh token ages out entirely the account
|
|
88
|
-
* looks dead even though the SDK held a working session all along.
|
|
89
|
-
*
|
|
90
|
-
* So, for the SAME account only, prefer whichever refresh pair was
|
|
91
|
-
* minted later (JWT `iat` decides — a host that genuinely re-logged-in
|
|
92
|
-
* hands us newer tokens and wins), and fill in a missing `fileToken`
|
|
93
|
-
* from the persisted copy either way.
|
|
94
|
-
*/
|
|
95
|
-
const adoptFresherPersistedSession = async (candidate: User): Promise<User> => {
|
|
96
|
-
try {
|
|
97
|
-
const stored = await secureUserStorage().get();
|
|
98
|
-
if (!stored) {return candidate;}
|
|
99
|
-
|
|
100
|
-
const sameUser =
|
|
101
|
-
(candidate._id && stored._id && candidate._id === stored._id) ||
|
|
102
|
-
(candidate.xmppUsername &&
|
|
103
|
-
stored.xmppUsername &&
|
|
104
|
-
candidate.xmppUsername === stored.xmppUsername);
|
|
105
|
-
if (!sameUser) {return candidate;}
|
|
106
|
-
|
|
107
|
-
const merged = { ...candidate };
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
stored.refreshToken &&
|
|
111
|
-
readJwtIat(stored.refreshToken) > readJwtIat(candidate.refreshToken)
|
|
112
|
-
) {
|
|
113
|
-
merged.refreshToken = stored.refreshToken;
|
|
114
|
-
if (stored.token) {merged.token = stored.token;}
|
|
115
|
-
if (stored.fileToken) {merged.fileToken = stored.fileToken;}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (!merged.fileToken && stored.fileToken) {
|
|
119
|
-
merged.fileToken = stored.fileToken;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return merged;
|
|
123
|
-
} catch {
|
|
124
|
-
return candidate;
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Bootstrap rotation.
|
|
130
|
-
*
|
|
131
|
-
* Was a second, independent `/users/login/refresh` caller that bypassed
|
|
132
|
-
* every lock in the SDK — and, worse, only wrote the rotated token to
|
|
133
|
-
* the store on the happy path, so several of the early-return branches
|
|
134
|
-
* below used to drop it. Under the backend's reuse detection a dropped
|
|
135
|
-
* rotation means the next launch presents a burned token and the
|
|
136
|
-
* session is killed.
|
|
137
|
-
*
|
|
138
|
-
* `refreshAuthTokens` persists the new pair before it resolves, so by
|
|
139
|
-
* the time this returns the rotation is safe no matter which branch the
|
|
140
|
-
* caller takes afterwards. The explicit token is required here: during
|
|
141
|
-
* bootstrap the candidate session isn't in the store yet.
|
|
142
|
-
*/
|
|
143
49
|
const refreshWithToken = async (refreshToken: string) => {
|
|
144
|
-
const
|
|
50
|
+
const response = await http.post(
|
|
51
|
+
'/users/login/refresh',
|
|
52
|
+
{},
|
|
53
|
+
{ headers: { Authorization: refreshToken } }
|
|
54
|
+
);
|
|
145
55
|
return {
|
|
146
|
-
token:
|
|
147
|
-
refreshToken:
|
|
148
|
-
xmppPassword: result.xmppPassword || '',
|
|
149
|
-
fileToken: result.fileToken || '',
|
|
56
|
+
token: response?.data?.token || '',
|
|
57
|
+
refreshToken: response?.data?.refreshToken || refreshToken,
|
|
150
58
|
};
|
|
151
59
|
};
|
|
152
60
|
|
|
@@ -179,15 +87,11 @@ const tryHydrateViaMy = async (
|
|
|
179
87
|
|
|
180
88
|
let workingToken = candidate?.token || '';
|
|
181
89
|
let workingRefresh = candidate?.refreshToken || '';
|
|
182
|
-
let rotatedXmppPassword = '';
|
|
183
|
-
let workingFileToken = candidate?.fileToken || '';
|
|
184
90
|
|
|
185
91
|
const candidateWithCurrentTokens = (): User => ({
|
|
186
92
|
...candidate,
|
|
187
93
|
token: workingToken || candidate.token,
|
|
188
94
|
refreshToken: workingRefresh || candidate.refreshToken,
|
|
189
|
-
xmppPassword: rotatedXmppPassword || candidate.xmppPassword,
|
|
190
|
-
fileToken: workingFileToken || candidate.fileToken,
|
|
191
95
|
});
|
|
192
96
|
|
|
193
97
|
const fallbackWithCreds = (): User | null => {
|
|
@@ -203,8 +107,6 @@ const tryHydrateViaMy = async (
|
|
|
203
107
|
if (merged) {
|
|
204
108
|
merged.token = workingToken || merged.token;
|
|
205
109
|
merged.refreshToken = workingRefresh || merged.refreshToken;
|
|
206
|
-
merged.xmppPassword = rotatedXmppPassword || merged.xmppPassword;
|
|
207
|
-
merged.fileToken = workingFileToken || merged.fileToken;
|
|
208
110
|
}
|
|
209
111
|
return merged;
|
|
210
112
|
} catch (error) {
|
|
@@ -225,8 +127,6 @@ const tryHydrateViaMy = async (
|
|
|
225
127
|
const refreshed = await refreshWithToken(workingRefresh);
|
|
226
128
|
workingToken = refreshed.token;
|
|
227
129
|
workingRefresh = refreshed.refreshToken;
|
|
228
|
-
rotatedXmppPassword = refreshed.xmppPassword || rotatedXmppPassword;
|
|
229
|
-
workingFileToken = refreshed.fileToken || workingFileToken;
|
|
230
130
|
|
|
231
131
|
try {
|
|
232
132
|
const myUser = await getMyUser({ token: workingToken, endpoint: myEndpoint });
|
|
@@ -236,8 +136,6 @@ const tryHydrateViaMy = async (
|
|
|
236
136
|
if (merged) {
|
|
237
137
|
merged.token = workingToken || merged.token;
|
|
238
138
|
merged.refreshToken = workingRefresh || merged.refreshToken;
|
|
239
|
-
merged.xmppPassword = rotatedXmppPassword || merged.xmppPassword;
|
|
240
|
-
merged.fileToken = workingFileToken || merged.fileToken;
|
|
241
139
|
}
|
|
242
140
|
return merged;
|
|
243
141
|
} catch (myError) {
|
|
@@ -249,11 +147,6 @@ const tryHydrateViaMy = async (
|
|
|
249
147
|
}
|
|
250
148
|
} catch (error) {
|
|
251
149
|
if (signal?.aborted || isAbortError(error)) {return null;}
|
|
252
|
-
// A fatal refresh verdict (reuse detected / token not found / stale
|
|
253
|
-
// with nothing newer around) carries no HTTP response, so it would
|
|
254
|
-
// otherwise fall through to `throw` — the session is simply dead,
|
|
255
|
-
// which for bootstrap means "nothing to restore".
|
|
256
|
-
if (isRefreshFatalError(error)) {return null;}
|
|
257
150
|
if (isAuthError(error)) {return null;}
|
|
258
151
|
throw error;
|
|
259
152
|
}
|
|
@@ -269,15 +162,13 @@ export const resolveInitBeforeLoadUser = async (
|
|
|
269
162
|
setBaseURL(config.baseUrl, config.customAppToken);
|
|
270
163
|
}
|
|
271
164
|
|
|
272
|
-
const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/
|
|
165
|
+
const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/users/my';
|
|
273
166
|
|
|
274
167
|
// Priority 1: explicit userLogin
|
|
275
168
|
const explicitUser = config?.userLogin?.enabled ? config?.userLogin?.user : null;
|
|
276
169
|
if (explicitUser) {
|
|
277
170
|
const candidate = normalizeUserForXmpp(explicitUser);
|
|
278
|
-
if (candidate && hasXmppCredentials(candidate)) {
|
|
279
|
-
return await adoptFresherPersistedSession(candidate);
|
|
280
|
-
}
|
|
171
|
+
if (candidate && hasXmppCredentials(candidate)) {return candidate;}
|
|
281
172
|
|
|
282
173
|
const hydrated = await tryHydrateViaMy(explicitUser, myEndpoint, signal).catch(
|
|
283
174
|
() => null
|
|
@@ -326,13 +217,13 @@ export const resolveInitBeforeLoadUser = async (
|
|
|
326
217
|
|
|
327
218
|
// Priority 5: persisted user in AsyncStorage
|
|
328
219
|
try {
|
|
329
|
-
const storedUser = await
|
|
220
|
+
const storedUser = await asyncLocalStorage<User>(localStorageConstants.ETHORA_USER).get();
|
|
330
221
|
if (storedUser && (storedUser.token || storedUser.refreshToken || storedUser.xmppPassword)) {
|
|
331
222
|
const hydrated = await tryHydrateViaMy(storedUser, myEndpoint, signal).catch(
|
|
332
223
|
() => null
|
|
333
224
|
);
|
|
334
225
|
if (hydrated && hasXmppCredentials(hydrated)) {return hydrated;}
|
|
335
|
-
await
|
|
226
|
+
await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove();
|
|
336
227
|
}
|
|
337
228
|
} catch {
|
|
338
229
|
// ignore storage errors
|
|
@@ -384,7 +275,7 @@ export const refreshUserCredentialsForXmpp = async (
|
|
|
384
275
|
}
|
|
385
276
|
}
|
|
386
277
|
|
|
387
|
-
const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/
|
|
278
|
+
const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/users/my';
|
|
388
279
|
|
|
389
280
|
// Priority 2: redux store user (covers userLogin + customLogin +
|
|
390
281
|
// anything previously persisted into chatSettingStore.user). The
|
|
@@ -404,7 +295,9 @@ export const refreshUserCredentialsForXmpp = async (
|
|
|
404
295
|
// should already mirror this, but if the redux state got cleared
|
|
405
296
|
// mid-session (logout race) this gives us one last shot.
|
|
406
297
|
try {
|
|
407
|
-
const storedUser = await
|
|
298
|
+
const storedUser = await asyncLocalStorage<User>(
|
|
299
|
+
localStorageConstants.ETHORA_USER
|
|
300
|
+
).get();
|
|
408
301
|
if (
|
|
409
302
|
storedUser &&
|
|
410
303
|
(storedUser.token || storedUser.refreshToken || storedUser.xmppPassword)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { IConfig, Iso639_1Codes } from '../types/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Legacy single-locale config (`translates.translations`) seeds langSource
|
|
5
|
+
* only when the host ACTUALLY set it.
|
|
6
|
+
*
|
|
7
|
+
* The condition used to be inverted (`!translates.translations`), so merely
|
|
8
|
+
* enabling translation fired `setLangSource(undefined)` on every XMPP init
|
|
9
|
+
* and wiped whatever the reader had picked from the globe — the language
|
|
10
|
+
* reset itself on every reconnect. Web fixed this; RN had not.
|
|
11
|
+
*/
|
|
12
|
+
export const resolveLegacyTranslatesLangSource = (
|
|
13
|
+
translatesConfig?: IConfig['translates']
|
|
14
|
+
): Iso639_1Codes | undefined =>
|
|
15
|
+
translatesConfig?.enabled && translatesConfig?.translations
|
|
16
|
+
? translatesConfig.translations
|
|
17
|
+
: undefined;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A host drives the reader's language from OUTSIDE the component by setting
|
|
21
|
+
* `config.translates.readerLocale` (their own language switcher, or the
|
|
22
|
+
* testbed's Setup tab). Nothing was syncing it into `langSource`, so pinning
|
|
23
|
+
* it only redirected the incoming-translation lookup: the UI captions and
|
|
24
|
+
* the `<translate source>` on outgoing messages both kept following the
|
|
25
|
+
* unset `langSource`.
|
|
26
|
+
*
|
|
27
|
+
* Unlike web this keeps the FULL locale rather than the base language. RN's
|
|
28
|
+
* LANGUAGE_OPTIONS are region-tagged (`es-US`, `fr-CA`) because the region
|
|
29
|
+
* is forwarded to the translation service, and the in-chat picker stores
|
|
30
|
+
* that full form — so the external path has to store the same thing or the
|
|
31
|
+
* two would disagree. Caption lookups strip to the base themselves.
|
|
32
|
+
*
|
|
33
|
+
* Resolves only when actually set, so a host that leaves it unset never
|
|
34
|
+
* clobbers what the reader chose for themselves.
|
|
35
|
+
*/
|
|
36
|
+
export const resolveExternalReaderLocaleLangSource = (
|
|
37
|
+
readerLocale?: string
|
|
38
|
+
): Iso639_1Codes | undefined =>
|
|
39
|
+
(readerLocale || undefined) as Iso639_1Codes | undefined;
|
|
40
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { store } from '../roomStore';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Collapse a duplicated `<appId>_` prefix down to one.
|
|
5
|
+
*
|
|
6
|
+
* Ported from the web SDK (src/helpers/xmppUsername.ts). Some senders stamp
|
|
7
|
+
* an already-qualified username and it gets qualified a second time, which
|
|
8
|
+
* yields `<appId>_<appId>_<userId>` — a key `usersSet` will never match.
|
|
9
|
+
*
|
|
10
|
+
* RN reads the appId off the logged-in user's own xmppUsername
|
|
11
|
+
* (`<appId>_<userId>`) since the chat store has no standalone `appId` field
|
|
12
|
+
* the way web's does.
|
|
13
|
+
*/
|
|
14
|
+
export const normalizeXmppUsername = (
|
|
15
|
+
value: string | undefined | null
|
|
16
|
+
): string => {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
let result = String(value).trim();
|
|
21
|
+
if (!result) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const ownXmpp = String(
|
|
26
|
+
store.getState().chatSettingStore?.user?.xmppUsername || ''
|
|
27
|
+
);
|
|
28
|
+
const appId = ownXmpp.includes('_') ? ownXmpp.split('_')[0] : '';
|
|
29
|
+
if (!appId) {
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const prefix = `${appId}_`;
|
|
34
|
+
while (result.startsWith(prefix + prefix)) {
|
|
35
|
+
result = result.slice(prefix.length);
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
setVisibleRoom,
|
|
8
8
|
} from '../roomStore/roomsSlice';
|
|
9
9
|
import { store } from '../roomStore';
|
|
10
|
-
import { getServerReadTimestamp } from '../helpers/getServerReadTimestamp';
|
|
11
10
|
|
|
12
11
|
interface UseChatRoomFocusOptions {
|
|
13
12
|
/** The room JID that the consumer's tab/screen is currently showing. */
|
|
@@ -33,10 +32,7 @@ interface UseChatRoomFocusOptions {
|
|
|
33
32
|
* Without this hook, `useUnread()` will always return 0 for the chat
|
|
34
33
|
* room because the SDK assumes "mounted == active". With this hook,
|
|
35
34
|
* focus marks the room visible (clearing the badge) and blur stamps
|
|
36
|
-
* `lastViewedTimestamp`
|
|
37
|
-
* future messages count as unread. Deliberately not `Date.now()`: a
|
|
38
|
-
* device clock running ahead would write a future marker that the
|
|
39
|
-
* forward-only private-store merge could never correct again (bug #38).
|
|
35
|
+
* `lastViewedTimestamp = Date.now()` so future messages count as unread.
|
|
40
36
|
*
|
|
41
37
|
* Usage with React Navigation:
|
|
42
38
|
*
|
|
@@ -63,16 +59,11 @@ export const useChatRoomFocus = ({
|
|
|
63
59
|
});
|
|
64
60
|
|
|
65
61
|
const leaveRoom = (jid: string) => {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
const timestamp = getServerReadTimestamp(rooms?.[jid], state.roomHeapSlice);
|
|
69
|
-
// Only stamp when we actually have something to anchor to - skip
|
|
70
|
-
// rather than fall back to the device clock (bug #38).
|
|
71
|
-
if (timestamp > 0) {
|
|
72
|
-
dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
|
|
73
|
-
}
|
|
62
|
+
const timestamp = Date.now();
|
|
63
|
+
dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
|
|
74
64
|
dispatch(clearVisibleRoom());
|
|
75
|
-
|
|
65
|
+
const rooms = store.getState().rooms?.rooms;
|
|
66
|
+
(store.getState().chatSettingStore as any)?.client
|
|
76
67
|
?.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: jid })
|
|
77
68
|
.catch(() => {});
|
|
78
69
|
};
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
import { useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { useDispatch, useSelector } from 'react-redux';
|
|
5
5
|
import { IConfig } from '../types/types';
|
|
6
|
+
import { resolveLegacyTranslatesLangSource } from '../helpers/resolveLangSource';
|
|
6
7
|
import XmppClient from '../networking/xmppClient';
|
|
7
8
|
import { AppDispatch, RootState } from '../roomStore';
|
|
8
9
|
import { useXmppClient } from '../context/xmppProvider';
|
|
9
10
|
import { chatAutoEnterer } from '../helpers/chatAutoEnterer';
|
|
10
11
|
import { initRoomsPresence } from '../helpers/initRoomsPresence';
|
|
12
|
+
import { updatedChatLastTimestamps } from '../helpers/updatedChatLastTimestamps';
|
|
11
13
|
import { updateMessagesTillLast } from '../helpers/updateMessagesTillLast';
|
|
12
|
-
import {
|
|
14
|
+
import { refresh } from '../networking/apiClient';
|
|
13
15
|
import { setLangSource, setConfig } from '../roomStore/chatSettingsSlice';
|
|
14
16
|
import { setIsLoading } from '../roomStore/roomsSlice';
|
|
15
17
|
import { useRoomState } from './useRoomState';
|
|
@@ -17,7 +19,6 @@ import { useChatSettingState } from './useChatSettingState';
|
|
|
17
19
|
import { isChatIdPresentInArray } from '../helpers/isChatIdPresentInArray';
|
|
18
20
|
import useGetNewArchRoom from './useGetNewArchRoom';
|
|
19
21
|
import { getRoomsWithRetry } from '../helpers/getRoomsWithRetry';
|
|
20
|
-
import { shallowEqual } from '../helpers/shallowEqual';
|
|
21
22
|
|
|
22
23
|
interface useChatWrapperInitProps {
|
|
23
24
|
roomJID: string | null | undefined;
|
|
@@ -65,20 +66,6 @@ const useChatWrapperInit = ({
|
|
|
65
66
|
};
|
|
66
67
|
}, [user.xmppPassword]);
|
|
67
68
|
|
|
68
|
-
// Presentational config flags (e.g. `disableHeader`) can change while the
|
|
69
|
-
// chat stays mounted — sync them to redux whenever `config` actually
|
|
70
|
-
// changes, not just at init. Shallow-equal guard: an inline object
|
|
71
|
-
// literal from the host is a fresh reference every render even when
|
|
72
|
-
// nothing in it changed, and dispatching unconditionally would re-render
|
|
73
|
-
// every config consumer on every host render.
|
|
74
|
-
const lastSyncedConfigRef = useRef<IConfig | undefined>(undefined);
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
if (!shallowEqual(lastSyncedConfigRef.current, config)) {
|
|
77
|
-
lastSyncedConfigRef.current = config;
|
|
78
|
-
dispatch(setConfig(config));
|
|
79
|
-
}
|
|
80
|
-
}, [config, dispatch]);
|
|
81
|
-
|
|
82
69
|
const getRoomsWithRertyRequest = async () => {
|
|
83
70
|
setIsRetrying(true);
|
|
84
71
|
const retryRooms = await getRoomsWithRetry(
|
|
@@ -111,8 +98,11 @@ const useChatWrapperInit = ({
|
|
|
111
98
|
let retryTimeout: NodeJS.Timeout;
|
|
112
99
|
|
|
113
100
|
const initXmmpClient = async () => {
|
|
114
|
-
|
|
115
|
-
|
|
101
|
+
const legacyLangSource = resolveLegacyTranslatesLangSource(
|
|
102
|
+
config?.translates
|
|
103
|
+
);
|
|
104
|
+
if (legacyLangSource) {
|
|
105
|
+
dispatch(setLangSource(legacyLangSource));
|
|
116
106
|
}
|
|
117
107
|
|
|
118
108
|
dispatch(setConfig(config));
|
|
@@ -169,21 +159,15 @@ const useChatWrapperInit = ({
|
|
|
169
159
|
}
|
|
170
160
|
}
|
|
171
161
|
try {
|
|
172
|
-
// getChatsPrivateStoreRequestStanza hydrates redux itself
|
|
173
|
-
// (dispatch(applyPrivateStoreMarkers(...)) internally,
|
|
174
|
-
// clamped + forward-only) - do not also apply the raw
|
|
175
|
-
// return value here. That used to double-dispatch via
|
|
176
|
-
// updatedChatLastTimestamps' unconditional
|
|
177
|
-
// setLastViewedTimestamp, which has neither the
|
|
178
|
-
// forward-only guard nor the future-marker clamp, so on
|
|
179
|
-
// every reconnect it could silently re-clobber a value
|
|
180
|
-
// the clamp had just corrected (bug #38).
|
|
181
162
|
const roomTimestampObject: any =
|
|
182
163
|
await newClient.getChatsPrivateStoreRequestStanza();
|
|
183
164
|
console.log(
|
|
184
165
|
'Got chats private store',
|
|
185
166
|
roomTimestampObject?.length || 0
|
|
186
167
|
);
|
|
168
|
+
if (roomTimestampObject) {
|
|
169
|
+
updatedChatLastTimestamps(roomTimestampObject, dispatch);
|
|
170
|
+
}
|
|
187
171
|
if (!hasSyncedHistoryRef.current) {
|
|
188
172
|
console.log('Updating messages till last');
|
|
189
173
|
await updateMessagesTillLast(rooms, newClient);
|
|
@@ -199,7 +183,7 @@ const useChatWrapperInit = ({
|
|
|
199
183
|
}
|
|
200
184
|
|
|
201
185
|
{
|
|
202
|
-
config?.refreshTokens?.enabled &&
|
|
186
|
+
config?.refreshTokens?.enabled && refresh();
|
|
203
187
|
}
|
|
204
188
|
} catch (error) {
|
|
205
189
|
console.error(' Error during initialization', error);
|
|
@@ -225,15 +209,15 @@ const useChatWrapperInit = ({
|
|
|
225
209
|
setInited(true);
|
|
226
210
|
console.log(' Getting chats private store for existing client');
|
|
227
211
|
try {
|
|
228
|
-
// See the "new client" branch above: getChatsPrivateStoreRequestStanza
|
|
229
|
-
// already hydrates redux (clamped + forward-only); do not
|
|
230
|
-
// also apply the raw return value here.
|
|
231
212
|
const roomTimestampObject: any =
|
|
232
213
|
await client.getChatsPrivateStoreRequestStanza();
|
|
233
214
|
console.log(
|
|
234
215
|
'Got chats private store for existing client',
|
|
235
216
|
roomTimestampObject?.length || 0
|
|
236
217
|
);
|
|
218
|
+
if (roomTimestampObject) {
|
|
219
|
+
updatedChatLastTimestamps(roomTimestampObject, dispatch);
|
|
220
|
+
}
|
|
237
221
|
if (!hasSyncedHistoryRef.current) {
|
|
238
222
|
console.log(
|
|
239
223
|
'Updating messages till last for existing client'
|
|
@@ -253,7 +237,7 @@ const useChatWrapperInit = ({
|
|
|
253
237
|
setConnectionLost(false);
|
|
254
238
|
}
|
|
255
239
|
{
|
|
256
|
-
config?.refreshTokens?.enabled &&
|
|
240
|
+
config?.refreshTokens?.enabled && refresh();
|
|
257
241
|
}
|
|
258
242
|
}
|
|
259
243
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect,
|
|
2
|
-
import { AppState, AppStateStatus } from 'react-native';
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
2
|
import { useXmppClient } from '../context/xmppProvider';
|
|
4
3
|
import { useSelector } from 'react-redux';
|
|
5
4
|
import { RootState } from '../roomStore';
|
|
@@ -10,16 +9,8 @@ const useComposing = (config?: IConfig) => {
|
|
|
10
9
|
const { client } = useXmppClient();
|
|
11
10
|
const { activeRoomJID } = useSelector((state: RootState) => state.rooms);
|
|
12
11
|
const { user } = useChatSettingState();
|
|
13
|
-
// RN keeps a focused TextInput focused when the app is backgrounded or
|
|
14
|
-
// the device is locked — nothing fires `onBlur`, so without this the
|
|
15
|
-
// other participant sees "typing…" for as long as the user is away.
|
|
16
|
-
// Tracks whether the input is *currently* focused, independent of the
|
|
17
|
-
// foreground/background transition, so we know whether to resume
|
|
18
|
-
// composing on return.
|
|
19
|
-
const isFocusedRef = useRef(false);
|
|
20
12
|
|
|
21
13
|
const sendStartComposing = useCallback(() => {
|
|
22
|
-
isFocusedRef.current = true;
|
|
23
14
|
if (config?.disableTypingIndicator) {
|
|
24
15
|
return;
|
|
25
16
|
}
|
|
@@ -33,7 +24,6 @@ const useComposing = (config?: IConfig) => {
|
|
|
33
24
|
}, [activeRoomJID, client, config?.disableTypingIndicator, user.firstName, user.lastName]);
|
|
34
25
|
|
|
35
26
|
const sendEndComposing = useCallback(() => {
|
|
36
|
-
isFocusedRef.current = false;
|
|
37
27
|
if (config?.disableTypingIndicator) {
|
|
38
28
|
return;
|
|
39
29
|
}
|
|
@@ -54,32 +44,6 @@ const useComposing = (config?: IConfig) => {
|
|
|
54
44
|
return () => clearTimeout(timerId);
|
|
55
45
|
}, [sendEndComposing]);
|
|
56
46
|
|
|
57
|
-
// Foreground/background transition only — a pause in typing must NOT
|
|
58
|
-
// clear the indicator (that would flicker for a slowly-composing user),
|
|
59
|
-
// so this deliberately does not hook keystroke/idle timing at all.
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
const handleAppStateChange = (nextState: AppStateStatus) => {
|
|
62
|
-
if (nextState !== 'active') {
|
|
63
|
-
if (isFocusedRef.current && !config?.disableTypingIndicator && client) {
|
|
64
|
-
client.sendTypingRequestStanza(
|
|
65
|
-
activeRoomJID || '',
|
|
66
|
-
`${user.firstName} ${user.lastName}`,
|
|
67
|
-
false
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
} else if (isFocusedRef.current && !config?.disableTypingIndicator && client) {
|
|
71
|
-
client.sendTypingRequestStanza(
|
|
72
|
-
activeRoomJID || '',
|
|
73
|
-
`${user.firstName} ${user.lastName}`,
|
|
74
|
-
true
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const subscription = AppState.addEventListener('change', handleAppStateChange);
|
|
80
|
-
return () => subscription.remove();
|
|
81
|
-
}, [activeRoomJID, client, config?.disableTypingIndicator, user.firstName, user.lastName]);
|
|
82
|
-
|
|
83
47
|
return { sendStartComposing, sendEndComposing };
|
|
84
48
|
};
|
|
85
49
|
|
package/src/hooks/useLogout.tsx
CHANGED
|
@@ -9,7 +9,7 @@ import { clearHeap } from '../roomStore/roomHeapSlice';
|
|
|
9
9
|
import { pushSubscriptionService } from '../services/pushSubscriptionService';
|
|
10
10
|
import { clearRoomsRestCache } from '../networking/api-requests/rooms.api';
|
|
11
11
|
import { clearPersistedState } from '../roomStore/persistence';
|
|
12
|
-
import {
|
|
12
|
+
import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
|
|
13
13
|
|
|
14
14
|
// AsyncStorage keys the library writes but that aren't cleared by any
|
|
15
15
|
// slice reducer. Listed here so a single logout call wipes the full
|
|
@@ -120,23 +120,17 @@ const logoutService = {
|
|
|
120
120
|
|
|
121
121
|
// 6. Stray keys the slices don't touch.
|
|
122
122
|
try {
|
|
123
|
-
await AsyncStorage.multiRemove(
|
|
123
|
+
await AsyncStorage.multiRemove([
|
|
124
|
+
...LIBRARY_STRAY_KEYS,
|
|
125
|
+
// Belt-and-suspenders: the chat slice's `logout` reducer
|
|
126
|
+
// schedules an async remove of ETHORA_USER fire-and-forget;
|
|
127
|
+
// re-issue it here so the disk is provably clean before this
|
|
128
|
+
// Promise resolves.
|
|
129
|
+
localStorageConstants.ETHORA_USER,
|
|
130
|
+
]);
|
|
124
131
|
} catch (e) {
|
|
125
132
|
console.warn('logoutService: stray-key clear failed', e);
|
|
126
133
|
}
|
|
127
|
-
|
|
128
|
-
// 7. Belt-and-suspenders: the chat slice's `logout` reducer already
|
|
129
|
-
// fires an async ETHORA_USER removal, but re-issue it here (via
|
|
130
|
-
// the same secureUserStorage split the reducer uses) so BOTH the
|
|
131
|
-
// plain-AsyncStorage profile half AND the Keychain/Keystore
|
|
132
|
-
// secrets are provably gone before this Promise resolves — a bare
|
|
133
|
-
// `AsyncStorage.removeItem(ETHORA_USER)` here would only clear the
|
|
134
|
-
// profile half and leave the tokens behind.
|
|
135
|
-
try {
|
|
136
|
-
await secureUserStorage().remove();
|
|
137
|
-
} catch (e) {
|
|
138
|
-
console.warn('logoutService: secure user storage clear failed', e);
|
|
139
|
-
}
|
|
140
134
|
},
|
|
141
135
|
};
|
|
142
136
|
|
|
@@ -4,7 +4,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
|
4
4
|
import { RootState } from '../roomStore';
|
|
5
5
|
import { setCurrentRoom, clearPendingNotificationJid } from '../roomStore/roomsSlice';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const PENDING_NOTIFICATION_JID_KEY = 'ethora_pending_notification_jid';
|
|
8
8
|
|
|
9
9
|
export function usePendingNotification() {
|
|
10
10
|
const dispatch = useDispatch();
|
|
@@ -21,15 +21,21 @@ export function usePendingNotification() {
|
|
|
21
21
|
let jidToOpen = pendingNotificationJid;
|
|
22
22
|
|
|
23
23
|
if (!jidToOpen) {
|
|
24
|
-
|
|
24
|
+
try {
|
|
25
|
+
const storedJid = await AsyncStorage.getItem(PENDING_NOTIFICATION_JID_KEY);
|
|
26
|
+
if (storedJid) {
|
|
27
|
+
jidToOpen = storedJid;
|
|
28
|
+
await AsyncStorage.removeItem(PENDING_NOTIFICATION_JID_KEY);
|
|
29
|
+
}
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error('Error reading from AsyncStorage:', error);
|
|
32
|
+
}
|
|
25
33
|
}
|
|
26
34
|
|
|
27
35
|
if (jidToOpen) {
|
|
28
36
|
const room = rooms[jidToOpen];
|
|
29
37
|
if (room) {
|
|
30
|
-
|
|
31
|
-
AsyncStorage.removeItem(PENDING_NOTIFICATION_JID_KEY).catch(() => undefined);
|
|
32
|
-
dispatch(setCurrentRoom({ roomJID: jidToOpen }));
|
|
38
|
+
return;
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
41
|
};
|