@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
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Alert, Linking } from 'react-native';
|
|
2
|
-
import * as ImagePicker from 'expo-image-picker';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* A picked image in the shape React Native's FormData understands.
|
|
6
|
-
*
|
|
7
|
-
* NOT a web `File`: RN streams a multipart part straight from a `file://`
|
|
8
|
-
* uri and has no usable Blob/File/atob path. Screens ported from the web
|
|
9
|
-
* client used to carry base64 -> Blob -> File helpers that could never
|
|
10
|
-
* have run here.
|
|
11
|
-
*/
|
|
12
|
-
export interface PickedImage {
|
|
13
|
-
uri: string;
|
|
14
|
-
type: string;
|
|
15
|
-
name: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Ask for library permission, open the picker, and normalise the result.
|
|
20
|
-
*
|
|
21
|
-
* Returns `null` for every non-error outcome — permission refused, user
|
|
22
|
-
* cancelled — so call sites can simply keep their current value.
|
|
23
|
-
*
|
|
24
|
-
* Exists because the avatar pickers are wired to `onPress`, which hands
|
|
25
|
-
* the callback a SyntheticEvent. Storing that event as "the image" (what
|
|
26
|
-
* two screens used to do) rendered a pooled event as an <Image source>
|
|
27
|
-
* and then crashed with "Property is not configurable" when React tried
|
|
28
|
-
* to release it — on top of never letting the user pick anything.
|
|
29
|
-
*/
|
|
30
|
-
export const pickImageAsset = async (): Promise<PickedImage | null> => {
|
|
31
|
-
try {
|
|
32
|
-
// expo-image-picker owns the permission prompt internally and
|
|
33
|
-
// returns a `granted` flag.
|
|
34
|
-
const perm = await ImagePicker.requestMediaLibraryPermissionsAsync();
|
|
35
|
-
if (!perm.granted) {
|
|
36
|
-
Alert.alert(
|
|
37
|
-
'Permission required',
|
|
38
|
-
'Photo library permission is needed to select images.',
|
|
39
|
-
[
|
|
40
|
-
{ text: 'Cancel', style: 'cancel' },
|
|
41
|
-
{ text: 'Open Settings', onPress: () => Linking.openSettings() },
|
|
42
|
-
]
|
|
43
|
-
);
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const result = await ImagePicker.launchImageLibraryAsync({
|
|
48
|
-
mediaTypes: ['images'],
|
|
49
|
-
allowsEditing: true,
|
|
50
|
-
aspect: [1, 1],
|
|
51
|
-
quality: 0.8,
|
|
52
|
-
});
|
|
53
|
-
if (result.canceled || !result.assets?.[0]) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const asset = result.assets[0];
|
|
58
|
-
const originalName = asset.fileName || asset.uri.split('/').pop();
|
|
59
|
-
return {
|
|
60
|
-
uri: asset.uri,
|
|
61
|
-
type: asset.mimeType || 'image/jpeg',
|
|
62
|
-
name: originalName || `image_${Date.now()}.jpg`,
|
|
63
|
-
};
|
|
64
|
-
} catch (error) {
|
|
65
|
-
console.error('Failed to pick an image:', error);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
2
|
-
import { store } from '../roomStore';
|
|
3
|
-
import {
|
|
4
|
-
clearPendingNotificationJid,
|
|
5
|
-
setCurrentRoom,
|
|
6
|
-
setPendingNotificationJid,
|
|
7
|
-
} from '../roomStore/roomsSlice';
|
|
8
|
-
import { handleCallPush } from './incomingCallFromPush';
|
|
9
|
-
import { normalizeRoomJid } from './normalizeRoomJid';
|
|
10
|
-
|
|
11
|
-
export type PushPayloadOutcome = 'call' | 'room' | 'pending' | 'unknown';
|
|
12
|
-
|
|
13
|
-
export const PENDING_NOTIFICATION_JID_KEY = 'ethora_pending_notification_jid';
|
|
14
|
-
export const PENDING_NOTIFICATION_TTL_MS = 5 * 60 * 1000;
|
|
15
|
-
|
|
16
|
-
export const readPendingJid = async (): Promise<string | null> => {
|
|
17
|
-
try {
|
|
18
|
-
const raw = await AsyncStorage.getItem(PENDING_NOTIFICATION_JID_KEY);
|
|
19
|
-
if (!raw) {return null;}
|
|
20
|
-
if (raw.startsWith('{')) {
|
|
21
|
-
const { jid, at } = JSON.parse(raw) as { jid?: string; at?: number };
|
|
22
|
-
if (!jid || !at || Date.now() - at > PENDING_NOTIFICATION_TTL_MS) {
|
|
23
|
-
await AsyncStorage.removeItem(PENDING_NOTIFICATION_JID_KEY);
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
return jid;
|
|
27
|
-
}
|
|
28
|
-
return raw;
|
|
29
|
-
} catch {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const openRoomFromPush = (jid: string): 'room' | 'pending' => {
|
|
35
|
-
const state = store.getState();
|
|
36
|
-
const conference = state.chatSettingStore?.config?.xmppSettings?.conference;
|
|
37
|
-
const full = normalizeRoomJid(jid, conference);
|
|
38
|
-
|
|
39
|
-
AsyncStorage.setItem(
|
|
40
|
-
PENDING_NOTIFICATION_JID_KEY,
|
|
41
|
-
JSON.stringify({ jid: full, at: Date.now() })
|
|
42
|
-
).catch(() => undefined);
|
|
43
|
-
if (state.rooms?.rooms?.[full]) {
|
|
44
|
-
store.dispatch(clearPendingNotificationJid());
|
|
45
|
-
store.dispatch(setCurrentRoom({ roomJID: full }));
|
|
46
|
-
return 'room';
|
|
47
|
-
}
|
|
48
|
-
store.dispatch(setPendingNotificationJid(full));
|
|
49
|
-
return 'pending';
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export const handlePushPayload = (
|
|
53
|
-
data: Record<string, unknown> | null | undefined
|
|
54
|
-
): PushPayloadOutcome => {
|
|
55
|
-
if (!data) {return 'unknown';}
|
|
56
|
-
if (handleCallPush(data as Record<string, any>)) {return 'call';}
|
|
57
|
-
const jid = data.jid ?? data.chatJid ?? data.roomJid ?? data.roomJID;
|
|
58
|
-
if (typeof jid === 'string' && jid) {
|
|
59
|
-
return openRoomFromPush(jid);
|
|
60
|
-
}
|
|
61
|
-
return 'unknown';
|
|
62
|
-
};
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { store } from '../roomStore';
|
|
2
|
-
import { getCurrentBaseURL } from '../networking/apiClient';
|
|
3
|
-
import { refreshAuthTokens } from '../networking/authRefresh';
|
|
4
|
-
|
|
5
|
-
const SECURE_FILES_HOST_PREFIX = 'secure-files.';
|
|
6
|
-
const SECURE_MEDIA_PATH_PREFIX = '/secure-media/';
|
|
7
|
-
|
|
8
|
-
const FILE_TOKEN_PARAM = 'ft';
|
|
9
|
-
|
|
10
|
-
export const resolveFileUrl = (url?: string | null): string => {
|
|
11
|
-
if (!url) {return '';}
|
|
12
|
-
// Any scheme at all — http(s), data, file, content, blob.
|
|
13
|
-
if (/^[a-z][a-z0-9+.-]*:/i.test(url)) {return url;}
|
|
14
|
-
if (!url.startsWith('/')) {return url;}
|
|
15
|
-
|
|
16
|
-
const base = getCurrentBaseURL().replace(/\/+$/, '');
|
|
17
|
-
return base ? `${base}${url}` : url;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const isSecureFileUrl = (url?: string | null): boolean => {
|
|
21
|
-
if (!url) {return false;}
|
|
22
|
-
|
|
23
|
-
const path = url.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]*/i, '');
|
|
24
|
-
if (path.startsWith(SECURE_MEDIA_PATH_PREFIX)) {return true;}
|
|
25
|
-
|
|
26
|
-
const match = /^https?:\/\/(?:[^@/]+@)?([^:/?#]+)/i.exec(url);
|
|
27
|
-
if (!match) {return false;}
|
|
28
|
-
return match[1].toLowerCase().startsWith(SECURE_FILES_HOST_PREFIX);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const appendFileToken = (
|
|
32
|
-
url: string | null | undefined,
|
|
33
|
-
fileToken: string | null | undefined
|
|
34
|
-
): string => {
|
|
35
|
-
if (!url) {return '';}
|
|
36
|
-
|
|
37
|
-
const resolved = resolveFileUrl(url);
|
|
38
|
-
if (!fileToken || !isSecureFileUrl(resolved)) {return resolved;}
|
|
39
|
-
url = resolved;
|
|
40
|
-
|
|
41
|
-
const hashIndex = url.indexOf('#');
|
|
42
|
-
const hash = hashIndex === -1 ? '' : url.slice(hashIndex);
|
|
43
|
-
const withoutHash = hashIndex === -1 ? url : url.slice(0, hashIndex);
|
|
44
|
-
|
|
45
|
-
const queryIndex = withoutHash.indexOf('?');
|
|
46
|
-
const base = queryIndex === -1 ? withoutHash : withoutHash.slice(0, queryIndex);
|
|
47
|
-
const query = queryIndex === -1 ? '' : withoutHash.slice(queryIndex + 1);
|
|
48
|
-
|
|
49
|
-
const params = query
|
|
50
|
-
.split('&')
|
|
51
|
-
.filter(Boolean)
|
|
52
|
-
.filter((pair) => pair.split('=')[0] !== FILE_TOKEN_PARAM);
|
|
53
|
-
|
|
54
|
-
params.push(`${FILE_TOKEN_PARAM}=${encodeURIComponent(fileToken)}`);
|
|
55
|
-
|
|
56
|
-
return `${base}?${params.join('&')}${hash}`;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export const withFileToken = (url?: string | null): string =>
|
|
60
|
-
appendFileToken(
|
|
61
|
-
url,
|
|
62
|
-
store.getState().chatSettingStore?.user?.fileToken || ''
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
const RECOVERY_COOLDOWN_MS = 30_000;
|
|
66
|
-
let recoveryInFlight: Promise<boolean> | null = null;
|
|
67
|
-
let lastRecoveryAt = 0;
|
|
68
|
-
|
|
69
|
-
export const requestFileTokenRecovery = (): Promise<boolean> => {
|
|
70
|
-
if (recoveryInFlight) {return recoveryInFlight;}
|
|
71
|
-
|
|
72
|
-
const now = Date.now();
|
|
73
|
-
if (now - lastRecoveryAt < RECOVERY_COOLDOWN_MS) {
|
|
74
|
-
return Promise.resolve(false);
|
|
75
|
-
}
|
|
76
|
-
lastRecoveryAt = now;
|
|
77
|
-
|
|
78
|
-
const state = store.getState();
|
|
79
|
-
const refreshConfig = state.chatSettingStore?.config?.refreshTokens;
|
|
80
|
-
const user = state.chatSettingStore?.user;
|
|
81
|
-
|
|
82
|
-
if (!refreshConfig?.enabled) {return Promise.resolve(false);}
|
|
83
|
-
|
|
84
|
-
const run = async (): Promise<boolean> => {
|
|
85
|
-
if (!refreshConfig.refreshFunction && !user?.refreshToken) {return false;}
|
|
86
|
-
|
|
87
|
-
const tokens = await refreshAuthTokens();
|
|
88
|
-
return Boolean(tokens.fileToken);
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
recoveryInFlight = run()
|
|
92
|
-
.catch(() => false)
|
|
93
|
-
.finally(() => {
|
|
94
|
-
recoveryInFlight = null;
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
return recoveryInFlight;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
export const __resetFileTokenRecoveryForTests = (): void => {
|
|
101
|
-
recoveryInFlight = null;
|
|
102
|
-
lastRecoveryAt = 0;
|
|
103
|
-
};
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
2
|
-
import { loadSecureStore } from './secureStoreRuntime';
|
|
3
|
-
import { pushLog } from '../utils/devLogger';
|
|
4
|
-
|
|
5
|
-
// Fallback keys are prefixed and namespaced away from every other
|
|
6
|
-
// AsyncStorage key this SDK writes, so a host that never installs
|
|
7
|
-
// expo-secure-store can still be told apart from one that used to lack
|
|
8
|
-
// it and has since added it (see `secureSet`'s stale-fallback cleanup).
|
|
9
|
-
const FALLBACK_PREFIX = '@ethora/secure-fallback:';
|
|
10
|
-
|
|
11
|
-
let warnedFallback = false;
|
|
12
|
-
const warnFallbackOnce = () => {
|
|
13
|
-
if (warnedFallback) {return;}
|
|
14
|
-
warnedFallback = true;
|
|
15
|
-
pushLog(
|
|
16
|
-
'warn',
|
|
17
|
-
'expo-secure-store is not installed — auth tokens, the XMPP ' +
|
|
18
|
-
'password, and the message-history cipher key are falling back ' +
|
|
19
|
-
'to plain AsyncStorage instead of the platform Keychain/Keystore. ' +
|
|
20
|
-
'Add the optional peer dependency `expo-secure-store` to your app ' +
|
|
21
|
-
'to store them securely.'
|
|
22
|
-
);
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Small-value secure KV store: platform Keychain/Keystore via
|
|
27
|
-
* expo-secure-store when the host has it installed, plain (but still
|
|
28
|
-
* namespaced) AsyncStorage otherwise. NOT for bulk data — see
|
|
29
|
-
* `persistCrypto.ts`'s size note on why message history goes through
|
|
30
|
-
* AES instead of straight into this store.
|
|
31
|
-
*/
|
|
32
|
-
export async function secureGet(key: string): Promise<string | null> {
|
|
33
|
-
const store = loadSecureStore();
|
|
34
|
-
if (store) {
|
|
35
|
-
try {
|
|
36
|
-
return await store.getItemAsync(key);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
pushLog('warn', `secureStore: getItemAsync(${key}) failed`, e);
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
warnFallbackOnce();
|
|
43
|
-
return AsyncStorage.getItem(FALLBACK_PREFIX + key);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export async function secureSet(key: string, value: string): Promise<void> {
|
|
47
|
-
const store = loadSecureStore();
|
|
48
|
-
if (store) {
|
|
49
|
-
try {
|
|
50
|
-
await store.setItemAsync(key, value);
|
|
51
|
-
// Clean up a stale plaintext fallback copy from before this host
|
|
52
|
-
// added expo-secure-store — otherwise it sits on disk forever.
|
|
53
|
-
AsyncStorage.removeItem(FALLBACK_PREFIX + key).catch(() => undefined);
|
|
54
|
-
return;
|
|
55
|
-
} catch (e) {
|
|
56
|
-
pushLog('warn', `secureStore: setItemAsync(${key}) failed`, e);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
warnFallbackOnce();
|
|
61
|
-
await AsyncStorage.setItem(FALLBACK_PREFIX + key, value);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export async function secureRemove(key: string): Promise<void> {
|
|
65
|
-
const store = loadSecureStore();
|
|
66
|
-
if (store) {
|
|
67
|
-
try {
|
|
68
|
-
await store.deleteItemAsync(key);
|
|
69
|
-
} catch {
|
|
70
|
-
// Key may simply not exist — deleteItemAsync throwing here isn't
|
|
71
|
-
// actionable either way.
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
await AsyncStorage.removeItem(FALLBACK_PREFIX + key).catch(() => undefined);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** Test seam only. */
|
|
78
|
-
export const __resetSecureKeyValueWarningForTests = (): void => {
|
|
79
|
-
warnedFallback = false;
|
|
80
|
-
};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optional-dependency bridge for `expo-secure-store` — the Keychain
|
|
3
|
-
* (iOS) / Keystore-backed EncryptedSharedPreferences (Android) API.
|
|
4
|
-
*
|
|
5
|
-
* Mirrors `components/VideoCalls/livekitRuntime.ts`: a plain top-level
|
|
6
|
-
* `import ... from 'expo-secure-store'` is not allowed anywhere in the
|
|
7
|
-
* SDK, since Metro resolves imports at bundle time and a host that
|
|
8
|
-
* hasn't added this optional peer dependency would fail to build over
|
|
9
|
-
* a feature it never opted into. Everything goes through
|
|
10
|
-
* `loadSecureStore()`, which requires the module lazily and returns
|
|
11
|
-
* null when it isn't installed — callers fall back to plain
|
|
12
|
-
* AsyncStorage rather than crash (see `secureKeyValue.ts`).
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export interface SecureStoreRuntime {
|
|
16
|
-
getItemAsync: (key: string) => Promise<string | null>;
|
|
17
|
-
setItemAsync: (key: string, value: string) => Promise<void>;
|
|
18
|
-
deleteItemAsync: (key: string) => Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
let cached: SecureStoreRuntime | null | undefined;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Resolve the SecureStore runtime, or null when the optional native
|
|
25
|
-
* package isn't installed in the host app. Result is memoised
|
|
26
|
-
* (including the failure) so a missing dependency doesn't re-throw on
|
|
27
|
-
* every read/write.
|
|
28
|
-
*/
|
|
29
|
-
export const loadSecureStore = (): SecureStoreRuntime | null => {
|
|
30
|
-
if (cached !== undefined) {
|
|
31
|
-
return cached;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
try {
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
36
|
-
const mod = require('expo-secure-store');
|
|
37
|
-
if (
|
|
38
|
-
typeof mod?.getItemAsync !== 'function' ||
|
|
39
|
-
typeof mod?.setItemAsync !== 'function' ||
|
|
40
|
-
typeof mod?.deleteItemAsync !== 'function'
|
|
41
|
-
) {
|
|
42
|
-
cached = null;
|
|
43
|
-
} else {
|
|
44
|
-
cached = {
|
|
45
|
-
getItemAsync: mod.getItemAsync,
|
|
46
|
-
setItemAsync: mod.setItemAsync,
|
|
47
|
-
deleteItemAsync: mod.deleteItemAsync,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
} catch {
|
|
51
|
-
cached = null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return cached;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
export const isSecureStoreAvailable = (): boolean => loadSecureStore() !== null;
|
|
58
|
-
|
|
59
|
-
/** Test seam only. */
|
|
60
|
-
export const __resetSecureStoreRuntimeForTests = (): void => {
|
|
61
|
-
cached = undefined;
|
|
62
|
-
};
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { User } from '../types/types';
|
|
2
|
-
import { asyncLocalStorage } from '../hooks/useLocalStorage';
|
|
3
|
-
import { localStorageConstants } from './constants/LOCAL_STORAGE';
|
|
4
|
-
import { secureGet, secureSet, secureRemove } from './secureKeyValue';
|
|
5
|
-
|
|
6
|
-
// Keychain (iOS) / Keystore-backed EncryptedSharedPreferences (Android)
|
|
7
|
-
// keys for the four live bearer credentials on `User`. Deliberately one
|
|
8
|
-
// key per field rather than one JSON blob: expo-secure-store historically
|
|
9
|
-
// caps a single value's size on Android, and four short JWTs each stay
|
|
10
|
-
// comfortably under that ceiling where one combined blob might not.
|
|
11
|
-
const SECRET_KEYS = {
|
|
12
|
-
token: 'ethora_auth_token',
|
|
13
|
-
refreshToken: 'ethora_auth_refresh_token',
|
|
14
|
-
xmppPassword: 'ethora_auth_xmpp_password',
|
|
15
|
-
fileToken: 'ethora_auth_file_token',
|
|
16
|
-
} as const;
|
|
17
|
-
|
|
18
|
-
type SecretField = keyof typeof SECRET_KEYS;
|
|
19
|
-
const SECRET_FIELDS = Object.keys(SECRET_KEYS) as SecretField[];
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Persisted-user storage, split across two backends behind the exact
|
|
23
|
-
* same `{ get, set, remove }` shape `asyncLocalStorage<User>(...)`
|
|
24
|
-
* already exposed — every existing call site swaps in by changing only
|
|
25
|
-
* the constructor call, `get()`/`set()`/`remove()` keep returning/taking
|
|
26
|
-
* a complete `User`.
|
|
27
|
-
*
|
|
28
|
-
* The four live credentials (REST access + refresh token, XMPP
|
|
29
|
-
* password, secure-media fileToken) never touch plain AsyncStorage:
|
|
30
|
-
* they go through `secureGet`/`secureSet`/`secureRemove` (platform
|
|
31
|
-
* Keychain/Keystore, falling back to namespaced AsyncStorage only when
|
|
32
|
-
* the host hasn't installed the optional `expo-secure-store` peer dep).
|
|
33
|
-
* Everything else on `User` — name, avatar, ids, xmppUsername, wallet
|
|
34
|
-
* address, none of it a bearer credential — keeps living under the
|
|
35
|
-
* existing `ETHORA_USER` AsyncStorage key, unchanged.
|
|
36
|
-
*/
|
|
37
|
-
export function secureUserStorage() {
|
|
38
|
-
const get = async (): Promise<User | null> => {
|
|
39
|
-
const profile = await asyncLocalStorage<User>(
|
|
40
|
-
localStorageConstants.ETHORA_USER
|
|
41
|
-
).get();
|
|
42
|
-
if (!profile) {return null;}
|
|
43
|
-
|
|
44
|
-
const secretValues = await Promise.all(
|
|
45
|
-
SECRET_FIELDS.map((field) => secureGet(SECRET_KEYS[field]))
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
const merged: User = { ...profile };
|
|
49
|
-
SECRET_FIELDS.forEach((field, i) => {
|
|
50
|
-
(merged as any)[field] = secretValues[i] || '';
|
|
51
|
-
});
|
|
52
|
-
return merged;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const set = async (user: User): Promise<void> => {
|
|
56
|
-
const profile: any = { ...user };
|
|
57
|
-
for (const field of SECRET_FIELDS) {
|
|
58
|
-
profile[field] = '';
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
await Promise.all([
|
|
62
|
-
asyncLocalStorage<User>(localStorageConstants.ETHORA_USER).set(profile),
|
|
63
|
-
...SECRET_FIELDS.map((field) => {
|
|
64
|
-
const value = user?.[field] as string | undefined;
|
|
65
|
-
return value
|
|
66
|
-
? secureSet(SECRET_KEYS[field], value)
|
|
67
|
-
: secureRemove(SECRET_KEYS[field]);
|
|
68
|
-
}),
|
|
69
|
-
]);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const remove = async (): Promise<void> => {
|
|
73
|
-
await Promise.all([
|
|
74
|
-
asyncLocalStorage(localStorageConstants.ETHORA_USER).remove(),
|
|
75
|
-
...SECRET_FIELDS.map((field) => secureRemove(SECRET_KEYS[field])),
|
|
76
|
-
]);
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
return { get, set, remove };
|
|
80
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-level shallow equality for plain objects. Used to avoid re-dispatching
|
|
3
|
-
* config into redux on every render just because the host passed a fresh
|
|
4
|
-
* object literal with the same values (e.g. `<Chat config={{...}} />`
|
|
5
|
-
* re-created inline) — reference equality alone would fire far too often,
|
|
6
|
-
* and a deep/JSON comparison risks throwing on non-serializable fields
|
|
7
|
-
* (functions, React elements) that configs legitimately carry.
|
|
8
|
-
*/
|
|
9
|
-
export function shallowEqual(a: unknown, b: unknown): boolean {
|
|
10
|
-
if (a === b) {return true;}
|
|
11
|
-
if (
|
|
12
|
-
typeof a !== 'object' ||
|
|
13
|
-
typeof b !== 'object' ||
|
|
14
|
-
a === null ||
|
|
15
|
-
b === null
|
|
16
|
-
) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const aKeys = Object.keys(a as Record<string, unknown>);
|
|
20
|
-
const bKeys = Object.keys(b as Record<string, unknown>);
|
|
21
|
-
if (aKeys.length !== bKeys.length) {return false;}
|
|
22
|
-
for (const key of aKeys) {
|
|
23
|
-
if (
|
|
24
|
-
(a as Record<string, unknown>)[key] !==
|
|
25
|
-
(b as Record<string, unknown>)[key]
|
|
26
|
-
) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export default shallowEqual;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** @format */
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Shared thresholds for the drag-to-dismiss gesture on bottom sheets (the
|
|
5
|
-
* attach sheet, the profile headers, the room-list menu). Kept in one
|
|
6
|
-
* place so a pull feels identical wherever the user does it — and so the
|
|
7
|
-
* numbers are unit-testable without a touch event.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** Drag past this many points and letting go dismisses the sheet. */
|
|
11
|
-
export const DISMISS_DISTANCE = 90;
|
|
12
|
-
/** …or flick faster than this, however short the drag. */
|
|
13
|
-
export const DISMISS_VELOCITY = 0.8;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Claim a drag only once it is clearly a downward pull, so a tap on a row
|
|
17
|
-
* still registers and a horizontal swipe stays with whatever scrolls
|
|
18
|
-
* sideways inside the sheet.
|
|
19
|
-
*/
|
|
20
|
-
export const shouldClaimVerticalDrag = (dy: number, dx: number) =>
|
|
21
|
-
dy > 6 && Math.abs(dy) > Math.abs(dx) * 1.5;
|
|
22
|
-
|
|
23
|
-
/** Far enough / fast enough to let go of the sheet. */
|
|
24
|
-
export const shouldDismissOnDrag = (dy: number, vy: number) =>
|
|
25
|
-
dy > DISMISS_DISTANCE || vy > DISMISS_VELOCITY;
|