@ethora/chat-component-rn 26.7.10 → 26.8.1

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 (667) hide show
  1. package/CHANGELOG.md +0 -96
  2. package/README.md +10 -43
  3. package/lib/commonjs/assets/icons.js +2 -7
  4. package/lib/commonjs/assets/icons.js.map +1 -1
  5. package/lib/commonjs/components/AuthForms/Login.js +4 -4
  6. package/lib/commonjs/components/AuthForms/Login.js.map +1 -1
  7. package/lib/commonjs/components/Header/HeaderRoomList.js +7 -26
  8. package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
  9. package/lib/commonjs/components/MainComponents/ChatHeader.js +3 -9
  10. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  11. package/lib/commonjs/components/MainComponents/ChatRoom.js +14 -150
  12. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  13. package/lib/commonjs/components/MainComponents/ChatWrapper.js +38 -34
  14. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  15. package/lib/commonjs/components/MainComponents/LoginWrapper.js +1 -2
  16. package/lib/commonjs/components/MainComponents/LoginWrapper.js.map +1 -1
  17. package/lib/commonjs/components/MainComponents/MediaMessage.js +9 -29
  18. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  19. package/lib/commonjs/components/MainComponents/MessageContainer.js +1 -5
  20. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  21. package/lib/commonjs/components/MainComponents/MessageList.js +5 -13
  22. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  23. package/lib/commonjs/components/MainComponents/ProfileImagePlaceholder.js +13 -14
  24. package/lib/commonjs/components/MainComponents/ProfileImagePlaceholder.js.map +1 -1
  25. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +24 -3
  26. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  27. package/lib/commonjs/components/MainComponents/RoomList.js +35 -208
  28. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  29. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +98 -317
  30. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
  31. package/lib/commonjs/components/MessageBubble/MessageTranslate.js +16 -7
  32. package/lib/commonjs/components/MessageBubble/MessageTranslate.js.map +1 -1
  33. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +112 -320
  34. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  35. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +215 -556
  36. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  37. package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js +9 -7
  38. package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
  39. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +27 -69
  40. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  41. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +1 -2
  42. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  43. package/lib/commonjs/components/Modals/Modal/Modal.js +0 -8
  44. package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
  45. package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js +1 -2
  46. package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js.map +1 -1
  47. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +109 -205
  48. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  49. package/lib/commonjs/components/Modals/NewChatModal/UpdNewChatModal.js +0 -8
  50. package/lib/commonjs/components/Modals/NewChatModal/UpdNewChatModal.js.map +1 -1
  51. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +2 -4
  52. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  53. package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js +21 -7
  54. package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
  55. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +244 -507
  56. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  57. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +46 -74
  58. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  59. package/lib/commonjs/components/Modals/styledModalComponents.js +2 -9
  60. package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
  61. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +39 -23
  62. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  63. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +3 -22
  64. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  65. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +3 -17
  66. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  67. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +3 -17
  68. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  69. package/lib/commonjs/components/VideoCalls/VideoCallSession.js +3 -6
  70. package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
  71. package/lib/commonjs/components/styled/AudioMessage.js +1 -2
  72. package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
  73. package/lib/commonjs/components/styled/DateLabel.js +10 -3
  74. package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
  75. package/lib/commonjs/components/styled/MessageImage.js +9 -37
  76. package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
  77. package/lib/commonjs/components/styled/NewMessageLabel.js +3 -1
  78. package/lib/commonjs/components/styled/NewMessageLabel.js.map +1 -1
  79. package/lib/commonjs/components/styled/SendInput.js +17 -86
  80. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  81. package/lib/commonjs/components/styled/StyledComponents.js +3 -9
  82. package/lib/commonjs/components/styled/StyledComponents.js.map +1 -1
  83. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +4 -11
  84. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  85. package/lib/commonjs/components/styled/UnsupportedType.js +4 -14
  86. package/lib/commonjs/components/styled/UnsupportedType.js.map +1 -1
  87. package/lib/commonjs/components/styled/VideoMessage.js +61 -119
  88. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  89. package/lib/commonjs/context/xmppProvider.js +59 -177
  90. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  91. package/lib/commonjs/helpers/createMessageFromXml.js +1 -19
  92. package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
  93. package/lib/commonjs/helpers/ensureScopedChatCache.js +2 -2
  94. package/lib/commonjs/helpers/ensureScopedChatCache.js.map +1 -1
  95. package/lib/commonjs/helpers/getDataFromXml.js +24 -1
  96. package/lib/commonjs/helpers/getDataFromXml.js.map +1 -1
  97. package/lib/commonjs/helpers/historyPreloadScheduler.js +2 -65
  98. package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
  99. package/lib/commonjs/helpers/initXmppRooms.js +8 -14
  100. package/lib/commonjs/helpers/initXmppRooms.js.map +1 -1
  101. package/lib/commonjs/helpers/insertMessageWithDelimiter.js +22 -51
  102. package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
  103. package/lib/commonjs/helpers/isUnresolvedSenderId.js +6 -1
  104. package/lib/commonjs/helpers/isUnresolvedSenderId.js.map +1 -1
  105. package/lib/commonjs/helpers/keyboardLayout.js +2 -12
  106. package/lib/commonjs/helpers/keyboardLayout.js.map +1 -1
  107. package/lib/commonjs/helpers/mimeToExtension.js +14 -6
  108. package/lib/commonjs/helpers/mimeToExtension.js.map +1 -1
  109. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +17 -130
  110. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  111. package/lib/commonjs/helpers/resolveLangSource.js +38 -0
  112. package/lib/commonjs/helpers/resolveLangSource.js.map +1 -0
  113. package/lib/commonjs/helpers/xmppUsername.js +39 -0
  114. package/lib/commonjs/helpers/xmppUsername.js.map +1 -0
  115. package/lib/commonjs/hooks/useChatRoomFocus.js +12 -45
  116. package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -1
  117. package/lib/commonjs/hooks/useChatWrapperInit.js +14 -32
  118. package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
  119. package/lib/commonjs/hooks/useComposing.js +0 -27
  120. package/lib/commonjs/hooks/useComposing.js.map +1 -1
  121. package/lib/commonjs/hooks/useLogout.js +7 -23
  122. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  123. package/lib/commonjs/hooks/usePendingNotification.js +11 -8
  124. package/lib/commonjs/hooks/usePendingNotification.js.map +1 -1
  125. package/lib/commonjs/hooks/useSendMessage.js +14 -50
  126. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  127. package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -6
  128. package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
  129. package/lib/commonjs/i18n/strings.js +133 -121
  130. package/lib/commonjs/i18n/strings.js.map +1 -1
  131. package/lib/commonjs/i18n/useT.js +1 -1
  132. package/lib/commonjs/main.js +0 -44
  133. package/lib/commonjs/main.js.map +1 -1
  134. package/lib/commonjs/networking/api-requests/auth.api.js +60 -134
  135. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  136. package/lib/commonjs/networking/api-requests/roomMembers.api.js +1 -1
  137. package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
  138. package/lib/commonjs/networking/api-requests/rooms.api.js +9 -9
  139. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  140. package/lib/commonjs/networking/api-requests/user.api.js +9 -68
  141. package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
  142. package/lib/commonjs/networking/apiClient.js +112 -62
  143. package/lib/commonjs/networking/apiClient.js.map +1 -1
  144. package/lib/commonjs/networking/stanzaHandlers.js +51 -93
  145. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  146. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
  147. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  148. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +1 -8
  149. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  150. package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
  151. package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
  152. package/lib/commonjs/networking/xmppClient.js +8 -124
  153. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  154. package/lib/commonjs/roomStore/chatSettingsSlice.js +7 -26
  155. package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
  156. package/lib/commonjs/roomStore/index.js +2 -35
  157. package/lib/commonjs/roomStore/index.js.map +1 -1
  158. package/lib/commonjs/roomStore/persistence.js +39 -226
  159. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  160. package/lib/commonjs/roomStore/roomsSlice.js +38 -151
  161. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  162. package/lib/commonjs/services/pushSubscriptionService.js +13 -15
  163. package/lib/commonjs/services/pushSubscriptionService.js.map +1 -1
  164. package/lib/commonjs/version.js +3 -1
  165. package/lib/commonjs/version.js.map +1 -1
  166. package/lib/module/assets/icons.js +1 -6
  167. package/lib/module/assets/icons.js.map +1 -1
  168. package/lib/module/components/AuthForms/Login.js +4 -4
  169. package/lib/module/components/AuthForms/Login.js.map +1 -1
  170. package/lib/module/components/Header/HeaderRoomList.js +7 -26
  171. package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
  172. package/lib/module/components/MainComponents/ChatHeader.js +3 -9
  173. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  174. package/lib/module/components/MainComponents/ChatRoom.js +16 -152
  175. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  176. package/lib/module/components/MainComponents/ChatWrapper.js +40 -36
  177. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  178. package/lib/module/components/MainComponents/LoginWrapper.js +1 -2
  179. package/lib/module/components/MainComponents/LoginWrapper.js.map +1 -1
  180. package/lib/module/components/MainComponents/MediaMessage.js +10 -30
  181. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  182. package/lib/module/components/MainComponents/MessageContainer.js +1 -5
  183. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  184. package/lib/module/components/MainComponents/MessageList.js +5 -13
  185. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  186. package/lib/module/components/MainComponents/ProfileImagePlaceholder.js +13 -14
  187. package/lib/module/components/MainComponents/ProfileImagePlaceholder.js.map +1 -1
  188. package/lib/module/components/MainComponents/ReduxWrapper.js +26 -5
  189. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  190. package/lib/module/components/MainComponents/RoomList.js +35 -207
  191. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  192. package/lib/module/components/Menu/HeaderRoomListMenu.js +101 -319
  193. package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
  194. package/lib/module/components/MessageBubble/MessageTranslate.js +16 -7
  195. package/lib/module/components/MessageBubble/MessageTranslate.js.map +1 -1
  196. package/lib/module/components/Modals/AttachSheet/AttachSheet.js +115 -311
  197. package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  198. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +219 -559
  199. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  200. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js +9 -7
  201. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
  202. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +28 -70
  203. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  204. package/lib/module/components/Modals/FilePreviewModal/PdfView.js +1 -2
  205. package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  206. package/lib/module/components/Modals/Modal/Modal.js +1 -9
  207. package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
  208. package/lib/module/components/Modals/NewChatModal/ModalContent.js +1 -2
  209. package/lib/module/components/Modals/NewChatModal/ModalContent.js.map +1 -1
  210. package/lib/module/components/Modals/NewChatModal/NewChatModal.js +111 -208
  211. package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  212. package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js +0 -8
  213. package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js.map +1 -1
  214. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +2 -4
  215. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  216. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js +23 -9
  217. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
  218. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +248 -509
  219. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  220. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +48 -76
  221. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  222. package/lib/module/components/Modals/styledModalComponents.js +2 -9
  223. package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
  224. package/lib/module/components/RoomComponents/ChatRoomItem.js +40 -24
  225. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  226. package/lib/module/components/RoomComponents/styled/LastMessageFile.js +3 -22
  227. package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  228. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +3 -17
  229. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  230. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +3 -17
  231. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  232. package/lib/module/components/VideoCalls/VideoCallSession.js +3 -6
  233. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  234. package/lib/module/components/styled/AudioMessage.js +1 -2
  235. package/lib/module/components/styled/AudioMessage.js.map +1 -1
  236. package/lib/module/components/styled/DateLabel.js +10 -3
  237. package/lib/module/components/styled/DateLabel.js.map +1 -1
  238. package/lib/module/components/styled/MessageImage.js +9 -37
  239. package/lib/module/components/styled/MessageImage.js.map +1 -1
  240. package/lib/module/components/styled/NewMessageLabel.js +3 -1
  241. package/lib/module/components/styled/NewMessageLabel.js.map +1 -1
  242. package/lib/module/components/styled/SendInput.js +18 -87
  243. package/lib/module/components/styled/SendInput.js.map +1 -1
  244. package/lib/module/components/styled/StyledComponents.js +3 -9
  245. package/lib/module/components/styled/StyledComponents.js.map +1 -1
  246. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +4 -11
  247. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  248. package/lib/module/components/styled/UnsupportedType.js +4 -14
  249. package/lib/module/components/styled/UnsupportedType.js.map +1 -1
  250. package/lib/module/components/styled/VideoMessage.js +62 -120
  251. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  252. package/lib/module/context/xmppProvider.js +60 -177
  253. package/lib/module/context/xmppProvider.js.map +1 -1
  254. package/lib/module/helpers/createMessageFromXml.js +1 -19
  255. package/lib/module/helpers/createMessageFromXml.js.map +1 -1
  256. package/lib/module/helpers/ensureScopedChatCache.js +2 -2
  257. package/lib/module/helpers/ensureScopedChatCache.js.map +1 -1
  258. package/lib/module/helpers/getDataFromXml.js +23 -1
  259. package/lib/module/helpers/getDataFromXml.js.map +1 -1
  260. package/lib/module/helpers/historyPreloadScheduler.js +3 -66
  261. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  262. package/lib/module/helpers/initXmppRooms.js +8 -14
  263. package/lib/module/helpers/initXmppRooms.js.map +1 -1
  264. package/lib/module/helpers/insertMessageWithDelimiter.js +22 -52
  265. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  266. package/lib/module/helpers/isUnresolvedSenderId.js +6 -1
  267. package/lib/module/helpers/isUnresolvedSenderId.js.map +1 -1
  268. package/lib/module/helpers/keyboardLayout.js +2 -12
  269. package/lib/module/helpers/keyboardLayout.js.map +1 -1
  270. package/lib/module/helpers/mimeToExtension.js +13 -6
  271. package/lib/module/helpers/mimeToExtension.js.map +1 -1
  272. package/lib/module/helpers/resolveInitBeforeLoadUser.js +16 -130
  273. package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  274. package/lib/module/helpers/resolveLangSource.js +32 -0
  275. package/lib/module/helpers/resolveLangSource.js.map +1 -0
  276. package/lib/module/helpers/xmppUsername.js +35 -0
  277. package/lib/module/helpers/xmppUsername.js.map +1 -0
  278. package/lib/module/hooks/useChatRoomFocus.js +13 -46
  279. package/lib/module/hooks/useChatRoomFocus.js.map +1 -1
  280. package/lib/module/hooks/useChatWrapperInit.js +14 -32
  281. package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
  282. package/lib/module/hooks/useComposing.js +1 -28
  283. package/lib/module/hooks/useComposing.js.map +1 -1
  284. package/lib/module/hooks/useLogout.js +7 -23
  285. package/lib/module/hooks/useLogout.js.map +1 -1
  286. package/lib/module/hooks/usePendingNotification.js +11 -8
  287. package/lib/module/hooks/usePendingNotification.js.map +1 -1
  288. package/lib/module/hooks/useSendMessage.js +16 -52
  289. package/lib/module/hooks/useSendMessage.js.map +1 -1
  290. package/lib/module/hooks/useUnreadMessagesCounter.js +1 -6
  291. package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
  292. package/lib/module/i18n/strings.js +133 -121
  293. package/lib/module/i18n/strings.js.map +1 -1
  294. package/lib/module/i18n/useT.js +1 -1
  295. package/lib/module/main.js +2 -14
  296. package/lib/module/main.js.map +1 -1
  297. package/lib/module/networking/api-requests/auth.api.js +59 -131
  298. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  299. package/lib/module/networking/api-requests/roomMembers.api.js +1 -1
  300. package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
  301. package/lib/module/networking/api-requests/rooms.api.js +9 -9
  302. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  303. package/lib/module/networking/api-requests/user.api.js +7 -64
  304. package/lib/module/networking/api-requests/user.api.js.map +1 -1
  305. package/lib/module/networking/apiClient.js +113 -61
  306. package/lib/module/networking/apiClient.js.map +1 -1
  307. package/lib/module/networking/stanzaHandlers.js +52 -94
  308. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  309. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
  310. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  311. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +1 -8
  312. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  313. package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
  314. package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
  315. package/lib/module/networking/xmppClient.js +8 -124
  316. package/lib/module/networking/xmppClient.js.map +1 -1
  317. package/lib/module/roomStore/chatSettingsSlice.js +7 -26
  318. package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
  319. package/lib/module/roomStore/index.js +4 -37
  320. package/lib/module/roomStore/index.js.map +1 -1
  321. package/lib/module/roomStore/persistence.js +38 -223
  322. package/lib/module/roomStore/persistence.js.map +1 -1
  323. package/lib/module/roomStore/roomsSlice.js +34 -139
  324. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  325. package/lib/module/services/pushSubscriptionService.js +13 -15
  326. package/lib/module/services/pushSubscriptionService.js.map +1 -1
  327. package/lib/module/version.js +3 -1
  328. package/lib/module/version.js.map +1 -1
  329. package/lib/typescript/assets/icons.d.ts +0 -16
  330. package/lib/typescript/assets/icons.d.ts.map +1 -1
  331. package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
  332. package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
  333. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  334. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  335. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  336. package/lib/typescript/components/MainComponents/LoginWrapper.d.ts.map +1 -1
  337. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  338. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  339. package/lib/typescript/components/MainComponents/MessageList.d.ts +1 -10
  340. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  341. package/lib/typescript/components/MainComponents/ProfileImagePlaceholder.d.ts.map +1 -1
  342. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  343. package/lib/typescript/components/MainComponents/RoomList.d.ts +0 -7
  344. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  345. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts +0 -3
  346. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
  347. package/lib/typescript/components/MessageBubble/MessageTranslate.d.ts.map +1 -1
  348. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts +0 -9
  349. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
  350. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts +0 -10
  351. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  352. package/lib/typescript/components/Modals/ChatProfileModal/DeleteChatModal.d.ts.map +1 -1
  353. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  354. package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
  355. package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
  356. package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts +2 -4
  357. package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts.map +1 -1
  358. package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts +1 -1
  359. package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts.map +1 -1
  360. package/lib/typescript/components/Modals/NewChatModal/UpdNewChatModal.d.ts.map +1 -1
  361. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts +1 -6
  362. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
  363. package/lib/typescript/components/Modals/UserProfileModal/EditUserModal.d.ts.map +1 -1
  364. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts +0 -16
  365. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  366. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts +0 -1
  367. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
  368. package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
  369. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  370. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts +1 -1
  371. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts.map +1 -1
  372. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts +1 -1
  373. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts.map +1 -1
  374. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts +1 -1
  375. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts.map +1 -1
  376. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  377. package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
  378. package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
  379. package/lib/typescript/components/styled/MessageImage.d.ts +0 -14
  380. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  381. package/lib/typescript/components/styled/NewMessageLabel.d.ts.map +1 -1
  382. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  383. package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
  384. package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
  385. package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
  386. package/lib/typescript/components/styled/VideoMessage.d.ts +0 -8
  387. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  388. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  389. package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
  390. package/lib/typescript/helpers/getDataFromXml.d.ts.map +1 -1
  391. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  392. package/lib/typescript/helpers/initXmppRooms.d.ts.map +1 -1
  393. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts +1 -1
  394. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  395. package/lib/typescript/helpers/isUnresolvedSenderId.d.ts.map +1 -1
  396. package/lib/typescript/helpers/keyboardLayout.d.ts +1 -5
  397. package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -1
  398. package/lib/typescript/helpers/mimeToExtension.d.ts +15 -0
  399. package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -1
  400. package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
  401. package/lib/typescript/helpers/resolveLangSource.d.ts +30 -0
  402. package/lib/typescript/helpers/resolveLangSource.d.ts.map +1 -0
  403. package/lib/typescript/helpers/xmppUsername.d.ts +13 -0
  404. package/lib/typescript/helpers/xmppUsername.d.ts.map +1 -0
  405. package/lib/typescript/hooks/useChatRoomFocus.d.ts +1 -4
  406. package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -1
  407. package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
  408. package/lib/typescript/hooks/useComposing.d.ts.map +1 -1
  409. package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
  410. package/lib/typescript/hooks/usePendingNotification.d.ts.map +1 -1
  411. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  412. package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts +0 -1
  413. package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts.map +1 -1
  414. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  415. package/lib/typescript/i18n/useT.d.ts +1 -1
  416. package/lib/typescript/main.d.ts +2 -9
  417. package/lib/typescript/main.d.ts.map +1 -1
  418. package/lib/typescript/networking/api-requests/auth.api.d.ts +1 -3
  419. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  420. package/lib/typescript/networking/api-requests/user.api.d.ts +0 -27
  421. package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
  422. package/lib/typescript/networking/apiClient.d.ts +6 -12
  423. package/lib/typescript/networking/apiClient.d.ts.map +1 -1
  424. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  425. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts +2 -10
  426. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts.map +1 -1
  427. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  428. package/lib/typescript/networking/xmpp/subscribeToRoomMessages.xmpp.d.ts.map +1 -1
  429. package/lib/typescript/networking/xmppClient.d.ts +0 -14
  430. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  431. package/lib/typescript/roomStore/chatSettingsSlice.d.ts +0 -16
  432. package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
  433. package/lib/typescript/roomStore/index.d.ts.map +1 -1
  434. package/lib/typescript/roomStore/persistence.d.ts +1 -18
  435. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  436. package/lib/typescript/roomStore/roomsSlice.d.ts +3 -43
  437. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  438. package/lib/typescript/services/pushSubscriptionService.d.ts +1 -1
  439. package/lib/typescript/services/pushSubscriptionService.d.ts.map +1 -1
  440. package/lib/typescript/types/types.d.ts +5 -50
  441. package/lib/typescript/types/types.d.ts.map +1 -1
  442. package/lib/typescript/version.d.ts +1 -1
  443. package/lib/typescript/version.d.ts.map +1 -1
  444. package/package.json +29 -41
  445. package/src/assets/icons.tsx +9 -48
  446. package/src/components/AuthForms/Login.tsx +3 -3
  447. package/src/components/Header/HeaderRoomList.tsx +6 -24
  448. package/src/components/MainComponents/ChatHeader.tsx +3 -9
  449. package/src/components/MainComponents/ChatRoom.tsx +15 -161
  450. package/src/components/MainComponents/ChatWrapper.tsx +53 -36
  451. package/src/components/MainComponents/LoginWrapper.tsx +0 -1
  452. package/src/components/MainComponents/MediaMessage.tsx +8 -26
  453. package/src/components/MainComponents/MessageContainer.tsx +1 -5
  454. package/src/components/MainComponents/MessageList.tsx +4 -23
  455. package/src/components/MainComponents/ProfileImagePlaceholder.tsx +14 -21
  456. package/src/components/MainComponents/ReduxWrapper.tsx +18 -1
  457. package/src/components/MainComponents/RoomList.tsx +39 -236
  458. package/src/components/Menu/HeaderRoomListMenu.tsx +75 -328
  459. package/src/components/MessageBubble/MessageTranslate.tsx +17 -12
  460. package/src/components/Modals/AttachSheet/AttachSheet.tsx +99 -331
  461. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +293 -611
  462. package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +9 -7
  463. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +38 -79
  464. package/src/components/Modals/FilePreviewModal/PdfView.tsx +1 -2
  465. package/src/components/Modals/Modal/Modal.tsx +0 -7
  466. package/src/components/Modals/NewChatModal/ModalContent.tsx +3 -6
  467. package/src/components/Modals/NewChatModal/NewChatModal.tsx +126 -223
  468. package/src/components/Modals/NewChatModal/UpdNewChatModal.tsx +1 -12
  469. package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +4 -14
  470. package/src/components/Modals/UserProfileModal/EditUserModal.tsx +25 -9
  471. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +307 -617
  472. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +58 -75
  473. package/src/components/Modals/styledModalComponents.tsx +2 -9
  474. package/src/components/RoomComponents/ChatRoomItem.tsx +50 -21
  475. package/src/components/RoomComponents/styled/LastMessageFile.tsx +4 -28
  476. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +3 -18
  477. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +3 -18
  478. package/src/components/VideoCalls/VideoCallSession.tsx +3 -8
  479. package/src/components/styled/AudioMessage.tsx +1 -2
  480. package/src/components/styled/DateLabel.tsx +10 -3
  481. package/src/components/styled/MessageImage.tsx +7 -53
  482. package/src/components/styled/NewMessageLabel.tsx +3 -1
  483. package/src/components/styled/SendInput.tsx +18 -91
  484. package/src/components/styled/StyledComponents.ts +3 -9
  485. package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +4 -11
  486. package/src/components/styled/UnsupportedType.tsx +4 -14
  487. package/src/components/styled/VideoMessage.tsx +54 -131
  488. package/src/context/xmppProvider.tsx +57 -209
  489. package/src/helpers/createMessageFromXml.ts +1 -20
  490. package/src/helpers/ensureScopedChatCache.ts +2 -2
  491. package/src/helpers/getDataFromXml.ts +25 -1
  492. package/src/helpers/historyPreloadScheduler.ts +3 -80
  493. package/src/helpers/initXmppRooms.tsx +10 -14
  494. package/src/helpers/insertMessageWithDelimiter.ts +32 -55
  495. package/src/helpers/isUnresolvedSenderId.ts +9 -1
  496. package/src/helpers/keyboardLayout.ts +2 -23
  497. package/src/helpers/mimeToExtension.ts +22 -6
  498. package/src/helpers/resolveInitBeforeLoadUser.ts +18 -125
  499. package/src/helpers/resolveLangSource.ts +40 -0
  500. package/src/helpers/xmppUsername.ts +38 -0
  501. package/src/hooks/useChatRoomFocus.ts +9 -49
  502. package/src/hooks/useChatWrapperInit.ts +16 -32
  503. package/src/hooks/useComposing.tsx +1 -37
  504. package/src/hooks/useLogout.tsx +9 -29
  505. package/src/hooks/usePendingNotification.ts +11 -5
  506. package/src/hooks/useSendMessage.tsx +15 -60
  507. package/src/hooks/useUnreadMessagesCounter.ts +0 -11
  508. package/src/i18n/strings.ts +133 -121
  509. package/src/i18n/useT.ts +1 -1
  510. package/src/main.ts +2 -26
  511. package/src/networking/api-requests/auth.api.ts +48 -156
  512. package/src/networking/api-requests/roomMembers.api.ts +1 -1
  513. package/src/networking/api-requests/rooms.api.ts +9 -9
  514. package/src/networking/api-requests/user.api.ts +7 -79
  515. package/src/networking/apiClient.ts +123 -68
  516. package/src/networking/stanzaHandlers.ts +51 -92
  517. package/src/networking/xmpp/flushLastViewedToPrivateStore.ts +10 -71
  518. package/src/networking/xmpp/presenceInRoom.xmpp.ts +1 -6
  519. package/src/networking/xmpp/subscribeToRoomMessages.xmpp.ts +1 -12
  520. package/src/networking/xmppClient.ts +9 -141
  521. package/src/roomStore/chatSettingsSlice.ts +10 -34
  522. package/src/roomStore/index.ts +4 -40
  523. package/src/roomStore/persistence.ts +40 -234
  524. package/src/roomStore/roomsSlice.ts +29 -161
  525. package/src/services/pushSubscriptionService.ts +13 -18
  526. package/src/types/types.ts +5 -72
  527. package/src/version.ts +3 -1
  528. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +0 -226
  529. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
  530. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js +0 -556
  531. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
  532. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js +0 -210
  533. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
  534. package/lib/commonjs/helpers/getChatBackground.js +0 -23
  535. package/lib/commonjs/helpers/getChatBackground.js.map +0 -1
  536. package/lib/commonjs/helpers/getDisplayFileName.js +0 -79
  537. package/lib/commonjs/helpers/getDisplayFileName.js.map +0 -1
  538. package/lib/commonjs/helpers/getServerReadTimestamp.js +0 -188
  539. package/lib/commonjs/helpers/getServerReadTimestamp.js.map +0 -1
  540. package/lib/commonjs/helpers/isOwnMessage.js +0 -75
  541. package/lib/commonjs/helpers/isOwnMessage.js.map +0 -1
  542. package/lib/commonjs/helpers/mediaLibraryRuntime.js +0 -31
  543. package/lib/commonjs/helpers/mediaLibraryRuntime.js.map +0 -1
  544. package/lib/commonjs/helpers/msgSortableMs.js +0 -37
  545. package/lib/commonjs/helpers/msgSortableMs.js.map +0 -1
  546. package/lib/commonjs/helpers/persistCrypto.js +0 -122
  547. package/lib/commonjs/helpers/persistCrypto.js.map +0 -1
  548. package/lib/commonjs/helpers/pickImageAsset.js +0 -68
  549. package/lib/commonjs/helpers/pickImageAsset.js.map +0 -1
  550. package/lib/commonjs/helpers/pushPayload.js +0 -71
  551. package/lib/commonjs/helpers/pushPayload.js.map +0 -1
  552. package/lib/commonjs/helpers/secureFileUrl.js +0 -101
  553. package/lib/commonjs/helpers/secureFileUrl.js.map +0 -1
  554. package/lib/commonjs/helpers/secureKeyValue.js +0 -83
  555. package/lib/commonjs/helpers/secureKeyValue.js.map +0 -1
  556. package/lib/commonjs/helpers/secureStoreRuntime.js +0 -59
  557. package/lib/commonjs/helpers/secureStoreRuntime.js.map +0 -1
  558. package/lib/commonjs/helpers/secureUserStorage.js +0 -75
  559. package/lib/commonjs/helpers/secureUserStorage.js.map +0 -1
  560. package/lib/commonjs/helpers/shallowEqual.js +0 -36
  561. package/lib/commonjs/helpers/shallowEqual.js.map +0 -1
  562. package/lib/commonjs/helpers/sheetGestures.js +0 -32
  563. package/lib/commonjs/helpers/sheetGestures.js.map +0 -1
  564. package/lib/commonjs/hooks/useFileToken.js +0 -10
  565. package/lib/commonjs/hooks/useFileToken.js.map +0 -1
  566. package/lib/commonjs/networking/authRefresh.js +0 -332
  567. package/lib/commonjs/networking/authRefresh.js.map +0 -1
  568. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +0 -223
  569. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
  570. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js +0 -548
  571. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
  572. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js +0 -205
  573. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
  574. package/lib/module/helpers/getChatBackground.js +0 -18
  575. package/lib/module/helpers/getChatBackground.js.map +0 -1
  576. package/lib/module/helpers/getDisplayFileName.js +0 -73
  577. package/lib/module/helpers/getDisplayFileName.js.map +0 -1
  578. package/lib/module/helpers/getServerReadTimestamp.js +0 -181
  579. package/lib/module/helpers/getServerReadTimestamp.js.map +0 -1
  580. package/lib/module/helpers/isOwnMessage.js +0 -70
  581. package/lib/module/helpers/isOwnMessage.js.map +0 -1
  582. package/lib/module/helpers/mediaLibraryRuntime.js +0 -25
  583. package/lib/module/helpers/mediaLibraryRuntime.js.map +0 -1
  584. package/lib/module/helpers/msgSortableMs.js +0 -32
  585. package/lib/module/helpers/msgSortableMs.js.map +0 -1
  586. package/lib/module/helpers/persistCrypto.js +0 -115
  587. package/lib/module/helpers/persistCrypto.js.map +0 -1
  588. package/lib/module/helpers/pickImageAsset.js +0 -63
  589. package/lib/module/helpers/pickImageAsset.js.map +0 -1
  590. package/lib/module/helpers/pushPayload.js +0 -63
  591. package/lib/module/helpers/pushPayload.js.map +0 -1
  592. package/lib/module/helpers/secureFileUrl.js +0 -91
  593. package/lib/module/helpers/secureFileUrl.js.map +0 -1
  594. package/lib/module/helpers/secureKeyValue.js +0 -75
  595. package/lib/module/helpers/secureKeyValue.js.map +0 -1
  596. package/lib/module/helpers/secureStoreRuntime.js +0 -52
  597. package/lib/module/helpers/secureStoreRuntime.js.map +0 -1
  598. package/lib/module/helpers/secureUserStorage.js +0 -72
  599. package/lib/module/helpers/secureUserStorage.js.map +0 -1
  600. package/lib/module/helpers/shallowEqual.js +0 -31
  601. package/lib/module/helpers/shallowEqual.js.map +0 -1
  602. package/lib/module/helpers/sheetGestures.js +0 -26
  603. package/lib/module/helpers/sheetGestures.js.map +0 -1
  604. package/lib/module/hooks/useFileToken.js +0 -5
  605. package/lib/module/hooks/useFileToken.js.map +0 -1
  606. package/lib/module/networking/authRefresh.js +0 -321
  607. package/lib/module/networking/authRefresh.js.map +0 -1
  608. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts +0 -9
  609. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +0 -1
  610. package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts +0 -75
  611. package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts.map +0 -1
  612. package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts +0 -25
  613. package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts.map +0 -1
  614. package/lib/typescript/helpers/getChatBackground.d.ts +0 -15
  615. package/lib/typescript/helpers/getChatBackground.d.ts.map +0 -1
  616. package/lib/typescript/helpers/getDisplayFileName.d.ts +0 -49
  617. package/lib/typescript/helpers/getDisplayFileName.d.ts.map +0 -1
  618. package/lib/typescript/helpers/getServerReadTimestamp.d.ts +0 -108
  619. package/lib/typescript/helpers/getServerReadTimestamp.d.ts.map +0 -1
  620. package/lib/typescript/helpers/isOwnMessage.d.ts +0 -36
  621. package/lib/typescript/helpers/isOwnMessage.d.ts.map +0 -1
  622. package/lib/typescript/helpers/mediaLibraryRuntime.d.ts +0 -3
  623. package/lib/typescript/helpers/mediaLibraryRuntime.d.ts.map +0 -1
  624. package/lib/typescript/helpers/msgSortableMs.d.ts +0 -2
  625. package/lib/typescript/helpers/msgSortableMs.d.ts.map +0 -1
  626. package/lib/typescript/helpers/persistCrypto.d.ts +0 -13
  627. package/lib/typescript/helpers/persistCrypto.d.ts.map +0 -1
  628. package/lib/typescript/helpers/pickImageAsset.d.ts +0 -27
  629. package/lib/typescript/helpers/pickImageAsset.d.ts.map +0 -1
  630. package/lib/typescript/helpers/pushPayload.d.ts +0 -7
  631. package/lib/typescript/helpers/pushPayload.d.ts.map +0 -1
  632. package/lib/typescript/helpers/secureFileUrl.d.ts +0 -7
  633. package/lib/typescript/helpers/secureFileUrl.d.ts.map +0 -1
  634. package/lib/typescript/helpers/secureKeyValue.d.ts +0 -13
  635. package/lib/typescript/helpers/secureKeyValue.d.ts.map +0 -1
  636. package/lib/typescript/helpers/secureStoreRuntime.d.ts +0 -29
  637. package/lib/typescript/helpers/secureStoreRuntime.d.ts.map +0 -1
  638. package/lib/typescript/helpers/secureUserStorage.d.ts +0 -23
  639. package/lib/typescript/helpers/secureUserStorage.d.ts.map +0 -1
  640. package/lib/typescript/helpers/shallowEqual.d.ts +0 -11
  641. package/lib/typescript/helpers/shallowEqual.d.ts.map +0 -1
  642. package/lib/typescript/helpers/sheetGestures.d.ts +0 -20
  643. package/lib/typescript/helpers/sheetGestures.d.ts.map +0 -1
  644. package/lib/typescript/hooks/useFileToken.d.ts +0 -2
  645. package/lib/typescript/hooks/useFileToken.d.ts.map +0 -1
  646. package/lib/typescript/networking/authRefresh.d.ts +0 -95
  647. package/lib/typescript/networking/authRefresh.d.ts.map +0 -1
  648. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +0 -244
  649. package/src/components/Modals/ProfileHeader/ProfileHeader.tsx +0 -615
  650. package/src/components/Modals/ProfileHeader/ProfileMenu.tsx +0 -217
  651. package/src/helpers/getChatBackground.ts +0 -18
  652. package/src/helpers/getDisplayFileName.ts +0 -87
  653. package/src/helpers/getServerReadTimestamp.ts +0 -197
  654. package/src/helpers/isOwnMessage.ts +0 -90
  655. package/src/helpers/mediaLibraryRuntime.ts +0 -25
  656. package/src/helpers/msgSortableMs.ts +0 -25
  657. package/src/helpers/persistCrypto.ts +0 -127
  658. package/src/helpers/pickImageAsset.ts +0 -68
  659. package/src/helpers/pushPayload.ts +0 -62
  660. package/src/helpers/secureFileUrl.ts +0 -103
  661. package/src/helpers/secureKeyValue.ts +0 -80
  662. package/src/helpers/secureStoreRuntime.ts +0 -62
  663. package/src/helpers/secureUserStorage.ts +0 -80
  664. package/src/helpers/shallowEqual.ts +0 -33
  665. package/src/helpers/sheetGestures.ts +0 -25
  666. package/src/hooks/useFileToken.ts +0 -7
  667. package/src/networking/authRefresh.ts +0 -451
@@ -14,7 +14,7 @@ import { VideoCallOverlay } from '../components/VideoCalls/VideoCallOverlay';
14
14
  import XmppClient, {
15
15
  XmppCredentialsProvider,
16
16
  } from '../networking/xmppClient';
17
- import { refreshAuthTokensQuietly } from '../networking/authRefresh';
17
+ import { refreshTokens } from '../roomStore/chatSettingsSlice';
18
18
  import {
19
19
  IConfig,
20
20
  ProviderBootstrapStatus,
@@ -37,7 +37,6 @@ import {
37
37
  import { ensureScopedChatCache } from '../helpers/ensureScopedChatCache';
38
38
  import { getRooms as prefetchRoomsViaRest } from '../networking/api-requests/rooms.api';
39
39
  import { allRoomPresences } from '../networking/xmpp/allRoomPresences.xmpp';
40
- import { pushSubscriptionService } from '../services/pushSubscriptionService';
41
40
  import { store } from '../roomStore';
42
41
  import { logout, setStoreClient, setConfig } from '../roomStore/chatSettingsSlice';
43
42
  import {
@@ -46,15 +45,12 @@ import {
46
45
  clearVisibleRoom,
47
46
  setLastViewedTimestamp,
48
47
  deleteRoomMessage,
48
+ msgSortableMs,
49
49
  setUnreadSyncing,
50
50
  } from '../roomStore/roomsSlice';
51
- import {
52
- getFlushBoundaryTs,
53
- getReadMarkerTimestamp,
54
- } from '../helpers/getServerReadTimestamp';
55
51
  import { runHistoryPreloadScheduler } from '../helpers/historyPreloadScheduler';
56
- import { updateMessagesTillLast } from '../helpers/updateMessagesTillLast';
57
- import { secureUserStorage } from '../helpers/secureUserStorage';
52
+ import { asyncLocalStorage } from '../hooks/useLocalStorage';
53
+ import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
58
54
  import { clearPersistedState } from '../roomStore/persistence';
59
55
  import { pushLog as devPushLog } from '../utils/devLogger';
60
56
 
@@ -87,16 +83,6 @@ interface XmppProviderProps {
87
83
 
88
84
  const LOGOUT_EVENT = 'ethora-xmpp-logout';
89
85
 
90
- const subscribeAllRoomsForPush = (client: any, reason: string) => {
91
- const rooms = Object.keys(store.getState().rooms.rooms || {});
92
- if (!client || !rooms.length) {return;}
93
- const nick = client.jid?.getLocal();
94
- pushSubscriptionService
95
- .subscribeToRooms(client, rooms, nick)
96
- .then(() => devPushLog('xmpp', `${reason}: mucsub ok for ${rooms.length} rooms`))
97
- .catch((e) => devPushLog('warn', `${reason}: mucsub subscribe failed`, e));
98
- };
99
-
100
86
  export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, isVisible }) => {
101
87
  const [client, setClient] = useState<XmppClient | null>(null);
102
88
  const [providerBootstrapStatus, setProviderBootstrapStatus] =
@@ -121,25 +107,23 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
121
107
  // the XmppClient at least doesn't crash on `undefined.password`.
122
108
  const credentialsProvider = useMemo<XmppCredentialsProvider>(() => {
123
109
  return async () => {
124
- // 1. Make sure the REST tokens are fresh before re-minting XMPP
125
- // creds. This used to call `config.refreshTokens.refreshFunction`
126
- // directly and then fall into step 2, which refreshes again —
127
- // two rotations back to back, which the new backend scheme
128
- // reads as a race at best and token reuse at worst. One call to
129
- // the shared rotation point covers both the consumer-supplied
130
- // function and the built-in endpoint.
131
- if (config?.refreshTokens?.enabled) {
132
- const rotated = await refreshAuthTokensQuietly({ force: true });
133
-
134
- if (rotated?.xmppPassword) {
135
- const rotatedUser = store.getState().chatSettingStore.user;
136
- return {
137
- username:
138
- rotatedUser?.xmppUsername ||
139
- rotatedUser?.defaultWallet?.walletAddress ||
140
- '',
141
- password: rotated.xmppPassword,
142
- };
110
+ // 1. Consumer-supplied REST refresh (when wired). This runs
111
+ // before the SDK's own refresh chain so non-Ethora backends
112
+ // can keep auth state in sync with their own token endpoint.
113
+ const customRefresh = config?.refreshTokens?.refreshFunction;
114
+ if (customRefresh) {
115
+ try {
116
+ const result = await customRefresh();
117
+ if (result?.accessToken) {
118
+ store.dispatch(
119
+ refreshTokens({
120
+ token: result.accessToken,
121
+ refreshToken: result.refreshToken || '',
122
+ })
123
+ );
124
+ }
125
+ } catch (err) {
126
+ devPushLog('warn', 'XMPP creds refresh: customRefresh failed', err);
143
127
  }
144
128
  }
145
129
 
@@ -179,7 +163,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
179
163
  }, [
180
164
  config?.jwtLogin?.enabled,
181
165
  config?.jwtLogin?.token,
182
- config?.refreshTokens?.enabled,
166
+ config?.refreshTokens?.refreshFunction,
183
167
  config?.userLogin?.enabled,
184
168
  config?.customLogin?.enabled,
185
169
  config?.initBeforeLoadAuth?.myEndpoint,
@@ -243,11 +227,9 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
243
227
  created.setOnOnline(() => {
244
228
  const underlying = (created as any).client;
245
229
  if (!underlying) {return;}
246
- allRoomPresences(underlying)
247
- .catch((e) =>
248
- devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e)
249
- )
250
- .finally(() => subscribeAllRoomsForPush(underlying, 'reconnect'));
230
+ allRoomPresences(underlying).catch((e) =>
231
+ devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e)
232
+ );
251
233
  // Also refresh the private store so unread / lastViewed markers
252
234
  // are accurate after a long reconnect — the MUC re-join above only
253
235
  // restores delivery, not unread state. Idempotent on first connect.
@@ -256,19 +238,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
256
238
  .catch((e: unknown) =>
257
239
  devPushLog('warn', 'reconnect: privateStore refresh failed', e)
258
240
  );
259
- // Pull whatever landed in each room's archive while the stream was
260
- // down. MUC presence re-join above only restores delivery for
261
- // messages sent AFTER this reconnect — anything sent during the
262
- // offline window has no live stanza to catch, and previously only
263
- // came back on a full app restart (fresh useChatWrapperInit mount
264
- // re-running its own one-shot boot sync). Safe on the very first
265
- // connect too: rooms have no `lastMessageTimestamp` yet at that
266
- // point, so this is a no-op until the bootstrap's own history load
267
- // populates it. Customer-reported #32.
268
- const rooms = store.getState().rooms?.rooms || {};
269
- updateMessagesTillLast(rooms, created).catch((e: unknown) =>
270
- devPushLog('warn', 'reconnect: offline catch-up sync failed', e)
271
- );
272
241
  });
273
242
 
274
243
  setClient(created);
@@ -353,7 +322,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
353
322
  devPushLog('rn', 'initBeforeLoad: clearStoreBeforeInit');
354
323
  store.dispatch(setLogoutState());
355
324
  store.dispatch(logout());
356
- await secureUserStorage().remove().catch(() => undefined);
325
+ await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove().catch(() => undefined);
357
326
  }
358
327
 
359
328
  await ensureScopedChatCache(config);
@@ -384,29 +353,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
384
353
  store.dispatch(setConfig(config));
385
354
  }
386
355
 
387
- // Rotate BEFORE the first XMPP connect. On the rotating backend
388
- // the xmpp password is a short-lived JWT that only the newest
389
- // rotation knows, and each rotation invalidates its predecessors
390
- // — so a snapshot's password (a host's cached `userLogin.user`,
391
- // a persisted session) is usually already dead at boot. Without
392
- // this, the first SASL attempt fails `not-authorized`, all three
393
- // bootstrap retries re-present the same dead password, and the
394
- // user dead-ends on the Connection error modal even though one
395
- // rotation away a perfectly good session existed. The rotation
396
- // also lands the fileToken pre-render, so secure media never
397
- // paints blank first. Quiet + deduped; when it can't rotate
398
- // (no refresh material, non-rotating backend) we just connect
399
- // with what the snapshot has, exactly as before.
400
- // jwtLogin is skipped: /users/client just minted fresh creds.
401
- let connectPassword = resolved.xmppPassword;
402
- if (config?.refreshTokens?.enabled && !config?.jwtLogin?.enabled) {
403
- const rotated = await refreshAuthTokensQuietly({ force: true });
404
- if (cancelled) {return;}
405
- if (rotated?.xmppPassword) {
406
- connectPassword = rotated.xmppPassword;
407
- }
408
- }
409
-
410
356
  // Kick off REST /chats/my; allRoomPresences below needs the
411
357
  // room list to be in redux, otherwise it joins 0 MUCs and the
412
358
  // user receives zero realtime messages until they manually tap
@@ -416,7 +362,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
416
362
 
417
363
  const c = await initializeClient(
418
364
  resolved.xmppUsername!,
419
- connectPassword,
365
+ resolved.xmppPassword,
420
366
  config?.xmppSettings
421
367
  );
422
368
  if (cancelled) {return;}
@@ -452,7 +398,6 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
452
398
  } catch (e) {
453
399
  devPushLog('warn', 'initBeforeLoad: allRoomPresences failed', e);
454
400
  }
455
- subscribeAllRoomsForPush((c as any).client, 'initBeforeLoad');
456
401
 
457
402
  store.dispatch(setStoreClient(c));
458
403
  completedBootstrapKeyRef.current = key;
@@ -597,14 +542,9 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
597
542
  // be re-marked visible on return. Lives in the effect closure (one per
598
543
  // client) — persists across the listener's many invocations.
599
544
  let visibleBeforeBackground: string | null = null;
600
- const suspendInBackground = !config?.xmppSettings?.keepAliveInBackground;
601
545
  const sub = AppState.addEventListener('change', (next) => {
602
546
  const c = client;
603
547
  if (next === 'active') {
604
- if (c?.isSuspended) {
605
- devPushLog('rn', 'AppState active: resuming suspended XMPP client');
606
- c.resume();
607
- }
608
548
  // Returned to foreground. If the socket died while backgrounded
609
549
  // (iOS suspends the WebSocket; long background kills it), the
610
550
  // status may still read 'online' until xmpp.js notices the dead
@@ -632,52 +572,22 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
632
572
  }
633
573
  // Going to background/inactive (sleep / app switcher / tray):
634
574
  if (!c) {return;}
635
- if (next === 'background' && suspendInBackground) {
636
- c.suspend().catch(() => undefined);
637
- }
638
575
  const state = store.getState();
639
576
  const rooms = state.rooms?.rooms;
640
577
  const visibleRoomJID = state.rooms?.visibleRoomJID || null;
641
578
  // Mark the open room "not visible" while backgrounded so messages
642
579
  // that arrive (or MAM-replay on reconnect) count as unread instead
643
580
  // of being silently treated as read — the "mounted == visible ==
644
- // read" gap. Stamp lastViewed=<the read boundary, if the user left
645
- // scrolled up, else the newest server-acked message>, not
646
- // Date.now(), as the read baseline: a device clock running ahead
647
- // would otherwise write a future marker that the forward-only
648
- // private-store merge can never correct again (bug #38). Then
649
- // clear visibility and flush that marker to the server private
650
- // store. Restored on the next 'active' transition above. Handled
651
- // here in the provider so consumers using the component as a
652
- // package get correct unread without reaching into the chat store
653
- // themselves.
654
- //
655
- // The read boundary (rooms.readBoundaries) is deliberately left
656
- // untouched here - MessageList normally stays mounted through a
657
- // simple background/foreground cycle, so its own scroll-tracking
658
- // ref (the only thing that could re-derive this value) is still
659
- // intact, and clearing the redux copy would desync the two. It's
660
- // only USED here for the one-shot stamp+flush, matching customer
661
- // #42: leaving (or backgrounding) a room while scrolled up must not
662
- // mark messages the user never reached as read.
581
+ // read" gap. Stamp lastViewed=now as the read baseline, clear
582
+ // visibility, then flush that marker to the server private store.
583
+ // Restored on the next 'active' transition above. Handled here in
584
+ // the provider so consumers using the component as a package get
585
+ // correct unread without reaching into the chat store themselves.
663
586
  visibleBeforeBackground = visibleRoomJID;
664
- let boundaryTs: number | null = null;
665
587
  if (visibleRoomJID) {
666
- boundaryTs = state.rooms?.readBoundaries?.[visibleRoomJID] ?? null;
667
- const readTs = getReadMarkerTimestamp(
668
- rooms?.[visibleRoomJID],
669
- state.roomHeapSlice,
670
- boundaryTs
588
+ store.dispatch(
589
+ setLastViewedTimestamp({ chatJID: visibleRoomJID, timestamp: Date.now() })
671
590
  );
672
- // Nothing to anchor to yet (no known messages, no prior marker)
673
- // - skip the local stamp rather than fall back to the device
674
- // clock. The flush below still runs so the visibility clear
675
- // isn't blocked on this.
676
- if (readTs > 0) {
677
- store.dispatch(
678
- setLastViewedTimestamp({ chatJID: visibleRoomJID, timestamp: readTs })
679
- );
680
- }
681
591
  // Drop the "New messages" divider for the room we're leaving so it
682
592
  // doesn't linger when the user comes back (mirrors ChatRoom's
683
593
  // unmount cleanup, which never runs while the pane stays mounted).
@@ -687,24 +597,13 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
687
597
  store.dispatch(clearVisibleRoom());
688
598
  }
689
599
  // Fire-and-forget — we're going to the background and don't
690
- // care about the resolution path. `visibleRoomTs` carries the same
691
- // boundary to the SERVER marker - without it the flush defaults to
692
- // "everything" for the visible room, overriding a correct smaller
693
- // local count.
694
- c.flushLastViewedToPrivateStoreStanza(rooms, {
695
- visibleRoomJID,
696
- // Clamped through the same helper as the local stamp above.
697
- visibleRoomTs: visibleRoomJID
698
- ? getFlushBoundaryTs(
699
- rooms?.[visibleRoomJID],
700
- state.roomHeapSlice,
701
- boundaryTs
702
- )
703
- : undefined,
704
- }).catch(() => {});
600
+ // care about the resolution path.
601
+ c.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID }).catch(
602
+ () => {}
603
+ );
705
604
  });
706
605
  return () => sub.remove();
707
- }, [client, config?.xmppSettings?.keepAliveInBackground]);
606
+ }, [client]);
708
607
 
709
608
  // -----------------------------------------------------------
710
609
  // Consumer visibility signal (`isVisible` prop). For hosts that keep
@@ -713,11 +612,11 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
713
612
  // "shown" from "hidden", so the unread middleware would keep the open
714
613
  // room's badge at 0 and messages arriving while you're elsewhere look
715
614
  // already-read. When the host passes `isVisible`, mirror the AppState
716
- // background/foreground handling: hidden → stamp lastViewed=<newest
717
- // server-acked message> + clear room visibility (so later messages
718
- // count) + flush; shown → restore visibility for the open room. Doing
719
- // it here means consumers never touch the chat store themselves.
720
- // (Undefined = host unmounts on hide, nothing to do.)
615
+ // background/foreground handling: hidden → stamp lastViewed=now + clear
616
+ // room visibility (so later messages count) + flush; shown → restore
617
+ // visibility for the open room. Doing it here means consumers never
618
+ // touch the chat store themselves. (Undefined = host unmounts on hide,
619
+ // nothing to do.)
721
620
  // -----------------------------------------------------------
722
621
  const chatWasVisibleRef = useRef(false);
723
622
  useEffect(() => {
@@ -732,30 +631,10 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
732
631
  store.dispatch(setVisibleRoom({ roomJID: activeRoomJID }));
733
632
  }
734
633
  } else {
735
- // The read boundary (rooms.readBoundaries) is USED for the stamp
736
- // and flush below but deliberately left in place - a host using
737
- // `isVisible` keeps <Chat> mounted while hidden, so MessageList's
738
- // own scroll-tracking ref is still intact and the redux copy must
739
- // stay in sync with it. Only consumed, never Date.now(): a fast
740
- // device clock would write a future marker that the forward-only
741
- // private-store merge could then never correct (bug #38). And
742
- // never "the newest acked message" unconditionally either - that
743
- // silently marks messages the user scrolled past and never reached
744
- // as read (bug #42, a regression of #33).
745
- const boundaryTs = activeRoomJID
746
- ? state.rooms?.readBoundaries?.[activeRoomJID] ?? null
747
- : null;
748
634
  if (wasVisible && activeRoomJID) {
749
- const readTs = getReadMarkerTimestamp(
750
- rooms?.[activeRoomJID],
751
- state.roomHeapSlice,
752
- boundaryTs
635
+ store.dispatch(
636
+ setLastViewedTimestamp({ chatJID: activeRoomJID, timestamp: Date.now() })
753
637
  );
754
- if (readTs > 0) {
755
- store.dispatch(
756
- setLastViewedTimestamp({ chatJID: activeRoomJID, timestamp: readTs })
757
- );
758
- }
759
638
  // Drop the "New messages" divider so it's gone when the user
760
639
  // returns to the chat (mirrors ChatRoom's unmount cleanup).
761
640
  store.dispatch(
@@ -766,19 +645,7 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
766
645
  store.dispatch(clearVisibleRoom());
767
646
  if (wasVisible && client?.flushLastViewedToPrivateStoreStanza) {
768
647
  client
769
- .flushLastViewedToPrivateStoreStanza(rooms, {
770
- visibleRoomJID: activeRoomJID,
771
- // Carry the same boundary to the SERVER marker - without it
772
- // the flush defaults to "everything" for the visible room.
773
- // Clamped exactly like the local stamp above.
774
- visibleRoomTs: activeRoomJID
775
- ? getFlushBoundaryTs(
776
- rooms?.[activeRoomJID],
777
- state.roomHeapSlice,
778
- boundaryTs
779
- )
780
- : undefined,
781
- })
648
+ .flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: activeRoomJID })
782
649
  .catch(() => {});
783
650
  }
784
651
  }
@@ -799,45 +666,26 @@ export const XmppProvider: React.FC<XmppProviderProps> = ({ children, config, is
799
666
  if (room.messages === lastMessagesRef) {return;}
800
667
  lastMessagesRef = room.messages;
801
668
 
802
- // getReadMarkerTimestamp (not a hand-rolled scan + Date.now()):
803
- // it excludes pending/optimistic messages, which carry the DEVICE
804
- // send time via `date` until the server echoes them back - a
805
- // manual scan without that exclusion could pick up a pending
806
- // message's device timestamp here and write a future marker the
807
- // same way a raw Date.now() would (bug #38). And when the user has
808
- // scrolled up (a boundary is set for this room), it clamps to that
809
- // boundary instead of the newest message - without this, every
810
- // incoming message while scrolled up advanced the marker to
811
- // "newest" regardless of scroll position, and the later, smaller
812
- // boundary write on leave was rejected by the forward-only
813
- // private-store merge, leaving 0 unread even after a restart
814
- // (customer #42, a regression of #33 reintroduced by #38).
815
- const boundaryTs = s.rooms?.readBoundaries?.[jid] ?? null;
816
- const newest = getReadMarkerTimestamp(room, s.roomHeapSlice, boundaryTs);
817
- if (!newest || newest <= lastStampedMs) {return;}
669
+ let newest = 0;
670
+ const list = room.messages || [];
671
+ for (const m of list) {
672
+ if (!m || m.id === 'delimiter-new') {continue;}
673
+ const ms = msgSortableMs(m);
674
+ if (ms > newest) {newest = ms;}
675
+ }
676
+ if (newest <= lastStampedMs) {return;}
818
677
  lastStampedMs = newest;
819
678
 
820
679
  store.dispatch(
821
- setLastViewedTimestamp({ chatJID: jid, timestamp: newest })
680
+ setLastViewedTimestamp({ chatJID: jid, timestamp: Date.now() })
822
681
  );
823
682
 
824
683
  if (flushTimer) {clearTimeout(flushTimer);}
825
684
  if (client?.flushLastViewedToPrivateStoreStanza) {
826
685
  flushTimer = setTimeout(() => {
827
- // Re-read fresh state rather than closing over `boundaryTs`:
828
- // the user may have scrolled back to the bottom (clearing the
829
- // boundary) in the 2s between the stamp and this flush, and
830
- // the flush should reflect that.
831
- const freshState = store.getState();
832
- const freshBoundaryTs = freshState.rooms?.readBoundaries?.[jid] ?? null;
833
686
  client
834
- .flushLastViewedToPrivateStoreStanza(freshState.rooms?.rooms, {
687
+ .flushLastViewedToPrivateStoreStanza(store.getState().rooms?.rooms, {
835
688
  visibleRoomJID: jid,
836
- visibleRoomTs: getFlushBoundaryTs(
837
- freshState.rooms?.rooms?.[jid],
838
- freshState.roomHeapSlice,
839
- freshBoundaryTs
840
- ),
841
689
  })
842
690
  .catch(() => {});
843
691
  }, 2000);
@@ -93,25 +93,6 @@ export const createMessageFromXml = async (
93
93
  const senderLocal = senderJID.includes('@')
94
94
  ? senderJID.split('@')[0]
95
95
  : senderJID;
96
-
97
- // Bug #41 root cause: the resource of the MUC `from` (room@conference/
98
- // occupant-id) is the SAME field getDataFromXml uses to derive
99
- // `user.id` for live messages and for the wrapped MAM convention
100
- // (getHistory.xmpp.ts) - it's stamped by the server itself when the
101
- // sender joined the room, so it's always present and always correct.
102
- // The positional convention (onMessageHistory's MAM catch-up path)
103
- // never called getDataFromXml, so it fell back to splitting the
104
- // sender-supplied `<data senderJID>` attr on '@' instead - usually the
105
- // same value, but WRONG (picks up the room's own id, not the
106
- // sender's) whenever senderJID is absent from the stanza, and simply a
107
- // different derivation than the live path even when it happens to
108
- // agree. Prefer the resource-of-`from` here too so every path that
109
- // reaches this function resolves the same sender identity the same
110
- // way, instead of MAM catch-up rows needing a later correction once
111
- // the "official" fetch lands.
112
- const xmppFrom = (merged.xmppFrom || '').toString();
113
- const fromResource = xmppFrom.includes('/') ? xmppFrom.split('/')[1] : '';
114
-
115
96
  const composed = [firstName, lastName].filter(Boolean).join(' ').trim();
116
97
  const existingName = String(merged?.user?.name || '').trim();
117
98
  const resolvedName =
@@ -126,7 +107,7 @@ export const createMessageFromXml = async (
126
107
  ...merged,
127
108
  user: {
128
109
  ...(merged.user || {}),
129
- id: merged?.user?.id || fromResource || senderLocal,
110
+ id: merged?.user?.id || senderLocal,
130
111
  name: resolvedName,
131
112
  firstName: firstName || merged?.user?.firstName,
132
113
  lastName: lastName || merged?.user?.lastName,
@@ -3,7 +3,7 @@ import { store } from '../roomStore';
3
3
  import { logout } from '../roomStore/chatSettingsSlice';
4
4
  import { setLogoutState } from '../roomStore/roomsSlice';
5
5
  import { asyncLocalStorage } from '../hooks/useLocalStorage';
6
- import { secureUserStorage } from './secureUserStorage';
6
+ import { localStorageConstants } from './constants/LOCAL_STORAGE';
7
7
  import { clearRoomsRestCache } from '../networking/api-requests/rooms.api';
8
8
  import { clearPersistedState } from '../roomStore/persistence';
9
9
  import {
@@ -53,7 +53,7 @@ export async function ensureScopedChatCache(config?: IConfig): Promise<void> {
53
53
  clearRoomsRestCache();
54
54
  store.dispatch(setLogoutState());
55
55
  store.dispatch(logout());
56
- await secureUserStorage().remove();
56
+ await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove();
57
57
  await clearPersistedState();
58
58
  }
59
59
 
@@ -1,6 +1,13 @@
1
1
  import { Element } from 'ltx';
2
2
  import { Iso639_1Codes, IUser } from '../types/types';
3
3
  import { transformArrayToObject } from './transformTranslatations';
4
+ import { normalizeXmppUsername } from './xmppUsername';
5
+
6
+ const getLocalpartFromJid = (jid?: string): string | undefined => {
7
+ const value = String(jid || '').trim();
8
+ if (!value) {return undefined;}
9
+ return value.split('@')[0] || undefined;
10
+ };
4
11
 
5
12
  // Tolerant JSON parse: a malformed `translations` attr must not reject the
6
13
  // whole stanza (which would silently drop the message). Mirrors the web
@@ -64,7 +71,7 @@ export const getDataFromXml = async (stanza: Element): Promise<DataXml | undefin
64
71
 
65
72
  const xmppId = fullData?.attrs.id;
66
73
  const xmppFrom = fullData?.attrs?.from;
67
- const [roomJid, userWallet] = (xmppFrom || '').split('/');
74
+ const [roomJid, userWalletFromResource] = (xmppFrom || '').split('/');
68
75
  let id =
69
76
  stanza.getChild('result')?.attrs.id ||
70
77
  extractTimestamp(stanza?.getChild('stanza-id')?.attrs?.id, stanza);
@@ -93,6 +100,23 @@ export const getDataFromXml = async (stanza: Element): Promise<DataXml | undefin
93
100
  const data = fullData?.getChild('data') || stanza?.getChild('data');
94
101
  const photoURL = data?.attrs?.photo;
95
102
 
103
+ // Sender identity, resolved the way the web SDK does it: the occupant
104
+ // RESOURCE of `from` first, then the localpart of `<data senderJID>`.
105
+ //
106
+ // RN only had the first. The translate-tagged send path arrives with no
107
+ // occupant resource and no senderJID either, so `user.id` came out
108
+ // undefined and every downstream fallback landed on the bare room jid's
109
+ // localpart — which for a 1:1 room is `<appId>_<userA>-<appId>_<userB>`.
110
+ // That composite id is what got rendered as the sender's name.
111
+ //
112
+ // normalizeXmppUsername collapses a doubled `<appId>_` prefix so the key
113
+ // matches what usersSet is indexed by.
114
+ const rawUserWallet =
115
+ userWalletFromResource ||
116
+ getLocalpartFromJid(data?.attrs?.senderJID) ||
117
+ undefined;
118
+ const userWallet = normalizeXmppUsername(rawUserWallet) || rawUserWallet;
119
+
96
120
  const user = {
97
121
  id: userWallet,
98
122
  photoURL,
@@ -1,11 +1,7 @@
1
1
  import { AppState } from 'react-native';
2
2
  import XmppClient from '../networking/xmppClient';
3
3
  import { store } from '../roomStore';
4
- import {
5
- applyRoomsPreloadBatch,
6
- setUnreadSyncing,
7
- RUNTIME_MESSAGE_LIMIT,
8
- } from '../roomStore/roomsSlice';
4
+ import { applyRoomsPreloadBatch, setUnreadSyncing } from '../roomStore/roomsSlice';
9
5
  import { IMessage, IRoom } from '../types/types';
10
6
 
11
7
  interface HistoryPreloadSchedulerOptions {
@@ -34,13 +30,6 @@ const DEFAULT_CONCURRENCY = 3;
34
30
  // `mergeHistoryIntoCache` rarely has to fall back to clear-and-replace.
35
31
  const DEFAULT_PAGE_SIZE = 20;
36
32
  const DEFAULT_RETRY_LIMIT = 2;
37
- // When the first page is entirely unread (every fetched message is newer
38
- // than `lastViewedTimestamp`), the true unread count could be far bigger
39
- // than `pageSize` — `useUnread()` only ever sees what's been loaded. Page
40
- // further back, up to this many extra fetches, until we either find the
41
- // boundary or give up (`unreadCapped` then stays true so callers at least
42
- // know the count is a floor, not exact). Customer-reported #34.
43
- const MAX_UNREAD_CATCHUP_PAGES = 8;
44
33
 
45
34
  const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
46
35
 
@@ -237,75 +226,9 @@ export const runHistoryPreloadScheduler = async (
237
226
  }
238
227
 
239
228
  const nextRoom = store.getState().rooms.rooms[item.jid];
240
- let combined: IMessage[] = fetchedMessages || [];
241
- const lastViewed = Number(nextRoom?.lastViewedTimestamp) || 0;
242
-
243
- // The first page was entirely unread — keep paging older until
244
- // we find a message at/before `lastViewedTimestamp` (the true
245
- // boundary) or run out of catch-up budget, so the count isn't
246
- // silently truncated at `pageSize`.
247
- if (lastViewed > 0 && computeUnreadCapped(nextRoom, combined, pageSize)) {
248
- let lastPageLen = combined.length;
249
- let extraPages = 0;
250
- while (
251
- extraPages < MAX_UNREAD_CATCHUP_PAGES &&
252
- lastPageLen >= pageSize &&
253
- !signal?.aborted
254
- ) {
255
- const oldestId = combined.reduce<number | null>((min, m) => {
256
- const idNum = Number((m as any)?.id);
257
- if (!Number.isFinite(idNum)) {return min;}
258
- return min === null || idNum < min ? idNum : min;
259
- }, null);
260
- if (oldestId === null) {break;}
261
-
262
- let older: IMessage[] | undefined;
263
- try {
264
- older = await client.getHistoryStanza(
265
- item.jid,
266
- pageSize,
267
- oldestId,
268
- undefined,
269
- {
270
- coalesceRoom: true,
271
- skipIfPreloaded: !forceReload,
272
- source: 'background',
273
- }
274
- );
275
- } catch {
276
- break;
277
- }
278
- if (!older || !older.length) {break;}
279
-
280
- combined = [...older, ...combined];
281
- lastPageLen = older.length;
282
- extraPages++;
283
-
284
- const oldestTs = combined.reduce<number>((minTs, m) => {
285
- const ts = messageTimestamp(m);
286
- return ts > 0 ? Math.min(minTs, ts) : minTs;
287
- }, Number.MAX_SAFE_INTEGER);
288
- if (oldestTs !== Number.MAX_SAFE_INTEGER && oldestTs <= lastViewed) {
289
- break;
290
- }
291
- }
292
- }
293
-
294
- // `mergeHistoryIntoCache` (roomsSlice) caps whatever we dispatch
295
- // here to the newest RUNTIME_MESSAGE_LIMIT messages before it
296
- // ever reaches `unreadMiddleware` — so a catch-up fetch that
297
- // pulled the true boundary can still have it silently dropped
298
- // by that cap, leaving a falsely-confident `unreadCapped:false`
299
- // (bug #34's failure mode again, just one layer downstream).
300
- // Simulate that cap here so the flag reflects what will
301
- // actually survive, not just what this fetch retrieved.
302
- const simulatedStored =
303
- combined.length > RUNTIME_MESSAGE_LIMIT
304
- ? combined.slice(-RUNTIME_MESSAGE_LIMIT)
305
- : combined;
306
229
  const unreadCapped = computeUnreadCapped(
307
230
  nextRoom,
308
- simulatedStored,
231
+ fetchedMessages || [],
309
232
  pageSize
310
233
  );
311
234
 
@@ -314,7 +237,7 @@ export const runHistoryPreloadScheduler = async (
314
237
  rooms: [
315
238
  {
316
239
  jid: item.jid,
317
- messages: combined,
240
+ messages: fetchedMessages || [],
318
241
  unreadCapped,
319
242
  historyPreloadState: 'done',
320
243
  },