@ethora/chat-component-rn 26.8.5 → 26.8.6
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/README.md +55 -0
- package/lib/commonjs/assets/emojiData.js +40 -0
- package/lib/commonjs/assets/emojiData.js.map +1 -0
- package/lib/commonjs/assets/icons.js +1 -1
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +7 -9
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +24 -23
- 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/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/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/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 +17 -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 +200 -132
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +213 -12
- 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/Modal/SwipeBackLayer.js +76 -44
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +5 -4
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.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/Thread/ThreadWrapper.js +265 -152
- package/lib/commonjs/components/Thread/ThreadWrapper.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/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/helpers/createRoomFromApi.js +36 -2
- package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
- 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/reactionsConfig.js +17 -0
- package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
- package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
- package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/commonjs/hooks/useHeapSender.js +3 -1
- package/lib/commonjs/hooks/useHeapSender.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 +14 -8
- 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/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 +4 -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/xmppClient.js +98 -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 +96 -0
- package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
- package/lib/commonjs/roomStore/persistence.js +245 -50
- 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 +1 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +8 -10
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +25 -24
- 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/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/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/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 +18 -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 +203 -134
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +215 -14
- 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/Modal/SwipeBackLayer.js +76 -44
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +5 -4
- package/lib/module/components/RoomComponents/ChatRoomItem.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/Thread/ThreadWrapper.js +264 -152
- package/lib/module/components/Thread/ThreadWrapper.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/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/helpers/createRoomFromApi.js +36 -2
- package/lib/module/helpers/createRoomFromApi.js.map +1 -1
- 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/reactionsConfig.js +10 -0
- package/lib/module/helpers/reactionsConfig.js.map +1 -0
- package/lib/module/helpers/updateMessagesTillLast.js +17 -2
- package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/module/hooks/useHeapSender.js +3 -1
- package/lib/module/hooks/useHeapSender.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 +14 -8
- 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/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 +4 -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/xmppClient.js +99 -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 +89 -0
- package/lib/module/roomStore/persistBackend.js.map +1 -0
- package/lib/module/roomStore/persistence.js +245 -48
- 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/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/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/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/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/Modal/SwipeBackLayer.d.ts +2 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.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/styled/LastMessageEmoji.d.ts +3 -6
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
- 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/styled/DateLabel.d.ts +1 -0
- package/lib/typescript/components/styled/DateLabel.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/helpers/createRoomFromApi.d.ts.map +1 -1
- 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/reactionsConfig.d.ts +5 -0
- package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
- package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
- package/lib/typescript/hooks/useHeapSender.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/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.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/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 +4 -0
- package/lib/typescript/types/models/message.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +16 -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 +15 -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 +10 -1
- package/src/assets/emojiData.ts +2146 -0
- package/src/assets/icons.tsx +5 -5
- package/src/components/MainComponents/ChatHeader.tsx +16 -7
- package/src/components/MainComponents/ChatRoom.tsx +35 -29
- package/src/components/MainComponents/ChatWrapper.tsx +28 -10
- package/src/components/MainComponents/MessageContainer.tsx +7 -15
- package/src/components/MainComponents/MessageList.tsx +96 -43
- package/src/components/MainComponents/RoomList.tsx +28 -29
- package/src/components/MainComponents/RoomStack.tsx +156 -83
- package/src/components/MainComponents/SystemMessage.tsx +6 -2
- package/src/components/MessageBubble/Avatar.tsx +7 -1
- package/src/components/MessageBubble/BottomReplyContainer.tsx +19 -21
- package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
- package/src/components/MessageBubble/Message.tsx +146 -87
- package/src/components/MessageBubble/MessageInteractions.tsx +213 -12
- package/src/components/MessageBubble/MessageReaction.tsx +120 -96
- package/src/components/MessageBubble/MessageReply.tsx +65 -32
- package/src/components/Modals/Modal/SwipeBackLayer.tsx +114 -63
- package/src/components/RoomComponents/ChatRoomItem.tsx +11 -4
- package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
- package/src/components/Thread/ThreadWrapper.tsx +274 -198
- package/src/components/styled/DateLabel.tsx +7 -3
- package/src/context/MessageNotificationContext.tsx +205 -7
- package/src/context/xmppProvider.tsx +29 -9
- package/src/helpers/createRoomFromApi.tsx +37 -1
- 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/reactionsConfig.ts +13 -0
- package/src/helpers/updateMessagesTillLast.tsx +14 -2
- package/src/hooks/useHeapSender.tsx +3 -2
- package/src/hooks/useMessageHeapState.tsx +6 -2
- package/src/hooks/useRoomInitialization.tsx +32 -15
- package/src/hooks/useSendMessage.tsx +18 -11
- package/src/hooks/useUnreadMessagesCounter.ts +1 -1
- package/src/networking/stanzaHandlers.ts +116 -60
- package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
- package/src/networking/xmpp/handleStanzas.xmpp.ts +2 -0
- package/src/networking/xmpp/mamRouter.ts +176 -0
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
- package/src/networking/xmppClient.ts +105 -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 +96 -0
- package/src/roomStore/persistence.ts +280 -73
- package/src/roomStore/roomsSlice.ts +304 -155
- package/src/theme/theme.ts +10 -1
- package/src/types/models/message.model.ts +4 -0
- package/src/types/models/room.model.ts +17 -0
- package/src/types/models/xmpp.model.ts +4 -2
- package/src/types/types.ts +15 -3
- package/src/utils/devLogger.ts +16 -0
- package/src/version.ts +1 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import { xml } from '@xmpp/client';
|
|
4
4
|
import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
export const getHistory = async (client, chatJID, max, before, otherId) => {
|
|
5
|
+
import { beginMamQuery, cancelMamQuery } from './mamRouter';
|
|
6
|
+
let historyIdCounter = 0;
|
|
7
|
+
export const getHistory = async (client, chatJID, max, before, otherId, options) => {
|
|
8
8
|
if (typeof chatJID !== 'string') {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
@@ -16,81 +16,36 @@ export const getHistory = async (client, chatJID, max, before, otherId) => {
|
|
|
16
16
|
const host = service.match(/wss?:\/\/([^:/]+)/)?.[1] || 'xmpp.chat.ethora.com';
|
|
17
17
|
return `${chatJID}@conference.${host}`;
|
|
18
18
|
})();
|
|
19
|
-
const id = otherId ?? `get-history:${Date.now().toString()}`;
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (stanza.is('iq') && stanza.attrs.id === id && stanza.attrs.type === 'result') {
|
|
33
|
-
let mainMessages = [];
|
|
34
|
-
for (const msg of messages) {
|
|
35
|
-
const reactions = msg?.getChild('reactions');
|
|
36
|
-
const text = msg.getChild('body')?.getText();
|
|
37
|
-
if (text || reactions) {
|
|
38
|
-
const result = await getDataFromXml(msg);
|
|
39
|
-
if (!result) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const {
|
|
43
|
-
data,
|
|
44
|
-
id,
|
|
45
|
-
body,
|
|
46
|
-
...rest
|
|
47
|
-
} = result;
|
|
48
|
-
if (!data) {
|
|
49
|
-
console.log('No data in stanza');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const message = await createMessageFromXml({
|
|
53
|
-
data,
|
|
54
|
-
id,
|
|
55
|
-
body: body || '',
|
|
56
|
-
...rest
|
|
57
|
-
});
|
|
58
|
-
mainMessages.push(message);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
resolve(mainMessages);
|
|
62
|
-
}
|
|
63
|
-
if (stanza.is('iq') && stanza.attrs.id === id && stanza.attrs.type === 'error') {
|
|
64
|
-
reject();
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
client?.on('stanza', stanzaHdlrPointer);
|
|
68
|
-
const message = xml('iq', {
|
|
69
|
-
type: 'set',
|
|
70
|
-
to: fixedChatJid,
|
|
71
|
-
id: id
|
|
72
|
-
}, xml('query', {
|
|
73
|
-
xmlns: 'urn:xmpp:mam:2'
|
|
74
|
-
}, xml('set', {
|
|
75
|
-
xmlns: 'http://jabber.org/protocol/rsm'
|
|
76
|
-
}, xml('max', {}, max.toString()), before ? xml('before', {}, before.toString()) : xml('before'))));
|
|
77
|
-
client?.send(message).catch(err => console.log('err on load', err));
|
|
78
|
-
});
|
|
19
|
+
const id = otherId ?? `get-history:${Date.now().toString(36)}-${(++historyIdCounter).toString(36)}`;
|
|
20
|
+
const page = beginMamQuery(id, fixedChatJid, !options?.selfApplied);
|
|
21
|
+
const message = xml('iq', {
|
|
22
|
+
type: 'set',
|
|
23
|
+
to: fixedChatJid,
|
|
24
|
+
id: id
|
|
25
|
+
}, xml('query', {
|
|
26
|
+
xmlns: 'urn:xmpp:mam:2',
|
|
27
|
+
queryid: id
|
|
28
|
+
}, xml('set', {
|
|
29
|
+
xmlns: 'http://jabber.org/protocol/rsm'
|
|
30
|
+
}, xml('max', {}, max.toString()), before ? xml('before', {}, before.toString()) : xml('before'))));
|
|
31
|
+
client?.send(message).catch(err => console.log('err on load', err));
|
|
79
32
|
const timeoutPromise = createTimeoutPromise(10000);
|
|
80
33
|
try {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
34
|
+
const res = await Promise.race([page, timeoutPromise]);
|
|
35
|
+
if (res === null) {
|
|
36
|
+
const partial = cancelMamQuery(id);
|
|
37
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
38
|
+
console.log(`[mam] history request for ${fixedChatJid} timed out after 10s (${partial.length} results arrived)`);
|
|
39
|
+
}
|
|
40
|
+
return partial;
|
|
41
|
+
}
|
|
42
|
+
return res;
|
|
84
43
|
} catch (e) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (e !== undefined) {
|
|
89
|
-
console.log('=-> error in', fixedChatJid, e);
|
|
44
|
+
const partial = cancelMamQuery(id);
|
|
45
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__ && e === undefined) {
|
|
46
|
+
console.log(`[mam] history request for ${fixedChatJid} got no closing iq within 10s (${partial.length} results arrived)`);
|
|
90
47
|
}
|
|
91
|
-
return
|
|
92
|
-
} finally {
|
|
93
|
-
unsubscribe();
|
|
48
|
+
return partial;
|
|
94
49
|
}
|
|
95
50
|
};
|
|
96
51
|
//# sourceMappingURL=getHistory.xmpp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["xml","createTimeoutPromise","
|
|
1
|
+
{"version":3,"names":["xml","createTimeoutPromise","beginMamQuery","cancelMamQuery","historyIdCounter","getHistory","client","chatJID","max","before","otherId","options","fixedChatJid","includes","service","host","match","id","Date","now","toString","page","selfApplied","message","type","to","xmlns","queryid","send","catch","err","console","log","timeoutPromise","res","Promise","race","partial","__DEV__","length","e","undefined"],"sourceRoot":"../../../../src","sources":["networking/xmpp/getHistory.xmpp.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { routeMamIq } from './mamRouter';
|
|
3
4
|
import { onDeleteMessage, onEditMessage, onRealtimeMessage, onMessageHistory, onGetLastMessageArchive, handleComposing, onChatInvite, onPresenceInRoom, onGetChatRooms, onGetMembers, onGetRoomInfo, onNewRoomCreated, onReactionMessage, onReactionHistory, onRoomKicked, onMessageError } from '../stanzaHandlers';
|
|
4
5
|
import { onCallTokenMessage } from '../callTokenStanza';
|
|
5
6
|
|
|
@@ -60,6 +61,9 @@ export function handleStanza(stanza, xmppWs) {
|
|
|
60
61
|
onPresenceInRoom(stanza);
|
|
61
62
|
break;
|
|
62
63
|
case 'iq':
|
|
64
|
+
if (routeMamIq(stanza)) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
63
67
|
onGetChatRooms(stanza, xmppWs);
|
|
64
68
|
onRealtimeMessage(stanza);
|
|
65
69
|
onPresenceInRoom(stanza);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["onDeleteMessage","onEditMessage","onRealtimeMessage","onMessageHistory","onGetLastMessageArchive","handleComposing","onChatInvite","onPresenceInRoom","onGetChatRooms","onGetMembers","onGetRoomInfo","onNewRoomCreated","onReactionMessage","onReactionHistory","onRoomKicked","onMessageError","onCallTokenMessage","unwrapMucsubMessage","stanza","inner","getChild","handleStanza","xmppWs","attrs","type","name","unwrapped","username","console","log"],"sourceRoot":"../../../../src","sources":["networking/xmpp/handleStanzas.xmpp.ts"],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"names":["routeMamIq","onDeleteMessage","onEditMessage","onRealtimeMessage","onMessageHistory","onGetLastMessageArchive","handleComposing","onChatInvite","onPresenceInRoom","onGetChatRooms","onGetMembers","onGetRoomInfo","onNewRoomCreated","onReactionMessage","onReactionHistory","onRoomKicked","onMessageError","onCallTokenMessage","unwrapMucsubMessage","stanza","inner","getChild","handleStanza","xmppWs","attrs","type","name","unwrapped","username","console","log"],"sourceRoot":"../../../../src","sources":["networking/xmpp/handleStanzas.xmpp.ts"],"mappings":";;AACA,SAASA,UAAU,QAAQ,aAAa;AACxC,SACEC,eAAe,EACfC,aAAa,EACbC,iBAAiB,EACjBC,gBAAgB,EAChBC,uBAAuB,EACvBC,eAAe,EACfC,YAAY,EACZC,gBAAgB,EAChBC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,EACjBC,YAAY,EACZC,cAAc,QACT,mBAAmB;AAE1B,SAASC,kBAAkB,QAAQ,oBAAoB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAIC,MAAe,IAAc;EACxD,MAAMC,KAAK,GAAID,MAAM,EACjBE,QAAQ,GAAG,OAAO,EAAE,yCAAyC,CAAC,EAC9DA,QAAQ,GAAG,OAAO,CAAC,EACnBA,QAAQ,GAAG,MAAM,CAAC,EAClBA,QAAQ,GAAG,SAAS,CAAC;EACzB,OAAQD,KAAK,IAAgBD,MAAM;AACrC,CAAC;AAED,OAAO,SAASG,YAAYA,CAACH,MAAe,EAAEI,MAAkB,EAAE;EAChE,IAAIJ,MAAM,EAAEK,KAAK,EAAEC,IAAI,KAAK,UAAU,EAAE;IAAC;EAAO;;EAEhD;EACA;EACA;EACA;EACA;EACA,IAAIN,MAAM,EAAEO,IAAI,KAAK,SAAS,IAAIT,kBAAkB,CAACE,MAAM,CAAC,EAAE;IAC5D;EACF;EAEA,QAAQA,MAAM,CAACO,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,MAAMC,SAAS,GAAGT,mBAAmB,CAACC,MAAM,CAAC;QAC7CH,cAAc,CAACW,SAAS,EAAEJ,MAAM,CAAC;QACjCV,iBAAiB,CAACc,SAAS,CAAC;QAC5Bb,iBAAiB,CAACa,SAAS,CAAC;QAC5B1B,eAAe,CAAC0B,SAAS,CAAC;QAC1BzB,aAAa,CAACyB,SAAS,CAAC;QACxBpB,YAAY,CAACoB,SAAS,EAAEJ,MAAM,CAAC;QAC/BpB,iBAAiB,CAACwB,SAAS,CAAC;QAC5BvB,gBAAgB,CAACuB,SAAS,CAAC;QAC3BrB,eAAe,CAACqB,SAAS,EAAEJ,MAAM,CAACK,QAAQ,CAAC;QAC3CpB,gBAAgB,CAACmB,SAAS,CAAC;QAC3B;MACF;IACA,KAAK,UAAU;MACbZ,YAAY,CAACI,MAAM,CAAC;MACpBX,gBAAgB,CAACW,MAAM,CAAC;MACxB;IACF,KAAK,IAAI;MACP,IAAInB,UAAU,CAACmB,MAAM,CAAC,EAAE;QAAC;MAAM;MAC/BV,cAAc,CAACU,MAAM,EAAEI,MAAM,CAAC;MAC9BpB,iBAAiB,CAACgB,MAAM,CAAC;MACzBX,gBAAgB,CAACW,MAAM,CAAC;MACxBT,YAAY,CAACS,MAAM,CAAC;MACpBR,aAAa,CAACQ,MAAM,CAAC;MACrBd,uBAAuB,CAACc,MAAM,EAAEI,MAAM,CAAC;MACvC;IACF,KAAK,aAAa;MAChBX,gBAAgB,CAACO,MAAM,EAAEI,MAAM,CAAC;MAChC;IACF;MACEM,OAAO,CAACC,GAAG,CAAC,wBAAwB,EAAEX,MAAM,CAACO,IAAI,CAAC;EACtD;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { store } from '../../roomStore';
|
|
4
|
+
import { addRoomMessages, setReactions } from '../../roomStore/roomsSlice';
|
|
5
|
+
import { applyMamReactions } from '../../helpers/mamReactions';
|
|
6
|
+
const pending = new Map();
|
|
7
|
+
const flush = query => {
|
|
8
|
+
// Every step is guarded: a failure in one (a middleware throwing on a
|
|
9
|
+
// reaction, say) used to escape `settle` before the waiting request was
|
|
10
|
+
// resolved — the page was lost and the room stayed empty until opened.
|
|
11
|
+
let deferred = [];
|
|
12
|
+
try {
|
|
13
|
+
// Reactions ride in the archive as their own entries: fold them onto
|
|
14
|
+
// the page's messages first, so they are stored together.
|
|
15
|
+
deferred = applyMamReactions(query.messages, query.reactions);
|
|
16
|
+
} catch (e) {
|
|
17
|
+
console.warn('[mam] applying reactions to a page failed', e);
|
|
18
|
+
}
|
|
19
|
+
if (query.apply && query.messages.length > 0) {
|
|
20
|
+
try {
|
|
21
|
+
store.dispatch(addRoomMessages({
|
|
22
|
+
roomJID: query.roomJID,
|
|
23
|
+
messages: query.messages
|
|
24
|
+
}));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
console.warn('[mam] applying a history page failed', e);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const reaction of deferred) {
|
|
30
|
+
try {
|
|
31
|
+
store.dispatch(setReactions({
|
|
32
|
+
roomJID: reaction.roomJID || query.roomJID,
|
|
33
|
+
messageId: reaction.messageId,
|
|
34
|
+
from: reaction.from,
|
|
35
|
+
reactions: reaction.emoji,
|
|
36
|
+
data: reaction.data,
|
|
37
|
+
latestReactionTimestamp: reaction.ts
|
|
38
|
+
}));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.warn('[mam] applying a reaction failed', e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export const beginMamQuery = (queryId, roomJID, apply = true) => new Promise((resolve, reject) => {
|
|
45
|
+
pending.set(queryId, {
|
|
46
|
+
roomJID,
|
|
47
|
+
apply,
|
|
48
|
+
messages: [],
|
|
49
|
+
reactions: [],
|
|
50
|
+
inflight: 0,
|
|
51
|
+
closed: null,
|
|
52
|
+
resolve,
|
|
53
|
+
reject
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Give up waiting (timeout). Whatever arrived is still applied — a late
|
|
59
|
+
* page is better than a lost one — and handed back.
|
|
60
|
+
*/
|
|
61
|
+
export const cancelMamQuery = queryId => {
|
|
62
|
+
const query = pending.get(queryId);
|
|
63
|
+
if (!query) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
pending.delete(queryId);
|
|
67
|
+
flush(query);
|
|
68
|
+
query.resolve(query.messages);
|
|
69
|
+
return query.messages;
|
|
70
|
+
};
|
|
71
|
+
const bareLower = jid => String(jid || '').split('/')[0].toLowerCase();
|
|
72
|
+
|
|
73
|
+
// By the echoed `queryid` when the server provides one; otherwise by the
|
|
74
|
+
// room the result came from — the oldest still-open query for that room.
|
|
75
|
+
// (Results are per room anyway: a query only ever asks one archive.)
|
|
76
|
+
const queryOf = stanza => {
|
|
77
|
+
const queryId = stanza?.getChild?.('result')?.attrs?.queryid;
|
|
78
|
+
const byId = queryId ? pending.get(queryId) : undefined;
|
|
79
|
+
if (byId) {
|
|
80
|
+
return byId;
|
|
81
|
+
}
|
|
82
|
+
const room = bareLower(stanza?.attrs?.from);
|
|
83
|
+
if (!room) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
for (const query of pending.values()) {
|
|
87
|
+
if (!query.closed && bareLower(query.roomJID) === room) {
|
|
88
|
+
return query;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
};
|
|
93
|
+
const settle = (queryId, query) => {
|
|
94
|
+
if (pending.get(queryId) === query) {
|
|
95
|
+
pending.delete(queryId);
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
flush(query);
|
|
99
|
+
} finally {
|
|
100
|
+
// The waiting request is always answered, whatever happened above.
|
|
101
|
+
if (query.closed?.error) {
|
|
102
|
+
query.reject(new Error('mam query error'));
|
|
103
|
+
} else {
|
|
104
|
+
query.resolve(query.messages);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const settleIfDone = query => {
|
|
109
|
+
if (!query.closed || query.inflight > 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const entry = [...pending.entries()].find(([, q]) => q === query);
|
|
113
|
+
settle(entry ? entry[0] : '', query);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Claim a result for its pending query — synchronously, the moment the
|
|
118
|
+
* stanza arrives — so the router knows a parse is outstanding. Returns
|
|
119
|
+
* true when a pending query owns it (the caller must then always follow
|
|
120
|
+
* up with `collectMamMessage`, even when the parse yields nothing).
|
|
121
|
+
*/
|
|
122
|
+
export const claimMamResult = stanza => {
|
|
123
|
+
const query = queryOf(stanza);
|
|
124
|
+
if (!query) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
query.inflight += 1;
|
|
128
|
+
return true;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/** The parsed result of a claimed stanza (undefined: dropped). */
|
|
132
|
+
export const collectMamReaction = (stanza, reaction) => {
|
|
133
|
+
const query = queryOf(stanza);
|
|
134
|
+
if (!query) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
query.reactions.push(reaction);
|
|
138
|
+
return true;
|
|
139
|
+
};
|
|
140
|
+
export const collectMamMessage = (stanza, message) => {
|
|
141
|
+
const query = queryOf(stanza);
|
|
142
|
+
if (!query) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
if (message) {
|
|
146
|
+
query.messages.push(message);
|
|
147
|
+
}
|
|
148
|
+
query.inflight = Math.max(0, query.inflight - 1);
|
|
149
|
+
settleIfDone(query);
|
|
150
|
+
return true;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/** The query's closing iq; true when it belonged to a pending query. */
|
|
154
|
+
export const routeMamIq = stanza => {
|
|
155
|
+
if (!stanza?.is?.('iq')) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
const query = pending.get(stanza.attrs?.id);
|
|
159
|
+
if (!query) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
query.closed = {
|
|
163
|
+
error: stanza.attrs.type === 'error'
|
|
164
|
+
};
|
|
165
|
+
// Results that are still being parsed settle the page when they land;
|
|
166
|
+
// until then the query stays registered so they can find it.
|
|
167
|
+
if (query.inflight === 0) {
|
|
168
|
+
settle(stanza.attrs.id, query);
|
|
169
|
+
}
|
|
170
|
+
return true;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/** Test hook. */
|
|
174
|
+
export const __resetMamRouter = () => pending.clear();
|
|
175
|
+
//# sourceMappingURL=mamRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["store","addRoomMessages","setReactions","applyMamReactions","pending","Map","flush","query","deferred","messages","reactions","e","console","warn","apply","length","dispatch","roomJID","reaction","messageId","from","emoji","data","latestReactionTimestamp","ts","beginMamQuery","queryId","Promise","resolve","reject","set","inflight","closed","cancelMamQuery","get","delete","bareLower","jid","String","split","toLowerCase","queryOf","stanza","getChild","attrs","queryid","byId","undefined","room","values","settle","error","Error","settleIfDone","entry","entries","find","q","claimMamResult","collectMamReaction","push","collectMamMessage","message","Math","max","routeMamIq","is","id","type","__resetMamRouter","clear"],"sourceRoot":"../../../../src","sources":["networking/xmpp/mamRouter.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,iBAAiB;AACvC,SAASC,eAAe,EAAEC,YAAY,QAAQ,4BAA4B;AAE1E,SAASC,iBAAiB,QAAgC,4BAA4B;AAatF,MAAMC,OAAO,GAAG,IAAIC,GAAG,CAAuB,CAAC;AAE/C,MAAMC,KAAK,GAAIC,KAAmB,IAAK;EACrC;EACA;EACA;EACA,IAAIC,QAA6B,GAAG,EAAE;EACtC,IAAI;IACF;IACA;IACAA,QAAQ,GAAGL,iBAAiB,CAACI,KAAK,CAACE,QAAQ,EAAEF,KAAK,CAACG,SAAS,CAAC;EAC/D,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVC,OAAO,CAACC,IAAI,CAAC,2CAA2C,EAAEF,CAAC,CAAC;EAC9D;EACA,IAAIJ,KAAK,CAACO,KAAK,IAAIP,KAAK,CAACE,QAAQ,CAACM,MAAM,GAAG,CAAC,EAAE;IAC5C,IAAI;MACFf,KAAK,CAACgB,QAAQ,CACZf,eAAe,CAAC;QAAEgB,OAAO,EAAEV,KAAK,CAACU,OAAO;QAAER,QAAQ,EAAEF,KAAK,CAACE;MAAS,CAAC,CACtE,CAAC;IACH,CAAC,CAAC,OAAOE,CAAC,EAAE;MACVC,OAAO,CAACC,IAAI,CAAC,sCAAsC,EAAEF,CAAC,CAAC;IACzD;EACF;EACA,KAAK,MAAMO,QAAQ,IAAIV,QAAQ,EAAE;IAC/B,IAAI;MACFR,KAAK,CAACgB,QAAQ,CACZd,YAAY,CAAC;QACXe,OAAO,EAAEC,QAAQ,CAACD,OAAO,IAAIV,KAAK,CAACU,OAAO;QAC1CE,SAAS,EAAED,QAAQ,CAACC,SAAS;QAC7BC,IAAI,EAAEF,QAAQ,CAACE,IAAI;QACnBV,SAAS,EAAEQ,QAAQ,CAACG,KAAK;QACzBC,IAAI,EAAEJ,QAAQ,CAACI,IAAI;QACnBC,uBAAuB,EAAEL,QAAQ,CAACM;MACpC,CAAC,CACH,CAAC;IACH,CAAC,CAAC,OAAOb,CAAC,EAAE;MACVC,OAAO,CAACC,IAAI,CAAC,kCAAkC,EAAEF,CAAC,CAAC;IACrD;EACF;AACF,CAAC;AAED,OAAO,MAAMc,aAAa,GAAGA,CAC3BC,OAAe,EACfT,OAAe,EACfH,KAAK,GAAG,IAAI,KAEZ,IAAIa,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;EAC/BzB,OAAO,CAAC0B,GAAG,CAACJ,OAAO,EAAE;IACnBT,OAAO;IACPH,KAAK;IACLL,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE,EAAE;IACbqB,QAAQ,EAAE,CAAC;IACXC,MAAM,EAAE,IAAI;IACZJ,OAAO;IACPC;EACF,CAAC,CAAC;AACJ,CAAC,CAAC;;AAEJ;AACA;AACA;AACA;AACA,OAAO,MAAMI,cAAc,GAAIP,OAAe,IAAiB;EAC7D,MAAMnB,KAAK,GAAGH,OAAO,CAAC8B,GAAG,CAACR,OAAO,CAAC;EAClC,IAAI,CAACnB,KAAK,EAAE;IAAC,OAAO,EAAE;EAAC;EACvBH,OAAO,CAAC+B,MAAM,CAACT,OAAO,CAAC;EACvBpB,KAAK,CAACC,KAAK,CAAC;EACZA,KAAK,CAACqB,OAAO,CAACrB,KAAK,CAACE,QAAQ,CAAC;EAC7B,OAAOF,KAAK,CAACE,QAAQ;AACvB,CAAC;AAED,MAAM2B,SAAS,GAAIC,GAAY,IAC7BC,MAAM,CAACD,GAAG,IAAI,EAAE,CAAC,CAACE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;;AAE/C;AACA;AACA;AACA,MAAMC,OAAO,GAAIC,MAAW,IAA+B;EACzD,MAAMhB,OAAO,GAAGgB,MAAM,EAAEC,QAAQ,GAAG,QAAQ,CAAC,EAAEC,KAAK,EAAEC,OAAO;EAC5D,MAAMC,IAAI,GAAGpB,OAAO,GAAGtB,OAAO,CAAC8B,GAAG,CAACR,OAAO,CAAC,GAAGqB,SAAS;EACvD,IAAID,IAAI,EAAE;IAAC,OAAOA,IAAI;EAAC;EACvB,MAAME,IAAI,GAAGZ,SAAS,CAACM,MAAM,EAAEE,KAAK,EAAExB,IAAI,CAAC;EAC3C,IAAI,CAAC4B,IAAI,EAAE;IAAC,OAAOD,SAAS;EAAC;EAC7B,KAAK,MAAMxC,KAAK,IAAIH,OAAO,CAAC6C,MAAM,CAAC,CAAC,EAAE;IACpC,IAAI,CAAC1C,KAAK,CAACyB,MAAM,IAAII,SAAS,CAAC7B,KAAK,CAACU,OAAO,CAAC,KAAK+B,IAAI,EAAE;MAAC,OAAOzC,KAAK;IAAC;EACxE;EACA,OAAOwC,SAAS;AAClB,CAAC;AAED,MAAMG,MAAM,GAAGA,CAACxB,OAAe,EAAEnB,KAAmB,KAAK;EACvD,IAAIH,OAAO,CAAC8B,GAAG,CAACR,OAAO,CAAC,KAAKnB,KAAK,EAAE;IAACH,OAAO,CAAC+B,MAAM,CAACT,OAAO,CAAC;EAAC;EAC7D,IAAI;IACFpB,KAAK,CAACC,KAAK,CAAC;EACd,CAAC,SAAS;IACR;IACA,IAAIA,KAAK,CAACyB,MAAM,EAAEmB,KAAK,EAAE;MACvB5C,KAAK,CAACsB,MAAM,CAAC,IAAIuB,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,MAAM;MACL7C,KAAK,CAACqB,OAAO,CAACrB,KAAK,CAACE,QAAQ,CAAC;IAC/B;EACF;AACF,CAAC;AAED,MAAM4C,YAAY,GAAI9C,KAAmB,IAAK;EAC5C,IAAI,CAACA,KAAK,CAACyB,MAAM,IAAIzB,KAAK,CAACwB,QAAQ,GAAG,CAAC,EAAE;IAAC;EAAO;EACjD,MAAMuB,KAAK,GAAG,CAAC,GAAGlD,OAAO,CAACmD,OAAO,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,GAAGC,CAAC,CAAC,KAAKA,CAAC,KAAKlD,KAAK,CAAC;EACjE2C,MAAM,CAACI,KAAK,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE/C,KAAK,CAAC;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMmD,cAAc,GAAIhB,MAAW,IAAc;EACtD,MAAMnC,KAAK,GAAGkC,OAAO,CAACC,MAAM,CAAC;EAC7B,IAAI,CAACnC,KAAK,EAAE;IAAC,OAAO,KAAK;EAAC;EAC1BA,KAAK,CAACwB,QAAQ,IAAI,CAAC;EACnB,OAAO,IAAI;AACb,CAAC;;AAED;AACA,OAAO,MAAM4B,kBAAkB,GAAGA,CAChCjB,MAAW,EACXxB,QAA2B,KACf;EACZ,MAAMX,KAAK,GAAGkC,OAAO,CAACC,MAAM,CAAC;EAC7B,IAAI,CAACnC,KAAK,EAAE;IAAC,OAAO,KAAK;EAAC;EAC1BA,KAAK,CAACG,SAAS,CAACkD,IAAI,CAAC1C,QAAQ,CAAC;EAC9B,OAAO,IAAI;AACb,CAAC;AAED,OAAO,MAAM2C,iBAAiB,GAAGA,CAC/BnB,MAAW,EACXoB,OAA6B,KACjB;EACZ,MAAMvD,KAAK,GAAGkC,OAAO,CAACC,MAAM,CAAC;EAC7B,IAAI,CAACnC,KAAK,EAAE;IAAC,OAAO,KAAK;EAAC;EAC1B,IAAIuD,OAAO,EAAE;IAACvD,KAAK,CAACE,QAAQ,CAACmD,IAAI,CAACE,OAAO,CAAC;EAAC;EAC3CvD,KAAK,CAACwB,QAAQ,GAAGgC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEzD,KAAK,CAACwB,QAAQ,GAAG,CAAC,CAAC;EAChDsB,YAAY,CAAC9C,KAAK,CAAC;EACnB,OAAO,IAAI;AACb,CAAC;;AAED;AACA,OAAO,MAAM0D,UAAU,GAAIvB,MAAW,IAAc;EAClD,IAAI,CAACA,MAAM,EAAEwB,EAAE,GAAG,IAAI,CAAC,EAAE;IAAC,OAAO,KAAK;EAAC;EACvC,MAAM3D,KAAK,GAAGH,OAAO,CAAC8B,GAAG,CAACQ,MAAM,CAACE,KAAK,EAAEuB,EAAE,CAAC;EAC3C,IAAI,CAAC5D,KAAK,EAAE;IAAC,OAAO,KAAK;EAAC;EAC1BA,KAAK,CAACyB,MAAM,GAAG;IAAEmB,KAAK,EAAET,MAAM,CAACE,KAAK,CAACwB,IAAI,KAAK;EAAQ,CAAC;EACvD;EACA;EACA,IAAI7D,KAAK,CAACwB,QAAQ,KAAK,CAAC,EAAE;IAACmB,MAAM,CAACR,MAAM,CAACE,KAAK,CAACuB,EAAE,EAAE5D,KAAK,CAAC;EAAC;EAC1D,OAAO,IAAI;AACb,CAAC;;AAED;AACA,OAAO,MAAM8D,gBAAgB,GAAGA,CAAA,KAAMjE,OAAO,CAACkE,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -4,7 +4,36 @@ import { xml } from '@xmpp/client';
|
|
|
4
4
|
import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
|
|
5
5
|
let presenceIdCounter = 0;
|
|
6
6
|
const nextPresenceId = () => `presenceInRoom-${Date.now().toString(36)}-${(++presenceIdCounter).toString(36)}`;
|
|
7
|
-
|
|
7
|
+
const joinedByClient = new WeakMap();
|
|
8
|
+
const joinedRooms = client => {
|
|
9
|
+
let map = joinedByClient.get(client);
|
|
10
|
+
if (!map) {
|
|
11
|
+
map = new Map();
|
|
12
|
+
joinedByClient.set(client, map);
|
|
13
|
+
const forget = () => joinedByClient.get(client)?.clear();
|
|
14
|
+
client.on('disconnect', forget);
|
|
15
|
+
client.on('offline', forget);
|
|
16
|
+
}
|
|
17
|
+
return map;
|
|
18
|
+
};
|
|
19
|
+
export const __forgetJoinedRooms = client => joinedByClient.get(client)?.clear();
|
|
20
|
+
export const presenceInRoom = (client, roomJID, delay = 0) => {
|
|
21
|
+
const joined = joinedRooms(client);
|
|
22
|
+
const existing = joined.get(roomJID);
|
|
23
|
+
if (existing) {
|
|
24
|
+
return existing;
|
|
25
|
+
}
|
|
26
|
+
const join = joinRoom(client, roomJID, delay);
|
|
27
|
+
joined.set(roomJID, join);
|
|
28
|
+
// A failed join is not a join: let the next caller try again.
|
|
29
|
+
join.catch(() => {
|
|
30
|
+
if (joined.get(roomJID) === join) {
|
|
31
|
+
joined.delete(roomJID);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return join;
|
|
35
|
+
};
|
|
36
|
+
const joinRoom = async (client, roomJID, delay) => {
|
|
8
37
|
let stanzaHandler;
|
|
9
38
|
const unsubscribe = () => client.off('stanza', stanzaHandler);
|
|
10
39
|
const stanzaId = nextPresenceId();
|
|
@@ -21,6 +50,11 @@ export const presenceInRoom = async (client, roomJID, delay = 2000) => {
|
|
|
21
50
|
return;
|
|
22
51
|
}
|
|
23
52
|
settled = true;
|
|
53
|
+
if (delay <= 0) {
|
|
54
|
+
unsubscribe();
|
|
55
|
+
cb(value);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
24
58
|
setTimeout(() => {
|
|
25
59
|
unsubscribe();
|
|
26
60
|
cb(value);
|
|
@@ -38,7 +72,9 @@ export const presenceInRoom = async (client, roomJID, delay = 2000) => {
|
|
|
38
72
|
id: stanzaId
|
|
39
73
|
}, xml('x', {
|
|
40
74
|
xmlns: 'http://jabber.org/protocol/muc'
|
|
41
|
-
}
|
|
75
|
+
}, xml('history', {
|
|
76
|
+
maxstanzas: '0'
|
|
77
|
+
})));
|
|
42
78
|
|
|
43
79
|
// Side-effects sequence: send the presence (handles its own
|
|
44
80
|
// failure → reject), then wait the timeout (also handles its own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["xml","createTimeoutPromise","presenceIdCounter","nextPresenceId","Date","now","toString","
|
|
1
|
+
{"version":3,"names":["xml","createTimeoutPromise","presenceIdCounter","nextPresenceId","Date","now","toString","joinedByClient","WeakMap","joinedRooms","client","map","get","Map","set","forget","clear","on","__forgetJoinedRooms","presenceInRoom","roomJID","delay","joined","existing","join","joinRoom","catch","delete","stanzaHandler","unsubscribe","off","stanzaId","Promise","resolve","reject","settled","finish","cb","value","setTimeout","stanza","is","attrs","id","from","startsWith","presence","jid","to","getLocal","xmlns","maxstanzas","send","err"],"sourceRoot":"../../../../src","sources":["networking/xmpp/presenceInRoom.xmpp.ts"],"mappings":"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","ignoreList":[]}
|