@ethora/chat-component-rn 26.5.5 → 26.5.10

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 (420) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/README.md +67 -10
  3. package/index.js +24 -0
  4. package/lib/commonjs/assets/icons.js +5 -1
  5. package/lib/commonjs/assets/icons.js.map +1 -1
  6. package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js +11 -5
  7. package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js.map +1 -1
  8. package/lib/commonjs/components/MainComponents/ChatHeader.js +7 -1
  9. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  10. package/lib/commonjs/components/MainComponents/ChatRoom.js +66 -34
  11. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  12. package/lib/commonjs/components/MainComponents/ChatWrapper.js +59 -14
  13. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  14. package/lib/commonjs/components/MainComponents/MediaMessage.js +15 -7
  15. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  16. package/lib/commonjs/components/MainComponents/MessageContainer.js +2 -2
  17. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  18. package/lib/commonjs/components/MainComponents/MessageList.js +175 -30
  19. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  20. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +17 -8
  21. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  22. package/lib/commonjs/components/MainComponents/SystemMessage.js +34 -22
  23. package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
  24. package/lib/commonjs/components/MessageBubble/Message.js +117 -19
  25. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  26. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +82 -22
  27. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  28. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +16 -4
  29. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  30. package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js +104 -0
  31. package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -0
  32. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +175 -40
  33. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  34. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +29 -1
  35. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  36. package/lib/commonjs/components/Modals/Modal/Modal.js +5 -1
  37. package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
  38. package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js +78 -39
  39. package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
  40. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +3 -3
  41. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  42. package/lib/commonjs/components/Modals/styledModalComponents.js +4 -9
  43. package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
  44. package/lib/commonjs/components/styled/MediaFilePreview.js +115 -5
  45. package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
  46. package/lib/commonjs/components/styled/MessageImage.js +49 -10
  47. package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
  48. package/lib/commonjs/components/styled/NewMessageLabel.js +8 -6
  49. package/lib/commonjs/components/styled/NewMessageLabel.js.map +1 -1
  50. package/lib/commonjs/components/styled/SendInput.js +53 -29
  51. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  52. package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js +14 -4
  53. package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
  54. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +7 -2
  55. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  56. package/lib/commonjs/components/styled/UnsupportedType.js +5 -1
  57. package/lib/commonjs/components/styled/UnsupportedType.js.map +1 -1
  58. package/lib/commonjs/components/styled/VideoMessage.js +60 -22
  59. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  60. package/lib/commonjs/context/MessageNotificationContext.js +7 -7
  61. package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
  62. package/lib/commonjs/context/xmppProvider.js +315 -34
  63. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  64. package/lib/commonjs/helpers/chatAutoEnterer.js +2 -7
  65. package/lib/commonjs/helpers/chatAutoEnterer.js.map +1 -1
  66. package/lib/commonjs/helpers/historyPreloadScheduler.js +4 -1
  67. package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
  68. package/lib/commonjs/helpers/insertMessageWithDelimiter.js +15 -5
  69. package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
  70. package/lib/commonjs/helpers/keyboardLayout.js +18 -0
  71. package/lib/commonjs/helpers/keyboardLayout.js.map +1 -0
  72. package/lib/commonjs/helpers/mediaDimensions.js +51 -0
  73. package/lib/commonjs/helpers/mediaDimensions.js.map +1 -0
  74. package/lib/commonjs/helpers/mimeToExtension.js +131 -0
  75. package/lib/commonjs/helpers/mimeToExtension.js.map +1 -0
  76. package/lib/commonjs/helpers/normalizeRoomJid.js +20 -0
  77. package/lib/commonjs/helpers/normalizeRoomJid.js.map +1 -0
  78. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +73 -1
  79. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  80. package/lib/commonjs/hooks/useChatRoomFocus.js +87 -0
  81. package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -0
  82. package/lib/commonjs/hooks/useChatWrapperInit.js +22 -10
  83. package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
  84. package/lib/commonjs/hooks/useEventHandlers.js +9 -1
  85. package/lib/commonjs/hooks/useEventHandlers.js.map +1 -1
  86. package/lib/commonjs/hooks/useHeapSender.js +1 -1
  87. package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
  88. package/lib/commonjs/hooks/useLogout.js +3 -3
  89. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  90. package/lib/commonjs/hooks/useMessageHeapState.js +6 -2
  91. package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
  92. package/lib/commonjs/hooks/usePushNotifications.js +6 -2
  93. package/lib/commonjs/hooks/usePushNotifications.js.map +1 -1
  94. package/lib/commonjs/hooks/useRoomState.js +2 -0
  95. package/lib/commonjs/hooks/useRoomState.js.map +1 -1
  96. package/lib/commonjs/hooks/useSendMessage.js +249 -14
  97. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  98. package/lib/commonjs/hooks/useUnreadMessagesCounter.js +12 -14
  99. package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
  100. package/lib/commonjs/main.js +7 -0
  101. package/lib/commonjs/main.js.map +1 -1
  102. package/lib/commonjs/networking/api-requests/auth.api.js +74 -1
  103. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  104. package/lib/commonjs/networking/apiClient.js +2 -1
  105. package/lib/commonjs/networking/apiClient.js.map +1 -1
  106. package/lib/commonjs/networking/outboundQueue.js +92 -0
  107. package/lib/commonjs/networking/outboundQueue.js.map +1 -0
  108. package/lib/commonjs/networking/xmpp/createTimeoutPromise.xmpp.js +4 -1
  109. package/lib/commonjs/networking/xmpp/createTimeoutPromise.xmpp.js.map +1 -1
  110. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js +7 -8
  111. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  112. package/lib/commonjs/networking/xmpp/getRoomsPaged.xmpp.js +26 -3
  113. package/lib/commonjs/networking/xmpp/getRoomsPaged.xmpp.js.map +1 -1
  114. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +26 -8
  115. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  116. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +2 -1
  117. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  118. package/lib/commonjs/networking/xmppClient.js +371 -26
  119. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  120. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +22 -6
  121. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  122. package/lib/commonjs/roomStore/roomHeapSlice.js +26 -8
  123. package/lib/commonjs/roomStore/roomHeapSlice.js.map +1 -1
  124. package/lib/commonjs/roomStore/roomsSlice.js +157 -23
  125. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  126. package/lib/commonjs/utils/installPromiseRejectionTracker.js +83 -0
  127. package/lib/commonjs/utils/installPromiseRejectionTracker.js.map +1 -0
  128. package/lib/commonjs/utils/resendMessage.js +1 -1
  129. package/lib/commonjs/utils/resendMessage.js.map +1 -1
  130. package/lib/module/assets/icons.js +5 -1
  131. package/lib/module/assets/icons.js.map +1 -1
  132. package/lib/module/components/ContextMenu/ContextMenuComponents.js +11 -5
  133. package/lib/module/components/ContextMenu/ContextMenuComponents.js.map +1 -1
  134. package/lib/module/components/MainComponents/ChatHeader.js +7 -1
  135. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  136. package/lib/module/components/MainComponents/ChatRoom.js +67 -35
  137. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  138. package/lib/module/components/MainComponents/ChatWrapper.js +59 -14
  139. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  140. package/lib/module/components/MainComponents/MediaMessage.js +15 -7
  141. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  142. package/lib/module/components/MainComponents/MessageContainer.js +2 -2
  143. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  144. package/lib/module/components/MainComponents/MessageList.js +176 -31
  145. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  146. package/lib/module/components/MainComponents/ReduxWrapper.js +18 -8
  147. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  148. package/lib/module/components/MainComponents/SystemMessage.js +33 -21
  149. package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
  150. package/lib/module/components/MessageBubble/Message.js +118 -20
  151. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  152. package/lib/module/components/MessageBubble/MessageInteractions.js +84 -24
  153. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  154. package/lib/module/components/Modals/AttachSheet/AttachSheet.js +15 -3
  155. package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  156. package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js +99 -0
  157. package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -0
  158. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +179 -42
  159. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  160. package/lib/module/components/Modals/FilePreviewModal/PdfView.js +31 -3
  161. package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  162. package/lib/module/components/Modals/Modal/Modal.js +5 -1
  163. package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
  164. package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js +80 -41
  165. package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
  166. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +3 -3
  167. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  168. package/lib/module/components/Modals/styledModalComponents.js +4 -9
  169. package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
  170. package/lib/module/components/styled/MediaFilePreview.js +116 -6
  171. package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
  172. package/lib/module/components/styled/MessageImage.js +51 -12
  173. package/lib/module/components/styled/MessageImage.js.map +1 -1
  174. package/lib/module/components/styled/NewMessageLabel.js +8 -6
  175. package/lib/module/components/styled/NewMessageLabel.js.map +1 -1
  176. package/lib/module/components/styled/SendInput.js +54 -30
  177. package/lib/module/components/styled/SendInput.js.map +1 -1
  178. package/lib/module/components/styled/StyledInputComponents/MediaComponents.js +14 -4
  179. package/lib/module/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
  180. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +7 -2
  181. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  182. package/lib/module/components/styled/UnsupportedType.js +5 -1
  183. package/lib/module/components/styled/UnsupportedType.js.map +1 -1
  184. package/lib/module/components/styled/VideoMessage.js +61 -23
  185. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  186. package/lib/module/context/MessageNotificationContext.js +7 -7
  187. package/lib/module/context/MessageNotificationContext.js.map +1 -1
  188. package/lib/module/context/xmppProvider.js +319 -37
  189. package/lib/module/context/xmppProvider.js.map +1 -1
  190. package/lib/module/helpers/chatAutoEnterer.js +2 -7
  191. package/lib/module/helpers/chatAutoEnterer.js.map +1 -1
  192. package/lib/module/helpers/historyPreloadScheduler.js +4 -1
  193. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  194. package/lib/module/helpers/insertMessageWithDelimiter.js +15 -5
  195. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  196. package/lib/module/helpers/keyboardLayout.js +12 -0
  197. package/lib/module/helpers/keyboardLayout.js.map +1 -0
  198. package/lib/module/helpers/mediaDimensions.js +46 -0
  199. package/lib/module/helpers/mediaDimensions.js.map +1 -0
  200. package/lib/module/helpers/mimeToExtension.js +124 -0
  201. package/lib/module/helpers/mimeToExtension.js.map +1 -0
  202. package/lib/module/helpers/normalizeRoomJid.js +15 -0
  203. package/lib/module/helpers/normalizeRoomJid.js.map +1 -0
  204. package/lib/module/helpers/resolveInitBeforeLoadUser.js +71 -0
  205. package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  206. package/lib/module/hooks/useChatRoomFocus.js +82 -0
  207. package/lib/module/hooks/useChatRoomFocus.js.map +1 -0
  208. package/lib/module/hooks/useChatWrapperInit.js +22 -10
  209. package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
  210. package/lib/module/hooks/useEventHandlers.js +9 -1
  211. package/lib/module/hooks/useEventHandlers.js.map +1 -1
  212. package/lib/module/hooks/useHeapSender.js +1 -1
  213. package/lib/module/hooks/useHeapSender.js.map +1 -1
  214. package/lib/module/hooks/useLogout.js +3 -3
  215. package/lib/module/hooks/useLogout.js.map +1 -1
  216. package/lib/module/hooks/useMessageHeapState.js +6 -2
  217. package/lib/module/hooks/useMessageHeapState.js.map +1 -1
  218. package/lib/module/hooks/usePushNotifications.js +6 -2
  219. package/lib/module/hooks/usePushNotifications.js.map +1 -1
  220. package/lib/module/hooks/useRoomState.js +2 -0
  221. package/lib/module/hooks/useRoomState.js.map +1 -1
  222. package/lib/module/hooks/useSendMessage.js +252 -17
  223. package/lib/module/hooks/useSendMessage.js.map +1 -1
  224. package/lib/module/hooks/useUnreadMessagesCounter.js +12 -14
  225. package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
  226. package/lib/module/main.js +1 -0
  227. package/lib/module/main.js.map +1 -1
  228. package/lib/module/networking/api-requests/auth.api.js +74 -2
  229. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  230. package/lib/module/networking/apiClient.js +2 -1
  231. package/lib/module/networking/apiClient.js.map +1 -1
  232. package/lib/module/networking/outboundQueue.js +84 -0
  233. package/lib/module/networking/outboundQueue.js.map +1 -0
  234. package/lib/module/networking/xmpp/createTimeoutPromise.xmpp.js +4 -1
  235. package/lib/module/networking/xmpp/createTimeoutPromise.xmpp.js.map +1 -1
  236. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js +7 -8
  237. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  238. package/lib/module/networking/xmpp/getRoomsPaged.xmpp.js +26 -3
  239. package/lib/module/networking/xmpp/getRoomsPaged.xmpp.js.map +1 -1
  240. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +26 -8
  241. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  242. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +2 -1
  243. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  244. package/lib/module/networking/xmppClient.js +371 -26
  245. package/lib/module/networking/xmppClient.js.map +1 -1
  246. package/lib/module/roomStore/Middleware/unreadMidlleware.js +22 -6
  247. package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  248. package/lib/module/roomStore/roomHeapSlice.js +24 -7
  249. package/lib/module/roomStore/roomHeapSlice.js.map +1 -1
  250. package/lib/module/roomStore/roomsSlice.js +154 -22
  251. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  252. package/lib/module/utils/installPromiseRejectionTracker.js +78 -0
  253. package/lib/module/utils/installPromiseRejectionTracker.js.map +1 -0
  254. package/lib/module/utils/resendMessage.js +1 -1
  255. package/lib/module/utils/resendMessage.js.map +1 -1
  256. package/lib/typescript/assets/icons.d.ts +8 -4
  257. package/lib/typescript/assets/icons.d.ts.map +1 -1
  258. package/lib/typescript/components/ContextMenu/ContextMenuComponents.d.ts.map +1 -1
  259. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  260. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  261. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  262. package/lib/typescript/components/MainComponents/MediaMessage.d.ts +1 -0
  263. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  264. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  265. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  266. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts +1 -0
  267. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  268. package/lib/typescript/components/MainComponents/SystemMessage.d.ts +0 -7
  269. package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
  270. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  271. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +4 -2
  272. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  273. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
  274. package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts +29 -0
  275. package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts.map +1 -0
  276. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +0 -1
  277. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  278. package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
  279. package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
  280. package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts +6 -0
  281. package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts.map +1 -1
  282. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  283. package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
  284. package/lib/typescript/components/styled/MediaFilePreview.d.ts.map +1 -1
  285. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  286. package/lib/typescript/components/styled/NewMessageLabel.d.ts +1 -5
  287. package/lib/typescript/components/styled/NewMessageLabel.d.ts.map +1 -1
  288. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  289. package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts +9 -1
  290. package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts.map +1 -1
  291. package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
  292. package/lib/typescript/components/styled/UnsupportedType.d.ts +1 -0
  293. package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
  294. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  295. package/lib/typescript/context/xmppProvider.d.ts +1 -0
  296. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  297. package/lib/typescript/helpers/chatAutoEnterer.d.ts.map +1 -1
  298. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  299. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  300. package/lib/typescript/helpers/keyboardLayout.d.ts +9 -0
  301. package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -0
  302. package/lib/typescript/helpers/mediaDimensions.d.ts +9 -0
  303. package/lib/typescript/helpers/mediaDimensions.d.ts.map +1 -0
  304. package/lib/typescript/helpers/mimeToExtension.d.ts +37 -0
  305. package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -0
  306. package/lib/typescript/helpers/normalizeRoomJid.d.ts +2 -0
  307. package/lib/typescript/helpers/normalizeRoomJid.d.ts.map +1 -0
  308. package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts +18 -0
  309. package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
  310. package/lib/typescript/hooks/useChatRoomFocus.d.ts +42 -0
  311. package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -0
  312. package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
  313. package/lib/typescript/hooks/useEventHandlers.d.ts +6 -0
  314. package/lib/typescript/hooks/useEventHandlers.d.ts.map +1 -1
  315. package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
  316. package/lib/typescript/hooks/useMessageHeapState.d.ts +2 -0
  317. package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
  318. package/lib/typescript/hooks/usePushNotifications.d.ts.map +1 -1
  319. package/lib/typescript/hooks/useRoomState.d.ts +1 -0
  320. package/lib/typescript/hooks/useRoomState.d.ts.map +1 -1
  321. package/lib/typescript/hooks/useSendMessage.d.ts +2 -1
  322. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  323. package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts.map +1 -1
  324. package/lib/typescript/main.d.ts +1 -0
  325. package/lib/typescript/main.d.ts.map +1 -1
  326. package/lib/typescript/networking/api-requests/auth.api.d.ts +3 -0
  327. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  328. package/lib/typescript/networking/apiClient.d.ts.map +1 -1
  329. package/lib/typescript/networking/outboundQueue.d.ts +57 -0
  330. package/lib/typescript/networking/outboundQueue.d.ts.map +1 -0
  331. package/lib/typescript/networking/xmpp/createTimeoutPromise.xmpp.d.ts.map +1 -1
  332. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts +1 -1
  333. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts.map +1 -1
  334. package/lib/typescript/networking/xmpp/getRoomsPaged.xmpp.d.ts +1 -1
  335. package/lib/typescript/networking/xmpp/getRoomsPaged.xmpp.d.ts.map +1 -1
  336. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  337. package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
  338. package/lib/typescript/networking/xmppClient.d.ts +58 -5
  339. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  340. package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
  341. package/lib/typescript/roomStore/roomHeapSlice.d.ts +22 -1
  342. package/lib/typescript/roomStore/roomHeapSlice.d.ts.map +1 -1
  343. package/lib/typescript/roomStore/roomsSlice.d.ts +8 -1
  344. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  345. package/lib/typescript/types/models/media.model.d.ts +1 -0
  346. package/lib/typescript/types/models/media.model.d.ts.map +1 -1
  347. package/lib/typescript/types/models/xmpp.model.d.ts +1 -1
  348. package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
  349. package/lib/typescript/types/types.d.ts +10 -0
  350. package/lib/typescript/types/types.d.ts.map +1 -1
  351. package/lib/typescript/utils/installPromiseRejectionTracker.d.ts +20 -0
  352. package/lib/typescript/utils/installPromiseRejectionTracker.d.ts.map +1 -0
  353. package/lib/typescript/utils/resendMessage.d.ts.map +1 -1
  354. package/package.json +18 -2
  355. package/src/assets/icons.tsx +23 -14
  356. package/src/components/ContextMenu/ContextMenuComponents.tsx +10 -5
  357. package/src/components/MainComponents/ChatHeader.tsx +5 -1
  358. package/src/components/MainComponents/ChatRoom.tsx +81 -61
  359. package/src/components/MainComponents/ChatWrapper.tsx +100 -21
  360. package/src/components/MainComponents/MediaMessage.tsx +18 -8
  361. package/src/components/MainComponents/MessageContainer.tsx +4 -2
  362. package/src/components/MainComponents/MessageList.tsx +185 -31
  363. package/src/components/MainComponents/ReduxWrapper.tsx +19 -9
  364. package/src/components/MainComponents/SystemMessage.tsx +38 -26
  365. package/src/components/MessageBubble/Message.tsx +110 -27
  366. package/src/components/MessageBubble/MessageInteractions.tsx +98 -29
  367. package/src/components/Modals/AttachSheet/AttachSheet.tsx +17 -3
  368. package/src/components/Modals/FilePreviewModal/DocumentViewer.tsx +93 -0
  369. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +182 -37
  370. package/src/components/Modals/FilePreviewModal/PdfView.tsx +32 -4
  371. package/src/components/Modals/Modal/Modal.tsx +4 -1
  372. package/src/components/Modals/ModalWrapper/ModalWrapper.tsx +77 -44
  373. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -15
  374. package/src/components/Modals/styledModalComponents.tsx +4 -9
  375. package/src/components/styled/MediaFilePreview.tsx +111 -5
  376. package/src/components/styled/MessageImage.tsx +58 -14
  377. package/src/components/styled/NewMessageLabel.tsx +8 -5
  378. package/src/components/styled/SendInput.tsx +67 -29
  379. package/src/components/styled/StyledInputComponents/MediaComponents.tsx +15 -5
  380. package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +7 -2
  381. package/src/components/styled/UnsupportedType.tsx +7 -1
  382. package/src/components/styled/VideoMessage.tsx +59 -18
  383. package/src/context/MessageNotificationContext.tsx +8 -8
  384. package/src/context/xmppProvider.tsx +337 -32
  385. package/src/helpers/chatAutoEnterer.ts +2 -8
  386. package/src/helpers/historyPreloadScheduler.ts +4 -1
  387. package/src/helpers/insertMessageWithDelimiter.ts +22 -15
  388. package/src/helpers/keyboardLayout.ts +18 -0
  389. package/src/helpers/mediaDimensions.ts +47 -0
  390. package/src/helpers/mimeToExtension.ts +135 -0
  391. package/src/helpers/normalizeRoomJid.ts +6 -0
  392. package/src/helpers/resolveInitBeforeLoadUser.ts +79 -0
  393. package/src/hooks/useChatRoomFocus.ts +95 -0
  394. package/src/hooks/useChatWrapperInit.ts +51 -46
  395. package/src/hooks/useEventHandlers.tsx +24 -1
  396. package/src/hooks/useHeapSender.tsx +2 -1
  397. package/src/hooks/useLogout.tsx +3 -3
  398. package/src/hooks/useMessageHeapState.tsx +6 -2
  399. package/src/hooks/usePushNotifications.ts +21 -8
  400. package/src/hooks/useRoomState.tsx +4 -0
  401. package/src/hooks/useSendMessage.tsx +333 -17
  402. package/src/hooks/useUnreadMessagesCounter.ts +13 -16
  403. package/src/main.ts +1 -0
  404. package/src/networking/api-requests/auth.api.ts +60 -2
  405. package/src/networking/apiClient.ts +2 -1
  406. package/src/networking/outboundQueue.ts +98 -0
  407. package/src/networking/xmpp/createTimeoutPromise.xmpp.ts +5 -1
  408. package/src/networking/xmpp/flushLastViewedToPrivateStore.ts +11 -13
  409. package/src/networking/xmpp/getRoomsPaged.xmpp.ts +27 -3
  410. package/src/networking/xmpp/presenceInRoom.xmpp.ts +24 -9
  411. package/src/networking/xmpp/sendTextMessage.xmpp.ts +2 -1
  412. package/src/networking/xmppClient.ts +399 -31
  413. package/src/roomStore/Middleware/unreadMidlleware.tsx +23 -5
  414. package/src/roomStore/roomHeapSlice.ts +47 -4
  415. package/src/roomStore/roomsSlice.ts +177 -27
  416. package/src/types/models/media.model.ts +3 -0
  417. package/src/types/models/xmpp.model.ts +2 -1
  418. package/src/types/types.ts +25 -0
  419. package/src/utils/installPromiseRejectionTracker.ts +91 -0
  420. package/src/utils/resendMessage.ts +2 -1
@@ -1,16 +1,18 @@
1
1
  "use strict";
2
2
 
3
- import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
3
+ import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { AppState, DeviceEventEmitter } from 'react-native';
5
+ import NetInfo from '@react-native-community/netinfo';
5
6
  import XmppClient from '../networking/xmppClient';
6
- import { buildXmppClientKey, getReusableXmppClientByKey, isXmppClientReusable, setGlobalXmppClient, withXmppClientInitLock } from '../utils/clientRegistry';
7
- import { applyResolvedUserToStore, resolveInitBeforeLoadUser } from '../helpers/resolveInitBeforeLoadUser';
7
+ import { refreshTokens } from '../roomStore/chatSettingsSlice';
8
+ import { buildXmppClientKey, getGlobalXmppClient, getReusableXmppClientByKey, isXmppClientReusable, setGlobalXmppClient, withXmppClientInitLock } from '../utils/clientRegistry';
9
+ import { applyResolvedUserToStore, refreshUserCredentialsForXmpp, resolveInitBeforeLoadUser } from '../helpers/resolveInitBeforeLoadUser';
8
10
  import { ensureScopedChatCache } from '../helpers/ensureScopedChatCache';
9
11
  import { getRooms as prefetchRoomsViaRest } from '../networking/api-requests/rooms.api';
10
12
  import { allRoomPresences } from '../networking/xmpp/allRoomPresences.xmpp';
11
13
  import { store } from '../roomStore';
12
14
  import { logout, setStoreClient } from '../roomStore/chatSettingsSlice';
13
- import { setLogoutState } from '../roomStore/roomsSlice';
15
+ import { setLogoutState, setVisibleRoom, clearVisibleRoom, setLastViewedTimestamp, deleteRoomMessage } from '../roomStore/roomsSlice';
14
16
  import { runHistoryPreloadScheduler } from '../helpers/historyPreloadScheduler';
15
17
  import { asyncLocalStorage } from '../hooks/useLocalStorage';
16
18
  import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
@@ -21,11 +23,11 @@ const XmppContext = /*#__PURE__*/createContext(null);
21
23
  const LOGOUT_EVENT = 'ethora-xmpp-logout';
22
24
  export const XmppProvider = ({
23
25
  children,
24
- config
26
+ config,
27
+ isVisible
25
28
  }) => {
26
29
  const [client, setClient] = useState(null);
27
30
  const [providerBootstrapStatus, setProviderBootstrapStatus] = useState('idle');
28
- const [reconnectAttempts, setReconnectAttempts] = useState(0);
29
31
 
30
32
  // Track which "init mode" this provider runs in. When config.initBeforeLoad
31
33
  // is true, the provider owns bootstrap and ChatWrapper just waits.
@@ -33,6 +35,65 @@ export const XmppProvider = ({
33
35
  const lastCredsRef = useRef(null);
34
36
  const completedBootstrapKeyRef = useRef('');
35
37
  const inflightBootstrapKeyRef = useRef('');
38
+
39
+ // Callback XmppClient uses to fetch fresh credentials after a SASL
40
+ // `not-authorized` (typically JWT expiry during idle, bug #17).
41
+ // Always installed — the underlying `refreshUserCredentialsForXmpp`
42
+ // picks the right path based on config:
43
+ // - `jwtLogin` → re-exchange JWT via `/users/client`
44
+ // - `userLogin` / `customLogin` / store / persisted → `/users/my`
45
+ // with REST refresh chain (handles 401 → refresh → retry)
46
+ // Returns last-known cached creds if nothing usable is available so
47
+ // the XmppClient at least doesn't crash on `undefined.password`.
48
+ const credentialsProvider = useMemo(() => {
49
+ return async () => {
50
+ // 1. Consumer-supplied REST refresh (when wired). This runs
51
+ // before the SDK's own refresh chain so non-Ethora backends
52
+ // can keep auth state in sync with their own token endpoint.
53
+ const customRefresh = config?.refreshTokens?.refreshFunction;
54
+ if (customRefresh) {
55
+ try {
56
+ const result = await customRefresh();
57
+ if (result?.accessToken) {
58
+ store.dispatch(refreshTokens({
59
+ token: result.accessToken,
60
+ refreshToken: result.refreshToken || ''
61
+ }));
62
+ }
63
+ } catch (err) {
64
+ devPushLog('warn', 'XMPP creds refresh: customRefresh failed', err);
65
+ }
66
+ }
67
+
68
+ // 2. Re-mint XMPP creds via the right priority chain for the
69
+ // current auth mode. This call ALWAYS hydrates (unlike
70
+ // `resolveInitBeforeLoadUser` which short-circuits when a
71
+ // cached user already has xmppCredentials).
72
+ const fresh = await refreshUserCredentialsForXmpp(config).catch(err => {
73
+ devPushLog('warn', 'XMPP creds refresh: full chain failed', err);
74
+ return null;
75
+ });
76
+ if (fresh) {
77
+ applyResolvedUserToStore(fresh);
78
+ return {
79
+ username: fresh.xmppUsername || fresh.defaultWallet?.walletAddress || '',
80
+ password: fresh.xmppPassword || ''
81
+ };
82
+ }
83
+
84
+ // 3. Last-resort: return the cached creds so reconnect() can
85
+ // still attempt a connection. If the original failure was
86
+ // a stale JWT this will fail again and the user has to
87
+ // re-mount the chat — but at least we don't break the
88
+ // transient-network-blip case where the cached creds are
89
+ // still valid.
90
+ const u = store.getState().chatSettingStore.user;
91
+ return {
92
+ username: u?.xmppUsername || u?.defaultWallet?.walletAddress || '',
93
+ password: u?.xmppPassword || ''
94
+ };
95
+ };
96
+ }, [config?.jwtLogin?.enabled, config?.jwtLogin?.token, config?.refreshTokens?.refreshFunction, config?.userLogin?.enabled, config?.customLogin?.enabled, config?.initBeforeLoadAuth?.myEndpoint]);
36
97
  const initializeClient = useCallback(async (username, password, xmppSettings) => {
37
98
  const settings = xmppSettings || config?.xmppSettings;
38
99
  const key = buildXmppClientKey(username, settings);
@@ -62,7 +123,19 @@ export const XmppProvider = ({
62
123
  // 3. Otherwise create a new client under the init lock to dedup
63
124
  // concurrent calls for the same key.
64
125
  const created = await withXmppClientInitLock(key, async () => {
126
+ const prevGlobal = getGlobalXmppClient();
127
+ if (prevGlobal) {
128
+ try {
129
+ await prevGlobal.close();
130
+ } catch {}
131
+ }
65
132
  const newClient = new XmppClient(username, password, settings);
133
+ // Wire up the credentialsProvider so SASL `not-authorized`
134
+ // after idle triggers a refresh chain (jwtLogin →
135
+ // /users/client; userLogin/customLogin/store → /users/my +
136
+ // REST refresh) instead of looping forever with stale creds.
137
+ // Bug #17 — full coverage in 26.5.6.
138
+ newClient.setCredentialsProvider(credentialsProvider);
66
139
  setGlobalXmppClient(newClient, key);
67
140
  await newClient.waitForOnline().catch(err => {
68
141
  console.error('Error waiting for xmpp online:', err);
@@ -70,15 +143,36 @@ export const XmppProvider = ({
70
143
  });
71
144
  return newClient;
72
145
  });
146
+
147
+ // Reused clients (steps 1+2 above) also need the provider — config
148
+ // may have changed since the singleton was created.
149
+ created.setCredentialsProvider(credentialsProvider);
150
+
151
+ // Re-join MUC rooms on every 'online'. After a reconnect the new
152
+ // XMPP stream isn't a member of any room, so a sent message gets a
153
+ // local double-tick but never reaches the room (bug #21). Re-sending
154
+ // presence on reconnect fixes delivery. On the very first connect
155
+ // the room list isn't loaded yet so this joins nothing — the
156
+ // bootstrap's own allRoomPresences handles that pass.
157
+ created.setOnOnline(() => {
158
+ const underlying = created.client;
159
+ if (!underlying) {
160
+ return;
161
+ }
162
+ allRoomPresences(underlying).catch(e => devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e));
163
+ // Also refresh the private store so unread / lastViewed markers
164
+ // are accurate after a long reconnect — the MUC re-join above only
165
+ // restores delivery, not unread state. Idempotent on first connect.
166
+ created.getChatsPrivateStoreRequestStanza().catch(e => devPushLog('warn', 'reconnect: privateStore refresh failed', e));
167
+ });
73
168
  setClient(created);
74
169
  lastCredsRef.current = {
75
170
  username,
76
171
  password,
77
172
  settings
78
173
  };
79
- setReconnectAttempts(0);
80
174
  return created;
81
- }, [client, config?.xmppSettings]);
175
+ }, [client, config?.xmppSettings, credentialsProvider]);
82
176
 
83
177
  // -----------------------------------------------------------
84
178
  // initBeforeLoad — eager auth + xmpp connect at provider mount
@@ -90,6 +184,32 @@ export const XmppProvider = ({
90
184
  }
91
185
  const abortController = new AbortController();
92
186
  let cancelled = false;
187
+ // Auto-retry a TRANSIENT bootstrap failure a few times with backoff
188
+ // before surfacing the error modal — a flaky network at launch should
189
+ // self-heal, not dead-end the user on a Retry button. (Bad-creds
190
+ // failures resolve to null below and fail fast — they never reach the
191
+ // catch, so they aren't retried.)
192
+ const MAX_BOOTSTRAP_ATTEMPTS = 3;
193
+ let bootstrapAttempt = 0;
194
+ // Overall time budget: if we never reach 'ready' (a step hangs), abort
195
+ // the in-flight work and fail so the loader can't spin forever.
196
+ const BOOTSTRAP_BUDGET_MS = 45000;
197
+ let reachedReady = false;
198
+ let budgetTimer = setTimeout(() => {
199
+ if (cancelled || reachedReady) {
200
+ return;
201
+ }
202
+ devPushLog('warn', 'initBeforeLoad: time budget exceeded → failed');
203
+ abortController.abort();
204
+ inflightBootstrapKeyRef.current = '';
205
+ setProviderBootstrapStatus('failed');
206
+ }, BOOTSTRAP_BUDGET_MS);
207
+ const clearBudget = () => {
208
+ if (budgetTimer) {
209
+ clearTimeout(budgetTimer);
210
+ budgetTimer = null;
211
+ }
212
+ };
93
213
  const run = async () => {
94
214
  // Stable bootstrap key — re-run only when these change.
95
215
  const explicitUser = config?.userLogin?.enabled ? config?.userLogin?.user : null;
@@ -183,6 +303,8 @@ export const XmppProvider = ({
183
303
  store.dispatch(setStoreClient(c));
184
304
  completedBootstrapKeyRef.current = key;
185
305
  inflightBootstrapKeyRef.current = '';
306
+ reachedReady = true;
307
+ clearBudget();
186
308
  setProviderBootstrapStatus('ready');
187
309
  devPushLog('rn', 'initBeforeLoad: READY');
188
310
 
@@ -200,21 +322,40 @@ export const XmppProvider = ({
200
322
  roomLimit: qos?.preloadTopKRooms
201
323
  }).catch(err => console.warn('History preload scheduler failed', err));
202
324
  } catch (error) {
203
- if (cancelled) {
325
+ if (cancelled || abortController.signal.aborted) {
326
+ return;
327
+ }
328
+ bootstrapAttempt += 1;
329
+ // Throws here are transient (network / XMPP connect). A bad-creds
330
+ // failure resolves to null above and fails fast without throwing,
331
+ // so it never reaches this catch. Retry with backoff before the
332
+ // modal; release the in-flight key so the recursive run() isn't
333
+ // short-circuited by its own guard.
334
+ if (bootstrapAttempt < MAX_BOOTSTRAP_ATTEMPTS) {
335
+ const backoff = Math.min(8000, 1000 * 2 ** (bootstrapAttempt - 1));
336
+ devPushLog('rn', `initBeforeLoad: attempt ${bootstrapAttempt} failed (${error?.message}); retrying in ${backoff}ms`);
337
+ inflightBootstrapKeyRef.current = '';
338
+ setTimeout(() => {
339
+ if (!cancelled && !abortController.signal.aborted) {
340
+ run();
341
+ }
342
+ }, backoff);
204
343
  return;
205
344
  }
206
- devPushLog('error', 'initBeforeLoad: bootstrap threw', {
345
+ devPushLog('error', 'initBeforeLoad: bootstrap threw (giving up)', {
207
346
  message: error?.message,
208
347
  status: error?.response?.status,
209
348
  data: error?.response?.data
210
349
  });
211
350
  inflightBootstrapKeyRef.current = '';
351
+ clearBudget();
212
352
  setProviderBootstrapStatus('failed');
213
353
  }
214
354
  };
215
355
  run();
216
356
  return () => {
217
357
  cancelled = true;
358
+ clearBudget();
218
359
  abortController.abort();
219
360
  // Re-running this effect (deps changed or unmount) must release the
220
361
  // in-flight bootstrap key so the next render isn't permanently
@@ -233,34 +374,34 @@ export const XmppProvider = ({
233
374
  }, [config?.initBeforeLoad, config?.appId, config?.baseUrl, config?.userLogin?.enabled, config?.userLogin?.user?.defaultWallet?.walletAddress, config?.userLogin?.user?.xmppUsername, config?.userLogin?.user?.token, config?.jwtLogin?.enabled, config?.jwtLogin?.token, config?.xmppSettings?.devServer]);
234
375
 
235
376
  // -----------------------------------------------------------
236
- // Reconnect / reinit on disconnect
377
+ // Reconnect watchdog. The client now owns reconnection (onDisconnect →
378
+ // scheduleReconnect with uncapped, clamped backoff; a connect 'error'
379
+ // reschedules too). This is the single provider-side safety net for the
380
+ // states the event-driven triggers miss: a stuck 'connecting', a connect
381
+ // 'error', or a server-side outage where NetInfo never reported the
382
+ // device offline. While foregrounded, if we're not provably online and
383
+ // not suppressed, force a reconnect (debounced inside forceReconnect).
384
+ //
385
+ // Replaces the old status-keyed reconnect effect, which keyed on
386
+ // `client.status` — a mutated class field React does NOT track — so on a
387
+ // silent socket drop it frequently never re-ran (and its 3-attempts-then-
388
+ // full-reinit path was effectively dead).
237
389
  // -----------------------------------------------------------
238
390
  useEffect(() => {
239
391
  if (!client) {
240
392
  return;
241
393
  }
242
- if (client.status !== 'offline') {
243
- return;
244
- }
245
- if (reconnectAttempts < 3) {
246
- console.log(`xmpp reconnect attempt ${reconnectAttempts + 1}`);
247
- client.scheduleReconnect();
248
- setReconnectAttempts(prev => prev + 1);
249
- return;
250
- }
251
-
252
- // After 3 failed reconnects, drop the client and re-init from scratch.
253
- if (lastCredsRef.current) {
254
- const {
255
- username,
256
- password,
257
- settings
258
- } = lastCredsRef.current;
259
- setGlobalXmppClient(null);
260
- setClient(null);
261
- initializeClient(username, password, settings).catch(err => console.error('Full reinit failed:', err));
262
- }
263
- }, [client, client?.status, reconnectAttempts, initializeClient]);
394
+ const id = setInterval(() => {
395
+ if (AppState.currentState !== 'active') {
396
+ return;
397
+ }
398
+ if (client.status !== 'online' && !client.suppressReconnect) {
399
+ devPushLog('rn', `watchdog: client ${client.status} → forceReconnect`);
400
+ client.forceReconnect();
401
+ }
402
+ }, 30000);
403
+ return () => clearInterval(id);
404
+ }, [client]);
264
405
 
265
406
  // -----------------------------------------------------------
266
407
  // AppState → background: flush lastViewedTimestamp into the
@@ -275,26 +416,158 @@ export const XmppProvider = ({
275
416
  // entry, or when this build has `disableLastRead`.
276
417
  // -----------------------------------------------------------
277
418
  useEffect(() => {
419
+ // Remembers the room that was visible when we backgrounded so it can
420
+ // be re-marked visible on return. Lives in the effect closure (one per
421
+ // client) — persists across the listener's many invocations.
422
+ let visibleBeforeBackground = null;
278
423
  const sub = AppState.addEventListener('change', next => {
424
+ const c = client;
279
425
  if (next === 'active') {
426
+ // Returned to foreground. If the socket died while backgrounded
427
+ // (iOS suspends the WebSocket; long background kills it), the
428
+ // status may still read 'online' until xmpp.js notices the dead
429
+ // TCP — which can take a full timeout. Force an immediate
430
+ // reconnect when we're not provably online so cached UI gets
431
+ // live again fast instead of "100 years".
432
+ // Only force a reconnect from a genuinely dead state. Don't
433
+ // interrupt an in-progress 'connecting' (iOS delivers spurious
434
+ // inactive→active flaps for control-center / notifications /
435
+ // biometric prompts that would otherwise restart a healthy
436
+ // connect).
437
+ if (c && (c.status === 'offline' || c.status === 'error')) {
438
+ devPushLog('rn', `AppState active: client ${c.status} → forceReconnect`);
439
+ c.forceReconnect();
440
+ }
441
+ // Re-mark the previously-open room visible so its unread clears
442
+ // now that the user is looking again. We restore ONLY what was
443
+ // visible at background time, so a chat the consumer had already
444
+ // blurred (e.g. on a non-chat tab/route) correctly stays cleared.
445
+ if (visibleBeforeBackground) {
446
+ store.dispatch(setVisibleRoom({
447
+ roomJID: visibleBeforeBackground
448
+ }));
449
+ visibleBeforeBackground = null;
450
+ }
280
451
  return;
281
452
  }
282
- const c = client;
453
+ // Going to background/inactive (sleep / app switcher / tray):
283
454
  if (!c) {
284
455
  return;
285
456
  }
286
457
  const state = store.getState();
287
458
  const rooms = state.rooms?.rooms;
288
- const activeRoomJID = state.rooms?.activeRoomJID || null;
459
+ const visibleRoomJID = state.rooms?.visibleRoomJID || null;
460
+ // Mark the open room "not visible" while backgrounded so messages
461
+ // that arrive (or MAM-replay on reconnect) count as unread instead
462
+ // of being silently treated as read — the "mounted == visible ==
463
+ // read" gap. Stamp lastViewed=now as the read baseline, clear
464
+ // visibility, then flush that marker to the server private store.
465
+ // Restored on the next 'active' transition above. Handled here in
466
+ // the provider so consumers using the component as a package get
467
+ // correct unread without reaching into the chat store themselves.
468
+ visibleBeforeBackground = visibleRoomJID;
469
+ if (visibleRoomJID) {
470
+ store.dispatch(setLastViewedTimestamp({
471
+ chatJID: visibleRoomJID,
472
+ timestamp: Date.now()
473
+ }));
474
+ // Drop the "New messages" divider for the room we're leaving so it
475
+ // doesn't linger when the user comes back (mirrors ChatRoom's
476
+ // unmount cleanup, which never runs while the pane stays mounted).
477
+ store.dispatch(deleteRoomMessage({
478
+ roomJID: visibleRoomJID,
479
+ messageId: 'delimiter-new'
480
+ }));
481
+ store.dispatch(clearVisibleRoom());
482
+ }
289
483
  // Fire-and-forget — we're going to the background and don't
290
484
  // care about the resolution path.
291
485
  c.flushLastViewedToPrivateStoreStanza(rooms, {
292
- activeRoomJID
486
+ visibleRoomJID
293
487
  }).catch(() => {});
294
488
  });
295
489
  return () => sub.remove();
296
490
  }, [client]);
297
491
 
492
+ // -----------------------------------------------------------
493
+ // Consumer visibility signal (`isVisible` prop). For hosts that keep
494
+ // <Chat> MOUNTED while hidden (tab/route navigators — so the XMPP
495
+ // connection survives tab switches), ChatRoom's mount/unmount can't tell
496
+ // "shown" from "hidden", so the unread middleware would keep the open
497
+ // room's badge at 0 and messages arriving while you're elsewhere look
498
+ // already-read. When the host passes `isVisible`, mirror the AppState
499
+ // background/foreground handling: hidden → stamp lastViewed=now + clear
500
+ // room visibility (so later messages count) + flush; shown → restore
501
+ // visibility for the open room. Doing it here means consumers never
502
+ // touch the chat store themselves. (Undefined = host unmounts on hide,
503
+ // nothing to do.)
504
+ // -----------------------------------------------------------
505
+ useEffect(() => {
506
+ if (typeof isVisible !== 'boolean') {
507
+ return;
508
+ }
509
+ const state = store.getState();
510
+ const rooms = state.rooms?.rooms;
511
+ const activeRoomJID = state.rooms?.activeRoomJID || null;
512
+ if (isVisible) {
513
+ if (activeRoomJID) {
514
+ store.dispatch(setVisibleRoom({
515
+ roomJID: activeRoomJID
516
+ }));
517
+ }
518
+ } else {
519
+ if (activeRoomJID) {
520
+ store.dispatch(setLastViewedTimestamp({
521
+ chatJID: activeRoomJID,
522
+ timestamp: Date.now()
523
+ }));
524
+ // Drop the "New messages" divider so it's gone when the user
525
+ // returns to the chat (mirrors ChatRoom's unmount cleanup).
526
+ store.dispatch(deleteRoomMessage({
527
+ roomJID: activeRoomJID,
528
+ messageId: 'delimiter-new'
529
+ }));
530
+ }
531
+ store.dispatch(clearVisibleRoom());
532
+ if (client?.flushLastViewedToPrivateStoreStanza) {
533
+ client.flushLastViewedToPrivateStoreStanza(rooms, {
534
+ visibleRoomJID: activeRoomJID
535
+ }).catch(() => {});
536
+ }
537
+ }
538
+ }, [isVisible, client]);
539
+
540
+ // -----------------------------------------------------------
541
+ // NetInfo → proactive reconnect on network restore. Without this the
542
+ // only reconnect trigger is xmpp.js noticing the socket is dead, which
543
+ // on a Wi-Fi/cellular drop can hang on the TCP timeout for tens of
544
+ // seconds. NetInfo tells us the instant connectivity returns so we can
545
+ // force a reconnect immediately (and reset the backoff budget).
546
+ // -----------------------------------------------------------
547
+ useEffect(() => {
548
+ if (!client) {
549
+ return;
550
+ }
551
+ const unsub = NetInfo.addEventListener(state => {
552
+ // Guard against undefined/partial state (jest mock, early emit).
553
+ const reachable = !!state?.isConnected && state?.isInternetReachable !== false;
554
+ if (!reachable) {
555
+ return;
556
+ }
557
+ // Reachable. If we're in a dead state, kick a reconnect — do NOT
558
+ // require a prior offline→online transition (a missed/coalesced
559
+ // offline event otherwise left us stuck offline forever). Skip
560
+ // 'connecting' so we don't interrupt an in-progress connect; the
561
+ // watchdog covers a stuck 'connecting'. forceReconnect() debounces
562
+ // bursts and resets the backoff itself.
563
+ if (client.status === 'offline' || client.status === 'error') {
564
+ devPushLog('rn', `NetInfo: reachable & client ${client.status} → forceReconnect`);
565
+ client.forceReconnect();
566
+ }
567
+ });
568
+ return () => unsub();
569
+ }, [client]);
570
+
298
571
  // -----------------------------------------------------------
299
572
  // Retry-bootstrap listener — fired by ChatWrapper's error modal so
300
573
  // a transient failure (bad endpoint, server hiccup, etc.) can be
@@ -327,7 +600,6 @@ export const XmppProvider = ({
327
600
  setClient(null);
328
601
  completedBootstrapKeyRef.current = '';
329
602
  inflightBootstrapKeyRef.current = '';
330
- setReconnectAttempts(0);
331
603
  setProviderBootstrapStatus('idle');
332
604
  await clearPersistedState();
333
605
  });
@@ -349,6 +621,16 @@ export const useXmppClient = () => {
349
621
  if (!context) {
350
622
  throw new Error('useXmppClient must be used within an XmppProvider');
351
623
  }
624
+ if (!context.client) {
625
+ const candidates = [getGlobalXmppClient(), store.getState()?.chatSettingStore?.client];
626
+ const live = candidates.find(c => c && c.status === 'online');
627
+ if (live) {
628
+ return {
629
+ ...context,
630
+ client: live
631
+ };
632
+ }
633
+ }
352
634
  return context;
353
635
  };
354
636
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useRef","useState","AppState","DeviceEventEmitter","XmppClient","buildXmppClientKey","getReusableXmppClientByKey","isXmppClientReusable","setGlobalXmppClient","withXmppClientInitLock","applyResolvedUserToStore","resolveInitBeforeLoadUser","ensureScopedChatCache","getRooms","prefetchRoomsViaRest","allRoomPresences","store","logout","setStoreClient","setLogoutState","runHistoryPreloadScheduler","asyncLocalStorage","localStorageConstants","clearPersistedState","pushLog","devPushLog","jsx","_jsx","XmppContext","LOGOUT_EVENT","XmppProvider","children","config","client","setClient","providerBootstrapStatus","setProviderBootstrapStatus","reconnectAttempts","setReconnectAttempts","initMode","initBeforeLoad","lastCredsRef","completedBootstrapKeyRef","inflightBootstrapKeyRef","initializeClient","username","password","xmppSettings","settings","key","reusable","current","created","newClient","waitForOnline","catch","err","console","error","abortController","AbortController","cancelled","run","explicitUser","userLogin","enabled","user","appId","baseUrl","defaultWallet","walletAddress","xmppUsername","token","jwtLogin","devServer","join","mode","customLogin","clearStoreBeforeInit","dispatch","ETHORA_USER","remove","undefined","resolved","signal","xmppPassword","hasResolved","xmppPasswordPresent","restRoomsPromise","c","getRoomsStanza","e","getChatsPrivateStoreRequestStanza","roomCount","Object","keys","getState","rooms","length","qos","historyQoS","activeRoomJID","defaultRoomJids","defaultRooms","map","r","jid","filter","Boolean","selectedRoomJid","concurrency","stagedPreloadConcurrency","pageSize","stagedPreloadFirstPassSize","roomLimit","preloadTopKRooms","warn","message","status","response","data","abort","log","scheduleReconnect","prev","sub","addEventListener","next","state","flushLastViewedToPrivateStoreStanza","addListener","disconnect","suppressReconnect","Provider","value","useXmppClient","context","Error","emitXmppLogout","emit"],"sourceRoot":"../../../src","sources":["context/xmppProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAEVC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;AAC3D,OAAOC,UAAU,MAAM,0BAA0B;AAOjD,SACEC,kBAAkB,EAClBC,0BAA0B,EAC1BC,oBAAoB,EACpBC,mBAAmB,EACnBC,sBAAsB,QACjB,yBAAyB;AAChC,SACEC,wBAAwB,EACxBC,yBAAyB,QACpB,sCAAsC;AAC7C,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,QAAQ,IAAIC,oBAAoB,QAAQ,sCAAsC;AACvF,SAASC,gBAAgB,QAAQ,0CAA0C;AAC3E,SAASC,KAAK,QAAQ,cAAc;AACpC,SAASC,MAAM,EAAEC,cAAc,QAAQ,gCAAgC;AACvE,SAASC,cAAc,QAAQ,yBAAyB;AACxD,SAASC,0BAA0B,QAAQ,oCAAoC;AAC/E,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,qBAAqB,QAAQ,oCAAoC;AAC1E,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,OAAO,IAAIC,UAAU,QAAQ,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAkB3D,MAAMC,WAAW,gBAAGhC,aAAa,CAAyB,IAAI,CAAC;AAO/D,MAAMiC,YAAY,GAAG,oBAAoB;AAEzC,OAAO,MAAMC,YAAyC,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAO,CAAC,KAAK;EACjF,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGjC,QAAQ,CAAoB,IAAI,CAAC;EAC7D,MAAM,CAACkC,uBAAuB,EAAEC,0BAA0B,CAAC,GACzDnC,QAAQ,CAA0B,MAAM,CAAC;EAC3C,MAAM,CAACoC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGrC,QAAQ,CAAC,CAAC,CAAC;;EAE7D;EACA;EACA,MAAMsC,QAA6B,GAAGP,MAAM,EAAEQ,cAAc,GAAG,UAAU,GAAG,MAAM;EAElF,MAAMC,YAAY,GAAGzC,MAAM,CAAkF,IAAI,CAAC;EAClH,MAAM0C,wBAAwB,GAAG1C,MAAM,CAAS,EAAE,CAAC;EACnD,MAAM2C,uBAAuB,GAAG3C,MAAM,CAAS,EAAE,CAAC;EAElD,MAAM4C,gBAAgB,GAAG/C,WAAW,CAClC,OACEgD,QAAgB,EAChBC,QAAgB,EAChBC,YAAoC,KACZ;IACxB,MAAMC,QAAQ,GAAGD,YAAY,IAAIf,MAAM,EAAEe,YAAY;IACrD,MAAME,GAAG,GAAG5C,kBAAkB,CAACwC,QAAQ,EAAEG,QAAQ,CAAC;;IAElD;IACA,MAAME,QAAQ,GAAG5C,0BAA0B,CAAC2C,GAAG,CAAC;IAChD,IAAIC,QAAQ,EAAE;MACZhB,SAAS,CAACgB,QAAQ,CAAC;MACnBT,YAAY,CAACU,OAAO,GAAG;QAAEN,QAAQ;QAAEC,QAAQ;QAAEE;MAAS,CAAC;MACvD,OAAOE,QAAQ;IACjB;;IAEA;IACA,IAAIjB,MAAM,IAAI1B,oBAAoB,CAAC0B,MAAM,CAAC,EAAE;MAC1CQ,YAAY,CAACU,OAAO,GAAG;QAAEN,QAAQ;QAAEC,QAAQ;QAAEE;MAAS,CAAC;MACvD,OAAOf,MAAM;IACf;;IAEA;IACA;IACA,MAAMmB,OAAO,GAAG,MAAM3C,sBAAsB,CAACwC,GAAG,EAAE,YAAY;MAC5D,MAAMI,SAAS,GAAG,IAAIjD,UAAU,CAACyC,QAAQ,EAAEC,QAAQ,EAAEE,QAAQ,CAAC;MAC9DxC,mBAAmB,CAAC6C,SAAS,EAAEJ,GAAG,CAAC;MACnC,MAAMI,SAAS,CAACC,aAAa,CAAC,CAAC,CAACC,KAAK,CAAEC,GAAG,IAAK;QAC7CC,OAAO,CAACC,KAAK,CAAC,gCAAgC,EAAEF,GAAG,CAAC;QACpD,MAAMA,GAAG;MACX,CAAC,CAAC;MACF,OAAOH,SAAS;IAClB,CAAC,CAAC;IAEFnB,SAAS,CAACkB,OAAO,CAAC;IAClBX,YAAY,CAACU,OAAO,GAAG;MAAEN,QAAQ;MAAEC,QAAQ;MAAEE;IAAS,CAAC;IACvDV,oBAAoB,CAAC,CAAC,CAAC;IACvB,OAAOc,OAAO;EAChB,CAAC,EACD,CAACnB,MAAM,EAAED,MAAM,EAAEe,YAAY,CAC/B,CAAC;;EAED;EACA;EACA;EACAhD,SAAS,CAAC,MAAM;IACd,IAAI,CAACiC,MAAM,EAAEQ,cAAc,EAAE;MAC3BJ,0BAA0B,CAAC,MAAM,CAAC;MAClC;IACF;IAEA,MAAMuB,eAAe,GAAG,IAAIC,eAAe,CAAC,CAAC;IAC7C,IAAIC,SAAS,GAAG,KAAK;IAErB,MAAMC,GAAG,GAAG,MAAAA,CAAA,KAAY;MACtB;MACA,MAAMC,YAAY,GAAG/B,MAAM,EAAEgC,SAAS,EAAEC,OAAO,GAAGjC,MAAM,EAAEgC,SAAS,EAAEE,IAAI,GAAG,IAAI;MAChF,MAAMjB,GAAG,GAAG,CACVjB,MAAM,EAAEmC,KAAK,IAAI,EAAE,EACnBnC,MAAM,EAAEoC,OAAO,IAAI,EAAE,EACrBL,YAAY,EAAEM,aAAa,EAAEC,aAAa,IAAI,EAAE,EAChDP,YAAY,EAAEQ,YAAY,IAAI,EAAE,EAChCR,YAAY,EAAES,KAAK,GAAG,GAAG,GAAG,GAAG,EAC/BxC,MAAM,EAAEyC,QAAQ,EAAER,OAAO,GAAGjC,MAAM,EAAEyC,QAAQ,EAAED,KAAK,IAAI,EAAE,GAAG,EAAE,EAC9DxC,MAAM,EAAEe,YAAY,EAAE2B,SAAS,IAAI,EAAE,CACtC,CAACC,IAAI,CAAC,GAAG,CAAC;MAEX,IAAIjC,wBAAwB,CAACS,OAAO,KAAKF,GAAG,EAAE;QAC5CxB,UAAU,CAAC,IAAI,EAAE,qDAAqD,CAAC;QACvE;MACF;MACA,IAAIkB,uBAAuB,CAACQ,OAAO,KAAKF,GAAG,EAAE;QAC3CxB,UAAU,CAAC,IAAI,EAAE,6CAA6C,CAAC;QAC/D;MACF;MACAkB,uBAAuB,CAACQ,OAAO,GAAGF,GAAG;MACrCb,0BAA0B,CAAC,SAAS,CAAC;MACrCX,UAAU,CAAC,IAAI,EAAE,yBAAyB,EAAE;QAC1C0C,KAAK,EAAEnC,MAAM,EAAEmC,KAAK;QACpBC,OAAO,EAAEpC,MAAM,EAAEoC,OAAO;QACxBQ,IAAI,EACF5C,MAAM,EAAEyC,QAAQ,EAAER,OAAO,GAAG,KAAK,GACjCjC,MAAM,EAAEgC,SAAS,EAAEC,OAAO,GAAG,WAAW,GACxCjC,MAAM,EAAE6C,WAAW,EAAEZ,OAAO,GAAG,aAAa,GAAG;MACnD,CAAC,CAAC;MAEF,IAAI;QACF,IAAIjC,MAAM,EAAE8C,oBAAoB,EAAE;UAChCrD,UAAU,CAAC,IAAI,EAAE,sCAAsC,CAAC;UACxDT,KAAK,CAAC+D,QAAQ,CAAC5D,cAAc,CAAC,CAAC,CAAC;UAChCH,KAAK,CAAC+D,QAAQ,CAAC9D,MAAM,CAAC,CAAC,CAAC;UACxB,MAAMI,iBAAiB,CAACC,qBAAqB,CAAC0D,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC1B,KAAK,CAAC,MAAM2B,SAAS,CAAC;QAC5F;QAEA,MAAMtE,qBAAqB,CAACoB,MAAM,CAAC;QACnCP,UAAU,CAAC,IAAI,EAAE,2CAA2C,CAAC;QAE7D,MAAM0D,QAAqB,GAAG,MAAMxE,yBAAyB,CAAC;UAC5DqB,MAAM;UACNoD,MAAM,EAAEzB,eAAe,CAACyB;QAC1B,CAAC,CAAC;QACF,IAAIvB,SAAS,EAAE;UAAC;QAAO;QAEvB,IAAI,CAACsB,QAAQ,IAAI,CAACA,QAAQ,CAACE,YAAY,IAAI,CAACF,QAAQ,CAACZ,YAAY,EAAE;UACjE9C,UAAU,CAAC,OAAO,EAAE,qCAAqC,EAAE;YACzD6D,WAAW,EAAE,CAAC,CAACH,QAAQ;YACvBZ,YAAY,EAAEY,QAAQ,EAAEZ,YAAY;YACpCgB,mBAAmB,EAAE,CAAC,CAACJ,QAAQ,EAAEE;UACnC,CAAC,CAAC;UACFjD,0BAA0B,CAAC,QAAQ,CAAC;UACpCO,uBAAuB,CAACQ,OAAO,GAAG,EAAE;UACpC;QACF;QAEA1B,UAAU,CAAC,IAAI,EAAE,kCAAkC0D,QAAQ,CAACZ,YAAY,GAAG,CAAC;QAC5E7D,wBAAwB,CAACyE,QAAQ,CAAC;;QAElC;QACA;QACA;QACA;QACA;QACA,MAAMK,gBAAgB,GAAG1E,oBAAoB,CAAC,CAAC,CAACyC,KAAK,CAAC,MAAM2B,SAAS,CAAC;QAEtE,MAAMO,CAAC,GAAG,MAAM7C,gBAAgB,CAC9BuC,QAAQ,CAACZ,YAAY,EACrBY,QAAQ,CAACE,YAAY,EACrBrD,MAAM,EAAEe,YACV,CAAC;QACD,IAAIc,SAAS,EAAE;UAAC;QAAO;QACvBpC,UAAU,CAAC,IAAI,EAAE,sDAAsD,CAAC;QAExE,MAAMgE,CAAC,CAACnC,aAAa,CAAC,CAAC;QACvB,IAAIO,SAAS,EAAE;UAAC;QAAO;QACvBpC,UAAU,CAAC,MAAM,EAAE,6BAA6B,CAAC;QAEjD,IAAI;UACF,MAAMgE,CAAC,CAACC,cAAc,CAAC,CAAC;UACxBjE,UAAU,CAAC,MAAM,EAAE,mCAAmC,CAAC;QACzD,CAAC,CAAC,OAAOkE,CAAC,EAAE;UACVlE,UAAU,CAAC,MAAM,EAAE,uCAAuC,EAAEkE,CAAC,CAAC;QAChE;QACA,IAAI;UACF,MAAMF,CAAC,CAACG,iCAAiC,CAAC,CAAC;UAC3CnE,UAAU,CAAC,MAAM,EAAE,iCAAiC,CAAC;QACvD,CAAC,CAAC,OAAOkE,CAAC,EAAE;UACVlE,UAAU,CAAC,MAAM,EAAE,qCAAqC,EAAEkE,CAAC,CAAC;QAC9D;QACA;QACA;QACA;QACA,IAAI;UACF,MAAMH,gBAAgB;QACxB,CAAC,CAAC,MAAM,CAAC;QACT,IAAI;UACF,MAAMK,SAAS,GAAGC,MAAM,CAACC,IAAI,CAAC/E,KAAK,CAACgF,QAAQ,CAAC,CAAC,CAACC,KAAK,CAACA,KAAK,IAAI,CAAC,CAAC,CAAC,CAACC,MAAM;UACxEzE,UAAU,CAAC,MAAM,EAAE,2BAA2BoE,SAAS,sBAAsB,CAAC;UAC9E,MAAM9E,gBAAgB,CAAE0E,CAAC,CAASxD,MAAM,CAAC;UACzCR,UAAU,CAAC,MAAM,EAAE,qCAAqC,CAAC;QAC3D,CAAC,CAAC,OAAOkE,CAAC,EAAE;UACVlE,UAAU,CAAC,MAAM,EAAE,yCAAyC,EAAEkE,CAAC,CAAC;QAClE;QAEA3E,KAAK,CAAC+D,QAAQ,CAAC7D,cAAc,CAACuE,CAAC,CAAC,CAAC;QACjC/C,wBAAwB,CAACS,OAAO,GAAGF,GAAG;QACtCN,uBAAuB,CAACQ,OAAO,GAAG,EAAE;QACpCf,0BAA0B,CAAC,OAAO,CAAC;QACnCX,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC;;QAEzC;QACA,MAAM0E,GAAG,GAAGnE,MAAM,EAAEoE,UAAU;QAC9B,MAAMC,aAAa,GAAGrF,KAAK,CAACgF,QAAQ,CAAC,CAAC,CAACC,KAAK,CAACI,aAAa,IAAI,IAAI;QAClE,MAAMC,eAAe,GAClBtE,MAAM,EAAEuE,YAAY,EAAYC,GAAG,CAAEC,CAAC,IACrC,OAAOA,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAGA,CAAC,EAAEC,GACjC,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,IAAI,EAAE;QACzBxF,0BAA0B,CAAC;UACzBa,MAAM,EAAEwD,CAAC;UACTL,MAAM,EAAEzB,eAAe,CAACyB,MAAM;UAC9ByB,eAAe,EAAER,aAAa;UAC9BC,eAAe;UACfQ,WAAW,EAAEX,GAAG,EAAEY,wBAAwB;UAC1CC,QAAQ,EAAEb,GAAG,EAAEc,0BAA0B;UACzCC,SAAS,EAAEf,GAAG,EAAEgB;QAClB,CAAC,CAAC,CAAC5D,KAAK,CAAEC,GAAG,IAAKC,OAAO,CAAC2D,IAAI,CAAC,kCAAkC,EAAE5D,GAAG,CAAC,CAAC;MAC1E,CAAC,CAAC,OAAOE,KAAU,EAAE;QACnB,IAAIG,SAAS,EAAE;UAAC;QAAO;QACvBpC,UAAU,CAAC,OAAO,EAAE,iCAAiC,EAAE;UACrD4F,OAAO,EAAE3D,KAAK,EAAE2D,OAAO;UACvBC,MAAM,EAAE5D,KAAK,EAAE6D,QAAQ,EAAED,MAAM;UAC/BE,IAAI,EAAE9D,KAAK,EAAE6D,QAAQ,EAAEC;QACzB,CAAC,CAAC;QACF7E,uBAAuB,CAACQ,OAAO,GAAG,EAAE;QACpCf,0BAA0B,CAAC,QAAQ,CAAC;MACtC;IACF,CAAC;IAED0B,GAAG,CAAC,CAAC;IAEL,OAAO,MAAM;MACXD,SAAS,GAAG,IAAI;MAChBF,eAAe,CAAC8D,KAAK,CAAC,CAAC;MACvB;MACA;MACA;MACA;MACA;MACA9E,uBAAuB,CAACQ,OAAO,GAAG,EAAE;IACtC,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA;EACF,CAAC,EAAE,CACDnB,MAAM,EAAEQ,cAAc,EACtBR,MAAM,EAAEmC,KAAK,EACbnC,MAAM,EAAEoC,OAAO,EACfpC,MAAM,EAAEgC,SAAS,EAAEC,OAAO,EAC1BjC,MAAM,EAAEgC,SAAS,EAAEE,IAAI,EAAEG,aAAa,EAAEC,aAAa,EACrDtC,MAAM,EAAEgC,SAAS,EAAEE,IAAI,EAAEK,YAAY,EACrCvC,MAAM,EAAEgC,SAAS,EAAEE,IAAI,EAAEM,KAAK,EAC9BxC,MAAM,EAAEyC,QAAQ,EAAER,OAAO,EACzBjC,MAAM,EAAEyC,QAAQ,EAAED,KAAK,EACvBxC,MAAM,EAAEe,YAAY,EAAE2B,SAAS,CAChC,CAAC;;EAEF;EACA;EACA;EACA3E,SAAS,CAAC,MAAM;IACd,IAAI,CAACkC,MAAM,EAAE;MAAC;IAAO;IACrB,IAAIA,MAAM,CAACqF,MAAM,KAAK,SAAS,EAAE;MAAC;IAAO;IAEzC,IAAIjF,iBAAiB,GAAG,CAAC,EAAE;MACzBoB,OAAO,CAACiE,GAAG,CAAC,0BAA0BrF,iBAAiB,GAAG,CAAC,EAAE,CAAC;MAC9DJ,MAAM,CAAC0F,iBAAiB,CAAC,CAAC;MAC1BrF,oBAAoB,CAAEsF,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;MACxC;IACF;;IAEA;IACA,IAAInF,YAAY,CAACU,OAAO,EAAE;MACxB,MAAM;QAAEN,QAAQ;QAAEC,QAAQ;QAAEE;MAAS,CAAC,GAAGP,YAAY,CAACU,OAAO;MAC7D3C,mBAAmB,CAAC,IAAI,CAAC;MACzB0B,SAAS,CAAC,IAAI,CAAC;MACfU,gBAAgB,CAACC,QAAQ,EAAEC,QAAQ,EAAEE,QAAQ,CAAC,CAACO,KAAK,CAAEC,GAAG,IACvDC,OAAO,CAACC,KAAK,CAAC,qBAAqB,EAAEF,GAAG,CAC1C,CAAC;IACH;EACF,CAAC,EAAE,CAACvB,MAAM,EAAEA,MAAM,EAAEqF,MAAM,EAAEjF,iBAAiB,EAAEO,gBAAgB,CAAC,CAAC;;EAEjE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA7C,SAAS,CAAC,MAAM;IACd,MAAM8H,GAAG,GAAG3H,QAAQ,CAAC4H,gBAAgB,CAAC,QAAQ,EAAGC,IAAI,IAAK;MACxD,IAAIA,IAAI,KAAK,QAAQ,EAAE;QAAC;MAAO;MAC/B,MAAMtC,CAAC,GAAGxD,MAAM;MAChB,IAAI,CAACwD,CAAC,EAAE;QAAC;MAAO;MAChB,MAAMuC,KAAK,GAAGhH,KAAK,CAACgF,QAAQ,CAAC,CAAC;MAC9B,MAAMC,KAAK,GAAG+B,KAAK,CAAC/B,KAAK,EAAEA,KAAK;MAChC,MAAMI,aAAa,GAAG2B,KAAK,CAAC/B,KAAK,EAAEI,aAAa,IAAI,IAAI;MACxD;MACA;MACAZ,CAAC,CAACwC,mCAAmC,CAAChC,KAAK,EAAE;QAAEI;MAAc,CAAC,CAAC,CAAC9C,KAAK,CACnE,MAAM,CAAC,CACT,CAAC;IACH,CAAC,CAAC;IACF,OAAO,MAAMsE,GAAG,CAAC5C,MAAM,CAAC,CAAC;EAC3B,CAAC,EAAE,CAAChD,MAAM,CAAC,CAAC;;EAEZ;EACA;EACA;EACA;EACA;EACAlC,SAAS,CAAC,MAAM;IACd,MAAM8H,GAAG,GAAG1H,kBAAkB,CAAC+H,WAAW,CAAC,uBAAuB,EAAE,MAAM;MACxExF,wBAAwB,CAACS,OAAO,GAAG,EAAE;MACrCR,uBAAuB,CAACQ,OAAO,GAAG,EAAE;MACpCf,0BAA0B,CAAC,MAAM,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,MAAMyF,GAAG,CAAC5C,MAAM,CAAC,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA;EACA;EACAlF,SAAS,CAAC,MAAM;IACd,MAAM8H,GAAG,GAAG1H,kBAAkB,CAAC+H,WAAW,CAACrG,YAAY,EAAE,YAAY;MACnE,IAAI;QACF,IAAII,MAAM,EAAE;UACV,MAAMA,MAAM,CAACkG,UAAU,CAAC;YAAEC,iBAAiB,EAAE;UAAK,CAAC,CAAC;QACtD;MACF,CAAC,CAAC,OAAOzC,CAAC,EAAE;QACVlC,OAAO,CAAC2D,IAAI,CAAC,0BAA0B,EAAEzB,CAAC,CAAC;MAC7C;MACAnF,mBAAmB,CAAC,IAAI,CAAC;MACzB0B,SAAS,CAAC,IAAI,CAAC;MACfQ,wBAAwB,CAACS,OAAO,GAAG,EAAE;MACrCR,uBAAuB,CAACQ,OAAO,GAAG,EAAE;MACpCb,oBAAoB,CAAC,CAAC,CAAC;MACvBF,0BAA0B,CAAC,MAAM,CAAC;MAClC,MAAMb,mBAAmB,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,OAAO,MAAMsG,GAAG,CAAC5C,MAAM,CAAC,CAAC;EAC3B,CAAC,EAAE,CAAChD,MAAM,CAAC,CAAC;EAEZ,oBACEN,IAAA,CAACC,WAAW,CAACyG,QAAQ;IACnBC,KAAK,EAAE;MACLrG,MAAM;MACNE,uBAAuB;MACvBI,QAAQ;MACRK,gBAAgB;MAChBV;IACF,CAAE;IAAAH,QAAA,EAEDA;EAAQ,CACW,CAAC;AAE3B,CAAC;AAED,OAAO,MAAMwG,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAMC,OAAO,GAAG1I,UAAU,CAAC8B,WAAW,CAAC;EACvC,IAAI,CAAC4G,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EACA,OAAOD,OAAO;AAChB,CAAC;;AAED;AACA,OAAO,SAASE,cAAcA,CAAA,EAAG;EAC/BvI,kBAAkB,CAACwI,IAAI,CAAC9G,YAAY,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","AppState","DeviceEventEmitter","NetInfo","XmppClient","refreshTokens","buildXmppClientKey","getGlobalXmppClient","getReusableXmppClientByKey","isXmppClientReusable","setGlobalXmppClient","withXmppClientInitLock","applyResolvedUserToStore","refreshUserCredentialsForXmpp","resolveInitBeforeLoadUser","ensureScopedChatCache","getRooms","prefetchRoomsViaRest","allRoomPresences","store","logout","setStoreClient","setLogoutState","setVisibleRoom","clearVisibleRoom","setLastViewedTimestamp","deleteRoomMessage","runHistoryPreloadScheduler","asyncLocalStorage","localStorageConstants","clearPersistedState","pushLog","devPushLog","jsx","_jsx","XmppContext","LOGOUT_EVENT","XmppProvider","children","config","isVisible","client","setClient","providerBootstrapStatus","setProviderBootstrapStatus","initMode","initBeforeLoad","lastCredsRef","completedBootstrapKeyRef","inflightBootstrapKeyRef","credentialsProvider","customRefresh","refreshFunction","result","accessToken","dispatch","token","refreshToken","err","fresh","catch","username","xmppUsername","defaultWallet","walletAddress","password","xmppPassword","u","getState","chatSettingStore","user","jwtLogin","enabled","userLogin","customLogin","initBeforeLoadAuth","myEndpoint","initializeClient","xmppSettings","settings","key","reusable","current","created","prevGlobal","close","newClient","setCredentialsProvider","waitForOnline","console","error","setOnOnline","underlying","e","getChatsPrivateStoreRequestStanza","abortController","AbortController","cancelled","MAX_BOOTSTRAP_ATTEMPTS","bootstrapAttempt","BOOTSTRAP_BUDGET_MS","reachedReady","budgetTimer","setTimeout","abort","clearBudget","clearTimeout","run","explicitUser","appId","baseUrl","devServer","join","mode","clearStoreBeforeInit","ETHORA_USER","remove","undefined","resolved","signal","hasResolved","xmppPasswordPresent","restRoomsPromise","c","getRoomsStanza","roomCount","Object","keys","rooms","length","qos","historyQoS","activeRoomJID","defaultRoomJids","defaultRooms","map","r","jid","filter","Boolean","selectedRoomJid","concurrency","stagedPreloadConcurrency","pageSize","stagedPreloadFirstPassSize","roomLimit","preloadTopKRooms","warn","aborted","backoff","Math","min","message","status","response","data","id","setInterval","currentState","suppressReconnect","forceReconnect","clearInterval","visibleBeforeBackground","sub","addEventListener","next","roomJID","state","visibleRoomJID","chatJID","timestamp","Date","now","messageId","flushLastViewedToPrivateStoreStanza","unsub","reachable","isConnected","isInternetReachable","addListener","disconnect","Provider","value","useXmppClient","context","Error","candidates","live","find","emitXmppLogout","emit"],"sourceRoot":"../../../src","sources":["context/xmppProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@
3
3
  /** @format */
4
4
 
5
5
  import { setCurrentRoom } from '../roomStore/roomsSlice';
6
+ import { normalizeRoomJid } from './normalizeRoomJid';
6
7
  export const chatAutoEnterer = ({
7
8
  roomJID,
8
9
  wasAutoSelected,
@@ -14,14 +15,8 @@ export const chatAutoEnterer = ({
14
15
  wasAutoSelected
15
16
  });
16
17
  if (roomJID) {
17
- // If roomJID is already a full JID, use it directly
18
- // Otherwise, construct it from chatId if needed
19
18
  const conferenceDomain = config.xmppSettings?.conference ?? '';
20
- let finalRoomJID = roomJID;
21
- if (!roomJID.includes('@') && conferenceDomain) {
22
- finalRoomJID = `${roomJID}@${conferenceDomain}`;
23
- console.log('🟡 chatAutoEnterer: Constructed roomJID', finalRoomJID);
24
- }
19
+ const finalRoomJID = normalizeRoomJid(roomJID, conferenceDomain);
25
20
  console.log('🟡 chatAutoEnterer: Setting current room', finalRoomJID);
26
21
  dispatch(setCurrentRoom({
27
22
  roomJID: finalRoomJID
@@ -1 +1 @@
1
- {"version":3,"names":["setCurrentRoom","chatAutoEnterer","roomJID","wasAutoSelected","config","dispatch","console","log","conferenceDomain","xmppSettings","conference","finalRoomJID","includes"],"sourceRoot":"../../../src","sources":["helpers/chatAutoEnterer.ts"],"mappings":";;AAAA;;AAGA,SAASA,cAAc,QAAQ,yBAAyB;AAexD,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,OAAO;EACPC,eAAe;EACfC,MAAM;EACNC;AACc,CAAC,KAAW;EAC1BC,OAAO,CAACC,GAAG,CAAC,4BAA4B,EAAE;IAAEL,OAAO;IAAEC;EAAgB,CAAC,CAAC;EAEvE,IAAID,OAAO,EAAE;IACX;IACA;IACA,MAAMM,gBAAgB,GAAGJ,MAAM,CAACK,YAAY,EAAEC,UAAU,IAAI,EAAE;IAC9D,IAAIC,YAAY,GAAGT,OAAO;IAE1B,IAAI,CAACA,OAAO,CAACU,QAAQ,CAAC,GAAG,CAAC,IAAIJ,gBAAgB,EAAE;MAC9CG,YAAY,GAAG,GAAGT,OAAO,IAAIM,gBAAgB,EAAE;MAC/CF,OAAO,CAACC,GAAG,CAAC,yCAAyC,EAAEI,YAAY,CAAC;IACtE;IAEAL,OAAO,CAACC,GAAG,CAAC,0CAA0C,EAAEI,YAAY,CAAC;IACrEN,QAAQ,CAACL,cAAc,CAAC;MAAEE,OAAO,EAAES;IAAa,CAAC,CAAC,CAAC;IACnD;EACF;EAEAL,OAAO,CAACC,GAAG,CAAC,yCAAyC,CAAC;EACtD;EACA;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["setCurrentRoom","normalizeRoomJid","chatAutoEnterer","roomJID","wasAutoSelected","config","dispatch","console","log","conferenceDomain","xmppSettings","conference","finalRoomJID"],"sourceRoot":"../../../src","sources":["helpers/chatAutoEnterer.ts"],"mappings":";;AAAA;;AAGA,SAASA,cAAc,QAAQ,yBAAyB;AACxD,SAASC,gBAAgB,QAAQ,oBAAoB;AAerD,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,OAAO;EACPC,eAAe;EACfC,MAAM;EACNC;AACc,CAAC,KAAW;EAC1BC,OAAO,CAACC,GAAG,CAAC,4BAA4B,EAAE;IAAEL,OAAO;IAAEC;EAAgB,CAAC,CAAC;EAEvE,IAAID,OAAO,EAAE;IACX,MAAMM,gBAAgB,GAAGJ,MAAM,CAACK,YAAY,EAAEC,UAAU,IAAI,EAAE;IAC9D,MAAMC,YAAY,GAAGX,gBAAgB,CAACE,OAAO,EAAEM,gBAAgB,CAAC;IAEhEF,OAAO,CAACC,GAAG,CAAC,0CAA0C,EAAEI,YAAY,CAAC;IACrEN,QAAQ,CAACN,cAAc,CAAC;MAAEG,OAAO,EAAES;IAAa,CAAC,CAAC,CAAC;IACnD;EACF;EAEAL,OAAO,CAACC,GAAG,CAAC,yCAAyC,CAAC;EACtD;EACA;AACF,CAAC","ignoreList":[]}
@@ -4,7 +4,10 @@ import { AppState } from 'react-native';
4
4
  import { store } from '../roomStore';
5
5
  import { applyRoomsPreloadBatch } from '../roomStore/roomsSlice';
6
6
  const DEFAULT_CONCURRENCY = 3;
7
- const DEFAULT_PAGE_SIZE = 10;
7
+ // Fetch the most recent ~20 on re-entry (mirrors web). A larger first page
8
+ // also means more id-overlap with cache, so the merge in
9
+ // `mergeHistoryIntoCache` rarely has to fall back to clear-and-replace.
10
+ const DEFAULT_PAGE_SIZE = 20;
8
11
  const DEFAULT_RETRY_LIMIT = 2;
9
12
  const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
10
13
  const messageTimestamp = m => {