@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
@@ -1,13 +1,8 @@
1
1
  import axios from 'axios';
2
2
  import { store } from '../roomStore';
3
3
 
4
- import { logout } from '../roomStore/chatSettingsSlice';
4
+ import { logout, refreshTokens } from '../roomStore/chatSettingsSlice';
5
5
  import { installAxiosCapture } from '../utils/devLogger';
6
- import {
7
- refreshAuthTokens,
8
- isRefreshFatalError,
9
- RefreshResult,
10
- } from './authRefresh';
11
6
 
12
7
  // Per product-code-policy: no compiled-in Ethora endpoints or tokens.
13
8
  // Consumers must call `setBaseURL(baseUrl, appToken)` (or pass
@@ -26,21 +21,10 @@ const http = axios.create({
26
21
  // `http` instance.
27
22
  installAxiosCapture(http);
28
23
 
29
- const stripApiVersion = (baseUrl: string): string =>
30
- baseUrl.replace(/\/+$/, '').replace(/\/v\d+$/, '');
31
-
32
- export const normalizeApiPath = (path?: string): string | undefined => {
33
- if (!path) {return path;}
34
- if (/^https?:\/\//i.test(path)) {return path;}
35
- if (/^\/v\d+\//.test(path)) {return path;}
36
- return `/v1${path.startsWith('/') ? '' : '/'}${path}`;
37
- };
38
-
39
24
  export function setBaseURL(baseUrl?: string, appToken?: string) {
40
- const normalized = baseUrl ? stripApiVersion(baseUrl) : baseUrl;
41
- if (normalized && normalized !== currentBaseURL) {
42
- currentBaseURL = normalized;
43
- http.defaults.baseURL = normalized;
25
+ if (baseUrl && baseUrl !== currentBaseURL) {
26
+ currentBaseURL = baseUrl;
27
+ http.defaults.baseURL = baseUrl;
44
28
  }
45
29
  if (appToken && appToken !== currentAppToken) {
46
30
  currentAppToken = appToken;
@@ -55,78 +39,149 @@ export function getCurrentBaseURL() {
55
39
  return currentBaseURL;
56
40
  }
57
41
 
58
- /**
59
- * @deprecated Import `refreshAuthTokens` from `./authRefresh` instead.
60
- *
61
- * Kept as a thin forwarder so existing call sites keep working while
62
- * they migrate. Declared as a function (not `const refresh =
63
- * refreshAuthTokens`) on purpose: this module and `authRefresh` import
64
- * each other, and a const would capture the binding before the other
65
- * module finished evaluating.
66
- */
67
- export function refresh(): Promise<RefreshResult> {
68
- return refreshAuthTokens();
42
+ export function refresh(): Promise<{
43
+ data: { refreshToken: string; token: string };
44
+ }> {
45
+ return new Promise((resolve, reject) => {
46
+ const user = store.getState().chatSettingStore.user;
47
+ try {
48
+ http
49
+ .post(
50
+ '/users/login/refresh',
51
+ {},
52
+ { headers: { Authorization: user.refreshToken } }
53
+ )
54
+ .then((response) => {
55
+ store.dispatch(
56
+ refreshTokens({
57
+ token: response.data.token,
58
+ refreshToken: response.data.refreshToken,
59
+ })
60
+ );
61
+ // BUGFIX: previously the `.then` only dispatched and never
62
+ // resolved, so every `await refresh()` callsite hung forever
63
+ // on the happy path. Resolve with the axios response shape so
64
+ // the interceptor can read `tokens.data.token` to retry.
65
+ resolve(response);
66
+ })
67
+ .catch((error) => {
68
+ reject(error);
69
+ });
70
+ } catch (error) {
71
+ // BUGFIX: previously the outer-try catch dispatched logout but
72
+ // never rejected, so a synchronous throw from `http.post` (e.g.
73
+ // a bad URL) would hang the promise. Reject explicitly.
74
+ console.log('errr');
75
+ store.dispatch(logout());
76
+ reject(error);
77
+ }
78
+ });
69
79
  }
70
80
 
81
+ let isRefreshing = false;
82
+ let failedQueue: any[] = [];
83
+
84
+ const addRequestToQueue = (config: any) => {
85
+ return new Promise((resolve, reject) => {
86
+ failedQueue.push({ resolve, reject, config });
87
+ });
88
+ };
89
+
90
+ const processQueue = (newAccessToken: string) => {
91
+ for (const request of failedQueue) {
92
+ if (newAccessToken) {
93
+ request.config.headers.Authorization = newAccessToken;
94
+ }
95
+
96
+ request.resolve(http(request.config));
97
+ }
98
+
99
+ failedQueue = [];
100
+ };
101
+
71
102
  http.interceptors.response.use(
72
103
  (response) => response,
73
104
  async (error) => {
105
+ // BUGFIX: the original condition was `if (!enabled)` — inverted, so
106
+ // turning `refreshTokens.enabled: true` actually DISABLED the refresh
107
+ // path on 401. Use the correct sense.
108
+ if (!store.getState().chatSettingStore?.config?.refreshTokens?.enabled) {
109
+ // BUGFIX: previously this branch fell off the end of the async
110
+ // function and returned `undefined`, which axios treats as a
111
+ // resolved-with-undefined response. Callers expecting an error
112
+ // got `undefined` instead, silently swallowing every failure
113
+ // when the refresh path isn't configured. Re-reject so the
114
+ // original error reaches the caller.
115
+ return Promise.reject(error);
116
+ }
117
+
74
118
  const originalRequest = error.config;
75
119
  const status = error.response?.status;
76
120
 
77
121
  // Refresh paths only fire on 401. Anything else passes through.
78
- if (!error.response || status !== 401 || !originalRequest) {
122
+ if (!error.response || status !== 401) {
79
123
  return Promise.reject(error);
80
124
  }
81
125
 
82
- // Never retry twice, and never touch the auth endpoints themselves —
83
- // both would recurse. (`_retry` was set but never checked before,
84
- // so a request could bounce between 401 and replay indefinitely.)
85
126
  if (
86
- originalRequest._retry ||
87
- originalRequest.url === '/v1/users/login/refresh' ||
88
- originalRequest.url === '/v1/users/login'
127
+ store.getState().chatSettingStore?.config?.refreshTokens?.refreshFunction
89
128
  ) {
90
- return Promise.reject(error);
91
- }
92
-
93
- const refreshConfig =
94
- store.getState().chatSettingStore?.config?.refreshTokens;
95
-
96
- // BUGFIX (kept): the original condition here was inverted, so
97
- // `refreshTokens.enabled: true` actually DISABLED the refresh path.
98
- if (!refreshConfig?.enabled) {
99
- return Promise.reject(error);
129
+ // Consumer-supplied refresh function. Call it, dispatch the new
130
+ // tokens, retry the original request.
131
+ try {
132
+ const fn = store.getState().chatSettingStore?.config?.refreshTokens?.refreshFunction;
133
+ if (!fn) return Promise.reject(error);
134
+ const result = await fn();
135
+ const { refreshToken: newRefreshToken, accessToken } = result || { refreshToken: '', accessToken: '' };
136
+ store.dispatch(
137
+ refreshTokens({
138
+ token: accessToken,
139
+ refreshToken: newRefreshToken || '',
140
+ })
141
+ );
142
+ // BUGFIX: previously this branch returned `undefined` after
143
+ // dispatching, so the original request was never retried and
144
+ // the caller resolved with undefined. Stamp the new token on
145
+ // the original config and replay.
146
+ if (originalRequest?.headers) {
147
+ originalRequest.headers.Authorization = accessToken;
148
+ }
149
+ return http(originalRequest);
150
+ } catch (refreshErr) {
151
+ return Promise.reject(refreshErr);
152
+ }
100
153
  }
101
154
 
102
- // Nothing to rotate with — reject rather than firing a doomed
103
- // refresh that would look like a bad-token event to the backend.
104
- const hasRefreshableSession = Boolean(
105
- refreshConfig.refreshFunction ||
106
- store.getState().chatSettingStore.user?.refreshToken
107
- );
108
- if (!hasRefreshableSession) {
155
+ // Built-in `/users/login/refresh` path. Skip if the failing request
156
+ // IS the refresh / login itself — otherwise we'd loop forever.
157
+ if (
158
+ originalRequest.url === '/users/login/refresh' ||
159
+ originalRequest.url === '/users/login'
160
+ ) {
109
161
  return Promise.reject(error);
110
162
  }
111
163
 
112
164
  originalRequest._retry = true;
113
165
 
166
+ if (isRefreshing) {
167
+ const retryOriginalRequest = addRequestToQueue(originalRequest);
168
+ return retryOriginalRequest;
169
+ }
170
+
171
+ isRefreshing = true;
114
172
  try {
115
- // One shared rotation for every 401 in flight — `refreshAuthTokens`
116
- // dedupes internally, which replaces the old isRefreshing/
117
- // failedQueue machinery entirely.
118
- const tokens = await refreshAuthTokens();
119
- originalRequest.headers = originalRequest.headers || {};
120
- originalRequest.headers.Authorization = tokens.token;
173
+ const tokens = await refresh();
174
+ // (was: console.log('tokens', tokens) — dumped the full response
175
+ // incl. access/refresh/ws tokens on every refresh; removed.)
176
+ isRefreshing = false;
177
+ originalRequest.headers.Authorization = tokens.data.token;
178
+ processQueue(tokens.data.token);
121
179
  return http(originalRequest);
122
180
  } catch (refreshErr) {
123
- // Only a genuinely dead session logs the user out. A network
124
- // blip, a 5xx, or a REFRESH_IN_PROGRESS race must leave the
125
- // session alone — logging out on those is exactly the mass-logout
126
- // failure mode the new backend scheme would otherwise cause.
127
- if (isRefreshFatalError(refreshErr)) {
128
- store.dispatch(logout());
129
- }
181
+ isRefreshing = false;
182
+ // BUGFIX: previously this returned the error (resolving the
183
+ // promise with the error as value) instead of rejecting, so
184
+ // axios callers got the error as a "successful" response body.
130
185
  return Promise.reject(refreshErr);
131
186
  }
132
187
  }
@@ -9,7 +9,6 @@ import {
9
9
  setCurrentRoom,
10
10
  setRoomRole,
11
11
  updateRoom,
12
- mergeUsersSet,
13
12
  } from '../roomStore/roomsSlice';
14
13
  import { IRoom, RoomMember } from '../types/types';
15
14
  import { createMessageFromXml } from '../helpers/createMessageFromXml';
@@ -17,6 +16,7 @@ import { getDataFromXml } from '../helpers/getDataFromXml';
17
16
  import { setDeleteModal } from '../roomStore/chatSettingsSlice';
18
17
  import { messageNotificationManager } from '../utils/messageNotificationManager';
19
18
  import { transformCallLogMessage } from '../helpers/callLogMessage';
19
+ import { translateKey } from '../i18n/strings';
20
20
 
21
21
  // TO DO: we are thinking to refactor this code in the following way:
22
22
  // each stanza will be parsed for 'type'
@@ -121,13 +121,24 @@ const onRealtimeMessage = async (stanza: Element) => {
121
121
  }
122
122
  const room = state.rooms.rooms[roomJID];
123
123
  const roomName = room?.title || room?.name || '';
124
+ // Fallback when we don't have a display name for the sender. This is
125
+ // user-visible — it renders as the sender line in the in-app
126
+ // notification toast (see MessageNotificationContext's ToastRow:
127
+ // `{senderName}: {message.body}`) — so it goes through the static
128
+ // i18n table like any other UI caption. We're outside React here
129
+ // (stanza handler, not a component), so resolve the locale from the
130
+ // store directly and call `translateKey` instead of `useT()`.
131
+ const locale =
132
+ state.chatSettingStore.config?.i18n?.locale ||
133
+ state.chatSettingStore.langSource;
134
+ const overrides = state.chatSettingStore.config?.i18n?.strings;
124
135
  const senderName = [
125
136
  data.attrs.senderFirstName,
126
137
  data.attrs.senderLastName,
127
138
  ]
128
139
  .filter(Boolean)
129
140
  .join(' ')
130
- .trim() || 'New message';
141
+ .trim() || translateKey('notification.senderFallback', locale, overrides);
131
142
  messageNotificationManager.showNotification(
132
143
  message,
133
144
  roomName,
@@ -227,11 +238,11 @@ const onMessageHistory = async (stanza: any) => {
227
238
  // what senderJID would have held — fall back to it. createMessageFromXml
228
239
  // already derives a display name from the jid when senderFirstName/
229
240
  // senderLastName are absent.
230
- const forwardedMessage = stanza
231
- .getChild('result')
232
- ?.getChild('forwarded')
233
- ?.getChild('message');
234
- const innerFrom = forwardedMessage?.attrs?.from || stanza.attrs.from;
241
+ const innerFrom =
242
+ stanza
243
+ .getChild('result')
244
+ ?.getChild('forwarded')
245
+ ?.getChild('message')?.attrs?.from || stanza.attrs.from;
235
246
  const senderJID = data?.attrs?.senderJID || innerFrom;
236
247
  if (!data?.attrs || !senderJID) {
237
248
  // console.log(
@@ -240,29 +251,27 @@ const onMessageHistory = async (stanza: any) => {
240
251
  // );
241
252
  return;
242
253
  }
243
- const mergedAttrs = { ...data.attrs };
244
- if (!mergedAttrs.senderJID) {mergedAttrs.senderJID = senderJID;}
245
- // The forwarded <message>'s own stanza id is our original send id
246
- // (what `xmppId` holds on the live/wrapped paths) - capture it so
247
- // this MAM-replayed message dedupes against its live echo /
248
- // optimistic pending bubble the same way, instead of never carrying
249
- // an xmppId at all.
250
- if (forwardedMessage?.attrs?.id) {mergedAttrs.xmppId = forwardedMessage.attrs.id;}
251
- const rawMessage = await createMessageFromXml(
252
- mergedAttrs,
253
- body,
254
- id,
255
- // Bug #41: pass the resource-bearing occupant `from`
256
- // (room@conference/sender-id) here, not the outer envelope's
257
- // `stanza.attrs.from` (which has no resource for a MAM result).
258
- // createMessageFromXml derives `user.id` from this field's
259
- // resource - the same authoritative source getDataFromXml uses
260
- // for live messages - so catch-up rows resolve the correct
261
- // sender from the very first render instead of needing a later
262
- // correction once the "official" history fetch lands.
263
- innerFrom,
264
- !!deleted
265
- );
254
+ // Parse the FULL stanza the same way the realtime path does (and the
255
+ // web SDK's history path does): the positional call used here before
256
+ // read only <data> attrs + <body>, so the <translations> payload and
257
+ // the <translate source> tag never made it onto archived messages.
258
+ // Since every transcript is MAM-backfilled on room open, that alone
259
+ // made translation look completely dead — the translations existed on
260
+ // the wire and were dropped at this exact parse. getDataFromXml also
261
+ // supplies xmppId (dedupe against the optimistic copy) and the
262
+ // resource||senderJID-localpart sender id.
263
+ const parsed = await getDataFromXml(stanza);
264
+ const { data: pData, id: pId, body: pBody, ...pRest } =
265
+ parsed ?? ({} as Partial<NonNullable<typeof parsed>>);
266
+ const mergedData: Record<string, unknown> = { ...(pData || data.attrs) };
267
+ if (!mergedData.senderJID) {mergedData.senderJID = senderJID;}
268
+ const rawMessage = await createMessageFromXml({
269
+ data: mergedData,
270
+ id: pId || id,
271
+ body: pBody ?? (typeof body === 'string' ? body : body?.getText?.() || ''),
272
+ ...pRest,
273
+ isDeleted: !!deleted || !!pRest?.deleted,
274
+ } as Parameters<typeof createMessageFromXml>[0]);
266
275
 
267
276
  // Same call-log transform as the realtime path, applied to archived
268
277
  // history so calls received while offline still render as log entries.
@@ -363,68 +372,18 @@ const onChatInvite = async (stanza: Element, client: any) => {
363
372
 
364
373
  const onGetMembers = (stanza: Element) => {
365
374
  if (String(stanza.attrs?.id || '') !== 'roomMemberInfo') {return;}
366
-
367
- try {
368
- const queries: Element[] = stanza.getChildren('query') ?? [];
369
- const activities: Element[] = [];
370
- let roomJid = '';
371
- for (const q of queries) {
372
- if (!roomJid && q.attrs?.room) {roomJid = q.attrs.room;}
373
- const acts = q.getChildren('activity') ?? [];
374
- for (const a of acts) {activities.push(a);}
375
- }
376
-
377
- const jid = roomJid || store.getState().rooms.activeRoomJID;
378
- if (!jid || activities.length === 0) {return;}
379
-
380
- const existingRoom = store.getState().rooms.rooms[jid];
381
- const existingMembers: RoomMember[] = existingRoom?.roomMembers ?? [];
382
- const existingByJid = new Map<string, RoomMember>(
383
- existingMembers
384
- .filter((m): m is RoomMember & { jid: string } => !!m.jid)
385
- .map((m) => [m.jid, m])
386
- );
387
-
388
- const roomMembers: RoomMember[] = activities.map((a) => {
389
- const memberJid: string | undefined = a.attrs?.jid;
390
- const existing = memberJid ? existingByJid.get(memberJid) : undefined;
391
- // The activity stanza carries only the XMPP-side fields
392
- // (name/role/ban_status/last_active/jid). REST-loaded existing
393
- // members supply firstName/lastName/xmppUsername/_id; when there's
394
- // no REST match yet we leave those as empty strings.
395
- return {
396
- firstName: existing?.firstName ?? '',
397
- lastName: existing?.lastName ?? '',
398
- xmppUsername: existing?.xmppUsername ?? '',
399
- _id: existing?._id ?? '',
400
- ...existing,
401
- name: a.attrs?.name,
402
- role: a.attrs?.role,
403
- ban_status: a.attrs?.ban_status,
404
- last_active: Number(a.attrs?.last_active),
405
- jid: memberJid,
406
- };
407
- });
408
-
409
- store.dispatch(updateRoom({ jid, updates: { roomMembers } }));
410
-
411
- // Also feed the identity cache Message.tsx reads sender names from
412
- // (state.rooms.usersSet). Keyed by both the bare local part and the
413
- // full jid since a message's `user.id` can be either depending on
414
- // how it was parsed (see createUserNameFromSetUser).
415
- const usersSetUpdates: Record<string, RoomMember> = {};
416
- for (const member of roomMembers) {
417
- if (!member.jid) {continue;}
418
- const local = member.jid.split('@')[0];
419
- usersSetUpdates[local] = member;
420
- usersSetUpdates[member.jid] = member;
421
- }
422
- if (Object.keys(usersSetUpdates).length > 0) {
423
- store.dispatch(mergeUsersSet({ members: usersSetUpdates }));
424
- }
425
- } catch (err) {
426
- console.warn('onGetMembers parse failed', err);
427
- }
375
+ // Deliberately dispatches NOTHING — mirroring the web SDK, where this
376
+ // handler parses the activity list into a local and never touches the
377
+ // store. The activity stanza carries no firstName/lastName, and both of
378
+ // the old dispatches poisoned good REST data with empty-named entries:
379
+ // - updateRoom wholesale-replaced room.roomMembers (REST members carry
380
+ // no jid, so the existing-by-jid lookup always missed), blanking the
381
+ // ChatProfileModal member list;
382
+ // - mergeUsersSet overwrote REST-hydrated identity entries under the
383
+ // exact localpart key the sender-name resolver reads first, which is
384
+ // why most of usersSet ended up empty.
385
+ // REST (/chats/my → dispatchUsersSetFromRestItems + the roomMembers
386
+ // build in rooms.api.ts) is the one hydration path for both stores.
428
387
  };
429
388
 
430
389
  const onGetRoomInfo = (stanza: Element) => {
@@ -1,45 +1,21 @@
1
1
  import { getChatsPrivateStoreRequest } from './getChatsPrivateStoreRequest.xmpp';
2
2
  import { setChatsPrivateStoreRequest } from './setChatsPrivateStoreRequest.xmpp';
3
- import {
4
- getServerReadTimestamp,
5
- isCorruptFutureReadMarker,
6
- type ReadTimestampHeapState,
7
- } from '../../helpers/getServerReadTimestamp';
8
- import type { IMessage } from '../../types/types';
9
3
 
10
4
  interface RoomLike {
11
5
  jid: string;
12
6
  lastViewedTimestamp?: number;
13
7
  unreadMessages?: number;
14
- // Needed to resolve a SERVER-timestamp read marker via
15
- // getServerReadTimestamp instead of the device clock - see bug #38.
16
- messages?: IMessage[];
17
8
  }
18
9
 
19
10
  interface FlushOpts {
20
11
  // When visibleRoomJID is set, treat it as "user just viewed everything
21
- // up to now" and stamp it with the newest server-acknowledged message
22
- // timestamp for that room - even if its in-memory lastViewedTimestamp
23
- // has not been updated yet.
12
+ // up to now" and stamp it with Date.now() — even if its in-memory
13
+ // lastViewedTimestamp has not been updated yet.
24
14
  visibleRoomJID?: string | null;
25
- // Explicit read boundary for the visible room, used INSTEAD of the
26
- // newest-message fallback. ChatRoom passes the timestamp of the newest
27
- // message the user actually reached when they leave a room while
28
- // scrolled up - without it, the default writes "read everything" to
29
- // the server and the messages they never scrolled down to come back as
30
- // read on the next login, even though the local count was correct.
31
- // Customer-reported #33 (server half).
32
- visibleRoomTs?: number | null;
33
15
  // If true, only write entries for rooms where unreadMessages === 0
34
16
  // (or the visible room). Used at logout time: rooms with outstanding
35
17
  // unread keep their old marker so the next login still surfaces them.
36
18
  onlyIfNoUnread?: boolean;
37
- // Pending/failed-send state (store.getState().roomHeapSlice), combined
38
- // with each room's `messages` to resolve the newest SERVER-acked
39
- // message timestamp via getServerReadTimestamp. Passed in rather than
40
- // read from the store here so this module stays a pure function of its
41
- // arguments - existing jest coverage builds `rooms` by hand.
42
- heapState?: ReadTimestampHeapState;
43
19
  }
44
20
 
45
21
  /**
@@ -49,11 +25,8 @@ interface FlushOpts {
49
25
  * each other's entries.
50
26
  *
51
27
  * Called on: tab change away from chat, AppState background/inactive,
52
- * and (with onlyIfNoUnread=true) logout. ChatRoom's own unmount path also
53
- * goes through this (via flushLastViewedToPrivateStoreStanza) for the
54
- * single-room case - actionSetTimestampToPrivateStore is a separate,
55
- * unconditional low-level write primitive kept for direct/external use
56
- * and is not part of this merge path.
28
+ * and (with onlyIfNoUnread=true) logout. ChatRoom's own unmount path
29
+ * still uses actionSetTimestampToPrivateStore for the single-room case.
57
30
  */
58
31
  export async function flushLastViewedToPrivateStore(
59
32
  client: any,
@@ -61,7 +34,7 @@ export async function flushLastViewedToPrivateStore(
61
34
  opts: FlushOpts = {}
62
35
  ): Promise<boolean> {
63
36
  if (!client?.client) {return false;}
64
- const { visibleRoomJID, visibleRoomTs, onlyIfNoUnread, heapState } = opts;
37
+ const { visibleRoomJID, onlyIfNoUnread } = opts;
65
38
  const roomList = Object.values(rooms || {});
66
39
  if (roomList.length === 0) {return false;}
67
40
 
@@ -73,6 +46,7 @@ export async function flushLastViewedToPrivateStore(
73
46
  }
74
47
  if (!storeObj || typeof storeObj !== 'object') {storeObj = {};}
75
48
 
49
+ const nowMs = Date.now();
76
50
  let dirty = false;
77
51
 
78
52
  for (const room of roomList) {
@@ -80,56 +54,21 @@ export async function flushLastViewedToPrivateStore(
80
54
  const isVisible = !!visibleRoomJID && room.jid === visibleRoomJID;
81
55
  const hasUnread = Number(room.unreadMessages || 0) > 0;
82
56
 
83
- // Newest message this room actually has server-side proof of. Used
84
- // both as the "read up to now" fallback for the visible room and as
85
- // the yardstick for detecting a corrupt (future) stored marker below
86
- // - never as a substitute for the device clock (bug #38: a device
87
- // with a fast clock previously stamped Date.now() here, and once
88
- // that future value reached the server the forward-only check a few
89
- // lines down rejected every later correct write, forever).
90
- const newestAckedMs = getServerReadTimestamp(room as any, heapState);
91
-
92
- // For the visible room, persist "read up to the newest message we
93
- // know the server has" - read state is driven by room visibility,
94
- // not by a sentinel timestamp. The exception is an explicit
95
- // `visibleRoomTs`: the caller knows the user only read up to a
96
- // certain point (left the room while scrolled up), so stamping
97
- // "everything" here would mark genuinely-unread messages as read.
57
+ // For the visible room, persist "now" — read state is driven by
58
+ // room visibility, not by a sentinel timestamp.
98
59
  let ts: number | undefined;
99
60
  if (isVisible) {
100
- ts =
101
- typeof visibleRoomTs === 'number' && visibleRoomTs > 0
102
- ? visibleRoomTs
103
- : newestAckedMs || undefined;
61
+ ts = nowMs;
104
62
  } else if (room.lastViewedTimestamp && room.lastViewedTimestamp > 0) {
105
63
  ts = room.lastViewedTimestamp;
106
64
  }
107
65
 
108
- // Nothing to anchor a write to (no boundary, no existing marker, no
109
- // known messages yet) - skip rather than write a device-clock guess.
110
66
  if (!ts) {continue;}
111
67
  if (onlyIfNoUnread && hasUnread && !isVisible) {continue;}
112
68
 
113
69
  const prev = storeObj[room.jid];
114
70
  const prevNum = prev != null ? Number(prev) : 0;
115
- // A currently-stored value that sits well past the newest message we
116
- // know this room has is not "fresher" - it's a leftover future
117
- // marker (bug #38). Forward-only logic normally protects a fresher
118
- // read from being clobbered by a stale fetch, but applied to a
119
- // corrupt future value it does the opposite: it permanently blocks
120
- // the correct (smaller) value from ever landing. Detect that case
121
- // and waive the forward-only check for it specifically; sane values
122
- // keep the normal forward-only protection.
123
- //
124
- // "Well past the newest message we know about" is deliberately NOT
125
- // sufficient on its own - see isCorruptFutureReadMarker. THIS device's
126
- // copy of the room can simply be stale (history not synced yet this
127
- // session), in which case a legitimate marker written by another
128
- // device that HAS seen newer messages looks exactly like a corrupt
129
- // one, and "healing" it here would push the server marker BACKWARDS
130
- // and resurrect already-read messages on every device.
131
- const prevLooksCorrupt = isCorruptFutureReadMarker(prevNum, newestAckedMs);
132
- if (!prevLooksCorrupt && Number.isFinite(prevNum) && prevNum >= ts) {continue;}
71
+ if (Number.isFinite(prevNum) && prevNum >= ts) {continue;}
133
72
  storeObj[room.jid] = String(ts);
134
73
  dirty = true;
135
74
  }
@@ -70,12 +70,7 @@ export const presenceInRoom = async (
70
70
  try {
71
71
  await createTimeoutPromise(2000, unsubscribe);
72
72
  } catch (err) {
73
- // The room's reply schedules resolve() `delay` ms later (2000 by
74
- // default) — the same length as this timeout, so the timeout used
75
- // to win the race and reject a join that had actually succeeded
76
- // (allRoomPresences "failed" with undefined on every bootstrap).
77
- // Only a join that never got an answer is a failure.
78
- if (!settled) {reject(err);}
73
+ reject(err);
79
74
  }
80
75
  })();
81
76
  });
@@ -2,14 +2,12 @@ import { Client, xml } from '@xmpp/client';
2
2
  import { Element } from '@xmpp/xml';
3
3
  import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
4
4
 
5
- let subscribeIdCounter = 0;
6
-
7
5
  export async function subscribeToRoomMessages(
8
6
  client: Client,
9
7
  roomJID: string,
10
8
  userNick?: string
11
9
  ): Promise<boolean> {
12
- const id = `newSubscription:${Date.now().toString(36)}-${(++subscribeIdCounter).toString(36)}`;
10
+ const id = `newSubscription:${Date.now().toString()}`;
13
11
  let stanzaHandler: (stanza: Element) => void;
14
12
 
15
13
  const unsubscribe = () => {
@@ -35,15 +33,6 @@ export async function subscribeToRoomMessages(
35
33
  if (stanza.attrs.type === 'result') {
36
34
  finish(resolve, true);
37
35
  } else if (stanza.attrs.type === 'error') {
38
- const errorEl = typeof stanza.getChild === 'function' ? stanza.getChild('error') : null;
39
- const condition = errorEl?.children?.find(
40
- (c: any) => c?.name && c.name !== 'text'
41
- ) as Element | undefined;
42
- console.warn(
43
- '[PushService] MucSub subscribe error for',
44
- roomJID,
45
- condition?.name ?? 'unknown'
46
- );
47
36
  finish(resolve, false);
48
37
  }
49
38
  }