@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,9 +1,9 @@
|
|
|
1
1
|
import { setCurrentRoom, setIsLoading } from '../roomStore/roomsSlice';
|
|
2
|
+
import { updatedChatLastTimestamps } from './updatedChatLastTimestamps';
|
|
2
3
|
import { initRoomsPresence } from './initRoomsPresence';
|
|
3
4
|
import XmppClient from '../networking/xmppClient';
|
|
4
5
|
import { IConfig, IRoom, User } from '../types/types';
|
|
5
6
|
import { store } from '../roomStore';
|
|
6
|
-
import { refreshAuthTokensQuietly } from '../networking/authRefresh';
|
|
7
7
|
|
|
8
8
|
const initXmppRooms = async (
|
|
9
9
|
user: User,
|
|
@@ -47,23 +47,19 @@ const initXmppRooms = async (
|
|
|
47
47
|
console.log(res);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// setLastViewedTimestamp, which has neither the forward-only guard
|
|
55
|
-
// nor the future-marker clamp, so it could silently re-clobber a
|
|
56
|
-
// value the clamp had just corrected (bug #38).
|
|
57
|
-
await (xmmpClient as any as XmppClient).getChatsPrivateStoreRequestStanza();
|
|
50
|
+
//@ts-ignore
|
|
51
|
+
const roomTimestampObject: [jid: string, timestamp: string] =
|
|
52
|
+
await (xmmpClient as any as XmppClient).getChatsPrivateStoreRequestStanza();
|
|
53
|
+
updatedChatLastTimestamps(roomTimestampObject, store.dispatch);
|
|
58
54
|
} else {
|
|
59
|
-
|
|
55
|
+
//@ts-ignore
|
|
56
|
+
const roomTimestampObject: [jid: string, timestamp: string] =
|
|
57
|
+
await xmmpClient.getChatsPrivateStoreRequestStanza();
|
|
58
|
+
updatedChatLastTimestamps(roomTimestampObject, store.dispatch);
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
if (config?.refreshTokens?.enabled) {
|
|
63
|
-
|
|
64
|
-
// rotation completely outside the SDK's lock. Routed through the
|
|
65
|
-
// one rotation point, which calls that same function internally.
|
|
66
|
-
refreshAuthTokensQuietly();
|
|
62
|
+
config?.refreshTokens?.refreshFunction?.();
|
|
67
63
|
}
|
|
68
64
|
} catch (error) {
|
|
69
65
|
console.error(error);
|
|
@@ -1,38 +1,21 @@
|
|
|
1
1
|
import { IMessage } from '../types/types';
|
|
2
2
|
import { isDateAfter, isDateBefore } from './dateComparison';
|
|
3
|
-
import { msgSortableMs } from './msgSortableMs';
|
|
4
|
-
|
|
5
|
-
// Robustly resolve a caller-supplied read marker to epoch milliseconds.
|
|
6
|
-
// Callers pass a plain number (the redux read boundary, or a room's
|
|
7
|
-
// lastViewedTimestamp), a Date object (older call sites), or occasionally
|
|
8
|
-
// a numeric string. These are NOT interchangeable through the Date
|
|
9
|
-
// constructor: `new Date(1757000000123)` (a number) reads as epoch-ms,
|
|
10
|
-
// but `new Date("1757000000123")` (a string) is parsed as a date STRING
|
|
11
|
-
// - a bare 13-digit string matches no recognized date format, so the
|
|
12
|
-
// result is silently Invalid Date and every comparison against it is
|
|
13
|
-
// `false`. Try Number() first so a numeric string/number is read as
|
|
14
|
-
// epoch-ms; only fall through to Date parsing for genuine date/ISO
|
|
15
|
-
// strings (e.g. a Date object's own `.toString()`). Never falls back to
|
|
16
|
-
// `Date.now()` - a marker we can't resolve is treated as "no marker",
|
|
17
|
-
// not "now" (bug #38).
|
|
18
|
-
function resolveMarkerMs(
|
|
19
|
-
marker: number | { toString: () => string } | null | undefined
|
|
20
|
-
): number {
|
|
21
|
-
if (marker == null) {return 0;}
|
|
22
|
-
if (typeof marker === 'number') {
|
|
23
|
-
return Number.isFinite(marker) ? marker : 0;
|
|
24
|
-
}
|
|
25
|
-
const raw = marker.toString();
|
|
26
|
-
if (raw.trim() !== '') {
|
|
27
|
-
const asNumber = Number(raw);
|
|
28
|
-
if (Number.isFinite(asNumber)) {return asNumber;}
|
|
29
|
-
}
|
|
30
|
-
const parsed = Date.parse(raw);
|
|
31
|
-
return Number.isFinite(parsed) ? parsed : 0;
|
|
32
|
-
}
|
|
33
3
|
|
|
34
4
|
function deepMerge(target: any, source: any): any {
|
|
35
5
|
for (const key in source) {
|
|
6
|
+
if (source[key] === undefined) {
|
|
7
|
+
// `for...in` visits a key even when its value is `undefined` — every
|
|
8
|
+
// stanza parser (getDataFromXml/createMessageFromXml) returns an
|
|
9
|
+
// object literal with `translations` always present, explicitly
|
|
10
|
+
// `undefined` whenever the wire message didn't carry a
|
|
11
|
+
// <translations> element. Without this guard, merging THAT message
|
|
12
|
+
// over an existing row would blow away a translation the row
|
|
13
|
+
// already had (e.g. a MAM/live echo of a message arriving without
|
|
14
|
+
// its translation re-attached) — a real message flips from
|
|
15
|
+
// translated back to original text for no reason. Absence on the
|
|
16
|
+
// incoming side must mean "leave it alone", never "clear it".
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
36
19
|
if (
|
|
37
20
|
source[key] &&
|
|
38
21
|
typeof source[key] === 'object' &&
|
|
@@ -49,7 +32,7 @@ function deepMerge(target: any, source: any): any {
|
|
|
49
32
|
export function insertMessageWithDelimiter(
|
|
50
33
|
roomMessages: Partial<IMessage>[],
|
|
51
34
|
message: IMessage,
|
|
52
|
-
lastViewedTimestamp:
|
|
35
|
+
lastViewedTimestamp: { toString: () => string } | null,
|
|
53
36
|
) {
|
|
54
37
|
const existingIndex = roomMessages.findIndex(
|
|
55
38
|
(msg) =>
|
|
@@ -92,39 +75,33 @@ export function insertMessageWithDelimiter(
|
|
|
92
75
|
roomMessages.push(message);
|
|
93
76
|
}
|
|
94
77
|
|
|
95
|
-
const lastViewedMs = resolveMarkerMs(lastViewedTimestamp);
|
|
96
|
-
const newMessageMs = msgSortableMs(message);
|
|
97
78
|
if (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
79
|
+
lastViewedTimestamp &&
|
|
80
|
+
!roomMessages.some((msg) => msg.id === 'delimiter-new') &&
|
|
81
|
+
isDateAfter(newMessageDate.toString(), lastViewedTimestamp.toString())
|
|
101
82
|
) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
// as the unread middleware and countNewerMessages use to decide
|
|
105
|
-
// what counts as unread. Comparing against a DIFFERENT source (the
|
|
106
|
-
// old code compared `msg.date` strings) risks the boundary message
|
|
107
|
-
// itself landing on the wrong side of the cut: since bug #38 the
|
|
108
|
-
// marker can equal a real message's own timestamp exactly, and any
|
|
109
|
-
// drift between `date` and the id-encoded ms - or a raw numeric
|
|
110
|
-
// marker silently producing an Invalid Date via the Date
|
|
111
|
-
// constructor's string-parsing path - could count that message as
|
|
112
|
-
// unread, pushing the divider one message too early (ABOVE the
|
|
113
|
-
// last read message instead of directly below it). Customer #42.
|
|
114
|
-
const delimiterIndex = roomMessages.findIndex(
|
|
115
|
-
(msg) => msg.id !== 'delimiter-new' && msgSortableMs(msg) > lastViewedMs
|
|
83
|
+
const delimiterIndex = roomMessages.findIndex((msg) =>
|
|
84
|
+
isDateAfter(msg.date?.toString() ?? '', lastViewedTimestamp.toString())
|
|
116
85
|
);
|
|
117
86
|
|
|
118
87
|
if (delimiterIndex !== -1) {
|
|
119
88
|
// The divider's date is what ORDERS it: roomsSlice re-sorts every
|
|
120
89
|
// merged page by timestamp (see `byMs`), so a divider stamped with
|
|
121
|
-
// `new Date()`
|
|
90
|
+
// `new Date()` — i.e. now — sorted past every real message and
|
|
122
91
|
// rendered at the very bottom, BELOW the new messages it is
|
|
123
92
|
// supposed to introduce. Anchor it a hair before the first unread
|
|
124
93
|
// instead, which is where it belongs and where any later sort keeps
|
|
125
|
-
// it.
|
|
126
|
-
|
|
127
|
-
const
|
|
94
|
+
// it. Derived from that message rather than from
|
|
95
|
+
// lastViewedTimestamp so it works whatever format the caller passes.
|
|
96
|
+
const firstUnreadMs = Date.parse(
|
|
97
|
+
String(roomMessages[delimiterIndex]?.date ?? '')
|
|
98
|
+
);
|
|
99
|
+
const rawLastViewed = lastViewedTimestamp.toString();
|
|
100
|
+
const lastViewedMs =
|
|
101
|
+
Date.parse(rawLastViewed) || Number(rawLastViewed) || Date.now();
|
|
102
|
+
const anchorMs = Number.isFinite(firstUnreadMs)
|
|
103
|
+
? firstUnreadMs - 1
|
|
104
|
+
: lastViewedMs;
|
|
128
105
|
|
|
129
106
|
roomMessages.splice(delimiterIndex, 0, {
|
|
130
107
|
id: 'delimiter-new',
|
|
@@ -139,7 +116,7 @@ export function insertMessageWithDelimiter(
|
|
|
139
116
|
roomJid: '',
|
|
140
117
|
});
|
|
141
118
|
}
|
|
142
|
-
|
|
119
|
+
}
|
|
143
120
|
} else if (
|
|
144
121
|
isDateBefore(newMessageDate.toString(), firstMessage?.date?.toString() ?? '')
|
|
145
122
|
) {
|
|
@@ -14,7 +14,15 @@
|
|
|
14
14
|
* matches. A raw objectId on its own is matched too, since some senders
|
|
15
15
|
* carry only that half.
|
|
16
16
|
*/
|
|
17
|
-
const
|
|
17
|
+
const ETHORA_ID_PART = '[0-9a-f]{24}(?:_[0-9a-f]{24})?';
|
|
18
|
+
// A private (1:1) room's own id is two of those joined by a hyphen —
|
|
19
|
+
// `<appId>_<userA>-<appId>_<userB>` — and that is what a message whose
|
|
20
|
+
// `from` carries no occupant resource resolves to. Matched as well, so a
|
|
21
|
+
// bubble is never captioned with a room id.
|
|
22
|
+
const ETHORA_ID = new RegExp(
|
|
23
|
+
`^${ETHORA_ID_PART}(?:-${ETHORA_ID_PART})?$`,
|
|
24
|
+
'i'
|
|
25
|
+
);
|
|
18
26
|
|
|
19
27
|
export const isUnresolvedSenderId = (name?: string): boolean => {
|
|
20
28
|
const trimmed = String(name || '').trim();
|
|
@@ -14,30 +14,9 @@ export const getKeyboardVerticalOffset = ({
|
|
|
14
14
|
}: KeyboardLayoutArgs): number =>
|
|
15
15
|
configuredOffset + (platform === 'ios' ? bottomInset : 0);
|
|
16
16
|
|
|
17
|
-
type InputDockPaddingArgs = Omit<KeyboardLayoutArgs, 'configuredOffset'> & {
|
|
18
|
-
// Explicit `inputDockPaddingBottom` config value, verbatim on both
|
|
19
|
-
// platforms when provided (0 allowed). Takes priority over every other
|
|
20
|
-
// rule below, including `hostOwnsLayout`.
|
|
21
|
-
configuredPadding?: number;
|
|
22
|
-
// True when the host app owns keyboard layout entirely (i.e.
|
|
23
|
-
// `disableKeyboardAvoidingView` is set) and `configuredPadding` was not
|
|
24
|
-
// given. The dock then gets no built-in bottom padding of its own,
|
|
25
|
-
// since it already sits above the host's own chrome (e.g. its tab bar).
|
|
26
|
-
hostOwnsLayout?: boolean;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
17
|
export const getInputDockPaddingBottom = ({
|
|
30
18
|
platform,
|
|
31
19
|
bottomInset = 0,
|
|
32
20
|
keyboardVisible = false,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}: InputDockPaddingArgs): number => {
|
|
36
|
-
if (typeof configuredPadding === 'number') {
|
|
37
|
-
return configuredPadding;
|
|
38
|
-
}
|
|
39
|
-
if (hostOwnsLayout) {
|
|
40
|
-
return 0;
|
|
41
|
-
}
|
|
42
|
-
return platform === 'ios' ? bottomInset : ANDROID_INPUT_DOCK_GAP;
|
|
43
|
-
};
|
|
21
|
+
}: Omit<KeyboardLayoutArgs, 'configuredOffset'>): number =>
|
|
22
|
+
platform === 'ios' ? bottomInset : ANDROID_INPUT_DOCK_GAP;
|
|
@@ -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
|
+
};
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { useDispatch } from 'react-redux';
|
|
3
3
|
import {
|
|
4
|
-
clearReadBoundary,
|
|
5
4
|
clearVisibleRoom,
|
|
6
5
|
setCurrentRoom,
|
|
7
6
|
setLastViewedTimestamp,
|
|
8
7
|
setVisibleRoom,
|
|
9
8
|
} from '../roomStore/roomsSlice';
|
|
10
9
|
import { store } from '../roomStore';
|
|
11
|
-
import {
|
|
12
|
-
getFlushBoundaryTs,
|
|
13
|
-
getReadMarkerTimestamp,
|
|
14
|
-
} from '../helpers/getServerReadTimestamp';
|
|
15
10
|
|
|
16
11
|
interface UseChatRoomFocusOptions {
|
|
17
12
|
/** The room JID that the consumer's tab/screen is currently showing. */
|
|
@@ -37,10 +32,7 @@ interface UseChatRoomFocusOptions {
|
|
|
37
32
|
* Without this hook, `useUnread()` will always return 0 for the chat
|
|
38
33
|
* room because the SDK assumes "mounted == active". With this hook,
|
|
39
34
|
* focus marks the room visible (clearing the badge) and blur stamps
|
|
40
|
-
* `lastViewedTimestamp`
|
|
41
|
-
* future messages count as unread. Deliberately not `Date.now()`: a
|
|
42
|
-
* device clock running ahead would write a future marker that the
|
|
43
|
-
* forward-only private-store merge could never correct again (bug #38).
|
|
35
|
+
* `lastViewedTimestamp = Date.now()` so future messages count as unread.
|
|
44
36
|
*
|
|
45
37
|
* Usage with React Navigation:
|
|
46
38
|
*
|
|
@@ -66,52 +58,20 @@ export const useChatRoomFocus = ({
|
|
|
66
58
|
isFocused: false,
|
|
67
59
|
});
|
|
68
60
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// MessageList typically stays mounted across a same-room focus loss
|
|
73
|
-
// (the whole point of this hook is that the host keeps `<Chat>`
|
|
74
|
-
// mounted in a hidden tab), so its own scroll-tracking ref is still
|
|
75
|
-
// intact and the redux boundary must stay in sync with it - clearing
|
|
76
|
-
// it here would desync the two.
|
|
77
|
-
const leaveRoom = (jid: string, clearBoundary: boolean) => {
|
|
78
|
-
const state = store.getState();
|
|
79
|
-
const rooms = state.rooms?.rooms;
|
|
80
|
-
const boundaryTs = state.rooms?.readBoundaries?.[jid] ?? null;
|
|
81
|
-
// getReadMarkerTimestamp: honour the boundary (the newest message the
|
|
82
|
-
// user actually reached) when the user left this room scrolled up,
|
|
83
|
-
// otherwise fall back to the newest server-acked message. Only stamp
|
|
84
|
-
// when we actually have something to anchor to - skip rather than
|
|
85
|
-
// fall back to the device clock (bug #38). Ignoring the boundary here
|
|
86
|
-
// would stamp "everything read" regardless of scroll position (bug
|
|
87
|
-
// #42, a regression of #33 reintroduced by #38).
|
|
88
|
-
const timestamp = getReadMarkerTimestamp(rooms?.[jid], state.roomHeapSlice, boundaryTs);
|
|
89
|
-
if (timestamp > 0) {
|
|
90
|
-
dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
|
|
91
|
-
}
|
|
61
|
+
const leaveRoom = (jid: string) => {
|
|
62
|
+
const timestamp = Date.now();
|
|
63
|
+
dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
|
|
92
64
|
dispatch(clearVisibleRoom());
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// Carry the same boundary to the SERVER marker - without it the
|
|
97
|
-
// flush defaults to "everything" for the visible room. Clamped
|
|
98
|
-
// through the same helper as the local stamp above.
|
|
99
|
-
visibleRoomTs: getFlushBoundaryTs(
|
|
100
|
-
rooms?.[jid],
|
|
101
|
-
state.roomHeapSlice,
|
|
102
|
-
boundaryTs
|
|
103
|
-
),
|
|
104
|
-
})
|
|
65
|
+
const rooms = store.getState().rooms?.rooms;
|
|
66
|
+
(store.getState().chatSettingStore as any)?.client
|
|
67
|
+
?.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: jid })
|
|
105
68
|
.catch(() => {});
|
|
106
|
-
if (clearBoundary) {
|
|
107
|
-
dispatch(clearReadBoundary({ jid }));
|
|
108
|
-
}
|
|
109
69
|
};
|
|
110
70
|
|
|
111
71
|
useEffect(() => {
|
|
112
72
|
const prev = prevRef.current;
|
|
113
73
|
if (prev.isFocused && prev.roomJID && (prev.roomJID !== roomJID || !isFocused)) {
|
|
114
|
-
leaveRoom(prev.roomJID
|
|
74
|
+
leaveRoom(prev.roomJID);
|
|
115
75
|
}
|
|
116
76
|
|
|
117
77
|
if (roomJID && isFocused) {
|
|
@@ -126,7 +86,7 @@ export const useChatRoomFocus = ({
|
|
|
126
86
|
return () => {
|
|
127
87
|
const prev = prevRef.current;
|
|
128
88
|
if (prev.isFocused && prev.roomJID) {
|
|
129
|
-
leaveRoom(prev.roomJID
|
|
89
|
+
leaveRoom(prev.roomJID);
|
|
130
90
|
}
|
|
131
91
|
};
|
|
132
92
|
}, []);
|