@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
|
@@ -3,35 +3,43 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.runHistoryPreloadScheduler = exports.default = void 0;
|
|
6
|
+
exports.runHistoryPreloadScheduler = exports.hasApiPreview = exports.default = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _roomStore = require("../roomStore");
|
|
9
9
|
var _roomsSlice = require("../roomStore/roomsSlice");
|
|
10
|
+
var _roomActivityScore = require("./roomActivityScore");
|
|
10
11
|
const DEFAULT_CONCURRENCY = 3;
|
|
11
12
|
const DEFAULT_PAGE_SIZE = 10;
|
|
12
13
|
const DEFAULT_RETRY_LIMIT = 2;
|
|
13
14
|
const DEFAULT_FIRST_WAVE = 30;
|
|
14
|
-
|
|
15
|
+
// Past the first wave a worker rests this long between rooms, so a long
|
|
16
|
+
// background sweep does not saturate the socket a user is also chatting on.
|
|
17
|
+
const BACKGROUND_ROOM_PAUSE_MS = 400;
|
|
18
|
+
// When the first page is entirely unread (every fetched message is newer
|
|
19
|
+
// than `lastViewedTimestamp`), the true unread count could be far bigger
|
|
20
|
+
// than `pageSize` - `useUnread()` only ever sees what's been loaded. Page
|
|
21
|
+
// further back, up to this many extra fetches, until we either find the
|
|
22
|
+
// boundary or give up (`unreadCapped` then stays true so callers at least
|
|
23
|
+
// know the count is a floor, not exact). Customer-reported #34.
|
|
24
|
+
const MAX_UNREAD_CATCHUP_PAGES = 8;
|
|
25
|
+
// How many older pages one room may pull when its newest page has rows but
|
|
26
|
+
// nothing displayable (reactions / receipts only). Bounds the worst case.
|
|
27
|
+
const MAX_EMPTY_PAGE_FOLLOWS = 4;
|
|
28
|
+
const FOLLOW_PAGE_SIZE = 10;
|
|
29
|
+
// A room's first MAM page waits at most this long for its (deduped) join.
|
|
30
|
+
const JOIN_BEFORE_FETCH_TIMEOUT_MS = 3000;
|
|
31
|
+
|
|
32
|
+
// Marker for "MAM returned an empty page for a room the server hasn't
|
|
33
|
+
// declared complete" - retried like a failure, but never terminal.
|
|
34
|
+
const EMPTY_PAGE_ERROR = 'history_empty_page';
|
|
15
35
|
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
16
|
-
const messageTimestamp = m =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
const id = Number(m.id);
|
|
25
|
-
if (Number.isFinite(id) && id > 0) {
|
|
26
|
-
return id;
|
|
27
|
-
}
|
|
28
|
-
return 0;
|
|
29
|
-
};
|
|
30
|
-
const getRoomLastActivityScore = room => {
|
|
31
|
-
const fromMessages = room?.messages?.length ? room.messages.reduce((max, m) => Math.max(max, messageTimestamp(m)), 0) : 0;
|
|
32
|
-
const fromStamp = Number(room?.lastMessageTimestamp) || 0;
|
|
33
|
-
const fromSeed = Number(room?.lastMessage?.id) || 0;
|
|
34
|
-
return Math.max(fromMessages, fromStamp, fromSeed);
|
|
36
|
+
const messageTimestamp = m => (0, _roomActivityScore.getMessageTimestamp)(m);
|
|
37
|
+
|
|
38
|
+
// Store keys that can be a room (`local@domain`); root-slice keys that leak
|
|
39
|
+
// into `rooms.rooms` from corrupted persisted state have no `@`.
|
|
40
|
+
const isRoomKey = jid => {
|
|
41
|
+
const at = jid.indexOf('@');
|
|
42
|
+
return at > 0 && at < jid.length - 1;
|
|
35
43
|
};
|
|
36
44
|
const computeUnreadCapped = (room, messages, pageSize) => {
|
|
37
45
|
if (!room) {
|
|
@@ -79,13 +87,46 @@ const shouldPauseForVisibility = () => {
|
|
|
79
87
|
return _reactNative.AppState.currentState !== 'active';
|
|
80
88
|
};
|
|
81
89
|
|
|
90
|
+
// A room list preview that came from /chats/my: a seeded `lastMessage` and no
|
|
91
|
+
// loaded messages. Exported for the scheduler's tests.
|
|
92
|
+
const hasApiPreview = room => !!room && (room.messages?.length ?? 0) === 0 && !!String(room.lastMessage?.body || '').trim();
|
|
93
|
+
|
|
94
|
+
// Anything the room list can already render a preview from.
|
|
95
|
+
exports.hasApiPreview = hasApiPreview;
|
|
96
|
+
const hasListPreview = room => !!room && ((room.messages?.length ?? 0) > 0 || !!String(room.lastMessage?.body || '').trim());
|
|
97
|
+
|
|
98
|
+
// Sweeps of one client run one after the other (the staged flow's preview
|
|
99
|
+
// and full-page passes, a bootstrap racing the chat wrapper's own start).
|
|
100
|
+
// CHAINED, not deduped onto one promise: each caller carries its own
|
|
101
|
+
// pageSize/completionState, so handing a late caller someone else's promise
|
|
102
|
+
// would silently skip its work; the per-room historyPreloadState guard makes
|
|
103
|
+
// the follow-up cheap wherever an earlier sweep already did the job.
|
|
104
|
+
const preloadChainByClient = new Map();
|
|
105
|
+
// The "unread syncing" flag stays up while ANY sweep runs (a counter, not a
|
|
106
|
+
// per-sweep toggle, so chained sweeps do not flicker it off between them).
|
|
107
|
+
let activeSweeps = 0;
|
|
108
|
+
const getClientKey = client => client?.client?.jid?.toString?.() || client?.username || 'xmpp-client';
|
|
109
|
+
|
|
82
110
|
/**
|
|
83
|
-
* Background-loads message history
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
111
|
+
* Background-loads message history into the redux store. Rooms are picked by
|
|
112
|
+
* selected/default rooms first, then by recent activity; a room the user
|
|
113
|
+
* opens while the sweep runs jumps the queue. Coalesces with the XMPP
|
|
114
|
+
* client's MAM queue (so the active-room scroll fetch wins).
|
|
87
115
|
*/
|
|
88
|
-
const runHistoryPreloadScheduler =
|
|
116
|
+
const runHistoryPreloadScheduler = options => {
|
|
117
|
+
const clientKey = getClientKey(options.client);
|
|
118
|
+
const previous = preloadChainByClient.get(clientKey) || Promise.resolve();
|
|
119
|
+
const run = previous.catch(() => {}).then(() => runHistoryPreloadSweep(options));
|
|
120
|
+
const tracked = run.catch(() => {}).finally(() => {
|
|
121
|
+
if (preloadChainByClient.get(clientKey) === tracked) {
|
|
122
|
+
preloadChainByClient.delete(clientKey);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
preloadChainByClient.set(clientKey, tracked);
|
|
126
|
+
return run;
|
|
127
|
+
};
|
|
128
|
+
exports.runHistoryPreloadScheduler = runHistoryPreloadScheduler;
|
|
129
|
+
const runHistoryPreloadSweep = async options => {
|
|
89
130
|
const {
|
|
90
131
|
client,
|
|
91
132
|
signal,
|
|
@@ -96,27 +137,41 @@ const runHistoryPreloadScheduler = async options => {
|
|
|
96
137
|
firstWave = DEFAULT_FIRST_WAVE,
|
|
97
138
|
selectedRoomJid = null,
|
|
98
139
|
defaultRoomJids = [],
|
|
99
|
-
forceReload = false
|
|
140
|
+
forceReload = false,
|
|
141
|
+
completionState = 'done',
|
|
142
|
+
skipApiPreview = false
|
|
100
143
|
} = options;
|
|
101
144
|
if (signal?.aborted) {
|
|
102
145
|
return;
|
|
103
146
|
}
|
|
104
147
|
const startedAt = Date.now();
|
|
105
148
|
let firstWaveLogged = false;
|
|
149
|
+
let started = 0;
|
|
106
150
|
const devLog = msg => {
|
|
107
151
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
108
152
|
console.log(msg);
|
|
109
153
|
}
|
|
110
154
|
};
|
|
111
|
-
|
|
155
|
+
activeSweeps += 1;
|
|
156
|
+
if (activeSweeps === 1) {
|
|
157
|
+
_roomStore.store.dispatch((0, _roomsSlice.setUnreadSyncing)(true));
|
|
158
|
+
}
|
|
112
159
|
try {
|
|
113
|
-
|
|
114
|
-
|
|
160
|
+
await runSweepBody();
|
|
161
|
+
} finally {
|
|
162
|
+
devLog(`[preload] finished in ${Date.now() - startedAt}ms`);
|
|
163
|
+
activeSweeps -= 1;
|
|
164
|
+
if (activeSweeps === 0) {
|
|
165
|
+
_roomStore.store.dispatch((0, _roomsSlice.setUnreadSyncing)(false));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function runSweepBody() {
|
|
169
|
+
const rooms = _roomStore.store.getState().rooms.rooms || {};
|
|
115
170
|
const defaultSet = new Set(defaultRoomJids);
|
|
116
|
-
const sortedQueue = Object.entries(rooms).map(([jid, room]) => ({
|
|
171
|
+
const sortedQueue = Object.entries(rooms).filter(([jid]) => isRoomKey(jid)).map(([jid, room]) => ({
|
|
117
172
|
jid,
|
|
118
173
|
priority: getRoomPriority(jid, room, selectedRoomJid, defaultSet),
|
|
119
|
-
activityScore: getRoomLastActivityScore(room),
|
|
174
|
+
activityScore: (0, _roomActivityScore.getRoomLastActivityScore)(room),
|
|
120
175
|
attempts: 0,
|
|
121
176
|
readyAt: Date.now()
|
|
122
177
|
})).sort((a, b) => {
|
|
@@ -128,138 +183,318 @@ const runHistoryPreloadScheduler = async options => {
|
|
|
128
183
|
}
|
|
129
184
|
return a.jid.localeCompare(b.jid);
|
|
130
185
|
});
|
|
131
|
-
|
|
186
|
+
// Top-N by recent activity FIRST, then drop what needs no work.
|
|
187
|
+
// Filtering 'done' rooms before the cut would let every reconnect slide
|
|
188
|
+
// the window down the list (the 8 done rooms vanish, the next 8 get
|
|
189
|
+
// preloaded), so "top N" would quietly grow into "all" over a few
|
|
190
|
+
// reconnects. The preview pass is the exception: it counts rooms that
|
|
191
|
+
// still LACK a preview, because a room the API gave no `lastMessage`
|
|
192
|
+
// for ranks at the bottom of an activity sort and would otherwise never
|
|
193
|
+
// get one.
|
|
194
|
+
const needsWork = item => {
|
|
195
|
+
const room = rooms[item.jid];
|
|
196
|
+
if (!forceReload && room?.historyPreloadState === 'done') {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (skipApiPreview && hasListPreview(room)) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
};
|
|
204
|
+
const withLimit = items => roomLimit && roomLimit > 0 ? items.slice(0, roomLimit) : items;
|
|
205
|
+
const queue = skipApiPreview ? withLimit(sortedQueue.filter(needsWork)) : withLimit(sortedQueue).filter(needsWork);
|
|
132
206
|
const inFlightByRoom = new Map();
|
|
133
207
|
let consecutiveErrorCount = 0;
|
|
134
|
-
let started = 0;
|
|
135
208
|
devLog(`[preload] ${queue.length} rooms queued, first wave ${Math.min(firstWave, queue.length)}, page ${pageSize}`);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
209
|
+
|
|
210
|
+
// Rooms that no longer need this sweep's work: preloaded by another path
|
|
211
|
+
// (the user opened them, a parallel bootstrap, an earlier sweep) or gone.
|
|
212
|
+
// Checked when an item is PICKED, before the 'loading' flag is written:
|
|
213
|
+
// flagging a batch 'loading' first and asking "already done?" after could
|
|
214
|
+
// never be true, so every reconnect refetched done rooms and flickered
|
|
215
|
+
// them through 'loading'.
|
|
216
|
+
const isSatisfied = jid => {
|
|
217
|
+
const current = _roomStore.store.getState().rooms.rooms[jid];
|
|
218
|
+
if (!current) {
|
|
219
|
+
return true;
|
|
143
220
|
}
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
continue;
|
|
221
|
+
if (forceReload) {
|
|
222
|
+
return false;
|
|
147
223
|
}
|
|
224
|
+
return current.historyPreloadState === 'done';
|
|
225
|
+
};
|
|
226
|
+
const pickNext = () => {
|
|
148
227
|
const now = Date.now();
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
228
|
+
const activeJid = _roomStore.store.getState().rooms.activeRoomJID;
|
|
229
|
+
// A room the user opened while the sweep runs jumps the queue.
|
|
230
|
+
let best = -1;
|
|
231
|
+
for (let index = 0; index < queue.length; index += 1) {
|
|
232
|
+
const item = queue[index];
|
|
233
|
+
if (item.readyAt > now || inFlightByRoom.has(item.jid)) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (best === -1) {
|
|
237
|
+
best = index;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (activeJid && item.jid === activeJid) {
|
|
241
|
+
best = index;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
153
244
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
245
|
+
if (best === -1) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
return queue.splice(best, 1)[0];
|
|
249
|
+
};
|
|
250
|
+
const processItem = async item => {
|
|
251
|
+
if (isSatisfied(item.jid)) {
|
|
252
|
+
// Nothing to fetch. Leave the state alone: stamping 'done' on a room
|
|
253
|
+
// that is merely missing would resurrect it as a ghost entry.
|
|
254
|
+
return;
|
|
159
255
|
}
|
|
160
|
-
started += batch.length;
|
|
161
|
-
|
|
162
|
-
// Snapshot each room's historyPreloadState BEFORE marking the
|
|
163
|
-
// batch as 'loading'. Without this snapshot the per-task
|
|
164
|
-
// `currentRoom.historyPreloadState === 'done'` skip check below
|
|
165
|
-
// is dead — the dispatch immediately overwrites 'done' with
|
|
166
|
-
// 'loading', so the task never sees the original value and
|
|
167
|
-
// always re-fetches.
|
|
168
|
-
const preBatchPreloadStateByJid = new Map(batch.map(item => [item.jid, _roomStore.store.getState().rooms.rooms[item.jid]?.historyPreloadState]));
|
|
169
256
|
_roomStore.store.dispatch((0, _roomsSlice.applyRoomsPreloadBatch)({
|
|
170
|
-
rooms:
|
|
257
|
+
rooms: [{
|
|
171
258
|
jid: item.jid,
|
|
172
259
|
historyPreloadState: 'loading'
|
|
173
|
-
}
|
|
260
|
+
}]
|
|
174
261
|
}));
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
262
|
+
try {
|
|
263
|
+
// MAM does not need the room joined, but a room that is not joined
|
|
264
|
+
// yet gets its (deduped) join first, best effort: the join sweep may
|
|
265
|
+
// not have reached it, and a members-only archive wants it.
|
|
266
|
+
try {
|
|
267
|
+
await client.ensureRoomPresence?.(item.jid, {
|
|
268
|
+
timeoutMs: JOIN_BEFORE_FETCH_TIMEOUT_MS,
|
|
269
|
+
source: 'background',
|
|
270
|
+
// The sweep merges pages itself (one batch per room, with gap and
|
|
271
|
+
// unread detection): the MAM router must not apply them as well.
|
|
272
|
+
selfApplied: true
|
|
273
|
+
});
|
|
274
|
+
} catch {}
|
|
275
|
+
if (signal?.aborted) {
|
|
276
|
+
return;
|
|
179
277
|
}
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
278
|
+
const fetchPage = (max, before) => client.getHistoryStanza(item.jid, max, before, undefined, {
|
|
279
|
+
coalesceRoom: true,
|
|
280
|
+
skipIfPreloaded: !forceReload,
|
|
281
|
+
source: 'background'
|
|
282
|
+
});
|
|
283
|
+
let fetchedMessages = await fetchPage(pageSize);
|
|
284
|
+
if (signal?.aborted) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (typeof fetchedMessages === 'undefined') {
|
|
288
|
+
throw new Error('history_timeout');
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// A page can hold rows and still yield nothing displayable: a room
|
|
292
|
+
// whose newest archive rows are reactions or receipts parses to an
|
|
293
|
+
// empty list. That page is inconclusive, not a failure. Follow the
|
|
294
|
+
// server's RSM cursor (stored as messageStats.firstMessageTimestamp)
|
|
295
|
+
// to older pages until something displayable turns up, the archive
|
|
296
|
+
// is exhausted or the budget is spent.
|
|
297
|
+
let pagesFetched = 1;
|
|
298
|
+
let followedCursor = false;
|
|
299
|
+
let lastCursor;
|
|
300
|
+
while (fetchedMessages.length === 0 && pagesFetched < MAX_EMPTY_PAGE_FOLLOWS + 1) {
|
|
301
|
+
const roomNow = _roomStore.store.getState().rooms.rooms[item.jid];
|
|
302
|
+
if (roomNow?.historyComplete === true) {
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
const cursor = roomNow?.messageStats?.firstMessageTimestamp;
|
|
306
|
+
// No cursor means the server returned no rows at all (not joined /
|
|
307
|
+
// archive not ready): nothing to follow, the retry path handles it.
|
|
308
|
+
if (!cursor || !Number.isFinite(cursor) || cursor === lastCursor) {
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
lastCursor = cursor;
|
|
312
|
+
followedCursor = true;
|
|
313
|
+
const older = await fetchPage(Math.max(pageSize, FOLLOW_PAGE_SIZE), cursor);
|
|
314
|
+
if (signal?.aborted) {
|
|
190
315
|
return;
|
|
191
316
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (signal?.aborted) {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
if (typeof fetchedMessages === 'undefined') {
|
|
203
|
-
throw new Error('history_timeout');
|
|
204
|
-
}
|
|
205
|
-
const nextRoom = _roomStore.store.getState().rooms.rooms[item.jid];
|
|
206
|
-
const combined = fetchedMessages || [];
|
|
317
|
+
if (typeof older === 'undefined') {
|
|
318
|
+
throw new Error('history_timeout');
|
|
319
|
+
}
|
|
320
|
+
pagesFetched += 1;
|
|
321
|
+
fetchedMessages = older;
|
|
322
|
+
}
|
|
323
|
+
const nextRoom = _roomStore.store.getState().rooms.rooms[item.jid];
|
|
207
324
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
325
|
+
// An empty page for a room the server hasn't declared complete is
|
|
326
|
+
// almost always "not joined / archive not ready yet", not "this room
|
|
327
|
+
// has no messages". Marking it 'done' froze the room with an empty
|
|
328
|
+
// transcript forever. When the cursor was followed and the budget
|
|
329
|
+
// ran out the archive does have rows (just none displayable yet),
|
|
330
|
+
// so that settles as 'partial' straight away; without a cursor the
|
|
331
|
+
// sweep retries.
|
|
332
|
+
const isInconclusiveEmptyPage = fetchedMessages.length === 0 && nextRoom?.historyComplete !== true;
|
|
333
|
+
if (isInconclusiveEmptyPage) {
|
|
334
|
+
if (followedCursor) {
|
|
218
335
|
_roomStore.store.dispatch((0, _roomsSlice.applyRoomsPreloadBatch)({
|
|
219
336
|
rooms: [{
|
|
220
337
|
jid: item.jid,
|
|
221
|
-
|
|
222
|
-
unreadCapped,
|
|
223
|
-
historyPreloadState: 'done'
|
|
338
|
+
historyPreloadState: 'partial'
|
|
224
339
|
}]
|
|
225
340
|
}));
|
|
226
341
|
consecutiveErrorCount = 0;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
throw new Error(EMPTY_PAGE_ERROR);
|
|
345
|
+
}
|
|
346
|
+
let combined = fetchedMessages;
|
|
347
|
+
const lastViewed = Number(nextRoom?.lastViewedTimestamp) || 0;
|
|
348
|
+
|
|
349
|
+
// The first page was entirely unread: keep paging older until a
|
|
350
|
+
// message at/before `lastViewedTimestamp` (the true boundary) is
|
|
351
|
+
// found or the catch-up budget runs out, so the count isn't silently
|
|
352
|
+
// truncated at `pageSize`.
|
|
353
|
+
if (lastViewed > 0 && computeUnreadCapped(nextRoom, combined, pageSize)) {
|
|
354
|
+
let lastPageLen = combined.length;
|
|
355
|
+
let extraPages = 0;
|
|
356
|
+
while (extraPages < MAX_UNREAD_CATCHUP_PAGES && lastPageLen >= pageSize && !signal?.aborted) {
|
|
357
|
+
const oldestId = combined.reduce((min, m) => {
|
|
358
|
+
const idNum = Number(m?.id);
|
|
359
|
+
if (!Number.isFinite(idNum)) {
|
|
360
|
+
return min;
|
|
361
|
+
}
|
|
362
|
+
return min === null || idNum < min ? idNum : min;
|
|
363
|
+
}, null);
|
|
364
|
+
if (oldestId === null) {
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
let older;
|
|
368
|
+
try {
|
|
369
|
+
older = await fetchPage(pageSize, oldestId);
|
|
370
|
+
} catch {
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
if (!older || !older.length) {
|
|
374
|
+
break;
|
|
245
375
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
376
|
+
combined = [...older, ...combined];
|
|
377
|
+
lastPageLen = older.length;
|
|
378
|
+
extraPages++;
|
|
379
|
+
const oldestTs = combined.reduce((minTs, m) => {
|
|
380
|
+
const ts = messageTimestamp(m);
|
|
381
|
+
return ts > 0 ? Math.min(minTs, ts) : minTs;
|
|
382
|
+
}, Number.MAX_SAFE_INTEGER);
|
|
383
|
+
if (oldestTs !== Number.MAX_SAFE_INTEGER && oldestTs <= lastViewed) {
|
|
384
|
+
break;
|
|
250
385
|
}
|
|
251
386
|
}
|
|
252
|
-
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// `mergeHistoryIntoCache` (roomsSlice) caps whatever we dispatch to
|
|
390
|
+
// the newest RUNTIME_MESSAGE_LIMIT messages before it reaches
|
|
391
|
+
// `unreadMiddleware`, so a catch-up that pulled the true boundary can
|
|
392
|
+
// still have it dropped by that cap (bug #34's failure mode one layer
|
|
393
|
+
// downstream). Simulate the cap so the flag reflects what survives.
|
|
394
|
+
const simulatedStored = combined.length > _roomsSlice.RUNTIME_MESSAGE_LIMIT ? combined.slice(-_roomsSlice.RUNTIME_MESSAGE_LIMIT) : combined;
|
|
395
|
+
const unreadCapped = computeUnreadCapped(nextRoom, simulatedStored, pageSize);
|
|
396
|
+
_roomStore.store.dispatch((0, _roomsSlice.applyRoomsPreloadBatch)({
|
|
397
|
+
rooms: [{
|
|
398
|
+
jid: item.jid,
|
|
399
|
+
messages: combined,
|
|
400
|
+
unreadCapped,
|
|
401
|
+
historyPreloadState: completionState
|
|
402
|
+
}]
|
|
403
|
+
}));
|
|
404
|
+
consecutiveErrorCount = 0;
|
|
405
|
+
} catch (error) {
|
|
406
|
+
const isEmptyPage = error?.message === EMPTY_PAGE_ERROR;
|
|
407
|
+
const retries = item.attempts + 1;
|
|
408
|
+
const canRetry = retries <= retryLimit;
|
|
409
|
+
if (canRetry) {
|
|
410
|
+
const jitter = Math.floor(Math.random() * 120);
|
|
411
|
+
const backoff = Math.min(1600, 240 * 2 ** item.attempts) + jitter;
|
|
412
|
+
queue.push({
|
|
413
|
+
...item,
|
|
414
|
+
attempts: retries,
|
|
415
|
+
readyAt: Date.now() + backoff
|
|
416
|
+
});
|
|
417
|
+
} else {
|
|
418
|
+
_roomStore.store.dispatch((0, _roomsSlice.applyRoomsPreloadBatch)({
|
|
419
|
+
rooms: [{
|
|
420
|
+
jid: item.jid,
|
|
421
|
+
// An empty page is inconclusive, not a failure: keep it
|
|
422
|
+
// retryable so a later pass (or opening the room) can
|
|
423
|
+
// still fill it in. Real failures end 'error' (retryable
|
|
424
|
+
// by the next sweep too).
|
|
425
|
+
historyPreloadState: isEmptyPage ? 'partial' : 'error'
|
|
426
|
+
}]
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// An empty page says nothing about connection health: only real
|
|
431
|
+
// failures trip the circuit breaker below.
|
|
432
|
+
if (isEmptyPage) {
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
consecutiveErrorCount += 1;
|
|
436
|
+
if (consecutiveErrorCount >= 3) {
|
|
437
|
+
await sleep(300);
|
|
438
|
+
consecutiveErrorCount = 0;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
// A worker pool, not batches: one slow room (a 10 s MAM timeout) must not
|
|
444
|
+
// idle the other slots. Each worker pulls the next room the moment it is
|
|
445
|
+
// free.
|
|
446
|
+
let activeWorkers = 0;
|
|
447
|
+
const worker = async () => {
|
|
448
|
+
while (true) {
|
|
449
|
+
if (signal?.aborted) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
if (queue.length === 0 && activeWorkers === 0) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
if (!client.isActiveRoomGateOpen()) {
|
|
456
|
+
await sleep(80);
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
if (shouldPauseForVisibility()) {
|
|
460
|
+
await sleep(250);
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
const item = pickNext();
|
|
464
|
+
if (!item) {
|
|
465
|
+
// Queue is empty (another worker may still push a retry) or every
|
|
466
|
+
// remaining item is backing off / in flight.
|
|
467
|
+
if (queue.length === 0 && activeWorkers === 0) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
await sleep(60);
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
activeWorkers += 1;
|
|
474
|
+
started += 1;
|
|
475
|
+
const task = processItem(item);
|
|
253
476
|
inFlightByRoom.set(item.jid, task);
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
477
|
+
try {
|
|
478
|
+
await task;
|
|
479
|
+
} finally {
|
|
480
|
+
inFlightByRoom.delete(item.jid);
|
|
481
|
+
activeWorkers -= 1;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Yield to the JS event loop (no requestIdleCallback in RN); past the
|
|
485
|
+
// first wave, rest a little between rooms.
|
|
486
|
+
const inBackgroundWave = started >= firstWave;
|
|
487
|
+
if (inBackgroundWave && !firstWaveLogged) {
|
|
488
|
+
firstWaveLogged = true;
|
|
489
|
+
devLog(`[preload] first wave done in ${Date.now() - startedAt}ms`);
|
|
490
|
+
}
|
|
491
|
+
await sleep(inBackgroundWave ? BACKGROUND_ROOM_PAUSE_MS : 0);
|
|
492
|
+
}
|
|
493
|
+
};
|
|
494
|
+
await Promise.all(Array.from({
|
|
495
|
+
length: Math.max(1, concurrency)
|
|
496
|
+
}, () => worker()));
|
|
261
497
|
}
|
|
262
498
|
};
|
|
263
|
-
exports.runHistoryPreloadScheduler = runHistoryPreloadScheduler;
|
|
264
499
|
var _default = exports.default = runHistoryPreloadScheduler;
|
|
265
500
|
//# sourceMappingURL=historyPreloadScheduler.js.map
|