@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,217 +0,0 @@
1
- /** @format */
2
-
3
- import React, { useRef, useState } from 'react';
4
- import {
5
- Animated,
6
- Dimensions,
7
- Easing,
8
- Modal,
9
- Pressable,
10
- StyleSheet,
11
- Text,
12
- TouchableOpacity,
13
- View,
14
- } from 'react-native';
15
- import { MoreIcon } from '../../../assets/icons';
16
-
17
- export interface ProfileMenuItem {
18
- key: string;
19
- label: string;
20
- icon: React.ReactNode;
21
- destructive?: boolean;
22
- onPress: () => void;
23
- }
24
-
25
- /** Fallbacks used for the very first frame, before the card is measured. */
26
- const ESTIMATED_WIDTH = 220;
27
- const ESTIMATED_HEIGHT = 160;
28
- const GAP = 8;
29
- /** Roughly a notch inset + the header band, used until measured. */
30
- const DEFAULT_TOP = 104;
31
- const EDGE = 12;
32
-
33
- /**
34
- * The "…" overflow menu shared by the chat and user profile screens.
35
- *
36
- * The shared `DropdownMenu` pins its card at a hard-coded `top: 95`, which
37
- * on this screen landed it over the host's own tab bar, unanchored to the
38
- * button. This one measures the button and grows the card out of it: the
39
- * card scales up from its top-right corner (translate → scale → translate
40
- * back, which is how you fake a transform-origin in React Native) so the
41
- * menu visibly unfolds from the three dots.
42
- */
43
- const ProfileMenu: React.FC<{
44
- items: ProfileMenuItem[];
45
- testIDPrefix?: string;
46
- }> = ({ items, testIDPrefix = 'chat-profile' }) => {
47
- const buttonRef = useRef<View>(null);
48
- const [open, setOpen] = useState(false);
49
- const [anchor, setAnchor] = useState({ top: DEFAULT_TOP, right: EDGE });
50
- const [size, setSize] = useState({
51
- width: ESTIMATED_WIDTH,
52
- height: ESTIMATED_HEIGHT,
53
- });
54
- const progress = useRef(new Animated.Value(0)).current;
55
-
56
- const animate = (to: number, done?: () => void) =>
57
- Animated.timing(progress, {
58
- toValue: to,
59
- duration: to ? 180 : 140,
60
- easing: to ? Easing.out(Easing.back(1.3)) : Easing.in(Easing.quad),
61
- useNativeDriver: true,
62
- }).start(({ finished }) => finished && done?.());
63
-
64
- // Anchor to the button's window frame — that is the same coordinate
65
- // space the <Modal> lays out in, so no insets to subtract. Measured on
66
- // layout (and again on open) rather than *before* opening: on some hosts
67
- // the measure callback never fires, and gating the open on it would mean
68
- // a menu that simply doesn't appear.
69
- const measure = () =>
70
- buttonRef.current?.measureInWindow?.((x, y, width, height) => {
71
- if (typeof y !== 'number' || typeof x !== 'number') {return;}
72
- const screenWidth = Dimensions.get('window').width;
73
- setAnchor({
74
- top: y + height + GAP,
75
- right: Math.max(screenWidth - (x + width), EDGE),
76
- });
77
- });
78
-
79
- const openMenu = () => {
80
- measure();
81
- progress.setValue(0);
82
- setOpen(true);
83
- animate(1);
84
- };
85
-
86
- const closeMenu = (then?: () => void) =>
87
- animate(0, () => {
88
- setOpen(false);
89
- then?.();
90
- });
91
-
92
- const scale = progress.interpolate({
93
- inputRange: [0, 1],
94
- outputRange: [0.2, 1],
95
- });
96
-
97
- if (items.length === 0) {
98
- return null;
99
- }
100
-
101
- return (
102
- <>
103
- <View ref={buttonRef} collapsable={false} onLayout={measure}>
104
- <TouchableOpacity
105
- testID={`${testIDPrefix}-menu`}
106
- activeOpacity={0.7}
107
- onPress={openMenu}
108
- style={styles.button}
109
- >
110
- <MoreIcon color="#FFFFFF" />
111
- </TouchableOpacity>
112
- </View>
113
-
114
- <Modal
115
- transparent
116
- visible={open}
117
- animationType="none"
118
- onRequestClose={() => closeMenu()}
119
- >
120
- <Pressable
121
- testID={`${testIDPrefix}-menu-backdrop`}
122
- style={StyleSheet.absoluteFill}
123
- onPress={() => closeMenu()}
124
- />
125
- <Animated.View
126
- testID={`${testIDPrefix}-menu-card`}
127
- onLayout={(e) => {
128
- const { width, height } = e.nativeEvent.layout;
129
- if (width && height) {setSize({ width, height });}
130
- }}
131
- style={[
132
- styles.card,
133
- {
134
- top: anchor.top,
135
- right: anchor.right,
136
- opacity: progress,
137
- transform: [
138
- // Move the origin to the card's top-right corner, scale
139
- // there, then move back — RN has no transform-origin.
140
- { translateX: size.width / 2 },
141
- { translateY: -size.height / 2 },
142
- { scale },
143
- { translateX: -size.width / 2 },
144
- { translateY: size.height / 2 },
145
- ],
146
- },
147
- ]}
148
- >
149
- {items.map((item, index) => (
150
- <TouchableOpacity
151
- key={item.key}
152
- testID={`${testIDPrefix}-menu-${item.key}`}
153
- activeOpacity={0.6}
154
- style={[styles.row, index > 0 && styles.rowDivider]}
155
- onPress={() => closeMenu(item.onPress)}
156
- >
157
- <Text
158
- style={[styles.label, item.destructive && styles.destructive]}
159
- >
160
- {item.label}
161
- </Text>
162
- <View style={styles.icon}>{item.icon}</View>
163
- </TouchableOpacity>
164
- ))}
165
- </Animated.View>
166
- </Modal>
167
- </>
168
- );
169
- };
170
-
171
- const styles = StyleSheet.create({
172
- button: {
173
- width: 40,
174
- height: 40,
175
- borderRadius: 20,
176
- backgroundColor: 'rgba(0,0,0,0.28)',
177
- alignItems: 'center',
178
- justifyContent: 'center',
179
- },
180
- card: {
181
- position: 'absolute',
182
- minWidth: 200,
183
- backgroundColor: '#FFFFFF',
184
- borderRadius: 14,
185
- paddingVertical: 4,
186
- shadowColor: '#121219',
187
- shadowOffset: { width: 0, height: 6 },
188
- shadowOpacity: 0.18,
189
- shadowRadius: 16,
190
- elevation: 12,
191
- },
192
- row: {
193
- flexDirection: 'row',
194
- alignItems: 'center',
195
- justifyContent: 'space-between',
196
- gap: 24,
197
- paddingHorizontal: 16,
198
- paddingVertical: 13,
199
- },
200
- rowDivider: {
201
- borderTopWidth: StyleSheet.hairlineWidth,
202
- borderTopColor: '#EFEFF2',
203
- },
204
- label: {
205
- fontSize: 16,
206
- color: '#141414',
207
- },
208
- destructive: {
209
- color: '#E53935',
210
- },
211
- icon: {
212
- width: 22,
213
- alignItems: 'center',
214
- },
215
- });
216
-
217
- export default ProfileMenu;
@@ -1,18 +0,0 @@
1
- /** @format */
2
-
3
- import type { IConfig } from '../types/types';
4
-
5
- /** Ground behind the conversation, and behind the rounded corners of the
6
- * header and the composer that sit over it. */
7
- export const DEFAULT_CHAT_BACKGROUND = '#F3F6FC';
8
-
9
- /**
10
- * One place for the conversation's background colour.
11
- *
12
- * The message list has always painted it; the chat container behind it was
13
- * plain white, which is what made the header's rounded bottom corners and
14
- * the composer's rounded top corners invisible — the corners revealed the
15
- * white parent, not the conversation.
16
- */
17
- export const getChatBackgroundColor = (config?: IConfig): string =>
18
- config?.backgroundChat?.color || DEFAULT_CHAT_BACKGROUND;
@@ -1,87 +0,0 @@
1
- import { ensureFilenameHasExtension, filenameFromUrl } from './mimeToExtension';
2
-
3
- export interface DisplayFileNameOptions {
4
- originalName?: string | null;
5
- fileName?: string | null;
6
- location?: string | null;
7
- mimetype?: string | null;
8
- }
9
-
10
- /**
11
- * Picks the best human-readable filename for a chat attachment - the
12
- * single source of truth for every place a file name is rendered in the
13
- * UI, saved to disk, shared, or downloaded.
14
- *
15
- * Priority: `originalName` (the sender's own file name, e.g. "test1.pdf")
16
- * beats `fileName` (the server's stored/hashed name, e.g.
17
- * "3f9a1c...c2.pdf") beats the last path segment of `location`. The
18
- * stored hash name is only a fallback of last resort.
19
- *
20
- * Bug #40: display and save/share/download logic used to prefer the
21
- * stored hash name over the original one, so an attachment sent as
22
- * "test1.pdf" showed up (and got saved to the phone) as something like
23
- * "3f9a1c...c2.pdf" - both directions (web -> RN and RN -> RN).
24
- *
25
- * Always returns a non-empty string with a valid extension: if the
26
- * chosen candidate has no extension (a hash name can be `<hex>` with no
27
- * extension at all, or `<hex>.<ext>`), one is appended from `mimetype`
28
- * (or `.bin` as a last resort when the mime is unknown/missing too).
29
- */
30
- export function getDisplayFileName(options: DisplayFileNameOptions): string {
31
- const candidate =
32
- (options.originalName && options.originalName.trim()) ||
33
- (options.fileName && options.fileName.trim()) ||
34
- filenameFromUrl(options.location) ||
35
- '';
36
- return ensureFilenameHasExtension(candidate, options.mimetype);
37
- }
38
-
39
- /**
40
- * Makes a display name safe to use as an actual path segment when
41
- * saving/sharing a file to the device: strips path separators (so an
42
- * odd/hostile server-provided name can't escape the target directory)
43
- * and control characters. Keeps the rest of the name - including the
44
- * extension - intact.
45
- */
46
- export function sanitizeFileNameForPath(name: string): string {
47
- const cleaned = (name || '')
48
- .replace(/[\/\\]/g, '_')
49
- // eslint-disable-next-line no-control-regex
50
- .replace(/[\x00-\x1f\x7f]/g, '')
51
- .trim();
52
- return cleaned || 'file';
53
- }
54
-
55
- /**
56
- * Resolves a filename that is safe to write into a target directory:
57
- * sanitizes it, then - if `exists` reports a collision - inserts
58
- * " (1)", " (2)", ... before the extension until a free name is found,
59
- * so saving two different attachments that share a display name never
60
- * silently overwrites the first one.
61
- *
62
- * `exists` is injected so callers can back it with whatever existence
63
- * check makes sense for their storage API (expo-file-system,
64
- * StorageAccessFramework directory listing, ...) - this function stays
65
- * pure and easy to unit test.
66
- */
67
- export async function getUniqueFileName(
68
- name: string,
69
- exists: (candidateName: string) => Promise<boolean>
70
- ): Promise<string> {
71
- const safeName = sanitizeFileNameForPath(name);
72
- if (!(await exists(safeName))) {
73
- return safeName;
74
- }
75
- const dotIndex = safeName.lastIndexOf('.');
76
- const base = dotIndex > 0 ? safeName.slice(0, dotIndex) : safeName;
77
- const ext = dotIndex > 0 ? safeName.slice(dotIndex) : '';
78
- // 999 collisions is already a pathological case; fall back to a
79
- // timestamp suffix rather than looping forever.
80
- for (let i = 1; i < 1000; i += 1) {
81
- const candidate = `${base} (${i})${ext}`;
82
- if (!(await exists(candidate))) {
83
- return candidate;
84
- }
85
- }
86
- return `${base} (${Date.now()})${ext}`;
87
- }
@@ -1,197 +0,0 @@
1
- import type { IMessage, IRoom } from '../types/types';
2
- import { msgSortableMs } from './msgSortableMs';
3
-
4
- // A stored/stamped read marker more than this far past the newest
5
- // message we actually know about for a room is not "the user is a
6
- // little ahead" - it's a leftover from a device whose clock was wrong
7
- // when it stamped the marker (bug #38). Generous on purpose: this value
8
- // only controls when we're willing to treat an existing marker as
9
- // corrupt and self-heal it, never how far off a legitimate new write can
10
- // be, so a false positive here just means a bad value survives one extra
11
- // cycle, not that a good value gets rejected.
12
- export const FUTURE_READ_MARKER_TOLERANCE_MS = 5 * 60 * 1000;
13
-
14
- export interface ReadTimestampHeapState {
15
- messageHeap?: IMessage[] | null;
16
- failedMessages?: Record<string, unknown> | null;
17
- }
18
-
19
- type RoomForReadTimestamp = Pick<IRoom, 'jid' | 'messages' | 'lastViewedTimestamp'>;
20
-
21
- /**
22
- * Resolve the "read up to here" marker for `room` using SERVER time,
23
- * never the device clock.
24
- *
25
- * Bug #38: if the device clock is ahead when the user leaves a room, a
26
- * `Date.now()` read marker lands in the future. The private-store merge
27
- * (flushLastViewedToPrivateStore.ts) is forward-only ("if (prevNum >=
28
- * ts) continue"), so once a future marker is written, no later
29
- * *correct* write can ever replace it - the room's unread count is
30
- * stuck wrong forever, on every device, from that point on. Anchoring
31
- * to the newest SERVER-acknowledged message's own timestamp instead
32
- * means the marker we write can never be ahead of what the server
33
- * itself has recorded for the room.
34
- *
35
- * "Server-acknowledged" excludes:
36
- * - a message still marked `pending` (the optimistic bubble shown
37
- * while a send is in flight - it carries the DEVICE send time via
38
- * `date`, not a server timestamp, until the server echoes it back
39
- * and insertMessageWithDelimiter flips `pending` off);
40
- * - a message id present in `heapState.messageHeap` (queued retry -
41
- * used for offline media sends, see roomHeapSlice.ts) or
42
- * `heapState.failedMessages` (a send that never reached the server
43
- * at all).
44
- *
45
- * `msgSortableMs` (helpers/msgSortableMs.ts) reads the server-assigned microsecond
46
- * timestamp encoded in the first 13 digits of the message id - the same
47
- * source already used for message ordering and unread counting - so
48
- * this stays consistent with the rest of the read/unread pipeline.
49
- *
50
- * Falls back to the room's existing `lastViewedTimestamp` (so leaving
51
- * an empty or never-scrolled room doesn't regress the marker), then to
52
- * `0` when there's truly nothing to anchor to yet (a brand new room
53
- * with no history and no prior marker). Callers should treat `0` as
54
- * "skip the write" rather than substituting a device-clock guess.
55
- */
56
- export function getServerReadTimestamp(
57
- room: RoomForReadTimestamp | null | undefined,
58
- heapState?: ReadTimestampHeapState | null
59
- ): number {
60
- if (!room) {return 0;}
61
-
62
- const heapIds = new Set(
63
- (heapState?.messageHeap || [])
64
- .filter((m) => m && m.id != null)
65
- .map((m) => String(m.id))
66
- );
67
- const failedIds = new Set(Object.keys(heapState?.failedMessages || {}));
68
-
69
- let newest = 0;
70
- const messages = room.messages || [];
71
- for (const m of messages) {
72
- if (!m || !m.id) {continue;}
73
- const id = String(m.id);
74
- if (id === 'delimiter-new' || id === 'delimiter-new-local') {continue;}
75
- if ((m as any).pending) {continue;}
76
- if (heapIds.has(id) || failedIds.has(id)) {continue;}
77
-
78
- const ts = msgSortableMs(m);
79
- if (ts > newest) {newest = ts;}
80
- }
81
-
82
- if (newest > 0) {return newest;}
83
- if (room.lastViewedTimestamp && room.lastViewedTimestamp > 0) {
84
- return room.lastViewedTimestamp;
85
- }
86
- return 0;
87
- }
88
-
89
- /**
90
- * Is `marker` a leftover from a device whose clock was wrong when it
91
- * stamped a read marker (bug #38)?
92
- *
93
- * TWO independent signals must agree before we're willing to throw a
94
- * stored marker away, because "waive the forward-only guard" is a
95
- * destructive operation:
96
- *
97
- * 1. it sits well past the newest message we know the room has, AND
98
- * 2. it sits well past real time.
99
- *
100
- * Signal 1 alone is NOT enough, and that is the whole point of this
101
- * function: a device whose local cache for a room is simply stale (very
102
- * common - any room whose history hasn't been synced yet this session)
103
- * sees a perfectly legitimate marker written by another device that HAS
104
- * seen newer messages, and would happily "heal" it backwards, resurrecting
105
- * already-read messages as unread on every device. A real timestamp can
106
- * never be ahead of real time, so requiring signal 2 as well means a
107
- * stale cache on its own can no longer trigger the self-heal.
108
- *
109
- * Signal 2 alone is not used either: it would let a device whose own
110
- * clock is running SLOW mistake every correct marker for a corrupt one.
111
- */
112
- export function isCorruptFutureReadMarker(
113
- marker: number,
114
- newestAckedMs: number
115
- ): boolean {
116
- if (!Number.isFinite(marker) || marker <= 0) {return false;}
117
- if (!(newestAckedMs > 0)) {return false;}
118
- if (marker <= newestAckedMs + FUTURE_READ_MARKER_TOLERANCE_MS) {return false;}
119
- return marker > Date.now() + FUTURE_READ_MARKER_TOLERANCE_MS;
120
- }
121
-
122
- /**
123
- * Resolve the marker to STAMP (locally and to the server) for `room`,
124
- * honouring an explicit read boundary when one is set.
125
- *
126
- * Bug #42 (a regression of #33, reintroduced by #38): #38 made every
127
- * caller stamp the newest server-acknowledged message unconditionally.
128
- * That is correct for a user who is at the bottom of the room, but wrong
129
- * for a user who scrolled up, received messages, and left without
130
- * scrolling back down - stamping "newest" there silently marks
131
- * messages they never saw as read, both locally and (because the
132
- * private-store merge is forward-only) permanently on the server.
133
- *
134
- * `boundaryTs` is the msgSortableMs of the newest message the user
135
- * actually reached (see `readBoundaries` on `RoomMessagesState`,
136
- * populated by MessageList's `onReadBoundaryChange`). When it's set and
137
- * positive, it wins - but is still clamped to never exceed the newest
138
- * server-acknowledged message, so a stale/corrupt boundary can't stamp a
139
- * marker further ahead than the room's own history supports. When no
140
- * boundary is set (the common case - the user is at the bottom), this is
141
- * exactly `getServerReadTimestamp`.
142
- *
143
- * Never returns `Date.now()`, directly or indirectly - same rule as
144
- * `getServerReadTimestamp` (bug #38).
145
- */
146
- export function getReadMarkerTimestamp(
147
- room: RoomForReadTimestamp | null | undefined,
148
- heapState?: ReadTimestampHeapState | null,
149
- boundaryTs?: number | null
150
- ): number {
151
- const newestAcked = getServerReadTimestamp(room, heapState);
152
- if (
153
- typeof boundaryTs === 'number' &&
154
- Number.isFinite(boundaryTs) &&
155
- boundaryTs > 0
156
- ) {
157
- // `newestAcked === 0` means this room has NOTHING server-acked and no
158
- // prior marker, so there is nothing to clamp the boundary against -
159
- // and MessageList derives the boundary from the rendered list, which
160
- // at that point can only contain pending/failed sends carrying the
161
- // DEVICE clock via `date`. Returning it here would smuggle a
162
- // device-clock marker back in through the boundary (bug #38). Return
163
- // 0 = "nothing to anchor to, skip the write", same contract as
164
- // getServerReadTimestamp.
165
- return newestAcked > 0 ? Math.min(boundaryTs, newestAcked) : 0;
166
- }
167
- return newestAcked;
168
- }
169
-
170
- /**
171
- * The value to hand `flushLastViewedToPrivateStore` as `visibleRoomTs`
172
- * for a room being left, or `undefined` when no boundary applies (the
173
- * flush then uses its own newest-acked default).
174
- *
175
- * Exists so the SERVER write goes through the SAME clamp as the local
176
- * stamp. Passing the raw redux boundary straight through would bypass
177
- * `getReadMarkerTimestamp`'s clamp on exactly the path where a bad value
178
- * is permanent: the private-store merge is forward-only, so a boundary
179
- * that (through a pending own message's device `date`, or a stale
180
- * readBoundaries entry) sat ahead of the room's real history would be
181
- * written verbatim and could never be corrected again (bug #38).
182
- */
183
- export function getFlushBoundaryTs(
184
- room: RoomForReadTimestamp | null | undefined,
185
- heapState?: ReadTimestampHeapState | null,
186
- boundaryTs?: number | null
187
- ): number | undefined {
188
- if (
189
- typeof boundaryTs !== 'number' ||
190
- !Number.isFinite(boundaryTs) ||
191
- boundaryTs <= 0
192
- ) {
193
- return undefined;
194
- }
195
- const clamped = getReadMarkerTimestamp(room, heapState, boundaryTs);
196
- return clamped > 0 ? clamped : undefined;
197
- }
@@ -1,90 +0,0 @@
1
- import { IMessage } from '../types/types';
2
-
3
- /**
4
- * Bug #41: during reconnect catch-up (app was backgrounded/offline, then
5
- * comes back online), messages replayed from MAM could transiently render
6
- * on the RIGHT (as if sent by the current user) before flipping to the
7
- * LEFT a moment later. Root cause: `message.user.id === walletAddress`
8
- * treats `undefined === undefined` (or `'' === ''`) as a match, and the
9
- * two sides could independently be empty for one frame -- the message's
10
- * sender id before the MAM-derived value settled, and/or the current
11
- * user's id before it rehydrated. Two blank ids must never compare equal.
12
- *
13
- * A second, related issue: the same logical sender id can show up in
14
- * different shapes depending on which code path produced it -- a bare
15
- * id ("wallet123") or a bare JID with an incidental session resource
16
- * ("wallet123@host/sessionResource", as `senderJID` attrs carry on the
17
- * wire -- see src/assets/test.xml). In every shape used in this
18
- * codebase the identifying segment is the part BEFORE the first '@' (or
19
- * before '/' when there's no '@'); anything after that -- domain,
20
- * resource -- is noise. Comparing raw strings with `===` fails whenever
21
- * one side still carries that noise and the other doesn't. Normalizing
22
- * both sides (strip resource, strip domain, lowercase) before comparing
23
- * makes the check tolerant of that drift.
24
- */
25
-
26
- export interface OwnMessageUserLike {
27
- id?: string | null;
28
- xmppUsername?: string | null;
29
- walletAddress?: string | null;
30
- }
31
-
32
- export type OwnMessageCurrentUser =
33
- | OwnMessageUserLike
34
- | string
35
- | null
36
- | undefined;
37
-
38
- /**
39
- * Strip a MUC resource (`room@host/resource` -> `room@host`) and then a
40
- * JID domain (`local@host` -> `local`), lowercasing the result. Applies
41
- * to both plain ids and full/partial JIDs so either shape normalizes to
42
- * the same comparable value.
43
- */
44
- const normalizeId = (raw: unknown): string => {
45
- const value = String(raw ?? '').trim();
46
- if (!value) {
47
- return '';
48
- }
49
- const withoutResource = value.split('/')[0];
50
- const withoutDomain = withoutResource.includes('@')
51
- ? withoutResource.split('@')[0]
52
- : withoutResource;
53
- return withoutDomain.toLowerCase();
54
- };
55
-
56
- // Same precedence the rest of the app uses when it needs "who am I" as a
57
- // single id: xmppUsername first, walletAddress as the fallback.
58
- const resolveCurrentUserId = (currentUser: OwnMessageCurrentUser): string => {
59
- if (typeof currentUser === 'string') {
60
- return currentUser;
61
- }
62
- if (!currentUser) {
63
- return '';
64
- }
65
- return (
66
- currentUser.xmppUsername || currentUser.walletAddress || currentUser.id || ''
67
- );
68
- };
69
-
70
- /**
71
- * Robustly determine whether `message` was sent by `currentUser`. Never
72
- * returns true from two blank/undefined ids, and tolerates bare-id vs.
73
- * full-JID mismatches between the sender id and the current user id.
74
- */
75
- export const isOwnMessage = (
76
- message: Pick<IMessage, 'user'> | null | undefined,
77
- currentUser: OwnMessageCurrentUser
78
- ): boolean => {
79
- const messageUserId = normalizeId(message?.user?.id);
80
- if (!messageUserId) {
81
- return false;
82
- }
83
-
84
- const currentUserId = normalizeId(resolveCurrentUserId(currentUser));
85
- if (!currentUserId) {
86
- return false;
87
- }
88
-
89
- return messageUserId === currentUserId;
90
- };
@@ -1,25 +0,0 @@
1
- let cached: any | undefined;
2
-
3
- export const getMediaLibrary = (): any | null => {
4
- if (cached !== undefined) {return cached;}
5
- try {
6
- const legacy = require('expo-media-library/legacy');
7
-
8
- if (legacy?.getAssetsAsync) {
9
- cached = legacy;
10
- return cached;
11
- }
12
- } catch {
13
- }
14
-
15
- try {
16
- cached = require('expo-media-library') ?? null;
17
- } catch {
18
- cached = null;
19
- }
20
- return cached;
21
- };
22
-
23
- export const __resetMediaLibraryCache = () => {
24
- cached = undefined;
25
- };
@@ -1,25 +0,0 @@
1
- // Count messages strictly newer than a given millisecond timestamp using
2
- // `msg.id` (the server-authoritative microsecond timestamp prefixed by a
3
- // 13-digit millis, see `helpers/dateComparison`'s
4
- // `getHighResolutionTimestamp`) rather than `msg.date`, which can be
5
- // derived client-side (`createMessageFromXml` falls back to `Date.now()`
6
- // for realtime stanzas without a `date` attr) and drift from what the
7
- // server actually assigned.
8
- //
9
- // Extracted to its own module (rather than living in roomsSlice.ts, its
10
- // original home) so helpers that need the SAME ordering source - notably
11
- // `insertMessageWithDelimiter.ts`, which decides where the "New messages"
12
- // divider sits - can import it without creating a roomStore <-> helpers
13
- // import cycle (roomsSlice.ts already imports insertMessageWithDelimiter).
14
- // roomsSlice.ts re-exports this for backward compatibility with existing
15
- // call sites.
16
- export const msgSortableMs = (msg: any): number => {
17
- const id = String(msg?.id || '');
18
- const m = /^(\d{13})/.exec(id);
19
- if (m) {return Number(m[1]);}
20
- if (msg?.date) {
21
- const t = new Date(msg.date as any).getTime();
22
- if (Number.isFinite(t)) {return t;}
23
- }
24
- return 0;
25
- };