@ethora/chat-component-rn 26.7.9 → 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 (652) hide show
  1. package/CHANGELOG.md +0 -93
  2. package/README.md +10 -33
  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 +13 -101
  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 +54 -128
  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 +13 -0
  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/mimeToExtension.js +14 -6
  106. package/lib/commonjs/helpers/mimeToExtension.js.map +1 -1
  107. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +17 -130
  108. package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  109. package/lib/commonjs/helpers/resolveLangSource.js +38 -0
  110. package/lib/commonjs/helpers/resolveLangSource.js.map +1 -0
  111. package/lib/commonjs/helpers/xmppUsername.js +39 -0
  112. package/lib/commonjs/helpers/xmppUsername.js.map +1 -0
  113. package/lib/commonjs/hooks/useChatRoomFocus.js +8 -17
  114. package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -1
  115. package/lib/commonjs/hooks/useChatWrapperInit.js +14 -32
  116. package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
  117. package/lib/commonjs/hooks/useComposing.js +0 -27
  118. package/lib/commonjs/hooks/useComposing.js.map +1 -1
  119. package/lib/commonjs/hooks/useLogout.js +7 -15
  120. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  121. package/lib/commonjs/hooks/usePendingNotification.js +11 -8
  122. package/lib/commonjs/hooks/usePendingNotification.js.map +1 -1
  123. package/lib/commonjs/hooks/useSendMessage.js +14 -50
  124. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  125. package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -6
  126. package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
  127. package/lib/commonjs/i18n/strings.js +133 -121
  128. package/lib/commonjs/i18n/strings.js.map +1 -1
  129. package/lib/commonjs/i18n/useT.js +1 -1
  130. package/lib/commonjs/main.js +0 -44
  131. package/lib/commonjs/main.js.map +1 -1
  132. package/lib/commonjs/networking/api-requests/auth.api.js +60 -134
  133. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  134. package/lib/commonjs/networking/api-requests/roomMembers.api.js +1 -1
  135. package/lib/commonjs/networking/api-requests/roomMembers.api.js.map +1 -1
  136. package/lib/commonjs/networking/api-requests/rooms.api.js +9 -9
  137. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  138. package/lib/commonjs/networking/api-requests/user.api.js +9 -68
  139. package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
  140. package/lib/commonjs/networking/apiClient.js +112 -62
  141. package/lib/commonjs/networking/apiClient.js.map +1 -1
  142. package/lib/commonjs/networking/stanzaHandlers.js +51 -93
  143. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  144. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
  145. package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  146. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +1 -8
  147. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  148. package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
  149. package/lib/commonjs/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
  150. package/lib/commonjs/networking/xmppClient.js +8 -124
  151. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  152. package/lib/commonjs/roomStore/chatSettingsSlice.js +7 -26
  153. package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
  154. package/lib/commonjs/roomStore/index.js +2 -35
  155. package/lib/commonjs/roomStore/index.js.map +1 -1
  156. package/lib/commonjs/roomStore/persistence.js +39 -226
  157. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  158. package/lib/commonjs/roomStore/roomsSlice.js +8 -87
  159. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  160. package/lib/commonjs/services/pushSubscriptionService.js +13 -15
  161. package/lib/commonjs/services/pushSubscriptionService.js.map +1 -1
  162. package/lib/commonjs/version.js +3 -1
  163. package/lib/commonjs/version.js.map +1 -1
  164. package/lib/module/assets/icons.js +1 -6
  165. package/lib/module/assets/icons.js.map +1 -1
  166. package/lib/module/components/AuthForms/Login.js +4 -4
  167. package/lib/module/components/AuthForms/Login.js.map +1 -1
  168. package/lib/module/components/Header/HeaderRoomList.js +7 -26
  169. package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
  170. package/lib/module/components/MainComponents/ChatHeader.js +3 -9
  171. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  172. package/lib/module/components/MainComponents/ChatRoom.js +14 -102
  173. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  174. package/lib/module/components/MainComponents/ChatWrapper.js +40 -36
  175. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  176. package/lib/module/components/MainComponents/LoginWrapper.js +1 -2
  177. package/lib/module/components/MainComponents/LoginWrapper.js.map +1 -1
  178. package/lib/module/components/MainComponents/MediaMessage.js +10 -30
  179. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  180. package/lib/module/components/MainComponents/MessageContainer.js +1 -5
  181. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  182. package/lib/module/components/MainComponents/MessageList.js +5 -13
  183. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  184. package/lib/module/components/MainComponents/ProfileImagePlaceholder.js +13 -14
  185. package/lib/module/components/MainComponents/ProfileImagePlaceholder.js.map +1 -1
  186. package/lib/module/components/MainComponents/ReduxWrapper.js +26 -5
  187. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  188. package/lib/module/components/MainComponents/RoomList.js +35 -207
  189. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  190. package/lib/module/components/Menu/HeaderRoomListMenu.js +101 -319
  191. package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
  192. package/lib/module/components/MessageBubble/MessageTranslate.js +16 -7
  193. package/lib/module/components/MessageBubble/MessageTranslate.js.map +1 -1
  194. package/lib/module/components/Modals/AttachSheet/AttachSheet.js +115 -311
  195. package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  196. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +219 -559
  197. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  198. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js +9 -7
  199. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
  200. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +28 -70
  201. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  202. package/lib/module/components/Modals/FilePreviewModal/PdfView.js +1 -2
  203. package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  204. package/lib/module/components/Modals/Modal/Modal.js +1 -9
  205. package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
  206. package/lib/module/components/Modals/NewChatModal/ModalContent.js +1 -2
  207. package/lib/module/components/Modals/NewChatModal/ModalContent.js.map +1 -1
  208. package/lib/module/components/Modals/NewChatModal/NewChatModal.js +111 -208
  209. package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  210. package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js +0 -8
  211. package/lib/module/components/Modals/NewChatModal/UpdNewChatModal.js.map +1 -1
  212. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +2 -4
  213. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  214. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js +23 -9
  215. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
  216. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +248 -509
  217. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  218. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +48 -76
  219. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  220. package/lib/module/components/Modals/styledModalComponents.js +2 -9
  221. package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
  222. package/lib/module/components/RoomComponents/ChatRoomItem.js +40 -24
  223. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  224. package/lib/module/components/RoomComponents/styled/LastMessageFile.js +3 -22
  225. package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  226. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +3 -17
  227. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  228. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +3 -17
  229. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  230. package/lib/module/components/VideoCalls/VideoCallSession.js +3 -6
  231. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  232. package/lib/module/components/styled/AudioMessage.js +1 -2
  233. package/lib/module/components/styled/AudioMessage.js.map +1 -1
  234. package/lib/module/components/styled/DateLabel.js +10 -3
  235. package/lib/module/components/styled/DateLabel.js.map +1 -1
  236. package/lib/module/components/styled/MessageImage.js +9 -37
  237. package/lib/module/components/styled/MessageImage.js.map +1 -1
  238. package/lib/module/components/styled/NewMessageLabel.js +3 -1
  239. package/lib/module/components/styled/NewMessageLabel.js.map +1 -1
  240. package/lib/module/components/styled/SendInput.js +18 -87
  241. package/lib/module/components/styled/SendInput.js.map +1 -1
  242. package/lib/module/components/styled/StyledComponents.js +3 -9
  243. package/lib/module/components/styled/StyledComponents.js.map +1 -1
  244. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +4 -11
  245. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  246. package/lib/module/components/styled/UnsupportedType.js +4 -14
  247. package/lib/module/components/styled/UnsupportedType.js.map +1 -1
  248. package/lib/module/components/styled/VideoMessage.js +62 -120
  249. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  250. package/lib/module/context/xmppProvider.js +55 -128
  251. package/lib/module/context/xmppProvider.js.map +1 -1
  252. package/lib/module/helpers/createMessageFromXml.js +1 -19
  253. package/lib/module/helpers/createMessageFromXml.js.map +1 -1
  254. package/lib/module/helpers/ensureScopedChatCache.js +2 -2
  255. package/lib/module/helpers/ensureScopedChatCache.js.map +1 -1
  256. package/lib/module/helpers/getDataFromXml.js +23 -1
  257. package/lib/module/helpers/getDataFromXml.js.map +1 -1
  258. package/lib/module/helpers/historyPreloadScheduler.js +3 -66
  259. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  260. package/lib/module/helpers/initXmppRooms.js +8 -14
  261. package/lib/module/helpers/initXmppRooms.js.map +1 -1
  262. package/lib/module/helpers/insertMessageWithDelimiter.js +13 -0
  263. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  264. package/lib/module/helpers/isUnresolvedSenderId.js +6 -1
  265. package/lib/module/helpers/isUnresolvedSenderId.js.map +1 -1
  266. package/lib/module/helpers/mimeToExtension.js +13 -6
  267. package/lib/module/helpers/mimeToExtension.js.map +1 -1
  268. package/lib/module/helpers/resolveInitBeforeLoadUser.js +16 -130
  269. package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
  270. package/lib/module/helpers/resolveLangSource.js +32 -0
  271. package/lib/module/helpers/resolveLangSource.js.map +1 -0
  272. package/lib/module/helpers/xmppUsername.js +35 -0
  273. package/lib/module/helpers/xmppUsername.js.map +1 -0
  274. package/lib/module/hooks/useChatRoomFocus.js +8 -17
  275. package/lib/module/hooks/useChatRoomFocus.js.map +1 -1
  276. package/lib/module/hooks/useChatWrapperInit.js +14 -32
  277. package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
  278. package/lib/module/hooks/useComposing.js +1 -28
  279. package/lib/module/hooks/useComposing.js.map +1 -1
  280. package/lib/module/hooks/useLogout.js +7 -15
  281. package/lib/module/hooks/useLogout.js.map +1 -1
  282. package/lib/module/hooks/usePendingNotification.js +11 -8
  283. package/lib/module/hooks/usePendingNotification.js.map +1 -1
  284. package/lib/module/hooks/useSendMessage.js +16 -52
  285. package/lib/module/hooks/useSendMessage.js.map +1 -1
  286. package/lib/module/hooks/useUnreadMessagesCounter.js +1 -6
  287. package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
  288. package/lib/module/i18n/strings.js +133 -121
  289. package/lib/module/i18n/strings.js.map +1 -1
  290. package/lib/module/i18n/useT.js +1 -1
  291. package/lib/module/main.js +2 -14
  292. package/lib/module/main.js.map +1 -1
  293. package/lib/module/networking/api-requests/auth.api.js +59 -131
  294. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  295. package/lib/module/networking/api-requests/roomMembers.api.js +1 -1
  296. package/lib/module/networking/api-requests/roomMembers.api.js.map +1 -1
  297. package/lib/module/networking/api-requests/rooms.api.js +9 -9
  298. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  299. package/lib/module/networking/api-requests/user.api.js +7 -64
  300. package/lib/module/networking/api-requests/user.api.js.map +1 -1
  301. package/lib/module/networking/apiClient.js +113 -61
  302. package/lib/module/networking/apiClient.js.map +1 -1
  303. package/lib/module/networking/stanzaHandlers.js +52 -94
  304. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  305. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js +8 -46
  306. package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
  307. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +1 -8
  308. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  309. package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js +1 -5
  310. package/lib/module/networking/xmpp/subscribeToRoomMessages.xmpp.js.map +1 -1
  311. package/lib/module/networking/xmppClient.js +8 -124
  312. package/lib/module/networking/xmppClient.js.map +1 -1
  313. package/lib/module/roomStore/chatSettingsSlice.js +7 -26
  314. package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
  315. package/lib/module/roomStore/index.js +4 -37
  316. package/lib/module/roomStore/index.js.map +1 -1
  317. package/lib/module/roomStore/persistence.js +38 -223
  318. package/lib/module/roomStore/persistence.js.map +1 -1
  319. package/lib/module/roomStore/roomsSlice.js +7 -86
  320. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  321. package/lib/module/services/pushSubscriptionService.js +13 -15
  322. package/lib/module/services/pushSubscriptionService.js.map +1 -1
  323. package/lib/module/version.js +3 -1
  324. package/lib/module/version.js.map +1 -1
  325. package/lib/typescript/assets/icons.d.ts +0 -16
  326. package/lib/typescript/assets/icons.d.ts.map +1 -1
  327. package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
  328. package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
  329. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  330. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  331. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  332. package/lib/typescript/components/MainComponents/LoginWrapper.d.ts.map +1 -1
  333. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  334. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  335. package/lib/typescript/components/MainComponents/MessageList.d.ts +1 -10
  336. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  337. package/lib/typescript/components/MainComponents/ProfileImagePlaceholder.d.ts.map +1 -1
  338. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  339. package/lib/typescript/components/MainComponents/RoomList.d.ts +0 -7
  340. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  341. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts +0 -3
  342. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
  343. package/lib/typescript/components/MessageBubble/MessageTranslate.d.ts.map +1 -1
  344. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts +0 -9
  345. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
  346. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts +0 -10
  347. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  348. package/lib/typescript/components/Modals/ChatProfileModal/DeleteChatModal.d.ts.map +1 -1
  349. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  350. package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
  351. package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
  352. package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts +2 -4
  353. package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts.map +1 -1
  354. package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts +1 -1
  355. package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts.map +1 -1
  356. package/lib/typescript/components/Modals/NewChatModal/UpdNewChatModal.d.ts.map +1 -1
  357. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts +1 -6
  358. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
  359. package/lib/typescript/components/Modals/UserProfileModal/EditUserModal.d.ts.map +1 -1
  360. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts +0 -16
  361. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  362. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts +0 -1
  363. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
  364. package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
  365. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  366. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts +1 -1
  367. package/lib/typescript/components/RoomComponents/styled/LastMessageFile.d.ts.map +1 -1
  368. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts +1 -1
  369. package/lib/typescript/components/RoomComponents/styled/LastMessagePhoto.d.ts.map +1 -1
  370. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts +1 -1
  371. package/lib/typescript/components/RoomComponents/styled/LastMessageVideo.d.ts.map +1 -1
  372. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  373. package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
  374. package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
  375. package/lib/typescript/components/styled/MessageImage.d.ts +0 -14
  376. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  377. package/lib/typescript/components/styled/NewMessageLabel.d.ts.map +1 -1
  378. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  379. package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
  380. package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
  381. package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
  382. package/lib/typescript/components/styled/VideoMessage.d.ts +0 -8
  383. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  384. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  385. package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
  386. package/lib/typescript/helpers/getDataFromXml.d.ts.map +1 -1
  387. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  388. package/lib/typescript/helpers/initXmppRooms.d.ts.map +1 -1
  389. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  390. package/lib/typescript/helpers/isUnresolvedSenderId.d.ts.map +1 -1
  391. package/lib/typescript/helpers/mimeToExtension.d.ts +15 -0
  392. package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -1
  393. package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
  394. package/lib/typescript/helpers/resolveLangSource.d.ts +30 -0
  395. package/lib/typescript/helpers/resolveLangSource.d.ts.map +1 -0
  396. package/lib/typescript/helpers/xmppUsername.d.ts +13 -0
  397. package/lib/typescript/helpers/xmppUsername.d.ts.map +1 -0
  398. package/lib/typescript/hooks/useChatRoomFocus.d.ts +1 -4
  399. package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -1
  400. package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
  401. package/lib/typescript/hooks/useComposing.d.ts.map +1 -1
  402. package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
  403. package/lib/typescript/hooks/usePendingNotification.d.ts.map +1 -1
  404. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  405. package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts +0 -1
  406. package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts.map +1 -1
  407. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  408. package/lib/typescript/i18n/useT.d.ts +1 -1
  409. package/lib/typescript/main.d.ts +2 -9
  410. package/lib/typescript/main.d.ts.map +1 -1
  411. package/lib/typescript/networking/api-requests/auth.api.d.ts +1 -3
  412. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  413. package/lib/typescript/networking/api-requests/user.api.d.ts +0 -27
  414. package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
  415. package/lib/typescript/networking/apiClient.d.ts +6 -12
  416. package/lib/typescript/networking/apiClient.d.ts.map +1 -1
  417. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  418. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts +2 -10
  419. package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts.map +1 -1
  420. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  421. package/lib/typescript/networking/xmpp/subscribeToRoomMessages.xmpp.d.ts.map +1 -1
  422. package/lib/typescript/networking/xmppClient.d.ts +0 -14
  423. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  424. package/lib/typescript/roomStore/chatSettingsSlice.d.ts +0 -16
  425. package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
  426. package/lib/typescript/roomStore/index.d.ts.map +1 -1
  427. package/lib/typescript/roomStore/persistence.d.ts +1 -18
  428. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  429. package/lib/typescript/roomStore/roomsSlice.d.ts +1 -14
  430. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  431. package/lib/typescript/services/pushSubscriptionService.d.ts +1 -1
  432. package/lib/typescript/services/pushSubscriptionService.d.ts.map +1 -1
  433. package/lib/typescript/types/types.d.ts +5 -49
  434. package/lib/typescript/types/types.d.ts.map +1 -1
  435. package/lib/typescript/version.d.ts +1 -1
  436. package/lib/typescript/version.d.ts.map +1 -1
  437. package/package.json +29 -41
  438. package/src/assets/icons.tsx +9 -48
  439. package/src/components/AuthForms/Login.tsx +3 -3
  440. package/src/components/Header/HeaderRoomList.tsx +6 -24
  441. package/src/components/MainComponents/ChatHeader.tsx +3 -9
  442. package/src/components/MainComponents/ChatRoom.tsx +16 -111
  443. package/src/components/MainComponents/ChatWrapper.tsx +53 -36
  444. package/src/components/MainComponents/LoginWrapper.tsx +0 -1
  445. package/src/components/MainComponents/MediaMessage.tsx +8 -26
  446. package/src/components/MainComponents/MessageContainer.tsx +1 -5
  447. package/src/components/MainComponents/MessageList.tsx +4 -23
  448. package/src/components/MainComponents/ProfileImagePlaceholder.tsx +14 -21
  449. package/src/components/MainComponents/ReduxWrapper.tsx +18 -1
  450. package/src/components/MainComponents/RoomList.tsx +39 -236
  451. package/src/components/Menu/HeaderRoomListMenu.tsx +75 -328
  452. package/src/components/MessageBubble/MessageTranslate.tsx +17 -12
  453. package/src/components/Modals/AttachSheet/AttachSheet.tsx +99 -331
  454. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +293 -611
  455. package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +9 -7
  456. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +38 -79
  457. package/src/components/Modals/FilePreviewModal/PdfView.tsx +1 -2
  458. package/src/components/Modals/Modal/Modal.tsx +0 -7
  459. package/src/components/Modals/NewChatModal/ModalContent.tsx +3 -6
  460. package/src/components/Modals/NewChatModal/NewChatModal.tsx +126 -223
  461. package/src/components/Modals/NewChatModal/UpdNewChatModal.tsx +1 -12
  462. package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +4 -14
  463. package/src/components/Modals/UserProfileModal/EditUserModal.tsx +25 -9
  464. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +307 -617
  465. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +58 -75
  466. package/src/components/Modals/styledModalComponents.tsx +2 -9
  467. package/src/components/RoomComponents/ChatRoomItem.tsx +50 -21
  468. package/src/components/RoomComponents/styled/LastMessageFile.tsx +4 -28
  469. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +3 -18
  470. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +3 -18
  471. package/src/components/VideoCalls/VideoCallSession.tsx +3 -8
  472. package/src/components/styled/AudioMessage.tsx +1 -2
  473. package/src/components/styled/DateLabel.tsx +10 -3
  474. package/src/components/styled/MessageImage.tsx +7 -53
  475. package/src/components/styled/NewMessageLabel.tsx +3 -1
  476. package/src/components/styled/SendInput.tsx +18 -91
  477. package/src/components/styled/StyledComponents.ts +3 -9
  478. package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +4 -11
  479. package/src/components/styled/UnsupportedType.tsx +4 -14
  480. package/src/components/styled/VideoMessage.tsx +54 -131
  481. package/src/context/xmppProvider.tsx +51 -134
  482. package/src/helpers/createMessageFromXml.ts +1 -20
  483. package/src/helpers/ensureScopedChatCache.ts +2 -2
  484. package/src/helpers/getDataFromXml.ts +25 -1
  485. package/src/helpers/historyPreloadScheduler.ts +3 -80
  486. package/src/helpers/initXmppRooms.tsx +10 -14
  487. package/src/helpers/insertMessageWithDelimiter.ts +13 -0
  488. package/src/helpers/isUnresolvedSenderId.ts +9 -1
  489. package/src/helpers/mimeToExtension.ts +22 -6
  490. package/src/helpers/resolveInitBeforeLoadUser.ts +18 -125
  491. package/src/helpers/resolveLangSource.ts +40 -0
  492. package/src/helpers/xmppUsername.ts +38 -0
  493. package/src/hooks/useChatRoomFocus.ts +5 -14
  494. package/src/hooks/useChatWrapperInit.ts +16 -32
  495. package/src/hooks/useComposing.tsx +1 -37
  496. package/src/hooks/useLogout.tsx +9 -15
  497. package/src/hooks/usePendingNotification.ts +11 -5
  498. package/src/hooks/useSendMessage.tsx +15 -60
  499. package/src/hooks/useUnreadMessagesCounter.ts +0 -11
  500. package/src/i18n/strings.ts +133 -121
  501. package/src/i18n/useT.ts +1 -1
  502. package/src/main.ts +2 -26
  503. package/src/networking/api-requests/auth.api.ts +48 -156
  504. package/src/networking/api-requests/roomMembers.api.ts +1 -1
  505. package/src/networking/api-requests/rooms.api.ts +9 -9
  506. package/src/networking/api-requests/user.api.ts +7 -79
  507. package/src/networking/apiClient.ts +123 -68
  508. package/src/networking/stanzaHandlers.ts +51 -92
  509. package/src/networking/xmpp/flushLastViewedToPrivateStore.ts +10 -71
  510. package/src/networking/xmpp/presenceInRoom.xmpp.ts +1 -6
  511. package/src/networking/xmpp/subscribeToRoomMessages.xmpp.ts +1 -12
  512. package/src/networking/xmppClient.ts +9 -141
  513. package/src/roomStore/chatSettingsSlice.ts +10 -34
  514. package/src/roomStore/index.ts +4 -40
  515. package/src/roomStore/persistence.ts +40 -234
  516. package/src/roomStore/roomsSlice.ts +7 -87
  517. package/src/services/pushSubscriptionService.ts +13 -18
  518. package/src/types/types.ts +5 -58
  519. package/src/version.ts +3 -1
  520. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +0 -226
  521. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
  522. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js +0 -556
  523. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
  524. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js +0 -210
  525. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
  526. package/lib/commonjs/helpers/getChatBackground.js +0 -23
  527. package/lib/commonjs/helpers/getChatBackground.js.map +0 -1
  528. package/lib/commonjs/helpers/getDisplayFileName.js +0 -79
  529. package/lib/commonjs/helpers/getDisplayFileName.js.map +0 -1
  530. package/lib/commonjs/helpers/getServerReadTimestamp.js +0 -125
  531. package/lib/commonjs/helpers/getServerReadTimestamp.js.map +0 -1
  532. package/lib/commonjs/helpers/isOwnMessage.js +0 -75
  533. package/lib/commonjs/helpers/isOwnMessage.js.map +0 -1
  534. package/lib/commonjs/helpers/mediaLibraryRuntime.js +0 -31
  535. package/lib/commonjs/helpers/mediaLibraryRuntime.js.map +0 -1
  536. package/lib/commonjs/helpers/persistCrypto.js +0 -122
  537. package/lib/commonjs/helpers/persistCrypto.js.map +0 -1
  538. package/lib/commonjs/helpers/pickImageAsset.js +0 -68
  539. package/lib/commonjs/helpers/pickImageAsset.js.map +0 -1
  540. package/lib/commonjs/helpers/pushPayload.js +0 -71
  541. package/lib/commonjs/helpers/pushPayload.js.map +0 -1
  542. package/lib/commonjs/helpers/secureFileUrl.js +0 -101
  543. package/lib/commonjs/helpers/secureFileUrl.js.map +0 -1
  544. package/lib/commonjs/helpers/secureKeyValue.js +0 -83
  545. package/lib/commonjs/helpers/secureKeyValue.js.map +0 -1
  546. package/lib/commonjs/helpers/secureStoreRuntime.js +0 -59
  547. package/lib/commonjs/helpers/secureStoreRuntime.js.map +0 -1
  548. package/lib/commonjs/helpers/secureUserStorage.js +0 -75
  549. package/lib/commonjs/helpers/secureUserStorage.js.map +0 -1
  550. package/lib/commonjs/helpers/shallowEqual.js +0 -36
  551. package/lib/commonjs/helpers/shallowEqual.js.map +0 -1
  552. package/lib/commonjs/helpers/sheetGestures.js +0 -32
  553. package/lib/commonjs/helpers/sheetGestures.js.map +0 -1
  554. package/lib/commonjs/hooks/useFileToken.js +0 -10
  555. package/lib/commonjs/hooks/useFileToken.js.map +0 -1
  556. package/lib/commonjs/networking/authRefresh.js +0 -332
  557. package/lib/commonjs/networking/authRefresh.js.map +0 -1
  558. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +0 -223
  559. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +0 -1
  560. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js +0 -548
  561. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js.map +0 -1
  562. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js +0 -205
  563. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js.map +0 -1
  564. package/lib/module/helpers/getChatBackground.js +0 -18
  565. package/lib/module/helpers/getChatBackground.js.map +0 -1
  566. package/lib/module/helpers/getDisplayFileName.js +0 -73
  567. package/lib/module/helpers/getDisplayFileName.js.map +0 -1
  568. package/lib/module/helpers/getServerReadTimestamp.js +0 -120
  569. package/lib/module/helpers/getServerReadTimestamp.js.map +0 -1
  570. package/lib/module/helpers/isOwnMessage.js +0 -70
  571. package/lib/module/helpers/isOwnMessage.js.map +0 -1
  572. package/lib/module/helpers/mediaLibraryRuntime.js +0 -25
  573. package/lib/module/helpers/mediaLibraryRuntime.js.map +0 -1
  574. package/lib/module/helpers/persistCrypto.js +0 -115
  575. package/lib/module/helpers/persistCrypto.js.map +0 -1
  576. package/lib/module/helpers/pickImageAsset.js +0 -63
  577. package/lib/module/helpers/pickImageAsset.js.map +0 -1
  578. package/lib/module/helpers/pushPayload.js +0 -63
  579. package/lib/module/helpers/pushPayload.js.map +0 -1
  580. package/lib/module/helpers/secureFileUrl.js +0 -91
  581. package/lib/module/helpers/secureFileUrl.js.map +0 -1
  582. package/lib/module/helpers/secureKeyValue.js +0 -75
  583. package/lib/module/helpers/secureKeyValue.js.map +0 -1
  584. package/lib/module/helpers/secureStoreRuntime.js +0 -52
  585. package/lib/module/helpers/secureStoreRuntime.js.map +0 -1
  586. package/lib/module/helpers/secureUserStorage.js +0 -72
  587. package/lib/module/helpers/secureUserStorage.js.map +0 -1
  588. package/lib/module/helpers/shallowEqual.js +0 -31
  589. package/lib/module/helpers/shallowEqual.js.map +0 -1
  590. package/lib/module/helpers/sheetGestures.js +0 -26
  591. package/lib/module/helpers/sheetGestures.js.map +0 -1
  592. package/lib/module/hooks/useFileToken.js +0 -5
  593. package/lib/module/hooks/useFileToken.js.map +0 -1
  594. package/lib/module/networking/authRefresh.js +0 -321
  595. package/lib/module/networking/authRefresh.js.map +0 -1
  596. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts +0 -9
  597. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +0 -1
  598. package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts +0 -75
  599. package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts.map +0 -1
  600. package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts +0 -25
  601. package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts.map +0 -1
  602. package/lib/typescript/helpers/getChatBackground.d.ts +0 -15
  603. package/lib/typescript/helpers/getChatBackground.d.ts.map +0 -1
  604. package/lib/typescript/helpers/getDisplayFileName.d.ts +0 -49
  605. package/lib/typescript/helpers/getDisplayFileName.d.ts.map +0 -1
  606. package/lib/typescript/helpers/getServerReadTimestamp.d.ts +0 -69
  607. package/lib/typescript/helpers/getServerReadTimestamp.d.ts.map +0 -1
  608. package/lib/typescript/helpers/isOwnMessage.d.ts +0 -36
  609. package/lib/typescript/helpers/isOwnMessage.d.ts.map +0 -1
  610. package/lib/typescript/helpers/mediaLibraryRuntime.d.ts +0 -3
  611. package/lib/typescript/helpers/mediaLibraryRuntime.d.ts.map +0 -1
  612. package/lib/typescript/helpers/persistCrypto.d.ts +0 -13
  613. package/lib/typescript/helpers/persistCrypto.d.ts.map +0 -1
  614. package/lib/typescript/helpers/pickImageAsset.d.ts +0 -27
  615. package/lib/typescript/helpers/pickImageAsset.d.ts.map +0 -1
  616. package/lib/typescript/helpers/pushPayload.d.ts +0 -7
  617. package/lib/typescript/helpers/pushPayload.d.ts.map +0 -1
  618. package/lib/typescript/helpers/secureFileUrl.d.ts +0 -7
  619. package/lib/typescript/helpers/secureFileUrl.d.ts.map +0 -1
  620. package/lib/typescript/helpers/secureKeyValue.d.ts +0 -13
  621. package/lib/typescript/helpers/secureKeyValue.d.ts.map +0 -1
  622. package/lib/typescript/helpers/secureStoreRuntime.d.ts +0 -29
  623. package/lib/typescript/helpers/secureStoreRuntime.d.ts.map +0 -1
  624. package/lib/typescript/helpers/secureUserStorage.d.ts +0 -23
  625. package/lib/typescript/helpers/secureUserStorage.d.ts.map +0 -1
  626. package/lib/typescript/helpers/shallowEqual.d.ts +0 -11
  627. package/lib/typescript/helpers/shallowEqual.d.ts.map +0 -1
  628. package/lib/typescript/helpers/sheetGestures.d.ts +0 -20
  629. package/lib/typescript/helpers/sheetGestures.d.ts.map +0 -1
  630. package/lib/typescript/hooks/useFileToken.d.ts +0 -2
  631. package/lib/typescript/hooks/useFileToken.d.ts.map +0 -1
  632. package/lib/typescript/networking/authRefresh.d.ts +0 -95
  633. package/lib/typescript/networking/authRefresh.d.ts.map +0 -1
  634. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +0 -244
  635. package/src/components/Modals/ProfileHeader/ProfileHeader.tsx +0 -615
  636. package/src/components/Modals/ProfileHeader/ProfileMenu.tsx +0 -217
  637. package/src/helpers/getChatBackground.ts +0 -18
  638. package/src/helpers/getDisplayFileName.ts +0 -87
  639. package/src/helpers/getServerReadTimestamp.ts +0 -120
  640. package/src/helpers/isOwnMessage.ts +0 -90
  641. package/src/helpers/mediaLibraryRuntime.ts +0 -25
  642. package/src/helpers/persistCrypto.ts +0 -127
  643. package/src/helpers/pickImageAsset.ts +0 -68
  644. package/src/helpers/pushPayload.ts +0 -62
  645. package/src/helpers/secureFileUrl.ts +0 -103
  646. package/src/helpers/secureKeyValue.ts +0 -80
  647. package/src/helpers/secureStoreRuntime.ts +0 -62
  648. package/src/helpers/secureUserStorage.ts +0 -80
  649. package/src/helpers/shallowEqual.ts +0 -33
  650. package/src/helpers/sheetGestures.ts +0 -25
  651. package/src/hooks/useFileToken.ts +0 -7
  652. package/src/networking/authRefresh.ts +0 -451
@@ -289,9 +289,25 @@ export function ensureFilenameHasExtension(
289
289
  return `${base}${getExtensionForMime(mime)}`;
290
290
  }
291
291
 
292
- // NOTE: the "which name wins" decision (originalName vs the stored
293
- // fileName vs the URL) lives in helpers/getDisplayFileName.ts - that is
294
- // the single source of truth used across display, save, share and
295
- // download call sites (bug #40: this used to be duplicated here with
296
- // the priority backwards, so attachments showed/saved under the
297
- // server's hash name instead of the sender's original one).
292
+ /**
293
+ * Best-effort filename derivation for a message bubble:
294
+ * - server-provided `fileName`
295
+ * - server-provided `originalName`
296
+ * - URL pathname
297
+ * - generic `media_<timestamp>` so we never render an empty label
298
+ *
299
+ * Always returns a string with a valid extension.
300
+ */
301
+ export function deriveDisplayFilename(opts: {
302
+ fileName?: string | null;
303
+ originalName?: string | null;
304
+ url?: string | null;
305
+ mime?: string | null;
306
+ }): string {
307
+ const candidate =
308
+ (opts.fileName && opts.fileName.trim()) ||
309
+ (opts.originalName && opts.originalName.trim()) ||
310
+ filenameFromUrl(opts.url) ||
311
+ '';
312
+ return ensureFilenameHasExtension(candidate, opts.mime);
313
+ }
@@ -1,12 +1,12 @@
1
- import { setBaseURL } from '../networking/apiClient';
2
- import { refreshAuthTokens, isRefreshFatalError } from '../networking/authRefresh';
1
+ import http, { setBaseURL } from '../networking/apiClient';
3
2
  import { loginViaJwt } from '../networking/api-requests/auth.api';
4
3
  import { getMyUser } from '../networking/api-requests/user.api';
5
4
  import { IConfig, User } from '../types/types';
6
5
  import { store } from '../roomStore';
7
6
  import { setUser } from '../roomStore/chatSettingsSlice';
8
7
  import { walletToUsername } from './walletUsername';
9
- import { secureUserStorage } from './secureUserStorage';
8
+ import { asyncLocalStorage } from '../hooks/useLocalStorage';
9
+ import { localStorageConstants } from './constants/LOCAL_STORAGE';
10
10
 
11
11
  interface ResolveInitBeforeLoadUserOptions {
12
12
  config?: IConfig;
@@ -46,107 +46,15 @@ const normalizeUserForXmpp = (user?: User | null): User | null => {
46
46
  return { ...user, xmppUsername: normalizedXmppUsername };
47
47
  };
48
48
 
49
- // Hermes has no atob/Buffer; hand-decode just enough base64url to read a
50
- // JWT's `iat`. Claims are ASCII so the byte-per-char string is fine.
51
- const B64_ALPHABET =
52
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
53
-
54
- const readJwtIat = (token?: string | null): number => {
55
- if (!token || typeof token !== 'string') {return 0;}
56
- const part = token.split('.')[1];
57
- if (!part) {return 0;}
58
- try {
59
- const clean = part.replace(/-/g, '+').replace(/_/g, '/');
60
- let out = '';
61
- let buffer = 0;
62
- let bits = 0;
63
- for (let i = 0; i < clean.length; i++) {
64
- const idx = B64_ALPHABET.indexOf(clean[i]);
65
- if (idx === -1) {continue;}
66
- buffer = (buffer << 6) | idx;
67
- bits += 6;
68
- if (bits >= 8) {
69
- bits -= 8;
70
- out += String.fromCharCode((buffer >> bits) & 0xff);
71
- }
72
- }
73
- const iat = JSON.parse(out)?.iat;
74
- return typeof iat === 'number' ? iat : 0;
75
- } catch {
76
- return 0;
77
- }
78
- };
79
-
80
- /**
81
- * A `userLogin.user` is typically a snapshot the host captured at ITS
82
- * login time and re-presents verbatim on every mount, while this SDK
83
- * keeps rotating the session and persisting the newest pair to
84
- * `ETHORA_USER`. Taking the snapshot as-is therefore discards the live
85
- * session in favour of an ever-aging copy: media goes blank the moment
86
- * the snapshot has no `fileToken` (secure-files URLs 401 without it),
87
- * and once the snapshot's refresh token ages out entirely the account
88
- * looks dead even though the SDK held a working session all along.
89
- *
90
- * So, for the SAME account only, prefer whichever refresh pair was
91
- * minted later (JWT `iat` decides — a host that genuinely re-logged-in
92
- * hands us newer tokens and wins), and fill in a missing `fileToken`
93
- * from the persisted copy either way.
94
- */
95
- const adoptFresherPersistedSession = async (candidate: User): Promise<User> => {
96
- try {
97
- const stored = await secureUserStorage().get();
98
- if (!stored) {return candidate;}
99
-
100
- const sameUser =
101
- (candidate._id && stored._id && candidate._id === stored._id) ||
102
- (candidate.xmppUsername &&
103
- stored.xmppUsername &&
104
- candidate.xmppUsername === stored.xmppUsername);
105
- if (!sameUser) {return candidate;}
106
-
107
- const merged = { ...candidate };
108
-
109
- if (
110
- stored.refreshToken &&
111
- readJwtIat(stored.refreshToken) > readJwtIat(candidate.refreshToken)
112
- ) {
113
- merged.refreshToken = stored.refreshToken;
114
- if (stored.token) {merged.token = stored.token;}
115
- if (stored.fileToken) {merged.fileToken = stored.fileToken;}
116
- }
117
-
118
- if (!merged.fileToken && stored.fileToken) {
119
- merged.fileToken = stored.fileToken;
120
- }
121
-
122
- return merged;
123
- } catch {
124
- return candidate;
125
- }
126
- };
127
-
128
- /**
129
- * Bootstrap rotation.
130
- *
131
- * Was a second, independent `/users/login/refresh` caller that bypassed
132
- * every lock in the SDK — and, worse, only wrote the rotated token to
133
- * the store on the happy path, so several of the early-return branches
134
- * below used to drop it. Under the backend's reuse detection a dropped
135
- * rotation means the next launch presents a burned token and the
136
- * session is killed.
137
- *
138
- * `refreshAuthTokens` persists the new pair before it resolves, so by
139
- * the time this returns the rotation is safe no matter which branch the
140
- * caller takes afterwards. The explicit token is required here: during
141
- * bootstrap the candidate session isn't in the store yet.
142
- */
143
49
  const refreshWithToken = async (refreshToken: string) => {
144
- const result = await refreshAuthTokens({ refreshToken });
50
+ const response = await http.post(
51
+ '/users/login/refresh',
52
+ {},
53
+ { headers: { Authorization: refreshToken } }
54
+ );
145
55
  return {
146
- token: result.token,
147
- refreshToken: result.refreshToken || refreshToken,
148
- xmppPassword: result.xmppPassword || '',
149
- fileToken: result.fileToken || '',
56
+ token: response?.data?.token || '',
57
+ refreshToken: response?.data?.refreshToken || refreshToken,
150
58
  };
151
59
  };
152
60
 
@@ -179,15 +87,11 @@ const tryHydrateViaMy = async (
179
87
 
180
88
  let workingToken = candidate?.token || '';
181
89
  let workingRefresh = candidate?.refreshToken || '';
182
- let rotatedXmppPassword = '';
183
- let workingFileToken = candidate?.fileToken || '';
184
90
 
185
91
  const candidateWithCurrentTokens = (): User => ({
186
92
  ...candidate,
187
93
  token: workingToken || candidate.token,
188
94
  refreshToken: workingRefresh || candidate.refreshToken,
189
- xmppPassword: rotatedXmppPassword || candidate.xmppPassword,
190
- fileToken: workingFileToken || candidate.fileToken,
191
95
  });
192
96
 
193
97
  const fallbackWithCreds = (): User | null => {
@@ -203,8 +107,6 @@ const tryHydrateViaMy = async (
203
107
  if (merged) {
204
108
  merged.token = workingToken || merged.token;
205
109
  merged.refreshToken = workingRefresh || merged.refreshToken;
206
- merged.xmppPassword = rotatedXmppPassword || merged.xmppPassword;
207
- merged.fileToken = workingFileToken || merged.fileToken;
208
110
  }
209
111
  return merged;
210
112
  } catch (error) {
@@ -225,8 +127,6 @@ const tryHydrateViaMy = async (
225
127
  const refreshed = await refreshWithToken(workingRefresh);
226
128
  workingToken = refreshed.token;
227
129
  workingRefresh = refreshed.refreshToken;
228
- rotatedXmppPassword = refreshed.xmppPassword || rotatedXmppPassword;
229
- workingFileToken = refreshed.fileToken || workingFileToken;
230
130
 
231
131
  try {
232
132
  const myUser = await getMyUser({ token: workingToken, endpoint: myEndpoint });
@@ -236,8 +136,6 @@ const tryHydrateViaMy = async (
236
136
  if (merged) {
237
137
  merged.token = workingToken || merged.token;
238
138
  merged.refreshToken = workingRefresh || merged.refreshToken;
239
- merged.xmppPassword = rotatedXmppPassword || merged.xmppPassword;
240
- merged.fileToken = workingFileToken || merged.fileToken;
241
139
  }
242
140
  return merged;
243
141
  } catch (myError) {
@@ -249,11 +147,6 @@ const tryHydrateViaMy = async (
249
147
  }
250
148
  } catch (error) {
251
149
  if (signal?.aborted || isAbortError(error)) {return null;}
252
- // A fatal refresh verdict (reuse detected / token not found / stale
253
- // with nothing newer around) carries no HTTP response, so it would
254
- // otherwise fall through to `throw` — the session is simply dead,
255
- // which for bootstrap means "nothing to restore".
256
- if (isRefreshFatalError(error)) {return null;}
257
150
  if (isAuthError(error)) {return null;}
258
151
  throw error;
259
152
  }
@@ -269,15 +162,13 @@ export const resolveInitBeforeLoadUser = async (
269
162
  setBaseURL(config.baseUrl, config.customAppToken);
270
163
  }
271
164
 
272
- const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/v1/users/my';
165
+ const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/users/my';
273
166
 
274
167
  // Priority 1: explicit userLogin
275
168
  const explicitUser = config?.userLogin?.enabled ? config?.userLogin?.user : null;
276
169
  if (explicitUser) {
277
170
  const candidate = normalizeUserForXmpp(explicitUser);
278
- if (candidate && hasXmppCredentials(candidate)) {
279
- return await adoptFresherPersistedSession(candidate);
280
- }
171
+ if (candidate && hasXmppCredentials(candidate)) {return candidate;}
281
172
 
282
173
  const hydrated = await tryHydrateViaMy(explicitUser, myEndpoint, signal).catch(
283
174
  () => null
@@ -326,13 +217,13 @@ export const resolveInitBeforeLoadUser = async (
326
217
 
327
218
  // Priority 5: persisted user in AsyncStorage
328
219
  try {
329
- const storedUser = await secureUserStorage().get();
220
+ const storedUser = await asyncLocalStorage<User>(localStorageConstants.ETHORA_USER).get();
330
221
  if (storedUser && (storedUser.token || storedUser.refreshToken || storedUser.xmppPassword)) {
331
222
  const hydrated = await tryHydrateViaMy(storedUser, myEndpoint, signal).catch(
332
223
  () => null
333
224
  );
334
225
  if (hydrated && hasXmppCredentials(hydrated)) {return hydrated;}
335
- await secureUserStorage().remove();
226
+ await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove();
336
227
  }
337
228
  } catch {
338
229
  // ignore storage errors
@@ -384,7 +275,7 @@ export const refreshUserCredentialsForXmpp = async (
384
275
  }
385
276
  }
386
277
 
387
- const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/v1/users/my';
278
+ const myEndpoint = config?.initBeforeLoadAuth?.myEndpoint || '/users/my';
388
279
 
389
280
  // Priority 2: redux store user (covers userLogin + customLogin +
390
281
  // anything previously persisted into chatSettingStore.user). The
@@ -404,7 +295,9 @@ export const refreshUserCredentialsForXmpp = async (
404
295
  // should already mirror this, but if the redux state got cleared
405
296
  // mid-session (logout race) this gives us one last shot.
406
297
  try {
407
- const storedUser = await secureUserStorage().get();
298
+ const storedUser = await asyncLocalStorage<User>(
299
+ localStorageConstants.ETHORA_USER
300
+ ).get();
408
301
  if (
409
302
  storedUser &&
410
303
  (storedUser.token || storedUser.refreshToken || storedUser.xmppPassword)
@@ -0,0 +1,40 @@
1
+ import { IConfig, Iso639_1Codes } from '../types/types';
2
+
3
+ /**
4
+ * Legacy single-locale config (`translates.translations`) seeds langSource
5
+ * only when the host ACTUALLY set it.
6
+ *
7
+ * The condition used to be inverted (`!translates.translations`), so merely
8
+ * enabling translation fired `setLangSource(undefined)` on every XMPP init
9
+ * and wiped whatever the reader had picked from the globe — the language
10
+ * reset itself on every reconnect. Web fixed this; RN had not.
11
+ */
12
+ export const resolveLegacyTranslatesLangSource = (
13
+ translatesConfig?: IConfig['translates']
14
+ ): Iso639_1Codes | undefined =>
15
+ translatesConfig?.enabled && translatesConfig?.translations
16
+ ? translatesConfig.translations
17
+ : undefined;
18
+
19
+ /**
20
+ * A host drives the reader's language from OUTSIDE the component by setting
21
+ * `config.translates.readerLocale` (their own language switcher, or the
22
+ * testbed's Setup tab). Nothing was syncing it into `langSource`, so pinning
23
+ * it only redirected the incoming-translation lookup: the UI captions and
24
+ * the `<translate source>` on outgoing messages both kept following the
25
+ * unset `langSource`.
26
+ *
27
+ * Unlike web this keeps the FULL locale rather than the base language. RN's
28
+ * LANGUAGE_OPTIONS are region-tagged (`es-US`, `fr-CA`) because the region
29
+ * is forwarded to the translation service, and the in-chat picker stores
30
+ * that full form — so the external path has to store the same thing or the
31
+ * two would disagree. Caption lookups strip to the base themselves.
32
+ *
33
+ * Resolves only when actually set, so a host that leaves it unset never
34
+ * clobbers what the reader chose for themselves.
35
+ */
36
+ export const resolveExternalReaderLocaleLangSource = (
37
+ readerLocale?: string
38
+ ): Iso639_1Codes | undefined =>
39
+ (readerLocale || undefined) as Iso639_1Codes | undefined;
40
+
@@ -0,0 +1,38 @@
1
+ import { store } from '../roomStore';
2
+
3
+ /**
4
+ * Collapse a duplicated `<appId>_` prefix down to one.
5
+ *
6
+ * Ported from the web SDK (src/helpers/xmppUsername.ts). Some senders stamp
7
+ * an already-qualified username and it gets qualified a second time, which
8
+ * yields `<appId>_<appId>_<userId>` — a key `usersSet` will never match.
9
+ *
10
+ * RN reads the appId off the logged-in user's own xmppUsername
11
+ * (`<appId>_<userId>`) since the chat store has no standalone `appId` field
12
+ * the way web's does.
13
+ */
14
+ export const normalizeXmppUsername = (
15
+ value: string | undefined | null
16
+ ): string => {
17
+ if (!value) {
18
+ return '';
19
+ }
20
+ let result = String(value).trim();
21
+ if (!result) {
22
+ return '';
23
+ }
24
+
25
+ const ownXmpp = String(
26
+ store.getState().chatSettingStore?.user?.xmppUsername || ''
27
+ );
28
+ const appId = ownXmpp.includes('_') ? ownXmpp.split('_')[0] : '';
29
+ if (!appId) {
30
+ return result;
31
+ }
32
+
33
+ const prefix = `${appId}_`;
34
+ while (result.startsWith(prefix + prefix)) {
35
+ result = result.slice(prefix.length);
36
+ }
37
+ return result;
38
+ };
@@ -7,7 +7,6 @@ import {
7
7
  setVisibleRoom,
8
8
  } from '../roomStore/roomsSlice';
9
9
  import { store } from '../roomStore';
10
- import { getServerReadTimestamp } from '../helpers/getServerReadTimestamp';
11
10
 
12
11
  interface UseChatRoomFocusOptions {
13
12
  /** The room JID that the consumer's tab/screen is currently showing. */
@@ -33,10 +32,7 @@ interface UseChatRoomFocusOptions {
33
32
  * Without this hook, `useUnread()` will always return 0 for the chat
34
33
  * room because the SDK assumes "mounted == active". With this hook,
35
34
  * focus marks the room visible (clearing the badge) and blur stamps
36
- * `lastViewedTimestamp` to the newest SERVER-acknowledged message so
37
- * future messages count as unread. Deliberately not `Date.now()`: a
38
- * device clock running ahead would write a future marker that the
39
- * forward-only private-store merge could never correct again (bug #38).
35
+ * `lastViewedTimestamp = Date.now()` so future messages count as unread.
40
36
  *
41
37
  * Usage with React Navigation:
42
38
  *
@@ -63,16 +59,11 @@ export const useChatRoomFocus = ({
63
59
  });
64
60
 
65
61
  const leaveRoom = (jid: string) => {
66
- const state = store.getState();
67
- const rooms = state.rooms?.rooms;
68
- const timestamp = getServerReadTimestamp(rooms?.[jid], state.roomHeapSlice);
69
- // Only stamp when we actually have something to anchor to - skip
70
- // rather than fall back to the device clock (bug #38).
71
- if (timestamp > 0) {
72
- dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
73
- }
62
+ const timestamp = Date.now();
63
+ dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
74
64
  dispatch(clearVisibleRoom());
75
- (state.chatSettingStore as any)?.client
65
+ const rooms = store.getState().rooms?.rooms;
66
+ (store.getState().chatSettingStore as any)?.client
76
67
  ?.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: jid })
77
68
  .catch(() => {});
78
69
  };
@@ -3,13 +3,15 @@
3
3
  import { useEffect, useRef, useState } from 'react';
4
4
  import { useDispatch, useSelector } from 'react-redux';
5
5
  import { IConfig } from '../types/types';
6
+ import { resolveLegacyTranslatesLangSource } from '../helpers/resolveLangSource';
6
7
  import XmppClient from '../networking/xmppClient';
7
8
  import { AppDispatch, RootState } from '../roomStore';
8
9
  import { useXmppClient } from '../context/xmppProvider';
9
10
  import { chatAutoEnterer } from '../helpers/chatAutoEnterer';
10
11
  import { initRoomsPresence } from '../helpers/initRoomsPresence';
12
+ import { updatedChatLastTimestamps } from '../helpers/updatedChatLastTimestamps';
11
13
  import { updateMessagesTillLast } from '../helpers/updateMessagesTillLast';
12
- import { refreshAuthTokensQuietly } from '../networking/authRefresh';
14
+ import { refresh } from '../networking/apiClient';
13
15
  import { setLangSource, setConfig } from '../roomStore/chatSettingsSlice';
14
16
  import { setIsLoading } from '../roomStore/roomsSlice';
15
17
  import { useRoomState } from './useRoomState';
@@ -17,7 +19,6 @@ import { useChatSettingState } from './useChatSettingState';
17
19
  import { isChatIdPresentInArray } from '../helpers/isChatIdPresentInArray';
18
20
  import useGetNewArchRoom from './useGetNewArchRoom';
19
21
  import { getRoomsWithRetry } from '../helpers/getRoomsWithRetry';
20
- import { shallowEqual } from '../helpers/shallowEqual';
21
22
 
22
23
  interface useChatWrapperInitProps {
23
24
  roomJID: string | null | undefined;
@@ -65,20 +66,6 @@ const useChatWrapperInit = ({
65
66
  };
66
67
  }, [user.xmppPassword]);
67
68
 
68
- // Presentational config flags (e.g. `disableHeader`) can change while the
69
- // chat stays mounted — sync them to redux whenever `config` actually
70
- // changes, not just at init. Shallow-equal guard: an inline object
71
- // literal from the host is a fresh reference every render even when
72
- // nothing in it changed, and dispatching unconditionally would re-render
73
- // every config consumer on every host render.
74
- const lastSyncedConfigRef = useRef<IConfig | undefined>(undefined);
75
- useEffect(() => {
76
- if (!shallowEqual(lastSyncedConfigRef.current, config)) {
77
- lastSyncedConfigRef.current = config;
78
- dispatch(setConfig(config));
79
- }
80
- }, [config, dispatch]);
81
-
82
69
  const getRoomsWithRertyRequest = async () => {
83
70
  setIsRetrying(true);
84
71
  const retryRooms = await getRoomsWithRetry(
@@ -111,8 +98,11 @@ const useChatWrapperInit = ({
111
98
  let retryTimeout: NodeJS.Timeout;
112
99
 
113
100
  const initXmmpClient = async () => {
114
- if (config?.translates?.enabled && !config?.translates?.translations) {
115
- dispatch(setLangSource(config?.translates?.translations));
101
+ const legacyLangSource = resolveLegacyTranslatesLangSource(
102
+ config?.translates
103
+ );
104
+ if (legacyLangSource) {
105
+ dispatch(setLangSource(legacyLangSource));
116
106
  }
117
107
 
118
108
  dispatch(setConfig(config));
@@ -169,21 +159,15 @@ const useChatWrapperInit = ({
169
159
  }
170
160
  }
171
161
  try {
172
- // getChatsPrivateStoreRequestStanza hydrates redux itself
173
- // (dispatch(applyPrivateStoreMarkers(...)) internally,
174
- // clamped + forward-only) - do not also apply the raw
175
- // return value here. That used to double-dispatch via
176
- // updatedChatLastTimestamps' unconditional
177
- // setLastViewedTimestamp, which has neither the
178
- // forward-only guard nor the future-marker clamp, so on
179
- // every reconnect it could silently re-clobber a value
180
- // the clamp had just corrected (bug #38).
181
162
  const roomTimestampObject: any =
182
163
  await newClient.getChatsPrivateStoreRequestStanza();
183
164
  console.log(
184
165
  'Got chats private store',
185
166
  roomTimestampObject?.length || 0
186
167
  );
168
+ if (roomTimestampObject) {
169
+ updatedChatLastTimestamps(roomTimestampObject, dispatch);
170
+ }
187
171
  if (!hasSyncedHistoryRef.current) {
188
172
  console.log('Updating messages till last');
189
173
  await updateMessagesTillLast(rooms, newClient);
@@ -199,7 +183,7 @@ const useChatWrapperInit = ({
199
183
  }
200
184
 
201
185
  {
202
- config?.refreshTokens?.enabled && refreshAuthTokensQuietly();
186
+ config?.refreshTokens?.enabled && refresh();
203
187
  }
204
188
  } catch (error) {
205
189
  console.error(' Error during initialization', error);
@@ -225,15 +209,15 @@ const useChatWrapperInit = ({
225
209
  setInited(true);
226
210
  console.log(' Getting chats private store for existing client');
227
211
  try {
228
- // See the "new client" branch above: getChatsPrivateStoreRequestStanza
229
- // already hydrates redux (clamped + forward-only); do not
230
- // also apply the raw return value here.
231
212
  const roomTimestampObject: any =
232
213
  await client.getChatsPrivateStoreRequestStanza();
233
214
  console.log(
234
215
  'Got chats private store for existing client',
235
216
  roomTimestampObject?.length || 0
236
217
  );
218
+ if (roomTimestampObject) {
219
+ updatedChatLastTimestamps(roomTimestampObject, dispatch);
220
+ }
237
221
  if (!hasSyncedHistoryRef.current) {
238
222
  console.log(
239
223
  'Updating messages till last for existing client'
@@ -253,7 +237,7 @@ const useChatWrapperInit = ({
253
237
  setConnectionLost(false);
254
238
  }
255
239
  {
256
- config?.refreshTokens?.enabled && refreshAuthTokensQuietly();
240
+ config?.refreshTokens?.enabled && refresh();
257
241
  }
258
242
  }
259
243
  }
@@ -1,5 +1,4 @@
1
- import { useCallback, useEffect, useRef } from 'react';
2
- import { AppState, AppStateStatus } from 'react-native';
1
+ import { useCallback, useEffect, useState } from 'react';
3
2
  import { useXmppClient } from '../context/xmppProvider';
4
3
  import { useSelector } from 'react-redux';
5
4
  import { RootState } from '../roomStore';
@@ -10,16 +9,8 @@ const useComposing = (config?: IConfig) => {
10
9
  const { client } = useXmppClient();
11
10
  const { activeRoomJID } = useSelector((state: RootState) => state.rooms);
12
11
  const { user } = useChatSettingState();
13
- // RN keeps a focused TextInput focused when the app is backgrounded or
14
- // the device is locked — nothing fires `onBlur`, so without this the
15
- // other participant sees "typing…" for as long as the user is away.
16
- // Tracks whether the input is *currently* focused, independent of the
17
- // foreground/background transition, so we know whether to resume
18
- // composing on return.
19
- const isFocusedRef = useRef(false);
20
12
 
21
13
  const sendStartComposing = useCallback(() => {
22
- isFocusedRef.current = true;
23
14
  if (config?.disableTypingIndicator) {
24
15
  return;
25
16
  }
@@ -33,7 +24,6 @@ const useComposing = (config?: IConfig) => {
33
24
  }, [activeRoomJID, client, config?.disableTypingIndicator, user.firstName, user.lastName]);
34
25
 
35
26
  const sendEndComposing = useCallback(() => {
36
- isFocusedRef.current = false;
37
27
  if (config?.disableTypingIndicator) {
38
28
  return;
39
29
  }
@@ -54,32 +44,6 @@ const useComposing = (config?: IConfig) => {
54
44
  return () => clearTimeout(timerId);
55
45
  }, [sendEndComposing]);
56
46
 
57
- // Foreground/background transition only — a pause in typing must NOT
58
- // clear the indicator (that would flicker for a slowly-composing user),
59
- // so this deliberately does not hook keystroke/idle timing at all.
60
- useEffect(() => {
61
- const handleAppStateChange = (nextState: AppStateStatus) => {
62
- if (nextState !== 'active') {
63
- if (isFocusedRef.current && !config?.disableTypingIndicator && client) {
64
- client.sendTypingRequestStanza(
65
- activeRoomJID || '',
66
- `${user.firstName} ${user.lastName}`,
67
- false
68
- );
69
- }
70
- } else if (isFocusedRef.current && !config?.disableTypingIndicator && client) {
71
- client.sendTypingRequestStanza(
72
- activeRoomJID || '',
73
- `${user.firstName} ${user.lastName}`,
74
- true
75
- );
76
- }
77
- };
78
-
79
- const subscription = AppState.addEventListener('change', handleAppStateChange);
80
- return () => subscription.remove();
81
- }, [activeRoomJID, client, config?.disableTypingIndicator, user.firstName, user.lastName]);
82
-
83
47
  return { sendStartComposing, sendEndComposing };
84
48
  };
85
49
 
@@ -9,7 +9,7 @@ import { clearHeap } from '../roomStore/roomHeapSlice';
9
9
  import { pushSubscriptionService } from '../services/pushSubscriptionService';
10
10
  import { clearRoomsRestCache } from '../networking/api-requests/rooms.api';
11
11
  import { clearPersistedState } from '../roomStore/persistence';
12
- import { secureUserStorage } from '../helpers/secureUserStorage';
12
+ import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
13
13
 
14
14
  // AsyncStorage keys the library writes but that aren't cleared by any
15
15
  // slice reducer. Listed here so a single logout call wipes the full
@@ -120,23 +120,17 @@ const logoutService = {
120
120
 
121
121
  // 6. Stray keys the slices don't touch.
122
122
  try {
123
- await AsyncStorage.multiRemove(LIBRARY_STRAY_KEYS);
123
+ await AsyncStorage.multiRemove([
124
+ ...LIBRARY_STRAY_KEYS,
125
+ // Belt-and-suspenders: the chat slice's `logout` reducer
126
+ // schedules an async remove of ETHORA_USER fire-and-forget;
127
+ // re-issue it here so the disk is provably clean before this
128
+ // Promise resolves.
129
+ localStorageConstants.ETHORA_USER,
130
+ ]);
124
131
  } catch (e) {
125
132
  console.warn('logoutService: stray-key clear failed', e);
126
133
  }
127
-
128
- // 7. Belt-and-suspenders: the chat slice's `logout` reducer already
129
- // fires an async ETHORA_USER removal, but re-issue it here (via
130
- // the same secureUserStorage split the reducer uses) so BOTH the
131
- // plain-AsyncStorage profile half AND the Keychain/Keystore
132
- // secrets are provably gone before this Promise resolves — a bare
133
- // `AsyncStorage.removeItem(ETHORA_USER)` here would only clear the
134
- // profile half and leave the tokens behind.
135
- try {
136
- await secureUserStorage().remove();
137
- } catch (e) {
138
- console.warn('logoutService: secure user storage clear failed', e);
139
- }
140
134
  },
141
135
  };
142
136
 
@@ -4,7 +4,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
4
4
  import { RootState } from '../roomStore';
5
5
  import { setCurrentRoom, clearPendingNotificationJid } from '../roomStore/roomsSlice';
6
6
 
7
- import { PENDING_NOTIFICATION_JID_KEY, readPendingJid } from '../helpers/pushPayload';
7
+ const PENDING_NOTIFICATION_JID_KEY = 'ethora_pending_notification_jid';
8
8
 
9
9
  export function usePendingNotification() {
10
10
  const dispatch = useDispatch();
@@ -21,15 +21,21 @@ export function usePendingNotification() {
21
21
  let jidToOpen = pendingNotificationJid;
22
22
 
23
23
  if (!jidToOpen) {
24
- jidToOpen = await readPendingJid();
24
+ try {
25
+ const storedJid = await AsyncStorage.getItem(PENDING_NOTIFICATION_JID_KEY);
26
+ if (storedJid) {
27
+ jidToOpen = storedJid;
28
+ await AsyncStorage.removeItem(PENDING_NOTIFICATION_JID_KEY);
29
+ }
30
+ } catch (error) {
31
+ console.error('Error reading from AsyncStorage:', error);
32
+ }
25
33
  }
26
34
 
27
35
  if (jidToOpen) {
28
36
  const room = rooms[jidToOpen];
29
37
  if (room) {
30
- dispatch(clearPendingNotificationJid());
31
- AsyncStorage.removeItem(PENDING_NOTIFICATION_JID_KEY).catch(() => undefined);
32
- dispatch(setCurrentRoom({ roomJID: jidToOpen }));
38
+ return;
33
39
  }
34
40
  }
35
41
  };