@ethora/chat-component-rn 26.8.5 → 26.8.7
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 +26 -0
- package/README.md +95 -0
- package/lib/commonjs/assets/emojiData.js +40 -0
- package/lib/commonjs/assets/emojiData.js.map +1 -0
- package/lib/commonjs/assets/icons.js +5 -3
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +35 -15
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +33 -24
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +22 -16
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +4 -12
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +110 -35
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +32 -29
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomStack.js +133 -65
- package/lib/commonjs/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
- package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/commonjs/components/MainComponents/SystemMessage.js +6 -2
- package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js +5 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +18 -21
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js +447 -0
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/Message.js +264 -136
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +215 -13
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReaction.js +113 -94
- package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReply.js +66 -24
- package/lib/commonjs/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +159 -16
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +29 -6
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +5 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +273 -152
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/UsersList/UsersList.js +2 -1
- package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
- package/lib/commonjs/components/styled/DateLabel.js +6 -3
- package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +4 -2
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +188 -9
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +22 -7
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/e2ee/crypto.js +207 -0
- package/lib/commonjs/e2ee/crypto.js.map +1 -0
- package/lib/commonjs/e2ee/deviceStore.js +84 -0
- package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
- package/lib/commonjs/e2ee/fileCipher.js +95 -0
- package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
- package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
- package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
- package/lib/commonjs/e2ee/index.js +210 -0
- package/lib/commonjs/e2ee/index.js.map +1 -0
- package/lib/commonjs/e2ee/limits.js +9 -0
- package/lib/commonjs/e2ee/limits.js.map +1 -0
- package/lib/commonjs/e2ee/ns.js +8 -0
- package/lib/commonjs/e2ee/ns.js.map +1 -0
- package/lib/commonjs/e2ee/omemo.js +622 -0
- package/lib/commonjs/e2ee/omemo.js.map +1 -0
- package/lib/commonjs/e2ee/protobuf.js +149 -0
- package/lib/commonjs/e2ee/protobuf.js.map +1 -0
- package/lib/commonjs/e2ee/ratchet.js +238 -0
- package/lib/commonjs/e2ee/ratchet.js.map +1 -0
- package/lib/commonjs/e2ee/sealedBody.js +23 -0
- package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
- package/lib/commonjs/e2ee/sealedFiles.js +174 -0
- package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
- package/lib/commonjs/e2ee/send.js +54 -0
- package/lib/commonjs/e2ee/send.js.map +1 -0
- package/lib/commonjs/e2ee/stanza.js +114 -0
- package/lib/commonjs/e2ee/stanza.js.map +1 -0
- package/lib/commonjs/e2ee/store.js +43 -0
- package/lib/commonjs/e2ee/store.js.map +1 -0
- package/lib/commonjs/helpers/accountName.js +23 -0
- package/lib/commonjs/helpers/accountName.js.map +1 -0
- package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
- package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
- package/lib/commonjs/helpers/createRoomFromApi.js +36 -2
- package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/commonjs/helpers/displayName.js +16 -0
- package/lib/commonjs/helpers/displayName.js.map +1 -0
- package/lib/commonjs/helpers/emoji.js +51 -0
- package/lib/commonjs/helpers/emoji.js.map +1 -0
- package/lib/commonjs/helpers/haptics.js +29 -0
- package/lib/commonjs/helpers/haptics.js.map +1 -0
- package/lib/commonjs/helpers/historyPreloadScheduler.js +32 -66
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/mamReactions.js +57 -0
- package/lib/commonjs/helpers/mamReactions.js.map +1 -0
- package/lib/commonjs/helpers/parseMessageReference.js +42 -0
- package/lib/commonjs/helpers/parseMessageReference.js.map +1 -0
- package/lib/commonjs/helpers/persistCrypto.js +5 -0
- package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
- package/lib/commonjs/helpers/reactionsConfig.js +17 -0
- package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
- package/lib/commonjs/helpers/secureKeyValue.js +20 -0
- package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
- package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
- package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/commonjs/helpers/videoCache.js +136 -0
- package/lib/commonjs/helpers/videoCache.js.map +1 -0
- package/lib/commonjs/hooks/useHeapSender.js +3 -1
- package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +8 -0
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useMessageHeapState.js +3 -2
- package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
- package/lib/commonjs/hooks/useRoomInitialization.js +16 -7
- package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +85 -15
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +180 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +13 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js +106 -50
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +44 -0
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/mamRouter.js +186 -0
- package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +41 -4
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +104 -23
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js +51 -0
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +88 -68
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/index.js +18 -14
- package/lib/commonjs/roomStore/index.js.map +1 -1
- package/lib/commonjs/roomStore/persistBackend.js +93 -0
- package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
- package/lib/commonjs/roomStore/persistence.js +253 -51
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +282 -136
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/theme/theme.js +3 -0
- package/lib/commonjs/theme/theme.js.map +1 -1
- package/lib/commonjs/utils/devLogger.js +14 -0
- package/lib/commonjs/utils/devLogger.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/assets/emojiData.js +36 -0
- package/lib/module/assets/emojiData.js.map +1 -0
- package/lib/module/assets/icons.js +4 -2
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +37 -17
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +34 -25
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +23 -17
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
- package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
- package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/module/components/MainComponents/MediaMessage.js +7 -0
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +7 -14
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +110 -35
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +32 -29
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/MainComponents/RoomStack.js +131 -63
- package/lib/module/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
- package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/module/components/MainComponents/SystemMessage.js +6 -2
- package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/Avatar.js +5 -1
- package/lib/module/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/module/components/MessageBubble/BottomReplyContainer.js +19 -22
- package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js +438 -0
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/module/components/MessageBubble/Message.js +269 -140
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +217 -15
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReaction.js +115 -94
- package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReply.js +65 -24
- package/lib/module/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +161 -18
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +32 -8
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +4 -0
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +273 -153
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/UsersList/UsersList.js +2 -1
- package/lib/module/components/UsersList/UsersList.js.map +1 -1
- package/lib/module/components/styled/DateLabel.js +6 -3
- package/lib/module/components/styled/DateLabel.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +4 -2
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +190 -11
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/context/xmppProvider.js +22 -7
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/e2ee/crypto.js +170 -0
- package/lib/module/e2ee/crypto.js.map +1 -0
- package/lib/module/e2ee/deviceStore.js +77 -0
- package/lib/module/e2ee/deviceStore.js.map +1 -0
- package/lib/module/e2ee/fileCipher.js +90 -0
- package/lib/module/e2ee/fileCipher.js.map +1 -0
- package/lib/module/e2ee/fileEnvelope.js +66 -0
- package/lib/module/e2ee/fileEnvelope.js.map +1 -0
- package/lib/module/e2ee/index.js +185 -0
- package/lib/module/e2ee/index.js.map +1 -0
- package/lib/module/e2ee/limits.js +5 -0
- package/lib/module/e2ee/limits.js.map +1 -0
- package/lib/module/e2ee/ns.js +4 -0
- package/lib/module/e2ee/ns.js.map +1 -0
- package/lib/module/e2ee/omemo.js +610 -0
- package/lib/module/e2ee/omemo.js.map +1 -0
- package/lib/module/e2ee/protobuf.js +140 -0
- package/lib/module/e2ee/protobuf.js.map +1 -0
- package/lib/module/e2ee/ratchet.js +228 -0
- package/lib/module/e2ee/ratchet.js.map +1 -0
- package/lib/module/e2ee/sealedBody.js +19 -0
- package/lib/module/e2ee/sealedBody.js.map +1 -0
- package/lib/module/e2ee/sealedFiles.js +154 -0
- package/lib/module/e2ee/sealedFiles.js.map +1 -0
- package/lib/module/e2ee/send.js +48 -0
- package/lib/module/e2ee/send.js.map +1 -0
- package/lib/module/e2ee/stanza.js +107 -0
- package/lib/module/e2ee/stanza.js.map +1 -0
- package/lib/module/e2ee/store.js +35 -0
- package/lib/module/e2ee/store.js.map +1 -0
- package/lib/module/helpers/accountName.js +18 -0
- package/lib/module/helpers/accountName.js.map +1 -0
- package/lib/module/helpers/createMessageFromXml.js +19 -4
- package/lib/module/helpers/createMessageFromXml.js.map +1 -1
- package/lib/module/helpers/createRoomFromApi.js +36 -2
- package/lib/module/helpers/createRoomFromApi.js.map +1 -1
- package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
- package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/module/helpers/displayName.js +11 -0
- package/lib/module/helpers/displayName.js.map +1 -0
- package/lib/module/helpers/emoji.js +44 -0
- package/lib/module/helpers/emoji.js.map +1 -0
- package/lib/module/helpers/haptics.js +24 -0
- package/lib/module/helpers/haptics.js.map +1 -0
- package/lib/module/helpers/historyPreloadScheduler.js +32 -66
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/mamReactions.js +51 -0
- package/lib/module/helpers/mamReactions.js.map +1 -0
- package/lib/module/helpers/parseMessageReference.js +37 -0
- package/lib/module/helpers/parseMessageReference.js.map +1 -0
- package/lib/module/helpers/persistCrypto.js +4 -0
- package/lib/module/helpers/persistCrypto.js.map +1 -1
- package/lib/module/helpers/reactionsConfig.js +10 -0
- package/lib/module/helpers/reactionsConfig.js.map +1 -0
- package/lib/module/helpers/secureKeyValue.js +19 -0
- package/lib/module/helpers/secureKeyValue.js.map +1 -1
- package/lib/module/helpers/updateMessagesTillLast.js +17 -2
- package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/module/helpers/videoCache.js +125 -0
- package/lib/module/helpers/videoCache.js.map +1 -0
- package/lib/module/hooks/useHeapSender.js +3 -1
- package/lib/module/hooks/useHeapSender.js.map +1 -1
- package/lib/module/hooks/useLogout.js +8 -0
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useMessageHeapState.js +3 -2
- package/lib/module/hooks/useMessageHeapState.js.map +1 -1
- package/lib/module/hooks/useRoomInitialization.js +17 -8
- package/lib/module/hooks/useRoomInitialization.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +85 -15
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/module/i18n/strings.js +180 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +1 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +4 -1
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +109 -18
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/stanzaHandlers.js +107 -51
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js +42 -0
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/mamRouter.js +175 -0
- package/lib/module/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +38 -2
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +105 -24
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/perfMiddleware.js +45 -0
- package/lib/module/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/unreadMidlleware.js +89 -69
- package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/module/roomStore/index.js +19 -15
- package/lib/module/roomStore/index.js.map +1 -1
- package/lib/module/roomStore/persistBackend.js +86 -0
- package/lib/module/roomStore/persistBackend.js.map +1 -0
- package/lib/module/roomStore/persistence.js +253 -49
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +275 -134
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/theme/theme.js +3 -0
- package/lib/module/theme/theme.js.map +1 -1
- package/lib/module/utils/devLogger.js +13 -0
- package/lib/module/utils/devLogger.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/assets/emojiData.d.ts +8 -0
- package/lib/typescript/assets/emojiData.d.ts.map +1 -0
- package/lib/typescript/assets/icons.d.ts +8 -0
- package/lib/typescript/assets/icons.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/EncryptedSendNotice.d.ts +4 -0
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts +2 -2
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomStack.d.ts +7 -2
- package/lib/typescript/components/MainComponents/RoomStack.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Avatar.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/Avatar.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts +11 -0
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/Message.d.ts +2 -2
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts +1 -0
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts +7 -7
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.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/SwipeBackLayer.d.ts +2 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts +2 -2
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts +3 -6
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts +7 -1
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
- package/lib/typescript/components/styled/DateLabel.d.ts +1 -0
- package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts +1 -0
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/e2ee/crypto.d.ts +28 -0
- package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
- package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
- package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
- package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
- package/lib/typescript/e2ee/index.d.ts +23 -0
- package/lib/typescript/e2ee/index.d.ts.map +1 -0
- package/lib/typescript/e2ee/limits.d.ts +3 -0
- package/lib/typescript/e2ee/limits.d.ts.map +1 -0
- package/lib/typescript/e2ee/ns.d.ts +2 -0
- package/lib/typescript/e2ee/ns.d.ts.map +1 -0
- package/lib/typescript/e2ee/omemo.d.ts +64 -0
- package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
- package/lib/typescript/e2ee/protobuf.d.ts +25 -0
- package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
- package/lib/typescript/e2ee/ratchet.d.ts +39 -0
- package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
- package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
- package/lib/typescript/e2ee/send.d.ts +6 -0
- package/lib/typescript/e2ee/send.d.ts.map +1 -0
- package/lib/typescript/e2ee/stanza.d.ts +8 -0
- package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
- package/lib/typescript/e2ee/store.d.ts +16 -0
- package/lib/typescript/e2ee/store.d.ts.map +1 -0
- package/lib/typescript/helpers/accountName.d.ts +7 -0
- package/lib/typescript/helpers/accountName.d.ts.map +1 -0
- package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
- package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
- package/lib/typescript/helpers/displayName.d.ts +2 -0
- package/lib/typescript/helpers/displayName.d.ts.map +1 -0
- package/lib/typescript/helpers/emoji.d.ts +6 -0
- package/lib/typescript/helpers/emoji.d.ts.map +1 -0
- package/lib/typescript/helpers/haptics.d.ts +3 -0
- package/lib/typescript/helpers/haptics.d.ts.map +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/mamReactions.d.ts +13 -0
- package/lib/typescript/helpers/mamReactions.d.ts.map +1 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts +16 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
- package/lib/typescript/helpers/reactionsConfig.d.ts +5 -0
- package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
- package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
- package/lib/typescript/helpers/videoCache.d.ts +19 -0
- package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
- package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomInitialization.d.ts +2 -2
- package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +2 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts +4 -2
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +3 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/mamRouter.d.ts +23 -0
- package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +22 -1
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/newMessageMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts +4 -0
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts.map +1 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts +9 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/index.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistBackend.d.ts +11 -0
- package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -0
- package/lib/typescript/roomStore/persistence.d.ts +5 -6
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +41 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/theme/theme.d.ts +4 -1
- package/lib/typescript/theme/theme.d.ts.map +1 -1
- package/lib/typescript/types/models/message.model.d.ts +9 -0
- package/lib/typescript/types/models/message.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +21 -0
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts +6 -1
- package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +19 -3
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/utils/devLogger.d.ts +8 -0
- package/lib/typescript/utils/devLogger.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +14 -1
- package/src/assets/emojiData.ts +2146 -0
- package/src/assets/icons.tsx +32 -5
- package/src/components/MainComponents/ChatHeader.tsx +46 -16
- package/src/components/MainComponents/ChatRoom.tsx +46 -30
- package/src/components/MainComponents/ChatWrapper.tsx +28 -10
- package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
- package/src/components/MainComponents/EncryptionCard.tsx +287 -0
- package/src/components/MainComponents/MediaMessage.tsx +5 -0
- package/src/components/MainComponents/MessageContainer.tsx +7 -15
- package/src/components/MainComponents/MessageList.tsx +96 -43
- package/src/components/MainComponents/ReduxWrapper.tsx +5 -0
- package/src/components/MainComponents/RoomList.tsx +28 -29
- package/src/components/MainComponents/RoomStack.tsx +156 -83
- package/src/components/MainComponents/SealedAttachment.tsx +251 -0
- package/src/components/MainComponents/SystemMessage.tsx +6 -2
- package/src/components/MessageBubble/Avatar.tsx +7 -1
- package/src/components/MessageBubble/BottomReplyContainer.tsx +20 -21
- package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
- package/src/components/MessageBubble/Message.tsx +242 -93
- package/src/components/MessageBubble/MessageInteractions.tsx +215 -15
- package/src/components/MessageBubble/MessageReaction.tsx +120 -96
- package/src/components/MessageBubble/MessageReply.tsx +65 -32
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +7 -4
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +181 -35
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
- package/src/components/Modals/Modal/SwipeBackLayer.tsx +114 -63
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +53 -8
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +5 -0
- package/src/components/RoomComponents/ChatRoomItem.tsx +34 -15
- package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
- package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
- package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
- package/src/components/Thread/ThreadWrapper.tsx +287 -198
- package/src/components/UsersList/UsersList.tsx +2 -1
- package/src/components/styled/DateLabel.tsx +7 -3
- package/src/components/styled/SendInput.tsx +5 -2
- package/src/context/MessageNotificationContext.tsx +205 -7
- package/src/context/xmppProvider.tsx +29 -9
- package/src/e2ee/crypto.ts +194 -0
- package/src/e2ee/deviceStore.ts +80 -0
- package/src/e2ee/fileCipher.ts +86 -0
- package/src/e2ee/fileEnvelope.ts +115 -0
- package/src/e2ee/index.ts +192 -0
- package/src/e2ee/limits.ts +2 -0
- package/src/e2ee/ns.ts +1 -0
- package/src/e2ee/omemo.ts +802 -0
- package/src/e2ee/protobuf.ts +188 -0
- package/src/e2ee/ratchet.ts +271 -0
- package/src/e2ee/sealedBody.ts +17 -0
- package/src/e2ee/sealedFiles.ts +181 -0
- package/src/e2ee/send.ts +70 -0
- package/src/e2ee/stanza.ts +133 -0
- package/src/e2ee/store.ts +54 -0
- package/src/helpers/accountName.ts +15 -0
- package/src/helpers/createMessageFromXml.ts +31 -6
- package/src/helpers/createRoomFromApi.tsx +37 -1
- package/src/helpers/createUserNameFromSetUser.ts +2 -1
- package/src/helpers/displayName.ts +9 -0
- package/src/helpers/emoji.ts +39 -0
- package/src/helpers/haptics.ts +19 -0
- package/src/helpers/historyPreloadScheduler.ts +37 -69
- package/src/helpers/insertMessageWithDelimiter.ts +23 -16
- package/src/helpers/mamReactions.ts +59 -0
- package/src/helpers/parseMessageReference.ts +38 -0
- package/src/helpers/persistCrypto.ts +5 -0
- package/src/helpers/reactionsConfig.ts +13 -0
- package/src/helpers/secureKeyValue.ts +15 -0
- package/src/helpers/updateMessagesTillLast.tsx +14 -2
- package/src/helpers/videoCache.ts +138 -0
- package/src/hooks/useHeapSender.tsx +3 -2
- package/src/hooks/useLogout.tsx +9 -0
- package/src/hooks/useMessageHeapState.tsx +6 -2
- package/src/hooks/useRoomInitialization.tsx +32 -15
- package/src/hooks/useSendMessage.tsx +89 -16
- package/src/hooks/useUnreadMessagesCounter.ts +1 -1
- package/src/i18n/strings.ts +180 -0
- package/src/main.ts +2 -0
- package/src/networking/api-requests/auth.api.ts +9 -1
- package/src/networking/api-requests/rooms.api.ts +121 -18
- package/src/networking/stanzaHandlers.ts +116 -60
- package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
- package/src/networking/xmpp/handleStanzas.xmpp.ts +51 -0
- package/src/networking/xmpp/mamRouter.ts +176 -0
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
- package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
- package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
- package/src/networking/xmppClient.ts +111 -20
- package/src/roomStore/Middleware/newMessageMidlleware.tsx +35 -38
- package/src/roomStore/Middleware/perfMiddleware.ts +50 -0
- package/src/roomStore/Middleware/reactionsMiddleware.tsx +53 -52
- package/src/roomStore/Middleware/unreadMidlleware.tsx +92 -80
- package/src/roomStore/index.ts +28 -27
- package/src/roomStore/persistBackend.ts +93 -0
- package/src/roomStore/persistence.ts +295 -73
- package/src/roomStore/roomsSlice.ts +304 -155
- package/src/theme/theme.ts +10 -1
- package/src/types/models/message.model.ts +9 -0
- package/src/types/models/room.model.ts +22 -0
- package/src/types/models/xmpp.model.ts +4 -2
- package/src/types/types.ts +19 -3
- package/src/utils/devLogger.ts +16 -0
- package/src/version.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApiRoom, DeleteRoomMember, PostAddRoomMember, PostReportRoom, PostRoom, RoomMember } from '../../types/models/room.model';
|
|
2
2
|
import { store } from '../../roomStore';
|
|
3
|
-
import { addRoom, mergeUsersSet } from '../../roomStore/roomsSlice';
|
|
3
|
+
import { addRoom, mergeUsersSet, updateRoom } from '../../roomStore/roomsSlice';
|
|
4
4
|
import { IRoom } from '../../types/types';
|
|
5
5
|
import http from '../apiClient';
|
|
6
6
|
|
|
@@ -19,6 +19,11 @@ import http from '../apiClient';
|
|
|
19
19
|
* - `_id` (fallback)
|
|
20
20
|
* - `xmppUsername` (raw + localpart) when the API does return one
|
|
21
21
|
*/
|
|
22
|
+
const usableImage = (value: unknown): string => {
|
|
23
|
+
const url = typeof value === 'string' ? value.trim() : '';
|
|
24
|
+
return url && url !== 'none' ? url : '';
|
|
25
|
+
};
|
|
26
|
+
|
|
22
27
|
function dispatchUsersSetFromRestItems(items: ApiRoom[]): void {
|
|
23
28
|
if (!items?.length) {return;}
|
|
24
29
|
const ownXmpp = String(
|
|
@@ -26,16 +31,24 @@ function dispatchUsersSetFromRestItems(items: ApiRoom[]): void {
|
|
|
26
31
|
);
|
|
27
32
|
const appId = ownXmpp.includes('_') ? ownXmpp.split('_')[0] : '';
|
|
28
33
|
|
|
34
|
+
const known = (store.getState().rooms?.usersSet || {}) as Record<string, RoomMember>;
|
|
29
35
|
const members: Record<string, RoomMember> = {};
|
|
30
36
|
for (const item of items) {
|
|
31
37
|
const list = Array.isArray((item as any)?.members) ? (item as any).members : [];
|
|
32
38
|
for (const m of list) {
|
|
33
39
|
if (!m) {continue;}
|
|
40
|
+
const before: RoomMember | undefined =
|
|
41
|
+
(m._id && (members[m._id] || known[m._id])) || undefined;
|
|
34
42
|
const entry: RoomMember = {
|
|
35
|
-
firstName: m.firstName
|
|
36
|
-
lastName: m.lastName
|
|
43
|
+
firstName: m.firstName ?? before?.firstName ?? '',
|
|
44
|
+
lastName: m.lastName ?? before?.lastName ?? '',
|
|
37
45
|
xmppUsername: m.xmppUsername || (appId && m._id ? `${appId}_${m._id}` : m._id || ''),
|
|
38
46
|
_id: m._id || '',
|
|
47
|
+
profileImage:
|
|
48
|
+
m.profileImage !== undefined
|
|
49
|
+
? usableImage(m.profileImage)
|
|
50
|
+
: before?.profileImage ?? '',
|
|
51
|
+
description: m.description ?? before?.description,
|
|
39
52
|
role: m.role,
|
|
40
53
|
ban_status: m.ban_status,
|
|
41
54
|
last_active: m.last_active,
|
|
@@ -85,9 +98,53 @@ interface ApiRoomMember {
|
|
|
85
98
|
* manifested as a phantom "ethora" room stub on third-party servers,
|
|
86
99
|
* customer-reported #23)
|
|
87
100
|
*/
|
|
101
|
+
export function memberAccount(member: any, appId: string): string {
|
|
102
|
+
const explicit = String(member?.xmppUsername || '').split('@')[0];
|
|
103
|
+
if (explicit) {return explicit;}
|
|
104
|
+
return appId && member?._id ? `${appId}_${member._id}` : '';
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function ownAppId(): string {
|
|
108
|
+
const ownXmpp = String(
|
|
109
|
+
store.getState().chatSettingStore?.user?.xmppUsername || ''
|
|
110
|
+
);
|
|
111
|
+
return ownXmpp.includes('_') ? ownXmpp.split('_')[0]! : '';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const toRoomMembers = (members: any[] | undefined): RoomMember[] => {
|
|
115
|
+
const known = (store.getState().rooms?.usersSet || {}) as Record<string, RoomMember>;
|
|
116
|
+
return (members || []).map((m: any) => ({
|
|
117
|
+
firstName: m.firstName,
|
|
118
|
+
lastName: m.lastName,
|
|
119
|
+
profileImage:
|
|
120
|
+
m.profileImage !== undefined
|
|
121
|
+
? usableImage(m.profileImage)
|
|
122
|
+
: known[m._id]?.profileImage ?? '',
|
|
123
|
+
xmppUsername: m._id || '',
|
|
124
|
+
role: m.role,
|
|
125
|
+
ban_status: m.ban_status,
|
|
126
|
+
last_active: m.last_active,
|
|
127
|
+
jid: m.jid || '',
|
|
128
|
+
})) as any;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const toE2eeMembers = (members: any[] | undefined, appId: string): RoomMember[] =>
|
|
132
|
+
(members || [])
|
|
133
|
+
.map((m: any) => ({
|
|
134
|
+
_id: m._id || '',
|
|
135
|
+
firstName: m.firstName || '',
|
|
136
|
+
lastName: m.lastName || '',
|
|
137
|
+
xmppUsername: memberAccount(m, appId),
|
|
138
|
+
}))
|
|
139
|
+
.filter((m) => m.xmppUsername) as RoomMember[];
|
|
140
|
+
|
|
141
|
+
const memberCount = (item: ApiRoom): number =>
|
|
142
|
+
item.usersCnt ?? item.participants ?? item.members?.length ?? 0;
|
|
143
|
+
|
|
88
144
|
function dispatchRoomsFromRestItems(items: ApiRoom[]): void {
|
|
89
145
|
if (!items?.length) return;
|
|
90
146
|
const config = store.getState().chatSettingStore?.config as any;
|
|
147
|
+
const appId = ownAppId();
|
|
91
148
|
// Best: explicit xmpp settings.
|
|
92
149
|
let host: string | undefined =
|
|
93
150
|
config?.xmppSettings?.host ||
|
|
@@ -118,12 +175,16 @@ function dispatchRoomsFromRestItems(items: ApiRoom[]): void {
|
|
|
118
175
|
jid = `${item.name}@${conference}`;
|
|
119
176
|
}
|
|
120
177
|
if (!jid.includes('@')) continue;
|
|
178
|
+
const known = store.getState().rooms.rooms?.[jid];
|
|
179
|
+
const preview = (item.members?.length ?? 0) < memberCount(item);
|
|
180
|
+
const keep = <T,>(fresh: T[], existing: T[] | undefined): T[] =>
|
|
181
|
+
preview && (existing?.length ?? 0) > fresh.length ? existing! : fresh;
|
|
121
182
|
const room: IRoom = {
|
|
122
183
|
id: item._id || jid,
|
|
123
184
|
jid,
|
|
124
185
|
name: item.name,
|
|
125
186
|
title: item.title || item.name,
|
|
126
|
-
usersCnt: item
|
|
187
|
+
usersCnt: memberCount(item),
|
|
127
188
|
messages: [],
|
|
128
189
|
isLoading: false,
|
|
129
190
|
roomBg: '',
|
|
@@ -133,18 +194,14 @@ function dispatchRoomsFromRestItems(items: ApiRoom[]): void {
|
|
|
133
194
|
muted: item.muted === true,
|
|
134
195
|
description: (item as any).description,
|
|
135
196
|
type: (item as any).type,
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
ban_status: m.ban_status,
|
|
145
|
-
last_active: m.last_active,
|
|
146
|
-
jid: m.jid || '',
|
|
147
|
-
})) as any,
|
|
197
|
+
|
|
198
|
+
...(item.e2ee === true
|
|
199
|
+
? {
|
|
200
|
+
e2ee: true,
|
|
201
|
+
members: keep(toE2eeMembers(item.members, appId), known?.members),
|
|
202
|
+
}
|
|
203
|
+
: {}),
|
|
204
|
+
roomMembers: keep(toRoomMembers(item.members), known?.roomMembers),
|
|
148
205
|
};
|
|
149
206
|
store.dispatch(addRoom({ roomData: room }));
|
|
150
207
|
}
|
|
@@ -152,6 +209,51 @@ function dispatchRoomsFromRestItems(items: ApiRoom[]): void {
|
|
|
152
209
|
dispatchUsersSetFromRestItems(items);
|
|
153
210
|
}
|
|
154
211
|
|
|
212
|
+
const ROOM_MEMBERS_TTL_MS = 5 * 60_000;
|
|
213
|
+
const roomMembersLoads = new Map<string, { at: number; done: Promise<boolean> }>();
|
|
214
|
+
|
|
215
|
+
export function loadRoomMembers(roomJid: string): Promise<boolean> {
|
|
216
|
+
const jid = String(roomJid || '').split('/')[0]!;
|
|
217
|
+
const room = store.getState().rooms.rooms?.[jid];
|
|
218
|
+
if (!room) {return Promise.resolve(false);}
|
|
219
|
+
if ((room.roomMembers?.length ?? 0) >= Number(room.usersCnt || 0)) {
|
|
220
|
+
return Promise.resolve(false);
|
|
221
|
+
}
|
|
222
|
+
const running = roomMembersLoads.get(jid);
|
|
223
|
+
if (running && Date.now() - running.at < ROOM_MEMBERS_TTL_MS) {return running.done;}
|
|
224
|
+
|
|
225
|
+
const done = (async () => {
|
|
226
|
+
try {
|
|
227
|
+
const response: any = await getRoomByName(jid.split('@')[0]!);
|
|
228
|
+
const item: ApiRoom = response?.result ?? response;
|
|
229
|
+
const members = Array.isArray(item?.members) ? item.members : [];
|
|
230
|
+
if (members.length === 0) {return false;}
|
|
231
|
+
dispatchUsersSetFromRestItems([item]);
|
|
232
|
+
const current = store.getState().rooms.rooms?.[jid];
|
|
233
|
+
if (!current) {return false;}
|
|
234
|
+
store.dispatch(
|
|
235
|
+
updateRoom({
|
|
236
|
+
jid,
|
|
237
|
+
updates: {
|
|
238
|
+
roomMembers: toRoomMembers(members),
|
|
239
|
+
usersCnt: Math.max(memberCount(item), members.length),
|
|
240
|
+
...(current.e2ee
|
|
241
|
+
? { members: toE2eeMembers(members, ownAppId()) }
|
|
242
|
+
: {}),
|
|
243
|
+
},
|
|
244
|
+
})
|
|
245
|
+
);
|
|
246
|
+
return true;
|
|
247
|
+
} catch (error) {
|
|
248
|
+
roomMembersLoads.delete(jid);
|
|
249
|
+
console.warn('[ethora-rn] rooms.api: could not load room members', jid, error);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
})();
|
|
253
|
+
roomMembersLoads.set(jid, { at: Date.now(), done });
|
|
254
|
+
return done;
|
|
255
|
+
}
|
|
256
|
+
|
|
155
257
|
const GET_ROOMS_CACHE_MS = 60_000;
|
|
156
258
|
let getRoomsInFlight: Promise<{ items: ApiRoom[] }> | null = null;
|
|
157
259
|
let getRoomsInFlightToken = '';
|
|
@@ -235,14 +337,14 @@ export async function postRoom(data: PostRoom) {
|
|
|
235
337
|
|
|
236
338
|
export async function postPrivateRoom(
|
|
237
339
|
username: string,
|
|
238
|
-
|
|
340
|
+
e2ee: boolean = false
|
|
239
341
|
): Promise<ApiRoom> {
|
|
240
342
|
const token = store.getState().chatSettingStore.user.token || '';
|
|
241
343
|
|
|
242
344
|
try {
|
|
243
345
|
const response = await http.post(
|
|
244
346
|
'/v1/chats/private',
|
|
245
|
-
{ username },
|
|
347
|
+
e2ee === true ? { username, e2ee: true } : { username },
|
|
246
348
|
{
|
|
247
349
|
headers: {
|
|
248
350
|
Authorization: token,
|
|
@@ -391,6 +493,7 @@ export async function createChatCall(
|
|
|
391
493
|
}
|
|
392
494
|
|
|
393
495
|
export function clearRoomsRestCache() {
|
|
496
|
+
roomMembersLoads.clear();
|
|
394
497
|
lastGetRoomsResponse = null;
|
|
395
498
|
lastGetRoomsResponseAt = 0;
|
|
396
499
|
lastGetRoomsResponseToken = '';
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { Element } from 'ltx';
|
|
2
2
|
import { store } from '../roomStore';
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
claimMamResult,
|
|
5
|
+
collectMamMessage,
|
|
6
|
+
collectMamReaction,
|
|
7
|
+
} from './xmpp/mamRouter';
|
|
8
|
+
import { extractReaction } from '../helpers/mamReactions';
|
|
9
|
+
import {
|
|
10
|
+
addRooms,
|
|
5
11
|
addRoomMessage,
|
|
6
12
|
deleteRoomMessage,
|
|
7
13
|
editRoomMessage,
|
|
8
14
|
setComposing,
|
|
9
15
|
setCurrentRoom,
|
|
10
16
|
setRoomRole,
|
|
17
|
+
setReactions,
|
|
11
18
|
} from '../roomStore/roomsSlice';
|
|
12
|
-
import { IRoom } from '../types/types';
|
|
19
|
+
import { IMessage, IRoom } from '../types/types';
|
|
13
20
|
import { createMessageFromXml } from '../helpers/createMessageFromXml';
|
|
14
21
|
import { getDataFromXml } from '../helpers/getDataFromXml';
|
|
15
22
|
import { setDeleteModal } from '../roomStore/chatSettingsSlice';
|
|
@@ -33,7 +40,8 @@ const onRealtimeMessage = async (stanza: Element) => {
|
|
|
33
40
|
!stanza.getChild('paused') &&
|
|
34
41
|
!stanza.getChild('subject') &&
|
|
35
42
|
!stanza.is('iq') &&
|
|
36
|
-
stanza.attrs.id !== 'deleteMessageStanza'
|
|
43
|
+
stanza.attrs.id !== 'deleteMessageStanza' &&
|
|
44
|
+
!stanza.getChild('reactions')
|
|
37
45
|
) {
|
|
38
46
|
const body = stanza?.getChild('body');
|
|
39
47
|
const archived = stanza?.getChild('archived');
|
|
@@ -47,8 +55,6 @@ const onRealtimeMessage = async (stanza: Element) => {
|
|
|
47
55
|
?.getChild('deleted');
|
|
48
56
|
|
|
49
57
|
if (!data) {
|
|
50
|
-
console.log(stanza.toString());
|
|
51
|
-
console.log('Missing data elements in real-time message.');
|
|
52
58
|
return;
|
|
53
59
|
}
|
|
54
60
|
|
|
@@ -66,8 +72,6 @@ const onRealtimeMessage = async (stanza: Element) => {
|
|
|
66
72
|
// to the same tolerance.
|
|
67
73
|
const senderJID = data.attrs.senderJID || stanza.attrs.from;
|
|
68
74
|
if (!senderJID) {
|
|
69
|
-
console.log(stanza.toString());
|
|
70
|
-
console.log('Missing sender information in real-time message.');
|
|
71
75
|
return;
|
|
72
76
|
}
|
|
73
77
|
|
|
@@ -189,11 +193,36 @@ const onEditMessage = async (stanza: Element) => {
|
|
|
189
193
|
}
|
|
190
194
|
};
|
|
191
195
|
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
const isMamResult = (stanza: any): boolean =>
|
|
197
|
+
!!stanza?.is?.('message') &&
|
|
198
|
+
stanza.children?.[0]?.attrs?.xmlns === 'urn:xmpp:mam:2';
|
|
199
|
+
|
|
200
|
+
const parseMamResult = async (stanza: any): Promise<IMessage | undefined> => {
|
|
201
|
+
{
|
|
202
|
+
const forwardedMsg = stanza
|
|
203
|
+
.getChild('result')
|
|
204
|
+
?.getChild('forwarded')
|
|
205
|
+
?.getChild('message');
|
|
206
|
+
if (forwardedMsg?.getChild?.('reactions')) {
|
|
207
|
+
const reaction = extractReaction(
|
|
208
|
+
forwardedMsg,
|
|
209
|
+
stanza.attrs?.from,
|
|
210
|
+
stanza.getChild('result')?.attrs?.id
|
|
211
|
+
);
|
|
212
|
+
if (reaction && !collectMamReaction(stanza, reaction)) {
|
|
213
|
+
store.dispatch(
|
|
214
|
+
setReactions({
|
|
215
|
+
roomJID: reaction.roomJID,
|
|
216
|
+
messageId: reaction.messageId,
|
|
217
|
+
from: reaction.from,
|
|
218
|
+
reactions: reaction.emoji,
|
|
219
|
+
data: reaction.data,
|
|
220
|
+
latestReactionTimestamp: reaction.ts,
|
|
221
|
+
})
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
197
226
|
// console.log("stanza -->", stanza.toString());
|
|
198
227
|
const body = stanza
|
|
199
228
|
.getChild('result')
|
|
@@ -218,11 +247,9 @@ const onMessageHistory = async (stanza: any) => {
|
|
|
218
247
|
const id = stanza.getChild('result')?.attrs.id;
|
|
219
248
|
if (!delay) {
|
|
220
249
|
if (stanza.getChild('subject')) {
|
|
221
|
-
console.log('Subject.');
|
|
222
250
|
return;
|
|
223
251
|
}
|
|
224
252
|
if (!data || !body || !id) {
|
|
225
|
-
console.log('Missing required elements in message history.');
|
|
226
253
|
return;
|
|
227
254
|
}
|
|
228
255
|
}
|
|
@@ -295,6 +322,22 @@ const onMessageHistory = async (stanza: any) => {
|
|
|
295
322
|
rawMessage,
|
|
296
323
|
store.getState().chatSettingStore.user?.xmppUsername || ''
|
|
297
324
|
);
|
|
325
|
+
return message;
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
const onMessageHistory = async (stanza: any) => {
|
|
330
|
+
if (!isMamResult(stanza)) {return;}
|
|
331
|
+
const claimed = claimMamResult(stanza);
|
|
332
|
+
let message: IMessage | undefined;
|
|
333
|
+
try {
|
|
334
|
+
message = await parseMamResult(stanza);
|
|
335
|
+
} finally {
|
|
336
|
+
if (claimed) {
|
|
337
|
+
collectMamMessage(stanza, message);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (!claimed && message) {
|
|
298
341
|
store.dispatch(
|
|
299
342
|
addRoomMessage({
|
|
300
343
|
roomJID: stanza.attrs.from,
|
|
@@ -360,7 +403,9 @@ const onPresenceInRoom = (stanza: Element | any) => {
|
|
|
360
403
|
) {
|
|
361
404
|
const roomJID: string = stanza.attrs.from.split('/')[0];
|
|
362
405
|
const role: string = stanza?.children[1]?.children[0]?.attrs.role;
|
|
363
|
-
store.
|
|
406
|
+
if (role && store.getState().rooms.rooms?.[roomJID]?.role !== role) {
|
|
407
|
+
store.dispatch(setRoomRole({ chatJID: roomJID, role: role }));
|
|
408
|
+
}
|
|
364
409
|
}
|
|
365
410
|
};
|
|
366
411
|
|
|
@@ -423,53 +468,47 @@ const onGetChatRooms = (stanza: Element, xmpp: any) => {
|
|
|
423
468
|
Array.isArray(stanza.getChild('query')?.children)
|
|
424
469
|
) {
|
|
425
470
|
const children = stanza.getChild('query')?.children || [];
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
(element) => element.jid === result?.attrs?.jid
|
|
431
|
-
);
|
|
432
|
-
|
|
471
|
+
const known = store.getState().rooms.rooms;
|
|
472
|
+
const fresh: IRoom[] = [];
|
|
473
|
+
const jids: string[] = [];
|
|
474
|
+
for (const result of children as any[]) {
|
|
433
475
|
const jid = result?.attrs?.jid;
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
}
|
|
462
|
-
} catch (error) {}
|
|
476
|
+
if (!jid) {continue;}
|
|
477
|
+
jids.push(jid);
|
|
478
|
+
if (known[jid]) {continue;}
|
|
479
|
+
fresh.push({
|
|
480
|
+
jid,
|
|
481
|
+
name: result?.attrs?.name || '',
|
|
482
|
+
id: '',
|
|
483
|
+
title: result?.attrs?.name || '',
|
|
484
|
+
usersCnt: Number(result?.attrs?.users_cnt || 0),
|
|
485
|
+
messages: [],
|
|
486
|
+
isLoading: false,
|
|
487
|
+
roomBg:
|
|
488
|
+
result?.attrs?.room_background !== 'none'
|
|
489
|
+
? result?.attrs?.room_background
|
|
490
|
+
: null,
|
|
491
|
+
icon:
|
|
492
|
+
result?.attrs?.room_thumbnail !== 'none'
|
|
493
|
+
? result?.attrs?.room_thumbnail
|
|
494
|
+
: null,
|
|
495
|
+
unreadMessages: 0,
|
|
496
|
+
lastViewedTimestamp: 0,
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
if (fresh.length) {
|
|
500
|
+
store.dispatch(addRooms({ rooms: fresh }));
|
|
501
|
+
if (!store.getState().rooms.activeRoomJID) {
|
|
502
|
+
store.dispatch(setCurrentRoom({ roomJID: fresh[0].jid }));
|
|
463
503
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
}
|
|
504
|
+
}
|
|
505
|
+
for (const jid of jids) {
|
|
506
|
+
try {
|
|
507
|
+
xmpp.presenceInRoomStanza(jid);
|
|
508
|
+
} catch (e) {
|
|
509
|
+
console.warn('presenceInRoomStanza failed', jid, e);
|
|
471
510
|
}
|
|
472
|
-
}
|
|
511
|
+
}
|
|
473
512
|
}
|
|
474
513
|
};
|
|
475
514
|
|
|
@@ -477,7 +516,24 @@ const onGetChatRooms = (stanza: Element, xmpp: any) => {
|
|
|
477
516
|
// RN side hasn't ported yet. Without these the bundle compiles but
|
|
478
517
|
// require() returns undefined at runtime → "X is not a function".
|
|
479
518
|
const onMessageError = (_stanza: Element, _xmpp?: any) => {};
|
|
480
|
-
|
|
519
|
+
/** A live reaction: the reactor's full current list on one message. */
|
|
520
|
+
const onReactionMessage = (stanza: Element) => {
|
|
521
|
+
if (!stanza?.is?.('message') || stanza.getChild('result')) {return;}
|
|
522
|
+
if (!stanza.getChild('reactions')) {return;}
|
|
523
|
+
const reaction = extractReaction(stanza, stanza.attrs?.from);
|
|
524
|
+
if (!reaction) {return;}
|
|
525
|
+
store.dispatch(
|
|
526
|
+
setReactions({
|
|
527
|
+
roomJID: reaction.roomJID,
|
|
528
|
+
messageId: reaction.messageId,
|
|
529
|
+
latestReactionTimestamp: reaction.ts,
|
|
530
|
+
reactions: reaction.emoji,
|
|
531
|
+
from: reaction.from,
|
|
532
|
+
data: reaction.data,
|
|
533
|
+
})
|
|
534
|
+
);
|
|
535
|
+
};
|
|
536
|
+
// Archived reactions are handled by parseMamResult + the MAM router.
|
|
481
537
|
const onReactionHistory = (_stanza: Element) => {};
|
|
482
538
|
const onRoomKicked = (_stanza: Element) => {};
|
|
483
539
|
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { Client, xml } from '@xmpp/client';
|
|
2
2
|
import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
|
|
3
|
-
import { Element } from 'ltx';
|
|
4
3
|
import { IMessage } from '../../types/types';
|
|
5
|
-
import {
|
|
6
|
-
|
|
4
|
+
import { beginMamQuery, cancelMamQuery } from './mamRouter';
|
|
5
|
+
|
|
6
|
+
declare const __DEV__: boolean | undefined;
|
|
7
|
+
|
|
8
|
+
let historyIdCounter = 0;
|
|
7
9
|
|
|
8
10
|
export const getHistory = async (
|
|
9
11
|
client: Client,
|
|
10
12
|
chatJID: string,
|
|
11
13
|
max: number,
|
|
12
14
|
before?: number,
|
|
13
|
-
otherId?: string
|
|
15
|
+
otherId?: string,
|
|
16
|
+
options?: { selfApplied?: boolean }
|
|
14
17
|
): Promise<IMessage[] | undefined> => {
|
|
15
18
|
if (typeof chatJID !== 'string') {return;}
|
|
16
19
|
// If a caller passes a bare local-part (no `@host`), pick a default
|
|
@@ -25,121 +28,56 @@ export const getHistory = async (
|
|
|
25
28
|
return `${chatJID}@conference.${host}`;
|
|
26
29
|
})();
|
|
27
30
|
|
|
28
|
-
const id = otherId ?? `get-history:${Date.now().toString()}`;
|
|
29
|
-
|
|
30
|
-
let stanzaHdlrPointer: {
|
|
31
|
-
(el: Element): void;
|
|
32
|
-
(stanza: any): void;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const unsubscribe = () => {
|
|
36
|
-
client.off('stanza', stanzaHdlrPointer);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const responsePromise = new Promise((resolve, reject) => {
|
|
40
|
-
let messages: Element[] = [];
|
|
41
|
-
|
|
42
|
-
stanzaHdlrPointer = async (stanza) => {
|
|
43
|
-
const result = stanza.getChild('result');
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
stanza.is('message') &&
|
|
47
|
-
stanza.attrs.from &&
|
|
48
|
-
stanza.attrs.from.startsWith(fixedChatJid) &&
|
|
49
|
-
result
|
|
50
|
-
) {
|
|
51
|
-
const messageEl = result.getChild('forwarded')?.getChild('message');
|
|
52
|
-
|
|
53
|
-
messages.push(messageEl);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
stanza.is('iq') &&
|
|
58
|
-
stanza.attrs.id === id &&
|
|
59
|
-
stanza.attrs.type === 'result'
|
|
60
|
-
) {
|
|
61
|
-
let mainMessages: IMessage[] = [];
|
|
62
31
|
|
|
63
|
-
|
|
64
|
-
const reactions = msg?.getChild('reactions');
|
|
65
|
-
const text = msg.getChild('body')?.getText();
|
|
32
|
+
const id = otherId ?? `get-history:${Date.now().toString(36)}-${(++historyIdCounter).toString(36)}`;
|
|
66
33
|
|
|
67
|
-
|
|
68
|
-
const result = await getDataFromXml(msg);
|
|
69
|
-
if (!result) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const { data, id, body, ...rest } = result;
|
|
34
|
+
const page = beginMamQuery(id, fixedChatJid, !options?.selfApplied);
|
|
73
35
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
} as any);
|
|
85
|
-
|
|
86
|
-
mainMessages.push(message);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
resolve(mainMessages);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (
|
|
93
|
-
stanza.is('iq') &&
|
|
94
|
-
stanza.attrs.id === id &&
|
|
95
|
-
stanza.attrs.type === 'error'
|
|
96
|
-
) {
|
|
97
|
-
reject();
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
client?.on('stanza', stanzaHdlrPointer);
|
|
102
|
-
|
|
103
|
-
const message = xml(
|
|
104
|
-
'iq',
|
|
105
|
-
{
|
|
106
|
-
type: 'set',
|
|
107
|
-
to: fixedChatJid,
|
|
108
|
-
id: id,
|
|
109
|
-
},
|
|
36
|
+
const message = xml(
|
|
37
|
+
'iq',
|
|
38
|
+
{
|
|
39
|
+
type: 'set',
|
|
40
|
+
to: fixedChatJid,
|
|
41
|
+
id: id,
|
|
42
|
+
},
|
|
43
|
+
xml(
|
|
44
|
+
'query',
|
|
45
|
+
{ xmlns: 'urn:xmpp:mam:2', queryid: id },
|
|
110
46
|
xml(
|
|
111
|
-
'
|
|
112
|
-
{ xmlns: '
|
|
113
|
-
xml(
|
|
114
|
-
|
|
115
|
-
{ xmlns: 'http://jabber.org/protocol/rsm' },
|
|
116
|
-
xml('max', {}, max.toString()),
|
|
117
|
-
before ? xml('before', {}, before.toString()) : xml('before')
|
|
118
|
-
)
|
|
47
|
+
'set',
|
|
48
|
+
{ xmlns: 'http://jabber.org/protocol/rsm' },
|
|
49
|
+
xml('max', {}, max.toString()),
|
|
50
|
+
before ? xml('before', {}, before.toString()) : xml('before')
|
|
119
51
|
)
|
|
120
|
-
)
|
|
52
|
+
)
|
|
53
|
+
);
|
|
121
54
|
|
|
122
|
-
|
|
123
|
-
});
|
|
55
|
+
client?.send(message).catch((err: any) => console.log('err on load', err));
|
|
124
56
|
|
|
125
57
|
const timeoutPromise = createTimeoutPromise(10000);
|
|
126
58
|
|
|
127
59
|
try {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
responsePromise as Promise<IMessage[] | null>,
|
|
60
|
+
const res = await Promise.race<IMessage[] | null>([
|
|
61
|
+
page,
|
|
131
62
|
timeoutPromise as Promise<null>,
|
|
132
63
|
]);
|
|
133
|
-
|
|
64
|
+
if (res === null) {
|
|
65
|
+
const partial = cancelMamQuery(id);
|
|
66
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
67
|
+
console.log(
|
|
68
|
+
`[mam] history request for ${fixedChatJid} timed out after 10s (${partial.length} results arrived)`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
return partial;
|
|
72
|
+
}
|
|
73
|
+
return res;
|
|
134
74
|
} catch (e) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
75
|
+
const partial = cancelMamQuery(id);
|
|
76
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__ && e === undefined) {
|
|
77
|
+
console.log(
|
|
78
|
+
`[mam] history request for ${fixedChatJid} got no closing iq within 10s (${partial.length} results arrived)`
|
|
79
|
+
);
|
|
140
80
|
}
|
|
141
|
-
return
|
|
142
|
-
} finally {
|
|
143
|
-
unsubscribe();
|
|
81
|
+
return partial;
|
|
144
82
|
}
|
|
145
83
|
};
|