@ethora/chat-component-rn 26.8.4 → 26.8.6

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 (417) hide show
  1. package/README.md +55 -0
  2. package/lib/commonjs/assets/emojiData.js +40 -0
  3. package/lib/commonjs/assets/emojiData.js.map +1 -0
  4. package/lib/commonjs/assets/icons.js +1 -1
  5. package/lib/commonjs/assets/icons.js.map +1 -1
  6. package/lib/commonjs/components/Header/HeaderRoomList.js +12 -7
  7. package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
  8. package/lib/commonjs/components/MainComponents/ChatHeader.js +7 -9
  9. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  10. package/lib/commonjs/components/MainComponents/ChatRoom.js +47 -26
  11. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  12. package/lib/commonjs/components/MainComponents/ChatWrapper.js +58 -21
  13. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  14. package/lib/commonjs/components/MainComponents/KeyboardInputDock.js +40 -0
  15. package/lib/commonjs/components/MainComponents/KeyboardInputDock.js.map +1 -0
  16. package/lib/commonjs/components/MainComponents/MessageContainer.js +4 -12
  17. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  18. package/lib/commonjs/components/MainComponents/MessageList.js +110 -35
  19. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  20. package/lib/commonjs/components/MainComponents/RoomList.js +32 -29
  21. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  22. package/lib/commonjs/components/MainComponents/RoomStack.js +270 -0
  23. package/lib/commonjs/components/MainComponents/RoomStack.js.map +1 -0
  24. package/lib/commonjs/components/MainComponents/SystemMessage.js +6 -2
  25. package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
  26. package/lib/commonjs/components/MessageBubble/Avatar.js +5 -1
  27. package/lib/commonjs/components/MessageBubble/Avatar.js.map +1 -1
  28. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +17 -21
  29. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  30. package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js +447 -0
  31. package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
  32. package/lib/commonjs/components/MessageBubble/Message.js +200 -132
  33. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  34. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +213 -12
  35. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  36. package/lib/commonjs/components/MessageBubble/MessageReaction.js +113 -94
  37. package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
  38. package/lib/commonjs/components/MessageBubble/MessageReply.js +66 -24
  39. package/lib/commonjs/components/MessageBubble/MessageReply.js.map +1 -1
  40. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +6 -1
  41. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  42. package/lib/commonjs/components/Modals/Modal/Modal.js +24 -0
  43. package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
  44. package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js +178 -0
  45. package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -0
  46. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js +28 -10
  47. package/lib/commonjs/components/Modals/ProfileHeader/ProfileHeader.js.map +1 -1
  48. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +9 -3
  49. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  50. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +5 -4
  51. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  52. package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
  53. package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
  54. package/lib/commonjs/components/Thread/ThreadWrapper.js +265 -152
  55. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  56. package/lib/commonjs/components/styled/DateLabel.js +6 -3
  57. package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
  58. package/lib/commonjs/context/MessageNotificationContext.js +188 -9
  59. package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
  60. package/lib/commonjs/context/xmppProvider.js +22 -7
  61. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  62. package/lib/commonjs/helpers/createRoomFromApi.js +36 -2
  63. package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
  64. package/lib/commonjs/helpers/emoji.js +51 -0
  65. package/lib/commonjs/helpers/emoji.js.map +1 -0
  66. package/lib/commonjs/helpers/haptics.js +29 -0
  67. package/lib/commonjs/helpers/haptics.js.map +1 -0
  68. package/lib/commonjs/helpers/historyPreloadScheduler.js +32 -66
  69. package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
  70. package/lib/commonjs/helpers/insertMessageWithDelimiter.js +21 -12
  71. package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
  72. package/lib/commonjs/helpers/keyboardLayout.js +23 -1
  73. package/lib/commonjs/helpers/keyboardLayout.js.map +1 -1
  74. package/lib/commonjs/helpers/mamReactions.js +57 -0
  75. package/lib/commonjs/helpers/mamReactions.js.map +1 -0
  76. package/lib/commonjs/helpers/parseMessageReference.js +42 -0
  77. package/lib/commonjs/helpers/parseMessageReference.js.map +1 -0
  78. package/lib/commonjs/helpers/reactionsConfig.js +17 -0
  79. package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
  80. package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
  81. package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
  82. package/lib/commonjs/hooks/useHeapSender.js +3 -1
  83. package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
  84. package/lib/commonjs/hooks/useMessageHeapState.js +3 -2
  85. package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
  86. package/lib/commonjs/hooks/useRoomInitialization.js +16 -7
  87. package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
  88. package/lib/commonjs/hooks/useSendMessage.js +14 -8
  89. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  90. package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -1
  91. package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
  92. package/lib/commonjs/networking/stanzaHandlers.js +106 -50
  93. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  94. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +29 -74
  95. package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
  96. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +4 -0
  97. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  98. package/lib/commonjs/networking/xmpp/mamRouter.js +186 -0
  99. package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -0
  100. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +41 -4
  101. package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  102. package/lib/commonjs/networking/xmppClient.js +98 -23
  103. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  104. package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js +29 -34
  105. package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
  106. package/lib/commonjs/roomStore/Middleware/perfMiddleware.js +51 -0
  107. package/lib/commonjs/roomStore/Middleware/perfMiddleware.js.map +1 -0
  108. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +66 -43
  109. package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  110. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +88 -68
  111. package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  112. package/lib/commonjs/roomStore/index.js +18 -14
  113. package/lib/commonjs/roomStore/index.js.map +1 -1
  114. package/lib/commonjs/roomStore/persistBackend.js +96 -0
  115. package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
  116. package/lib/commonjs/roomStore/persistence.js +245 -50
  117. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  118. package/lib/commonjs/roomStore/roomsSlice.js +282 -136
  119. package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
  120. package/lib/commonjs/theme/theme.js +3 -0
  121. package/lib/commonjs/theme/theme.js.map +1 -1
  122. package/lib/commonjs/utils/devLogger.js +14 -0
  123. package/lib/commonjs/utils/devLogger.js.map +1 -1
  124. package/lib/commonjs/version.js +1 -1
  125. package/lib/module/assets/emojiData.js +36 -0
  126. package/lib/module/assets/emojiData.js.map +1 -0
  127. package/lib/module/assets/icons.js +1 -1
  128. package/lib/module/assets/icons.js.map +1 -1
  129. package/lib/module/components/Header/HeaderRoomList.js +12 -7
  130. package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
  131. package/lib/module/components/MainComponents/ChatHeader.js +8 -10
  132. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  133. package/lib/module/components/MainComponents/ChatRoom.js +49 -28
  134. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  135. package/lib/module/components/MainComponents/ChatWrapper.js +60 -23
  136. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  137. package/lib/module/components/MainComponents/KeyboardInputDock.js +33 -0
  138. package/lib/module/components/MainComponents/KeyboardInputDock.js.map +1 -0
  139. package/lib/module/components/MainComponents/MessageContainer.js +7 -14
  140. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  141. package/lib/module/components/MainComponents/MessageList.js +110 -35
  142. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  143. package/lib/module/components/MainComponents/RoomList.js +32 -29
  144. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  145. package/lib/module/components/MainComponents/RoomStack.js +266 -0
  146. package/lib/module/components/MainComponents/RoomStack.js.map +1 -0
  147. package/lib/module/components/MainComponents/SystemMessage.js +6 -2
  148. package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
  149. package/lib/module/components/MessageBubble/Avatar.js +5 -1
  150. package/lib/module/components/MessageBubble/Avatar.js.map +1 -1
  151. package/lib/module/components/MessageBubble/BottomReplyContainer.js +18 -22
  152. package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  153. package/lib/module/components/MessageBubble/EmojiPickerSheet.js +438 -0
  154. package/lib/module/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
  155. package/lib/module/components/MessageBubble/Message.js +203 -134
  156. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  157. package/lib/module/components/MessageBubble/MessageInteractions.js +215 -14
  158. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  159. package/lib/module/components/MessageBubble/MessageReaction.js +115 -94
  160. package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
  161. package/lib/module/components/MessageBubble/MessageReply.js +65 -24
  162. package/lib/module/components/MessageBubble/MessageReply.js.map +1 -1
  163. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +6 -1
  164. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  165. package/lib/module/components/Modals/Modal/Modal.js +25 -1
  166. package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
  167. package/lib/module/components/Modals/Modal/SwipeBackLayer.js +172 -0
  168. package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -0
  169. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js +29 -11
  170. package/lib/module/components/Modals/ProfileHeader/ProfileHeader.js.map +1 -1
  171. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +10 -4
  172. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  173. package/lib/module/components/RoomComponents/ChatRoomItem.js +5 -4
  174. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  175. package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
  176. package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
  177. package/lib/module/components/Thread/ThreadWrapper.js +264 -152
  178. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  179. package/lib/module/components/styled/DateLabel.js +6 -3
  180. package/lib/module/components/styled/DateLabel.js.map +1 -1
  181. package/lib/module/context/MessageNotificationContext.js +190 -11
  182. package/lib/module/context/MessageNotificationContext.js.map +1 -1
  183. package/lib/module/context/xmppProvider.js +22 -7
  184. package/lib/module/context/xmppProvider.js.map +1 -1
  185. package/lib/module/helpers/createRoomFromApi.js +36 -2
  186. package/lib/module/helpers/createRoomFromApi.js.map +1 -1
  187. package/lib/module/helpers/emoji.js +44 -0
  188. package/lib/module/helpers/emoji.js.map +1 -0
  189. package/lib/module/helpers/haptics.js +24 -0
  190. package/lib/module/helpers/haptics.js.map +1 -0
  191. package/lib/module/helpers/historyPreloadScheduler.js +32 -66
  192. package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
  193. package/lib/module/helpers/insertMessageWithDelimiter.js +21 -12
  194. package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
  195. package/lib/module/helpers/keyboardLayout.js +20 -0
  196. package/lib/module/helpers/keyboardLayout.js.map +1 -1
  197. package/lib/module/helpers/mamReactions.js +51 -0
  198. package/lib/module/helpers/mamReactions.js.map +1 -0
  199. package/lib/module/helpers/parseMessageReference.js +37 -0
  200. package/lib/module/helpers/parseMessageReference.js.map +1 -0
  201. package/lib/module/helpers/reactionsConfig.js +10 -0
  202. package/lib/module/helpers/reactionsConfig.js.map +1 -0
  203. package/lib/module/helpers/updateMessagesTillLast.js +17 -2
  204. package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
  205. package/lib/module/hooks/useHeapSender.js +3 -1
  206. package/lib/module/hooks/useHeapSender.js.map +1 -1
  207. package/lib/module/hooks/useMessageHeapState.js +3 -2
  208. package/lib/module/hooks/useMessageHeapState.js.map +1 -1
  209. package/lib/module/hooks/useRoomInitialization.js +17 -8
  210. package/lib/module/hooks/useRoomInitialization.js.map +1 -1
  211. package/lib/module/hooks/useSendMessage.js +14 -8
  212. package/lib/module/hooks/useSendMessage.js.map +1 -1
  213. package/lib/module/hooks/useUnreadMessagesCounter.js +1 -1
  214. package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
  215. package/lib/module/networking/stanzaHandlers.js +107 -51
  216. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  217. package/lib/module/networking/xmpp/getHistory.xmpp.js +29 -74
  218. package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
  219. package/lib/module/networking/xmpp/handleStanzas.xmpp.js +4 -0
  220. package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  221. package/lib/module/networking/xmpp/mamRouter.js +175 -0
  222. package/lib/module/networking/xmpp/mamRouter.js.map +1 -0
  223. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +38 -2
  224. package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
  225. package/lib/module/networking/xmppClient.js +99 -24
  226. package/lib/module/networking/xmppClient.js.map +1 -1
  227. package/lib/module/roomStore/Middleware/newMessageMidlleware.js +29 -34
  228. package/lib/module/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
  229. package/lib/module/roomStore/Middleware/perfMiddleware.js +45 -0
  230. package/lib/module/roomStore/Middleware/perfMiddleware.js.map +1 -0
  231. package/lib/module/roomStore/Middleware/reactionsMiddleware.js +66 -43
  232. package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
  233. package/lib/module/roomStore/Middleware/unreadMidlleware.js +89 -69
  234. package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
  235. package/lib/module/roomStore/index.js +19 -15
  236. package/lib/module/roomStore/index.js.map +1 -1
  237. package/lib/module/roomStore/persistBackend.js +89 -0
  238. package/lib/module/roomStore/persistBackend.js.map +1 -0
  239. package/lib/module/roomStore/persistence.js +245 -48
  240. package/lib/module/roomStore/persistence.js.map +1 -1
  241. package/lib/module/roomStore/roomsSlice.js +275 -134
  242. package/lib/module/roomStore/roomsSlice.js.map +1 -1
  243. package/lib/module/theme/theme.js +3 -0
  244. package/lib/module/theme/theme.js.map +1 -1
  245. package/lib/module/utils/devLogger.js +13 -0
  246. package/lib/module/utils/devLogger.js.map +1 -1
  247. package/lib/module/version.js +1 -1
  248. package/lib/typescript/assets/emojiData.d.ts +8 -0
  249. package/lib/typescript/assets/emojiData.d.ts.map +1 -0
  250. package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
  251. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  252. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  253. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  254. package/lib/typescript/components/MainComponents/KeyboardInputDock.d.ts +16 -0
  255. package/lib/typescript/components/MainComponents/KeyboardInputDock.d.ts.map +1 -0
  256. package/lib/typescript/components/MainComponents/MessageContainer.d.ts +2 -2
  257. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  258. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  259. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  260. package/lib/typescript/components/MainComponents/RoomStack.d.ts +42 -0
  261. package/lib/typescript/components/MainComponents/RoomStack.d.ts.map +1 -0
  262. package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
  263. package/lib/typescript/components/MessageBubble/Avatar.d.ts +2 -0
  264. package/lib/typescript/components/MessageBubble/Avatar.d.ts.map +1 -1
  265. package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
  266. package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts +11 -0
  267. package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts.map +1 -0
  268. package/lib/typescript/components/MessageBubble/Message.d.ts +2 -2
  269. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  270. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +2 -0
  271. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  272. package/lib/typescript/components/MessageBubble/MessageReaction.d.ts +1 -0
  273. package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
  274. package/lib/typescript/components/MessageBubble/MessageReply.d.ts +7 -7
  275. package/lib/typescript/components/MessageBubble/MessageReply.d.ts.map +1 -1
  276. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  277. package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
  278. package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts +16 -0
  279. package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts.map +1 -0
  280. package/lib/typescript/components/Modals/ProfileHeader/ProfileHeader.d.ts.map +1 -1
  281. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  282. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts +2 -2
  283. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  284. package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts +3 -6
  285. package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
  286. package/lib/typescript/components/Thread/ThreadWrapper.d.ts +7 -1
  287. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  288. package/lib/typescript/components/styled/DateLabel.d.ts +1 -0
  289. package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
  290. package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
  291. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  292. package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
  293. package/lib/typescript/helpers/emoji.d.ts +6 -0
  294. package/lib/typescript/helpers/emoji.d.ts.map +1 -0
  295. package/lib/typescript/helpers/haptics.d.ts +3 -0
  296. package/lib/typescript/helpers/haptics.d.ts.map +1 -0
  297. package/lib/typescript/helpers/historyPreloadScheduler.d.ts +1 -0
  298. package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
  299. package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
  300. package/lib/typescript/helpers/keyboardLayout.d.ts +6 -0
  301. package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -1
  302. package/lib/typescript/helpers/mamReactions.d.ts +13 -0
  303. package/lib/typescript/helpers/mamReactions.d.ts.map +1 -0
  304. package/lib/typescript/helpers/parseMessageReference.d.ts +16 -0
  305. package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -0
  306. package/lib/typescript/helpers/reactionsConfig.d.ts +5 -0
  307. package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
  308. package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
  309. package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
  310. package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
  311. package/lib/typescript/hooks/useRoomInitialization.d.ts +2 -2
  312. package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
  313. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  314. package/lib/typescript/networking/stanzaHandlers.d.ts +4 -2
  315. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  316. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +3 -1
  317. package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
  318. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
  319. package/lib/typescript/networking/xmpp/mamRouter.d.ts +23 -0
  320. package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -0
  321. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +1 -0
  322. package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
  323. package/lib/typescript/networking/xmppClient.d.ts +22 -1
  324. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  325. package/lib/typescript/roomStore/Middleware/newMessageMidlleware.d.ts.map +1 -1
  326. package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts +4 -0
  327. package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts.map +1 -0
  328. package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts +9 -0
  329. package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
  330. package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
  331. package/lib/typescript/roomStore/index.d.ts.map +1 -1
  332. package/lib/typescript/roomStore/persistBackend.d.ts +11 -0
  333. package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -0
  334. package/lib/typescript/roomStore/persistence.d.ts +5 -6
  335. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  336. package/lib/typescript/roomStore/roomsSlice.d.ts +41 -1
  337. package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
  338. package/lib/typescript/theme/theme.d.ts +4 -1
  339. package/lib/typescript/theme/theme.d.ts.map +1 -1
  340. package/lib/typescript/types/models/message.model.d.ts +4 -0
  341. package/lib/typescript/types/models/message.model.d.ts.map +1 -1
  342. package/lib/typescript/types/models/room.model.d.ts +16 -0
  343. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  344. package/lib/typescript/types/models/xmpp.model.d.ts +6 -1
  345. package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
  346. package/lib/typescript/types/types.d.ts +15 -3
  347. package/lib/typescript/types/types.d.ts.map +1 -1
  348. package/lib/typescript/utils/devLogger.d.ts +8 -0
  349. package/lib/typescript/utils/devLogger.d.ts.map +1 -1
  350. package/lib/typescript/version.d.ts +1 -1
  351. package/package.json +10 -1
  352. package/src/assets/emojiData.ts +2146 -0
  353. package/src/assets/icons.tsx +5 -5
  354. package/src/components/Header/HeaderRoomList.tsx +7 -5
  355. package/src/components/MainComponents/ChatHeader.tsx +16 -7
  356. package/src/components/MainComponents/ChatRoom.tsx +64 -32
  357. package/src/components/MainComponents/ChatWrapper.tsx +73 -21
  358. package/src/components/MainComponents/KeyboardInputDock.tsx +47 -0
  359. package/src/components/MainComponents/MessageContainer.tsx +7 -15
  360. package/src/components/MainComponents/MessageList.tsx +96 -43
  361. package/src/components/MainComponents/RoomList.tsx +28 -29
  362. package/src/components/MainComponents/RoomStack.tsx +309 -0
  363. package/src/components/MainComponents/SystemMessage.tsx +6 -2
  364. package/src/components/MessageBubble/Avatar.tsx +7 -1
  365. package/src/components/MessageBubble/BottomReplyContainer.tsx +19 -21
  366. package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
  367. package/src/components/MessageBubble/Message.tsx +146 -87
  368. package/src/components/MessageBubble/MessageInteractions.tsx +213 -12
  369. package/src/components/MessageBubble/MessageReaction.tsx +120 -96
  370. package/src/components/MessageBubble/MessageReply.tsx +65 -32
  371. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +4 -0
  372. package/src/components/Modals/Modal/Modal.tsx +32 -1
  373. package/src/components/Modals/Modal/SwipeBackLayer.tsx +221 -0
  374. package/src/components/Modals/ProfileHeader/ProfileHeader.tsx +29 -8
  375. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +6 -3
  376. package/src/components/RoomComponents/ChatRoomItem.tsx +11 -4
  377. package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
  378. package/src/components/Thread/ThreadWrapper.tsx +274 -198
  379. package/src/components/styled/DateLabel.tsx +7 -3
  380. package/src/context/MessageNotificationContext.tsx +205 -7
  381. package/src/context/xmppProvider.tsx +29 -9
  382. package/src/helpers/createRoomFromApi.tsx +37 -1
  383. package/src/helpers/emoji.ts +39 -0
  384. package/src/helpers/haptics.ts +19 -0
  385. package/src/helpers/historyPreloadScheduler.ts +37 -69
  386. package/src/helpers/insertMessageWithDelimiter.ts +23 -16
  387. package/src/helpers/keyboardLayout.ts +26 -0
  388. package/src/helpers/mamReactions.ts +59 -0
  389. package/src/helpers/parseMessageReference.ts +38 -0
  390. package/src/helpers/reactionsConfig.ts +13 -0
  391. package/src/helpers/updateMessagesTillLast.tsx +14 -2
  392. package/src/hooks/useHeapSender.tsx +3 -2
  393. package/src/hooks/useMessageHeapState.tsx +6 -2
  394. package/src/hooks/useRoomInitialization.tsx +32 -15
  395. package/src/hooks/useSendMessage.tsx +18 -11
  396. package/src/hooks/useUnreadMessagesCounter.ts +1 -1
  397. package/src/networking/stanzaHandlers.ts +116 -60
  398. package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
  399. package/src/networking/xmpp/handleStanzas.xmpp.ts +2 -0
  400. package/src/networking/xmpp/mamRouter.ts +176 -0
  401. package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
  402. package/src/networking/xmppClient.ts +105 -20
  403. package/src/roomStore/Middleware/newMessageMidlleware.tsx +35 -38
  404. package/src/roomStore/Middleware/perfMiddleware.ts +50 -0
  405. package/src/roomStore/Middleware/reactionsMiddleware.tsx +53 -52
  406. package/src/roomStore/Middleware/unreadMidlleware.tsx +92 -80
  407. package/src/roomStore/index.ts +28 -27
  408. package/src/roomStore/persistBackend.ts +96 -0
  409. package/src/roomStore/persistence.ts +280 -73
  410. package/src/roomStore/roomsSlice.ts +304 -155
  411. package/src/theme/theme.ts +10 -1
  412. package/src/types/models/message.model.ts +4 -0
  413. package/src/types/models/room.model.ts +17 -0
  414. package/src/types/models/xmpp.model.ts +4 -2
  415. package/src/types/types.ts +15 -3
  416. package/src/utils/devLogger.ts +16 -0
  417. package/src/version.ts +1 -1
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { xml } from '@xmpp/client';
4
4
  import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
5
- import { getDataFromXml } from '../../helpers/getDataFromXml';
6
- import { createMessageFromXml } from '../../helpers/createMessageFromXml';
7
- export const getHistory = async (client, chatJID, max, before, otherId) => {
5
+ import { beginMamQuery, cancelMamQuery } from './mamRouter';
6
+ let historyIdCounter = 0;
7
+ export const getHistory = async (client, chatJID, max, before, otherId, options) => {
8
8
  if (typeof chatJID !== 'string') {
9
9
  return;
10
10
  }
@@ -16,81 +16,36 @@ export const getHistory = async (client, chatJID, max, before, otherId) => {
16
16
  const host = service.match(/wss?:\/\/([^:/]+)/)?.[1] || 'xmpp.chat.ethora.com';
17
17
  return `${chatJID}@conference.${host}`;
18
18
  })();
19
- const id = otherId ?? `get-history:${Date.now().toString()}`;
20
- let stanzaHdlrPointer;
21
- const unsubscribe = () => {
22
- client.off('stanza', stanzaHdlrPointer);
23
- };
24
- const responsePromise = new Promise((resolve, reject) => {
25
- let messages = [];
26
- stanzaHdlrPointer = async stanza => {
27
- const result = stanza.getChild('result');
28
- if (stanza.is('message') && stanza.attrs.from && stanza.attrs.from.startsWith(fixedChatJid) && result) {
29
- const messageEl = result.getChild('forwarded')?.getChild('message');
30
- messages.push(messageEl);
31
- }
32
- if (stanza.is('iq') && stanza.attrs.id === id && stanza.attrs.type === 'result') {
33
- let mainMessages = [];
34
- for (const msg of messages) {
35
- const reactions = msg?.getChild('reactions');
36
- const text = msg.getChild('body')?.getText();
37
- if (text || reactions) {
38
- const result = await getDataFromXml(msg);
39
- if (!result) {
40
- return;
41
- }
42
- const {
43
- data,
44
- id,
45
- body,
46
- ...rest
47
- } = result;
48
- if (!data) {
49
- console.log('No data in stanza');
50
- return;
51
- }
52
- const message = await createMessageFromXml({
53
- data,
54
- id,
55
- body: body || '',
56
- ...rest
57
- });
58
- mainMessages.push(message);
59
- }
60
- }
61
- resolve(mainMessages);
62
- }
63
- if (stanza.is('iq') && stanza.attrs.id === id && stanza.attrs.type === 'error') {
64
- reject();
65
- }
66
- };
67
- client?.on('stanza', stanzaHdlrPointer);
68
- const message = xml('iq', {
69
- type: 'set',
70
- to: fixedChatJid,
71
- id: id
72
- }, xml('query', {
73
- xmlns: 'urn:xmpp:mam:2'
74
- }, xml('set', {
75
- xmlns: 'http://jabber.org/protocol/rsm'
76
- }, xml('max', {}, max.toString()), before ? xml('before', {}, before.toString()) : xml('before'))));
77
- client?.send(message).catch(err => console.log('err on load', err));
78
- });
19
+ const id = otherId ?? `get-history:${Date.now().toString(36)}-${(++historyIdCounter).toString(36)}`;
20
+ const page = beginMamQuery(id, fixedChatJid, !options?.selfApplied);
21
+ const message = xml('iq', {
22
+ type: 'set',
23
+ to: fixedChatJid,
24
+ id: id
25
+ }, xml('query', {
26
+ xmlns: 'urn:xmpp:mam:2',
27
+ queryid: id
28
+ }, xml('set', {
29
+ xmlns: 'http://jabber.org/protocol/rsm'
30
+ }, xml('max', {}, max.toString()), before ? xml('before', {}, before.toString()) : xml('before'))));
31
+ client?.send(message).catch(err => console.log('err on load', err));
79
32
  const timeoutPromise = createTimeoutPromise(10000);
80
33
  try {
81
- // @ts-ignore
82
- const res = await Promise.race([responsePromise, timeoutPromise]);
83
- return res === null ? [] : res;
34
+ const res = await Promise.race([page, timeoutPromise]);
35
+ if (res === null) {
36
+ const partial = cancelMamQuery(id);
37
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
38
+ console.log(`[mam] history request for ${fixedChatJid} timed out after 10s (${partial.length} results arrived)`);
39
+ }
40
+ return partial;
41
+ }
42
+ return res;
84
43
  } catch (e) {
85
- // MAM rejects with no value when an iq error returns; the timeout
86
- // path resolves with null instead of throwing. Either is expected
87
- // for a room with no history yet — only log if `e` is meaningful.
88
- if (e !== undefined) {
89
- console.log('=-> error in', fixedChatJid, e);
44
+ const partial = cancelMamQuery(id);
45
+ if (typeof __DEV__ !== 'undefined' && __DEV__ && e === undefined) {
46
+ console.log(`[mam] history request for ${fixedChatJid} got no closing iq within 10s (${partial.length} results arrived)`);
90
47
  }
91
- return [];
92
- } finally {
93
- unsubscribe();
48
+ return partial;
94
49
  }
95
50
  };
96
51
  //# sourceMappingURL=getHistory.xmpp.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["xml","createTimeoutPromise","getDataFromXml","createMessageFromXml","getHistory","client","chatJID","max","before","otherId","fixedChatJid","includes","service","options","host","match","id","Date","now","toString","stanzaHdlrPointer","unsubscribe","off","responsePromise","Promise","resolve","reject","messages","stanza","result","getChild","is","attrs","from","startsWith","messageEl","push","type","mainMessages","msg","reactions","text","getText","data","body","rest","console","log","message","on","to","xmlns","send","catch","err","timeoutPromise","res","race","e","undefined"],"sourceRoot":"../../../../src","sources":["networking/xmpp/getHistory.xmpp.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["xml","createTimeoutPromise","beginMamQuery","cancelMamQuery","historyIdCounter","getHistory","client","chatJID","max","before","otherId","options","fixedChatJid","includes","service","host","match","id","Date","now","toString","page","selfApplied","message","type","to","xmlns","queryid","send","catch","err","console","log","timeoutPromise","res","Promise","race","partial","__DEV__","length","e","undefined"],"sourceRoot":"../../../../src","sources":["networking/xmpp/getHistory.xmpp.ts"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import { routeMamIq } from './mamRouter';
3
4
  import { onDeleteMessage, onEditMessage, onRealtimeMessage, onMessageHistory, onGetLastMessageArchive, handleComposing, onChatInvite, onPresenceInRoom, onGetChatRooms, onGetMembers, onGetRoomInfo, onNewRoomCreated, onReactionMessage, onReactionHistory, onRoomKicked, onMessageError } from '../stanzaHandlers';
4
5
  import { onCallTokenMessage } from '../callTokenStanza';
5
6
 
@@ -60,6 +61,9 @@ export function handleStanza(stanza, xmppWs) {
60
61
  onPresenceInRoom(stanza);
61
62
  break;
62
63
  case 'iq':
64
+ if (routeMamIq(stanza)) {
65
+ break;
66
+ }
63
67
  onGetChatRooms(stanza, xmppWs);
64
68
  onRealtimeMessage(stanza);
65
69
  onPresenceInRoom(stanza);
@@ -1 +1 @@
1
- {"version":3,"names":["onDeleteMessage","onEditMessage","onRealtimeMessage","onMessageHistory","onGetLastMessageArchive","handleComposing","onChatInvite","onPresenceInRoom","onGetChatRooms","onGetMembers","onGetRoomInfo","onNewRoomCreated","onReactionMessage","onReactionHistory","onRoomKicked","onMessageError","onCallTokenMessage","unwrapMucsubMessage","stanza","inner","getChild","handleStanza","xmppWs","attrs","type","name","unwrapped","username","console","log"],"sourceRoot":"../../../../src","sources":["networking/xmpp/handleStanzas.xmpp.ts"],"mappings":";;AACA,SACEA,eAAe,EACfC,aAAa,EACbC,iBAAiB,EACjBC,gBAAgB,EAChBC,uBAAuB,EACvBC,eAAe,EACfC,YAAY,EACZC,gBAAgB,EAChBC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,EACjBC,YAAY,EACZC,cAAc,QACT,mBAAmB;AAE1B,SAASC,kBAAkB,QAAQ,oBAAoB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAIC,MAAe,IAAc;EACxD,MAAMC,KAAK,GAAID,MAAM,EACjBE,QAAQ,GAAG,OAAO,EAAE,yCAAyC,CAAC,EAC9DA,QAAQ,GAAG,OAAO,CAAC,EACnBA,QAAQ,GAAG,MAAM,CAAC,EAClBA,QAAQ,GAAG,SAAS,CAAC;EACzB,OAAQD,KAAK,IAAgBD,MAAM;AACrC,CAAC;AAED,OAAO,SAASG,YAAYA,CAACH,MAAe,EAAEI,MAAkB,EAAE;EAChE,IAAIJ,MAAM,EAAEK,KAAK,EAAEC,IAAI,KAAK,UAAU,EAAE;IAAC;EAAO;;EAEhD;EACA;EACA;EACA;EACA;EACA,IAAIN,MAAM,EAAEO,IAAI,KAAK,SAAS,IAAIT,kBAAkB,CAACE,MAAM,CAAC,EAAE;IAC5D;EACF;EAEA,QAAQA,MAAM,CAACO,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,MAAMC,SAAS,GAAGT,mBAAmB,CAACC,MAAM,CAAC;QAC7CH,cAAc,CAACW,SAAS,EAAEJ,MAAM,CAAC;QACjCV,iBAAiB,CAACc,SAAS,CAAC;QAC5Bb,iBAAiB,CAACa,SAAS,CAAC;QAC5B1B,eAAe,CAAC0B,SAAS,CAAC;QAC1BzB,aAAa,CAACyB,SAAS,CAAC;QACxBpB,YAAY,CAACoB,SAAS,EAAEJ,MAAM,CAAC;QAC/BpB,iBAAiB,CAACwB,SAAS,CAAC;QAC5BvB,gBAAgB,CAACuB,SAAS,CAAC;QAC3BrB,eAAe,CAACqB,SAAS,EAAEJ,MAAM,CAACK,QAAQ,CAAC;QAC3CpB,gBAAgB,CAACmB,SAAS,CAAC;QAC3B;MACF;IACA,KAAK,UAAU;MACbZ,YAAY,CAACI,MAAM,CAAC;MACpBX,gBAAgB,CAACW,MAAM,CAAC;MACxB;IACF,KAAK,IAAI;MACPV,cAAc,CAACU,MAAM,EAAEI,MAAM,CAAC;MAC9BpB,iBAAiB,CAACgB,MAAM,CAAC;MACzBX,gBAAgB,CAACW,MAAM,CAAC;MACxBT,YAAY,CAACS,MAAM,CAAC;MACpBR,aAAa,CAACQ,MAAM,CAAC;MACrBd,uBAAuB,CAACc,MAAM,EAAEI,MAAM,CAAC;MACvC;IACF,KAAK,aAAa;MAChBX,gBAAgB,CAACO,MAAM,EAAEI,MAAM,CAAC;MAChC;IACF;MACEM,OAAO,CAACC,GAAG,CAAC,wBAAwB,EAAEX,MAAM,CAACO,IAAI,CAAC;EACtD;AACF","ignoreList":[]}
1
+ {"version":3,"names":["routeMamIq","onDeleteMessage","onEditMessage","onRealtimeMessage","onMessageHistory","onGetLastMessageArchive","handleComposing","onChatInvite","onPresenceInRoom","onGetChatRooms","onGetMembers","onGetRoomInfo","onNewRoomCreated","onReactionMessage","onReactionHistory","onRoomKicked","onMessageError","onCallTokenMessage","unwrapMucsubMessage","stanza","inner","getChild","handleStanza","xmppWs","attrs","type","name","unwrapped","username","console","log"],"sourceRoot":"../../../../src","sources":["networking/xmpp/handleStanzas.xmpp.ts"],"mappings":";;AACA,SAASA,UAAU,QAAQ,aAAa;AACxC,SACEC,eAAe,EACfC,aAAa,EACbC,iBAAiB,EACjBC,gBAAgB,EAChBC,uBAAuB,EACvBC,eAAe,EACfC,YAAY,EACZC,gBAAgB,EAChBC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,EACjBC,YAAY,EACZC,cAAc,QACT,mBAAmB;AAE1B,SAASC,kBAAkB,QAAQ,oBAAoB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAIC,MAAe,IAAc;EACxD,MAAMC,KAAK,GAAID,MAAM,EACjBE,QAAQ,GAAG,OAAO,EAAE,yCAAyC,CAAC,EAC9DA,QAAQ,GAAG,OAAO,CAAC,EACnBA,QAAQ,GAAG,MAAM,CAAC,EAClBA,QAAQ,GAAG,SAAS,CAAC;EACzB,OAAQD,KAAK,IAAgBD,MAAM;AACrC,CAAC;AAED,OAAO,SAASG,YAAYA,CAACH,MAAe,EAAEI,MAAkB,EAAE;EAChE,IAAIJ,MAAM,EAAEK,KAAK,EAAEC,IAAI,KAAK,UAAU,EAAE;IAAC;EAAO;;EAEhD;EACA;EACA;EACA;EACA;EACA,IAAIN,MAAM,EAAEO,IAAI,KAAK,SAAS,IAAIT,kBAAkB,CAACE,MAAM,CAAC,EAAE;IAC5D;EACF;EAEA,QAAQA,MAAM,CAACO,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,MAAMC,SAAS,GAAGT,mBAAmB,CAACC,MAAM,CAAC;QAC7CH,cAAc,CAACW,SAAS,EAAEJ,MAAM,CAAC;QACjCV,iBAAiB,CAACc,SAAS,CAAC;QAC5Bb,iBAAiB,CAACa,SAAS,CAAC;QAC5B1B,eAAe,CAAC0B,SAAS,CAAC;QAC1BzB,aAAa,CAACyB,SAAS,CAAC;QACxBpB,YAAY,CAACoB,SAAS,EAAEJ,MAAM,CAAC;QAC/BpB,iBAAiB,CAACwB,SAAS,CAAC;QAC5BvB,gBAAgB,CAACuB,SAAS,CAAC;QAC3BrB,eAAe,CAACqB,SAAS,EAAEJ,MAAM,CAACK,QAAQ,CAAC;QAC3CpB,gBAAgB,CAACmB,SAAS,CAAC;QAC3B;MACF;IACA,KAAK,UAAU;MACbZ,YAAY,CAACI,MAAM,CAAC;MACpBX,gBAAgB,CAACW,MAAM,CAAC;MACxB;IACF,KAAK,IAAI;MACP,IAAInB,UAAU,CAACmB,MAAM,CAAC,EAAE;QAAC;MAAM;MAC/BV,cAAc,CAACU,MAAM,EAAEI,MAAM,CAAC;MAC9BpB,iBAAiB,CAACgB,MAAM,CAAC;MACzBX,gBAAgB,CAACW,MAAM,CAAC;MACxBT,YAAY,CAACS,MAAM,CAAC;MACpBR,aAAa,CAACQ,MAAM,CAAC;MACrBd,uBAAuB,CAACc,MAAM,EAAEI,MAAM,CAAC;MACvC;IACF,KAAK,aAAa;MAChBX,gBAAgB,CAACO,MAAM,EAAEI,MAAM,CAAC;MAChC;IACF;MACEM,OAAO,CAACC,GAAG,CAAC,wBAAwB,EAAEX,MAAM,CAACO,IAAI,CAAC;EACtD;AACF","ignoreList":[]}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+
3
+ import { store } from '../../roomStore';
4
+ import { addRoomMessages, setReactions } from '../../roomStore/roomsSlice';
5
+ import { applyMamReactions } from '../../helpers/mamReactions';
6
+ const pending = new Map();
7
+ const flush = query => {
8
+ // Every step is guarded: a failure in one (a middleware throwing on a
9
+ // reaction, say) used to escape `settle` before the waiting request was
10
+ // resolved — the page was lost and the room stayed empty until opened.
11
+ let deferred = [];
12
+ try {
13
+ // Reactions ride in the archive as their own entries: fold them onto
14
+ // the page's messages first, so they are stored together.
15
+ deferred = applyMamReactions(query.messages, query.reactions);
16
+ } catch (e) {
17
+ console.warn('[mam] applying reactions to a page failed', e);
18
+ }
19
+ if (query.apply && query.messages.length > 0) {
20
+ try {
21
+ store.dispatch(addRoomMessages({
22
+ roomJID: query.roomJID,
23
+ messages: query.messages
24
+ }));
25
+ } catch (e) {
26
+ console.warn('[mam] applying a history page failed', e);
27
+ }
28
+ }
29
+ for (const reaction of deferred) {
30
+ try {
31
+ store.dispatch(setReactions({
32
+ roomJID: reaction.roomJID || query.roomJID,
33
+ messageId: reaction.messageId,
34
+ from: reaction.from,
35
+ reactions: reaction.emoji,
36
+ data: reaction.data,
37
+ latestReactionTimestamp: reaction.ts
38
+ }));
39
+ } catch (e) {
40
+ console.warn('[mam] applying a reaction failed', e);
41
+ }
42
+ }
43
+ };
44
+ export const beginMamQuery = (queryId, roomJID, apply = true) => new Promise((resolve, reject) => {
45
+ pending.set(queryId, {
46
+ roomJID,
47
+ apply,
48
+ messages: [],
49
+ reactions: [],
50
+ inflight: 0,
51
+ closed: null,
52
+ resolve,
53
+ reject
54
+ });
55
+ });
56
+
57
+ /**
58
+ * Give up waiting (timeout). Whatever arrived is still applied — a late
59
+ * page is better than a lost one — and handed back.
60
+ */
61
+ export const cancelMamQuery = queryId => {
62
+ const query = pending.get(queryId);
63
+ if (!query) {
64
+ return [];
65
+ }
66
+ pending.delete(queryId);
67
+ flush(query);
68
+ query.resolve(query.messages);
69
+ return query.messages;
70
+ };
71
+ const bareLower = jid => String(jid || '').split('/')[0].toLowerCase();
72
+
73
+ // By the echoed `queryid` when the server provides one; otherwise by the
74
+ // room the result came from — the oldest still-open query for that room.
75
+ // (Results are per room anyway: a query only ever asks one archive.)
76
+ const queryOf = stanza => {
77
+ const queryId = stanza?.getChild?.('result')?.attrs?.queryid;
78
+ const byId = queryId ? pending.get(queryId) : undefined;
79
+ if (byId) {
80
+ return byId;
81
+ }
82
+ const room = bareLower(stanza?.attrs?.from);
83
+ if (!room) {
84
+ return undefined;
85
+ }
86
+ for (const query of pending.values()) {
87
+ if (!query.closed && bareLower(query.roomJID) === room) {
88
+ return query;
89
+ }
90
+ }
91
+ return undefined;
92
+ };
93
+ const settle = (queryId, query) => {
94
+ if (pending.get(queryId) === query) {
95
+ pending.delete(queryId);
96
+ }
97
+ try {
98
+ flush(query);
99
+ } finally {
100
+ // The waiting request is always answered, whatever happened above.
101
+ if (query.closed?.error) {
102
+ query.reject(new Error('mam query error'));
103
+ } else {
104
+ query.resolve(query.messages);
105
+ }
106
+ }
107
+ };
108
+ const settleIfDone = query => {
109
+ if (!query.closed || query.inflight > 0) {
110
+ return;
111
+ }
112
+ const entry = [...pending.entries()].find(([, q]) => q === query);
113
+ settle(entry ? entry[0] : '', query);
114
+ };
115
+
116
+ /**
117
+ * Claim a result for its pending query — synchronously, the moment the
118
+ * stanza arrives — so the router knows a parse is outstanding. Returns
119
+ * true when a pending query owns it (the caller must then always follow
120
+ * up with `collectMamMessage`, even when the parse yields nothing).
121
+ */
122
+ export const claimMamResult = stanza => {
123
+ const query = queryOf(stanza);
124
+ if (!query) {
125
+ return false;
126
+ }
127
+ query.inflight += 1;
128
+ return true;
129
+ };
130
+
131
+ /** The parsed result of a claimed stanza (undefined: dropped). */
132
+ export const collectMamReaction = (stanza, reaction) => {
133
+ const query = queryOf(stanza);
134
+ if (!query) {
135
+ return false;
136
+ }
137
+ query.reactions.push(reaction);
138
+ return true;
139
+ };
140
+ export const collectMamMessage = (stanza, message) => {
141
+ const query = queryOf(stanza);
142
+ if (!query) {
143
+ return false;
144
+ }
145
+ if (message) {
146
+ query.messages.push(message);
147
+ }
148
+ query.inflight = Math.max(0, query.inflight - 1);
149
+ settleIfDone(query);
150
+ return true;
151
+ };
152
+
153
+ /** The query's closing iq; true when it belonged to a pending query. */
154
+ export const routeMamIq = stanza => {
155
+ if (!stanza?.is?.('iq')) {
156
+ return false;
157
+ }
158
+ const query = pending.get(stanza.attrs?.id);
159
+ if (!query) {
160
+ return false;
161
+ }
162
+ query.closed = {
163
+ error: stanza.attrs.type === 'error'
164
+ };
165
+ // Results that are still being parsed settle the page when they land;
166
+ // until then the query stays registered so they can find it.
167
+ if (query.inflight === 0) {
168
+ settle(stanza.attrs.id, query);
169
+ }
170
+ return true;
171
+ };
172
+
173
+ /** Test hook. */
174
+ export const __resetMamRouter = () => pending.clear();
175
+ //# sourceMappingURL=mamRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["store","addRoomMessages","setReactions","applyMamReactions","pending","Map","flush","query","deferred","messages","reactions","e","console","warn","apply","length","dispatch","roomJID","reaction","messageId","from","emoji","data","latestReactionTimestamp","ts","beginMamQuery","queryId","Promise","resolve","reject","set","inflight","closed","cancelMamQuery","get","delete","bareLower","jid","String","split","toLowerCase","queryOf","stanza","getChild","attrs","queryid","byId","undefined","room","values","settle","error","Error","settleIfDone","entry","entries","find","q","claimMamResult","collectMamReaction","push","collectMamMessage","message","Math","max","routeMamIq","is","id","type","__resetMamRouter","clear"],"sourceRoot":"../../../../src","sources":["networking/xmpp/mamRouter.ts"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,36 @@ import { xml } from '@xmpp/client';
4
4
  import { createTimeoutPromise } from './createTimeoutPromise.xmpp';
5
5
  let presenceIdCounter = 0;
6
6
  const nextPresenceId = () => `presenceInRoom-${Date.now().toString(36)}-${(++presenceIdCounter).toString(36)}`;
7
- export const presenceInRoom = async (client, roomJID, delay = 2000) => {
7
+ const joinedByClient = new WeakMap();
8
+ const joinedRooms = client => {
9
+ let map = joinedByClient.get(client);
10
+ if (!map) {
11
+ map = new Map();
12
+ joinedByClient.set(client, map);
13
+ const forget = () => joinedByClient.get(client)?.clear();
14
+ client.on('disconnect', forget);
15
+ client.on('offline', forget);
16
+ }
17
+ return map;
18
+ };
19
+ export const __forgetJoinedRooms = client => joinedByClient.get(client)?.clear();
20
+ export const presenceInRoom = (client, roomJID, delay = 0) => {
21
+ const joined = joinedRooms(client);
22
+ const existing = joined.get(roomJID);
23
+ if (existing) {
24
+ return existing;
25
+ }
26
+ const join = joinRoom(client, roomJID, delay);
27
+ joined.set(roomJID, join);
28
+ // A failed join is not a join: let the next caller try again.
29
+ join.catch(() => {
30
+ if (joined.get(roomJID) === join) {
31
+ joined.delete(roomJID);
32
+ }
33
+ });
34
+ return join;
35
+ };
36
+ const joinRoom = async (client, roomJID, delay) => {
8
37
  let stanzaHandler;
9
38
  const unsubscribe = () => client.off('stanza', stanzaHandler);
10
39
  const stanzaId = nextPresenceId();
@@ -21,6 +50,11 @@ export const presenceInRoom = async (client, roomJID, delay = 2000) => {
21
50
  return;
22
51
  }
23
52
  settled = true;
53
+ if (delay <= 0) {
54
+ unsubscribe();
55
+ cb(value);
56
+ return;
57
+ }
24
58
  setTimeout(() => {
25
59
  unsubscribe();
26
60
  cb(value);
@@ -38,7 +72,9 @@ export const presenceInRoom = async (client, roomJID, delay = 2000) => {
38
72
  id: stanzaId
39
73
  }, xml('x', {
40
74
  xmlns: 'http://jabber.org/protocol/muc'
41
- }));
75
+ }, xml('history', {
76
+ maxstanzas: '0'
77
+ })));
42
78
 
43
79
  // Side-effects sequence: send the presence (handles its own
44
80
  // failure → reject), then wait the timeout (also handles its own
@@ -1 +1 @@
1
- {"version":3,"names":["xml","createTimeoutPromise","presenceIdCounter","nextPresenceId","Date","now","toString","presenceInRoom","client","roomJID","delay","stanzaHandler","unsubscribe","off","stanzaId","Promise","resolve","reject","settled","finish","cb","value","setTimeout","stanza","is","attrs","id","from","startsWith","on","presence","jid","to","getLocal","xmlns","send","err"],"sourceRoot":"../../../../src","sources":["networking/xmpp/presenceInRoom.xmpp.ts"],"mappings":";;AAAA,SAAiBA,GAAG,QAAQ,cAAc;AAC1C,SAASC,oBAAoB,QAAQ,6BAA6B;AAGlE,IAAIC,iBAAiB,GAAG,CAAC;AACzB,MAAMC,cAAc,GAAGA,CAAA,KACrB,kBAAkBC,IAAI,CAACC,GAAG,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAEJ,iBAAiB,EAAEI,QAAQ,CAAC,EAAE,CAAC,EAAE;AAEnF,OAAO,MAAMC,cAAc,GAAG,MAAAA,CAC5BC,MAAc,EACdC,OAAe,EACfC,KAAK,GAAG,IAAI,KACS;EACrB,IAAIC,aAAwC;EAC5C,MAAMC,WAAW,GAAGA,CAAA,KAAMJ,MAAM,CAACK,GAAG,CAAC,QAAQ,EAAEF,aAAa,CAAC;EAC7D,MAAMG,QAAQ,GAAGX,cAAc,CAAC,CAAC;;EAEjC;EACA;EACA;EACA;EACA;EACA,OAAO,IAAIY,OAAO,CAAU,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC/C,IAAIC,OAAO,GAAG,KAAK;IAEnB,MAAMC,MAAM,GAAGA,CAACC,EAAyB,EAAEC,KAAW,KAAK;MACzD,IAAIH,OAAO,EAAE;QAAC;MAAO;MACrBA,OAAO,GAAG,IAAI;MAEdI,UAAU,CAAC,MAAM;QACfV,WAAW,CAAC,CAAC;QACbQ,EAAE,CAACC,KAAK,CAAC;MACX,CAAC,EAAEX,KAAK,CAAC;IACX,CAAC;IAEDC,aAAa,GAAIY,MAAM,IAAK;MAC1B,IACEA,MAAM,CAACC,EAAE,CAAC,UAAU,CAAC,IACrBD,MAAM,CAACE,KAAK,CAACC,EAAE,KAAKZ,QAAQ,IAC5BS,MAAM,CAACE,KAAK,CAACE,IAAI,EAAEC,UAAU,CAACnB,OAAO,CAAC,EACtC;QACAU,MAAM,CAACH,OAAO,EAAEO,MAAM,CAAC;MACzB;IACF,CAAC;IAEDf,MAAM,CAACqB,EAAE,CAAC,QAAQ,EAAElB,aAAa,CAAC;IAElC,MAAMmB,QAAQ,GAAG9B,GAAG,CAClB,UAAU,EACV;MACE2B,IAAI,EAAEnB,MAAM,CAACuB,GAAG,EAAEzB,QAAQ,CAAC,CAAC;MAC5B0B,EAAE,EAAE,GAAGvB,OAAO,IAAID,MAAM,CAACuB,GAAG,EAAEE,QAAQ,CAAC,CAAC,EAAE;MAC1CP,EAAE,EAAEZ;IACN,CAAC,EACDd,GAAG,CAAC,GAAG,EAAE;MAAEkC,KAAK,EAAE;IAAiC,CAAC,CACtD,CAAC;;IAED;IACA;IACA;IACA;IACA,CAAC,YAAY;MACX,IAAI;QACF,MAAM1B,MAAM,CAAC2B,IAAI,CAACL,QAAQ,CAAC;MAC7B,CAAC,CAAC,OAAOM,GAAG,EAAE;QACZxB,WAAW,CAAC,CAAC;QACbK,MAAM,CAACmB,GAAG,CAAC;QACX;MACF;MACA,IAAI;QACF,MAAMnC,oBAAoB,CAAC,IAAI,EAAEW,WAAW,CAAC;MAC/C,CAAC,CAAC,OAAOwB,GAAG,EAAE;QACZ;QACA;QACA;QACA;QACA;QACA,IAAI,CAAClB,OAAO,EAAE;UAACD,MAAM,CAACmB,GAAG,CAAC;QAAC;MAC7B;IACF,CAAC,EAAE,CAAC;EACN,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["xml","createTimeoutPromise","presenceIdCounter","nextPresenceId","Date","now","toString","joinedByClient","WeakMap","joinedRooms","client","map","get","Map","set","forget","clear","on","__forgetJoinedRooms","presenceInRoom","roomJID","delay","joined","existing","join","joinRoom","catch","delete","stanzaHandler","unsubscribe","off","stanzaId","Promise","resolve","reject","settled","finish","cb","value","setTimeout","stanza","is","attrs","id","from","startsWith","presence","jid","to","getLocal","xmlns","maxstanzas","send","err"],"sourceRoot":"../../../../src","sources":["networking/xmpp/presenceInRoom.xmpp.ts"],"mappings":"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","ignoreList":[]}