@ethora/chat-component-rn 26.9.0 → 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.
Files changed (761) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +19 -0
  3. package/lib/commonjs/assets/icons.js +2 -2
  4. package/lib/commonjs/assets/icons.js.map +1 -1
  5. package/lib/commonjs/components/Header/HeaderRoomList.js +22 -6
  6. package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
  7. package/lib/commonjs/components/InputComponents/Search.js +38 -1
  8. package/lib/commonjs/components/InputComponents/Search.js.map +1 -1
  9. package/lib/commonjs/components/MainComponents/ArchivedMessageCard.js +166 -0
  10. package/lib/commonjs/components/MainComponents/ArchivedMessageCard.js.map +1 -0
  11. package/lib/commonjs/components/MainComponents/ChatHeader.js +22 -5
  12. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  13. package/lib/commonjs/components/MainComponents/ChatRoom.js +56 -25
  14. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  15. package/lib/commonjs/components/MainComponents/ChatWrapper.js +53 -4
  16. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  17. package/lib/commonjs/components/MainComponents/MediaMessage.js +18 -3
  18. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  19. package/lib/commonjs/components/MainComponents/MessageList.js +739 -42
  20. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  21. package/lib/commonjs/components/MainComponents/MessageSearchButton.js +58 -0
  22. package/lib/commonjs/components/MainComponents/MessageSearchButton.js.map +1 -0
  23. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +15 -6
  24. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  25. package/lib/commonjs/components/MainComponents/RoomList.js +110 -1
  26. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  27. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +14 -3
  28. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
  29. package/lib/commonjs/components/MessageBubble/BubbleHighlight.js +112 -0
  30. package/lib/commonjs/components/MessageBubble/BubbleHighlight.js.map +1 -0
  31. package/lib/commonjs/components/MessageBubble/Message.js +169 -125
  32. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  33. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +98 -78
  34. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  35. package/lib/commonjs/components/MessageBubble/messageMenuLayout.js +50 -0
  36. package/lib/commonjs/components/MessageBubble/messageMenuLayout.js.map +1 -0
  37. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +73 -37
  38. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  39. package/lib/commonjs/components/Modals/MessageSearchModal/MessageHitResults.js +253 -0
  40. package/lib/commonjs/components/Modals/MessageSearchModal/MessageHitResults.js.map +1 -0
  41. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js +488 -0
  42. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -0
  43. package/lib/commonjs/components/Modals/MessageSearchModal/openHit.js +51 -0
  44. package/lib/commonjs/components/Modals/MessageSearchModal/openHit.js.map +1 -0
  45. package/lib/commonjs/components/Modals/MessageSearchModal/resolveSender.js +47 -0
  46. package/lib/commonjs/components/Modals/MessageSearchModal/resolveSender.js.map +1 -0
  47. package/lib/commonjs/components/Modals/MessageSearchModal/searchFilters.js +83 -0
  48. package/lib/commonjs/components/Modals/MessageSearchModal/searchFilters.js.map +1 -0
  49. package/lib/commonjs/components/Modals/MessageSearchModal/snippet.js +61 -0
  50. package/lib/commonjs/components/Modals/MessageSearchModal/snippet.js.map +1 -0
  51. package/lib/commonjs/components/Modals/MessageSearchModal/useMessageSearch.js +136 -0
  52. package/lib/commonjs/components/Modals/MessageSearchModal/useMessageSearch.js.map +1 -0
  53. package/lib/commonjs/components/Modals/PublicChatsModal/PublicChatsModal.js +306 -0
  54. package/lib/commonjs/components/Modals/PublicChatsModal/PublicChatsModal.js.map +1 -0
  55. package/lib/commonjs/components/Modals/PublicChatsModal/publicChatsLogic.js +36 -0
  56. package/lib/commonjs/components/Modals/PublicChatsModal/publicChatsLogic.js.map +1 -0
  57. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +8 -1
  58. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  59. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +13 -2
  60. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  61. package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js +38 -6
  62. package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js.map +1 -1
  63. package/lib/commonjs/components/Thread/ThreadHeader.js +3 -1
  64. package/lib/commonjs/components/Thread/ThreadHeader.js.map +1 -1
  65. package/lib/commonjs/components/Thread/ThreadWrapper.js +90 -10
  66. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  67. package/lib/commonjs/components/styled/AudioDecoderHost.js +338 -0
  68. package/lib/commonjs/components/styled/AudioDecoderHost.js.map +1 -0
  69. package/lib/commonjs/components/styled/AudioMessage.js +493 -420
  70. package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
  71. package/lib/commonjs/components/styled/SendInput.js +31 -5
  72. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  73. package/lib/commonjs/context/MessageNotificationContext.js +14 -4
  74. package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
  75. package/lib/commonjs/context/xmppProvider.js +54 -79
  76. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  77. package/lib/commonjs/helpers/audioWaveform.js +165 -0
  78. package/lib/commonjs/helpers/audioWaveform.js.map +1 -0
  79. package/lib/commonjs/helpers/backgroundJoinSweep.js +36 -0
  80. package/lib/commonjs/helpers/backgroundJoinSweep.js.map +1 -0
  81. package/lib/commonjs/helpers/bubbleHighlight.js +44 -0
  82. package/lib/commonjs/helpers/bubbleHighlight.js.map +1 -0
  83. package/lib/commonjs/helpers/checkUniqueUsers.js +14 -12
  84. package/lib/commonjs/helpers/checkUniqueUsers.js.map +1 -1
  85. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +5 -1
  86. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  87. package/lib/commonjs/helpers/constants/MODAL_TYPES.js +3 -1
  88. package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
  89. package/lib/commonjs/helpers/createRoomFromApi.js +40 -3
  90. package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
  91. package/lib/commonjs/helpers/dedupeMembers.js +34 -0
  92. package/lib/commonjs/helpers/dedupeMembers.js.map +1 -0
  93. package/lib/commonjs/helpers/ethoraLogger.js +56 -0
  94. package/lib/commonjs/helpers/ethoraLogger.js.map +1 -0
  95. package/lib/commonjs/helpers/getUnnamedUsers.js +9 -4
  96. package/lib/commonjs/helpers/getUnnamedUsers.js.map +1 -1
  97. package/lib/commonjs/helpers/historyPreloadConfig.js +44 -0
  98. package/lib/commonjs/helpers/historyPreloadConfig.js.map +1 -0
  99. package/lib/commonjs/helpers/historyPreloadScheduler.js +372 -137
  100. package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
  101. package/lib/commonjs/helpers/initRoomsPresence.js +17 -5
  102. package/lib/commonjs/helpers/initRoomsPresence.js.map +1 -1
  103. package/lib/commonjs/helpers/insertMessageWithDelimiter.js +5 -0
  104. package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
  105. package/lib/commonjs/helpers/isLikelyMucJid.js +67 -0
  106. package/lib/commonjs/helpers/isLikelyMucJid.js.map +1 -0
  107. package/lib/commonjs/helpers/isMessageSearchEnabled.js +18 -0
  108. package/lib/commonjs/helpers/isMessageSearchEnabled.js.map +1 -0
  109. package/lib/commonjs/helpers/joiningRoom.js +14 -0
  110. package/lib/commonjs/helpers/joiningRoom.js.map +1 -0
  111. package/lib/commonjs/helpers/jumpThread.js +100 -0
  112. package/lib/commonjs/helpers/jumpThread.js.map +1 -0
  113. package/lib/commonjs/helpers/jumpToMessage.js +58 -0
  114. package/lib/commonjs/helpers/jumpToMessage.js.map +1 -0
  115. package/lib/commonjs/helpers/jumpWindow.js +187 -0
  116. package/lib/commonjs/helpers/jumpWindow.js.map +1 -0
  117. package/lib/commonjs/helpers/loadRoomHistory.js +75 -0
  118. package/lib/commonjs/helpers/loadRoomHistory.js.map +1 -0
  119. package/lib/commonjs/helpers/notificationPolicy.js +77 -0
  120. package/lib/commonjs/helpers/notificationPolicy.js.map +1 -0
  121. package/lib/commonjs/helpers/openRoomAtMessage.js +47 -0
  122. package/lib/commonjs/helpers/openRoomAtMessage.js.map +1 -0
  123. package/lib/commonjs/helpers/openThreadForJump.js +72 -0
  124. package/lib/commonjs/helpers/openThreadForJump.js.map +1 -0
  125. package/lib/commonjs/helpers/parseMessageReference.js +27 -8
  126. package/lib/commonjs/helpers/parseMessageReference.js.map +1 -1
  127. package/lib/commonjs/helpers/publicChatsEntry.js +17 -0
  128. package/lib/commonjs/helpers/publicChatsEntry.js.map +1 -0
  129. package/lib/commonjs/helpers/roomActivityScore.js +37 -0
  130. package/lib/commonjs/helpers/roomActivityScore.js.map +1 -0
  131. package/lib/commonjs/helpers/roomUserCount.js +36 -0
  132. package/lib/commonjs/helpers/roomUserCount.js.map +1 -0
  133. package/lib/commonjs/helpers/runConfiguredHistoryPreload.js +68 -0
  134. package/lib/commonjs/helpers/runConfiguredHistoryPreload.js.map +1 -0
  135. package/lib/commonjs/helpers/sessionAppId.js +24 -0
  136. package/lib/commonjs/helpers/sessionAppId.js.map +1 -0
  137. package/lib/commonjs/helpers/timestamp.js +43 -0
  138. package/lib/commonjs/helpers/timestamp.js.map +1 -0
  139. package/lib/commonjs/helpers/userResolver.js +517 -0
  140. package/lib/commonjs/helpers/userResolver.js.map +1 -0
  141. package/lib/commonjs/helpers/xmppIdShape.js +52 -0
  142. package/lib/commonjs/helpers/xmppIdShape.js.map +1 -0
  143. package/lib/commonjs/hooks/useChatWrapperInit.js +27 -5
  144. package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
  145. package/lib/commonjs/hooks/useHeapSender.js +54 -3
  146. package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
  147. package/lib/commonjs/hooks/useJumpToMessage.js +411 -0
  148. package/lib/commonjs/hooks/useJumpToMessage.js.map +1 -0
  149. package/lib/commonjs/hooks/useMessageLoaderQueue.js +32 -5
  150. package/lib/commonjs/hooks/useMessageLoaderQueue.js.map +1 -1
  151. package/lib/commonjs/hooks/useMessageQueue.js +13 -5
  152. package/lib/commonjs/hooks/useMessageQueue.js.map +1 -1
  153. package/lib/commonjs/hooks/useRoomDirectory.js +29 -0
  154. package/lib/commonjs/hooks/useRoomDirectory.js.map +1 -0
  155. package/lib/commonjs/hooks/useRoomInitialization.js +27 -5
  156. package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
  157. package/lib/commonjs/hooks/useRoomMute.js +62 -0
  158. package/lib/commonjs/hooks/useRoomMute.js.map +1 -0
  159. package/lib/commonjs/hooks/useRoomState.js +3 -1
  160. package/lib/commonjs/hooks/useRoomState.js.map +1 -1
  161. package/lib/commonjs/hooks/useSendMessage.js +13 -3
  162. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  163. package/lib/commonjs/i18n/strings.js +318 -6
  164. package/lib/commonjs/i18n/strings.js.map +1 -1
  165. package/lib/commonjs/networking/api-requests/messageSearch.api.js +87 -0
  166. package/lib/commonjs/networking/api-requests/messageSearch.api.js.map +1 -0
  167. package/lib/commonjs/networking/api-requests/publicChats.api.js +48 -0
  168. package/lib/commonjs/networking/api-requests/publicChats.api.js.map +1 -0
  169. package/lib/commonjs/networking/api-requests/roomMembers.api.js +253 -4
  170. package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
  171. package/lib/commonjs/networking/api-requests/rooms.api.js +48 -12
  172. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  173. package/lib/commonjs/networking/api-requests/xmppToken.api.js +71 -0
  174. package/lib/commonjs/networking/api-requests/xmppToken.api.js.map +1 -0
  175. package/lib/commonjs/networking/ethoraEvents.js +227 -0
  176. package/lib/commonjs/networking/ethoraEvents.js.map +1 -0
  177. package/lib/commonjs/networking/stanzaHandlers.js +153 -16
  178. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  179. package/lib/commonjs/networking/xmpp/allRoomPresences.xmpp.js +124 -3
  180. package/lib/commonjs/networking/xmpp/allRoomPresences.xmpp.js.map +1 -1
  181. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +319 -35
  182. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
  183. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +7 -0
  184. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  185. package/lib/commonjs/networking/xmpp/historyCursor.js +101 -0
  186. package/lib/commonjs/networking/xmpp/historyCursor.js.map +1 -0
  187. package/lib/commonjs/networking/xmpp/mamQueryIds.js +17 -0
  188. package/lib/commonjs/networking/xmpp/mamQueryIds.js.map +1 -0
  189. package/lib/commonjs/networking/xmpp/mamRouter.js +24 -9
  190. package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -1
  191. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +70 -65
  192. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  193. package/lib/commonjs/networking/xmpp/roomJoinSweep.js +389 -0
  194. package/lib/commonjs/networking/xmpp/roomJoinSweep.js.map +1 -0
  195. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +0 -1
  196. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  197. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +0 -1
  198. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  199. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +0 -1
  200. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  201. package/lib/commonjs/networking/xmppClient.js +269 -41
  202. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  203. package/lib/commonjs/networking/xmppCredentials.js +80 -0
  204. package/lib/commonjs/networking/xmppCredentials.js.map +1 -0
  205. package/lib/commonjs/roomStore/Middleware/jumpThreadMiddleware.js +158 -0
  206. package/lib/commonjs/roomStore/Middleware/jumpThreadMiddleware.js.map +1 -0
  207. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +6 -0
  208. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  209. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +45 -7
  210. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  211. package/lib/commonjs/roomStore/chatSettingsSlice.js +15 -1
  212. package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
  213. package/lib/commonjs/roomStore/index.js +13 -3
  214. package/lib/commonjs/roomStore/index.js.map +1 -1
  215. package/lib/commonjs/roomStore/persistence.js +48 -1
  216. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  217. package/lib/commonjs/roomStore/roomsSlice.js +474 -60
  218. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  219. package/lib/commonjs/roomStore/safeKey.js +44 -0
  220. package/lib/commonjs/roomStore/safeKey.js.map +1 -0
  221. package/lib/commonjs/roomStore/usersSetCap.js +37 -0
  222. package/lib/commonjs/roomStore/usersSetCap.js.map +1 -0
  223. package/lib/commonjs/version.js +1 -1
  224. package/lib/commonjs/version.js.map +1 -1
  225. package/lib/module/assets/icons.js +1 -1
  226. package/lib/module/assets/icons.js.map +1 -1
  227. package/lib/module/components/Header/HeaderRoomList.js +23 -7
  228. package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
  229. package/lib/module/components/InputComponents/Search.js +39 -2
  230. package/lib/module/components/InputComponents/Search.js.map +1 -1
  231. package/lib/module/components/MainComponents/ArchivedMessageCard.js +161 -0
  232. package/lib/module/components/MainComponents/ArchivedMessageCard.js.map +1 -0
  233. package/lib/module/components/MainComponents/ChatHeader.js +22 -5
  234. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  235. package/lib/module/components/MainComponents/ChatRoom.js +57 -26
  236. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  237. package/lib/module/components/MainComponents/ChatWrapper.js +54 -5
  238. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  239. package/lib/module/components/MainComponents/MediaMessage.js +18 -3
  240. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  241. package/lib/module/components/MainComponents/MessageList.js +740 -42
  242. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  243. package/lib/module/components/MainComponents/MessageSearchButton.js +48 -0
  244. package/lib/module/components/MainComponents/MessageSearchButton.js.map +1 -0
  245. package/lib/module/components/MainComponents/ReduxWrapper.js +15 -7
  246. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  247. package/lib/module/components/MainComponents/RoomList.js +111 -2
  248. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  249. package/lib/module/components/Menu/HeaderRoomListMenu.js +15 -4
  250. package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
  251. package/lib/module/components/MessageBubble/BubbleHighlight.js +106 -0
  252. package/lib/module/components/MessageBubble/BubbleHighlight.js.map +1 -0
  253. package/lib/module/components/MessageBubble/Message.js +172 -127
  254. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  255. package/lib/module/components/MessageBubble/MessageInteractions.js +98 -78
  256. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  257. package/lib/module/components/MessageBubble/messageMenuLayout.js +45 -0
  258. package/lib/module/components/MessageBubble/messageMenuLayout.js.map +1 -0
  259. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +74 -38
  260. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  261. package/lib/module/components/Modals/MessageSearchModal/MessageHitResults.js +243 -0
  262. package/lib/module/components/Modals/MessageSearchModal/MessageHitResults.js.map +1 -0
  263. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js +482 -0
  264. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -0
  265. package/lib/module/components/Modals/MessageSearchModal/openHit.js +45 -0
  266. package/lib/module/components/Modals/MessageSearchModal/openHit.js.map +1 -0
  267. package/lib/module/components/Modals/MessageSearchModal/resolveSender.js +41 -0
  268. package/lib/module/components/Modals/MessageSearchModal/resolveSender.js.map +1 -0
  269. package/lib/module/components/Modals/MessageSearchModal/searchFilters.js +74 -0
  270. package/lib/module/components/Modals/MessageSearchModal/searchFilters.js.map +1 -0
  271. package/lib/module/components/Modals/MessageSearchModal/snippet.js +57 -0
  272. package/lib/module/components/Modals/MessageSearchModal/snippet.js.map +1 -0
  273. package/lib/module/components/Modals/MessageSearchModal/useMessageSearch.js +131 -0
  274. package/lib/module/components/Modals/MessageSearchModal/useMessageSearch.js.map +1 -0
  275. package/lib/module/components/Modals/PublicChatsModal/PublicChatsModal.js +300 -0
  276. package/lib/module/components/Modals/PublicChatsModal/PublicChatsModal.js.map +1 -0
  277. package/lib/module/components/Modals/PublicChatsModal/publicChatsLogic.js +30 -0
  278. package/lib/module/components/Modals/PublicChatsModal/publicChatsLogic.js.map +1 -0
  279. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +8 -1
  280. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  281. package/lib/module/components/RoomComponents/ChatRoomItem.js +14 -3
  282. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  283. package/lib/module/components/RoomComponents/SwipeableRoomRow.js +39 -7
  284. package/lib/module/components/RoomComponents/SwipeableRoomRow.js.map +1 -1
  285. package/lib/module/components/Thread/ThreadHeader.js +3 -1
  286. package/lib/module/components/Thread/ThreadHeader.js.map +1 -1
  287. package/lib/module/components/Thread/ThreadWrapper.js +89 -9
  288. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  289. package/lib/module/components/styled/AudioDecoderHost.js +332 -0
  290. package/lib/module/components/styled/AudioDecoderHost.js.map +1 -0
  291. package/lib/module/components/styled/AudioMessage.js +495 -422
  292. package/lib/module/components/styled/AudioMessage.js.map +1 -1
  293. package/lib/module/components/styled/SendInput.js +32 -6
  294. package/lib/module/components/styled/SendInput.js.map +1 -1
  295. package/lib/module/context/MessageNotificationContext.js +15 -5
  296. package/lib/module/context/MessageNotificationContext.js.map +1 -1
  297. package/lib/module/context/xmppProvider.js +54 -79
  298. package/lib/module/context/xmppProvider.js.map +1 -1
  299. package/lib/module/helpers/audioWaveform.js +153 -0
  300. package/lib/module/helpers/audioWaveform.js.map +1 -0
  301. package/lib/module/helpers/backgroundJoinSweep.js +30 -0
  302. package/lib/module/helpers/backgroundJoinSweep.js.map +1 -0
  303. package/lib/module/helpers/bubbleHighlight.js +38 -0
  304. package/lib/module/helpers/bubbleHighlight.js.map +1 -0
  305. package/lib/module/helpers/checkUniqueUsers.js +15 -13
  306. package/lib/module/helpers/checkUniqueUsers.js.map +1 -1
  307. package/lib/module/helpers/constants/MODAL_COMPONENTS.js +5 -1
  308. package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  309. package/lib/module/helpers/constants/MODAL_TYPES.js +3 -1
  310. package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
  311. package/lib/module/helpers/createRoomFromApi.js +37 -3
  312. package/lib/module/helpers/createRoomFromApi.js.map +1 -1
  313. package/lib/module/helpers/dedupeMembers.js +28 -0
  314. package/lib/module/helpers/dedupeMembers.js.map +1 -0
  315. package/lib/module/helpers/ethoraLogger.js +52 -0
  316. package/lib/module/helpers/ethoraLogger.js.map +1 -0
  317. package/lib/module/helpers/getUnnamedUsers.js +9 -4
  318. package/lib/module/helpers/getUnnamedUsers.js.map +1 -1
  319. package/lib/module/helpers/historyPreloadConfig.js +39 -0
  320. package/lib/module/helpers/historyPreloadConfig.js.map +1 -0
  321. package/lib/module/helpers/historyPreloadScheduler.js +368 -134
  322. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  323. package/lib/module/helpers/initRoomsPresence.js +18 -5
  324. package/lib/module/helpers/initRoomsPresence.js.map +1 -1
  325. package/lib/module/helpers/insertMessageWithDelimiter.js +5 -0
  326. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  327. package/lib/module/helpers/isLikelyMucJid.js +60 -0
  328. package/lib/module/helpers/isLikelyMucJid.js.map +1 -0
  329. package/lib/module/helpers/isMessageSearchEnabled.js +13 -0
  330. package/lib/module/helpers/isMessageSearchEnabled.js.map +1 -0
  331. package/lib/module/helpers/joiningRoom.js +9 -0
  332. package/lib/module/helpers/joiningRoom.js.map +1 -0
  333. package/lib/module/helpers/jumpThread.js +83 -0
  334. package/lib/module/helpers/jumpThread.js.map +1 -0
  335. package/lib/module/helpers/jumpToMessage.js +52 -0
  336. package/lib/module/helpers/jumpToMessage.js.map +1 -0
  337. package/lib/module/helpers/jumpWindow.js +177 -0
  338. package/lib/module/helpers/jumpWindow.js.map +1 -0
  339. package/lib/module/helpers/loadRoomHistory.js +69 -0
  340. package/lib/module/helpers/loadRoomHistory.js.map +1 -0
  341. package/lib/module/helpers/notificationPolicy.js +70 -0
  342. package/lib/module/helpers/notificationPolicy.js.map +1 -0
  343. package/lib/module/helpers/openRoomAtMessage.js +41 -0
  344. package/lib/module/helpers/openRoomAtMessage.js.map +1 -0
  345. package/lib/module/helpers/openThreadForJump.js +68 -0
  346. package/lib/module/helpers/openThreadForJump.js.map +1 -0
  347. package/lib/module/helpers/parseMessageReference.js +26 -6
  348. package/lib/module/helpers/parseMessageReference.js.map +1 -1
  349. package/lib/module/helpers/publicChatsEntry.js +12 -0
  350. package/lib/module/helpers/publicChatsEntry.js.map +1 -0
  351. package/lib/module/helpers/roomActivityScore.js +30 -0
  352. package/lib/module/helpers/roomActivityScore.js.map +1 -0
  353. package/lib/module/helpers/roomUserCount.js +29 -0
  354. package/lib/module/helpers/roomUserCount.js.map +1 -0
  355. package/lib/module/helpers/runConfiguredHistoryPreload.js +63 -0
  356. package/lib/module/helpers/runConfiguredHistoryPreload.js.map +1 -0
  357. package/lib/module/helpers/sessionAppId.js +20 -0
  358. package/lib/module/helpers/sessionAppId.js.map +1 -0
  359. package/lib/module/helpers/timestamp.js +37 -0
  360. package/lib/module/helpers/timestamp.js.map +1 -0
  361. package/lib/module/helpers/userResolver.js +503 -0
  362. package/lib/module/helpers/userResolver.js.map +1 -0
  363. package/lib/module/helpers/xmppIdShape.js +46 -0
  364. package/lib/module/helpers/xmppIdShape.js.map +1 -0
  365. package/lib/module/hooks/useChatWrapperInit.js +16 -5
  366. package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
  367. package/lib/module/hooks/useHeapSender.js +54 -3
  368. package/lib/module/hooks/useHeapSender.js.map +1 -1
  369. package/lib/module/hooks/useJumpToMessage.js +389 -0
  370. package/lib/module/hooks/useJumpToMessage.js.map +1 -0
  371. package/lib/module/hooks/useMessageLoaderQueue.js +32 -5
  372. package/lib/module/hooks/useMessageLoaderQueue.js.map +1 -1
  373. package/lib/module/hooks/useMessageQueue.js +13 -5
  374. package/lib/module/hooks/useMessageQueue.js.map +1 -1
  375. package/lib/module/hooks/useRoomDirectory.js +24 -0
  376. package/lib/module/hooks/useRoomDirectory.js.map +1 -0
  377. package/lib/module/hooks/useRoomInitialization.js +29 -7
  378. package/lib/module/hooks/useRoomInitialization.js.map +1 -1
  379. package/lib/module/hooks/useRoomMute.js +58 -0
  380. package/lib/module/hooks/useRoomMute.js.map +1 -0
  381. package/lib/module/hooks/useRoomState.js +3 -1
  382. package/lib/module/hooks/useRoomState.js.map +1 -1
  383. package/lib/module/hooks/useSendMessage.js +13 -3
  384. package/lib/module/hooks/useSendMessage.js.map +1 -1
  385. package/lib/module/i18n/strings.js +318 -6
  386. package/lib/module/i18n/strings.js.map +1 -1
  387. package/lib/module/networking/api-requests/messageSearch.api.js +81 -0
  388. package/lib/module/networking/api-requests/messageSearch.api.js.map +1 -0
  389. package/lib/module/networking/api-requests/publicChats.api.js +43 -0
  390. package/lib/module/networking/api-requests/publicChats.api.js.map +1 -0
  391. package/lib/module/networking/api-requests/roomMembers.api.js +248 -4
  392. package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
  393. package/lib/module/networking/api-requests/rooms.api.js +48 -12
  394. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  395. package/lib/module/networking/api-requests/xmppToken.api.js +66 -0
  396. package/lib/module/networking/api-requests/xmppToken.api.js.map +1 -0
  397. package/lib/module/networking/ethoraEvents.js +220 -0
  398. package/lib/module/networking/ethoraEvents.js.map +1 -0
  399. package/lib/module/networking/stanzaHandlers.js +155 -18
  400. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  401. package/lib/module/networking/xmpp/allRoomPresences.xmpp.js +125 -3
  402. package/lib/module/networking/xmpp/allRoomPresences.xmpp.js.map +1 -1
  403. package/lib/module/networking/xmpp/getHistory.xmpp.js +318 -35
  404. package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
  405. package/lib/module/networking/xmpp/handleStanzas.xmpp.js +7 -0
  406. package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  407. package/lib/module/networking/xmpp/historyCursor.js +95 -0
  408. package/lib/module/networking/xmpp/historyCursor.js.map +1 -0
  409. package/lib/module/networking/xmpp/mamQueryIds.js +12 -0
  410. package/lib/module/networking/xmpp/mamQueryIds.js.map +1 -0
  411. package/lib/module/networking/xmpp/mamRouter.js +22 -8
  412. package/lib/module/networking/xmpp/mamRouter.js.map +1 -1
  413. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +68 -62
  414. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  415. package/lib/module/networking/xmpp/roomJoinSweep.js +385 -0
  416. package/lib/module/networking/xmpp/roomJoinSweep.js.map +1 -0
  417. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +0 -1
  418. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  419. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +0 -1
  420. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  421. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +0 -1
  422. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  423. package/lib/module/networking/xmppClient.js +269 -41
  424. package/lib/module/networking/xmppClient.js.map +1 -1
  425. package/lib/module/networking/xmppCredentials.js +76 -0
  426. package/lib/module/networking/xmppCredentials.js.map +1 -0
  427. package/lib/module/roomStore/Middleware/jumpThreadMiddleware.js +153 -0
  428. package/lib/module/roomStore/Middleware/jumpThreadMiddleware.js.map +1 -0
  429. package/lib/module/roomStore/Middleware/reactionsMiddleware.js +6 -0
  430. package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  431. package/lib/module/roomStore/Middleware/unreadMidlleware.js +46 -7
  432. package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  433. package/lib/module/roomStore/chatSettingsSlice.js +13 -0
  434. package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
  435. package/lib/module/roomStore/index.js +7 -3
  436. package/lib/module/roomStore/index.js.map +1 -1
  437. package/lib/module/roomStore/persistence.js +46 -1
  438. package/lib/module/roomStore/persistence.js.map +1 -1
  439. package/lib/module/roomStore/roomsSlice.js +459 -58
  440. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  441. package/lib/module/roomStore/safeKey.js +37 -0
  442. package/lib/module/roomStore/safeKey.js.map +1 -0
  443. package/lib/module/roomStore/usersSetCap.js +32 -0
  444. package/lib/module/roomStore/usersSetCap.js.map +1 -0
  445. package/lib/module/version.js +1 -1
  446. package/lib/module/version.js.map +1 -1
  447. package/lib/typescript/assets/icons.d.ts +4 -0
  448. package/lib/typescript/assets/icons.d.ts.map +1 -1
  449. package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
  450. package/lib/typescript/components/InputComponents/Search.d.ts.map +1 -1
  451. package/lib/typescript/components/MainComponents/ArchivedMessageCard.d.ts +12 -0
  452. package/lib/typescript/components/MainComponents/ArchivedMessageCard.d.ts.map +1 -0
  453. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  454. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  455. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  456. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  457. package/lib/typescript/components/MainComponents/MessageList.d.ts +22 -1
  458. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  459. package/lib/typescript/components/MainComponents/MessageSearchButton.d.ts +7 -0
  460. package/lib/typescript/components/MainComponents/MessageSearchButton.d.ts.map +1 -0
  461. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  462. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  463. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
  464. package/lib/typescript/components/MessageBubble/BubbleHighlight.d.ts +12 -0
  465. package/lib/typescript/components/MessageBubble/BubbleHighlight.d.ts.map +1 -0
  466. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  467. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +5 -0
  468. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  469. package/lib/typescript/components/MessageBubble/messageMenuLayout.d.ts +29 -0
  470. package/lib/typescript/components/MessageBubble/messageMenuLayout.d.ts.map +1 -0
  471. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts +2 -0
  472. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  473. package/lib/typescript/components/Modals/MessageSearchModal/MessageHitResults.d.ts +44 -0
  474. package/lib/typescript/components/Modals/MessageSearchModal/MessageHitResults.d.ts.map +1 -0
  475. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts +12 -0
  476. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts.map +1 -0
  477. package/lib/typescript/components/Modals/MessageSearchModal/openHit.d.ts +15 -0
  478. package/lib/typescript/components/Modals/MessageSearchModal/openHit.d.ts.map +1 -0
  479. package/lib/typescript/components/Modals/MessageSearchModal/resolveSender.d.ts +34 -0
  480. package/lib/typescript/components/Modals/MessageSearchModal/resolveSender.d.ts.map +1 -0
  481. package/lib/typescript/components/Modals/MessageSearchModal/searchFilters.d.ts +41 -0
  482. package/lib/typescript/components/Modals/MessageSearchModal/searchFilters.d.ts.map +1 -0
  483. package/lib/typescript/components/Modals/MessageSearchModal/snippet.d.ts +15 -0
  484. package/lib/typescript/components/Modals/MessageSearchModal/snippet.d.ts.map +1 -0
  485. package/lib/typescript/components/Modals/MessageSearchModal/useMessageSearch.d.ts +23 -0
  486. package/lib/typescript/components/Modals/MessageSearchModal/useMessageSearch.d.ts.map +1 -0
  487. package/lib/typescript/components/Modals/PublicChatsModal/PublicChatsModal.d.ts +16 -0
  488. package/lib/typescript/components/Modals/PublicChatsModal/PublicChatsModal.d.ts.map +1 -0
  489. package/lib/typescript/components/Modals/PublicChatsModal/publicChatsLogic.d.ts +14 -0
  490. package/lib/typescript/components/Modals/PublicChatsModal/publicChatsLogic.d.ts.map +1 -0
  491. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
  492. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  493. package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts +5 -1
  494. package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts.map +1 -1
  495. package/lib/typescript/components/Thread/ThreadHeader.d.ts.map +1 -1
  496. package/lib/typescript/components/Thread/ThreadWrapper.d.ts +1 -0
  497. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  498. package/lib/typescript/components/styled/AudioDecoderHost.d.ts +39 -0
  499. package/lib/typescript/components/styled/AudioDecoderHost.d.ts.map +1 -0
  500. package/lib/typescript/components/styled/AudioMessage.d.ts +14 -1
  501. package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
  502. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  503. package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
  504. package/lib/typescript/context/xmppProvider.d.ts +2 -0
  505. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  506. package/lib/typescript/helpers/audioWaveform.d.ts +54 -0
  507. package/lib/typescript/helpers/audioWaveform.d.ts.map +1 -0
  508. package/lib/typescript/helpers/backgroundJoinSweep.d.ts +14 -0
  509. package/lib/typescript/helpers/backgroundJoinSweep.d.ts.map +1 -0
  510. package/lib/typescript/helpers/bubbleHighlight.d.ts +17 -0
  511. package/lib/typescript/helpers/bubbleHighlight.d.ts.map +1 -0
  512. package/lib/typescript/helpers/checkUniqueUsers.d.ts +2 -2
  513. package/lib/typescript/helpers/checkUniqueUsers.d.ts.map +1 -1
  514. package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
  515. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +2 -0
  516. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
  517. package/lib/typescript/helpers/createRoomFromApi.d.ts +25 -0
  518. package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
  519. package/lib/typescript/helpers/dedupeMembers.d.ts +11 -0
  520. package/lib/typescript/helpers/dedupeMembers.d.ts.map +1 -0
  521. package/lib/typescript/helpers/ethoraLogger.d.ts +13 -0
  522. package/lib/typescript/helpers/ethoraLogger.d.ts.map +1 -0
  523. package/lib/typescript/helpers/getUnnamedUsers.d.ts.map +1 -1
  524. package/lib/typescript/helpers/historyPreloadConfig.d.ts +26 -0
  525. package/lib/typescript/helpers/historyPreloadConfig.d.ts.map +1 -0
  526. package/lib/typescript/helpers/historyPreloadScheduler.d.ts +8 -4
  527. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  528. package/lib/typescript/helpers/initRoomsPresence.d.ts +7 -0
  529. package/lib/typescript/helpers/initRoomsPresence.d.ts.map +1 -1
  530. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  531. package/lib/typescript/helpers/isLikelyMucJid.d.ts +19 -0
  532. package/lib/typescript/helpers/isLikelyMucJid.d.ts.map +1 -0
  533. package/lib/typescript/helpers/isMessageSearchEnabled.d.ts +12 -0
  534. package/lib/typescript/helpers/isMessageSearchEnabled.d.ts.map +1 -0
  535. package/lib/typescript/helpers/joiningRoom.d.ts +7 -0
  536. package/lib/typescript/helpers/joiningRoom.d.ts.map +1 -0
  537. package/lib/typescript/helpers/jumpThread.d.ts +48 -0
  538. package/lib/typescript/helpers/jumpThread.d.ts.map +1 -0
  539. package/lib/typescript/helpers/jumpToMessage.d.ts +26 -0
  540. package/lib/typescript/helpers/jumpToMessage.d.ts.map +1 -0
  541. package/lib/typescript/helpers/jumpWindow.d.ts +74 -0
  542. package/lib/typescript/helpers/jumpWindow.d.ts.map +1 -0
  543. package/lib/typescript/helpers/loadRoomHistory.d.ts +34 -0
  544. package/lib/typescript/helpers/loadRoomHistory.d.ts.map +1 -0
  545. package/lib/typescript/helpers/notificationPolicy.d.ts +42 -0
  546. package/lib/typescript/helpers/notificationPolicy.d.ts.map +1 -0
  547. package/lib/typescript/helpers/openRoomAtMessage.d.ts +17 -0
  548. package/lib/typescript/helpers/openRoomAtMessage.d.ts.map +1 -0
  549. package/lib/typescript/helpers/openThreadForJump.d.ts +27 -0
  550. package/lib/typescript/helpers/openThreadForJump.d.ts.map +1 -0
  551. package/lib/typescript/helpers/parseMessageReference.d.ts +18 -5
  552. package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -1
  553. package/lib/typescript/helpers/publicChatsEntry.d.ts +11 -0
  554. package/lib/typescript/helpers/publicChatsEntry.d.ts.map +1 -0
  555. package/lib/typescript/helpers/roomActivityScore.d.ts +5 -0
  556. package/lib/typescript/helpers/roomActivityScore.d.ts.map +1 -0
  557. package/lib/typescript/helpers/roomUserCount.d.ts +20 -0
  558. package/lib/typescript/helpers/roomUserCount.d.ts.map +1 -0
  559. package/lib/typescript/helpers/runConfiguredHistoryPreload.d.ts +21 -0
  560. package/lib/typescript/helpers/runConfiguredHistoryPreload.d.ts.map +1 -0
  561. package/lib/typescript/helpers/sessionAppId.d.ts +8 -0
  562. package/lib/typescript/helpers/sessionAppId.d.ts.map +1 -0
  563. package/lib/typescript/helpers/timestamp.d.ts +3 -0
  564. package/lib/typescript/helpers/timestamp.d.ts.map +1 -0
  565. package/lib/typescript/helpers/userResolver.d.ts +58 -0
  566. package/lib/typescript/helpers/userResolver.d.ts.map +1 -0
  567. package/lib/typescript/helpers/xmppIdShape.d.ts +10 -0
  568. package/lib/typescript/helpers/xmppIdShape.d.ts.map +1 -0
  569. package/lib/typescript/hooks/useChatWrapperInit.d.ts +2 -0
  570. package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
  571. package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
  572. package/lib/typescript/hooks/useJumpToMessage.d.ts +116 -0
  573. package/lib/typescript/hooks/useJumpToMessage.d.ts.map +1 -0
  574. package/lib/typescript/hooks/useMessageLoaderQueue.d.ts.map +1 -1
  575. package/lib/typescript/hooks/useMessageQueue.d.ts.map +1 -1
  576. package/lib/typescript/hooks/useRoomDirectory.d.ts +12 -0
  577. package/lib/typescript/hooks/useRoomDirectory.d.ts.map +1 -0
  578. package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
  579. package/lib/typescript/hooks/useRoomMute.d.ts +8 -0
  580. package/lib/typescript/hooks/useRoomMute.d.ts.map +1 -0
  581. package/lib/typescript/hooks/useRoomState.d.ts +1 -0
  582. package/lib/typescript/hooks/useRoomState.d.ts.map +1 -1
  583. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  584. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  585. package/lib/typescript/networking/api-requests/messageSearch.api.d.ts +57 -0
  586. package/lib/typescript/networking/api-requests/messageSearch.api.d.ts.map +1 -0
  587. package/lib/typescript/networking/api-requests/publicChats.api.d.ts +24 -0
  588. package/lib/typescript/networking/api-requests/publicChats.api.d.ts.map +1 -0
  589. package/lib/typescript/networking/api-requests/roomMembers.api.d.ts +19 -1
  590. package/lib/typescript/networking/api-requests/roomMembers.api.d.ts.map +1 -1
  591. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  592. package/lib/typescript/networking/api-requests/xmppToken.api.d.ts +2 -0
  593. package/lib/typescript/networking/api-requests/xmppToken.api.d.ts.map +1 -0
  594. package/lib/typescript/networking/ethoraEvents.d.ts +45 -0
  595. package/lib/typescript/networking/ethoraEvents.d.ts.map +1 -0
  596. package/lib/typescript/networking/stanzaHandlers.d.ts +1 -1
  597. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  598. package/lib/typescript/networking/xmpp/allRoomPresences.xmpp.d.ts +32 -1
  599. package/lib/typescript/networking/xmpp/allRoomPresences.xmpp.d.ts.map +1 -1
  600. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +64 -0
  601. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
  602. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
  603. package/lib/typescript/networking/xmpp/historyCursor.d.ts +35 -0
  604. package/lib/typescript/networking/xmpp/historyCursor.d.ts.map +1 -0
  605. package/lib/typescript/networking/xmpp/mamQueryIds.d.ts +10 -0
  606. package/lib/typescript/networking/xmpp/mamQueryIds.d.ts.map +1 -0
  607. package/lib/typescript/networking/xmpp/mamRouter.d.ts +7 -0
  608. package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -1
  609. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +13 -2
  610. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  611. package/lib/typescript/networking/xmpp/roomJoinSweep.d.ts +82 -0
  612. package/lib/typescript/networking/xmpp/roomJoinSweep.d.ts.map +1 -0
  613. package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
  614. package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
  615. package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
  616. package/lib/typescript/networking/xmppClient.d.ts +90 -4
  617. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  618. package/lib/typescript/networking/xmppCredentials.d.ts +12 -0
  619. package/lib/typescript/networking/xmppCredentials.d.ts.map +1 -0
  620. package/lib/typescript/roomStore/Middleware/jumpThreadMiddleware.d.ts +3 -0
  621. package/lib/typescript/roomStore/Middleware/jumpThreadMiddleware.d.ts.map +1 -0
  622. package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
  623. package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
  624. package/lib/typescript/roomStore/chatSettingsSlice.d.ts +8 -1
  625. package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
  626. package/lib/typescript/roomStore/index.d.ts +2 -1
  627. package/lib/typescript/roomStore/index.d.ts.map +1 -1
  628. package/lib/typescript/roomStore/persistence.d.ts +8 -0
  629. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  630. package/lib/typescript/roomStore/roomsSlice.d.ts +138 -2
  631. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  632. package/lib/typescript/roomStore/safeKey.d.ts +13 -0
  633. package/lib/typescript/roomStore/safeKey.d.ts.map +1 -0
  634. package/lib/typescript/roomStore/usersSetCap.d.ts +16 -0
  635. package/lib/typescript/roomStore/usersSetCap.d.ts.map +1 -0
  636. package/lib/typescript/types/models/media.model.d.ts +2 -0
  637. package/lib/typescript/types/models/media.model.d.ts.map +1 -1
  638. package/lib/typescript/types/models/room.model.d.ts +18 -5
  639. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  640. package/lib/typescript/types/models/xmpp.model.d.ts +8 -1
  641. package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
  642. package/lib/typescript/types/types.d.ts +90 -5
  643. package/lib/typescript/types/types.d.ts.map +1 -1
  644. package/lib/typescript/version.d.ts +1 -1
  645. package/lib/typescript/version.d.ts.map +1 -1
  646. package/package.json +1 -1
  647. package/src/assets/icons.tsx +13 -0
  648. package/src/components/Header/HeaderRoomList.tsx +21 -4
  649. package/src/components/InputComponents/Search.tsx +33 -0
  650. package/src/components/MainComponents/ArchivedMessageCard.tsx +139 -0
  651. package/src/components/MainComponents/ChatHeader.tsx +19 -3
  652. package/src/components/MainComponents/ChatRoom.tsx +60 -23
  653. package/src/components/MainComponents/ChatWrapper.tsx +50 -9
  654. package/src/components/MainComponents/MediaMessage.tsx +17 -0
  655. package/src/components/MainComponents/MessageList.tsx +823 -84
  656. package/src/components/MainComponents/MessageSearchButton.tsx +48 -0
  657. package/src/components/MainComponents/ReduxWrapper.tsx +16 -5
  658. package/src/components/MainComponents/RoomList.tsx +125 -0
  659. package/src/components/Menu/HeaderRoomListMenu.tsx +26 -2
  660. package/src/components/MessageBubble/BubbleHighlight.tsx +106 -0
  661. package/src/components/MessageBubble/Message.tsx +265 -177
  662. package/src/components/MessageBubble/MessageInteractions.tsx +109 -86
  663. package/src/components/MessageBubble/messageMenuLayout.ts +59 -0
  664. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +92 -21
  665. package/src/components/Modals/MessageSearchModal/MessageHitResults.tsx +271 -0
  666. package/src/components/Modals/MessageSearchModal/MessageSearchModal.tsx +487 -0
  667. package/src/components/Modals/MessageSearchModal/openHit.ts +50 -0
  668. package/src/components/Modals/MessageSearchModal/resolveSender.ts +57 -0
  669. package/src/components/Modals/MessageSearchModal/searchFilters.ts +109 -0
  670. package/src/components/Modals/MessageSearchModal/snippet.ts +58 -0
  671. package/src/components/Modals/MessageSearchModal/useMessageSearch.ts +151 -0
  672. package/src/components/Modals/PublicChatsModal/PublicChatsModal.tsx +288 -0
  673. package/src/components/Modals/PublicChatsModal/publicChatsLogic.ts +36 -0
  674. package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +8 -1
  675. package/src/components/RoomComponents/ChatRoomItem.tsx +16 -3
  676. package/src/components/RoomComponents/SwipeableRoomRow.tsx +39 -6
  677. package/src/components/Thread/ThreadHeader.tsx +3 -1
  678. package/src/components/Thread/ThreadWrapper.tsx +96 -10
  679. package/src/components/styled/AudioDecoderHost.tsx +351 -0
  680. package/src/components/styled/AudioMessage.tsx +482 -425
  681. package/src/components/styled/SendInput.tsx +42 -4
  682. package/src/context/MessageNotificationContext.tsx +19 -5
  683. package/src/context/xmppProvider.tsx +56 -91
  684. package/src/helpers/audioWaveform.ts +142 -0
  685. package/src/helpers/backgroundJoinSweep.ts +35 -0
  686. package/src/helpers/bubbleHighlight.ts +47 -0
  687. package/src/helpers/checkUniqueUsers.tsx +15 -17
  688. package/src/helpers/constants/MODAL_COMPONENTS.tsx +4 -0
  689. package/src/helpers/constants/MODAL_TYPES.ts +3 -0
  690. package/src/helpers/createRoomFromApi.tsx +45 -4
  691. package/src/helpers/dedupeMembers.ts +29 -0
  692. package/src/helpers/ethoraLogger.ts +50 -0
  693. package/src/helpers/getUnnamedUsers.ts +7 -4
  694. package/src/helpers/historyPreloadConfig.ts +68 -0
  695. package/src/helpers/historyPreloadScheduler.ts +437 -199
  696. package/src/helpers/initRoomsPresence.ts +20 -7
  697. package/src/helpers/insertMessageWithDelimiter.ts +3 -0
  698. package/src/helpers/isLikelyMucJid.ts +72 -0
  699. package/src/helpers/isMessageSearchEnabled.ts +18 -0
  700. package/src/helpers/joiningRoom.ts +13 -0
  701. package/src/helpers/jumpThread.ts +102 -0
  702. package/src/helpers/jumpToMessage.ts +57 -0
  703. package/src/helpers/jumpWindow.ts +212 -0
  704. package/src/helpers/loadRoomHistory.ts +83 -0
  705. package/src/helpers/notificationPolicy.ts +82 -0
  706. package/src/helpers/openRoomAtMessage.ts +38 -0
  707. package/src/helpers/openThreadForJump.ts +96 -0
  708. package/src/helpers/parseMessageReference.ts +37 -8
  709. package/src/helpers/publicChatsEntry.ts +15 -0
  710. package/src/helpers/roomActivityScore.ts +45 -0
  711. package/src/helpers/roomUserCount.ts +44 -0
  712. package/src/helpers/runConfiguredHistoryPreload.ts +76 -0
  713. package/src/helpers/sessionAppId.ts +17 -0
  714. package/src/helpers/timestamp.ts +44 -0
  715. package/src/helpers/userResolver.ts +542 -0
  716. package/src/helpers/xmppIdShape.ts +46 -0
  717. package/src/hooks/useChatWrapperInit.ts +22 -4
  718. package/src/hooks/useHeapSender.tsx +54 -3
  719. package/src/hooks/useJumpToMessage.ts +538 -0
  720. package/src/hooks/useMessageLoaderQueue.tsx +40 -4
  721. package/src/hooks/useMessageQueue.ts +9 -5
  722. package/src/hooks/useRoomDirectory.ts +39 -0
  723. package/src/hooks/useRoomInitialization.tsx +33 -7
  724. package/src/hooks/useRoomMute.ts +42 -0
  725. package/src/hooks/useRoomState.tsx +6 -0
  726. package/src/hooks/useSendMessage.tsx +14 -2
  727. package/src/i18n/strings.ts +312 -0
  728. package/src/networking/api-requests/messageSearch.api.ts +130 -0
  729. package/src/networking/api-requests/publicChats.api.ts +71 -0
  730. package/src/networking/api-requests/roomMembers.api.ts +263 -11
  731. package/src/networking/api-requests/rooms.api.ts +52 -12
  732. package/src/networking/api-requests/xmppToken.api.ts +62 -0
  733. package/src/networking/ethoraEvents.ts +262 -0
  734. package/src/networking/stanzaHandlers.ts +145 -19
  735. package/src/networking/xmpp/allRoomPresences.xmpp.ts +155 -5
  736. package/src/networking/xmpp/getHistory.xmpp.ts +433 -47
  737. package/src/networking/xmpp/handleStanzas.xmpp.ts +8 -0
  738. package/src/networking/xmpp/historyCursor.ts +124 -0
  739. package/src/networking/xmpp/mamQueryIds.ts +11 -0
  740. package/src/networking/xmpp/mamRouter.ts +24 -10
  741. package/src/networking/xmpp/presenceInRoom.xmpp.ts +91 -68
  742. package/src/networking/xmpp/roomJoinSweep.ts +412 -0
  743. package/src/networking/xmpp/sendMediaMessage.xmpp.ts +0 -1
  744. package/src/networking/xmpp/sendTextMessage.xmpp.ts +0 -1
  745. package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +0 -1
  746. package/src/networking/xmppClient.ts +323 -47
  747. package/src/networking/xmppCredentials.ts +87 -0
  748. package/src/roomStore/Middleware/jumpThreadMiddleware.ts +163 -0
  749. package/src/roomStore/Middleware/reactionsMiddleware.tsx +4 -0
  750. package/src/roomStore/Middleware/unreadMidlleware.tsx +59 -11
  751. package/src/roomStore/chatSettingsSlice.ts +11 -0
  752. package/src/roomStore/index.ts +10 -3
  753. package/src/roomStore/persistence.ts +54 -0
  754. package/src/roomStore/roomsSlice.ts +547 -65
  755. package/src/roomStore/safeKey.ts +49 -0
  756. package/src/roomStore/usersSetCap.ts +37 -0
  757. package/src/types/models/media.model.ts +4 -0
  758. package/src/types/models/room.model.ts +18 -5
  759. package/src/types/models/xmpp.model.ts +15 -1
  760. package/src/types/types.ts +95 -5
  761. package/src/version.ts +1 -1
@@ -18,6 +18,11 @@ const en: UiStringTable = {
18
18
  'roomList.title': 'Chats',
19
19
  'connection.connecting': 'Connecting…',
20
20
  'connection.updating': 'Updating…',
21
+ 'connection.errorTitle': 'Connection error',
22
+ 'connection.errorBody': 'Something went wrong while connecting to chat.',
23
+ 'session.expiredTitle': 'Session expired',
24
+ 'session.expiredBody': 'Your sign-in is no longer valid. Sign in again to continue.',
25
+ 'action.retry': 'Retry',
21
26
  'menu.newChat': 'New Chat',
22
27
  'menu.profile': 'Profile',
23
28
  'menu.settings': 'Settings',
@@ -65,6 +70,10 @@ const en: UiStringTable = {
65
70
  'media.sealedDownload': 'Download and decrypt',
66
71
  'media.sealedDownloading': 'Decrypting…',
67
72
  'media.sealedDownloadFailed': 'Download failed — tap to retry',
73
+ 'media.audioPlay': 'Play voice message',
74
+ 'media.audioPause': 'Pause voice message',
75
+ 'media.audioSpeed': 'Playback speed',
76
+ 'media.audioUnavailable': 'Audio unavailable',
68
77
  'message.newMessages': 'New messages',
69
78
  'notification.senderFallback': 'New message',
70
79
  'presence.online': 'online',
@@ -126,6 +135,8 @@ const en: UiStringTable = {
126
135
  'action.leave': 'Leave',
127
136
  'action.muted': 'Muted',
128
137
  'action.unmuted': 'Unmuted',
138
+ 'action.mute': 'Mute',
139
+ 'action.unmute': 'Unmute',
129
140
  'toast.muteFailed': 'Could not update notifications for this chat',
130
141
  'action.create': 'Create',
131
142
  'action.submit': 'Submit',
@@ -332,6 +343,47 @@ const en: UiStringTable = {
332
343
  'settings.manageData.deleteLabel': 'Delete your account',
333
344
  'settings.manageData.deleteDescription': 'Use this only if you want to permanently delete your account & data from our system.',
334
345
  'settings.manageData.deleteDisclosure': 'Due to the immutable nature of distributed ledger technology, network nodes operated by the community may still retain historical transactions generated by your account, however your personally identifiable information such as your name, e-mail, your key-value storage etc will be removed. Any of your digital assets will be lost.',
346
+ 'search.messages.title': 'Search messages',
347
+ 'search.messages.placeholderChat': 'Search in this chat',
348
+ 'search.messages.placeholderAll': 'Search all chats',
349
+ 'search.messages.scope': 'Where to search',
350
+ 'search.messages.scopeChat': 'This chat',
351
+ 'search.messages.scopeAll': 'All chats',
352
+ 'search.messages.hint': 'Type to search the conversation history',
353
+ 'search.messages.tooShort': 'Type at least {count} characters',
354
+ 'search.messages.searching': 'Searching...',
355
+ 'search.messages.empty': 'No messages found',
356
+ 'search.messages.error': 'Search failed.',
357
+ 'search.messages.retry': 'Try again',
358
+ 'search.messages.loadMore': 'Show more',
359
+ 'search.messages.count': '{count} found',
360
+ 'search.messages.you': 'You',
361
+ 'search.messages.someone': 'Someone',
362
+ 'search.messages.chat': 'Chat',
363
+ 'search.messages.notFound': 'That message is too far back to load.',
364
+ 'search.messages.filters': 'Filters',
365
+ 'search.messages.filterSender': 'From',
366
+ 'search.messages.filterSenderPlaceholder': 'Name of the sender',
367
+ 'search.messages.filterSince': 'From date',
368
+ 'search.messages.filterUntil': 'To date',
369
+ 'search.messages.filterClear': 'Remove filter',
370
+ 'search.messages.filterClearAll': 'Clear filters',
371
+ 'search.messages.dateOrder': 'The start date is after the end date.',
372
+ 'publicChats.title': 'Discover chats',
373
+ 'publicChats.filter': 'Filter chats',
374
+ 'publicChats.loading': 'Loading chats...',
375
+ 'publicChats.error': 'Could not load public chats.',
376
+ 'publicChats.empty': 'No public chats to show',
377
+ 'publicChats.emptyFilterMore': 'No match among the chats loaded so far. Show more to keep looking.',
378
+ 'publicChats.join': 'Join',
379
+ 'publicChats.open': 'Open',
380
+ 'action.jumpToLatest': 'Jump to latest messages',
381
+ 'action.close': 'Close',
382
+ 'user.unknown': 'Unknown user',
383
+ 'modal.chatProfile.membersLoadingAll': 'Loading all members...',
384
+ 'search.clear': 'Clear search',
385
+ 'search.messages.archivedTitle': 'Older message',
386
+ 'search.messages.archivedNote': 'This message is older than the history available in this chat, so it cannot be shown in place.',
335
387
  };
336
388
 
337
389
  const fr: UiStringTable = {
@@ -339,6 +391,11 @@ const fr: UiStringTable = {
339
391
  'roomList.title': 'Discussions',
340
392
  'connection.connecting': 'Connexion…',
341
393
  'connection.updating': 'Mise à jour…',
394
+ 'connection.errorTitle': 'Erreur de connexion',
395
+ 'connection.errorBody': 'Un problème est survenu lors de la connexion au chat.',
396
+ 'session.expiredTitle': 'Session expirée',
397
+ 'session.expiredBody': "Votre connexion n'est plus valide. Reconnectez-vous pour continuer.",
398
+ 'action.retry': 'Réessayer',
342
399
  'menu.newChat': 'Nouvelle discussion',
343
400
  'menu.profile': 'Profil',
344
401
  'menu.settings': 'Paramètres',
@@ -386,6 +443,10 @@ const fr: UiStringTable = {
386
443
  'media.sealedDownload': 'Télécharger et déchiffrer',
387
444
  'media.sealedDownloading': 'Déchiffrement…',
388
445
  'media.sealedDownloadFailed': 'Échec du téléchargement — appuyez pour réessayer',
446
+ 'media.audioPlay': 'Lire le message vocal',
447
+ 'media.audioPause': 'Mettre en pause le message vocal',
448
+ 'media.audioSpeed': 'Vitesse de lecture',
449
+ 'media.audioUnavailable': 'Audio indisponible',
389
450
  'message.newMessages': 'Nouveaux messages',
390
451
  'notification.senderFallback': 'Nouveau message',
391
452
  'presence.online': 'en ligne',
@@ -447,6 +508,8 @@ const fr: UiStringTable = {
447
508
  'action.leave': 'Quitter',
448
509
  'action.muted': 'En sourdine',
449
510
  'action.unmuted': 'Activé',
511
+ 'action.mute': 'Muet',
512
+ 'action.unmute': 'Réactiver',
450
513
  'toast.muteFailed': 'Impossible de modifier les notifications de ce chat',
451
514
  'action.create': 'Créer',
452
515
  'action.submit': 'Soumettre',
@@ -653,6 +716,47 @@ const fr: UiStringTable = {
653
716
  'settings.manageData.deleteLabel': 'Supprimer votre compte',
654
717
  'settings.manageData.deleteDescription': 'À utiliser uniquement si vous souhaitez supprimer définitivement votre compte et vos données de notre système.',
655
718
  'settings.manageData.deleteDisclosure': "En raison de la nature immuable de la technologie des registres distribués, les nœuds du réseau exploités par la communauté peuvent conserver des transactions historiques générées par votre compte ; toutefois, vos informations personnelles identifiables telles que votre nom, e-mail, stockage clé-valeur, etc. seront supprimées. Tous vos actifs numériques seront perdus.",
719
+ 'search.messages.title': 'Rechercher des messages',
720
+ 'search.messages.placeholderChat': 'Rechercher dans cette discussion',
721
+ 'search.messages.placeholderAll': 'Rechercher dans toutes les discussions',
722
+ 'search.messages.scope': 'Où chercher',
723
+ 'search.messages.scopeChat': 'Cette discussion',
724
+ 'search.messages.scopeAll': 'Toutes',
725
+ 'search.messages.hint': "Saisissez pour chercher dans l'historique",
726
+ 'search.messages.tooShort': 'Saisissez au moins {count} caractères',
727
+ 'search.messages.searching': 'Recherche...',
728
+ 'search.messages.empty': 'Aucun message trouvé',
729
+ 'search.messages.error': 'La recherche a échoué.',
730
+ 'search.messages.retry': 'Réessayer',
731
+ 'search.messages.loadMore': 'Afficher plus',
732
+ 'search.messages.count': '{count} trouvés',
733
+ 'search.messages.you': 'Vous',
734
+ 'search.messages.someone': "Quelqu'un",
735
+ 'search.messages.chat': 'Discussion',
736
+ 'search.messages.notFound': 'Ce message est trop ancien pour être chargé.',
737
+ 'search.messages.filters': 'Filtres',
738
+ 'search.messages.filterSender': 'De',
739
+ 'search.messages.filterSenderPlaceholder': "Nom de l'expéditeur",
740
+ 'search.messages.filterSince': 'Du',
741
+ 'search.messages.filterUntil': 'Au',
742
+ 'search.messages.filterClear': 'Retirer le filtre',
743
+ 'search.messages.filterClearAll': 'Effacer les filtres',
744
+ 'search.messages.dateOrder': 'La date de début est postérieure à la date de fin.',
745
+ 'publicChats.title': 'Découvrir des discussions',
746
+ 'publicChats.filter': 'Filtrer les discussions',
747
+ 'publicChats.loading': 'Chargement des discussions...',
748
+ 'publicChats.error': 'Impossible de charger les discussions publiques.',
749
+ 'publicChats.empty': 'Aucune discussion publique à afficher',
750
+ 'publicChats.emptyFilterMore': 'Aucun résultat parmi les discussions chargées. Affichez-en plus pour continuer.',
751
+ 'publicChats.join': 'Rejoindre',
752
+ 'publicChats.open': 'Ouvrir',
753
+ 'action.jumpToLatest': 'Aller aux derniers messages',
754
+ 'action.close': 'Fermer',
755
+ 'user.unknown': 'Utilisateur inconnu',
756
+ 'modal.chatProfile.membersLoadingAll': 'Chargement de tous les membres...',
757
+ 'search.clear': 'Effacer la recherche',
758
+ 'search.messages.archivedTitle': 'Message plus ancien',
759
+ 'search.messages.archivedNote': 'Ce message est plus ancien que l\'historique disponible dans cette discussion, il ne peut donc pas être affiché à sa place.',
656
760
  };
657
761
 
658
762
  const es: UiStringTable = {
@@ -660,6 +764,11 @@ const es: UiStringTable = {
660
764
  'roomList.title': 'Conversaciones',
661
765
  'connection.connecting': 'Conectando…',
662
766
  'connection.updating': 'Actualizando…',
767
+ 'connection.errorTitle': 'Error de conexión',
768
+ 'connection.errorBody': 'Algo salió mal al conectar con el chat.',
769
+ 'session.expiredTitle': 'Sesión caducada',
770
+ 'session.expiredBody': 'Tu inicio de sesión ya no es válido. Vuelve a iniciar sesión para continuar.',
771
+ 'action.retry': 'Reintentar',
663
772
  'menu.newChat': 'Nuevo chat',
664
773
  'menu.profile': 'Perfil',
665
774
  'menu.settings': 'Configuración',
@@ -707,6 +816,10 @@ const es: UiStringTable = {
707
816
  'media.sealedDownload': 'Descargar y descifrar',
708
817
  'media.sealedDownloading': 'Descifrando…',
709
818
  'media.sealedDownloadFailed': 'Error de descarga: toca para reintentar',
819
+ 'media.audioPlay': 'Reproducir mensaje de voz',
820
+ 'media.audioPause': 'Pausar mensaje de voz',
821
+ 'media.audioSpeed': 'Velocidad de reproducción',
822
+ 'media.audioUnavailable': 'Audio no disponible',
710
823
  'message.newMessages': 'Nuevos mensajes',
711
824
  'notification.senderFallback': 'Nuevo mensaje',
712
825
  'presence.online': 'en línea',
@@ -768,6 +881,8 @@ const es: UiStringTable = {
768
881
  'action.leave': 'Salir',
769
882
  'action.muted': 'Silenciado',
770
883
  'action.unmuted': 'Activado',
884
+ 'action.mute': 'Silenciar',
885
+ 'action.unmute': 'Activar',
771
886
  'toast.muteFailed': 'No se pudieron cambiar las notificaciones de este chat',
772
887
  'action.create': 'Crear',
773
888
  'action.submit': 'Enviar',
@@ -974,6 +1089,47 @@ const es: UiStringTable = {
974
1089
  'settings.manageData.deleteLabel': 'Elimina tu cuenta',
975
1090
  'settings.manageData.deleteDescription': 'Utiliza esto solo si deseas eliminar permanentemente tu cuenta y tus datos de nuestro sistema.',
976
1091
  'settings.manageData.deleteDisclosure': 'Debido a la naturaleza inmutable de la tecnología de registro distribuido, los nodos de red operados por la comunidad pueden seguir conservando transacciones históricas generadas por tu cuenta; sin embargo, tu información personal identificable, como tu nombre, correo electrónico y almacenamiento clave-valor, será eliminada. Se perderán todos tus activos digitales.',
1092
+ 'search.messages.title': 'Buscar mensajes',
1093
+ 'search.messages.placeholderChat': 'Buscar en este chat',
1094
+ 'search.messages.placeholderAll': 'Buscar en todos los chats',
1095
+ 'search.messages.scope': 'Dónde buscar',
1096
+ 'search.messages.scopeChat': 'Este chat',
1097
+ 'search.messages.scopeAll': 'Todos',
1098
+ 'search.messages.hint': 'Escribe para buscar en el historial',
1099
+ 'search.messages.tooShort': 'Escribe al menos {count} caracteres',
1100
+ 'search.messages.searching': 'Buscando...',
1101
+ 'search.messages.empty': 'No se encontraron mensajes',
1102
+ 'search.messages.error': 'La búsqueda falló.',
1103
+ 'search.messages.retry': 'Reintentar',
1104
+ 'search.messages.loadMore': 'Mostrar más',
1105
+ 'search.messages.count': '{count} encontrados',
1106
+ 'search.messages.you': 'Tú',
1107
+ 'search.messages.someone': 'Alguien',
1108
+ 'search.messages.chat': 'Chat',
1109
+ 'search.messages.notFound': 'Ese mensaje es demasiado antiguo para cargarlo.',
1110
+ 'search.messages.filters': 'Filtros',
1111
+ 'search.messages.filterSender': 'De',
1112
+ 'search.messages.filterSenderPlaceholder': 'Nombre del remitente',
1113
+ 'search.messages.filterSince': 'Desde',
1114
+ 'search.messages.filterUntil': 'Hasta',
1115
+ 'search.messages.filterClear': 'Quitar filtro',
1116
+ 'search.messages.filterClearAll': 'Borrar filtros',
1117
+ 'search.messages.dateOrder': 'La fecha de inicio es posterior a la de fin.',
1118
+ 'publicChats.title': 'Descubrir chats',
1119
+ 'publicChats.filter': 'Filtrar chats',
1120
+ 'publicChats.loading': 'Cargando chats...',
1121
+ 'publicChats.error': 'No se pudieron cargar los chats públicos.',
1122
+ 'publicChats.empty': 'No hay chats públicos para mostrar',
1123
+ 'publicChats.emptyFilterMore': 'Sin coincidencias entre los chats cargados. Muestra más para seguir buscando.',
1124
+ 'publicChats.join': 'Unirse',
1125
+ 'publicChats.open': 'Abrir',
1126
+ 'action.jumpToLatest': 'Ir a los últimos mensajes',
1127
+ 'action.close': 'Cerrar',
1128
+ 'user.unknown': 'Usuario desconocido',
1129
+ 'modal.chatProfile.membersLoadingAll': 'Cargando todos los miembros...',
1130
+ 'search.clear': 'Borrar búsqueda',
1131
+ 'search.messages.archivedTitle': 'Mensaje anterior',
1132
+ 'search.messages.archivedNote': 'Este mensaje es anterior al historial disponible en este chat, por lo que no se puede mostrar en su lugar.',
977
1133
  };
978
1134
 
979
1135
  const pt: UiStringTable = {
@@ -981,6 +1137,11 @@ const pt: UiStringTable = {
981
1137
  'roomList.title': 'Conversas',
982
1138
  'connection.connecting': 'A ligar…',
983
1139
  'connection.updating': 'A atualizar…',
1140
+ 'connection.errorTitle': 'Erro de ligação',
1141
+ 'connection.errorBody': 'Algo correu mal ao ligar ao chat.',
1142
+ 'session.expiredTitle': 'Sessão expirada',
1143
+ 'session.expiredBody': 'O seu início de sessão já não é válido. Inicie sessão de novo para continuar.',
1144
+ 'action.retry': 'Tentar de novo',
984
1145
  'menu.newChat': 'Nova conversa',
985
1146
  'menu.profile': 'Perfil',
986
1147
  'menu.settings': 'Definições',
@@ -1028,6 +1189,10 @@ const pt: UiStringTable = {
1028
1189
  'media.sealedDownload': 'Baixar e descriptografar',
1029
1190
  'media.sealedDownloading': 'Descriptografando…',
1030
1191
  'media.sealedDownloadFailed': 'Falha no download — toque para tentar novamente',
1192
+ 'media.audioPlay': 'Reproduzir mensagem de voz',
1193
+ 'media.audioPause': 'Pausar mensagem de voz',
1194
+ 'media.audioSpeed': 'Velocidade de reprodução',
1195
+ 'media.audioUnavailable': 'Áudio indisponível',
1031
1196
  'message.newMessages': 'Novas mensagens',
1032
1197
  'notification.senderFallback': 'Nova mensagem',
1033
1198
  'presence.online': 'online',
@@ -1089,6 +1254,8 @@ const pt: UiStringTable = {
1089
1254
  'action.leave': 'Sair',
1090
1255
  'action.muted': 'Muted',
1091
1256
  'action.unmuted': 'Unmuted',
1257
+ 'action.mute': 'Silenciar',
1258
+ 'action.unmute': 'Ativar som',
1092
1259
  'toast.muteFailed': 'Could not update notifications for this chat',
1093
1260
  'action.create': 'Criar',
1094
1261
  'action.submit': 'Enviar',
@@ -1295,6 +1462,47 @@ const pt: UiStringTable = {
1295
1462
  'settings.manageData.deleteLabel': 'Eliminar a sua conta',
1296
1463
  'settings.manageData.deleteDescription': 'Use isto apenas se quiser eliminar permanentemente a sua conta e os seus dados do nosso sistema.',
1297
1464
  'settings.manageData.deleteDisclosure': 'Devido à natureza imutável da tecnologia de registo distribuído, os nós da rede operados pela comunidade podem manter transações históricas geradas pela sua conta; no entanto, as suas informações de identificação pessoal, como nome, email e armazenamento chave-valor, serão removidas. Todos os seus ativos digitais serão perdidos.',
1465
+ 'search.messages.title': 'Pesquisar mensagens',
1466
+ 'search.messages.placeholderChat': 'Pesquisar nesta conversa',
1467
+ 'search.messages.placeholderAll': 'Pesquisar em todas as conversas',
1468
+ 'search.messages.scope': 'Onde pesquisar',
1469
+ 'search.messages.scopeChat': 'Esta conversa',
1470
+ 'search.messages.scopeAll': 'Todas',
1471
+ 'search.messages.hint': 'Digite para pesquisar o histórico',
1472
+ 'search.messages.tooShort': 'Digite pelo menos {count} caracteres',
1473
+ 'search.messages.searching': 'Pesquisando...',
1474
+ 'search.messages.empty': 'Nenhuma mensagem encontrada',
1475
+ 'search.messages.error': 'A pesquisa falhou.',
1476
+ 'search.messages.retry': 'Tentar novamente',
1477
+ 'search.messages.loadMore': 'Mostrar mais',
1478
+ 'search.messages.count': '{count} encontradas',
1479
+ 'search.messages.you': 'Você',
1480
+ 'search.messages.someone': 'Alguém',
1481
+ 'search.messages.chat': 'Conversa',
1482
+ 'search.messages.notFound': 'Essa mensagem é antiga demais para ser carregada.',
1483
+ 'search.messages.filters': 'Filtros',
1484
+ 'search.messages.filterSender': 'De',
1485
+ 'search.messages.filterSenderPlaceholder': 'Nome do remetente',
1486
+ 'search.messages.filterSince': 'Desde',
1487
+ 'search.messages.filterUntil': 'Até',
1488
+ 'search.messages.filterClear': 'Remover filtro',
1489
+ 'search.messages.filterClearAll': 'Limpar filtros',
1490
+ 'search.messages.dateOrder': 'A data inicial é posterior à data final.',
1491
+ 'publicChats.title': 'Descobrir conversas',
1492
+ 'publicChats.filter': 'Filtrar conversas',
1493
+ 'publicChats.loading': 'Carregando conversas...',
1494
+ 'publicChats.error': 'Não foi possível carregar as conversas públicas.',
1495
+ 'publicChats.empty': 'Nenhuma conversa pública para mostrar',
1496
+ 'publicChats.emptyFilterMore': 'Nenhuma correspondência entre as conversas carregadas. Mostre mais para continuar.',
1497
+ 'publicChats.join': 'Entrar',
1498
+ 'publicChats.open': 'Abrir',
1499
+ 'action.jumpToLatest': 'Ir para as últimas mensagens',
1500
+ 'action.close': 'Fechar',
1501
+ 'user.unknown': 'Utilizador desconhecido',
1502
+ 'modal.chatProfile.membersLoadingAll': 'Carregando todos os membros...',
1503
+ 'search.clear': 'Limpar pesquisa',
1504
+ 'search.messages.archivedTitle': 'Mensagem antiga',
1505
+ 'search.messages.archivedNote': 'Esta mensagem é anterior ao histórico disponível nesta conversa, por isso não pode ser exibida no lugar.',
1298
1506
  };
1299
1507
 
1300
1508
  const ht: UiStringTable = {
@@ -1302,6 +1510,11 @@ const ht: UiStringTable = {
1302
1510
  'roomList.title': 'Chat yo',
1303
1511
  'connection.connecting': 'Ap konekte…',
1304
1512
  'connection.updating': 'Ap mete ajou…',
1513
+ 'connection.errorTitle': 'Erè koneksyon',
1514
+ 'connection.errorBody': 'Yon bagay pa mache pandan koneksyon ak chat la.',
1515
+ 'session.expiredTitle': 'Sesyon an ekspire',
1516
+ 'session.expiredBody': 'Koneksyon ou an pa valab ankò. Konekte ankò pou kontinye.',
1517
+ 'action.retry': 'Eseye ankò',
1305
1518
  'menu.newChat': 'Nouvo chat',
1306
1519
  'menu.profile': 'Pwofil',
1307
1520
  'menu.settings': 'Paramèt',
@@ -1349,6 +1562,10 @@ const ht: UiStringTable = {
1349
1562
  'media.sealedDownload': 'Telechaje epi dechifre',
1350
1563
  'media.sealedDownloading': 'Ap dechifre…',
1351
1564
  'media.sealedDownloadFailed': 'Telechajman echwe — peze pou reeseye',
1565
+ 'media.audioPlay': 'Jwe mesaj vokal la',
1566
+ 'media.audioPause': 'Poze mesaj vokal la',
1567
+ 'media.audioSpeed': 'Vitès lekti',
1568
+ 'media.audioUnavailable': 'Odyo pa disponib',
1352
1569
  'message.newMessages': 'Nouvo mesaj yo',
1353
1570
  'notification.senderFallback': 'Nouvo mesaj',
1354
1571
  'presence.online': 'an liy',
@@ -1410,6 +1627,8 @@ const ht: UiStringTable = {
1410
1627
  'action.leave': 'Kite',
1411
1628
  'action.muted': 'Muted',
1412
1629
  'action.unmuted': 'Unmuted',
1630
+ 'action.mute': 'Mete an silans',
1631
+ 'action.unmute': 'Retire silans',
1413
1632
  'toast.muteFailed': 'Could not update notifications for this chat',
1414
1633
  'action.create': 'Kreye',
1415
1634
  'action.submit': 'Soumèt',
@@ -1616,6 +1835,47 @@ const ht: UiStringTable = {
1616
1835
  'settings.manageData.deleteLabel': 'Efase kont ou',
1617
1836
  'settings.manageData.deleteDescription': 'Sèvi ak sa a sèlman si ou vle efase kont ou ak done ou yo nèt nan sistèm nou an.',
1618
1837
  'settings.manageData.deleteDisclosure': 'Akoz nati imityab teknoloji rejis distribiye a, nœud rezo kominote a opere yo ka toujou kenbe tranzaksyon istorik kont ou an te jenere; sepandan, enfòmasyon idantifyab pèsonèl ou yo tankou non ou, imèl ou ak depo kle-valè ou yo ap retire. Tout byen dijital ou yo ap pèdi.',
1838
+ 'search.messages.title': 'Chèche mesaj',
1839
+ 'search.messages.placeholderChat': 'Chèche nan chat sa a',
1840
+ 'search.messages.placeholderAll': 'Chèche nan tout chat yo',
1841
+ 'search.messages.scope': 'Ki kote pou chèche',
1842
+ 'search.messages.scopeChat': 'Chat sa a',
1843
+ 'search.messages.scopeAll': 'Tout',
1844
+ 'search.messages.hint': 'Tape pou chèche nan istwa a',
1845
+ 'search.messages.tooShort': 'Tape omwen {count} karaktè',
1846
+ 'search.messages.searching': 'Y ap chèche...',
1847
+ 'search.messages.empty': 'Pa gen mesaj jwenn',
1848
+ 'search.messages.error': 'Rechèch la echwe.',
1849
+ 'search.messages.retry': 'Eseye ankò',
1850
+ 'search.messages.loadMore': 'Montre plis',
1851
+ 'search.messages.count': '{count} jwenn',
1852
+ 'search.messages.you': 'Ou',
1853
+ 'search.messages.someone': 'Yon moun',
1854
+ 'search.messages.chat': 'Chat',
1855
+ 'search.messages.notFound': 'Mesaj sa a twò ansyen pou chaje.',
1856
+ 'search.messages.filters': 'Filt',
1857
+ 'search.messages.filterSender': 'Soti kay',
1858
+ 'search.messages.filterSenderPlaceholder': 'Non moun ki voye a',
1859
+ 'search.messages.filterSince': 'Depi',
1860
+ 'search.messages.filterUntil': 'Jiska',
1861
+ 'search.messages.filterClear': 'Retire filt la',
1862
+ 'search.messages.filterClearAll': 'Efase filt yo',
1863
+ 'search.messages.dateOrder': 'Dat kòmansman an pi ta pase dat fen an.',
1864
+ 'publicChats.title': 'Dekouvri chat',
1865
+ 'publicChats.filter': 'Filtre chat yo',
1866
+ 'publicChats.loading': 'Y ap chaje chat yo...',
1867
+ 'publicChats.error': 'Nou pa t ka chaje chat piblik yo.',
1868
+ 'publicChats.empty': 'Pa gen chat piblik pou montre',
1869
+ 'publicChats.emptyFilterMore': 'Pa gen rezilta nan chat ki chaje yo. Montre plis pou kontinye.',
1870
+ 'publicChats.join': 'Antre',
1871
+ 'publicChats.open': 'Louvri',
1872
+ 'action.jumpToLatest': 'Ale nan dènye mesaj yo',
1873
+ 'action.close': 'Fèmen',
1874
+ 'user.unknown': 'Itilizatè enkoni',
1875
+ 'modal.chatProfile.membersLoadingAll': 'N ap chaje tout manm yo...',
1876
+ 'search.clear': 'Efase rechèch',
1877
+ 'search.messages.archivedTitle': 'Mesaj ki pi ansyen',
1878
+ 'search.messages.archivedNote': 'Mesaj sa a pi ansyen pase istwa ki disponib nan chat sa a, kidonk nou pa ka montre l kote li ye a.',
1619
1879
  };
1620
1880
 
1621
1881
  const zh: UiStringTable = {
@@ -1623,6 +1883,11 @@ const zh: UiStringTable = {
1623
1883
  'roomList.title': '聊天',
1624
1884
  'connection.connecting': '连接中…',
1625
1885
  'connection.updating': '更新中…',
1886
+ 'connection.errorTitle': '连接错误',
1887
+ 'connection.errorBody': '连接聊天时出了问题。',
1888
+ 'session.expiredTitle': '会话已过期',
1889
+ 'session.expiredBody': '您的登录已失效,请重新登录以继续。',
1890
+ 'action.retry': '重试',
1626
1891
  'menu.newChat': '新聊天',
1627
1892
  'menu.profile': '个人资料',
1628
1893
  'menu.settings': '设置',
@@ -1670,6 +1935,10 @@ const zh: UiStringTable = {
1670
1935
  'media.sealedDownload': '下载并解密',
1671
1936
  'media.sealedDownloading': '正在解密…',
1672
1937
  'media.sealedDownloadFailed': '下载失败 — 点击重试',
1938
+ 'media.audioPlay': '播放语音消息',
1939
+ 'media.audioPause': '暂停语音消息',
1940
+ 'media.audioSpeed': '播放速度',
1941
+ 'media.audioUnavailable': '音频不可用',
1673
1942
  'message.newMessages': '新消息',
1674
1943
  'notification.senderFallback': '新消息',
1675
1944
  'presence.online': '在线',
@@ -1731,6 +2000,8 @@ const zh: UiStringTable = {
1731
2000
  'action.leave': '退出',
1732
2001
  'action.muted': 'Muted',
1733
2002
  'action.unmuted': 'Unmuted',
2003
+ 'action.mute': '静音',
2004
+ 'action.unmute': '取消静音',
1734
2005
  'toast.muteFailed': 'Could not update notifications for this chat',
1735
2006
  'action.create': '创建',
1736
2007
  'action.submit': '提交',
@@ -1937,6 +2208,47 @@ const zh: UiStringTable = {
1937
2208
  'settings.manageData.deleteLabel': '删除您的账户',
1938
2209
  'settings.manageData.deleteDescription': '仅当您希望从我们的系统中永久删除您的账户及数据时才使用此功能。',
1939
2210
  'settings.manageData.deleteDisclosure': '由于分布式账本技术的不可篡改特性,社区运营的网络节点可能仍会保留您账户生成的历史交易记录;但您的个人身份信息,如姓名、电子邮箱、键值存储等将被移除。您的所有数字资产都将丢失。',
2211
+ 'search.messages.title': '搜索消息',
2212
+ 'search.messages.placeholderChat': '在此聊天中搜索',
2213
+ 'search.messages.placeholderAll': '在所有聊天中搜索',
2214
+ 'search.messages.scope': '搜索范围',
2215
+ 'search.messages.scopeChat': '此聊天',
2216
+ 'search.messages.scopeAll': '全部',
2217
+ 'search.messages.hint': '输入以搜索聊天记录',
2218
+ 'search.messages.tooShort': '请至少输入 {count} 个字符',
2219
+ 'search.messages.searching': '搜索中...',
2220
+ 'search.messages.empty': '未找到消息',
2221
+ 'search.messages.error': '搜索失败。',
2222
+ 'search.messages.retry': '重试',
2223
+ 'search.messages.loadMore': '显示更多',
2224
+ 'search.messages.count': '找到 {count} 条',
2225
+ 'search.messages.you': '你',
2226
+ 'search.messages.someone': '某人',
2227
+ 'search.messages.chat': '聊天',
2228
+ 'search.messages.notFound': '该消息太久远,无法加载。',
2229
+ 'search.messages.filters': '筛选',
2230
+ 'search.messages.filterSender': '发送者',
2231
+ 'search.messages.filterSenderPlaceholder': '发送者姓名',
2232
+ 'search.messages.filterSince': '开始日期',
2233
+ 'search.messages.filterUntil': '结束日期',
2234
+ 'search.messages.filterClear': '移除筛选',
2235
+ 'search.messages.filterClearAll': '清除筛选',
2236
+ 'search.messages.dateOrder': '开始日期晚于结束日期。',
2237
+ 'publicChats.title': '发现聊天',
2238
+ 'publicChats.filter': '筛选聊天',
2239
+ 'publicChats.loading': '正在加载聊天...',
2240
+ 'publicChats.error': '无法加载公共聊天。',
2241
+ 'publicChats.empty': '没有可显示的公共聊天',
2242
+ 'publicChats.emptyFilterMore': '已加载的聊天中没有匹配项。显示更多以继续查找。',
2243
+ 'publicChats.join': '加入',
2244
+ 'publicChats.open': '打开',
2245
+ 'action.jumpToLatest': '跳到最新消息',
2246
+ 'action.close': '关闭',
2247
+ 'user.unknown': '未知用户',
2248
+ 'modal.chatProfile.membersLoadingAll': '正在加载全部成员...',
2249
+ 'search.clear': '清除搜索',
2250
+ 'search.messages.archivedTitle': '较早的消息',
2251
+ 'search.messages.archivedNote': '这条消息早于此聊天中可用的历史记录,因此无法在原位显示。',
1940
2252
  };
1941
2253
 
1942
2254
  // Built-in tables keyed by base language. Add a language here (plus the code
@@ -0,0 +1,130 @@
1
+ import http from '../apiClient';
2
+ import { store } from '../../roomStore';
3
+
4
+ /**
5
+ * GET /v2/apps/{appId}/messages/search: full-text / substring search over
6
+ * the chat archive. For a user token the server restricts it to chats the
7
+ * caller can see, so no client-side filtering is needed for privacy.
8
+ */
9
+ export interface MessageSearchHit {
10
+ /** The archive row's own id: the only identifier every hit is guaranteed to have. */
11
+ id: string;
12
+ /** Room name, the local part of the room JID. */
13
+ chatId: string;
14
+ chatType: string;
15
+ /** Full room JID. */
16
+ room: string;
17
+ /** Sender's full JID, WITH the xmpp host: `appId_userId@xmpp.host`. */
18
+ from: string;
19
+ fromUserId: string;
20
+ body: string;
21
+ messageId: string;
22
+ stanzaId: string;
23
+ createdAt: string;
24
+ }
25
+
26
+ export interface MessageSearchPage {
27
+ items: MessageSearchHit[];
28
+ /** Total matches on the server, not the size of this page. */
29
+ total: number;
30
+ offset: number;
31
+ limit: number;
32
+ /**
33
+ * Where the next page starts. Counted in SERVER rows, not in `items`:
34
+ * deleted messages are dropped from `items`, and paging by the filtered
35
+ * count would re-request rows already seen.
36
+ */
37
+ nextOffset: number;
38
+ }
39
+
40
+ export interface SearchMessagesParams {
41
+ q: string;
42
+ /** Room name (local part of the JID). Omit to search every visible chat. */
43
+ chatId?: string;
44
+ /** Only messages from this user (a room member's `_id`). */
45
+ fromUserId?: string;
46
+ /** ISO 8601 bounds; the server rejects anything else. */
47
+ since?: string;
48
+ until?: string;
49
+ limit?: number;
50
+ offset?: number;
51
+ signal?: AbortSignal;
52
+ }
53
+
54
+ export const MESSAGE_SEARCH_PAGE_SIZE = 20;
55
+
56
+ type RawHit = Partial<Omit<MessageSearchHit, 'id'>> & {
57
+ _id?: string;
58
+ deletedAt?: string | null;
59
+ };
60
+
61
+ export async function searchMessages({
62
+ q,
63
+ chatId,
64
+ fromUserId,
65
+ since,
66
+ until,
67
+ limit = MESSAGE_SEARCH_PAGE_SIZE,
68
+ offset = 0,
69
+ signal,
70
+ }: SearchMessagesParams): Promise<MessageSearchPage> {
71
+ const state = store.getState().chatSettingStore;
72
+ const appId = state.config?.appId;
73
+ const token = state.user?.token || '';
74
+ if (!appId) throw new Error('message_search_no_app_id');
75
+
76
+ const response = await http.get(
77
+ `/v2/apps/${encodeURIComponent(appId)}/messages/search`,
78
+ {
79
+ params: {
80
+ q,
81
+ limit,
82
+ offset,
83
+ ...(chatId ? { chatId } : {}),
84
+ ...(fromUserId ? { fromUserId } : {}),
85
+ ...(since ? { since } : {}),
86
+ ...(until ? { until } : {}),
87
+ },
88
+ headers: { Authorization: token },
89
+ signal,
90
+ }
91
+ );
92
+
93
+ const data = response?.data || {};
94
+ const raw: RawHit[] = Array.isArray(data.items) ? data.items : [];
95
+
96
+ return {
97
+ // A deleted message is still in the archive with `deletedAt` set; showing
98
+ // it would let a search resurrect text the author removed.
99
+ items: raw
100
+ .filter(
101
+ (hit) => !hit.deletedAt && typeof hit.body === 'string' && hit.body
102
+ )
103
+ .map((hit) => ({
104
+ id: String(hit._id ?? ''),
105
+ chatId: String(hit.chatId ?? ''),
106
+ chatType: String(hit.chatType ?? ''),
107
+ room: String(hit.room ?? ''),
108
+ from: String(hit.from ?? ''),
109
+ fromUserId: String(hit.fromUserId ?? ''),
110
+ body: hit.body as string,
111
+ messageId: String(hit.messageId ?? ''),
112
+ stanzaId: String(hit.stanzaId ?? ''),
113
+ createdAt: String(hit.createdAt ?? ''),
114
+ })),
115
+ total: Number(data.total) || 0,
116
+ offset: Number(data.offset) || offset,
117
+ limit: Number(data.limit) || limit,
118
+ nextOffset: offset + raw.length,
119
+ };
120
+ }
121
+
122
+ /**
123
+ * A key that is unique per hit. stanzaId and messageId are NOT: on QA whole
124
+ * pages of older hits come back with both empty, which made every React key
125
+ * `chatId:` (rows were left behind when the list changed) and made a
126
+ * duplicate check by those ids throw real hits away.
127
+ */
128
+ export const hitKey = (hit: MessageSearchHit): string =>
129
+ hit.id ||
130
+ `${hit.chatId}:${hit.stanzaId}:${hit.messageId}:${hit.createdAt}:${hit.body.slice(0, 24)}`;