@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,144 +1,86 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useEffect, useState } from 'react';
4
- import { isSecureFileUrl, requestFileTokenRecovery } from '../../helpers/secureFileUrl';
5
- import { Image, Pressable, StyleSheet, View } from 'react-native';
4
+ import { Pressable, StyleSheet, View } from 'react-native';
5
+ import { useVideoPlayer, VideoView } from 'expo-video';
6
6
  import { useDispatch } from 'react-redux';
7
7
  import { setActiveFile, setActiveModal } from '../../roomStore/chatSettingsSlice';
8
8
  import { MODAL_TYPES } from '../../helpers/constants/MODAL_TYPES';
9
9
  import { PlayIcon } from '../../assets/icons';
10
10
  import { defaultMediaDims, fitMediaDimensions } from '../../helpers/mediaDimensions';
11
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
- const PlayBadge = () => /*#__PURE__*/_jsx(View, {
13
- style: styles.overlay,
14
- pointerEvents: "none",
15
- children: /*#__PURE__*/_jsx(View, {
16
- style: styles.playButton,
17
- children: /*#__PURE__*/_jsx(PlayIcon, {
18
- width: 28,
19
- height: 28
20
- })
21
- })
22
- });
23
-
24
- /**
25
- * Poster path — taken whenever the message carries a `locationPreview`.
26
- *
27
- * A chat row only ever needs a still and a play affordance; actual
28
- * playback happens in the full-screen preview. Drawing that still with a
29
- * plain <Image> keeps the whole bubble inside the RN view hierarchy, so
30
- * the play badge is guaranteed to composite on top of it.
31
- */
32
- const PosterVideo = ({
33
- previewURL,
34
- onOpen,
35
- onPosterError
36
- }) => {
37
- const [dims, setDims] = useState(defaultMediaDims());
38
- useEffect(() => {
39
- if (!previewURL) {
40
- return;
41
- }
42
- let active = true;
43
- Image.getSize(previewURL, (w, h) => {
44
- if (active) {
45
- setDims(fitMediaDimensions(w, h));
46
- }
47
- }, () => {
48
- /* keep the default box if the size probe fails */
49
- });
50
- return () => {
51
- active = false;
52
- };
53
- }, [previewURL]);
54
- return /*#__PURE__*/_jsxs(Pressable, {
55
- onPress: onOpen,
56
- style: [styles.wrapper, {
57
- width: dims.width,
58
- height: dims.height
59
- }],
60
- accessibilityRole: "button",
61
- accessibilityLabel: "Play video",
62
- children: [/*#__PURE__*/_jsx(Image, {
63
- source: {
64
- uri: previewURL
65
- },
66
- style: styles.video,
67
- resizeMode: "cover"
68
- // Not every backend returns a real still — some set
69
- // locationPreview to the video URL itself, which decodes to
70
- // nothing. Rather than show an empty box, fall back to the
71
- // static placeholder branch.
72
- ,
73
- onError: onPosterError
74
- }), /*#__PURE__*/_jsx(PlayBadge, {})]
75
- });
76
- };
77
-
78
- /**
79
- * Fallback for messages with no usable poster frame: a static dark
80
- * placeholder behind the play badge.
81
- *
82
- * This branch used to mount an expo-video player purely to paint the
83
- * first frame (`VideoView` + `surfaceType="textureView"`). That never
84
- * composited reliably: on Android (Pixel, Android 16, New Architecture)
85
- * the native video surface draws ABOVE sibling RN views, swallowing the
86
- * play badge — the video looked like a plain photo. There is no
87
- * surfaceType/zIndex combination that guarantees ordering across SDK 54
88
- * and 57, so we don't fight it: no live surface in the bubble at all.
89
- * The badge is plain RN views over a plain RN background, which cannot
90
- * be occluded, and we drop the per-row player instance as a bonus.
91
- * Actual playback (and the real first frame) happens in the full-screen
92
- * preview modal.
93
- */
94
- const PlaceholderVideo = ({
95
- onOpen
96
- }) => {
97
- const dims = defaultMediaDims();
98
- return /*#__PURE__*/_jsx(Pressable, {
99
- onPress: onOpen,
100
- style: [styles.wrapper, {
101
- width: dims.width,
102
- height: dims.height
103
- }],
104
- accessibilityRole: "button",
105
- accessibilityLabel: "Play video",
106
- children: /*#__PURE__*/_jsx(PlayBadge, {})
107
- });
108
- };
109
12
  const CustomMessageVideo = ({
110
13
  fileName,
111
- originalName,
112
14
  fileURL,
113
- mimetype,
114
- previewURL
15
+ mimetype
115
16
  }) => {
116
17
  const dispatch = useDispatch();
117
- const [posterFailed, setPosterFailed] = useState(false);
18
+ const [dims, setDims] = useState(defaultMediaDims());
19
+ const player = useVideoPlayer(fileURL, p => {
20
+ p.muted = true;
21
+ });
22
+ useEffect(() => {
23
+ const sub = player.addListener('statusChange', () => {
24
+ const size = player.videoTrack?.size;
25
+ if (size?.width && size?.height) {
26
+ setDims(fitMediaDimensions(size.width, size.height));
27
+ }
28
+ });
29
+ return () => sub.remove();
30
+ }, [player]);
118
31
  const handleOpen = () => {
119
32
  dispatch(setActiveFile({
120
33
  fileName,
121
34
  fileURL,
122
- mimetype,
123
- originalName
35
+ mimetype
124
36
  }));
125
37
  dispatch(setActiveModal(MODAL_TYPES.FILE_PREVIEW));
126
38
  };
127
- if (previewURL && !posterFailed) {
128
- return /*#__PURE__*/_jsx(PosterVideo, {
129
- previewURL: previewURL,
130
- onOpen: handleOpen,
131
- onPosterError: () => {
132
- if (isSecureFileUrl(previewURL)) {
133
- requestFileTokenRecovery();
134
- }
135
- setPosterFailed(true);
136
- }
137
- });
138
- }
139
- return /*#__PURE__*/_jsx(PlaceholderVideo, {
140
- onOpen: handleOpen
141
- });
39
+ return (
40
+ /*#__PURE__*/
41
+ // Capture-overlay pattern: VideoView sits underneath without ANY
42
+ // touch participation; a transparent absolute-fill <Pressable> on
43
+ // top owns the tap. Previously we wrapped VideoView in a
44
+ // TouchableOpacity and set `pointerEvents="none"` on the inner
45
+ // VideoView — but on some expo-video versions / iOS the native
46
+ // VideoView still intercepted gestures despite that hint, so
47
+ // tapping the poster did nothing. Customer-reported #9 (video
48
+ // preview unresponsive). The Pressable now guarantees the tap
49
+ // reaches `handleOpen`.
50
+ _jsxs(View, {
51
+ style: [styles.wrapper, {
52
+ width: dims.width,
53
+ height: dims.height
54
+ }],
55
+ children: [/*#__PURE__*/_jsx(VideoView, {
56
+ player: player,
57
+ style: styles.video,
58
+ contentFit: "cover",
59
+ nativeControls: false,
60
+ surfaceType: "textureView",
61
+ pointerEvents: "none"
62
+ }), /*#__PURE__*/_jsx(View, {
63
+ style: styles.overlay,
64
+ pointerEvents: "none",
65
+ children: /*#__PURE__*/_jsx(View, {
66
+ style: styles.playButton,
67
+ children: /*#__PURE__*/_jsx(PlayIcon, {
68
+ width: 28,
69
+ height: 28
70
+ })
71
+ })
72
+ }), /*#__PURE__*/_jsx(Pressable, {
73
+ onPress: handleOpen
74
+ // Sits ON TOP of VideoView + the play-button overlay; transparent
75
+ // so the poster + play icon show through. Captures the tap and
76
+ // routes to handleOpen → setActiveModal(FILE_PREVIEW).
77
+ ,
78
+ style: StyleSheet.absoluteFill,
79
+ accessibilityRole: "button",
80
+ accessibilityLabel: "Play video"
81
+ })]
82
+ })
83
+ );
142
84
  };
143
85
  export default CustomMessageVideo;
144
86
  const styles = StyleSheet.create({
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","isSecureFileUrl","requestFileTokenRecovery","Image","Pressable","StyleSheet","View","useDispatch","setActiveFile","setActiveModal","MODAL_TYPES","PlayIcon","defaultMediaDims","fitMediaDimensions","jsx","_jsx","jsxs","_jsxs","PlayBadge","style","styles","overlay","pointerEvents","children","playButton","width","height","PosterVideo","previewURL","onOpen","onPosterError","dims","setDims","active","getSize","w","h","onPress","wrapper","accessibilityRole","accessibilityLabel","source","uri","video","resizeMode","onError","PlaceholderVideo","CustomMessageVideo","fileName","originalName","fileURL","mimetype","dispatch","posterFailed","setPosterFailed","handleOpen","FILE_PREVIEW","create","borderRadius","overflow","backgroundColor","absoluteFill","justifyContent","alignItems"],"sourceRoot":"../../../../src","sources":["components/styled/VideoMessage.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SACEC,eAAe,EACfC,wBAAwB,QACnB,6BAA6B;AACpC,SAASC,KAAK,EAAEC,SAAS,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACjE,SAASC,WAAW,QAAQ,aAAa;AACzC,SACEC,aAAa,EACbC,cAAc,QACT,mCAAmC;AAC1C,SAASC,WAAW,QAAQ,qCAAqC;AACjE,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SACEC,gBAAgB,EAChBC,kBAAkB,QAEb,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgBvC,MAAMC,SAAmB,GAAGA,CAAA,kBAC1BH,IAAA,CAACT,IAAI;EAACa,KAAK,EAAEC,MAAM,CAACC,OAAQ;EAACC,aAAa,EAAC,MAAM;EAAAC,QAAA,eAC/CR,IAAA,CAACT,IAAI;IAACa,KAAK,EAAEC,MAAM,CAACI,UAAW;IAAAD,QAAA,eAC7BR,IAAA,CAACJ,QAAQ;MAACc,KAAK,EAAE,EAAG;MAACC,MAAM,EAAE;IAAG,CAAE;EAAC,CAC/B;AAAC,CACH,CACP;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAIJ,GAAGA,CAAC;EAAEC,UAAU;EAAEC,MAAM;EAAEC;AAAc,CAAC,KAAK;EAC9C,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGhC,QAAQ,CAAYY,gBAAgB,CAAC,CAAC,CAAC;EAE/Db,SAAS,CAAC,MAAM;IACd,IAAI,CAAC6B,UAAU,EAAE;MACf;IACF;IACA,IAAIK,MAAM,GAAG,IAAI;IACjB9B,KAAK,CAAC+B,OAAO,CACXN,UAAU,EACV,CAACO,CAAC,EAAEC,CAAC,KAAK;MACR,IAAIH,MAAM,EAAE;QACVD,OAAO,CAACnB,kBAAkB,CAACsB,CAAC,EAAEC,CAAC,CAAC,CAAC;MACnC;IACF,CAAC,EACD,MAAM;MACJ;IAAA,CAEJ,CAAC;IACD,OAAO,MAAM;MACXH,MAAM,GAAG,KAAK;IAChB,CAAC;EACH,CAAC,EAAE,CAACL,UAAU,CAAC,CAAC;EAEhB,oBACEX,KAAA,CAACb,SAAS;IACRiC,OAAO,EAAER,MAAO;IAChBV,KAAK,EAAE,CAACC,MAAM,CAACkB,OAAO,EAAE;MAAEb,KAAK,EAAEM,IAAI,CAACN,KAAK;MAAEC,MAAM,EAAEK,IAAI,CAACL;IAAO,CAAC,CAAE;IACpEa,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAC,YAAY;IAAAjB,QAAA,gBAE/BR,IAAA,CAACZ,KAAK;MACJsC,MAAM,EAAE;QAAEC,GAAG,EAAEd;MAAW,CAAE;MAC5BT,KAAK,EAAEC,MAAM,CAACuB,KAAM;MACpBC,UAAU,EAAC;MACX;MACA;MACA;MACA;MAAA;MACAC,OAAO,EAAEf;IAAc,CACxB,CAAC,eACFf,IAAA,CAACG,SAAS,IAAE,CAAC;EAAA,CACJ,CAAC;AAEhB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM4B,gBAEJ,GAAGA,CAAC;EAAEjB;AAAO,CAAC,KAAK;EACnB,MAAME,IAAI,GAAGnB,gBAAgB,CAAC,CAAC;EAE/B,oBACEG,IAAA,CAACX,SAAS;IACRiC,OAAO,EAAER,MAAO;IAChBV,KAAK,EAAE,CAACC,MAAM,CAACkB,OAAO,EAAE;MAAEb,KAAK,EAAEM,IAAI,CAACN,KAAK;MAAEC,MAAM,EAAEK,IAAI,CAACL;IAAO,CAAC,CAAE;IACpEa,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAC,YAAY;IAAAjB,QAAA,eAE/BR,IAAA,CAACG,SAAS,IAAE;EAAC,CACJ,CAAC;AAEhB,CAAC;AAED,MAAM6B,kBAAqD,GAAGA,CAAC;EAC7DC,QAAQ;EACRC,YAAY;EACZC,OAAO;EACPC,QAAQ;EACRvB;AACF,CAAC,KAAK;EACJ,MAAMwB,QAAQ,GAAG7C,WAAW,CAAC,CAAC;EAC9B,MAAM,CAAC8C,YAAY,EAAEC,eAAe,CAAC,GAAGtD,QAAQ,CAAC,KAAK,CAAC;EAEvD,MAAMuD,UAAU,GAAGA,CAAA,KAAM;IACvBH,QAAQ,CAAC5C,aAAa,CAAC;MAAEwC,QAAQ;MAAEE,OAAO;MAAEC,QAAQ;MAAEF;IAAa,CAAC,CAAC,CAAC;IACtEG,QAAQ,CAAC3C,cAAc,CAACC,WAAW,CAAC8C,YAAY,CAAC,CAAC;EACpD,CAAC;EAED,IAAI5B,UAAU,IAAI,CAACyB,YAAY,EAAE;IAC/B,oBACEtC,IAAA,CAACY,WAAW;MACVC,UAAU,EAAEA,UAAW;MACvBC,MAAM,EAAE0B,UAAW;MACnBzB,aAAa,EAAEA,CAAA,KAAM;QACnB,IAAI7B,eAAe,CAAC2B,UAAU,CAAC,EAAE;UAC/B1B,wBAAwB,CAAC,CAAC;QAC5B;QACAoD,eAAe,CAAC,IAAI,CAAC;MACvB;IAAE,CACH,CAAC;EAEN;EAEA,oBAAOvC,IAAA,CAAC+B,gBAAgB;IAACjB,MAAM,EAAE0B;EAAW,CAAE,CAAC;AACjD,CAAC;AAED,eAAeR,kBAAkB;AAEjC,MAAM3B,MAAM,GAAGf,UAAU,CAACoD,MAAM,CAAC;EAC/BnB,OAAO,EAAE;IACPoB,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE,QAAQ;IAClBC,eAAe,EAAE;EACnB,CAAC;EACDjB,KAAK,EAAE;IACLlB,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE;EACV,CAAC;EACDL,OAAO,EAAE;IACP,GAAGhB,UAAU,CAACwD,YAAY;IAC1BC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDvC,UAAU,EAAE;IACVC,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVgC,YAAY,EAAE,EAAE;IAChBE,eAAe,EAAE,qBAAqB;IACtCE,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useState","Pressable","StyleSheet","View","useVideoPlayer","VideoView","useDispatch","setActiveFile","setActiveModal","MODAL_TYPES","PlayIcon","defaultMediaDims","fitMediaDimensions","jsx","_jsx","jsxs","_jsxs","CustomMessageVideo","fileName","fileURL","mimetype","dispatch","dims","setDims","player","p","muted","sub","addListener","size","videoTrack","width","height","remove","handleOpen","FILE_PREVIEW","style","styles","wrapper","children","video","contentFit","nativeControls","surfaceType","pointerEvents","overlay","playButton","onPress","absoluteFill","accessibilityRole","accessibilityLabel","create","borderRadius","overflow","backgroundColor","justifyContent","alignItems"],"sourceRoot":"../../../../src","sources":["components/styled/VideoMessage.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,33 +5,23 @@ import { AppState, DeviceEventEmitter } from 'react-native';
5
5
  import NetInfo from '@react-native-community/netinfo';
6
6
  import { VideoCallOverlay } from '../components/VideoCalls/VideoCallOverlay';
7
7
  import XmppClient from '../networking/xmppClient';
8
- import { refreshAuthTokensQuietly } from '../networking/authRefresh';
8
+ import { refreshTokens } from '../roomStore/chatSettingsSlice';
9
9
  import { buildXmppClientKey, getGlobalXmppClient, getReusableXmppClientByKey, isXmppClientReusable, setGlobalXmppClient, withXmppClientInitLock } from '../utils/clientRegistry';
10
10
  import { applyResolvedUserToStore, refreshUserCredentialsForXmpp, resolveInitBeforeLoadUser } from '../helpers/resolveInitBeforeLoadUser';
11
11
  import { ensureScopedChatCache } from '../helpers/ensureScopedChatCache';
12
12
  import { getRooms as prefetchRoomsViaRest } from '../networking/api-requests/rooms.api';
13
13
  import { allRoomPresences } from '../networking/xmpp/allRoomPresences.xmpp';
14
- import { pushSubscriptionService } from '../services/pushSubscriptionService';
15
14
  import { store } from '../roomStore';
16
15
  import { logout, setStoreClient, setConfig } from '../roomStore/chatSettingsSlice';
17
- import { setLogoutState, setVisibleRoom, clearVisibleRoom, setLastViewedTimestamp, deleteRoomMessage, setUnreadSyncing } from '../roomStore/roomsSlice';
18
- import { getFlushBoundaryTs, getReadMarkerTimestamp } from '../helpers/getServerReadTimestamp';
16
+ import { setLogoutState, setVisibleRoom, clearVisibleRoom, setLastViewedTimestamp, deleteRoomMessage, msgSortableMs, setUnreadSyncing } from '../roomStore/roomsSlice';
19
17
  import { runHistoryPreloadScheduler } from '../helpers/historyPreloadScheduler';
20
- import { updateMessagesTillLast } from '../helpers/updateMessagesTillLast';
21
- import { secureUserStorage } from '../helpers/secureUserStorage';
18
+ import { asyncLocalStorage } from '../hooks/useLocalStorage';
19
+ import { localStorageConstants } from '../helpers/constants/LOCAL_STORAGE';
22
20
  import { clearPersistedState } from '../roomStore/persistence';
23
21
  import { pushLog as devPushLog } from '../utils/devLogger';
24
22
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
23
  const XmppContext = /*#__PURE__*/createContext(null);
26
24
  const LOGOUT_EVENT = 'ethora-xmpp-logout';
27
- const subscribeAllRoomsForPush = (client, reason) => {
28
- const rooms = Object.keys(store.getState().rooms.rooms || {});
29
- if (!client || !rooms.length) {
30
- return;
31
- }
32
- const nick = client.jid?.getLocal();
33
- pushSubscriptionService.subscribeToRooms(client, rooms, nick).then(() => devPushLog('xmpp', `${reason}: mucsub ok for ${rooms.length} rooms`)).catch(e => devPushLog('warn', `${reason}: mucsub subscribe failed`, e));
34
- };
35
25
  export const XmppProvider = ({
36
26
  children,
37
27
  config,
@@ -58,23 +48,21 @@ export const XmppProvider = ({
58
48
  // the XmppClient at least doesn't crash on `undefined.password`.
59
49
  const credentialsProvider = useMemo(() => {
60
50
  return async () => {
61
- // 1. Make sure the REST tokens are fresh before re-minting XMPP
62
- // creds. This used to call `config.refreshTokens.refreshFunction`
63
- // directly and then fall into step 2, which refreshes again —
64
- // two rotations back to back, which the new backend scheme
65
- // reads as a race at best and token reuse at worst. One call to
66
- // the shared rotation point covers both the consumer-supplied
67
- // function and the built-in endpoint.
68
- if (config?.refreshTokens?.enabled) {
69
- const rotated = await refreshAuthTokensQuietly({
70
- force: true
71
- });
72
- if (rotated?.xmppPassword) {
73
- const rotatedUser = store.getState().chatSettingStore.user;
74
- return {
75
- username: rotatedUser?.xmppUsername || rotatedUser?.defaultWallet?.walletAddress || '',
76
- password: rotated.xmppPassword
77
- };
51
+ // 1. Consumer-supplied REST refresh (when wired). This runs
52
+ // before the SDK's own refresh chain so non-Ethora backends
53
+ // can keep auth state in sync with their own token endpoint.
54
+ const customRefresh = config?.refreshTokens?.refreshFunction;
55
+ if (customRefresh) {
56
+ try {
57
+ const result = await customRefresh();
58
+ if (result?.accessToken) {
59
+ store.dispatch(refreshTokens({
60
+ token: result.accessToken,
61
+ refreshToken: result.refreshToken || ''
62
+ }));
63
+ }
64
+ } catch (err) {
65
+ devPushLog('warn', 'XMPP creds refresh: customRefresh failed', err);
78
66
  }
79
67
  }
80
68
 
@@ -106,7 +94,7 @@ export const XmppProvider = ({
106
94
  password: u?.xmppPassword || ''
107
95
  };
108
96
  };
109
- }, [config?.jwtLogin?.enabled, config?.jwtLogin?.token, config?.refreshTokens?.enabled, config?.userLogin?.enabled, config?.customLogin?.enabled, config?.initBeforeLoadAuth?.myEndpoint]);
97
+ }, [config?.jwtLogin?.enabled, config?.jwtLogin?.token, config?.refreshTokens?.refreshFunction, config?.userLogin?.enabled, config?.customLogin?.enabled, config?.initBeforeLoadAuth?.myEndpoint]);
110
98
  const initializeClient = useCallback(async (username, password, xmppSettings) => {
111
99
  const settings = xmppSettings || config?.xmppSettings;
112
100
  const key = buildXmppClientKey(username, settings);
@@ -172,22 +160,11 @@ export const XmppProvider = ({
172
160
  if (!underlying) {
173
161
  return;
174
162
  }
175
- allRoomPresences(underlying).catch(e => devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e)).finally(() => subscribeAllRoomsForPush(underlying, 'reconnect'));
163
+ allRoomPresences(underlying).catch(e => devPushLog('warn', 'reconnect: allRoomPresences re-join failed', e));
176
164
  // Also refresh the private store so unread / lastViewed markers
177
165
  // are accurate after a long reconnect — the MUC re-join above only
178
166
  // restores delivery, not unread state. Idempotent on first connect.
179
167
  created.getChatsPrivateStoreRequestStanza().catch(e => devPushLog('warn', 'reconnect: privateStore refresh failed', e));
180
- // Pull whatever landed in each room's archive while the stream was
181
- // down. MUC presence re-join above only restores delivery for
182
- // messages sent AFTER this reconnect — anything sent during the
183
- // offline window has no live stanza to catch, and previously only
184
- // came back on a full app restart (fresh useChatWrapperInit mount
185
- // re-running its own one-shot boot sync). Safe on the very first
186
- // connect too: rooms have no `lastMessageTimestamp` yet at that
187
- // point, so this is a no-op until the bootstrap's own history load
188
- // populates it. Customer-reported #32.
189
- const rooms = store.getState().rooms?.rooms || {};
190
- updateMessagesTillLast(rooms, created).catch(e => devPushLog('warn', 'reconnect: offline catch-up sync failed', e));
191
168
  });
192
169
  setClient(created);
193
170
  lastCredsRef.current = {
@@ -260,7 +237,7 @@ export const XmppProvider = ({
260
237
  devPushLog('rn', 'initBeforeLoad: clearStoreBeforeInit');
261
238
  store.dispatch(setLogoutState());
262
239
  store.dispatch(logout());
263
- await secureUserStorage().remove().catch(() => undefined);
240
+ await asyncLocalStorage(localStorageConstants.ETHORA_USER).remove().catch(() => undefined);
264
241
  }
265
242
  await ensureScopedChatCache(config);
266
243
  devPushLog('rn', 'initBeforeLoad: scope ok, resolving user…');
@@ -288,40 +265,13 @@ export const XmppProvider = ({
288
265
  store.dispatch(setConfig(config));
289
266
  }
290
267
 
291
- // Rotate BEFORE the first XMPP connect. On the rotating backend
292
- // the xmpp password is a short-lived JWT that only the newest
293
- // rotation knows, and each rotation invalidates its predecessors
294
- // — so a snapshot's password (a host's cached `userLogin.user`,
295
- // a persisted session) is usually already dead at boot. Without
296
- // this, the first SASL attempt fails `not-authorized`, all three
297
- // bootstrap retries re-present the same dead password, and the
298
- // user dead-ends on the Connection error modal even though one
299
- // rotation away a perfectly good session existed. The rotation
300
- // also lands the fileToken pre-render, so secure media never
301
- // paints blank first. Quiet + deduped; when it can't rotate
302
- // (no refresh material, non-rotating backend) we just connect
303
- // with what the snapshot has, exactly as before.
304
- // jwtLogin is skipped: /users/client just minted fresh creds.
305
- let connectPassword = resolved.xmppPassword;
306
- if (config?.refreshTokens?.enabled && !config?.jwtLogin?.enabled) {
307
- const rotated = await refreshAuthTokensQuietly({
308
- force: true
309
- });
310
- if (cancelled) {
311
- return;
312
- }
313
- if (rotated?.xmppPassword) {
314
- connectPassword = rotated.xmppPassword;
315
- }
316
- }
317
-
318
268
  // Kick off REST /chats/my; allRoomPresences below needs the
319
269
  // room list to be in redux, otherwise it joins 0 MUCs and the
320
270
  // user receives zero realtime messages until they manually tap
321
271
  // into each room. Track the promise so we can await it before
322
272
  // joining presences.
323
273
  const restRoomsPromise = prefetchRoomsViaRest().catch(() => undefined);
324
- const c = await initializeClient(resolved.xmppUsername, connectPassword, config?.xmppSettings);
274
+ const c = await initializeClient(resolved.xmppUsername, resolved.xmppPassword, config?.xmppSettings);
325
275
  if (cancelled) {
326
276
  return;
327
277
  }
@@ -357,7 +307,6 @@ export const XmppProvider = ({
357
307
  } catch (e) {
358
308
  devPushLog('warn', 'initBeforeLoad: allRoomPresences failed', e);
359
309
  }
360
- subscribeAllRoomsForPush(c.client, 'initBeforeLoad');
361
310
  store.dispatch(setStoreClient(c));
362
311
  completedBootstrapKeyRef.current = key;
363
312
  inflightBootstrapKeyRef.current = '';
@@ -490,14 +439,9 @@ export const XmppProvider = ({
490
439
  // be re-marked visible on return. Lives in the effect closure (one per
491
440
  // client) — persists across the listener's many invocations.
492
441
  let visibleBeforeBackground = null;
493
- const suspendInBackground = !config?.xmppSettings?.keepAliveInBackground;
494
442
  const sub = AppState.addEventListener('change', next => {
495
443
  const c = client;
496
444
  if (next === 'active') {
497
- if (c?.isSuspended) {
498
- devPushLog('rn', 'AppState active: resuming suspended XMPP client');
499
- c.resume();
500
- }
501
445
  // Returned to foreground. If the socket died while backgrounded
502
446
  // (iOS suspends the WebSocket; long background kills it), the
503
447
  // status may still read 'online' until xmpp.js notices the dead
@@ -529,49 +473,23 @@ export const XmppProvider = ({
529
473
  if (!c) {
530
474
  return;
531
475
  }
532
- if (next === 'background' && suspendInBackground) {
533
- c.suspend().catch(() => undefined);
534
- }
535
476
  const state = store.getState();
536
477
  const rooms = state.rooms?.rooms;
537
478
  const visibleRoomJID = state.rooms?.visibleRoomJID || null;
538
479
  // Mark the open room "not visible" while backgrounded so messages
539
480
  // that arrive (or MAM-replay on reconnect) count as unread instead
540
481
  // of being silently treated as read — the "mounted == visible ==
541
- // read" gap. Stamp lastViewed=<the read boundary, if the user left
542
- // scrolled up, else the newest server-acked message>, not
543
- // Date.now(), as the read baseline: a device clock running ahead
544
- // would otherwise write a future marker that the forward-only
545
- // private-store merge can never correct again (bug #38). Then
546
- // clear visibility and flush that marker to the server private
547
- // store. Restored on the next 'active' transition above. Handled
548
- // here in the provider so consumers using the component as a
549
- // package get correct unread without reaching into the chat store
550
- // themselves.
551
- //
552
- // The read boundary (rooms.readBoundaries) is deliberately left
553
- // untouched here - MessageList normally stays mounted through a
554
- // simple background/foreground cycle, so its own scroll-tracking
555
- // ref (the only thing that could re-derive this value) is still
556
- // intact, and clearing the redux copy would desync the two. It's
557
- // only USED here for the one-shot stamp+flush, matching customer
558
- // #42: leaving (or backgrounding) a room while scrolled up must not
559
- // mark messages the user never reached as read.
482
+ // read" gap. Stamp lastViewed=now as the read baseline, clear
483
+ // visibility, then flush that marker to the server private store.
484
+ // Restored on the next 'active' transition above. Handled here in
485
+ // the provider so consumers using the component as a package get
486
+ // correct unread without reaching into the chat store themselves.
560
487
  visibleBeforeBackground = visibleRoomJID;
561
- let boundaryTs = null;
562
488
  if (visibleRoomJID) {
563
- boundaryTs = state.rooms?.readBoundaries?.[visibleRoomJID] ?? null;
564
- const readTs = getReadMarkerTimestamp(rooms?.[visibleRoomJID], state.roomHeapSlice, boundaryTs);
565
- // Nothing to anchor to yet (no known messages, no prior marker)
566
- // - skip the local stamp rather than fall back to the device
567
- // clock. The flush below still runs so the visibility clear
568
- // isn't blocked on this.
569
- if (readTs > 0) {
570
- store.dispatch(setLastViewedTimestamp({
571
- chatJID: visibleRoomJID,
572
- timestamp: readTs
573
- }));
574
- }
489
+ store.dispatch(setLastViewedTimestamp({
490
+ chatJID: visibleRoomJID,
491
+ timestamp: Date.now()
492
+ }));
575
493
  // Drop the "New messages" divider for the room we're leaving so it
576
494
  // doesn't linger when the user comes back (mirrors ChatRoom's
577
495
  // unmount cleanup, which never runs while the pane stays mounted).
@@ -582,18 +500,13 @@ export const XmppProvider = ({
582
500
  store.dispatch(clearVisibleRoom());
583
501
  }
584
502
  // Fire-and-forget — we're going to the background and don't
585
- // care about the resolution path. `visibleRoomTs` carries the same
586
- // boundary to the SERVER marker - without it the flush defaults to
587
- // "everything" for the visible room, overriding a correct smaller
588
- // local count.
503
+ // care about the resolution path.
589
504
  c.flushLastViewedToPrivateStoreStanza(rooms, {
590
- visibleRoomJID,
591
- // Clamped through the same helper as the local stamp above.
592
- visibleRoomTs: visibleRoomJID ? getFlushBoundaryTs(rooms?.[visibleRoomJID], state.roomHeapSlice, boundaryTs) : undefined
505
+ visibleRoomJID
593
506
  }).catch(() => {});
594
507
  });
595
508
  return () => sub.remove();
596
- }, [client, config?.xmppSettings?.keepAliveInBackground]);
509
+ }, [client]);
597
510
 
598
511
  // -----------------------------------------------------------
599
512
  // Consumer visibility signal (`isVisible` prop). For hosts that keep
@@ -602,11 +515,11 @@ export const XmppProvider = ({
602
515
  // "shown" from "hidden", so the unread middleware would keep the open
603
516
  // room's badge at 0 and messages arriving while you're elsewhere look
604
517
  // already-read. When the host passes `isVisible`, mirror the AppState
605
- // background/foreground handling: hidden → stamp lastViewed=<newest
606
- // server-acked message> + clear room visibility (so later messages
607
- // count) + flush; shown → restore visibility for the open room. Doing
608
- // it here means consumers never touch the chat store themselves.
609
- // (Undefined = host unmounts on hide, nothing to do.)
518
+ // background/foreground handling: hidden → stamp lastViewed=now + clear
519
+ // room visibility (so later messages count) + flush; shown → restore
520
+ // visibility for the open room. Doing it here means consumers never
521
+ // touch the chat store themselves. (Undefined = host unmounts on hide,
522
+ // nothing to do.)
610
523
  // -----------------------------------------------------------
611
524
  const chatWasVisibleRef = useRef(false);
612
525
  useEffect(() => {
@@ -625,25 +538,11 @@ export const XmppProvider = ({
625
538
  }));
626
539
  }
627
540
  } else {
628
- // The read boundary (rooms.readBoundaries) is USED for the stamp
629
- // and flush below but deliberately left in place - a host using
630
- // `isVisible` keeps <Chat> mounted while hidden, so MessageList's
631
- // own scroll-tracking ref is still intact and the redux copy must
632
- // stay in sync with it. Only consumed, never Date.now(): a fast
633
- // device clock would write a future marker that the forward-only
634
- // private-store merge could then never correct (bug #38). And
635
- // never "the newest acked message" unconditionally either - that
636
- // silently marks messages the user scrolled past and never reached
637
- // as read (bug #42, a regression of #33).
638
- const boundaryTs = activeRoomJID ? state.rooms?.readBoundaries?.[activeRoomJID] ?? null : null;
639
541
  if (wasVisible && activeRoomJID) {
640
- const readTs = getReadMarkerTimestamp(rooms?.[activeRoomJID], state.roomHeapSlice, boundaryTs);
641
- if (readTs > 0) {
642
- store.dispatch(setLastViewedTimestamp({
643
- chatJID: activeRoomJID,
644
- timestamp: readTs
645
- }));
646
- }
542
+ store.dispatch(setLastViewedTimestamp({
543
+ chatJID: activeRoomJID,
544
+ timestamp: Date.now()
545
+ }));
647
546
  // Drop the "New messages" divider so it's gone when the user
648
547
  // returns to the chat (mirrors ChatRoom's unmount cleanup).
649
548
  store.dispatch(deleteRoomMessage({
@@ -654,11 +553,7 @@ export const XmppProvider = ({
654
553
  store.dispatch(clearVisibleRoom());
655
554
  if (wasVisible && client?.flushLastViewedToPrivateStoreStanza) {
656
555
  client.flushLastViewedToPrivateStoreStanza(rooms, {
657
- visibleRoomJID: activeRoomJID,
658
- // Carry the same boundary to the SERVER marker - without it
659
- // the flush defaults to "everything" for the visible room.
660
- // Clamped exactly like the local stamp above.
661
- visibleRoomTs: activeRoomJID ? getFlushBoundaryTs(rooms?.[activeRoomJID], state.roomHeapSlice, boundaryTs) : undefined
556
+ visibleRoomJID: activeRoomJID
662
557
  }).catch(() => {});
663
558
  }
664
559
  }
@@ -684,44 +579,32 @@ export const XmppProvider = ({
684
579
  return;
685
580
  }
686
581
  lastMessagesRef = room.messages;
687
-
688
- // getReadMarkerTimestamp (not a hand-rolled scan + Date.now()):
689
- // it excludes pending/optimistic messages, which carry the DEVICE
690
- // send time via `date` until the server echoes them back - a
691
- // manual scan without that exclusion could pick up a pending
692
- // message's device timestamp here and write a future marker the
693
- // same way a raw Date.now() would (bug #38). And when the user has
694
- // scrolled up (a boundary is set for this room), it clamps to that
695
- // boundary instead of the newest message - without this, every
696
- // incoming message while scrolled up advanced the marker to
697
- // "newest" regardless of scroll position, and the later, smaller
698
- // boundary write on leave was rejected by the forward-only
699
- // private-store merge, leaving 0 unread even after a restart
700
- // (customer #42, a regression of #33 reintroduced by #38).
701
- const boundaryTs = s.rooms?.readBoundaries?.[jid] ?? null;
702
- const newest = getReadMarkerTimestamp(room, s.roomHeapSlice, boundaryTs);
703
- if (!newest || newest <= lastStampedMs) {
582
+ let newest = 0;
583
+ const list = room.messages || [];
584
+ for (const m of list) {
585
+ if (!m || m.id === 'delimiter-new') {
586
+ continue;
587
+ }
588
+ const ms = msgSortableMs(m);
589
+ if (ms > newest) {
590
+ newest = ms;
591
+ }
592
+ }
593
+ if (newest <= lastStampedMs) {
704
594
  return;
705
595
  }
706
596
  lastStampedMs = newest;
707
597
  store.dispatch(setLastViewedTimestamp({
708
598
  chatJID: jid,
709
- timestamp: newest
599
+ timestamp: Date.now()
710
600
  }));
711
601
  if (flushTimer) {
712
602
  clearTimeout(flushTimer);
713
603
  }
714
604
  if (client?.flushLastViewedToPrivateStoreStanza) {
715
605
  flushTimer = setTimeout(() => {
716
- // Re-read fresh state rather than closing over `boundaryTs`:
717
- // the user may have scrolled back to the bottom (clearing the
718
- // boundary) in the 2s between the stamp and this flush, and
719
- // the flush should reflect that.
720
- const freshState = store.getState();
721
- const freshBoundaryTs = freshState.rooms?.readBoundaries?.[jid] ?? null;
722
- client.flushLastViewedToPrivateStoreStanza(freshState.rooms?.rooms, {
723
- visibleRoomJID: jid,
724
- visibleRoomTs: getFlushBoundaryTs(freshState.rooms?.rooms?.[jid], freshState.roomHeapSlice, freshBoundaryTs)
606
+ client.flushLastViewedToPrivateStoreStanza(store.getState().rooms?.rooms, {
607
+ visibleRoomJID: jid
725
608
  }).catch(() => {});
726
609
  }, 2000);
727
610
  }