@ethora/chat-component-rn 26.8.5 → 26.8.7

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 (690) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +95 -0
  3. package/lib/commonjs/assets/emojiData.js +40 -0
  4. package/lib/commonjs/assets/emojiData.js.map +1 -0
  5. package/lib/commonjs/assets/icons.js +5 -3
  6. package/lib/commonjs/assets/icons.js.map +1 -1
  7. package/lib/commonjs/components/MainComponents/ChatHeader.js +35 -15
  8. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  9. package/lib/commonjs/components/MainComponents/ChatRoom.js +33 -24
  10. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  11. package/lib/commonjs/components/MainComponents/ChatWrapper.js +22 -16
  12. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  13. package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
  14. package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
  15. package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
  16. package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
  17. package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
  18. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  19. package/lib/commonjs/components/MainComponents/MessageContainer.js +4 -12
  20. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  21. package/lib/commonjs/components/MainComponents/MessageList.js +110 -35
  22. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  23. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +5 -0
  24. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  25. package/lib/commonjs/components/MainComponents/RoomList.js +32 -29
  26. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  27. package/lib/commonjs/components/MainComponents/RoomStack.js +133 -65
  28. package/lib/commonjs/components/MainComponents/RoomStack.js.map +1 -1
  29. package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
  30. package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
  31. package/lib/commonjs/components/MainComponents/SystemMessage.js +6 -2
  32. package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
  33. package/lib/commonjs/components/MessageBubble/Avatar.js +5 -1
  34. package/lib/commonjs/components/MessageBubble/Avatar.js.map +1 -1
  35. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +18 -21
  36. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  37. package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js +447 -0
  38. package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
  39. package/lib/commonjs/components/MessageBubble/Message.js +264 -136
  40. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  41. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +215 -13
  42. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  43. package/lib/commonjs/components/MessageBubble/MessageReaction.js +113 -94
  44. package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
  45. package/lib/commonjs/components/MessageBubble/MessageReply.js +66 -24
  46. package/lib/commonjs/components/MessageBubble/MessageReply.js.map +1 -1
  47. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
  48. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  49. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +159 -16
  50. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  51. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
  52. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  53. package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js +76 -44
  54. package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
  55. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +29 -6
  56. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  57. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +5 -1
  58. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  59. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +37 -13
  60. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  61. package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
  62. package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
  63. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
  64. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  65. package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
  66. package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
  67. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
  68. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  69. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
  70. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  71. package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
  72. package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
  73. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
  74. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  75. package/lib/commonjs/components/Thread/ThreadWrapper.js +273 -152
  76. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  77. package/lib/commonjs/components/UsersList/UsersList.js +2 -1
  78. package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
  79. package/lib/commonjs/components/styled/DateLabel.js +6 -3
  80. package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
  81. package/lib/commonjs/components/styled/SendInput.js +4 -2
  82. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  83. package/lib/commonjs/context/MessageNotificationContext.js +188 -9
  84. package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
  85. package/lib/commonjs/context/xmppProvider.js +22 -7
  86. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  87. package/lib/commonjs/e2ee/crypto.js +207 -0
  88. package/lib/commonjs/e2ee/crypto.js.map +1 -0
  89. package/lib/commonjs/e2ee/deviceStore.js +84 -0
  90. package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
  91. package/lib/commonjs/e2ee/fileCipher.js +95 -0
  92. package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
  93. package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
  94. package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
  95. package/lib/commonjs/e2ee/index.js +210 -0
  96. package/lib/commonjs/e2ee/index.js.map +1 -0
  97. package/lib/commonjs/e2ee/limits.js +9 -0
  98. package/lib/commonjs/e2ee/limits.js.map +1 -0
  99. package/lib/commonjs/e2ee/ns.js +8 -0
  100. package/lib/commonjs/e2ee/ns.js.map +1 -0
  101. package/lib/commonjs/e2ee/omemo.js +622 -0
  102. package/lib/commonjs/e2ee/omemo.js.map +1 -0
  103. package/lib/commonjs/e2ee/protobuf.js +149 -0
  104. package/lib/commonjs/e2ee/protobuf.js.map +1 -0
  105. package/lib/commonjs/e2ee/ratchet.js +238 -0
  106. package/lib/commonjs/e2ee/ratchet.js.map +1 -0
  107. package/lib/commonjs/e2ee/sealedBody.js +23 -0
  108. package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
  109. package/lib/commonjs/e2ee/sealedFiles.js +174 -0
  110. package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
  111. package/lib/commonjs/e2ee/send.js +54 -0
  112. package/lib/commonjs/e2ee/send.js.map +1 -0
  113. package/lib/commonjs/e2ee/stanza.js +114 -0
  114. package/lib/commonjs/e2ee/stanza.js.map +1 -0
  115. package/lib/commonjs/e2ee/store.js +43 -0
  116. package/lib/commonjs/e2ee/store.js.map +1 -0
  117. package/lib/commonjs/helpers/accountName.js +23 -0
  118. package/lib/commonjs/helpers/accountName.js.map +1 -0
  119. package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
  120. package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
  121. package/lib/commonjs/helpers/createRoomFromApi.js +36 -2
  122. package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
  123. package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
  124. package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
  125. package/lib/commonjs/helpers/displayName.js +16 -0
  126. package/lib/commonjs/helpers/displayName.js.map +1 -0
  127. package/lib/commonjs/helpers/emoji.js +51 -0
  128. package/lib/commonjs/helpers/emoji.js.map +1 -0
  129. package/lib/commonjs/helpers/haptics.js +29 -0
  130. package/lib/commonjs/helpers/haptics.js.map +1 -0
  131. package/lib/commonjs/helpers/historyPreloadScheduler.js +32 -66
  132. package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
  133. package/lib/commonjs/helpers/insertMessageWithDelimiter.js +21 -12
  134. package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
  135. package/lib/commonjs/helpers/mamReactions.js +57 -0
  136. package/lib/commonjs/helpers/mamReactions.js.map +1 -0
  137. package/lib/commonjs/helpers/parseMessageReference.js +42 -0
  138. package/lib/commonjs/helpers/parseMessageReference.js.map +1 -0
  139. package/lib/commonjs/helpers/persistCrypto.js +5 -0
  140. package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
  141. package/lib/commonjs/helpers/reactionsConfig.js +17 -0
  142. package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
  143. package/lib/commonjs/helpers/secureKeyValue.js +20 -0
  144. package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
  145. package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
  146. package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
  147. package/lib/commonjs/helpers/videoCache.js +136 -0
  148. package/lib/commonjs/helpers/videoCache.js.map +1 -0
  149. package/lib/commonjs/hooks/useHeapSender.js +3 -1
  150. package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
  151. package/lib/commonjs/hooks/useLogout.js +8 -0
  152. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  153. package/lib/commonjs/hooks/useMessageHeapState.js +3 -2
  154. package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
  155. package/lib/commonjs/hooks/useRoomInitialization.js +16 -7
  156. package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
  157. package/lib/commonjs/hooks/useSendMessage.js +85 -15
  158. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  159. package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -1
  160. package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
  161. package/lib/commonjs/i18n/strings.js +180 -0
  162. package/lib/commonjs/i18n/strings.js.map +1 -1
  163. package/lib/commonjs/main.js +13 -0
  164. package/lib/commonjs/main.js.map +1 -1
  165. package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
  166. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  167. package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
  168. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  169. package/lib/commonjs/networking/stanzaHandlers.js +106 -50
  170. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  171. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +29 -74
  172. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
  173. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +44 -0
  174. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  175. package/lib/commonjs/networking/xmpp/mamRouter.js +186 -0
  176. package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -0
  177. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +41 -4
  178. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  179. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
  180. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  181. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
  182. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  183. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
  184. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  185. package/lib/commonjs/networking/xmppClient.js +104 -23
  186. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  187. package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js +29 -34
  188. package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
  189. package/lib/commonjs/roomStore/Middleware/perfMiddleware.js +51 -0
  190. package/lib/commonjs/roomStore/Middleware/perfMiddleware.js.map +1 -0
  191. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +66 -43
  192. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  193. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +88 -68
  194. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  195. package/lib/commonjs/roomStore/index.js +18 -14
  196. package/lib/commonjs/roomStore/index.js.map +1 -1
  197. package/lib/commonjs/roomStore/persistBackend.js +93 -0
  198. package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
  199. package/lib/commonjs/roomStore/persistence.js +253 -51
  200. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  201. package/lib/commonjs/roomStore/roomsSlice.js +282 -136
  202. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  203. package/lib/commonjs/theme/theme.js +3 -0
  204. package/lib/commonjs/theme/theme.js.map +1 -1
  205. package/lib/commonjs/utils/devLogger.js +14 -0
  206. package/lib/commonjs/utils/devLogger.js.map +1 -1
  207. package/lib/commonjs/version.js +1 -1
  208. package/lib/module/assets/emojiData.js +36 -0
  209. package/lib/module/assets/emojiData.js.map +1 -0
  210. package/lib/module/assets/icons.js +4 -2
  211. package/lib/module/assets/icons.js.map +1 -1
  212. package/lib/module/components/MainComponents/ChatHeader.js +37 -17
  213. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  214. package/lib/module/components/MainComponents/ChatRoom.js +34 -25
  215. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  216. package/lib/module/components/MainComponents/ChatWrapper.js +23 -17
  217. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  218. package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
  219. package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
  220. package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
  221. package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
  222. package/lib/module/components/MainComponents/MediaMessage.js +7 -0
  223. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  224. package/lib/module/components/MainComponents/MessageContainer.js +7 -14
  225. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  226. package/lib/module/components/MainComponents/MessageList.js +110 -35
  227. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  228. package/lib/module/components/MainComponents/ReduxWrapper.js +5 -0
  229. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  230. package/lib/module/components/MainComponents/RoomList.js +32 -29
  231. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  232. package/lib/module/components/MainComponents/RoomStack.js +131 -63
  233. package/lib/module/components/MainComponents/RoomStack.js.map +1 -1
  234. package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
  235. package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
  236. package/lib/module/components/MainComponents/SystemMessage.js +6 -2
  237. package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
  238. package/lib/module/components/MessageBubble/Avatar.js +5 -1
  239. package/lib/module/components/MessageBubble/Avatar.js.map +1 -1
  240. package/lib/module/components/MessageBubble/BottomReplyContainer.js +19 -22
  241. package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  242. package/lib/module/components/MessageBubble/EmojiPickerSheet.js +438 -0
  243. package/lib/module/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
  244. package/lib/module/components/MessageBubble/Message.js +269 -140
  245. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  246. package/lib/module/components/MessageBubble/MessageInteractions.js +217 -15
  247. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  248. package/lib/module/components/MessageBubble/MessageReaction.js +115 -94
  249. package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
  250. package/lib/module/components/MessageBubble/MessageReply.js +65 -24
  251. package/lib/module/components/MessageBubble/MessageReply.js.map +1 -1
  252. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
  253. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  254. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +161 -18
  255. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  256. package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
  257. package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  258. package/lib/module/components/Modals/Modal/SwipeBackLayer.js +76 -44
  259. package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
  260. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +32 -8
  261. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  262. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +4 -0
  263. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  264. package/lib/module/components/RoomComponents/ChatRoomItem.js +37 -13
  265. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  266. package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
  267. package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
  268. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
  269. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  270. package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
  271. package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
  272. package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
  273. package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  274. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
  275. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  276. package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
  277. package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
  278. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
  279. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  280. package/lib/module/components/Thread/ThreadWrapper.js +273 -153
  281. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  282. package/lib/module/components/UsersList/UsersList.js +2 -1
  283. package/lib/module/components/UsersList/UsersList.js.map +1 -1
  284. package/lib/module/components/styled/DateLabel.js +6 -3
  285. package/lib/module/components/styled/DateLabel.js.map +1 -1
  286. package/lib/module/components/styled/SendInput.js +4 -2
  287. package/lib/module/components/styled/SendInput.js.map +1 -1
  288. package/lib/module/context/MessageNotificationContext.js +190 -11
  289. package/lib/module/context/MessageNotificationContext.js.map +1 -1
  290. package/lib/module/context/xmppProvider.js +22 -7
  291. package/lib/module/context/xmppProvider.js.map +1 -1
  292. package/lib/module/e2ee/crypto.js +170 -0
  293. package/lib/module/e2ee/crypto.js.map +1 -0
  294. package/lib/module/e2ee/deviceStore.js +77 -0
  295. package/lib/module/e2ee/deviceStore.js.map +1 -0
  296. package/lib/module/e2ee/fileCipher.js +90 -0
  297. package/lib/module/e2ee/fileCipher.js.map +1 -0
  298. package/lib/module/e2ee/fileEnvelope.js +66 -0
  299. package/lib/module/e2ee/fileEnvelope.js.map +1 -0
  300. package/lib/module/e2ee/index.js +185 -0
  301. package/lib/module/e2ee/index.js.map +1 -0
  302. package/lib/module/e2ee/limits.js +5 -0
  303. package/lib/module/e2ee/limits.js.map +1 -0
  304. package/lib/module/e2ee/ns.js +4 -0
  305. package/lib/module/e2ee/ns.js.map +1 -0
  306. package/lib/module/e2ee/omemo.js +610 -0
  307. package/lib/module/e2ee/omemo.js.map +1 -0
  308. package/lib/module/e2ee/protobuf.js +140 -0
  309. package/lib/module/e2ee/protobuf.js.map +1 -0
  310. package/lib/module/e2ee/ratchet.js +228 -0
  311. package/lib/module/e2ee/ratchet.js.map +1 -0
  312. package/lib/module/e2ee/sealedBody.js +19 -0
  313. package/lib/module/e2ee/sealedBody.js.map +1 -0
  314. package/lib/module/e2ee/sealedFiles.js +154 -0
  315. package/lib/module/e2ee/sealedFiles.js.map +1 -0
  316. package/lib/module/e2ee/send.js +48 -0
  317. package/lib/module/e2ee/send.js.map +1 -0
  318. package/lib/module/e2ee/stanza.js +107 -0
  319. package/lib/module/e2ee/stanza.js.map +1 -0
  320. package/lib/module/e2ee/store.js +35 -0
  321. package/lib/module/e2ee/store.js.map +1 -0
  322. package/lib/module/helpers/accountName.js +18 -0
  323. package/lib/module/helpers/accountName.js.map +1 -0
  324. package/lib/module/helpers/createMessageFromXml.js +19 -4
  325. package/lib/module/helpers/createMessageFromXml.js.map +1 -1
  326. package/lib/module/helpers/createRoomFromApi.js +36 -2
  327. package/lib/module/helpers/createRoomFromApi.js.map +1 -1
  328. package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
  329. package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
  330. package/lib/module/helpers/displayName.js +11 -0
  331. package/lib/module/helpers/displayName.js.map +1 -0
  332. package/lib/module/helpers/emoji.js +44 -0
  333. package/lib/module/helpers/emoji.js.map +1 -0
  334. package/lib/module/helpers/haptics.js +24 -0
  335. package/lib/module/helpers/haptics.js.map +1 -0
  336. package/lib/module/helpers/historyPreloadScheduler.js +32 -66
  337. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  338. package/lib/module/helpers/insertMessageWithDelimiter.js +21 -12
  339. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  340. package/lib/module/helpers/mamReactions.js +51 -0
  341. package/lib/module/helpers/mamReactions.js.map +1 -0
  342. package/lib/module/helpers/parseMessageReference.js +37 -0
  343. package/lib/module/helpers/parseMessageReference.js.map +1 -0
  344. package/lib/module/helpers/persistCrypto.js +4 -0
  345. package/lib/module/helpers/persistCrypto.js.map +1 -1
  346. package/lib/module/helpers/reactionsConfig.js +10 -0
  347. package/lib/module/helpers/reactionsConfig.js.map +1 -0
  348. package/lib/module/helpers/secureKeyValue.js +19 -0
  349. package/lib/module/helpers/secureKeyValue.js.map +1 -1
  350. package/lib/module/helpers/updateMessagesTillLast.js +17 -2
  351. package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
  352. package/lib/module/helpers/videoCache.js +125 -0
  353. package/lib/module/helpers/videoCache.js.map +1 -0
  354. package/lib/module/hooks/useHeapSender.js +3 -1
  355. package/lib/module/hooks/useHeapSender.js.map +1 -1
  356. package/lib/module/hooks/useLogout.js +8 -0
  357. package/lib/module/hooks/useLogout.js.map +1 -1
  358. package/lib/module/hooks/useMessageHeapState.js +3 -2
  359. package/lib/module/hooks/useMessageHeapState.js.map +1 -1
  360. package/lib/module/hooks/useRoomInitialization.js +17 -8
  361. package/lib/module/hooks/useRoomInitialization.js.map +1 -1
  362. package/lib/module/hooks/useSendMessage.js +85 -15
  363. package/lib/module/hooks/useSendMessage.js.map +1 -1
  364. package/lib/module/hooks/useUnreadMessagesCounter.js +1 -1
  365. package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
  366. package/lib/module/i18n/strings.js +180 -0
  367. package/lib/module/i18n/strings.js.map +1 -1
  368. package/lib/module/main.js +1 -0
  369. package/lib/module/main.js.map +1 -1
  370. package/lib/module/networking/api-requests/auth.api.js +4 -1
  371. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  372. package/lib/module/networking/api-requests/rooms.api.js +109 -18
  373. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  374. package/lib/module/networking/stanzaHandlers.js +107 -51
  375. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  376. package/lib/module/networking/xmpp/getHistory.xmpp.js +29 -74
  377. package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
  378. package/lib/module/networking/xmpp/handleStanzas.xmpp.js +42 -0
  379. package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  380. package/lib/module/networking/xmpp/mamRouter.js +175 -0
  381. package/lib/module/networking/xmpp/mamRouter.js.map +1 -0
  382. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +38 -2
  383. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  384. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
  385. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  386. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
  387. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  388. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
  389. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  390. package/lib/module/networking/xmppClient.js +105 -24
  391. package/lib/module/networking/xmppClient.js.map +1 -1
  392. package/lib/module/roomStore/Middleware/newMessageMidlleware.js +29 -34
  393. package/lib/module/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
  394. package/lib/module/roomStore/Middleware/perfMiddleware.js +45 -0
  395. package/lib/module/roomStore/Middleware/perfMiddleware.js.map +1 -0
  396. package/lib/module/roomStore/Middleware/reactionsMiddleware.js +66 -43
  397. package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  398. package/lib/module/roomStore/Middleware/unreadMidlleware.js +89 -69
  399. package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  400. package/lib/module/roomStore/index.js +19 -15
  401. package/lib/module/roomStore/index.js.map +1 -1
  402. package/lib/module/roomStore/persistBackend.js +86 -0
  403. package/lib/module/roomStore/persistBackend.js.map +1 -0
  404. package/lib/module/roomStore/persistence.js +253 -49
  405. package/lib/module/roomStore/persistence.js.map +1 -1
  406. package/lib/module/roomStore/roomsSlice.js +275 -134
  407. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  408. package/lib/module/theme/theme.js +3 -0
  409. package/lib/module/theme/theme.js.map +1 -1
  410. package/lib/module/utils/devLogger.js +13 -0
  411. package/lib/module/utils/devLogger.js.map +1 -1
  412. package/lib/module/version.js +1 -1
  413. package/lib/typescript/assets/emojiData.d.ts +8 -0
  414. package/lib/typescript/assets/emojiData.d.ts.map +1 -0
  415. package/lib/typescript/assets/icons.d.ts +8 -0
  416. package/lib/typescript/assets/icons.d.ts.map +1 -1
  417. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  418. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  419. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  420. package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts +4 -0
  421. package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
  422. package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
  423. package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
  424. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  425. package/lib/typescript/components/MainComponents/MessageContainer.d.ts +2 -2
  426. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  427. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  428. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  429. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  430. package/lib/typescript/components/MainComponents/RoomStack.d.ts +7 -2
  431. package/lib/typescript/components/MainComponents/RoomStack.d.ts.map +1 -1
  432. package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
  433. package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
  434. package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
  435. package/lib/typescript/components/MessageBubble/Avatar.d.ts +2 -0
  436. package/lib/typescript/components/MessageBubble/Avatar.d.ts.map +1 -1
  437. package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
  438. package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts +11 -0
  439. package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts.map +1 -0
  440. package/lib/typescript/components/MessageBubble/Message.d.ts +2 -2
  441. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  442. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +2 -0
  443. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  444. package/lib/typescript/components/MessageBubble/MessageReaction.d.ts +1 -0
  445. package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
  446. package/lib/typescript/components/MessageBubble/MessageReply.d.ts +7 -7
  447. package/lib/typescript/components/MessageBubble/MessageReply.d.ts.map +1 -1
  448. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  449. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  450. package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
  451. package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts +2 -1
  452. package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts.map +1 -1
  453. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  454. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
  455. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts +2 -2
  456. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  457. package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
  458. package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
  459. package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts +3 -6
  460. package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
  461. package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
  462. package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
  463. package/lib/typescript/components/Thread/ThreadWrapper.d.ts +7 -1
  464. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  465. package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
  466. package/lib/typescript/components/styled/DateLabel.d.ts +1 -0
  467. package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
  468. package/lib/typescript/components/styled/SendInput.d.ts +1 -0
  469. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  470. package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
  471. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  472. package/lib/typescript/e2ee/crypto.d.ts +28 -0
  473. package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
  474. package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
  475. package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
  476. package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
  477. package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
  478. package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
  479. package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
  480. package/lib/typescript/e2ee/index.d.ts +23 -0
  481. package/lib/typescript/e2ee/index.d.ts.map +1 -0
  482. package/lib/typescript/e2ee/limits.d.ts +3 -0
  483. package/lib/typescript/e2ee/limits.d.ts.map +1 -0
  484. package/lib/typescript/e2ee/ns.d.ts +2 -0
  485. package/lib/typescript/e2ee/ns.d.ts.map +1 -0
  486. package/lib/typescript/e2ee/omemo.d.ts +64 -0
  487. package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
  488. package/lib/typescript/e2ee/protobuf.d.ts +25 -0
  489. package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
  490. package/lib/typescript/e2ee/ratchet.d.ts +39 -0
  491. package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
  492. package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
  493. package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
  494. package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
  495. package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
  496. package/lib/typescript/e2ee/send.d.ts +6 -0
  497. package/lib/typescript/e2ee/send.d.ts.map +1 -0
  498. package/lib/typescript/e2ee/stanza.d.ts +8 -0
  499. package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
  500. package/lib/typescript/e2ee/store.d.ts +16 -0
  501. package/lib/typescript/e2ee/store.d.ts.map +1 -0
  502. package/lib/typescript/helpers/accountName.d.ts +7 -0
  503. package/lib/typescript/helpers/accountName.d.ts.map +1 -0
  504. package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
  505. package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
  506. package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
  507. package/lib/typescript/helpers/displayName.d.ts +2 -0
  508. package/lib/typescript/helpers/displayName.d.ts.map +1 -0
  509. package/lib/typescript/helpers/emoji.d.ts +6 -0
  510. package/lib/typescript/helpers/emoji.d.ts.map +1 -0
  511. package/lib/typescript/helpers/haptics.d.ts +3 -0
  512. package/lib/typescript/helpers/haptics.d.ts.map +1 -0
  513. package/lib/typescript/helpers/historyPreloadScheduler.d.ts +1 -0
  514. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  515. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  516. package/lib/typescript/helpers/mamReactions.d.ts +13 -0
  517. package/lib/typescript/helpers/mamReactions.d.ts.map +1 -0
  518. package/lib/typescript/helpers/parseMessageReference.d.ts +16 -0
  519. package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -0
  520. package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
  521. package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
  522. package/lib/typescript/helpers/reactionsConfig.d.ts +5 -0
  523. package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
  524. package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
  525. package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
  526. package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
  527. package/lib/typescript/helpers/videoCache.d.ts +19 -0
  528. package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
  529. package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
  530. package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
  531. package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
  532. package/lib/typescript/hooks/useRoomInitialization.d.ts +2 -2
  533. package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
  534. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  535. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  536. package/lib/typescript/main.d.ts +2 -0
  537. package/lib/typescript/main.d.ts.map +1 -1
  538. package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
  539. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  540. package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
  541. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  542. package/lib/typescript/networking/stanzaHandlers.d.ts +4 -2
  543. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  544. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +3 -1
  545. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
  546. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
  547. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
  548. package/lib/typescript/networking/xmpp/mamRouter.d.ts +23 -0
  549. package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -0
  550. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +1 -0
  551. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  552. package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
  553. package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
  554. package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
  555. package/lib/typescript/networking/xmppClient.d.ts +22 -1
  556. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  557. package/lib/typescript/roomStore/Middleware/newMessageMidlleware.d.ts.map +1 -1
  558. package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts +4 -0
  559. package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts.map +1 -0
  560. package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts +9 -0
  561. package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
  562. package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
  563. package/lib/typescript/roomStore/index.d.ts.map +1 -1
  564. package/lib/typescript/roomStore/persistBackend.d.ts +11 -0
  565. package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -0
  566. package/lib/typescript/roomStore/persistence.d.ts +5 -6
  567. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  568. package/lib/typescript/roomStore/roomsSlice.d.ts +41 -1
  569. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  570. package/lib/typescript/theme/theme.d.ts +4 -1
  571. package/lib/typescript/theme/theme.d.ts.map +1 -1
  572. package/lib/typescript/types/models/message.model.d.ts +9 -0
  573. package/lib/typescript/types/models/message.model.d.ts.map +1 -1
  574. package/lib/typescript/types/models/room.model.d.ts +21 -0
  575. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  576. package/lib/typescript/types/models/xmpp.model.d.ts +6 -1
  577. package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
  578. package/lib/typescript/types/types.d.ts +19 -3
  579. package/lib/typescript/types/types.d.ts.map +1 -1
  580. package/lib/typescript/utils/devLogger.d.ts +8 -0
  581. package/lib/typescript/utils/devLogger.d.ts.map +1 -1
  582. package/lib/typescript/version.d.ts +1 -1
  583. package/package.json +14 -1
  584. package/src/assets/emojiData.ts +2146 -0
  585. package/src/assets/icons.tsx +32 -5
  586. package/src/components/MainComponents/ChatHeader.tsx +46 -16
  587. package/src/components/MainComponents/ChatRoom.tsx +46 -30
  588. package/src/components/MainComponents/ChatWrapper.tsx +28 -10
  589. package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
  590. package/src/components/MainComponents/EncryptionCard.tsx +287 -0
  591. package/src/components/MainComponents/MediaMessage.tsx +5 -0
  592. package/src/components/MainComponents/MessageContainer.tsx +7 -15
  593. package/src/components/MainComponents/MessageList.tsx +96 -43
  594. package/src/components/MainComponents/ReduxWrapper.tsx +5 -0
  595. package/src/components/MainComponents/RoomList.tsx +28 -29
  596. package/src/components/MainComponents/RoomStack.tsx +156 -83
  597. package/src/components/MainComponents/SealedAttachment.tsx +251 -0
  598. package/src/components/MainComponents/SystemMessage.tsx +6 -2
  599. package/src/components/MessageBubble/Avatar.tsx +7 -1
  600. package/src/components/MessageBubble/BottomReplyContainer.tsx +20 -21
  601. package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
  602. package/src/components/MessageBubble/Message.tsx +242 -93
  603. package/src/components/MessageBubble/MessageInteractions.tsx +215 -15
  604. package/src/components/MessageBubble/MessageReaction.tsx +120 -96
  605. package/src/components/MessageBubble/MessageReply.tsx +65 -32
  606. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +7 -4
  607. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +181 -35
  608. package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
  609. package/src/components/Modals/Modal/SwipeBackLayer.tsx +114 -63
  610. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +53 -8
  611. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +5 -0
  612. package/src/components/RoomComponents/ChatRoomItem.tsx +34 -15
  613. package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
  614. package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
  615. package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
  616. package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
  617. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
  618. package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
  619. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
  620. package/src/components/Thread/ThreadWrapper.tsx +287 -198
  621. package/src/components/UsersList/UsersList.tsx +2 -1
  622. package/src/components/styled/DateLabel.tsx +7 -3
  623. package/src/components/styled/SendInput.tsx +5 -2
  624. package/src/context/MessageNotificationContext.tsx +205 -7
  625. package/src/context/xmppProvider.tsx +29 -9
  626. package/src/e2ee/crypto.ts +194 -0
  627. package/src/e2ee/deviceStore.ts +80 -0
  628. package/src/e2ee/fileCipher.ts +86 -0
  629. package/src/e2ee/fileEnvelope.ts +115 -0
  630. package/src/e2ee/index.ts +192 -0
  631. package/src/e2ee/limits.ts +2 -0
  632. package/src/e2ee/ns.ts +1 -0
  633. package/src/e2ee/omemo.ts +802 -0
  634. package/src/e2ee/protobuf.ts +188 -0
  635. package/src/e2ee/ratchet.ts +271 -0
  636. package/src/e2ee/sealedBody.ts +17 -0
  637. package/src/e2ee/sealedFiles.ts +181 -0
  638. package/src/e2ee/send.ts +70 -0
  639. package/src/e2ee/stanza.ts +133 -0
  640. package/src/e2ee/store.ts +54 -0
  641. package/src/helpers/accountName.ts +15 -0
  642. package/src/helpers/createMessageFromXml.ts +31 -6
  643. package/src/helpers/createRoomFromApi.tsx +37 -1
  644. package/src/helpers/createUserNameFromSetUser.ts +2 -1
  645. package/src/helpers/displayName.ts +9 -0
  646. package/src/helpers/emoji.ts +39 -0
  647. package/src/helpers/haptics.ts +19 -0
  648. package/src/helpers/historyPreloadScheduler.ts +37 -69
  649. package/src/helpers/insertMessageWithDelimiter.ts +23 -16
  650. package/src/helpers/mamReactions.ts +59 -0
  651. package/src/helpers/parseMessageReference.ts +38 -0
  652. package/src/helpers/persistCrypto.ts +5 -0
  653. package/src/helpers/reactionsConfig.ts +13 -0
  654. package/src/helpers/secureKeyValue.ts +15 -0
  655. package/src/helpers/updateMessagesTillLast.tsx +14 -2
  656. package/src/helpers/videoCache.ts +138 -0
  657. package/src/hooks/useHeapSender.tsx +3 -2
  658. package/src/hooks/useLogout.tsx +9 -0
  659. package/src/hooks/useMessageHeapState.tsx +6 -2
  660. package/src/hooks/useRoomInitialization.tsx +32 -15
  661. package/src/hooks/useSendMessage.tsx +89 -16
  662. package/src/hooks/useUnreadMessagesCounter.ts +1 -1
  663. package/src/i18n/strings.ts +180 -0
  664. package/src/main.ts +2 -0
  665. package/src/networking/api-requests/auth.api.ts +9 -1
  666. package/src/networking/api-requests/rooms.api.ts +121 -18
  667. package/src/networking/stanzaHandlers.ts +116 -60
  668. package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
  669. package/src/networking/xmpp/handleStanzas.xmpp.ts +51 -0
  670. package/src/networking/xmpp/mamRouter.ts +176 -0
  671. package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
  672. package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
  673. package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
  674. package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
  675. package/src/networking/xmppClient.ts +111 -20
  676. package/src/roomStore/Middleware/newMessageMidlleware.tsx +35 -38
  677. package/src/roomStore/Middleware/perfMiddleware.ts +50 -0
  678. package/src/roomStore/Middleware/reactionsMiddleware.tsx +53 -52
  679. package/src/roomStore/Middleware/unreadMidlleware.tsx +92 -80
  680. package/src/roomStore/index.ts +28 -27
  681. package/src/roomStore/persistBackend.ts +93 -0
  682. package/src/roomStore/persistence.ts +295 -73
  683. package/src/roomStore/roomsSlice.ts +304 -155
  684. package/src/theme/theme.ts +10 -1
  685. package/src/types/models/message.model.ts +9 -0
  686. package/src/types/models/room.model.ts +22 -0
  687. package/src/types/models/xmpp.model.ts +4 -2
  688. package/src/types/types.ts +19 -3
  689. package/src/utils/devLogger.ts +16 -0
  690. package/src/version.ts +1 -1
@@ -15,6 +15,9 @@ import { RootState, store } from '../roomStore';
15
15
  import { getGlobalXmppClient } from '../utils/clientRegistry';
16
16
  import { useEventHandlers } from './useEventHandlers';
17
17
  import type { IConfig, IMessage } from '../types/types';
18
+ import { canEditMessage, canSendMediaToRoom, canSendToRoom } from '../e2ee';
19
+ import { shouldEncrypt } from '../e2ee/send';
20
+ import type { SealedUpload } from '../e2ee/sealedFiles';
18
21
 
19
22
  // Watchdog: if a message stays "pending" (no server echo) for this
20
23
  // long after the optimistic dispatch, mark it failed so the bubble
@@ -79,7 +82,6 @@ export const useSendMessage = (_configOverride?: IConfig) => {
79
82
  (state: RootState) => state.chatSettingStore.langSource
80
83
  );
81
84
  const editAction = useSelector((state: RootState) => state.rooms.editAction);
82
- const rooms = useSelector((state: RootState) => state.rooms.rooms);
83
85
 
84
86
  const {
85
87
  handleMessageSent,
@@ -88,10 +90,6 @@ export const useSendMessage = (_configOverride?: IConfig) => {
88
90
  handleMessageRetry,
89
91
  } = useEventHandlers(config);
90
92
 
91
- const failedMessages = useSelector(
92
- (state: RootState) => state.roomHeapSlice?.failedMessages || {}
93
- );
94
-
95
93
  const sendMessage = useCallback(
96
94
  async (
97
95
  message: string,
@@ -108,6 +106,16 @@ export const useSendMessage = (_configOverride?: IConfig) => {
108
106
  existingId?: string
109
107
  ) => {
110
108
  if (editAction?.isEdit) {
109
+ const edited = reduxStore
110
+ .getState()
111
+ .rooms?.rooms?.[editAction.roomJid!]?.messages?.find(
112
+ (m: IMessage) => m.id === editAction.messageId
113
+ );
114
+ if (edited && !canEditMessage(edited)) {
115
+ console.warn('edit not sent: the message was encrypted');
116
+ dispatch(setEditAction({ isEdit: false }));
117
+ return;
118
+ }
111
119
  try {
112
120
  client?.editMessageStanza(
113
121
  editAction.roomJid!,
@@ -132,6 +140,11 @@ export const useSendMessage = (_configOverride?: IConfig) => {
132
140
  return;
133
141
  }
134
142
 
143
+ if (!canSendToRoom(activeRoomJID)) {
144
+ console.warn('message not sent: room is end-to-end encrypted');
145
+ return;
146
+ }
147
+
135
148
  // Critical-send hint to the QoS scheduler.
136
149
  client?.onCriticalSend?.(activeRoomJID);
137
150
 
@@ -162,6 +175,16 @@ export const useSendMessage = (_configOverride?: IConfig) => {
162
175
  // manual-mode readers see the Translate link on it too (parity with
163
176
  // the web SDK, which stamps langSource on the optimistic message).
164
177
  langSource: (langSource as any) || 'en',
178
+ // Reply fields as the wire carries them (strings), so a thread reply
179
+ // shows in its thread — and NOT in the channel — from the first
180
+ // frame, not only once the server echo lands.
181
+ ...(isReply
182
+ ? {
183
+ isReply: 'true',
184
+ showInChannel: isChecked ? 'true' : 'false',
185
+ mainMessage,
186
+ }
187
+ : {}),
165
188
  user: {
166
189
  ...(user as any),
167
190
  id: selfId,
@@ -350,6 +373,11 @@ export const useSendMessage = (_configOverride?: IConfig) => {
350
373
  mainMessage: string = '',
351
374
  existingId?: string
352
375
  ) => {
376
+ if (!canSendMediaToRoom(activeRoomJID)) {
377
+ console.warn('media not sent: room is end-to-end encrypted');
378
+ return;
379
+ }
380
+
353
381
  client?.onCriticalSend?.(activeRoomJID);
354
382
 
355
383
  // Defensive 50 MB guard on every send path (SendInput blocks it at
@@ -423,7 +451,7 @@ export const useSendMessage = (_configOverride?: IConfig) => {
423
451
  mimetype: type,
424
452
  originalName: data?.name,
425
453
  size: fileSizeStr,
426
- isReply,
454
+ isReply: isReply ? 'true' : 'false',
427
455
  showInChannel: `${isChecked}`,
428
456
  mainMessage,
429
457
  } as any as IMessage,
@@ -504,20 +532,36 @@ export const useSendMessage = (_configOverride?: IConfig) => {
504
532
  name: data?.name || data?.fileName || `media_${Date.now()}`,
505
533
  };
506
534
 
535
+ let sealed: SealedUpload | undefined;
536
+
507
537
  const tryUpload = async () => {
538
+ if (shouldEncrypt(activeRoomJID) && !sealed) {
539
+ const { sealPickedFile } =
540
+ require('../e2ee/sealedFiles') as typeof import('../e2ee/sealedFiles');
541
+ sealed = await sealPickedFile({
542
+ uri: fileBlob.uri,
543
+ name: fileBlob.name,
544
+ type: fileBlob.type,
545
+ size: typeof data?.size === 'number' ? data.size : undefined,
546
+ });
547
+ }
548
+ const part = sealed
549
+ ? { uri: sealed.uri, type: 'application/octet-stream', name: sealed.name }
550
+ : fileBlob;
551
+ const options = { clientEncrypted: !!sealed };
508
552
  const fd = new FormData();
509
- fd.append('files', fileBlob as any);
553
+ fd.append('files', part as any);
510
554
  try {
511
- return await uploadFileV2(fd, activeRoomJID);
555
+ return await uploadFileV2(fd, activeRoomJID, options);
512
556
  } catch (err: any) {
513
557
  if (err?.response?.status === 500) {
514
558
  console.warn(
515
559
  'upload "files" field returned 500 — retrying with "file" (singular)',
516
- { name: fileBlob.name, type: fileBlob.type }
560
+ { name: part.name, type: part.type }
517
561
  );
518
562
  const fd2 = new FormData();
519
- fd2.append('file', fileBlob as any);
520
- return await uploadFileV2(fd2, activeRoomJID);
563
+ fd2.append('file', part as any);
564
+ return await uploadFileV2(fd2, activeRoomJID, options);
521
565
  }
522
566
  throw err;
523
567
  }
@@ -557,7 +601,23 @@ export const useSendMessage = (_configOverride?: IConfig) => {
557
601
  mainMessage,
558
602
  isPrivate: item?.isPrivate,
559
603
  __v: item.__v,
604
+ e2eeKeys: sealed ? [sealed.keyMaterial] : undefined,
560
605
  };
606
+ if (sealed) {
607
+ try {
608
+ const { rememberOpened } =
609
+ require('../e2ee/sealedFiles') as typeof import('../e2ee/sealedFiles');
610
+ await rememberOpened(item.location, {
611
+ uri: fileBlob.uri,
612
+ name: fileBlob.name,
613
+ type: fileBlob.type,
614
+ size: typeof data?.size === 'number' ? data.size : undefined,
615
+ });
616
+ } catch (err) {
617
+ console.warn('could not keep the sent attachment', err);
618
+ }
619
+ sealed.dispose();
620
+ }
561
621
  // Stanza id == placeholder id so the MUC echo's outer
562
622
  // <message id="..."> matches xmppId on the placeholder and
563
623
  // insertMessageWithDelimiter merges in place + flips pending.
@@ -622,6 +682,7 @@ export const useSendMessage = (_configOverride?: IConfig) => {
622
682
  // Upload (or stanza send) threw an explicit error. Clear the
623
683
  // watchdog so it doesn't double-fire `markMessageFailed`.
624
684
  clearTimeout(mediaWatchdog);
685
+ sealed?.dispose();
625
686
  // Surface the real server payload so we can see why the upload
626
687
  // was rejected (axios collapses the message to "Request failed
627
688
  // with status code N"; the actual reason lives in
@@ -673,7 +734,8 @@ export const useSendMessage = (_configOverride?: IConfig) => {
673
734
  // it. No-op when the id isn't in the failed map.
674
735
  const retryMessage = useCallback(
675
736
  async (failedId: string) => {
676
- const payload = failedMessages[failedId];
737
+ const payload =
738
+ reduxStore.getState().roomHeapSlice?.failedMessages?.[failedId];
677
739
  if (!payload) {return;}
678
740
 
679
741
  // The server may have accepted the original send even though its
@@ -681,7 +743,8 @@ export const useSendMessage = (_configOverride?: IConfig) => {
681
743
  // failed, but a confirmed (non-pending) copy is already sitting in
682
744
  // the room. Resending here would deliver a genuine duplicate; just
683
745
  // clear the failure and let the existing copy stand.
684
- const roomMsgs = rooms?.[payload.roomJID]?.messages || [];
746
+ const roomMsgs =
747
+ reduxStore.getState().rooms?.rooms?.[payload.roomJID]?.messages || [];
685
748
  const alreadyDelivered = roomMsgs.some(
686
749
  (m: any) =>
687
750
  !m.pending && (m.id === failedId || m.xmppId === failedId)
@@ -720,7 +783,7 @@ export const useSendMessage = (_configOverride?: IConfig) => {
720
783
  );
721
784
  }
722
785
  },
723
- [failedMessages, rooms, dispatch, handleMessageRetry, sendMessage, sendMedia]
786
+ [reduxStore, dispatch, handleMessageRetry, sendMessage, sendMedia]
724
787
  );
725
788
 
726
789
  // ChatRoom/ThreadWrapper consume this as the "edit branch" of send.
@@ -731,6 +794,16 @@ export const useSendMessage = (_configOverride?: IConfig) => {
731
794
  if (!editAction?.isEdit || !editAction.roomJid || !editAction.messageId) {
732
795
  return;
733
796
  }
797
+ const edited = reduxStore
798
+ .getState()
799
+ .rooms?.rooms?.[editAction.roomJid]?.messages?.find(
800
+ (m: IMessage) => m.id === editAction.messageId
801
+ );
802
+ if (edited && !canEditMessage(edited)) {
803
+ console.warn('edit not sent: the message was encrypted');
804
+ dispatch(setEditAction({ isEdit: false }));
805
+ return;
806
+ }
734
807
  try {
735
808
  client?.editMessageStanza(
736
809
  editAction.roomJid,
@@ -762,7 +835,7 @@ export const useSendMessage = (_configOverride?: IConfig) => {
762
835
  const isLastMessageFromUserAndProcessing = useCallback(
763
836
  (roomJID: string): boolean => {
764
837
  if (!roomJID) {return false;}
765
- const msgs = rooms?.[roomJID]?.messages;
838
+ const msgs = reduxStore.getState().rooms?.rooms?.[roomJID]?.messages;
766
839
  if (!msgs || msgs.length === 0) {return false;}
767
840
  const last = msgs[msgs.length - 1];
768
841
  if (!last?.pending) {return false;}
@@ -770,7 +843,7 @@ export const useSendMessage = (_configOverride?: IConfig) => {
770
843
  if (!selfId) {return false;}
771
844
  return last.user?.id === selfId;
772
845
  },
773
- [rooms, user?.xmppUsername, user?.walletAddress]
846
+ [reduxStore, user?.xmppUsername, user?.walletAddress]
774
847
  );
775
848
 
776
849
  return {
@@ -49,7 +49,7 @@ export const useUnreadMessagesCounter = (): UnreadMessagesStats => {
49
49
  unreadByRoom[roomJid] = unreadCount;
50
50
  totalCount += unreadCount;
51
51
  }
52
- if ((room as any)?.unreadCapped) {
52
+ if ((room as any)?.unreadCapped && unreadCount >= 10) {
53
53
  isCapped = true;
54
54
  }
55
55
  });
@@ -25,6 +25,35 @@ const en: UiStringTable = {
25
25
  'date.yesterday': 'Yesterday',
26
26
  'message.deleted': 'Message deleted',
27
27
  'message.edited': 'edited',
28
+ 'e2ee.roomEncrypted': 'End-to-end encrypted',
29
+ 'e2ee.notEncrypted': 'Not encrypted',
30
+ 'e2ee.notEncryptedHint': 'Sent without end-to-end encryption, because no recipient has published a key yet.',
31
+ 'e2ee.devices.title': 'End-to-end encryption',
32
+ 'e2ee.devices.thisDevice': 'This device',
33
+ 'e2ee.devices.otherDevices': 'Other devices',
34
+ 'e2ee.devices.none': 'Has not opened an encrypted chat yet',
35
+ 'e2ee.devices.noneOwn': 'No other devices',
36
+ 'e2ee.devices.unavailable': 'Encryption is not running on this device right now',
37
+ 'e2ee.devices.loading': 'Loading devices…',
38
+ 'e2ee.devices.hint': "Compare a fingerprint with the one shown on the other person's device. Mark it verified only if they match.",
39
+ 'e2ee.trust.verified': 'Verified',
40
+ 'e2ee.trust.blind': 'Not verified',
41
+ 'e2ee.trust.untrusted': 'Not trusted',
42
+ 'e2ee.trust.verify': 'Mark as verified',
43
+ 'e2ee.trust.distrust': 'Stop trusting',
44
+ 'e2ee.trust.reset': 'Clear the mark',
45
+ 'e2ee.trust.prompt': 'Device {id}',
46
+ 'e2ee.devices.copied': 'Fingerprint copied',
47
+ 'e2ee.unsupportedMessage': "Encrypted message. This version of the app can't read it yet.",
48
+ 'e2ee.otherDevice': 'Encrypted for another device',
49
+ 'e2ee.undecryptable': 'Could not decrypt this message',
50
+ 'e2ee.sendUnavailable': "This chat is end-to-end encrypted. Sending from the mobile app isn't available yet.",
51
+ 'media.sealedFile': 'Encrypted file',
52
+ 'media.sealedUnsupported': "Can't be opened in this version of the app yet",
53
+ 'media.sealedUnavailable': 'Encrypted attachment could not be opened',
54
+ 'media.sealedDownload': 'Download and decrypt',
55
+ 'media.sealedDownloading': 'Decrypting…',
56
+ 'media.sealedDownloadFailed': 'Download failed — tap to retry',
28
57
  'message.newMessages': 'New messages',
29
58
  'notification.senderFallback': 'New message',
30
59
  'presence.online': 'online',
@@ -169,6 +198,7 @@ const en: UiStringTable = {
169
198
  'field.referralCode': 'Your referral code',
170
199
  'action.logOut': 'Log Out',
171
200
  'action.message': 'Message',
201
+ 'action.encryptedMessage': 'Encrypted message',
172
202
  'action.videoCall': 'Video call',
173
203
  'action.call': 'Call',
174
204
  'action.audioCall': 'Audio call',
@@ -283,6 +313,35 @@ const fr: UiStringTable = {
283
313
  'date.yesterday': 'Hier',
284
314
  'message.deleted': 'Message supprimé',
285
315
  'message.edited': 'modifié',
316
+ 'e2ee.roomEncrypted': 'Chiffré de bout en bout',
317
+ 'e2ee.notEncrypted': 'Non chiffré',
318
+ 'e2ee.notEncryptedHint': "Envoyé sans chiffrement de bout en bout, car aucun destinataire n'a encore publié de clé.",
319
+ 'e2ee.devices.title': 'Chiffrement de bout en bout',
320
+ 'e2ee.devices.thisDevice': 'Cet appareil',
321
+ 'e2ee.devices.otherDevices': 'Autres appareils',
322
+ 'e2ee.devices.none': "N'a pas encore ouvert de discussion chiffrée",
323
+ 'e2ee.devices.noneOwn': 'Aucun autre appareil',
324
+ 'e2ee.devices.unavailable': "Le chiffrement n'est pas actif sur cet appareil pour le moment",
325
+ 'e2ee.devices.loading': 'Chargement des appareils…',
326
+ 'e2ee.devices.hint': "Comparez une empreinte avec celle affichée sur l'appareil de l'autre personne. Ne la marquez comme vérifiée que si elles correspondent.",
327
+ 'e2ee.trust.verified': 'Vérifié',
328
+ 'e2ee.trust.blind': 'Non vérifié',
329
+ 'e2ee.trust.untrusted': 'Non fiable',
330
+ 'e2ee.trust.verify': 'Marquer comme vérifié',
331
+ 'e2ee.trust.distrust': 'Ne plus faire confiance',
332
+ 'e2ee.trust.reset': 'Effacer la marque',
333
+ 'e2ee.trust.prompt': 'Appareil {id}',
334
+ 'e2ee.devices.copied': 'Empreinte copiée',
335
+ 'e2ee.unsupportedMessage': "Message chiffré. Cette version de l'application ne peut pas encore le lire.",
336
+ 'e2ee.otherDevice': 'Chiffré pour un autre appareil',
337
+ 'e2ee.undecryptable': 'Impossible de déchiffrer ce message',
338
+ 'e2ee.sendUnavailable': "Cette discussion est chiffrée de bout en bout. L'envoi depuis l'application mobile n'est pas encore disponible.",
339
+ 'media.sealedFile': 'Fichier chiffré',
340
+ 'media.sealedUnsupported': "Ne peut pas encore être ouvert dans cette version de l'application",
341
+ 'media.sealedUnavailable': "La pièce jointe chiffrée n'a pas pu être ouverte",
342
+ 'media.sealedDownload': 'Télécharger et déchiffrer',
343
+ 'media.sealedDownloading': 'Déchiffrement…',
344
+ 'media.sealedDownloadFailed': 'Échec du téléchargement — appuyez pour réessayer',
286
345
  'message.newMessages': 'Nouveaux messages',
287
346
  'notification.senderFallback': 'Nouveau message',
288
347
  'presence.online': 'en ligne',
@@ -427,6 +486,7 @@ const fr: UiStringTable = {
427
486
  'field.referralCode': 'Votre code de parrainage',
428
487
  'action.logOut': 'Déconnexion',
429
488
  'action.message': 'Message',
489
+ 'action.encryptedMessage': 'Message chiffré',
430
490
  'action.videoCall': 'Appel vidéo',
431
491
  'action.call': 'Appeler',
432
492
  'action.audioCall': 'Appel audio',
@@ -541,6 +601,35 @@ const es: UiStringTable = {
541
601
  'date.yesterday': 'Ayer',
542
602
  'message.deleted': 'Mensaje eliminado',
543
603
  'message.edited': 'editado',
604
+ 'e2ee.roomEncrypted': 'Cifrado de extremo a extremo',
605
+ 'e2ee.notEncrypted': 'Sin cifrar',
606
+ 'e2ee.notEncryptedHint': 'Enviado sin cifrado de extremo a extremo, porque ningún destinatario ha publicado una clave todavía.',
607
+ 'e2ee.devices.title': 'Cifrado de extremo a extremo',
608
+ 'e2ee.devices.thisDevice': 'Este dispositivo',
609
+ 'e2ee.devices.otherDevices': 'Otros dispositivos',
610
+ 'e2ee.devices.none': 'Aún no ha abierto un chat cifrado',
611
+ 'e2ee.devices.noneOwn': 'No hay otros dispositivos',
612
+ 'e2ee.devices.unavailable': 'El cifrado no está activo en este dispositivo en este momento',
613
+ 'e2ee.devices.loading': 'Cargando dispositivos…',
614
+ 'e2ee.devices.hint': 'Compara una huella con la que aparece en el dispositivo de la otra persona. Márcala como verificada solo si coinciden.',
615
+ 'e2ee.trust.verified': 'Verificado',
616
+ 'e2ee.trust.blind': 'Sin verificar',
617
+ 'e2ee.trust.untrusted': 'No fiable',
618
+ 'e2ee.trust.verify': 'Marcar como verificado',
619
+ 'e2ee.trust.distrust': 'Dejar de confiar',
620
+ 'e2ee.trust.reset': 'Quitar la marca',
621
+ 'e2ee.trust.prompt': 'Dispositivo {id}',
622
+ 'e2ee.devices.copied': 'Huella copiada',
623
+ 'e2ee.unsupportedMessage': 'Mensaje cifrado. Esta versión de la aplicación aún no puede leerlo.',
624
+ 'e2ee.otherDevice': 'Cifrado para otro dispositivo',
625
+ 'e2ee.undecryptable': 'No se pudo descifrar este mensaje',
626
+ 'e2ee.sendUnavailable': 'Este chat está cifrado de extremo a extremo. El envío desde la aplicación móvil aún no está disponible.',
627
+ 'media.sealedFile': 'Archivo cifrado',
628
+ 'media.sealedUnsupported': 'Aún no se puede abrir en esta versión de la aplicación',
629
+ 'media.sealedUnavailable': 'No se pudo abrir el archivo adjunto cifrado',
630
+ 'media.sealedDownload': 'Descargar y descifrar',
631
+ 'media.sealedDownloading': 'Descifrando…',
632
+ 'media.sealedDownloadFailed': 'Error de descarga: toca para reintentar',
544
633
  'message.newMessages': 'Nuevos mensajes',
545
634
  'notification.senderFallback': 'Nuevo mensaje',
546
635
  'presence.online': 'en línea',
@@ -685,6 +774,7 @@ const es: UiStringTable = {
685
774
  'field.referralCode': 'Tu código de referido',
686
775
  'action.logOut': 'Cerrar sesión',
687
776
  'action.message': 'Mensaje',
777
+ 'action.encryptedMessage': 'Mensaje cifrado',
688
778
  'action.videoCall': 'Videollamada',
689
779
  'action.call': 'Llamar',
690
780
  'action.audioCall': 'Llamada de audio',
@@ -799,6 +889,35 @@ const pt: UiStringTable = {
799
889
  'date.yesterday': 'Ontem',
800
890
  'message.deleted': 'Mensagem eliminada',
801
891
  'message.edited': 'editado',
892
+ 'e2ee.roomEncrypted': 'Criptografado de ponta a ponta',
893
+ 'e2ee.notEncrypted': 'Sem criptografia',
894
+ 'e2ee.notEncryptedHint': 'Enviado sem criptografia de ponta a ponta, porque nenhum destinatário publicou uma chave ainda.',
895
+ 'e2ee.devices.title': 'Criptografia de ponta a ponta',
896
+ 'e2ee.devices.thisDevice': 'Este dispositivo',
897
+ 'e2ee.devices.otherDevices': 'Outros dispositivos',
898
+ 'e2ee.devices.none': 'Ainda não abriu uma conversa criptografada',
899
+ 'e2ee.devices.noneOwn': 'Nenhum outro dispositivo',
900
+ 'e2ee.devices.unavailable': 'A criptografia não está ativa neste dispositivo no momento',
901
+ 'e2ee.devices.loading': 'Carregando dispositivos…',
902
+ 'e2ee.devices.hint': 'Compare uma impressão digital com a exibida no dispositivo da outra pessoa. Marque como verificada somente se coincidirem.',
903
+ 'e2ee.trust.verified': 'Verificado',
904
+ 'e2ee.trust.blind': 'Não verificado',
905
+ 'e2ee.trust.untrusted': 'Não confiável',
906
+ 'e2ee.trust.verify': 'Marcar como verificado',
907
+ 'e2ee.trust.distrust': 'Deixar de confiar',
908
+ 'e2ee.trust.reset': 'Remover a marca',
909
+ 'e2ee.trust.prompt': 'Dispositivo {id}',
910
+ 'e2ee.devices.copied': 'Impressão digital copiada',
911
+ 'e2ee.unsupportedMessage': 'Mensagem criptografada. Esta versão do aplicativo ainda não consegue lê-la.',
912
+ 'e2ee.otherDevice': 'Criptografado para outro dispositivo',
913
+ 'e2ee.undecryptable': 'Não foi possível descriptografar esta mensagem',
914
+ 'e2ee.sendUnavailable': 'Esta conversa é criptografada de ponta a ponta. O envio pelo aplicativo móvel ainda não está disponível.',
915
+ 'media.sealedFile': 'Arquivo criptografado',
916
+ 'media.sealedUnsupported': 'Ainda não pode ser aberto nesta versão do aplicativo',
917
+ 'media.sealedUnavailable': 'Não foi possível abrir o anexo criptografado',
918
+ 'media.sealedDownload': 'Baixar e descriptografar',
919
+ 'media.sealedDownloading': 'Descriptografando…',
920
+ 'media.sealedDownloadFailed': 'Falha no download — toque para tentar novamente',
802
921
  'message.newMessages': 'Novas mensagens',
803
922
  'notification.senderFallback': 'Nova mensagem',
804
923
  'presence.online': 'online',
@@ -943,6 +1062,7 @@ const pt: UiStringTable = {
943
1062
  'field.referralCode': 'O seu código de referência',
944
1063
  'action.logOut': 'Terminar sessão',
945
1064
  'action.message': 'Mensagem',
1065
+ 'action.encryptedMessage': 'Mensagem criptografada',
946
1066
  'action.videoCall': 'Videochamada',
947
1067
  'action.call': 'Ligar',
948
1068
  'action.audioCall': 'Chamada de áudio',
@@ -1057,6 +1177,35 @@ const ht: UiStringTable = {
1057
1177
  'date.yesterday': 'Yè',
1058
1178
  'message.deleted': 'Mesaj efase',
1059
1179
  'message.edited': 'modifye',
1180
+ 'e2ee.roomEncrypted': 'Chifre bout-a-bout',
1181
+ 'e2ee.notEncrypted': 'Pa chifre',
1182
+ 'e2ee.notEncryptedHint': 'Voye san chifraj bout-a-bout, paske okenn moun ki resevwa a poko pibliye yon kle.',
1183
+ 'e2ee.devices.title': 'Chifraj bout-a-bout',
1184
+ 'e2ee.devices.thisDevice': 'Aparèy sa a',
1185
+ 'e2ee.devices.otherDevices': 'Lòt aparèy',
1186
+ 'e2ee.devices.none': 'Poko louvri yon chat chifre',
1187
+ 'e2ee.devices.noneOwn': 'Pa gen lòt aparèy',
1188
+ 'e2ee.devices.unavailable': 'Chifraj la pa aktif sou aparèy sa a kounye a',
1189
+ 'e2ee.devices.loading': 'Ap chaje aparèy yo…',
1190
+ 'e2ee.devices.hint': 'Konpare yon anprent ak sa ki parèt sou aparèy lòt moun nan. Make li kòm verifye sèlman si yo menm.',
1191
+ 'e2ee.trust.verified': 'Verifye',
1192
+ 'e2ee.trust.blind': 'Pa verifye',
1193
+ 'e2ee.trust.untrusted': 'Pa fè konfyans',
1194
+ 'e2ee.trust.verify': 'Make kòm verifye',
1195
+ 'e2ee.trust.distrust': 'Sispann fè konfyans',
1196
+ 'e2ee.trust.reset': 'Retire mak la',
1197
+ 'e2ee.trust.prompt': 'Aparèy {id}',
1198
+ 'e2ee.devices.copied': 'Anprent kopye',
1199
+ 'e2ee.unsupportedMessage': 'Mesaj chifre. Vèsyon aplikasyon sa a poko ka li li.',
1200
+ 'e2ee.otherDevice': 'Chifre pou yon lòt aparèy',
1201
+ 'e2ee.undecryptable': 'Nou pa t kapab dechifre mesaj sa a',
1202
+ 'e2ee.sendUnavailable': 'Chat sa a chifre bout-a-bout. Voye mesaj depi aplikasyon mobil la poko disponib.',
1203
+ 'media.sealedFile': 'Fichye chifre',
1204
+ 'media.sealedUnsupported': 'Poko ka louvri nan vèsyon aplikasyon sa a',
1205
+ 'media.sealedUnavailable': 'Nou pa t kapab louvri atachman chifre a',
1206
+ 'media.sealedDownload': 'Telechaje epi dechifre',
1207
+ 'media.sealedDownloading': 'Ap dechifre…',
1208
+ 'media.sealedDownloadFailed': 'Telechajman echwe — peze pou reeseye',
1060
1209
  'message.newMessages': 'Nouvo mesaj yo',
1061
1210
  'notification.senderFallback': 'Nouvo mesaj',
1062
1211
  'presence.online': 'an liy',
@@ -1201,6 +1350,7 @@ const ht: UiStringTable = {
1201
1350
  'field.referralCode': 'Kòd referans ou',
1202
1351
  'action.logOut': 'Dekonekte',
1203
1352
  'action.message': 'Mesaj',
1353
+ 'action.encryptedMessage': 'Mesaj chifre',
1204
1354
  'action.videoCall': 'Apèl videyo',
1205
1355
  'action.call': 'Rele',
1206
1356
  'action.audioCall': 'Apèl odyo',
@@ -1315,6 +1465,35 @@ const zh: UiStringTable = {
1315
1465
  'date.yesterday': '昨天',
1316
1466
  'message.deleted': '消息已删除',
1317
1467
  'message.edited': '已编辑',
1468
+ 'e2ee.roomEncrypted': '端到端加密',
1469
+ 'e2ee.notEncrypted': '未加密',
1470
+ 'e2ee.notEncryptedHint': '未使用端到端加密发送,因为还没有收件人发布密钥。',
1471
+ 'e2ee.devices.title': '端到端加密',
1472
+ 'e2ee.devices.thisDevice': '此设备',
1473
+ 'e2ee.devices.otherDevices': '其他设备',
1474
+ 'e2ee.devices.none': '尚未打开过加密聊天',
1475
+ 'e2ee.devices.noneOwn': '没有其他设备',
1476
+ 'e2ee.devices.unavailable': '此设备上的加密当前未运行',
1477
+ 'e2ee.devices.loading': '正在加载设备…',
1478
+ 'e2ee.devices.hint': '将指纹与对方设备上显示的指纹进行比较。仅在两者一致时才标记为已验证。',
1479
+ 'e2ee.trust.verified': '已验证',
1480
+ 'e2ee.trust.blind': '未验证',
1481
+ 'e2ee.trust.untrusted': '不受信任',
1482
+ 'e2ee.trust.verify': '标记为已验证',
1483
+ 'e2ee.trust.distrust': '停止信任',
1484
+ 'e2ee.trust.reset': '清除标记',
1485
+ 'e2ee.trust.prompt': '设备 {id}',
1486
+ 'e2ee.devices.copied': '指纹已复制',
1487
+ 'e2ee.unsupportedMessage': '加密消息。此版本的应用暂时无法读取。',
1488
+ 'e2ee.otherDevice': '已为其他设备加密',
1489
+ 'e2ee.undecryptable': '无法解密此消息',
1490
+ 'e2ee.sendUnavailable': '此聊天已启用端到端加密,暂不支持从移动应用发送消息。',
1491
+ 'media.sealedFile': '加密文件',
1492
+ 'media.sealedUnsupported': '此版本的应用暂时无法打开',
1493
+ 'media.sealedUnavailable': '无法打开加密附件',
1494
+ 'media.sealedDownload': '下载并解密',
1495
+ 'media.sealedDownloading': '正在解密…',
1496
+ 'media.sealedDownloadFailed': '下载失败 — 点击重试',
1318
1497
  'message.newMessages': '新消息',
1319
1498
  'notification.senderFallback': '新消息',
1320
1499
  'presence.online': '在线',
@@ -1459,6 +1638,7 @@ const zh: UiStringTable = {
1459
1638
  'field.referralCode': '您的推荐码',
1460
1639
  'action.logOut': '退出登录',
1461
1640
  'action.message': '发消息',
1641
+ 'action.encryptedMessage': '加密消息',
1462
1642
  'action.videoCall': '视频通话',
1463
1643
  'action.call': '通话',
1464
1644
  'action.audioCall': '语音通话',
package/src/main.ts CHANGED
@@ -123,3 +123,5 @@ export {
123
123
  export type { ChatTheme, ChatThemeColors, ChatThemeOverrides } from './theme';
124
124
  export type { ThemePreference } from './theme/theme';
125
125
  export { setThemePreference, setPushEnabled } from './roomStore/chatSettingsSlice';
126
+ export { omemo, isE2eeEnabled } from './e2ee';
127
+ export type { DeviceInfo, Trust } from './e2ee';
@@ -266,10 +266,18 @@ const canFallBackToLegacyUpload = (error: unknown): boolean => {
266
266
 
267
267
  let secureUploadUnavailable = false;
268
268
 
269
+ export interface UploadFileOptions {
270
+ clientEncrypted?: boolean;
271
+ }
272
+
269
273
  export async function uploadFileV2(
270
274
  formData: FormData,
271
- activeRoomJID: string
275
+ activeRoomJID: string,
276
+ options: UploadFileOptions = {}
272
277
  ): Promise<{ data: any }> {
278
+ if (options.clientEncrypted) {
279
+ formData.append('clientEncrypted', 'true');
280
+ }
273
281
  const chatName = (activeRoomJID || '').split('@')[0];
274
282
  const apiRoot = getCurrentBaseURL().replace(/\/$/, '');
275
283