@ethora/chat-component-rn 26.9.1 → 26.10.0
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 +30 -0
- package/README.md +19 -0
- package/lib/commonjs/assets/icons.js +2 -2
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/Header/HeaderRoomList.js +22 -6
- package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/commonjs/components/InputComponents/Search.js +38 -1
- package/lib/commonjs/components/InputComponents/Search.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ArchivedMessageCard.js +166 -0
- package/lib/commonjs/components/MainComponents/ArchivedMessageCard.js.map +1 -0
- package/lib/commonjs/components/MainComponents/ChatHeader.js +22 -5
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +56 -25
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +31 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +18 -3
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +739 -42
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageSearchButton.js +58 -0
- package/lib/commonjs/components/MainComponents/MessageSearchButton.js.map +1 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +15 -6
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +110 -1
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +14 -3
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/BubbleHighlight.js +112 -0
- package/lib/commonjs/components/MessageBubble/BubbleHighlight.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/Message.js +169 -125
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +98 -78
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/messageMenuLayout.js +50 -0
- package/lib/commonjs/components/MessageBubble/messageMenuLayout.js.map +1 -0
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +73 -37
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageHitResults.js +253 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageHitResults.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js +488 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/openHit.js +51 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/openHit.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/resolveSender.js +47 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/resolveSender.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/searchFilters.js +83 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/searchFilters.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/snippet.js +61 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/snippet.js.map +1 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/useMessageSearch.js +136 -0
- package/lib/commonjs/components/Modals/MessageSearchModal/useMessageSearch.js.map +1 -0
- package/lib/commonjs/components/Modals/PublicChatsModal/PublicChatsModal.js +306 -0
- package/lib/commonjs/components/Modals/PublicChatsModal/PublicChatsModal.js.map +1 -0
- package/lib/commonjs/components/Modals/PublicChatsModal/publicChatsLogic.js +36 -0
- package/lib/commonjs/components/Modals/PublicChatsModal/publicChatsLogic.js.map +1 -0
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +8 -1
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +13 -2
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js +38 -6
- package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadHeader.js +3 -1
- package/lib/commonjs/components/Thread/ThreadHeader.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +90 -10
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/styled/AudioDecoderHost.js +338 -0
- package/lib/commonjs/components/styled/AudioDecoderHost.js.map +1 -0
- package/lib/commonjs/components/styled/AudioMessage.js +493 -420
- package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +31 -5
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +14 -4
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +41 -77
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/audioWaveform.js +165 -0
- package/lib/commonjs/helpers/audioWaveform.js.map +1 -0
- package/lib/commonjs/helpers/backgroundJoinSweep.js +36 -0
- package/lib/commonjs/helpers/backgroundJoinSweep.js.map +1 -0
- package/lib/commonjs/helpers/bubbleHighlight.js +44 -0
- package/lib/commonjs/helpers/bubbleHighlight.js.map +1 -0
- package/lib/commonjs/helpers/checkUniqueUsers.js +14 -12
- package/lib/commonjs/helpers/checkUniqueUsers.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +5 -1
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js +3 -1
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/commonjs/helpers/createRoomFromApi.js +40 -3
- package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
- package/lib/commonjs/helpers/dedupeMembers.js +34 -0
- package/lib/commonjs/helpers/dedupeMembers.js.map +1 -0
- package/lib/commonjs/helpers/ethoraLogger.js +56 -0
- package/lib/commonjs/helpers/ethoraLogger.js.map +1 -0
- package/lib/commonjs/helpers/getUnnamedUsers.js +9 -4
- package/lib/commonjs/helpers/getUnnamedUsers.js.map +1 -1
- package/lib/commonjs/helpers/historyPreloadConfig.js +44 -0
- package/lib/commonjs/helpers/historyPreloadConfig.js.map +1 -0
- package/lib/commonjs/helpers/historyPreloadScheduler.js +372 -137
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/initRoomsPresence.js +17 -5
- package/lib/commonjs/helpers/initRoomsPresence.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +5 -0
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/isLikelyMucJid.js +67 -0
- package/lib/commonjs/helpers/isLikelyMucJid.js.map +1 -0
- package/lib/commonjs/helpers/isMessageSearchEnabled.js +18 -0
- package/lib/commonjs/helpers/isMessageSearchEnabled.js.map +1 -0
- package/lib/commonjs/helpers/joiningRoom.js +14 -0
- package/lib/commonjs/helpers/joiningRoom.js.map +1 -0
- package/lib/commonjs/helpers/jumpThread.js +100 -0
- package/lib/commonjs/helpers/jumpThread.js.map +1 -0
- package/lib/commonjs/helpers/jumpToMessage.js +58 -0
- package/lib/commonjs/helpers/jumpToMessage.js.map +1 -0
- package/lib/commonjs/helpers/jumpWindow.js +187 -0
- package/lib/commonjs/helpers/jumpWindow.js.map +1 -0
- package/lib/commonjs/helpers/loadRoomHistory.js +75 -0
- package/lib/commonjs/helpers/loadRoomHistory.js.map +1 -0
- package/lib/commonjs/helpers/notificationPolicy.js +77 -0
- package/lib/commonjs/helpers/notificationPolicy.js.map +1 -0
- package/lib/commonjs/helpers/openRoomAtMessage.js +47 -0
- package/lib/commonjs/helpers/openRoomAtMessage.js.map +1 -0
- package/lib/commonjs/helpers/openThreadForJump.js +72 -0
- package/lib/commonjs/helpers/openThreadForJump.js.map +1 -0
- package/lib/commonjs/helpers/parseMessageReference.js +27 -8
- package/lib/commonjs/helpers/parseMessageReference.js.map +1 -1
- package/lib/commonjs/helpers/publicChatsEntry.js +17 -0
- package/lib/commonjs/helpers/publicChatsEntry.js.map +1 -0
- package/lib/commonjs/helpers/roomActivityScore.js +37 -0
- package/lib/commonjs/helpers/roomActivityScore.js.map +1 -0
- package/lib/commonjs/helpers/roomUserCount.js +36 -0
- package/lib/commonjs/helpers/roomUserCount.js.map +1 -0
- package/lib/commonjs/helpers/runConfiguredHistoryPreload.js +68 -0
- package/lib/commonjs/helpers/runConfiguredHistoryPreload.js.map +1 -0
- package/lib/commonjs/helpers/sessionAppId.js +24 -0
- package/lib/commonjs/helpers/sessionAppId.js.map +1 -0
- package/lib/commonjs/helpers/timestamp.js +43 -0
- package/lib/commonjs/helpers/timestamp.js.map +1 -0
- package/lib/commonjs/helpers/userResolver.js +517 -0
- package/lib/commonjs/helpers/userResolver.js.map +1 -0
- package/lib/commonjs/helpers/xmppIdShape.js +52 -0
- package/lib/commonjs/helpers/xmppIdShape.js.map +1 -0
- package/lib/commonjs/hooks/useChatWrapperInit.js +27 -5
- package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/commonjs/hooks/useHeapSender.js +54 -3
- package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
- package/lib/commonjs/hooks/useJumpToMessage.js +411 -0
- package/lib/commonjs/hooks/useJumpToMessage.js.map +1 -0
- package/lib/commonjs/hooks/useMessageLoaderQueue.js +32 -5
- package/lib/commonjs/hooks/useMessageLoaderQueue.js.map +1 -1
- package/lib/commonjs/hooks/useMessageQueue.js +13 -5
- package/lib/commonjs/hooks/useMessageQueue.js.map +1 -1
- package/lib/commonjs/hooks/useRoomDirectory.js +29 -0
- package/lib/commonjs/hooks/useRoomDirectory.js.map +1 -0
- package/lib/commonjs/hooks/useRoomInitialization.js +27 -5
- package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
- package/lib/commonjs/hooks/useRoomMute.js +62 -0
- package/lib/commonjs/hooks/useRoomMute.js.map +1 -0
- package/lib/commonjs/hooks/useRoomState.js +3 -1
- package/lib/commonjs/hooks/useRoomState.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +13 -3
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +288 -6
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/networking/api-requests/messageSearch.api.js +87 -0
- package/lib/commonjs/networking/api-requests/messageSearch.api.js.map +1 -0
- package/lib/commonjs/networking/api-requests/publicChats.api.js +48 -0
- package/lib/commonjs/networking/api-requests/publicChats.api.js.map +1 -0
- package/lib/commonjs/networking/api-requests/roomMembers.api.js +253 -4
- package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +48 -12
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/xmppToken.api.js +71 -0
- package/lib/commonjs/networking/api-requests/xmppToken.api.js.map +1 -0
- package/lib/commonjs/networking/ethoraEvents.js +227 -0
- package/lib/commonjs/networking/ethoraEvents.js.map +1 -0
- package/lib/commonjs/networking/stanzaHandlers.js +153 -16
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmpp/allRoomPresences.xmpp.js +124 -3
- package/lib/commonjs/networking/xmpp/allRoomPresences.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +319 -35
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +7 -0
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/historyCursor.js +101 -0
- package/lib/commonjs/networking/xmpp/historyCursor.js.map +1 -0
- package/lib/commonjs/networking/xmpp/mamQueryIds.js +17 -0
- package/lib/commonjs/networking/xmpp/mamQueryIds.js.map +1 -0
- package/lib/commonjs/networking/xmpp/mamRouter.js +24 -9
- package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -1
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +70 -65
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/roomJoinSweep.js +389 -0
- package/lib/commonjs/networking/xmpp/roomJoinSweep.js.map +1 -0
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +0 -1
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +0 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +0 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +269 -41
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/networking/xmppCredentials.js +80 -0
- package/lib/commonjs/networking/xmppCredentials.js.map +1 -0
- package/lib/commonjs/roomStore/Middleware/jumpThreadMiddleware.js +158 -0
- package/lib/commonjs/roomStore/Middleware/jumpThreadMiddleware.js.map +1 -0
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +6 -0
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +45 -7
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js +15 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/commonjs/roomStore/index.js +13 -3
- package/lib/commonjs/roomStore/index.js.map +1 -1
- package/lib/commonjs/roomStore/persistence.js +48 -1
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +474 -60
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/roomStore/safeKey.js +44 -0
- package/lib/commonjs/roomStore/safeKey.js.map +1 -0
- package/lib/commonjs/roomStore/usersSetCap.js +37 -0
- package/lib/commonjs/roomStore/usersSetCap.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/assets/icons.js +1 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/Header/HeaderRoomList.js +23 -7
- package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/module/components/InputComponents/Search.js +39 -2
- package/lib/module/components/InputComponents/Search.js.map +1 -1
- package/lib/module/components/MainComponents/ArchivedMessageCard.js +161 -0
- package/lib/module/components/MainComponents/ArchivedMessageCard.js.map +1 -0
- package/lib/module/components/MainComponents/ChatHeader.js +22 -5
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +57 -26
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +31 -1
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +18 -3
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +740 -42
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/MessageSearchButton.js +48 -0
- package/lib/module/components/MainComponents/MessageSearchButton.js.map +1 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js +15 -7
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +111 -2
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/Menu/HeaderRoomListMenu.js +15 -4
- package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/module/components/MessageBubble/BubbleHighlight.js +106 -0
- package/lib/module/components/MessageBubble/BubbleHighlight.js.map +1 -0
- package/lib/module/components/MessageBubble/Message.js +172 -127
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +98 -78
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/MessageBubble/messageMenuLayout.js +45 -0
- package/lib/module/components/MessageBubble/messageMenuLayout.js.map +1 -0
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +74 -38
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/MessageSearchModal/MessageHitResults.js +243 -0
- package/lib/module/components/Modals/MessageSearchModal/MessageHitResults.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js +482 -0
- package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/openHit.js +45 -0
- package/lib/module/components/Modals/MessageSearchModal/openHit.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/resolveSender.js +41 -0
- package/lib/module/components/Modals/MessageSearchModal/resolveSender.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/searchFilters.js +74 -0
- package/lib/module/components/Modals/MessageSearchModal/searchFilters.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/snippet.js +57 -0
- package/lib/module/components/Modals/MessageSearchModal/snippet.js.map +1 -0
- package/lib/module/components/Modals/MessageSearchModal/useMessageSearch.js +131 -0
- package/lib/module/components/Modals/MessageSearchModal/useMessageSearch.js.map +1 -0
- package/lib/module/components/Modals/PublicChatsModal/PublicChatsModal.js +300 -0
- package/lib/module/components/Modals/PublicChatsModal/PublicChatsModal.js.map +1 -0
- package/lib/module/components/Modals/PublicChatsModal/publicChatsLogic.js +30 -0
- package/lib/module/components/Modals/PublicChatsModal/publicChatsLogic.js.map +1 -0
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +8 -1
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +14 -3
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/SwipeableRoomRow.js +39 -7
- package/lib/module/components/RoomComponents/SwipeableRoomRow.js.map +1 -1
- package/lib/module/components/Thread/ThreadHeader.js +3 -1
- package/lib/module/components/Thread/ThreadHeader.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +89 -9
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/styled/AudioDecoderHost.js +332 -0
- package/lib/module/components/styled/AudioDecoderHost.js.map +1 -0
- package/lib/module/components/styled/AudioMessage.js +495 -422
- package/lib/module/components/styled/AudioMessage.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +32 -6
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +15 -5
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/context/xmppProvider.js +42 -78
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/audioWaveform.js +153 -0
- package/lib/module/helpers/audioWaveform.js.map +1 -0
- package/lib/module/helpers/backgroundJoinSweep.js +30 -0
- package/lib/module/helpers/backgroundJoinSweep.js.map +1 -0
- package/lib/module/helpers/bubbleHighlight.js +38 -0
- package/lib/module/helpers/bubbleHighlight.js.map +1 -0
- package/lib/module/helpers/checkUniqueUsers.js +15 -13
- package/lib/module/helpers/checkUniqueUsers.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js +5 -1
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_TYPES.js +3 -1
- package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/module/helpers/createRoomFromApi.js +37 -3
- package/lib/module/helpers/createRoomFromApi.js.map +1 -1
- package/lib/module/helpers/dedupeMembers.js +28 -0
- package/lib/module/helpers/dedupeMembers.js.map +1 -0
- package/lib/module/helpers/ethoraLogger.js +52 -0
- package/lib/module/helpers/ethoraLogger.js.map +1 -0
- package/lib/module/helpers/getUnnamedUsers.js +9 -4
- package/lib/module/helpers/getUnnamedUsers.js.map +1 -1
- package/lib/module/helpers/historyPreloadConfig.js +39 -0
- package/lib/module/helpers/historyPreloadConfig.js.map +1 -0
- package/lib/module/helpers/historyPreloadScheduler.js +368 -134
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/initRoomsPresence.js +18 -5
- package/lib/module/helpers/initRoomsPresence.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +5 -0
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/isLikelyMucJid.js +60 -0
- package/lib/module/helpers/isLikelyMucJid.js.map +1 -0
- package/lib/module/helpers/isMessageSearchEnabled.js +13 -0
- package/lib/module/helpers/isMessageSearchEnabled.js.map +1 -0
- package/lib/module/helpers/joiningRoom.js +9 -0
- package/lib/module/helpers/joiningRoom.js.map +1 -0
- package/lib/module/helpers/jumpThread.js +83 -0
- package/lib/module/helpers/jumpThread.js.map +1 -0
- package/lib/module/helpers/jumpToMessage.js +52 -0
- package/lib/module/helpers/jumpToMessage.js.map +1 -0
- package/lib/module/helpers/jumpWindow.js +177 -0
- package/lib/module/helpers/jumpWindow.js.map +1 -0
- package/lib/module/helpers/loadRoomHistory.js +69 -0
- package/lib/module/helpers/loadRoomHistory.js.map +1 -0
- package/lib/module/helpers/notificationPolicy.js +70 -0
- package/lib/module/helpers/notificationPolicy.js.map +1 -0
- package/lib/module/helpers/openRoomAtMessage.js +41 -0
- package/lib/module/helpers/openRoomAtMessage.js.map +1 -0
- package/lib/module/helpers/openThreadForJump.js +68 -0
- package/lib/module/helpers/openThreadForJump.js.map +1 -0
- package/lib/module/helpers/parseMessageReference.js +26 -6
- package/lib/module/helpers/parseMessageReference.js.map +1 -1
- package/lib/module/helpers/publicChatsEntry.js +12 -0
- package/lib/module/helpers/publicChatsEntry.js.map +1 -0
- package/lib/module/helpers/roomActivityScore.js +30 -0
- package/lib/module/helpers/roomActivityScore.js.map +1 -0
- package/lib/module/helpers/roomUserCount.js +29 -0
- package/lib/module/helpers/roomUserCount.js.map +1 -0
- package/lib/module/helpers/runConfiguredHistoryPreload.js +63 -0
- package/lib/module/helpers/runConfiguredHistoryPreload.js.map +1 -0
- package/lib/module/helpers/sessionAppId.js +20 -0
- package/lib/module/helpers/sessionAppId.js.map +1 -0
- package/lib/module/helpers/timestamp.js +37 -0
- package/lib/module/helpers/timestamp.js.map +1 -0
- package/lib/module/helpers/userResolver.js +503 -0
- package/lib/module/helpers/userResolver.js.map +1 -0
- package/lib/module/helpers/xmppIdShape.js +46 -0
- package/lib/module/helpers/xmppIdShape.js.map +1 -0
- package/lib/module/hooks/useChatWrapperInit.js +16 -5
- package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/module/hooks/useHeapSender.js +54 -3
- package/lib/module/hooks/useHeapSender.js.map +1 -1
- package/lib/module/hooks/useJumpToMessage.js +389 -0
- package/lib/module/hooks/useJumpToMessage.js.map +1 -0
- package/lib/module/hooks/useMessageLoaderQueue.js +32 -5
- package/lib/module/hooks/useMessageLoaderQueue.js.map +1 -1
- package/lib/module/hooks/useMessageQueue.js +13 -5
- package/lib/module/hooks/useMessageQueue.js.map +1 -1
- package/lib/module/hooks/useRoomDirectory.js +24 -0
- package/lib/module/hooks/useRoomDirectory.js.map +1 -0
- package/lib/module/hooks/useRoomInitialization.js +29 -7
- package/lib/module/hooks/useRoomInitialization.js.map +1 -1
- package/lib/module/hooks/useRoomMute.js +58 -0
- package/lib/module/hooks/useRoomMute.js.map +1 -0
- package/lib/module/hooks/useRoomState.js +3 -1
- package/lib/module/hooks/useRoomState.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +13 -3
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/i18n/strings.js +288 -6
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/networking/api-requests/messageSearch.api.js +81 -0
- package/lib/module/networking/api-requests/messageSearch.api.js.map +1 -0
- package/lib/module/networking/api-requests/publicChats.api.js +43 -0
- package/lib/module/networking/api-requests/publicChats.api.js.map +1 -0
- package/lib/module/networking/api-requests/roomMembers.api.js +248 -4
- package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +48 -12
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/api-requests/xmppToken.api.js +66 -0
- package/lib/module/networking/api-requests/xmppToken.api.js.map +1 -0
- package/lib/module/networking/ethoraEvents.js +220 -0
- package/lib/module/networking/ethoraEvents.js.map +1 -0
- package/lib/module/networking/stanzaHandlers.js +155 -18
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmpp/allRoomPresences.xmpp.js +125 -3
- package/lib/module/networking/xmpp/allRoomPresences.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/getHistory.xmpp.js +318 -35
- package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js +7 -0
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/historyCursor.js +95 -0
- package/lib/module/networking/xmpp/historyCursor.js.map +1 -0
- package/lib/module/networking/xmpp/mamQueryIds.js +12 -0
- package/lib/module/networking/xmpp/mamQueryIds.js.map +1 -0
- package/lib/module/networking/xmpp/mamRouter.js +22 -8
- package/lib/module/networking/xmpp/mamRouter.js.map +1 -1
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +68 -62
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/roomJoinSweep.js +385 -0
- package/lib/module/networking/xmpp/roomJoinSweep.js.map +1 -0
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +0 -1
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +0 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +0 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +269 -41
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/networking/xmppCredentials.js +76 -0
- package/lib/module/networking/xmppCredentials.js.map +1 -0
- package/lib/module/roomStore/Middleware/jumpThreadMiddleware.js +153 -0
- package/lib/module/roomStore/Middleware/jumpThreadMiddleware.js.map +1 -0
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js +6 -0
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/unreadMidlleware.js +46 -7
- package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/module/roomStore/chatSettingsSlice.js +13 -0
- package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/module/roomStore/index.js +7 -3
- package/lib/module/roomStore/index.js.map +1 -1
- package/lib/module/roomStore/persistence.js +46 -1
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +459 -58
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/roomStore/safeKey.js +37 -0
- package/lib/module/roomStore/safeKey.js.map +1 -0
- package/lib/module/roomStore/usersSetCap.js +32 -0
- package/lib/module/roomStore/usersSetCap.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/assets/icons.d.ts +4 -0
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
- package/lib/typescript/components/InputComponents/Search.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ArchivedMessageCard.d.ts +12 -0
- package/lib/typescript/components/MainComponents/ArchivedMessageCard.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/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts +22 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageSearchButton.d.ts +7 -0
- package/lib/typescript/components/MainComponents/MessageSearchButton.d.ts.map +1 -0
- 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/Menu/HeaderRoomListMenu.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/BubbleHighlight.d.ts +12 -0
- package/lib/typescript/components/MessageBubble/BubbleHighlight.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +5 -0
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/messageMenuLayout.d.ts +29 -0
- package/lib/typescript/components/MessageBubble/messageMenuLayout.d.ts.map +1 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts +2 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/MessageSearchModal/MessageHitResults.d.ts +44 -0
- package/lib/typescript/components/Modals/MessageSearchModal/MessageHitResults.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts +12 -0
- package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/openHit.d.ts +15 -0
- package/lib/typescript/components/Modals/MessageSearchModal/openHit.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/resolveSender.d.ts +34 -0
- package/lib/typescript/components/Modals/MessageSearchModal/resolveSender.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/searchFilters.d.ts +41 -0
- package/lib/typescript/components/Modals/MessageSearchModal/searchFilters.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/snippet.d.ts +15 -0
- package/lib/typescript/components/Modals/MessageSearchModal/snippet.d.ts.map +1 -0
- package/lib/typescript/components/Modals/MessageSearchModal/useMessageSearch.d.ts +23 -0
- package/lib/typescript/components/Modals/MessageSearchModal/useMessageSearch.d.ts.map +1 -0
- package/lib/typescript/components/Modals/PublicChatsModal/PublicChatsModal.d.ts +16 -0
- package/lib/typescript/components/Modals/PublicChatsModal/PublicChatsModal.d.ts.map +1 -0
- package/lib/typescript/components/Modals/PublicChatsModal/publicChatsLogic.d.ts +14 -0
- package/lib/typescript/components/Modals/PublicChatsModal/publicChatsLogic.d.ts.map +1 -0
- package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts +5 -1
- package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts.map +1 -1
- package/lib/typescript/components/Thread/ThreadHeader.d.ts.map +1 -1
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/styled/AudioDecoderHost.d.ts +39 -0
- package/lib/typescript/components/styled/AudioDecoderHost.d.ts.map +1 -0
- package/lib/typescript/components/styled/AudioMessage.d.ts +14 -1
- package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
- 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/helpers/audioWaveform.d.ts +54 -0
- package/lib/typescript/helpers/audioWaveform.d.ts.map +1 -0
- package/lib/typescript/helpers/backgroundJoinSweep.d.ts +14 -0
- package/lib/typescript/helpers/backgroundJoinSweep.d.ts.map +1 -0
- package/lib/typescript/helpers/bubbleHighlight.d.ts +17 -0
- package/lib/typescript/helpers/bubbleHighlight.d.ts.map +1 -0
- package/lib/typescript/helpers/checkUniqueUsers.d.ts +2 -2
- package/lib/typescript/helpers/checkUniqueUsers.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +2 -0
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
- package/lib/typescript/helpers/createRoomFromApi.d.ts +25 -0
- package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
- package/lib/typescript/helpers/dedupeMembers.d.ts +11 -0
- package/lib/typescript/helpers/dedupeMembers.d.ts.map +1 -0
- package/lib/typescript/helpers/ethoraLogger.d.ts +13 -0
- package/lib/typescript/helpers/ethoraLogger.d.ts.map +1 -0
- package/lib/typescript/helpers/getUnnamedUsers.d.ts.map +1 -1
- package/lib/typescript/helpers/historyPreloadConfig.d.ts +26 -0
- package/lib/typescript/helpers/historyPreloadConfig.d.ts.map +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts +8 -4
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/initRoomsPresence.d.ts +7 -0
- package/lib/typescript/helpers/initRoomsPresence.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/isLikelyMucJid.d.ts +19 -0
- package/lib/typescript/helpers/isLikelyMucJid.d.ts.map +1 -0
- package/lib/typescript/helpers/isMessageSearchEnabled.d.ts +12 -0
- package/lib/typescript/helpers/isMessageSearchEnabled.d.ts.map +1 -0
- package/lib/typescript/helpers/joiningRoom.d.ts +7 -0
- package/lib/typescript/helpers/joiningRoom.d.ts.map +1 -0
- package/lib/typescript/helpers/jumpThread.d.ts +48 -0
- package/lib/typescript/helpers/jumpThread.d.ts.map +1 -0
- package/lib/typescript/helpers/jumpToMessage.d.ts +26 -0
- package/lib/typescript/helpers/jumpToMessage.d.ts.map +1 -0
- package/lib/typescript/helpers/jumpWindow.d.ts +74 -0
- package/lib/typescript/helpers/jumpWindow.d.ts.map +1 -0
- package/lib/typescript/helpers/loadRoomHistory.d.ts +34 -0
- package/lib/typescript/helpers/loadRoomHistory.d.ts.map +1 -0
- package/lib/typescript/helpers/notificationPolicy.d.ts +42 -0
- package/lib/typescript/helpers/notificationPolicy.d.ts.map +1 -0
- package/lib/typescript/helpers/openRoomAtMessage.d.ts +17 -0
- package/lib/typescript/helpers/openRoomAtMessage.d.ts.map +1 -0
- package/lib/typescript/helpers/openThreadForJump.d.ts +27 -0
- package/lib/typescript/helpers/openThreadForJump.d.ts.map +1 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts +18 -5
- package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -1
- package/lib/typescript/helpers/publicChatsEntry.d.ts +11 -0
- package/lib/typescript/helpers/publicChatsEntry.d.ts.map +1 -0
- package/lib/typescript/helpers/roomActivityScore.d.ts +5 -0
- package/lib/typescript/helpers/roomActivityScore.d.ts.map +1 -0
- package/lib/typescript/helpers/roomUserCount.d.ts +20 -0
- package/lib/typescript/helpers/roomUserCount.d.ts.map +1 -0
- package/lib/typescript/helpers/runConfiguredHistoryPreload.d.ts +21 -0
- package/lib/typescript/helpers/runConfiguredHistoryPreload.d.ts.map +1 -0
- package/lib/typescript/helpers/sessionAppId.d.ts +8 -0
- package/lib/typescript/helpers/sessionAppId.d.ts.map +1 -0
- package/lib/typescript/helpers/timestamp.d.ts +3 -0
- package/lib/typescript/helpers/timestamp.d.ts.map +1 -0
- package/lib/typescript/helpers/userResolver.d.ts +58 -0
- package/lib/typescript/helpers/userResolver.d.ts.map +1 -0
- package/lib/typescript/helpers/xmppIdShape.d.ts +10 -0
- package/lib/typescript/helpers/xmppIdShape.d.ts.map +1 -0
- package/lib/typescript/hooks/useChatWrapperInit.d.ts +2 -0
- package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
- package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
- package/lib/typescript/hooks/useJumpToMessage.d.ts +116 -0
- package/lib/typescript/hooks/useJumpToMessage.d.ts.map +1 -0
- package/lib/typescript/hooks/useMessageLoaderQueue.d.ts.map +1 -1
- package/lib/typescript/hooks/useMessageQueue.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomDirectory.d.ts +12 -0
- package/lib/typescript/hooks/useRoomDirectory.d.ts.map +1 -0
- package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomMute.d.ts +8 -0
- package/lib/typescript/hooks/useRoomMute.d.ts.map +1 -0
- package/lib/typescript/hooks/useRoomState.d.ts +1 -0
- package/lib/typescript/hooks/useRoomState.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/networking/api-requests/messageSearch.api.d.ts +57 -0
- package/lib/typescript/networking/api-requests/messageSearch.api.d.ts.map +1 -0
- package/lib/typescript/networking/api-requests/publicChats.api.d.ts +24 -0
- package/lib/typescript/networking/api-requests/publicChats.api.d.ts.map +1 -0
- package/lib/typescript/networking/api-requests/roomMembers.api.d.ts +19 -1
- package/lib/typescript/networking/api-requests/roomMembers.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/xmppToken.api.d.ts +2 -0
- package/lib/typescript/networking/api-requests/xmppToken.api.d.ts.map +1 -0
- package/lib/typescript/networking/ethoraEvents.d.ts +45 -0
- package/lib/typescript/networking/ethoraEvents.d.ts.map +1 -0
- package/lib/typescript/networking/stanzaHandlers.d.ts +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/allRoomPresences.xmpp.d.ts +32 -1
- package/lib/typescript/networking/xmpp/allRoomPresences.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +64 -0
- 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/historyCursor.d.ts +35 -0
- package/lib/typescript/networking/xmpp/historyCursor.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/mamQueryIds.d.ts +10 -0
- package/lib/typescript/networking/xmpp/mamQueryIds.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/mamRouter.d.ts +7 -0
- package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +13 -2
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/roomJoinSweep.d.ts +82 -0
- package/lib/typescript/networking/xmpp/roomJoinSweep.d.ts.map +1 -0
- 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 +90 -4
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/networking/xmppCredentials.d.ts +12 -0
- package/lib/typescript/networking/xmppCredentials.d.ts.map +1 -0
- package/lib/typescript/roomStore/Middleware/jumpThreadMiddleware.d.ts +3 -0
- package/lib/typescript/roomStore/Middleware/jumpThreadMiddleware.d.ts.map +1 -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/chatSettingsSlice.d.ts +8 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
- package/lib/typescript/roomStore/index.d.ts +2 -1
- package/lib/typescript/roomStore/index.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistence.d.ts +8 -0
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +138 -2
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/roomStore/safeKey.d.ts +13 -0
- package/lib/typescript/roomStore/safeKey.d.ts.map +1 -0
- package/lib/typescript/roomStore/usersSetCap.d.ts +16 -0
- package/lib/typescript/roomStore/usersSetCap.d.ts.map +1 -0
- package/lib/typescript/types/models/media.model.d.ts +2 -0
- package/lib/typescript/types/models/media.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +18 -5
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts +8 -1
- package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +88 -5
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/lib/typescript/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/assets/icons.tsx +13 -0
- package/src/components/Header/HeaderRoomList.tsx +21 -4
- package/src/components/InputComponents/Search.tsx +33 -0
- package/src/components/MainComponents/ArchivedMessageCard.tsx +139 -0
- package/src/components/MainComponents/ChatHeader.tsx +19 -3
- package/src/components/MainComponents/ChatRoom.tsx +60 -23
- package/src/components/MainComponents/ChatWrapper.tsx +23 -4
- package/src/components/MainComponents/MediaMessage.tsx +17 -0
- package/src/components/MainComponents/MessageList.tsx +823 -84
- package/src/components/MainComponents/MessageSearchButton.tsx +48 -0
- package/src/components/MainComponents/ReduxWrapper.tsx +16 -5
- package/src/components/MainComponents/RoomList.tsx +125 -0
- package/src/components/Menu/HeaderRoomListMenu.tsx +26 -2
- package/src/components/MessageBubble/BubbleHighlight.tsx +106 -0
- package/src/components/MessageBubble/Message.tsx +265 -177
- package/src/components/MessageBubble/MessageInteractions.tsx +109 -86
- package/src/components/MessageBubble/messageMenuLayout.ts +59 -0
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +92 -21
- package/src/components/Modals/MessageSearchModal/MessageHitResults.tsx +271 -0
- package/src/components/Modals/MessageSearchModal/MessageSearchModal.tsx +487 -0
- package/src/components/Modals/MessageSearchModal/openHit.ts +50 -0
- package/src/components/Modals/MessageSearchModal/resolveSender.ts +57 -0
- package/src/components/Modals/MessageSearchModal/searchFilters.ts +109 -0
- package/src/components/Modals/MessageSearchModal/snippet.ts +58 -0
- package/src/components/Modals/MessageSearchModal/useMessageSearch.ts +151 -0
- package/src/components/Modals/PublicChatsModal/PublicChatsModal.tsx +288 -0
- package/src/components/Modals/PublicChatsModal/publicChatsLogic.ts +36 -0
- package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +8 -1
- package/src/components/RoomComponents/ChatRoomItem.tsx +16 -3
- package/src/components/RoomComponents/SwipeableRoomRow.tsx +39 -6
- package/src/components/Thread/ThreadHeader.tsx +3 -1
- package/src/components/Thread/ThreadWrapper.tsx +96 -10
- package/src/components/styled/AudioDecoderHost.tsx +351 -0
- package/src/components/styled/AudioMessage.tsx +482 -425
- package/src/components/styled/SendInput.tsx +42 -4
- package/src/context/MessageNotificationContext.tsx +19 -5
- package/src/context/xmppProvider.tsx +44 -91
- package/src/helpers/audioWaveform.ts +142 -0
- package/src/helpers/backgroundJoinSweep.ts +35 -0
- package/src/helpers/bubbleHighlight.ts +47 -0
- package/src/helpers/checkUniqueUsers.tsx +15 -17
- package/src/helpers/constants/MODAL_COMPONENTS.tsx +4 -0
- package/src/helpers/constants/MODAL_TYPES.ts +3 -0
- package/src/helpers/createRoomFromApi.tsx +45 -4
- package/src/helpers/dedupeMembers.ts +29 -0
- package/src/helpers/ethoraLogger.ts +50 -0
- package/src/helpers/getUnnamedUsers.ts +7 -4
- package/src/helpers/historyPreloadConfig.ts +68 -0
- package/src/helpers/historyPreloadScheduler.ts +437 -199
- package/src/helpers/initRoomsPresence.ts +20 -7
- package/src/helpers/insertMessageWithDelimiter.ts +3 -0
- package/src/helpers/isLikelyMucJid.ts +72 -0
- package/src/helpers/isMessageSearchEnabled.ts +18 -0
- package/src/helpers/joiningRoom.ts +13 -0
- package/src/helpers/jumpThread.ts +102 -0
- package/src/helpers/jumpToMessage.ts +57 -0
- package/src/helpers/jumpWindow.ts +212 -0
- package/src/helpers/loadRoomHistory.ts +83 -0
- package/src/helpers/notificationPolicy.ts +82 -0
- package/src/helpers/openRoomAtMessage.ts +38 -0
- package/src/helpers/openThreadForJump.ts +96 -0
- package/src/helpers/parseMessageReference.ts +37 -8
- package/src/helpers/publicChatsEntry.ts +15 -0
- package/src/helpers/roomActivityScore.ts +45 -0
- package/src/helpers/roomUserCount.ts +44 -0
- package/src/helpers/runConfiguredHistoryPreload.ts +76 -0
- package/src/helpers/sessionAppId.ts +17 -0
- package/src/helpers/timestamp.ts +44 -0
- package/src/helpers/userResolver.ts +542 -0
- package/src/helpers/xmppIdShape.ts +46 -0
- package/src/hooks/useChatWrapperInit.ts +22 -4
- package/src/hooks/useHeapSender.tsx +54 -3
- package/src/hooks/useJumpToMessage.ts +538 -0
- package/src/hooks/useMessageLoaderQueue.tsx +40 -4
- package/src/hooks/useMessageQueue.ts +9 -5
- package/src/hooks/useRoomDirectory.ts +39 -0
- package/src/hooks/useRoomInitialization.tsx +33 -7
- package/src/hooks/useRoomMute.ts +42 -0
- package/src/hooks/useRoomState.tsx +6 -0
- package/src/hooks/useSendMessage.tsx +14 -2
- package/src/i18n/strings.ts +282 -0
- package/src/networking/api-requests/messageSearch.api.ts +130 -0
- package/src/networking/api-requests/publicChats.api.ts +71 -0
- package/src/networking/api-requests/roomMembers.api.ts +263 -11
- package/src/networking/api-requests/rooms.api.ts +52 -12
- package/src/networking/api-requests/xmppToken.api.ts +62 -0
- package/src/networking/ethoraEvents.ts +262 -0
- package/src/networking/stanzaHandlers.ts +145 -19
- package/src/networking/xmpp/allRoomPresences.xmpp.ts +155 -5
- package/src/networking/xmpp/getHistory.xmpp.ts +433 -47
- package/src/networking/xmpp/handleStanzas.xmpp.ts +8 -0
- package/src/networking/xmpp/historyCursor.ts +124 -0
- package/src/networking/xmpp/mamQueryIds.ts +11 -0
- package/src/networking/xmpp/mamRouter.ts +24 -10
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +91 -68
- package/src/networking/xmpp/roomJoinSweep.ts +412 -0
- package/src/networking/xmpp/sendMediaMessage.xmpp.ts +0 -1
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +0 -1
- package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +0 -1
- package/src/networking/xmppClient.ts +323 -47
- package/src/networking/xmppCredentials.ts +87 -0
- package/src/roomStore/Middleware/jumpThreadMiddleware.ts +163 -0
- package/src/roomStore/Middleware/reactionsMiddleware.tsx +4 -0
- package/src/roomStore/Middleware/unreadMidlleware.tsx +59 -11
- package/src/roomStore/chatSettingsSlice.ts +11 -0
- package/src/roomStore/index.ts +10 -3
- package/src/roomStore/persistence.ts +54 -0
- package/src/roomStore/roomsSlice.ts +547 -65
- package/src/roomStore/safeKey.ts +49 -0
- package/src/roomStore/usersSetCap.ts +37 -0
- package/src/types/models/media.model.ts +4 -0
- package/src/types/models/room.model.ts +18 -5
- package/src/types/models/xmpp.model.ts +15 -1
- package/src/types/types.ts +93 -5
- package/src/version.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import xmpp, { Client } from '@xmpp/client';
|
|
2
2
|
import { walletToUsername } from '../helpers/walletUsername';
|
|
3
|
-
import { xmppSettingsInterface } from '../types/types';
|
|
3
|
+
import { IMessage, xmppSettingsInterface } from '../types/types';
|
|
4
4
|
|
|
5
5
|
import { sendMediaMessage } from './xmpp/sendMediaMessage.xmpp';
|
|
6
6
|
import { getChatsPrivateStoreRequest } from './xmpp/getChatsPrivateStoreRequest.xmpp';
|
|
@@ -8,12 +8,18 @@ import { actionSetTimestampToPrivateStore } from './xmpp/actionSetTimestampToPri
|
|
|
8
8
|
import { flushLastViewedToPrivateStore } from './xmpp/flushLastViewedToPrivateStore';
|
|
9
9
|
import { sendTypingRequest } from './xmpp/sendTypingRequest.xmpp';
|
|
10
10
|
import { sendPing } from './xmpp/sendPing.xmpp';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
fetchHistoryPage,
|
|
13
|
+
getHistory,
|
|
14
|
+
getHistoryPage,
|
|
15
|
+
HistoryPage,
|
|
16
|
+
HistoryPageCursor,
|
|
17
|
+
} from './xmpp/getHistory.xmpp';
|
|
12
18
|
import { sendTextMessage } from './xmpp/sendTextMessage.xmpp';
|
|
13
19
|
import { sendMessageReaction } from './xmpp/sendMessageReaction.xmpp';
|
|
14
20
|
import { sendTextMessageWithTranslateTag } from './xmpp/sendTextMessageWithTranslateTag.xmpp';
|
|
15
21
|
import { deleteMessage } from './xmpp/deleteMessage.xmpp';
|
|
16
|
-
import {
|
|
22
|
+
import { RoomJoinManager } from './xmpp/roomJoinSweep';
|
|
17
23
|
import { getLastMessage } from './xmpp/getLastMessageArchive.xmpp';
|
|
18
24
|
import { createRoom } from './xmpp/createRoom.xmpp';
|
|
19
25
|
import { setRoomImage } from './xmpp/setRoomImage.xmpp';
|
|
@@ -107,9 +113,43 @@ interface HistoryOptions {
|
|
|
107
113
|
interface MamInFlightEntry {
|
|
108
114
|
promise: Promise<any>;
|
|
109
115
|
source: HistorySource;
|
|
116
|
+
/** The page asked for: only an identical request may share the answer. */
|
|
117
|
+
before?: number;
|
|
118
|
+
max: number;
|
|
110
119
|
startedAt: number;
|
|
111
120
|
}
|
|
112
121
|
|
|
122
|
+
interface HistoryTaskControl {
|
|
123
|
+
aborted: boolean;
|
|
124
|
+
/** The guarded promise every waiter of this task holds. */
|
|
125
|
+
self?: Promise<any>;
|
|
126
|
+
entry?: MamInFlightEntry;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* A history request that has neither answered nor failed by now is dropped
|
|
131
|
+
* (its slot and in-flight key freed) and asked once more. Longer than the
|
|
132
|
+
* request's own 10 s read timeout, so it only trips on a task stuck behind a
|
|
133
|
+
* gate or on a read that never returns.
|
|
134
|
+
*/
|
|
135
|
+
export const HISTORY_WATCHDOG_MS = 15_000;
|
|
136
|
+
|
|
137
|
+
/** What the server's <fin> said about one windowed MAM page. */
|
|
138
|
+
export interface HistoryWindowFin {
|
|
139
|
+
complete: boolean;
|
|
140
|
+
first: number | null;
|
|
141
|
+
last: number | null;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** One page of a windowed history query, returned instead of stored. */
|
|
145
|
+
export interface HistoryWindowPage extends HistoryWindowFin {
|
|
146
|
+
ok: boolean;
|
|
147
|
+
/** Ascending by time (oldest first), whichever direction was paged. */
|
|
148
|
+
messages: IMessage[];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export type { HistoryPage, HistoryPageCursor };
|
|
152
|
+
|
|
113
153
|
/**
|
|
114
154
|
* Floor between two credential rotations driven by reconnects. Well under
|
|
115
155
|
* the XMPP password's one-hour life, but high enough that a link flapping
|
|
@@ -204,7 +244,39 @@ export class XmppClient {
|
|
|
204
244
|
private onOnlineCallback: (() => void) | null = null;
|
|
205
245
|
|
|
206
246
|
// ---- QoS state (mirrors web XmppClient) ----------------------------
|
|
207
|
-
|
|
247
|
+
/**
|
|
248
|
+
* Bumped on every disconnect, reconnect and close. Anything that started
|
|
249
|
+
* on an older connection (a room join, a join sweep) compares against it
|
|
250
|
+
* and drops its result instead of writing into the new connection's state.
|
|
251
|
+
*/
|
|
252
|
+
connectionEpoch = 0;
|
|
253
|
+
// Per-connection MUC join state + the background join sweep.
|
|
254
|
+
readonly joins: RoomJoinManager = new RoomJoinManager({
|
|
255
|
+
getClient: () => this.client,
|
|
256
|
+
getConnectionEpoch: () => this.connectionEpoch,
|
|
257
|
+
isOnline: () => this.status === 'online',
|
|
258
|
+
waitForOnline: (timeoutMs) => this.waitForOnline(timeoutMs),
|
|
259
|
+
getConference: () => this.conference,
|
|
260
|
+
getHistoryQoS: () => this.xmppSettings?.historyQoS,
|
|
261
|
+
});
|
|
262
|
+
/** True once the whole background join sweep finished. */
|
|
263
|
+
get presencesReady(): boolean {
|
|
264
|
+
return this.joins.presencesReady;
|
|
265
|
+
}
|
|
266
|
+
set presencesReady(value: boolean) {
|
|
267
|
+
this.joins.presencesReady = value;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* True once the first wave of the sweep (open room + one pool width of the
|
|
271
|
+
* most recently active rooms) settled. Consumers that only need "joining
|
|
272
|
+
* works" (the offline send drain) gate on this, not on the whole sweep.
|
|
273
|
+
*/
|
|
274
|
+
get priorityPresencesReady(): boolean {
|
|
275
|
+
return this.joins.priorityPresencesReady;
|
|
276
|
+
}
|
|
277
|
+
set priorityPresencesReady(value: boolean) {
|
|
278
|
+
this.joins.priorityPresencesReady = value;
|
|
279
|
+
}
|
|
208
280
|
disableLastRead = false;
|
|
209
281
|
private activeRoomJID: string | null = null;
|
|
210
282
|
private activeRoomBoostUntil = 0;
|
|
@@ -347,71 +419,174 @@ export class XmppClient {
|
|
|
347
419
|
*/
|
|
348
420
|
async prioritizeRoomPresence(roomJID: string): Promise<boolean> {
|
|
349
421
|
try {
|
|
350
|
-
this.
|
|
351
|
-
|
|
422
|
+
return await this.joins.ensureRoomPresence(
|
|
423
|
+
normalizeRoomJid(roomJID, this.conference),
|
|
424
|
+
{ timeoutMs: 900, waitForJoin: false, source: 'active_room' }
|
|
425
|
+
);
|
|
352
426
|
} catch {
|
|
353
427
|
return false;
|
|
354
428
|
}
|
|
355
429
|
}
|
|
356
430
|
|
|
431
|
+
/** Join `roomJID` unless this connection already did (deduped). */
|
|
432
|
+
ensureRoomPresence(
|
|
433
|
+
roomJID: string,
|
|
434
|
+
options?: Parameters<RoomJoinManager['ensureRoomPresence']>[1]
|
|
435
|
+
): Promise<boolean> {
|
|
436
|
+
return this.joins.ensureRoomPresence(
|
|
437
|
+
normalizeRoomJid(roomJID, this.conference),
|
|
438
|
+
options
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Start (or share) the background join sweep: the open room first, then by
|
|
444
|
+
* recent activity, a few at a time. Resolves when the sweep ends; callers
|
|
445
|
+
* that must not wait simply do not await it. Never rejects.
|
|
446
|
+
*/
|
|
447
|
+
sendAllPresencesAndMarkReady(): Promise<void> {
|
|
448
|
+
return this.joins.sendAllPresencesAndMarkReady();
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/** Called on every disconnect / reconnect / close. */
|
|
452
|
+
private bumpConnectionEpoch() {
|
|
453
|
+
this.connectionEpoch += 1;
|
|
454
|
+
this.joins.reset();
|
|
455
|
+
}
|
|
456
|
+
|
|
357
457
|
/**
|
|
358
458
|
* Queued history fetch. Coalesces by room: if the same room already has
|
|
359
459
|
* a higher-priority request in flight, return that promise. Honors
|
|
360
460
|
* `skipIfPreloaded` by checking redux state (lazy import to avoid cycle).
|
|
361
461
|
*/
|
|
362
|
-
async enqueueHistoryTask(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
462
|
+
async enqueueHistoryTask(
|
|
463
|
+
params: {
|
|
464
|
+
chatJID: string;
|
|
465
|
+
max: number;
|
|
466
|
+
before?: number;
|
|
467
|
+
id?: string;
|
|
468
|
+
source?: HistorySource;
|
|
469
|
+
selfApplied?: boolean;
|
|
470
|
+
},
|
|
471
|
+
// Internal: this call is the single re-issue after a watchdog abort.
|
|
472
|
+
reissued = false
|
|
473
|
+
): Promise<any> {
|
|
474
|
+
const { chatJID, max, before, source = 'default' } = params;
|
|
475
|
+
|
|
476
|
+
// Coalesce: if a fetch for the same room AND the same page is in flight,
|
|
477
|
+
// reuse it unless the new request is higher priority. A request for a
|
|
478
|
+
// different page (the latest one in flight, an older one asked) is not
|
|
479
|
+
// the same answer and runs by itself.
|
|
374
480
|
const existing = this.mamInFlightByRoom.get(chatJID);
|
|
375
|
-
|
|
481
|
+
// A one-message teaser page (a staged preview pass) must not stand in for
|
|
482
|
+
// the full page an opened room asks for.
|
|
483
|
+
const existingIsTeaser =
|
|
484
|
+
!!existing &&
|
|
485
|
+
existing.max < Math.min(max, 5) &&
|
|
486
|
+
(source === 'active' || source === 'send_ack');
|
|
487
|
+
if (
|
|
488
|
+
existing &&
|
|
489
|
+
!existingIsTeaser &&
|
|
490
|
+
existing.before === before &&
|
|
491
|
+
this.sourceRank(existing.source) <= this.sourceRank(source)
|
|
492
|
+
) {
|
|
376
493
|
return existing.promise;
|
|
377
494
|
}
|
|
378
495
|
|
|
496
|
+
// The promise every waiter holds settles no later than the watchdog: a
|
|
497
|
+
// task stuck behind the gate, or a read that never returns, is dropped
|
|
498
|
+
// (slot and key freed) and, for a request somebody is waiting on, asked
|
|
499
|
+
// once more.
|
|
500
|
+
const ctl: HistoryTaskControl = { aborted: false };
|
|
501
|
+
const guarded: Promise<any> = new Promise((resolve) => {
|
|
502
|
+
let done = false;
|
|
503
|
+
const timer = setTimeout(() => {
|
|
504
|
+
if (done) {return;}
|
|
505
|
+
done = true;
|
|
506
|
+
ctl.aborted = true;
|
|
507
|
+
this.releaseMamEntry(chatJID, ctl);
|
|
508
|
+
console.warn(
|
|
509
|
+
`[XMPP] history_request_watchdog room=${chatJID} before=${String(before || '')}`
|
|
510
|
+
);
|
|
511
|
+
resolve(
|
|
512
|
+
!reissued && source !== 'background'
|
|
513
|
+
? this.enqueueHistoryTask(params, true).catch(() => undefined)
|
|
514
|
+
: undefined
|
|
515
|
+
);
|
|
516
|
+
}, HISTORY_WATCHDOG_MS);
|
|
517
|
+
this.runHistoryTask(params, ctl).then(
|
|
518
|
+
(messages) => {
|
|
519
|
+
if (done) {return;}
|
|
520
|
+
done = true;
|
|
521
|
+
clearTimeout(timer);
|
|
522
|
+
resolve(messages);
|
|
523
|
+
},
|
|
524
|
+
() => {
|
|
525
|
+
if (done) {return;}
|
|
526
|
+
done = true;
|
|
527
|
+
clearTimeout(timer);
|
|
528
|
+
resolve(undefined);
|
|
529
|
+
}
|
|
530
|
+
);
|
|
531
|
+
});
|
|
532
|
+
ctl.self = guarded;
|
|
533
|
+
if (ctl.entry) {ctl.entry.promise = guarded;}
|
|
534
|
+
return guarded;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
private releaseMamEntry(chatJID: string, ctl: HistoryTaskControl) {
|
|
538
|
+
const cur = this.mamInFlightByRoom.get(chatJID);
|
|
539
|
+
if (cur && cur === ctl.entry) {
|
|
540
|
+
this.mamInFlightByRoom.delete(chatJID);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
private async runHistoryTask(
|
|
545
|
+
params: {
|
|
546
|
+
chatJID: string;
|
|
547
|
+
max: number;
|
|
548
|
+
before?: number;
|
|
549
|
+
id?: string;
|
|
550
|
+
source?: HistorySource;
|
|
551
|
+
selfApplied?: boolean;
|
|
552
|
+
},
|
|
553
|
+
ctl: HistoryTaskControl
|
|
554
|
+
): Promise<IMessage[] | undefined> {
|
|
555
|
+
const { chatJID, max, before, id, source = 'default', selfApplied } = params;
|
|
556
|
+
|
|
379
557
|
// Wait for the gate (in-flight cap + soft-pause). For active-room
|
|
380
558
|
// requests we still proceed past the cap when the boost is fresh.
|
|
381
559
|
while (
|
|
560
|
+
!ctl.aborted &&
|
|
382
561
|
this.mamInFlightByRoom.size >= this.maxInFlightHistory &&
|
|
383
562
|
!(this.alwaysPrioritizeActiveRoom && this.activeRoomJID === chatJID)
|
|
384
563
|
) {
|
|
385
564
|
await new Promise((r) => setTimeout(r, 80));
|
|
386
565
|
}
|
|
387
|
-
if (Date.now() < this.softPauseUntil && source === 'background') {
|
|
566
|
+
if (!ctl.aborted && Date.now() < this.softPauseUntil && source === 'background') {
|
|
388
567
|
const wait = this.softPauseUntil - Date.now();
|
|
389
568
|
await new Promise((r) => setTimeout(r, wait));
|
|
390
569
|
}
|
|
570
|
+
if (ctl.aborted) {return undefined;}
|
|
391
571
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
// without TS's TDZ false-positive (TS2454 on a bare `let promise`).
|
|
395
|
-
const handle: { p?: Promise<any> } = {};
|
|
396
|
-
handle.p = (async () => {
|
|
397
|
-
try {
|
|
398
|
-
return await getHistory(this.client, chatJID, max, before, id, {
|
|
399
|
-
selfApplied,
|
|
400
|
-
});
|
|
401
|
-
} finally {
|
|
402
|
-
const cur = this.mamInFlightByRoom.get(chatJID);
|
|
403
|
-
if (cur && cur.promise === handle.p) {
|
|
404
|
-
this.mamInFlightByRoom.delete(chatJID);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
})();
|
|
408
|
-
|
|
409
|
-
this.mamInFlightByRoom.set(chatJID, {
|
|
410
|
-
promise: handle.p,
|
|
572
|
+
const entry: MamInFlightEntry = {
|
|
573
|
+
promise: ctl.self as Promise<any>,
|
|
411
574
|
source,
|
|
575
|
+
before,
|
|
576
|
+
max,
|
|
412
577
|
startedAt: Date.now(),
|
|
413
|
-
}
|
|
414
|
-
|
|
578
|
+
};
|
|
579
|
+
ctl.entry = entry;
|
|
580
|
+
this.mamInFlightByRoom.set(chatJID, entry);
|
|
581
|
+
try {
|
|
582
|
+
return await getHistory(this.client, chatJID, max, before, id, {
|
|
583
|
+
selfApplied,
|
|
584
|
+
});
|
|
585
|
+
} finally {
|
|
586
|
+
// Released exactly once, and only if still ours (a newer request may
|
|
587
|
+
// have replaced the entry after a watchdog abort).
|
|
588
|
+
this.releaseMamEntry(chatJID, ctl);
|
|
589
|
+
}
|
|
415
590
|
}
|
|
416
591
|
|
|
417
592
|
private sourceRank(s: HistorySource): number {
|
|
@@ -559,6 +734,9 @@ export class XmppClient {
|
|
|
559
734
|
this.onDisconnect = () => {
|
|
560
735
|
console.log('XMPP disconnected.');
|
|
561
736
|
this.status = 'offline';
|
|
737
|
+
// The stream is gone: joins, the sweep and its retries belong to the
|
|
738
|
+
// old connection and must not leak into the next one.
|
|
739
|
+
this.bumpConnectionEpoch();
|
|
562
740
|
try {
|
|
563
741
|
// lazy-require to avoid pulling devLogger into prod bundles
|
|
564
742
|
// that don't reference it; tree-shaken via dead-code elim.
|
|
@@ -580,10 +758,14 @@ export class XmppClient {
|
|
|
580
758
|
this.onOnline = () => {
|
|
581
759
|
console.log('XMPP online.', new Date());
|
|
582
760
|
this.status = 'online';
|
|
761
|
+
// Not ready until the join sweep ran (presencesReady = whole sweep
|
|
762
|
+
// done, priorityPresencesReady = its first wave). The sweep runs in
|
|
763
|
+
// the background: nothing waits for it. The provider / chat wrapper
|
|
764
|
+
// start one as well once the room list is loaded; they share this one.
|
|
583
765
|
this.authRecoveryFailures = 0;
|
|
584
766
|
this.authRejectionsSinceOnline = 0;
|
|
585
|
-
this.presencesReady = true;
|
|
586
767
|
this.reconnectAttempts = 0;
|
|
768
|
+
this.sendAllPresencesAndMarkReady();
|
|
587
769
|
try {
|
|
588
770
|
devPushLog(
|
|
589
771
|
'xmpp',
|
|
@@ -878,6 +1060,8 @@ export class XmppClient {
|
|
|
878
1060
|
// already detached above, so a late-settling stop() is harmless.
|
|
879
1061
|
await withTimeout(old.stop(), STOP_TIMEOUT_MS);
|
|
880
1062
|
}
|
|
1063
|
+
// A new underlying client: nothing joined on the old one carries over.
|
|
1064
|
+
this.bumpConnectionEpoch();
|
|
881
1065
|
this.initializeClient();
|
|
882
1066
|
if (this.suspendedForBackground) {
|
|
883
1067
|
await this.stopClientQuietly();
|
|
@@ -942,7 +1126,7 @@ export class XmppClient {
|
|
|
942
1126
|
this.clientAlreadyStopped = true;
|
|
943
1127
|
}
|
|
944
1128
|
this.status = 'offline';
|
|
945
|
-
this.
|
|
1129
|
+
this.bumpConnectionEpoch();
|
|
946
1130
|
}
|
|
947
1131
|
|
|
948
1132
|
async suspend(): Promise<void> {
|
|
@@ -999,7 +1183,7 @@ export class XmppClient {
|
|
|
999
1183
|
console.log('XMPP client connection closed.');
|
|
1000
1184
|
}
|
|
1001
1185
|
this.status = 'offline';
|
|
1002
|
-
this.
|
|
1186
|
+
this.bumpConnectionEpoch();
|
|
1003
1187
|
// Permanent teardown (logout / unmount) — drop buffered sends so they
|
|
1004
1188
|
// don't replay into the next session. Reconnect uses old.stop(), NOT
|
|
1005
1189
|
// close(), so the queue still survives a transient drop+reconnect.
|
|
@@ -1034,9 +1218,13 @@ export class XmppClient {
|
|
|
1034
1218
|
leaveTheRoom(normalizeRoomJid(roomJID, this.conference), this.client);
|
|
1035
1219
|
};
|
|
1036
1220
|
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1221
|
+
/**
|
|
1222
|
+
* Join a room (deduped: a room this connection already joined resolves at
|
|
1223
|
+
* once without a second presence). Resolves true when joined, false when
|
|
1224
|
+
* the join failed or is backing off; never rejects.
|
|
1225
|
+
*/
|
|
1226
|
+
presenceInRoomStanza = (roomJID: string): Promise<boolean> =>
|
|
1227
|
+
this.ensureRoomPresence(roomJID, { timeoutMs: 2000, source: 'other' });
|
|
1040
1228
|
|
|
1041
1229
|
getHistoryStanza = async (
|
|
1042
1230
|
chatJID: string,
|
|
@@ -1060,6 +1248,76 @@ export class XmppClient {
|
|
|
1060
1248
|
});
|
|
1061
1249
|
};
|
|
1062
1250
|
|
|
1251
|
+
/**
|
|
1252
|
+
* One archive page together with the server's RSM answer
|
|
1253
|
+
* (`<fin complete><set><first/><last/><count/>`). A latest page or one read
|
|
1254
|
+
* `before` a cursor feeds the live list (the stanza handler merges the rows)
|
|
1255
|
+
* and moves the room's paging cursor, room.messageStats.firstMessageTimestamp,
|
|
1256
|
+
* and room.historyComplete. A page read by `after` or a time filter is an
|
|
1257
|
+
* isolated query (see getHistoryWindow). Always settles, never throws.
|
|
1258
|
+
*/
|
|
1259
|
+
getHistoryPage = async (
|
|
1260
|
+
chatJID: string,
|
|
1261
|
+
max: number,
|
|
1262
|
+
cursor: HistoryPageCursor = {}
|
|
1263
|
+
): Promise<HistoryPage> => {
|
|
1264
|
+
try {
|
|
1265
|
+
return await getHistoryPage(this.client, chatJID, max, cursor);
|
|
1266
|
+
} catch {
|
|
1267
|
+
return {
|
|
1268
|
+
ok: false,
|
|
1269
|
+
messages: [],
|
|
1270
|
+
complete: false,
|
|
1271
|
+
first: null,
|
|
1272
|
+
last: null,
|
|
1273
|
+
count: null,
|
|
1274
|
+
received: 0,
|
|
1275
|
+
finSeen: false,
|
|
1276
|
+
roomJid: '',
|
|
1277
|
+
};
|
|
1278
|
+
}
|
|
1279
|
+
};
|
|
1280
|
+
|
|
1281
|
+
/**
|
|
1282
|
+
* One page of archive for a window around a message, RETURNED rather than
|
|
1283
|
+
* stored: its query is tagged so the stanza handlers skip its rows, nothing
|
|
1284
|
+
* is merged into the room, and messageStats / historyComplete are left
|
|
1285
|
+
* alone. Pass `before` for the page ending just before that archive id,
|
|
1286
|
+
* `after` for the page starting just after it (both exclusive; microsecond
|
|
1287
|
+
* MAM ids), or `start` / `end` (ISO) for the first page of a time range.
|
|
1288
|
+
* Messages come back oldest first, reactions merged.
|
|
1289
|
+
*/
|
|
1290
|
+
getHistoryWindow = async (
|
|
1291
|
+
chatJID: string,
|
|
1292
|
+
max: number,
|
|
1293
|
+
cursor: { before?: number; after?: number; start?: string; end?: string }
|
|
1294
|
+
): Promise<HistoryWindowPage> => {
|
|
1295
|
+
const failed: HistoryWindowPage = {
|
|
1296
|
+
ok: false,
|
|
1297
|
+
messages: [],
|
|
1298
|
+
complete: false,
|
|
1299
|
+
first: null,
|
|
1300
|
+
last: null,
|
|
1301
|
+
};
|
|
1302
|
+
if (this.status !== 'online') {return failed;}
|
|
1303
|
+
try {
|
|
1304
|
+
const page = await fetchHistoryPage(this.client, chatJID, max, {
|
|
1305
|
+
...cursor,
|
|
1306
|
+
window: true,
|
|
1307
|
+
});
|
|
1308
|
+
if (!page.ok || !page.finSeen) {return failed;}
|
|
1309
|
+
return {
|
|
1310
|
+
ok: true,
|
|
1311
|
+
messages: page.messages,
|
|
1312
|
+
complete: page.complete,
|
|
1313
|
+
first: page.first,
|
|
1314
|
+
last: page.last,
|
|
1315
|
+
};
|
|
1316
|
+
} catch {
|
|
1317
|
+
return failed;
|
|
1318
|
+
}
|
|
1319
|
+
};
|
|
1320
|
+
|
|
1063
1321
|
getLastMessageArchiveStanza(roomJID: string) {
|
|
1064
1322
|
getLastMessage(this.client, normalizeRoomJid(roomJID, this.conference));
|
|
1065
1323
|
}
|
|
@@ -1096,6 +1354,21 @@ export class XmppClient {
|
|
|
1096
1354
|
flushOutboundSends(this, Date.now());
|
|
1097
1355
|
}
|
|
1098
1356
|
|
|
1357
|
+
/**
|
|
1358
|
+
* A send joins its own room first (deduped, fire-and-forget): the join
|
|
1359
|
+
* sweep no longer sends every room's presence up front, so a send to a room
|
|
1360
|
+
* the sweep has not reached yet would otherwise hit a room we are not in.
|
|
1361
|
+
* Presence and message go out synchronously on the same stream, join first.
|
|
1362
|
+
*/
|
|
1363
|
+
private joinForSend(roomJID: string) {
|
|
1364
|
+
try {
|
|
1365
|
+
this.joins.ensureRoomPresence(
|
|
1366
|
+
normalizeRoomJid(roomJID, this.conference),
|
|
1367
|
+
{ waitForJoin: false, timeoutMs: 2000, source: 'send' }
|
|
1368
|
+
);
|
|
1369
|
+
} catch {}
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1099
1372
|
//messages
|
|
1100
1373
|
sendMessage = (
|
|
1101
1374
|
roomJID: string,
|
|
@@ -1135,6 +1408,7 @@ export class XmppClient {
|
|
|
1135
1408
|
});
|
|
1136
1409
|
return false;
|
|
1137
1410
|
}
|
|
1411
|
+
this.joinForSend(roomJID);
|
|
1138
1412
|
sendTextMessage(
|
|
1139
1413
|
this.client,
|
|
1140
1414
|
roomJID,
|
|
@@ -1280,6 +1554,7 @@ export class XmppClient {
|
|
|
1280
1554
|
});
|
|
1281
1555
|
return undefined;
|
|
1282
1556
|
}
|
|
1557
|
+
this.joinForSend(roomJID);
|
|
1283
1558
|
return sendMediaMessage(
|
|
1284
1559
|
this.client,
|
|
1285
1560
|
roomJID,
|
|
@@ -1370,6 +1645,7 @@ export class XmppClient {
|
|
|
1370
1645
|
});
|
|
1371
1646
|
return false;
|
|
1372
1647
|
}
|
|
1648
|
+
this.joinForSend(roomJID);
|
|
1373
1649
|
return sendTextMessageWithTranslateTag(
|
|
1374
1650
|
this.client,
|
|
1375
1651
|
{
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { store } from '../roomStore';
|
|
2
|
+
import { refreshAuthTokensQuietly } from './authRefresh';
|
|
3
|
+
import { fetchFreshXmppPassword } from './api-requests/xmppToken.api';
|
|
4
|
+
import {
|
|
5
|
+
applyResolvedUserToStore,
|
|
6
|
+
refreshUserCredentialsForXmpp,
|
|
7
|
+
} from '../helpers/resolveInitBeforeLoadUser';
|
|
8
|
+
import { pushLog as devPushLog } from '../utils/devLogger';
|
|
9
|
+
import type { IConfig } from '../types/types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Credentials the XMPP client reconnects with after a SASL
|
|
13
|
+
* `not-authorized`. Order: session rotation (when enabled), the dedicated
|
|
14
|
+
* xmpp-token endpoint, the full re-mint chain, then the stored value.
|
|
15
|
+
* Never throws.
|
|
16
|
+
*/
|
|
17
|
+
export async function recoverXmppCredentials(
|
|
18
|
+
config?: IConfig
|
|
19
|
+
): Promise<{ username: string; password: string }> {
|
|
20
|
+
// 1. Make sure the REST tokens are fresh before re-minting XMPP
|
|
21
|
+
// creds. This used to call `config.refreshTokens.refreshFunction`
|
|
22
|
+
// directly and then fall into step 2, which refreshes again -
|
|
23
|
+
// two rotations back to back, which the new backend scheme
|
|
24
|
+
// reads as a race at best and token reuse at worst. One call to
|
|
25
|
+
// the shared rotation point covers both the consumer-supplied
|
|
26
|
+
// function and the built-in endpoint.
|
|
27
|
+
if (config?.refreshTokens?.enabled) {
|
|
28
|
+
const rotated = await refreshAuthTokensQuietly({ force: true });
|
|
29
|
+
|
|
30
|
+
if (rotated?.xmppPassword) {
|
|
31
|
+
const rotatedUser = store.getState().chatSettingStore.user;
|
|
32
|
+
return {
|
|
33
|
+
username:
|
|
34
|
+
rotatedUser?.xmppUsername ||
|
|
35
|
+
rotatedUser?.defaultWallet?.walletAddress ||
|
|
36
|
+
'',
|
|
37
|
+
password: rotated.xmppPassword,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// 2. Ask the endpoint built for exactly this: a fresh XMPP
|
|
43
|
+
// credential without touching the REST session. The store's own
|
|
44
|
+
// copy is the credential that just failed, so re-reading it is a
|
|
45
|
+
// no-op retry. Single-flight, never throws, writes the store.
|
|
46
|
+
const minted = await fetchFreshXmppPassword();
|
|
47
|
+
if (minted) {
|
|
48
|
+
const u = store.getState().chatSettingStore.user;
|
|
49
|
+
return {
|
|
50
|
+
username: u?.xmppUsername || u?.defaultWallet?.walletAddress || '',
|
|
51
|
+
password: minted,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 3. Re-mint XMPP creds via the right priority chain for the
|
|
56
|
+
// current auth mode. This call ALWAYS hydrates (unlike
|
|
57
|
+
// `resolveInitBeforeLoadUser` which short-circuits when a
|
|
58
|
+
// cached user already has xmppCredentials).
|
|
59
|
+
const fresh = await refreshUserCredentialsForXmpp(config).catch(
|
|
60
|
+
(err) => {
|
|
61
|
+
devPushLog('warn', 'XMPP creds refresh: full chain failed', err);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
if (fresh) {
|
|
66
|
+
applyResolvedUserToStore(fresh);
|
|
67
|
+
return {
|
|
68
|
+
username:
|
|
69
|
+
fresh.xmppUsername ||
|
|
70
|
+
fresh.defaultWallet?.walletAddress ||
|
|
71
|
+
'',
|
|
72
|
+
password: fresh.xmppPassword || '',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// 4. Last-resort: return the cached creds so reconnect() can
|
|
77
|
+
// still attempt a connection. If the original failure was
|
|
78
|
+
// a stale JWT this will fail again and the user has to
|
|
79
|
+
// re-mount the chat - but at least we don't break the
|
|
80
|
+
// transient-network-blip case where the cached creds are
|
|
81
|
+
// still valid.
|
|
82
|
+
const u = store.getState().chatSettingStore.user;
|
|
83
|
+
return {
|
|
84
|
+
username: u?.xmppUsername || u?.defaultWallet?.walletAddress || '',
|
|
85
|
+
password: u?.xmppPassword || '',
|
|
86
|
+
};
|
|
87
|
+
}
|