@amityco/ts-sdk 6.17.3 → 6.18.0

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 (401) hide show
  1. package/dist/@types/core/events.d.ts +4 -2
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/marker.d.ts +12 -1
  4. package/dist/@types/core/marker.d.ts.map +1 -1
  5. package/dist/@types/core/model.d.ts +6 -2
  6. package/dist/@types/core/model.d.ts.map +1 -1
  7. package/dist/@types/core/payload.d.ts +20 -3
  8. package/dist/@types/core/payload.d.ts.map +1 -1
  9. package/dist/@types/core/readReceipt.d.ts +21 -0
  10. package/dist/@types/core/readReceipt.d.ts.map +1 -0
  11. package/dist/@types/domains/channel.d.ts +11 -1
  12. package/dist/@types/domains/channel.d.ts.map +1 -1
  13. package/dist/@types/domains/client.d.ts +12 -2
  14. package/dist/@types/domains/client.d.ts.map +1 -1
  15. package/dist/@types/domains/community.d.ts +1 -3
  16. package/dist/@types/domains/community.d.ts.map +1 -1
  17. package/dist/@types/domains/group.d.ts +2 -2
  18. package/dist/@types/domains/group.d.ts.map +1 -1
  19. package/dist/@types/domains/marker.d.ts +15 -0
  20. package/dist/@types/domains/marker.d.ts.map +1 -1
  21. package/dist/@types/domains/message.d.ts +4 -0
  22. package/dist/@types/domains/message.d.ts.map +1 -1
  23. package/dist/@types/domains/story.d.ts +20 -3
  24. package/dist/@types/domains/story.d.ts.map +1 -1
  25. package/dist/@types/domains/subChannel.d.ts +4 -0
  26. package/dist/@types/domains/subChannel.d.ts.map +1 -1
  27. package/dist/channelRepository/api/markAsRead.d.ts.map +1 -1
  28. package/dist/channelRepository/channelModeration/api/index.d.ts +2 -0
  29. package/dist/channelRepository/channelModeration/api/index.d.ts.map +1 -1
  30. package/dist/channelRepository/channelModeration/api/muteMembers.d.ts +17 -0
  31. package/dist/channelRepository/channelModeration/api/muteMembers.d.ts.map +1 -0
  32. package/dist/channelRepository/channelModeration/api/unmuteMembers.d.ts +16 -0
  33. package/dist/channelRepository/channelModeration/api/unmuteMembers.d.ts.map +1 -0
  34. package/dist/channelRepository/events/onChannelDeleted.d.ts.map +1 -1
  35. package/dist/channelRepository/events/onChannelLeft.d.ts.map +1 -1
  36. package/dist/channelRepository/events/onChannelMemberBanned.d.ts.map +1 -1
  37. package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
  38. package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -1
  39. package/dist/channelRepository/observers/getChannels/ChannelQueryStreamController.d.ts.map +1 -1
  40. package/dist/channelRepository/utils/getChannelIsMentioned.d.ts +10 -0
  41. package/dist/channelRepository/utils/getChannelIsMentioned.d.ts.map +1 -0
  42. package/dist/channelRepository/utils/getSubChannelsUnreadCount.d.ts +10 -0
  43. package/dist/channelRepository/utils/getSubChannelsUnreadCount.d.ts.map +1 -0
  44. package/dist/channelRepository/utils/prepareChannelPayload.d.ts.map +1 -1
  45. package/dist/client/api/accessTokenExpiryWatcher.d.ts +1 -1
  46. package/dist/client/api/accessTokenExpiryWatcher.d.ts.map +1 -1
  47. package/dist/client/api/createClient.d.ts.map +1 -1
  48. package/dist/client/api/enableUnreadCount.d.ts +2 -0
  49. package/dist/client/api/enableUnreadCount.d.ts.map +1 -0
  50. package/dist/client/api/index.d.ts +1 -0
  51. package/dist/client/api/index.d.ts.map +1 -1
  52. package/dist/client/api/login.d.ts.map +1 -1
  53. package/dist/client/api/markerSync.d.ts.map +1 -1
  54. package/dist/client/api/renewal.d.ts.map +1 -1
  55. package/dist/client/api/validateTexts.d.ts +8 -0
  56. package/dist/client/api/validateTexts.d.ts.map +1 -0
  57. package/dist/client/api/validateUrls.d.ts +8 -0
  58. package/dist/client/api/validateUrls.d.ts.map +1 -0
  59. package/dist/client/observers/getUserUnread.d.ts +1 -1
  60. package/dist/client/observers/getUserUnread.d.ts.map +1 -1
  61. package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngine.d.ts +33 -0
  62. package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngine.d.ts.map +1 -0
  63. package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.d.ts +3 -0
  64. package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.d.ts.map +1 -0
  65. package/dist/client/utils/markerSyncEngine.d.ts +2 -0
  66. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
  67. package/dist/client/utils/setClientToken.d.ts.map +1 -1
  68. package/dist/client/utils/subscribeGlobalTopic.d.ts.map +1 -1
  69. package/dist/commentRepository/api/deleteComment.d.ts.map +1 -1
  70. package/dist/commentRepository/api/queryComments.d.ts.map +1 -1
  71. package/dist/commentRepository/events/utils.d.ts.map +1 -1
  72. package/dist/commentRepository/internalApi/queryComments.d.ts.map +1 -1
  73. package/dist/commentRepository/utils/convertToInternalComment.d.ts +8 -0
  74. package/dist/commentRepository/utils/convertToInternalComment.d.ts.map +1 -0
  75. package/dist/core/events.d.ts +3 -3
  76. package/dist/core/events.d.ts.map +1 -1
  77. package/dist/core/model/idResolvers.d.ts.map +1 -1
  78. package/dist/core/model/index.d.ts.map +1 -1
  79. package/dist/core/query/sorting.d.ts +6 -0
  80. package/dist/core/query/sorting.d.ts.map +1 -1
  81. package/dist/core/subscription.d.ts +1 -0
  82. package/dist/core/subscription.d.ts.map +1 -1
  83. package/dist/index.cjs.js +5745 -4474
  84. package/dist/index.esm.js +5183 -3914
  85. package/dist/index.umd.js +4 -4
  86. package/dist/marker/api/getChannelMarkers.d.ts.map +1 -1
  87. package/dist/marker/api/getMessageMarkers.d.ts.map +1 -1
  88. package/dist/marker/api/getSubChannelMarkers.d.ts.map +1 -1
  89. package/dist/marker/api/getUserMarker.d.ts +1 -1
  90. package/dist/marker/api/getUserMarker.d.ts.map +1 -1
  91. package/dist/marker/api/getUserMessageFeedMarkers.d.ts +18 -0
  92. package/dist/marker/api/getUserMessageFeedMarkers.d.ts.map +1 -0
  93. package/dist/marker/events/onMessageMarked.d.ts.map +1 -1
  94. package/dist/marker/events/onUserFeedMarkerUpdated.d.ts +17 -0
  95. package/dist/marker/events/onUserFeedMarkerUpdated.d.ts.map +1 -0
  96. package/dist/marker/events/onUserMarkerSync.d.ts.map +1 -1
  97. package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.d.ts +2 -0
  98. package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.d.ts.map +1 -0
  99. package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.d.ts +2 -0
  100. package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.d.ts.map +1 -0
  101. package/dist/marker/utils/deleteChannelUnreadByChannelId.d.ts +2 -0
  102. package/dist/marker/utils/deleteChannelUnreadByChannelId.d.ts.map +1 -0
  103. package/dist/marker/utils/persistUnreadCountInfo.d.ts +2 -0
  104. package/dist/marker/utils/persistUnreadCountInfo.d.ts.map +1 -0
  105. package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts +2 -0
  106. package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts.map +1 -0
  107. package/dist/marker/utils/updateSubChannelUnreadFromMessage.d.ts +2 -0
  108. package/dist/marker/utils/updateSubChannelUnreadFromMessage.d.ts.map +1 -0
  109. package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts +1 -0
  110. package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts.map +1 -1
  111. package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts +2 -2
  112. package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts.map +1 -1
  113. package/dist/messageRepository/api/createMessage.d.ts.map +1 -1
  114. package/dist/messageRepository/api/deleteMessage.d.ts.map +1 -1
  115. package/dist/messageRepository/api/editMessage.d.ts.map +1 -1
  116. package/dist/messageRepository/api/getMessage.d.ts.map +1 -1
  117. package/dist/messageRepository/api/getMessages.d.ts.map +1 -1
  118. package/dist/messageRepository/api/markAsDelivered.d.ts.map +1 -1
  119. package/dist/messageRepository/api/queryMessages.d.ts.map +1 -1
  120. package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -1
  121. package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
  122. package/dist/messageRepository/events/onMessageCreated.d.ts +2 -2
  123. package/dist/messageRepository/events/onMessageCreated.d.ts.map +1 -1
  124. package/dist/messageRepository/events/onMessageDeleted.d.ts +1 -1
  125. package/dist/messageRepository/events/onMessageDeleted.d.ts.map +1 -1
  126. package/dist/messageRepository/events/onMessageFetched.d.ts +1 -1
  127. package/dist/messageRepository/events/onMessageFetched.d.ts.map +1 -1
  128. package/dist/messageRepository/events/onMessageFlagCleared.d.ts +1 -1
  129. package/dist/messageRepository/events/onMessageFlagCleared.d.ts.map +1 -1
  130. package/dist/messageRepository/events/onMessageFlagged.d.ts +1 -1
  131. package/dist/messageRepository/events/onMessageFlagged.d.ts.map +1 -1
  132. package/dist/messageRepository/events/onMessageReactionAdded.d.ts +1 -1
  133. package/dist/messageRepository/events/onMessageReactionAdded.d.ts.map +1 -1
  134. package/dist/messageRepository/events/onMessageReactionRemoved.d.ts +1 -1
  135. package/dist/messageRepository/events/onMessageReactionRemoved.d.ts.map +1 -1
  136. package/dist/messageRepository/events/onMessageUnflagged.d.ts +1 -1
  137. package/dist/messageRepository/events/onMessageUnflagged.d.ts.map +1 -1
  138. package/dist/messageRepository/events/onMessageUpdated.d.ts +1 -1
  139. package/dist/messageRepository/events/onMessageUpdated.d.ts.map +1 -1
  140. package/dist/messageRepository/internalApi/getMessage.d.ts +32 -0
  141. package/dist/messageRepository/internalApi/getMessage.d.ts.map +1 -0
  142. package/dist/messageRepository/internalApi/getMessages.d.ts +32 -0
  143. package/dist/messageRepository/internalApi/getMessages.d.ts.map +1 -0
  144. package/dist/messageRepository/observers/getMessage.d.ts.map +1 -1
  145. package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -1
  146. package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts +2 -2
  147. package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -1
  148. package/dist/messageRepository/observers/observeMessage.d.ts.map +1 -1
  149. package/dist/messageRepository/observers/observeMessages.d.ts.map +1 -1
  150. package/dist/messageRepository/utils/getMessageReadCount.d.ts +1 -1
  151. package/dist/messageRepository/utils/getMessageReadCount.d.ts.map +1 -1
  152. package/dist/messageRepository/utils/prepareMessagePayload.d.ts +1 -1
  153. package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
  154. package/dist/reactionRepository/events/onReactionAdded.d.ts +1 -1
  155. package/dist/reactionRepository/events/onReactionAdded.d.ts.map +1 -1
  156. package/dist/reactionRepository/events/onReactionRemoved.d.ts +1 -1
  157. package/dist/reactionRepository/events/onReactionRemoved.d.ts.map +1 -1
  158. package/dist/reactionRepository/events/onReactorAdded.d.ts.map +1 -1
  159. package/dist/reactionRepository/events/onReactorRemoved.d.ts.map +1 -1
  160. package/dist/reactionRepository/utils/fetchReference.d.ts +1 -1
  161. package/dist/reactionRepository/utils/fetchReference.d.ts.map +1 -1
  162. package/dist/reactionRepository/utils/prepareMessagePayloadForCache.d.ts +1 -1
  163. package/dist/reactionRepository/utils/prepareMessagePayloadForCache.d.ts.map +1 -1
  164. package/dist/reactionRepository/utils/prepareReactionPayloadFormEvent.d.ts +1 -0
  165. package/dist/reactionRepository/utils/prepareReactionPayloadFormEvent.d.ts.map +1 -1
  166. package/dist/storyRepository/api/createImageStory.d.ts.map +1 -1
  167. package/dist/storyRepository/api/createVideoStory.d.ts.map +1 -1
  168. package/dist/storyRepository/constants.d.ts +2 -0
  169. package/dist/storyRepository/constants.d.ts.map +1 -1
  170. package/dist/storyRepository/events/onStoryReactionAdded.d.ts.map +1 -1
  171. package/dist/storyRepository/events/onStoryReactionRemoved.d.ts.map +1 -1
  172. package/dist/storyRepository/internalApi/getStoryByStoryId.d.ts.map +1 -1
  173. package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -1
  174. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts +14 -0
  175. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -0
  176. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.d.ts +13 -0
  177. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.d.ts.map +1 -0
  178. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts +16 -0
  179. package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts.map +1 -0
  180. package/dist/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.d.ts +2 -0
  181. package/dist/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.d.ts.map +1 -0
  182. package/dist/storyRepository/observers/getGlobalStoryTargets/index.d.ts +2 -0
  183. package/dist/storyRepository/observers/getGlobalStoryTargets/index.d.ts.map +1 -0
  184. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts.map +1 -1
  185. package/dist/storyRepository/observers/index.d.ts +1 -0
  186. package/dist/storyRepository/observers/index.d.ts.map +1 -1
  187. package/dist/storyRepository/utils/StoryComputedValue.d.ts +21 -0
  188. package/dist/storyRepository/utils/StoryComputedValue.d.ts.map +1 -0
  189. package/dist/storyRepository/utils/convertRawToStory.d.ts +2 -2
  190. package/dist/storyRepository/utils/convertRawToStory.d.ts.map +1 -1
  191. package/dist/storyRepository/utils/convertStoryPayloadToRaw.d.ts.map +1 -1
  192. package/dist/subChannelRepository/api/markAsReadBySegment.d.ts +16 -0
  193. package/dist/subChannelRepository/api/markAsReadBySegment.d.ts.map +1 -0
  194. package/dist/subChannelRepository/api/readingAPI.d.ts.map +1 -1
  195. package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
  196. package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
  197. package/dist/subChannelRepository/events/onSubChannelCreated.d.ts.map +1 -1
  198. package/dist/subChannelRepository/events/onSubChannelDeleted.d.ts.map +1 -1
  199. package/dist/subChannelRepository/index.d.ts +1 -0
  200. package/dist/subChannelRepository/index.d.ts.map +1 -1
  201. package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
  202. package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts.map +1 -1
  203. package/dist/subChannelRepository/utils/convertSubChannelFromRaw.d.ts.map +1 -1
  204. package/dist/subChannelRepository/utils/getSubChannelIsMentioned.d.ts +2 -0
  205. package/dist/subChannelRepository/utils/getSubChannelIsMentioned.d.ts.map +1 -0
  206. package/dist/subChannelRepository/utils/getSubChannelUnreadCount.d.ts.map +1 -1
  207. package/dist/subChannelRepository/utils/markReadEngine.d.ts +2 -0
  208. package/dist/subChannelRepository/utils/markReadEngine.d.ts.map +1 -1
  209. package/dist/subChannelRepository/utils/messageReceiptSync.d.ts +31 -0
  210. package/dist/subChannelRepository/utils/messageReceiptSync.d.ts.map +1 -0
  211. package/dist/subChannelRepository/utils/persistOptimisticUnreadInfo.d.ts +2 -0
  212. package/dist/subChannelRepository/utils/persistOptimisticUnreadInfo.d.ts.map +1 -0
  213. package/dist/utils/linkedObject/index.d.ts +1 -0
  214. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  215. package/dist/utils/linkedObject/messageLinkedObject.d.ts +2 -0
  216. package/dist/utils/linkedObject/messageLinkedObject.d.ts.map +1 -0
  217. package/dist/utils/linkedObject/storyLinkedObject.d.ts.map +1 -1
  218. package/dist/utils/linkedObject/storyTargetLinkedObject.d.ts.map +1 -1
  219. package/dist/utils/marker.d.ts +0 -1
  220. package/dist/utils/marker.d.ts.map +1 -1
  221. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  222. package/dist/utils/tests/dummy/community.d.ts +1 -1
  223. package/dist/utils/tests/dummy/marker.d.ts +1 -0
  224. package/dist/utils/tests/dummy/marker.d.ts.map +1 -1
  225. package/package.json +1 -1
  226. package/src/@types/core/events.ts +4 -2
  227. package/src/@types/core/marker.ts +13 -1
  228. package/src/@types/core/model.ts +8 -2
  229. package/src/@types/core/payload.ts +26 -3
  230. package/src/@types/core/readReceipt.ts +23 -0
  231. package/src/@types/domains/channel.ts +11 -1
  232. package/src/@types/domains/client.ts +14 -6
  233. package/src/@types/domains/community.ts +2 -3
  234. package/src/@types/domains/group.ts +2 -2
  235. package/src/@types/domains/marker.ts +17 -0
  236. package/src/@types/domains/message.ts +6 -0
  237. package/src/@types/domains/story.ts +26 -4
  238. package/src/@types/domains/subChannel.ts +4 -0
  239. package/src/channelRepository/api/markAsRead.ts +3 -7
  240. package/src/channelRepository/channelModeration/api/index.ts +3 -0
  241. package/src/channelRepository/channelModeration/api/muteMembers.ts +47 -0
  242. package/src/channelRepository/channelModeration/api/unmuteMembers.ts +43 -0
  243. package/src/channelRepository/events/onChannelCreated.ts +1 -1
  244. package/src/channelRepository/events/onChannelDeleted.ts +9 -0
  245. package/src/channelRepository/events/onChannelJoined.ts +1 -1
  246. package/src/channelRepository/events/onChannelLeft.ts +10 -1
  247. package/src/channelRepository/events/onChannelMemberAdded.ts +1 -1
  248. package/src/channelRepository/events/onChannelMemberBanned.ts +17 -0
  249. package/src/channelRepository/events/onChannelMemberRemoved.ts +1 -1
  250. package/src/channelRepository/events/onChannelMemberRoleAdded.ts +1 -1
  251. package/src/channelRepository/events/onChannelMemberRoleRemoved.ts +1 -1
  252. package/src/channelRepository/events/onChannelMemberUnbanned.ts +1 -1
  253. package/src/channelRepository/events/onChannelMuted.ts +1 -1
  254. package/src/channelRepository/events/onChannelUpdated.ts +1 -1
  255. package/src/channelRepository/observers/getChannel.ts +12 -8
  256. package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +44 -11
  257. package/src/channelRepository/observers/getChannels/ChannelQueryStreamController.ts +4 -1
  258. package/src/channelRepository/utils/getChannelIsMentioned.ts +42 -0
  259. package/src/channelRepository/utils/getSubChannelsUnreadCount.ts +50 -0
  260. package/src/channelRepository/utils/prepareChannelPayload.ts +25 -4
  261. package/src/channelRepository/utils/tests/prepareChannelPayload.test.ts +6 -0
  262. package/src/client/api/accessTokenExpiryWatcher.ts +7 -2
  263. package/src/client/api/createClient.ts +11 -0
  264. package/src/client/api/enableUnreadCount.ts +24 -0
  265. package/src/client/api/index.ts +2 -0
  266. package/src/client/api/login.ts +7 -5
  267. package/src/client/api/markerSync.ts +2 -7
  268. package/src/client/api/renewal.ts +2 -5
  269. package/src/client/api/validateTexts.ts +23 -0
  270. package/src/client/api/validateUrls.ts +23 -0
  271. package/src/client/observers/getUserUnread.ts +38 -13
  272. package/src/client/utils/ReadReceiptSync/readReceiptSyncEngine.ts +259 -0
  273. package/src/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.ts +21 -0
  274. package/src/client/utils/markerSyncEngine.ts +30 -5
  275. package/src/client/utils/setClientToken.ts +0 -2
  276. package/src/client/utils/subscribeGlobalTopic.ts +2 -0
  277. package/src/commentRepository/api/deleteComment.ts +29 -12
  278. package/src/commentRepository/api/queryComments.ts +4 -2
  279. package/src/commentRepository/events/utils.ts +1 -2
  280. package/src/commentRepository/internalApi/queryComments.ts +4 -3
  281. package/src/commentRepository/utils/convertToInternalComment.ts +17 -0
  282. package/src/core/model/idResolvers.ts +3 -0
  283. package/src/core/model/index.ts +3 -0
  284. package/src/core/query/sorting.ts +8 -0
  285. package/src/core/subscription.ts +6 -0
  286. package/src/marker/api/getChannelMarkers.ts +2 -4
  287. package/src/marker/api/getMessageMarkers.ts +1 -5
  288. package/src/marker/api/getSubChannelMarkers.ts +12 -7
  289. package/src/marker/api/getUserMarker.ts +3 -10
  290. package/src/marker/api/getUserMessageFeedMarkers.ts +35 -0
  291. package/src/marker/api/tests/getSubChannelMarkers.test.ts +7 -0
  292. package/src/marker/events/onChannelMarkerFetched.ts +1 -1
  293. package/src/marker/events/onChannelMarkerUpdated.ts +1 -1
  294. package/src/marker/events/onFeedlMarkerFetched.ts +1 -1
  295. package/src/marker/events/onFeedlMarkerUpdated.ts +1 -1
  296. package/src/marker/events/onMessageMarked.ts +28 -12
  297. package/src/marker/events/onMessageMarkerFetched.ts +1 -1
  298. package/src/marker/events/onSubChannelMarkerFetched.ts +1 -1
  299. package/src/marker/events/onSubChannelMarkerUpdated.ts +1 -1
  300. package/src/marker/events/onUserFeedMarkerUpdated.ts +38 -0
  301. package/src/marker/events/onUserMarkerFetched.ts +1 -1
  302. package/src/marker/events/onUserMarkerSync.ts +3 -8
  303. package/src/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.ts +19 -0
  304. package/src/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.ts +13 -0
  305. package/src/marker/utils/deleteChannelUnreadByChannelId.ts +11 -0
  306. package/src/marker/utils/persistUnreadCountInfo.ts +47 -0
  307. package/src/marker/utils/reCalculateChannelUnreadInfo.ts +37 -0
  308. package/src/marker/utils/updateSubChannelUnreadFromMessage.ts +40 -0
  309. package/src/messagePreview/utils/updateMessagePreviewFromMessage.ts +2 -2
  310. package/src/messageRepository/api/createMessage.ts +6 -4
  311. package/src/messageRepository/api/deleteMessage.ts +6 -5
  312. package/src/messageRepository/api/editMessage.ts +5 -4
  313. package/src/messageRepository/api/getMessage.ts +2 -1
  314. package/src/messageRepository/api/getMessages.ts +2 -1
  315. package/src/messageRepository/api/markAsDelivered.ts +2 -6
  316. package/src/messageRepository/api/queryMessages.ts +8 -1
  317. package/src/messageRepository/api/softDeleteMessage.ts +6 -5
  318. package/src/messageRepository/api/updateMessage.ts +5 -4
  319. package/src/messageRepository/events/onMessageCreated.ts +12 -2
  320. package/src/messageRepository/events/onMessageDeleted.ts +4 -2
  321. package/src/messageRepository/events/onMessageFetched.ts +3 -1
  322. package/src/messageRepository/events/onMessageFlagCleared.ts +1 -1
  323. package/src/messageRepository/events/onMessageFlagged.ts +4 -2
  324. package/src/messageRepository/events/onMessageReactionAdded.ts +1 -1
  325. package/src/messageRepository/events/onMessageReactionRemoved.ts +1 -1
  326. package/src/messageRepository/events/onMessageUnflagged.ts +3 -1
  327. package/src/messageRepository/events/onMessageUpdated.ts +4 -2
  328. package/src/messageRepository/events/tests/events.test.ts +4 -1
  329. package/src/messageRepository/internalApi/getMessage.ts +101 -0
  330. package/src/messageRepository/internalApi/getMessages.ts +82 -0
  331. package/src/messageRepository/observers/getMessage.ts +10 -2
  332. package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +4 -2
  333. package/src/messageRepository/observers/getMessages/MessageQueryStreamController.ts +2 -2
  334. package/src/messageRepository/observers/observeMessage.ts +13 -4
  335. package/src/messageRepository/observers/observeMessages.ts +19 -6
  336. package/src/messageRepository/utils/getMessageReadCount.ts +5 -4
  337. package/src/messageRepository/utils/prepareMessagePayload.ts +6 -10
  338. package/src/reactionRepository/events/onReactionAdded.ts +1 -0
  339. package/src/reactionRepository/events/onReactorAdded.ts +13 -0
  340. package/src/reactionRepository/events/onReactorRemoved.ts +13 -0
  341. package/src/reactionRepository/utils/fetchReference.ts +1 -1
  342. package/src/reactionRepository/utils/prepareMessagePayloadForCache.ts +1 -1
  343. package/src/reactionRepository/utils/prepareReactionPayloadFormEvent.ts +68 -15
  344. package/src/storyRepository/api/createImageStory.ts +7 -0
  345. package/src/storyRepository/api/createVideoStory.ts +7 -0
  346. package/src/storyRepository/constants.ts +2 -0
  347. package/src/storyRepository/events/onStoryCreated.ts +2 -2
  348. package/src/storyRepository/events/onStoryDeleted.ts +2 -2
  349. package/src/storyRepository/events/onStoryReactionAdded.ts +11 -5
  350. package/src/storyRepository/events/onStoryReactionRemoved.ts +11 -5
  351. package/src/storyRepository/events/onStoryUpdated.ts +2 -2
  352. package/src/storyRepository/internalApi/createStory.ts +2 -2
  353. package/src/storyRepository/internalApi/deleteStory.ts +1 -1
  354. package/src/storyRepository/internalApi/getActiveStoriesByTarget.ts +2 -2
  355. package/src/storyRepository/internalApi/getStoryByStoryId.ts +2 -1
  356. package/src/storyRepository/observers/getActiveStoriesByTarget.ts +11 -5
  357. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +152 -0
  358. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.ts +73 -0
  359. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.ts +94 -0
  360. package/src/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.ts +32 -0
  361. package/src/storyRepository/observers/getGlobalStoryTargets/index.ts +1 -0
  362. package/src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts +0 -2
  363. package/src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts +2 -2
  364. package/src/storyRepository/observers/index.ts +1 -0
  365. package/src/storyRepository/utils/StoryComputedValue.ts +136 -0
  366. package/src/storyRepository/utils/convertRawToStory.ts +11 -4
  367. package/src/storyRepository/utils/convertStoryPayloadToRaw.ts +23 -0
  368. package/src/subChannelRepository/api/markAsReadBySegment.ts +35 -0
  369. package/src/subChannelRepository/api/readingAPI.ts +2 -7
  370. package/src/subChannelRepository/api/startReadingAPI.ts +2 -7
  371. package/src/subChannelRepository/api/stopReadingAPI.ts +2 -7
  372. package/src/subChannelRepository/events/onSubChannelCreated.ts +7 -1
  373. package/src/subChannelRepository/events/onSubChannelDeleted.ts +10 -1
  374. package/src/subChannelRepository/events/onSubChannelFetched.ts +1 -1
  375. package/src/subChannelRepository/index.ts +1 -0
  376. package/src/subChannelRepository/observers/getSubChannel.ts +10 -8
  377. package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts +9 -4
  378. package/src/subChannelRepository/utils/convertSubChannelFromRaw.ts +5 -2
  379. package/src/subChannelRepository/utils/{getSubChannelHasMentioned.ts → getSubChannelIsMentioned.ts} +19 -1
  380. package/src/subChannelRepository/utils/getSubChannelUnreadCount.ts +18 -0
  381. package/src/subChannelRepository/utils/markReadEngine.ts +2 -0
  382. package/src/subChannelRepository/utils/messageReceiptSync.ts +73 -0
  383. package/src/subChannelRepository/utils/persistOptimisticUnreadInfo.ts +23 -0
  384. package/src/utils/linkedObject/index.ts +2 -0
  385. package/src/utils/linkedObject/messageLinkedObject.ts +21 -0
  386. package/src/utils/linkedObject/storyLinkedObject.ts +2 -1
  387. package/src/utils/linkedObject/storyTargetLinkedObject.ts +26 -4
  388. package/src/utils/marker.ts +0 -6
  389. package/src/utils/tests/dummy/channel.ts +8 -0
  390. package/src/utils/tests/dummy/marker.ts +15 -1
  391. package/dist/channelRepository/utils/getChannelHasMentioned.d.ts +0 -7
  392. package/dist/channelRepository/utils/getChannelHasMentioned.d.ts.map +0 -1
  393. package/dist/channelRepository/utils/getChannelUnreadCount.d.ts +0 -2
  394. package/dist/channelRepository/utils/getChannelUnreadCount.d.ts.map +0 -1
  395. package/dist/storyRepository/utils/calculateHasUnseenFlag.d.ts +0 -6
  396. package/dist/storyRepository/utils/calculateHasUnseenFlag.d.ts.map +0 -1
  397. package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts +0 -2
  398. package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts.map +0 -1
  399. package/src/channelRepository/utils/getChannelHasMentioned.ts +0 -28
  400. package/src/channelRepository/utils/getChannelUnreadCount.ts +0 -27
  401. package/src/storyRepository/utils/calculateHasUnseenFlag.ts +0 -47
@@ -32,6 +32,8 @@ import { getChannelMessagePreviewWithUser } from '~/messagePreview/utils';
32
32
  import { isEqual } from '~/utils/isEqual';
33
33
  import { updateChannelCache } from '../utils/updateChannelCache';
34
34
  import { onChannelMarkerUpdated } from '~/marker/events/onChannelMarkerUpdated';
35
+ import { onSubChannelCreated } from '~/subChannelRepository';
36
+ import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
35
37
 
36
38
  /* begin_public_function
37
39
  id: channel.get
@@ -104,8 +106,8 @@ export const getChannel = (
104
106
  convertEventPayload(onChannelMarkerFetched, 'entityId', 'channel'),
105
107
  convertEventPayload(onChannelMarkerUpdated, 'entityId', 'channel'),
106
108
  convertEventPayload(
107
- (callback: Amity.Listener<Amity.Message>) => {
108
- const updateMessagePreview = async (message: Amity.Message) => {
109
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
110
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
109
111
  const messagePreviewSetting = await client.getMessagePreviewSetting(false);
110
112
  if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
111
113
 
@@ -129,8 +131,8 @@ export const getChannel = (
129
131
  'channel',
130
132
  ),
131
133
  convertEventPayload(
132
- (callback: Amity.Listener<Amity.Message>) => {
133
- const updateMessagePreview = async (message: Amity.Message) => {
134
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
135
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
134
136
  const messagePreviewSetting = await client.getMessagePreviewSetting(false);
135
137
  if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
136
138
 
@@ -154,8 +156,8 @@ export const getChannel = (
154
156
  'channel',
155
157
  ),
156
158
  convertEventPayload(
157
- (callback: Amity.Listener<Amity.Message>) => {
158
- const updateMessagePreview = async (message: Amity.Message) => {
159
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
160
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
159
161
  const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
160
162
  if (!channel || channel.messagePreviewId !== message.messageId) return;
161
163
 
@@ -174,8 +176,8 @@ export const getChannel = (
174
176
  'channel',
175
177
  ),
176
178
  convertEventPayload(
177
- (callback: Amity.Listener<Amity.Message>) => {
178
- const updateMessagePreview = async (message: Amity.Message) => {
179
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
180
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
179
181
  const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
180
182
  if (!channel || channel.messagePreviewId !== message.messageId) return;
181
183
 
@@ -262,6 +264,8 @@ export const getChannel = (
262
264
  'channelId',
263
265
  'channel',
264
266
  ),
267
+ convertEventPayload(onSubChannelCreated, 'channelId', 'channel'),
268
+ convertEventPayload(onUserFeedMarkerUpdated, 'entityId', 'channel'),
265
269
  ],
266
270
  {
267
271
  forceDispatch: true,
@@ -46,6 +46,8 @@ import { getActiveClient } from '~/client';
46
46
  import { prepareChannelPayload } from '~/channelRepository/utils';
47
47
  import { ChannelPaginationNoPageController } from './ChannelPagnationNoPageController';
48
48
  import { PaginationController } from '~/core/liveCollection/PaginationController';
49
+ import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
50
+ import { onSubChannelCreated } from '~/subChannelRepository';
49
51
 
50
52
  export class ChannelLiveCollectionController extends LiveCollectionController<
51
53
  'channel',
@@ -225,7 +227,7 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
225
227
  {
226
228
  // TODO: merge this code to another onMessageCreated in this file
227
229
  fn: convertEventPayload(
228
- (callback: Amity.Listener<Amity.Message>) => {
230
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
229
231
  return onMessageCreatedMqtt(message => {
230
232
  const cacheData = pullFromCache<Amity.Channel>([
231
233
  'channel',
@@ -250,7 +252,7 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
250
252
  {
251
253
  // TODO: merge this code to another onMessageCreated in this file
252
254
  fn: convertEventPayload(
253
- (callback: Amity.Listener<Amity.Message>) => {
255
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
254
256
  return onMessageCreatedLocal(message => {
255
257
  const cacheData = pullFromCache<Amity.Channel>([
256
258
  'channel',
@@ -276,7 +278,30 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
276
278
  { fn: onChannelUpdated, action: 'onUpdate' },
277
279
  { fn: onChannelMuted, action: 'onMute' },
278
280
  { fn: onChannelJoined, action: 'onJoin' },
279
- { fn: onChannelLeft, action: 'onLeft' },
281
+ {
282
+ fn: (reactor: Amity.Listener<Amity.InternalChannel>) => {
283
+ const callback = (
284
+ channel: Amity.InternalChannel,
285
+ member: Amity.Membership<'channel'>,
286
+ ) => {
287
+ const { userId } = getActiveClient();
288
+ // if query for channel member and user is not a member, remove channelId from curren collection
289
+ if (this.query.membership === 'member' && userId === member.userId) {
290
+ const collection = pullFromCache<Amity.ChannelLiveCollectionCache>(
291
+ this.cacheKey,
292
+ )?.data;
293
+
294
+ pushToCache(this.cacheKey, {
295
+ ...collection,
296
+ data: collection?.data.filter(c => c !== channel.channelId) ?? [],
297
+ });
298
+ }
299
+ return reactor(channel);
300
+ };
301
+ return onChannelLeft(callback);
302
+ },
303
+ action: 'onLeft',
304
+ },
280
305
  { fn: onChannelMemberAdded, action: 'onMemberAdded' },
281
306
  { fn: onChannelMemberRemoved, action: 'onMemberRemoved' },
282
307
  {
@@ -289,8 +314,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
289
314
  },
290
315
  {
291
316
  fn: convertEventPayload(
292
- (callback: Amity.Listener<Amity.Message>) => {
293
- const updateMessagePreview = async (message: Amity.Message) => {
317
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
318
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
294
319
  const messagePreviewSetting =
295
320
  await ChannelLiveCollectionController.getMessagePreviewSetting();
296
321
  if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
@@ -323,8 +348,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
323
348
  },
324
349
  {
325
350
  fn: convertEventPayload(
326
- (callback: Amity.Listener<Amity.Message>) => {
327
- const updateMessagePreview = async (message: Amity.Message) => {
351
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
352
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
328
353
  const messagePreviewSetting =
329
354
  await ChannelLiveCollectionController.getMessagePreviewSetting();
330
355
  if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
@@ -357,8 +382,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
357
382
  },
358
383
  {
359
384
  fn: convertEventPayload(
360
- (callback: Amity.Listener<Amity.Message>) => {
361
- const updateMessagePreview = async (message: Amity.Message) => {
385
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
386
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
362
387
  const messagePreviewSetting =
363
388
  await ChannelLiveCollectionController.getMessagePreviewSetting();
364
389
  if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
@@ -379,8 +404,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
379
404
  },
380
405
  {
381
406
  fn: convertEventPayload(
382
- (callback: Amity.Listener<Amity.Message>) => {
383
- const updateMessagePreview = async (message: Amity.Message) => {
407
+ (callback: Amity.Listener<Amity.InternalMessage>) => {
408
+ const updateMessagePreview = async (message: Amity.InternalMessage) => {
384
409
  const messagePreviewSetting =
385
410
  await ChannelLiveCollectionController.getMessagePreviewSetting();
386
411
 
@@ -464,6 +489,14 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
464
489
  ),
465
490
  action: 'onUpdate',
466
491
  },
492
+ {
493
+ fn: convertEventPayload(onUserFeedMarkerUpdated, 'entityId', 'channel'),
494
+ action: 'onUpdate',
495
+ },
496
+ {
497
+ fn: convertEventPayload(onSubChannelCreated, 'channelId', 'channel'),
498
+ action: 'onUpdate',
499
+ },
467
500
  ];
468
501
 
469
502
  if (this.paginationController instanceof PaginationController) {
@@ -69,7 +69,10 @@ export class ChannelQueryStreamController extends QueryStreamController<
69
69
  const collection = pullFromCache<Amity.ChannelLiveCollectionCache>(this.cacheKey)?.data;
70
70
  if (!collection) return;
71
71
 
72
- if (this.paginationController instanceof ChannelPaginationController) {
72
+ if (
73
+ this.paginationController instanceof ChannelPaginationController &&
74
+ action === 'onCreate'
75
+ ) {
73
76
  collection.data = [...new Set([payload.channelId, ...collection.data])];
74
77
  pushToCache(this.cacheKey, collection);
75
78
  }
@@ -0,0 +1,42 @@
1
+ import { pullFromCache } from '~/cache/api/pullFromCache';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { getActiveUser } from '~/client/api/activeUser';
4
+ import { getResolver } from '~/core/model';
5
+
6
+ const getCachedMarker = (entityId: string) => {
7
+ const key = {
8
+ entityId,
9
+ userId: getActiveUser()._id,
10
+ };
11
+
12
+ return pullFromCache<Amity.ChannelMarker>([
13
+ 'channelMarker',
14
+ 'get',
15
+ getResolver('channelMarker')(key),
16
+ ])?.data;
17
+ };
18
+
19
+ const getUnreadInfoCached = (channelId: Amity.RawChannel['channelId']) => {
20
+ return pullFromCache<Amity.ChannelUnreadInfo>(['channelUnreadInfo', 'get', channelId])?.data;
21
+ };
22
+
23
+ /**
24
+ * The function use to get value of hasMentioned or isMentioned field.
25
+ * function will get the value from marker params first, if there is no hasMentioned field, will look in to the cache.
26
+ *
27
+ * If consistent mode is enabled, the function will return the value from the channelUnreadCountInfo cache.
28
+ * If not, the function will return the value from the channelMarker cache.
29
+ * If not found in the both cache, use `false` as defaul value.
30
+ */
31
+
32
+ export const getChannelIsMentioned = (channel: Amity.RawChannel, marker?: Amity.ChannelMarker) => {
33
+ const client = getActiveClient();
34
+
35
+ if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
36
+ return getUnreadInfoCached(channel.channelId)?.isMentioned ?? false;
37
+ }
38
+
39
+ return marker?.hasMentioned !== undefined
40
+ ? marker?.hasMentioned
41
+ : getCachedMarker(channel.channelId)?.hasMentioned ?? false;
42
+ };
@@ -0,0 +1,50 @@
1
+ import { pullFromCache } from '~/cache/api/pullFromCache';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { getActiveUser } from '~/client/api/activeUser';
4
+ import { getResolver } from '~/core/model';
5
+
6
+ const getCachedMarker = (entityId: string) => {
7
+ const key = {
8
+ entityId,
9
+ userId: getActiveUser()._id,
10
+ };
11
+
12
+ return pullFromCache<Amity.ChannelMarker>([
13
+ 'channelMarker',
14
+ 'get',
15
+ getResolver('channelMarker')(key),
16
+ ])?.data;
17
+ };
18
+
19
+ const getUnreadInfoCached = (channelId: Amity.RawChannel['channelId']) => {
20
+ return pullFromCache<Amity.ChannelUnreadInfo>(['channelUnreadInfo', 'get', channelId])?.data;
21
+ };
22
+
23
+ /**
24
+ * The function use to get value of unreadCount field.
25
+ * function will get the value from marker params first, if there is no hasMentioned field, will look in to the cache.
26
+ *
27
+ * If consistent mode is enabled, the function will return the value from the channelUnreadCountInfo cache.
28
+ * If not, the function will return the value from the channelMarker cache.
29
+ * If not found in the both cache, use `0` as defaul value.
30
+ */
31
+
32
+ export const getSubChannelsUnreadCount = (
33
+ channel: Amity.RawChannel,
34
+ marker?: Amity.ChannelMarker,
35
+ ) => {
36
+ const client = getActiveClient();
37
+
38
+ if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
39
+ return getUnreadInfoCached(channel.channelId)?.unreadCount ?? 0;
40
+ }
41
+
42
+ if (marker?.isDeleted) {
43
+ // NOTE: This is a temporary solution to handle the channel marker when the user is forced to
44
+ // leave the channel because currently backend can't handle this, so every time a user is banned
45
+ // from a channel or the channel is deleted the channel's unread count will reset to zero
46
+ return 0;
47
+ }
48
+
49
+ return marker?.unreadCount ?? getCachedMarker(channel.channelId)?.unreadCount ?? 0;
50
+ };
@@ -2,11 +2,13 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
2
2
  import { withUsers } from '~/group/utils/withUser';
3
3
  import { getChannelMarkers } from '~/marker/api/getChannelMarkers';
4
4
 
5
- import { getChannelUnreadCount } from './getChannelUnreadCount';
6
- import { getChannelHasMentioned } from './getChannelHasMentioned';
7
5
  import { updateChannelMessagePreviewCache } from '~/messagePreview/utils';
8
6
  import { getActiveClient } from '~/client/api/activeClient';
9
7
  import { pullFromCache } from '~/cache/api/pullFromCache';
8
+ import { getSubChannelsUnreadCount } from './getSubChannelsUnreadCount';
9
+ import { getChannelIsMentioned } from './getChannelIsMentioned';
10
+ import { getUserMessageFeedMakers } from '~/marker/api/getUserMessageFeedMarkers';
11
+ import { persistUnreadCountInfo } from '~/marker/utils/persistUnreadCountInfo';
10
12
 
11
13
  export const MARKER_INCLUDED_CHANNEL_TYPE = ['broadcast', 'conversation', 'community'];
12
14
  export const isUnreadCountSupport = ({ type }: Pick<Amity.RawChannel, 'type'>) =>
@@ -30,10 +32,16 @@ export function convertFromRaw(
30
32
 
31
33
  return {
32
34
  get unreadCount() {
33
- return getChannelUnreadCount(channel);
35
+ return getSubChannelsUnreadCount(channel);
34
36
  },
35
37
  get hasMentioned() {
36
- return getChannelHasMentioned(channel);
38
+ return getChannelIsMentioned(channel);
39
+ },
40
+ get isMentioned() {
41
+ return getChannelIsMentioned(channel);
42
+ },
43
+ get subChannelsUnreadCount() {
44
+ return getSubChannelsUnreadCount(channel);
37
45
  },
38
46
  ...channel,
39
47
  defaultSubChannelId: channel._id,
@@ -60,6 +68,19 @@ export const prepareChannelPayload = async (
60
68
  const client = getActiveClient();
61
69
  const networkPreviewSetting = await client.getMessagePreviewSetting(false);
62
70
 
71
+ // if consistent mode is enabled, persist the unread count info to the cache
72
+ if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
73
+ const queryPayload = await getUserMessageFeedMakers(
74
+ rawPayload.channels.map(({ channelId }) => channelId),
75
+ );
76
+
77
+ const { feedMarkers, userFeedMarkers } = queryPayload;
78
+ persistUnreadCountInfo({
79
+ feedMarkers,
80
+ userFeedMarkers,
81
+ });
82
+ }
83
+
63
84
  if (
64
85
  options.isMessagePreviewUpdated &&
65
86
  networkPreviewSetting !== Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW &&
@@ -61,6 +61,8 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
61
61
  unreadCount: channelMarker1.unreadCount,
62
62
  hasMentioned: channelMarker1.hasMentioned,
63
63
  messagePreviewId: undefined,
64
+ subChannelsUnreadCount: channelMarker1.unreadCount,
65
+ isMentioned: channelMarker1.hasMentioned,
64
66
  },
65
67
  {
66
68
  ...liveChannel,
@@ -69,6 +71,8 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
69
71
  unreadCount: 0,
70
72
  hasMentioned: false,
71
73
  messagePreviewId: undefined,
74
+ subChannelsUnreadCount: 0,
75
+ isMentioned: false,
72
76
  },
73
77
  {
74
78
  ...conversationChannel,
@@ -76,7 +80,9 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
76
80
  isUnreadCountSupport: true,
77
81
  unreadCount: channelMarker2.unreadCount,
78
82
  hasMentioned: channelMarker2.hasMentioned,
83
+ isMentioned: channelMarker2.hasMentioned,
79
84
  messagePreviewId: undefined,
85
+ subChannelsUnreadCount: channelMarker2.unreadCount,
80
86
  },
81
87
  ],
82
88
  channelUsers: [channelUser],
@@ -3,6 +3,7 @@ import { scheduleTask } from '~/core/microtasks';
3
3
  import { MINUTE, ACCESS_TOKEN_WATCHER_INTERVAL } from '~/utils/constants';
4
4
 
5
5
  import { renewal } from './renewal';
6
+ import { getActiveClient } from './activeClient';
6
7
 
7
8
  const ABOUT_TO_EXPIRE_THRESHOLD = 80 / 100;
8
9
  const COMPENSATED_DELAY = 5 * MINUTE;
@@ -50,11 +51,15 @@ export const isAboutToExpire = (params: {
50
51
  * @category private
51
52
  */
52
53
  export const accessTokenExpiryWatcher = (
53
- expiresAt: Amity.Tokens['expiresAt'],
54
- issuedAt: Amity.Tokens['issuedAt'],
55
54
  sessionHandler: Amity.SessionHandler,
56
55
  ): Amity.Unsubscriber => {
57
56
  const interval: ReturnType<typeof setInterval> = setInterval(() => {
57
+ const client = getActiveClient();
58
+
59
+ if (!client.token) return;
60
+
61
+ const { issuedAt, expiresAt } = client.token;
62
+
58
63
  if (isExpired(expiresAt)) {
59
64
  /*
60
65
  * the event handler will take care of updating session state
@@ -14,10 +14,13 @@ import { createEventEmitter } from '~/core/events';
14
14
  import { getMessagePreviewSetting } from '~/client/utils/messagePreviewEngine';
15
15
  import { getSocialSettings } from '~/client/api/getSocialSettings';
16
16
  import { hasPermission } from '~/client/utils/hasPermission';
17
+ import { validateUrls } from './validateUrls';
18
+ import { validateTexts } from './validateTexts';
17
19
  import { getActiveClient, setActiveClient } from './activeClient';
18
20
  import { getFeedSettings } from './getFeedSettings';
19
21
 
20
22
  import { accessTokenExpiryWatcher } from './accessTokenExpiryWatcher';
23
+ import { getMarkerSyncConsistentMode } from '../utils/markerSyncEngine';
21
24
 
22
25
  const DEFAULT_DEBUG_SESSION = 'amity';
23
26
 
@@ -72,6 +75,8 @@ export const createClient = (
72
75
  const sessionState = Amity.SessionStates.NOT_LOGGED_IN;
73
76
  const sessionHandler = undefined;
74
77
 
78
+ const isUnreadCountEnabled = false;
79
+
75
80
  const client = {
76
81
  version: `${VERSION}`,
77
82
  apiKey,
@@ -98,11 +103,17 @@ export const createClient = (
98
103
  sessionHandler,
99
104
 
100
105
  hasPermission,
106
+ validateUrls,
107
+ validateTexts,
101
108
  getFeedSettings,
102
109
  getSocialSettings,
103
110
  getMessagePreviewSetting,
104
111
 
105
112
  use: () => setActiveClient(client),
113
+
114
+ isUnreadCountEnabled,
115
+
116
+ getMarkerSyncConsistentMode,
106
117
  };
107
118
 
108
119
  try {
@@ -0,0 +1,24 @@
1
+ import { ASCError } from '~/core/errors';
2
+ import { getActiveClient } from './activeClient';
3
+
4
+ export const enableUnreadCount = () => {
5
+ const client = getActiveClient();
6
+
7
+ client.log('client/api/isUnreadCountEnabled', client.isUnreadCountEnabled);
8
+
9
+ if (!client) {
10
+ throw new ASCError(
11
+ 'There is no active client',
12
+ Amity.ClientError.UNKNOWN_ERROR,
13
+ Amity.ErrorLevel.FATAL,
14
+ );
15
+ }
16
+
17
+ if (client.isUnreadCountEnabled) return false;
18
+
19
+ client.isUnreadCountEnabled = true;
20
+
21
+ client.emitter.emit('unreadCountEnabled', true);
22
+
23
+ return true;
24
+ };
@@ -13,3 +13,5 @@ export * from './getFeedSettings';
13
13
  export * from './renewal';
14
14
 
15
15
  export * from './markerSync';
16
+
17
+ export * from './enableUnreadCount';
@@ -10,6 +10,7 @@ import { markReadEngineOnLoginHandler } from '~/subChannelRepository/utils/markR
10
10
  import { onUserDeleted } from '~/userRepository/events/onUserDeleted';
11
11
 
12
12
  import analyticsEngineOnLoginHandler from '~/analytic/utils/analyticsEngineOnLoginHandler';
13
+ import readReceiptSyncEngineOnLoginHandler from '../utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler';
13
14
  import { logout } from './logout';
14
15
 
15
16
  import { getActiveClient } from './activeClient';
@@ -25,6 +26,7 @@ import { onTokenTerminated } from '../events/onTokenTerminated';
25
26
  import { setClientToken } from '../utils/setClientToken';
26
27
  import { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';
27
28
  import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
29
+ import { startMarkerSync } from '../utils/markerSyncEngine';
28
30
  import { ASCError } from '~/core/errors';
29
31
 
30
32
  /*
@@ -130,11 +132,7 @@ export const login = async (
130
132
  * Cannot push to subscriptions as watcher needs to continue working even if
131
133
  * token expires
132
134
  */
133
- unsubWatcher = client.accessTokenExpiryWatcher(
134
- client.token?.expiresAt!,
135
- client.token?.issuedAt!,
136
- sessionHandler!,
137
- );
135
+ unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
138
136
 
139
137
  setActiveUser(user);
140
138
  } catch (error) {
@@ -199,7 +197,11 @@ export const login = async (
199
197
 
200
198
  markReadEngineOnLoginHandler(),
201
199
  analyticsEngineOnLoginHandler(),
200
+ readReceiptSyncEngineOnLoginHandler(),
202
201
  );
202
+
203
+ const markerSyncUnsubscriber = await startMarkerSync();
204
+ subscriptions.push(markerSyncUnsubscriber);
203
205
  }
204
206
 
205
207
  return true;
@@ -2,11 +2,7 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
2
2
  import { fireEvent } from '~/core/events';
3
3
 
4
4
  import { getActiveClient } from './activeClient';
5
- import {
6
- convertChannelMarkerResponse,
7
- convertSubChannelMarkerResponse,
8
- convertUserMarkerResponse,
9
- } from '~/utils/marker';
5
+ import { convertChannelMarkerResponse, convertSubChannelMarkerResponse } from '~/utils/marker';
10
6
 
11
7
  /**
12
8
  * ```js
@@ -43,10 +39,9 @@ export const markerSync = async (
43
39
  userEntityMarkers: userEntityMarkersPayload,
44
40
  userFeedMarkers: userFeedMarkersPayload,
45
41
  feedMarkers,
46
- userMarkers: userMarkersPayload,
42
+ userMarkers,
47
43
  } = payload;
48
44
 
49
- const userMarkers = convertUserMarkerResponse(userMarkersPayload);
50
45
  const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
51
46
  const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload);
52
47
 
@@ -35,14 +35,11 @@ export const renewal = (): Amity.AccessTokenRenewal => {
35
35
 
36
36
  const params = { userId, displayName, authToken, deviceId };
37
37
 
38
- if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED) {
39
- // sessionHandler will never be empty when renewal is instantiatied
40
- await login(params, client.sessionHandler!);
38
+ if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED && client.sessionHandler) {
39
+ await login(params, client.sessionHandler);
41
40
  } else {
42
41
  // about to expire
43
42
 
44
- // @ts-ignore: in that particular case, typing can be
45
- // ignored since we enforce default values just before.
46
43
  await refreshToken(params);
47
44
  }
48
45
 
@@ -0,0 +1,23 @@
1
+ import { getActiveClient } from './activeClient';
2
+
3
+ /**
4
+ * Validate a list of texts
5
+ * @param texts array of strings to validate (max 10 items)
6
+ *
7
+ * @category Client API
8
+ */
9
+ export const validateTexts = async (texts: string[]): Promise<boolean> => {
10
+ const client = getActiveClient();
11
+ client.log('channel/markerSync');
12
+
13
+ if (texts.length === 0) return false;
14
+
15
+ const { data: payload } = await client.http.post<{ success: boolean }>(
16
+ '/api/v3/blocklists/verify',
17
+ {
18
+ data: texts,
19
+ },
20
+ );
21
+
22
+ return payload.success;
23
+ };
@@ -0,0 +1,23 @@
1
+ import { getActiveClient } from './activeClient';
2
+
3
+ /**
4
+ * Validate a list of urls
5
+ * @param urls array of strings to validate (max 10 items)
6
+ *
7
+ * @category Client API
8
+ */
9
+ export const validateUrls = async (urls: string[]): Promise<boolean> => {
10
+ const client = getActiveClient();
11
+ client.log('channel/markerSync');
12
+
13
+ if (urls.length === 0) return false;
14
+
15
+ const { data: payload } = await client.http.post<{ success: boolean }>(
16
+ '/api/v3/allowlists/verify',
17
+ {
18
+ data: urls,
19
+ },
20
+ );
21
+
22
+ return payload.success;
23
+ };