@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
@@ -1,9 +1,9 @@
1
1
  import { setCurrentRoom, setIsLoading } from '../roomStore/roomsSlice';
2
+ import { updatedChatLastTimestamps } from './updatedChatLastTimestamps';
2
3
  import { initRoomsPresence } from './initRoomsPresence';
3
4
  import XmppClient from '../networking/xmppClient';
4
5
  import { IConfig, IRoom, User } from '../types/types';
5
6
  import { store } from '../roomStore';
6
- import { refreshAuthTokensQuietly } from '../networking/authRefresh';
7
7
 
8
8
  const initXmppRooms = async (
9
9
  user: User,
@@ -47,23 +47,19 @@ const initXmppRooms = async (
47
47
  console.log(res);
48
48
  }
49
49
 
50
- // getChatsPrivateStoreRequestStanza hydrates redux itself
51
- // (dispatch(applyPrivateStoreMarkers(...)) internally, clamped +
52
- // forward-only) - do not also apply the raw return value here. That
53
- // used to double-dispatch via updatedChatLastTimestamps' unconditional
54
- // setLastViewedTimestamp, which has neither the forward-only guard
55
- // nor the future-marker clamp, so it could silently re-clobber a
56
- // value the clamp had just corrected (bug #38).
57
- await (xmmpClient as any as XmppClient).getChatsPrivateStoreRequestStanza();
50
+ //@ts-ignore
51
+ const roomTimestampObject: [jid: string, timestamp: string] =
52
+ await (xmmpClient as any as XmppClient).getChatsPrivateStoreRequestStanza();
53
+ updatedChatLastTimestamps(roomTimestampObject, store.dispatch);
58
54
  } else {
59
- await xmmpClient.getChatsPrivateStoreRequestStanza();
55
+ //@ts-ignore
56
+ const roomTimestampObject: [jid: string, timestamp: string] =
57
+ await xmmpClient.getChatsPrivateStoreRequestStanza();
58
+ updatedChatLastTimestamps(roomTimestampObject, store.dispatch);
60
59
  }
61
60
 
62
61
  if (config?.refreshTokens?.enabled) {
63
- // Was a bare call to the consumer-supplied refreshFunction, i.e. a
64
- // rotation completely outside the SDK's lock. Routed through the
65
- // one rotation point, which calls that same function internally.
66
- refreshAuthTokensQuietly();
62
+ config?.refreshTokens?.refreshFunction?.();
67
63
  }
68
64
  } catch (error) {
69
65
  console.error(error);
@@ -1,38 +1,21 @@
1
1
  import { IMessage } from '../types/types';
2
2
  import { isDateAfter, isDateBefore } from './dateComparison';
3
- import { msgSortableMs } from './msgSortableMs';
4
-
5
- // Robustly resolve a caller-supplied read marker to epoch milliseconds.
6
- // Callers pass a plain number (the redux read boundary, or a room's
7
- // lastViewedTimestamp), a Date object (older call sites), or occasionally
8
- // a numeric string. These are NOT interchangeable through the Date
9
- // constructor: `new Date(1757000000123)` (a number) reads as epoch-ms,
10
- // but `new Date("1757000000123")` (a string) is parsed as a date STRING
11
- // - a bare 13-digit string matches no recognized date format, so the
12
- // result is silently Invalid Date and every comparison against it is
13
- // `false`. Try Number() first so a numeric string/number is read as
14
- // epoch-ms; only fall through to Date parsing for genuine date/ISO
15
- // strings (e.g. a Date object's own `.toString()`). Never falls back to
16
- // `Date.now()` - a marker we can't resolve is treated as "no marker",
17
- // not "now" (bug #38).
18
- function resolveMarkerMs(
19
- marker: number | { toString: () => string } | null | undefined
20
- ): number {
21
- if (marker == null) {return 0;}
22
- if (typeof marker === 'number') {
23
- return Number.isFinite(marker) ? marker : 0;
24
- }
25
- const raw = marker.toString();
26
- if (raw.trim() !== '') {
27
- const asNumber = Number(raw);
28
- if (Number.isFinite(asNumber)) {return asNumber;}
29
- }
30
- const parsed = Date.parse(raw);
31
- return Number.isFinite(parsed) ? parsed : 0;
32
- }
33
3
 
34
4
  function deepMerge(target: any, source: any): any {
35
5
  for (const key in source) {
6
+ if (source[key] === undefined) {
7
+ // `for...in` visits a key even when its value is `undefined` — every
8
+ // stanza parser (getDataFromXml/createMessageFromXml) returns an
9
+ // object literal with `translations` always present, explicitly
10
+ // `undefined` whenever the wire message didn't carry a
11
+ // <translations> element. Without this guard, merging THAT message
12
+ // over an existing row would blow away a translation the row
13
+ // already had (e.g. a MAM/live echo of a message arriving without
14
+ // its translation re-attached) — a real message flips from
15
+ // translated back to original text for no reason. Absence on the
16
+ // incoming side must mean "leave it alone", never "clear it".
17
+ continue;
18
+ }
36
19
  if (
37
20
  source[key] &&
38
21
  typeof source[key] === 'object' &&
@@ -49,7 +32,7 @@ function deepMerge(target: any, source: any): any {
49
32
  export function insertMessageWithDelimiter(
50
33
  roomMessages: Partial<IMessage>[],
51
34
  message: IMessage,
52
- lastViewedTimestamp: number | { toString: () => string } | null,
35
+ lastViewedTimestamp: { toString: () => string } | null,
53
36
  ) {
54
37
  const existingIndex = roomMessages.findIndex(
55
38
  (msg) =>
@@ -92,39 +75,33 @@ export function insertMessageWithDelimiter(
92
75
  roomMessages.push(message);
93
76
  }
94
77
 
95
- const lastViewedMs = resolveMarkerMs(lastViewedTimestamp);
96
- const newMessageMs = msgSortableMs(message);
97
78
  if (
98
- lastViewedMs > 0 &&
99
- newMessageMs > lastViewedMs &&
100
- !roomMessages.some((msg) => msg.id === 'delimiter-new')
79
+ lastViewedTimestamp &&
80
+ !roomMessages.some((msg) => msg.id === 'delimiter-new') &&
81
+ isDateAfter(newMessageDate.toString(), lastViewedTimestamp.toString())
101
82
  ) {
102
- // Find the first message STRICTLY newer than the marker, using the
103
- // SAME timestamp source (msgSortableMs - the server id-encoded ms)
104
- // as the unread middleware and countNewerMessages use to decide
105
- // what counts as unread. Comparing against a DIFFERENT source (the
106
- // old code compared `msg.date` strings) risks the boundary message
107
- // itself landing on the wrong side of the cut: since bug #38 the
108
- // marker can equal a real message's own timestamp exactly, and any
109
- // drift between `date` and the id-encoded ms - or a raw numeric
110
- // marker silently producing an Invalid Date via the Date
111
- // constructor's string-parsing path - could count that message as
112
- // unread, pushing the divider one message too early (ABOVE the
113
- // last read message instead of directly below it). Customer #42.
114
- const delimiterIndex = roomMessages.findIndex(
115
- (msg) => msg.id !== 'delimiter-new' && msgSortableMs(msg) > lastViewedMs
83
+ const delimiterIndex = roomMessages.findIndex((msg) =>
84
+ isDateAfter(msg.date?.toString() ?? '', lastViewedTimestamp.toString())
116
85
  );
117
86
 
118
87
  if (delimiterIndex !== -1) {
119
88
  // The divider's date is what ORDERS it: roomsSlice re-sorts every
120
89
  // merged page by timestamp (see `byMs`), so a divider stamped with
121
- // `new Date()` (i.e. now) sorted past every real message and
90
+ // `new Date()` — i.e. now — sorted past every real message and
122
91
  // rendered at the very bottom, BELOW the new messages it is
123
92
  // supposed to introduce. Anchor it a hair before the first unread
124
93
  // instead, which is where it belongs and where any later sort keeps
125
- // it.
126
- const firstUnreadMs = msgSortableMs(roomMessages[delimiterIndex]);
127
- const anchorMs = firstUnreadMs > 0 ? firstUnreadMs - 1 : lastViewedMs;
94
+ // it. Derived from that message rather than from
95
+ // lastViewedTimestamp so it works whatever format the caller passes.
96
+ const firstUnreadMs = Date.parse(
97
+ String(roomMessages[delimiterIndex]?.date ?? '')
98
+ );
99
+ const rawLastViewed = lastViewedTimestamp.toString();
100
+ const lastViewedMs =
101
+ Date.parse(rawLastViewed) || Number(rawLastViewed) || Date.now();
102
+ const anchorMs = Number.isFinite(firstUnreadMs)
103
+ ? firstUnreadMs - 1
104
+ : lastViewedMs;
128
105
 
129
106
  roomMessages.splice(delimiterIndex, 0, {
130
107
  id: 'delimiter-new',
@@ -139,7 +116,7 @@ export function insertMessageWithDelimiter(
139
116
  roomJid: '',
140
117
  });
141
118
  }
142
- }
119
+ }
143
120
  } else if (
144
121
  isDateBefore(newMessageDate.toString(), firstMessage?.date?.toString() ?? '')
145
122
  ) {
@@ -14,7 +14,15 @@
14
14
  * matches. A raw objectId on its own is matched too, since some senders
15
15
  * carry only that half.
16
16
  */
17
- const ETHORA_ID = /^[0-9a-f]{24}(_[0-9a-f]{24})?$/i;
17
+ const ETHORA_ID_PART = '[0-9a-f]{24}(?:_[0-9a-f]{24})?';
18
+ // A private (1:1) room's own id is two of those joined by a hyphen —
19
+ // `<appId>_<userA>-<appId>_<userB>` — and that is what a message whose
20
+ // `from` carries no occupant resource resolves to. Matched as well, so a
21
+ // bubble is never captioned with a room id.
22
+ const ETHORA_ID = new RegExp(
23
+ `^${ETHORA_ID_PART}(?:-${ETHORA_ID_PART})?$`,
24
+ 'i'
25
+ );
18
26
 
19
27
  export const isUnresolvedSenderId = (name?: string): boolean => {
20
28
  const trimmed = String(name || '').trim();
@@ -14,30 +14,9 @@ export const getKeyboardVerticalOffset = ({
14
14
  }: KeyboardLayoutArgs): number =>
15
15
  configuredOffset + (platform === 'ios' ? bottomInset : 0);
16
16
 
17
- type InputDockPaddingArgs = Omit<KeyboardLayoutArgs, 'configuredOffset'> & {
18
- // Explicit `inputDockPaddingBottom` config value, verbatim on both
19
- // platforms when provided (0 allowed). Takes priority over every other
20
- // rule below, including `hostOwnsLayout`.
21
- configuredPadding?: number;
22
- // True when the host app owns keyboard layout entirely (i.e.
23
- // `disableKeyboardAvoidingView` is set) and `configuredPadding` was not
24
- // given. The dock then gets no built-in bottom padding of its own,
25
- // since it already sits above the host's own chrome (e.g. its tab bar).
26
- hostOwnsLayout?: boolean;
27
- };
28
-
29
17
  export const getInputDockPaddingBottom = ({
30
18
  platform,
31
19
  bottomInset = 0,
32
20
  keyboardVisible = false,
33
- configuredPadding,
34
- hostOwnsLayout = false,
35
- }: InputDockPaddingArgs): number => {
36
- if (typeof configuredPadding === 'number') {
37
- return configuredPadding;
38
- }
39
- if (hostOwnsLayout) {
40
- return 0;
41
- }
42
- return platform === 'ios' ? bottomInset : ANDROID_INPUT_DOCK_GAP;
43
- };
21
+ }: Omit<KeyboardLayoutArgs, 'configuredOffset'>): number =>
22
+ platform === 'ios' ? bottomInset : ANDROID_INPUT_DOCK_GAP;
@@ -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
+ };
@@ -1,17 +1,12 @@
1
1
  import { useEffect, useRef } from 'react';
2
2
  import { useDispatch } from 'react-redux';
3
3
  import {
4
- clearReadBoundary,
5
4
  clearVisibleRoom,
6
5
  setCurrentRoom,
7
6
  setLastViewedTimestamp,
8
7
  setVisibleRoom,
9
8
  } from '../roomStore/roomsSlice';
10
9
  import { store } from '../roomStore';
11
- import {
12
- getFlushBoundaryTs,
13
- getReadMarkerTimestamp,
14
- } from '../helpers/getServerReadTimestamp';
15
10
 
16
11
  interface UseChatRoomFocusOptions {
17
12
  /** The room JID that the consumer's tab/screen is currently showing. */
@@ -37,10 +32,7 @@ interface UseChatRoomFocusOptions {
37
32
  * Without this hook, `useUnread()` will always return 0 for the chat
38
33
  * room because the SDK assumes "mounted == active". With this hook,
39
34
  * focus marks the room visible (clearing the badge) and blur stamps
40
- * `lastViewedTimestamp` to the newest SERVER-acknowledged message so
41
- * future messages count as unread. Deliberately not `Date.now()`: a
42
- * device clock running ahead would write a future marker that the
43
- * forward-only private-store merge could never correct again (bug #38).
35
+ * `lastViewedTimestamp = Date.now()` so future messages count as unread.
44
36
  *
45
37
  * Usage with React Navigation:
46
38
  *
@@ -66,52 +58,20 @@ export const useChatRoomFocus = ({
66
58
  isFocused: false,
67
59
  });
68
60
 
69
- // `clearBoundary`: pass true only when the room the user is leaving is
70
- // genuinely being released (switching to a different room, or this
71
- // hook unmounting) - not on a mere same-room blur. `<ChatRoom>`'s
72
- // MessageList typically stays mounted across a same-room focus loss
73
- // (the whole point of this hook is that the host keeps `<Chat>`
74
- // mounted in a hidden tab), so its own scroll-tracking ref is still
75
- // intact and the redux boundary must stay in sync with it - clearing
76
- // it here would desync the two.
77
- const leaveRoom = (jid: string, clearBoundary: boolean) => {
78
- const state = store.getState();
79
- const rooms = state.rooms?.rooms;
80
- const boundaryTs = state.rooms?.readBoundaries?.[jid] ?? null;
81
- // getReadMarkerTimestamp: honour the boundary (the newest message the
82
- // user actually reached) when the user left this room scrolled up,
83
- // otherwise fall back to the newest server-acked message. Only stamp
84
- // when we actually have something to anchor to - skip rather than
85
- // fall back to the device clock (bug #38). Ignoring the boundary here
86
- // would stamp "everything read" regardless of scroll position (bug
87
- // #42, a regression of #33 reintroduced by #38).
88
- const timestamp = getReadMarkerTimestamp(rooms?.[jid], state.roomHeapSlice, boundaryTs);
89
- if (timestamp > 0) {
90
- dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
91
- }
61
+ const leaveRoom = (jid: string) => {
62
+ const timestamp = Date.now();
63
+ dispatch(setLastViewedTimestamp({ chatJID: jid, timestamp }));
92
64
  dispatch(clearVisibleRoom());
93
- (state.chatSettingStore as any)?.client
94
- ?.flushLastViewedToPrivateStoreStanza(rooms, {
95
- visibleRoomJID: jid,
96
- // Carry the same boundary to the SERVER marker - without it the
97
- // flush defaults to "everything" for the visible room. Clamped
98
- // through the same helper as the local stamp above.
99
- visibleRoomTs: getFlushBoundaryTs(
100
- rooms?.[jid],
101
- state.roomHeapSlice,
102
- boundaryTs
103
- ),
104
- })
65
+ const rooms = store.getState().rooms?.rooms;
66
+ (store.getState().chatSettingStore as any)?.client
67
+ ?.flushLastViewedToPrivateStoreStanza(rooms, { visibleRoomJID: jid })
105
68
  .catch(() => {});
106
- if (clearBoundary) {
107
- dispatch(clearReadBoundary({ jid }));
108
- }
109
69
  };
110
70
 
111
71
  useEffect(() => {
112
72
  const prev = prevRef.current;
113
73
  if (prev.isFocused && prev.roomJID && (prev.roomJID !== roomJID || !isFocused)) {
114
- leaveRoom(prev.roomJID, prev.roomJID !== roomJID);
74
+ leaveRoom(prev.roomJID);
115
75
  }
116
76
 
117
77
  if (roomJID && isFocused) {
@@ -126,7 +86,7 @@ export const useChatRoomFocus = ({
126
86
  return () => {
127
87
  const prev = prevRef.current;
128
88
  if (prev.isFocused && prev.roomJID) {
129
- leaveRoom(prev.roomJID, true);
89
+ leaveRoom(prev.roomJID);
130
90
  }
131
91
  };
132
92
  }, []);