@amityco/ts-sdk 0.0.1-beta.42.2 → 0.0.1-beta.43

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 (308) hide show
  1. package/dist/@types/core/events.d.ts +11 -1
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/marker.d.ts +37 -0
  4. package/dist/@types/core/marker.d.ts.map +1 -0
  5. package/dist/@types/core/model.d.ts +10 -0
  6. package/dist/@types/core/model.d.ts.map +1 -1
  7. package/dist/@types/core/payload.d.ts +44 -0
  8. package/dist/@types/core/payload.d.ts.map +1 -1
  9. package/dist/@types/domains/channel.d.ts +5 -8
  10. package/dist/@types/domains/channel.d.ts.map +1 -1
  11. package/dist/@types/domains/client.d.ts +1 -0
  12. package/dist/@types/domains/client.d.ts.map +1 -1
  13. package/dist/@types/domains/marker.d.ts +15 -0
  14. package/dist/@types/domains/marker.d.ts.map +1 -0
  15. package/dist/@types/domains/message.d.ts +3 -0
  16. package/dist/@types/domains/message.d.ts.map +1 -1
  17. package/dist/@types/domains/partials.d.ts +3 -0
  18. package/dist/@types/domains/partials.d.ts.map +1 -1
  19. package/dist/@types/domains/subChannel.d.ts +2 -0
  20. package/dist/@types/domains/subChannel.d.ts.map +1 -1
  21. package/dist/channel/api/getChannels.d.ts.map +1 -1
  22. package/dist/channel/api/index.d.ts +0 -2
  23. package/dist/channel/api/index.d.ts.map +1 -1
  24. package/dist/channel/events/onChannelUpdated.d.ts.map +1 -1
  25. package/dist/channel/utils/index.d.ts +1 -2
  26. package/dist/channel/utils/index.d.ts.map +1 -1
  27. package/dist/channel/utils/prepareChannelPayload.d.ts +6 -0
  28. package/dist/channel/utils/prepareChannelPayload.d.ts.map +1 -0
  29. package/dist/channel/utils/tests/prepareChannelPayload.test.d.ts +5 -1
  30. package/dist/channel/utils/tests/prepareChannelPayload.test.d.ts.map +1 -1
  31. package/dist/client/api/activeUser.d.ts +2 -2
  32. package/dist/client/api/activeUser.d.ts.map +1 -1
  33. package/dist/client/api/connectClient.d.ts.map +1 -1
  34. package/dist/client/api/index.d.ts +2 -0
  35. package/dist/client/api/index.d.ts.map +1 -1
  36. package/dist/client/api/markerSync.d.ts +21 -0
  37. package/dist/client/api/markerSync.d.ts.map +1 -0
  38. package/dist/client/observers/getTotalUnreadCount.d.ts +18 -0
  39. package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -0
  40. package/dist/client/observers/index.d.ts +2 -0
  41. package/dist/client/observers/index.d.ts.map +1 -0
  42. package/dist/client/observers/tests/getTotalUnreadCount.test.d.ts +2 -0
  43. package/dist/client/observers/tests/getTotalUnreadCount.test.d.ts.map +1 -0
  44. package/dist/client/utils/index.d.ts +2 -0
  45. package/dist/client/utils/index.d.ts.map +1 -0
  46. package/dist/client/utils/markerSyncEngine.d.ts +46 -0
  47. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -0
  48. package/dist/comment/api/getComments.d.ts.map +1 -1
  49. package/dist/core/events.d.ts +3 -3
  50. package/dist/core/events.d.ts.map +1 -1
  51. package/dist/core/model/idResolvers.d.ts.map +1 -1
  52. package/dist/core/model/index.d.ts.map +1 -1
  53. package/dist/index.cjs.js +1931 -1159
  54. package/dist/index.d.ts +5 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.esm.js +1901 -1160
  57. package/dist/index.umd.js +4 -4
  58. package/dist/marker/api/getChannelMarkers.d.ts +18 -0
  59. package/dist/marker/api/getChannelMarkers.d.ts.map +1 -0
  60. package/dist/marker/api/getMessageMarkers.d.ts +18 -0
  61. package/dist/marker/api/getMessageMarkers.d.ts.map +1 -0
  62. package/dist/marker/api/getSubChannelMarkers.d.ts +18 -0
  63. package/dist/marker/api/getSubChannelMarkers.d.ts.map +1 -0
  64. package/dist/marker/api/getUserMarker.d.ts +8 -0
  65. package/dist/marker/api/getUserMarker.d.ts.map +1 -0
  66. package/dist/marker/api/index.d.ts +5 -0
  67. package/dist/marker/api/index.d.ts.map +1 -0
  68. package/dist/marker/api/tests/getChannelMarkers.test.d.ts +2 -0
  69. package/dist/marker/api/tests/getChannelMarkers.test.d.ts.map +1 -0
  70. package/dist/marker/api/tests/getMessageMarkers.test.d.ts +2 -0
  71. package/dist/marker/api/tests/getMessageMarkers.test.d.ts.map +1 -0
  72. package/dist/marker/api/tests/getSubChannelMarkers.test.d.ts +2 -0
  73. package/dist/marker/api/tests/getSubChannelMarkers.test.d.ts.map +1 -0
  74. package/dist/marker/events/index.d.ts +7 -0
  75. package/dist/marker/events/index.d.ts.map +1 -0
  76. package/dist/marker/events/onChannelMarkerFetched.d.ts +17 -0
  77. package/dist/marker/events/onChannelMarkerFetched.d.ts.map +1 -0
  78. package/dist/marker/events/onFeedlMarkerFetched.d.ts +17 -0
  79. package/dist/marker/events/onFeedlMarkerFetched.d.ts.map +1 -0
  80. package/dist/marker/events/onMessageMarkerFetched.d.ts +17 -0
  81. package/dist/marker/events/onMessageMarkerFetched.d.ts.map +1 -0
  82. package/dist/marker/events/onSubChannelMarkerFetched.d.ts +17 -0
  83. package/dist/marker/events/onSubChannelMarkerFetched.d.ts.map +1 -0
  84. package/dist/marker/events/onSubChannelMarkerUpdated.d.ts +17 -0
  85. package/dist/marker/events/onSubChannelMarkerUpdated.d.ts.map +1 -0
  86. package/dist/marker/events/onUserMarkerFetched.d.ts +17 -0
  87. package/dist/marker/events/onUserMarkerFetched.d.ts.map +1 -0
  88. package/dist/message/api/getMessage.d.ts.map +1 -1
  89. package/dist/message/api/getMessages.d.ts.map +1 -1
  90. package/dist/message/api/index.d.ts +1 -0
  91. package/dist/message/api/index.d.ts.map +1 -1
  92. package/dist/message/api/markAsDelivered.d.ts +17 -0
  93. package/dist/message/api/markAsDelivered.d.ts.map +1 -0
  94. package/dist/message/api/queryMessages.d.ts.map +1 -1
  95. package/dist/message/api/tests/markAsDelivered.test.d.ts +2 -0
  96. package/dist/message/api/tests/markAsDelivered.test.d.ts.map +1 -0
  97. package/dist/message/api/updateMessage.d.ts.map +1 -1
  98. package/dist/message/events/index.d.ts +1 -0
  99. package/dist/message/events/index.d.ts.map +1 -1
  100. package/dist/message/events/onMessageCreated.d.ts +2 -1
  101. package/dist/message/events/onMessageCreated.d.ts.map +1 -1
  102. package/dist/message/events/onMessageUpdated.d.ts.map +1 -1
  103. package/dist/message/utils/index.d.ts +1 -18
  104. package/dist/message/utils/index.d.ts.map +1 -1
  105. package/dist/message/utils/prepareMessagePayload.d.ts +16 -0
  106. package/dist/message/utils/prepareMessagePayload.d.ts.map +1 -0
  107. package/dist/post/api/getPosts.d.ts.map +1 -1
  108. package/dist/post/api/tests/getPosts.test.d.ts +2 -0
  109. package/dist/post/api/tests/getPosts.test.d.ts.map +1 -0
  110. package/dist/report/api/createReport.d.ts.map +1 -1
  111. package/dist/report/api/deleteReport.d.ts.map +1 -1
  112. package/dist/subChannel/api/getSubChannels.d.ts.map +1 -1
  113. package/dist/subChannel/api/index.d.ts +2 -0
  114. package/dist/subChannel/api/index.d.ts.map +1 -1
  115. package/dist/subChannel/api/startReadingAPI.d.ts +17 -0
  116. package/dist/subChannel/api/startReadingAPI.d.ts.map +1 -0
  117. package/dist/subChannel/api/stopReadingAPI.d.ts +17 -0
  118. package/dist/subChannel/api/stopReadingAPI.d.ts.map +1 -0
  119. package/dist/subChannel/events/onSubChannelUpdated.d.ts +1 -1
  120. package/dist/subChannel/events/onSubChannelUpdated.d.ts.map +1 -1
  121. package/dist/subChannel/observers/liveSubChannel.d.ts.map +1 -1
  122. package/dist/subChannel/utils/index.d.ts +2 -7
  123. package/dist/subChannel/utils/index.d.ts.map +1 -1
  124. package/dist/subChannel/utils/markReadEngine.d.ts +33 -0
  125. package/dist/subChannel/utils/markReadEngine.d.ts.map +1 -0
  126. package/dist/subChannel/utils/prepareSubChannelPayload.d.ts +15 -0
  127. package/dist/subChannel/utils/prepareSubChannelPayload.d.ts.map +1 -0
  128. package/dist/utils/liveObject.d.ts +1 -1
  129. package/dist/utils/liveObject.d.ts.map +1 -1
  130. package/dist/utils/tests/client.d.ts +1 -0
  131. package/dist/utils/tests/client.d.ts.map +1 -1
  132. package/dist/utils/tests/dummy/channel.d.ts +4 -0
  133. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  134. package/dist/utils/tests/dummy/comment.d.ts.map +1 -1
  135. package/dist/utils/tests/dummy/index.d.ts +1 -0
  136. package/dist/utils/tests/dummy/index.d.ts.map +1 -1
  137. package/dist/utils/tests/dummy/marker.d.ts +6 -0
  138. package/dist/utils/tests/dummy/marker.d.ts.map +1 -0
  139. package/dist/utils/tests/dummy/message.d.ts +2 -0
  140. package/dist/utils/tests/dummy/message.d.ts.map +1 -1
  141. package/dist/utils/tests/dummy/subChannel.d.ts +1 -0
  142. package/dist/utils/tests/dummy/subChannel.d.ts.map +1 -1
  143. package/dist/utils/tests/utils.d.ts.map +1 -1
  144. package/package.json +1 -1
  145. package/src/@types/core/events.ts +13 -1
  146. package/src/@types/core/marker.ts +42 -0
  147. package/src/@types/core/model.ts +12 -0
  148. package/src/@types/core/payload.ts +52 -0
  149. package/src/@types/domains/channel.ts +5 -16
  150. package/src/@types/domains/client.ts +2 -0
  151. package/src/@types/domains/marker.ts +15 -0
  152. package/src/@types/domains/message.ts +3 -0
  153. package/src/@types/domains/partials.ts +4 -0
  154. package/src/@types/domains/subChannel.ts +2 -0
  155. package/src/channel/api/addChannelMembers.ts +1 -1
  156. package/src/channel/api/addChannelMembersRole.ts +1 -1
  157. package/src/channel/api/banChannelMembers.ts +1 -1
  158. package/src/channel/api/createChannel.ts +1 -1
  159. package/src/channel/api/getChannel.ts +1 -1
  160. package/src/channel/api/getChannels.ts +21 -5
  161. package/src/channel/api/index.ts +0 -3
  162. package/src/channel/api/joinChannel.ts +1 -1
  163. package/src/channel/api/leaveChannel.ts +1 -1
  164. package/src/channel/api/queryChannelMembers.ts +1 -1
  165. package/src/channel/api/queryChannels.ts +3 -3
  166. package/src/channel/api/removeChannelMembers.ts +1 -1
  167. package/src/channel/api/removeChannelMembersRole.ts +1 -1
  168. package/src/channel/api/tests/addChannelMembers.test.ts +16 -0
  169. package/src/channel/api/tests/createChannel.test.ts +29 -8
  170. package/src/channel/api/tests/getChannel.test.ts +11 -4
  171. package/src/channel/api/tests/getChannels.test.ts +22 -14
  172. package/src/channel/api/tests/queryChannelMembers.test.ts +13 -4
  173. package/src/channel/api/tests/queryChannels.test.ts +19 -9
  174. package/src/channel/api/unbanChannelMembers.ts +1 -1
  175. package/src/channel/api/updateChannel.ts +1 -1
  176. package/src/channel/events/onChannelCreated.ts +2 -2
  177. package/src/channel/events/onChannelDeleted.ts +4 -4
  178. package/src/channel/events/onChannelJoined.ts +2 -2
  179. package/src/channel/events/onChannelLeft.ts +2 -2
  180. package/src/channel/events/onChannelMemberAdded.ts +2 -2
  181. package/src/channel/events/onChannelMemberBanned.ts +3 -3
  182. package/src/channel/events/onChannelMemberRemoved.ts +2 -2
  183. package/src/channel/events/onChannelMemberUnbanned.ts +2 -2
  184. package/src/channel/events/onChannelMuted.ts +2 -2
  185. package/src/channel/events/onChannelUpdated.ts +25 -4
  186. package/src/channel/events/tests/onChannelCreated.test.ts +4 -1
  187. package/src/channel/events/tests/onChannelJoined.test.ts +5 -1
  188. package/src/channel/events/tests/onChannelMemberAdded.test.ts +5 -1
  189. package/src/channel/events/tests/onChannelMemberBanned.test.ts +4 -1
  190. package/src/channel/events/tests/onChannelMemberRemoved.test.ts +5 -1
  191. package/src/channel/events/tests/onChannelMemberUnbanned.test.ts +10 -10
  192. package/src/channel/events/tests/onChannelUpdated.test.ts +5 -1
  193. package/src/channel/observers/tests/liveChannelMembers.test.ts +5 -11
  194. package/src/channel/observers/tests/liveChannels.test.ts +21 -24
  195. package/src/channel/utils/index.ts +1 -57
  196. package/src/channel/utils/prepareChannelPayload.ts +91 -0
  197. package/src/channel/utils/tests/prepareChannelPayload.test.ts +102 -104
  198. package/src/client/api/activeUser.ts +2 -2
  199. package/src/client/api/connectClient.ts +2 -1
  200. package/src/client/api/index.ts +3 -0
  201. package/src/client/api/markerSync.ts +42 -0
  202. package/src/client/observers/getTotalUnreadCount.ts +52 -0
  203. package/src/client/observers/index.ts +1 -0
  204. package/src/client/observers/tests/getTotalUnreadCount.test.ts +126 -0
  205. package/src/client/utils/index.ts +1 -0
  206. package/src/client/utils/markerSyncEngine.ts +179 -0
  207. package/src/comment/api/getComments.ts +20 -4
  208. package/src/comment/api/tests/getComments.test.ts +12 -1
  209. package/src/comment/api/tests/queryComments.test.ts +2 -2
  210. package/src/core/model/idResolvers.ts +7 -0
  211. package/src/core/model/identifyModel.ts +1 -1
  212. package/src/core/model/index.ts +6 -0
  213. package/src/core/tests/query/query/runQuery.test.ts +3 -1
  214. package/src/group/utils/withUser.ts +2 -2
  215. package/src/index.ts +6 -0
  216. package/src/marker/api/getChannelMarkers.ts +53 -0
  217. package/src/marker/api/getMessageMarkers.ts +54 -0
  218. package/src/marker/api/getSubChannelMarkers.ts +54 -0
  219. package/src/marker/api/getUserMarker.ts +47 -0
  220. package/src/marker/api/index.ts +4 -0
  221. package/src/marker/api/tests/getChannelMarkers.test.ts +109 -0
  222. package/src/marker/api/tests/getMessageMarkers.test.ts +114 -0
  223. package/src/marker/api/tests/getSubChannelMarkers.test.ts +116 -0
  224. package/src/marker/events/index.ts +10 -0
  225. package/src/marker/events/onChannelMarkerFetched.ts +34 -0
  226. package/src/marker/events/onFeedlMarkerFetched.ts +34 -0
  227. package/src/marker/events/onMessageMarkerFetched.ts +34 -0
  228. package/src/marker/events/onSubChannelMarkerFetched.ts +34 -0
  229. package/src/marker/events/onSubChannelMarkerUpdated.ts +34 -0
  230. package/src/marker/events/onUserMarkerFetched.ts +34 -0
  231. package/src/message/api/createMessage.ts +1 -1
  232. package/src/message/api/getMessage.ts +6 -5
  233. package/src/message/api/getMessages.ts +7 -6
  234. package/src/message/api/index.ts +1 -0
  235. package/src/message/api/markAsDelivered.ts +36 -0
  236. package/src/message/api/queryMessages.ts +8 -6
  237. package/src/message/api/tests/createMessage.test.ts +13 -4
  238. package/src/message/api/tests/getMessage.test.ts +12 -3
  239. package/src/message/api/tests/getMessages.test.ts +14 -5
  240. package/src/message/api/tests/markAsDelivered.test.ts +83 -0
  241. package/src/message/api/tests/queryMessages.test.ts +14 -3
  242. package/src/message/api/updateMessage.ts +8 -7
  243. package/src/message/events/index.ts +2 -0
  244. package/src/message/events/onMessageCreated.ts +14 -41
  245. package/src/message/events/onMessageDeleted.ts +2 -2
  246. package/src/message/events/onMessageFlagCleared.ts +2 -2
  247. package/src/message/events/onMessageFlagged.ts +2 -2
  248. package/src/message/events/onMessageReactionAdded.ts +2 -2
  249. package/src/message/events/onMessageReactionRemoved.ts +2 -2
  250. package/src/message/events/onMessageUnflagged.ts +2 -2
  251. package/src/message/events/onMessageUpdated.ts +27 -5
  252. package/src/message/tests/events.test.ts +4 -2
  253. package/src/message/tests/observers/liveMessage.test.ts +22 -10
  254. package/src/message/tests/observers/liveMessages.test.ts +25 -18
  255. package/src/message/utils/index.ts +1 -140
  256. package/src/message/utils/prepareMessagePayload.ts +182 -0
  257. package/src/post/api/getPosts.ts +20 -4
  258. package/src/post/api/tests/getPosts.test.ts +18 -0
  259. package/src/reaction/events/onReactionAdded.ts +2 -2
  260. package/src/reaction/events/onReactionRemoved.ts +2 -2
  261. package/src/reaction/events/onReactorAdded.ts +2 -2
  262. package/src/reaction/events/onReactorRemoved.ts +2 -2
  263. package/src/report/api/createReport.ts +2 -1
  264. package/src/report/api/deleteReport.ts +2 -1
  265. package/src/subChannel/api/createSubChannel.ts +1 -1
  266. package/src/subChannel/api/getSubChannel.ts +1 -1
  267. package/src/subChannel/api/getSubChannels.ts +2 -1
  268. package/src/subChannel/api/index.ts +3 -0
  269. package/src/subChannel/api/querySubChannels.ts +1 -1
  270. package/src/subChannel/api/startReadingAPI.ts +33 -0
  271. package/src/subChannel/api/stopReadingAPI.ts +33 -0
  272. package/src/subChannel/api/tests/createSubChannel.test.ts +6 -3
  273. package/src/subChannel/api/tests/deleteSubChannel.test.ts +7 -5
  274. package/src/subChannel/api/tests/getSubChannel.test.ts +6 -4
  275. package/src/subChannel/api/tests/getSubChannels.test.ts +6 -3
  276. package/src/subChannel/api/tests/updateSubChannel.test.ts +6 -3
  277. package/src/subChannel/api/updateSubChannel.ts +1 -1
  278. package/src/subChannel/events/onSubChannelCreated.ts +2 -2
  279. package/src/subChannel/events/onSubChannelDeleted.ts +2 -2
  280. package/src/subChannel/events/onSubChannelUpdated.ts +43 -4
  281. package/src/subChannel/observers/liveSubChannel.ts +2 -0
  282. package/src/subChannel/observers/tests/liveSubChannel.test.ts +15 -10
  283. package/src/subChannel/observers/tests/liveSubChannels.test.ts +21 -14
  284. package/src/subChannel/utils/index.ts +2 -50
  285. package/src/subChannel/utils/markReadEngine.ts +117 -0
  286. package/src/subChannel/utils/prepareSubChannelPayload.ts +132 -0
  287. package/src/utils/liveObject.ts +15 -4
  288. package/src/utils/tests/client.ts +3 -1
  289. package/src/utils/tests/dummy/channel.ts +38 -21
  290. package/src/utils/tests/dummy/comment.ts +2 -2
  291. package/src/utils/tests/dummy/index.ts +1 -0
  292. package/src/utils/tests/dummy/marker.ts +68 -0
  293. package/src/utils/tests/dummy/message.ts +42 -2
  294. package/src/utils/tests/dummy/post.ts +1 -1
  295. package/src/utils/tests/dummy/subChannel.ts +16 -5
  296. package/src/utils/tests/utils.ts +4 -1
  297. package/dist/channel/api/startReading.d.ts +0 -17
  298. package/dist/channel/api/startReading.d.ts.map +0 -1
  299. package/dist/channel/api/stopReading.d.ts +0 -16
  300. package/dist/channel/api/stopReading.d.ts.map +0 -1
  301. package/dist/channel/api/tests/startReading.test.d.ts +0 -2
  302. package/dist/channel/api/tests/startReading.test.d.ts.map +0 -1
  303. package/dist/channel/api/tests/stopReading.test.d.ts +0 -2
  304. package/dist/channel/api/tests/stopReading.test.d.ts.map +0 -1
  305. package/src/channel/api/startReading.ts +0 -57
  306. package/src/channel/api/stopReading.ts +0 -53
  307. package/src/channel/api/tests/startReading.test.ts +0 -25
  308. package/src/channel/api/tests/stopReading.test.ts +0 -25
@@ -0,0 +1,54 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { fireEvent } from '~/core/events';
3
+ import { toPage, toToken } from '~/core/query';
4
+ import { ingestInCache } from '~/cache/api/ingestInCache';
5
+
6
+ /**
7
+ * ```js
8
+ * import { getMessageMarkers } from '@amityco/ts-sdk'
9
+ * const messageMarkers = await getMessageMarkers(['sch1', 'sch2'])
10
+ * ```
11
+ *
12
+ * Fetches a paginable list of {@link Amity.MessageMarker} objects
13
+ *
14
+ * @param messageIds the feed IDs of the {@link Amity.RawMessage} marker to fetch
15
+ * @param page
16
+ * @returns A page of {@link Amity.MessageMarker} objects
17
+ *
18
+ * @category Channel API
19
+ * @async
20
+ * @private
21
+ */
22
+ export const getMessageMarkers = async (
23
+ messageIds: Amity.RawMessage['messageFeedId'][],
24
+ page: Amity.Page = { limit: 100 },
25
+ ): Promise<Amity.Cached<Amity.Paged<Amity.MessageMarker>>> => {
26
+ const client = getActiveClient();
27
+ client.log('channel/getMessageMarkers', messageIds, page);
28
+
29
+ const { data: queryPayload } = await client.http.get<
30
+ Amity.MessageMarkerPayload & Amity.Pagination
31
+ >(`/api/v1/markers/messages`, {
32
+ params: {
33
+ messageIds,
34
+ options: {
35
+ token: toToken(page, 'skiplimit'),
36
+ },
37
+ },
38
+ });
39
+
40
+ const { paging, ...payload } = queryPayload;
41
+ const { contentMarkers, feedMarkers, userMarkers } = payload;
42
+
43
+ const cachedAt = client.cache && Date.now();
44
+ if (client.cache) ingestInCache(payload as Amity.MessageMarkerPayload, { cachedAt });
45
+
46
+ feedMarkers.length && fireEvent('local.feedMarker.fetched', { feedMarkers });
47
+ contentMarkers.length && fireEvent('local.messageMarker.fetched', { contentMarkers });
48
+ userMarkers.length && fireEvent('local.userMarker.fetched', { userMarkers });
49
+
50
+ const nextPage = toPage(paging.next);
51
+ const prevPage = toPage(paging.previous);
52
+
53
+ return { data: contentMarkers, cachedAt, prevPage, nextPage };
54
+ };
@@ -0,0 +1,54 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { fireEvent } from '~/core/events';
3
+ import { toPage, toToken } from '~/core/query';
4
+ import { ingestInCache } from '~/cache/api/ingestInCache';
5
+
6
+ /**
7
+ * ```js
8
+ * import { getSubChannelMarkers } from '@amityco/ts-sdk'
9
+ * const subChannelMarkers = await getSubChannelMarkers(['sch1', 'sch2'])
10
+ * ```
11
+ *
12
+ * Fetches a paginable list of {@link Amity.SubChannelMarker} objects
13
+ *
14
+ * @param messageFeedIds the feed IDs of the {@link Amity.RawSubChannel} marker to fetch
15
+ * @param page
16
+ * @returns A page of {@link Amity.SubChannelMarker} objects
17
+ *
18
+ * @category Channel API
19
+ * @async
20
+ * @private
21
+ */
22
+ export const getSubChannelMarkers = async (
23
+ messageFeedIds: Amity.RawSubChannel['messageFeedId'][],
24
+ page: Amity.Page = { limit: 100 },
25
+ ): Promise<Amity.Cached<Amity.Paged<Amity.SubChannelMarker>>> => {
26
+ const client = getActiveClient();
27
+ client.log('channel/getSubChannelMarkers', messageFeedIds, page);
28
+
29
+ const { data: queryPayload } = await client.http.get<
30
+ Amity.SubChannelMarkerPayload & Amity.Pagination
31
+ >(`/api/v1/markers/message-feeds`, {
32
+ params: {
33
+ messageFeedIds,
34
+ options: {
35
+ token: toToken(page, 'skiplimit'),
36
+ },
37
+ },
38
+ });
39
+
40
+ const { paging, ...payload } = queryPayload;
41
+ const { userEntityMarkers, userFeedMarkers, userMarkers } = payload;
42
+
43
+ const cachedAt = client.cache && Date.now();
44
+ if (client.cache) ingestInCache(payload as Amity.SubChannelMarkerPayload, { cachedAt });
45
+
46
+ userEntityMarkers.length && fireEvent('local.channelMarker.fetched', { userEntityMarkers });
47
+ userFeedMarkers.length && fireEvent('local.subChannelMarker.fetched', { userFeedMarkers });
48
+ userMarkers.length && fireEvent('local.userMarker.fetched', { userMarkers });
49
+
50
+ const nextPage = toPage(paging.next);
51
+ const prevPage = toPage(paging.previous);
52
+
53
+ return { data: userFeedMarkers, cachedAt, prevPage, nextPage };
54
+ };
@@ -0,0 +1,47 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { getActiveUser } from '~/client/api/activeUser';
4
+ import { ASCError } from '~/core/errors';
5
+ import { getResolver } from '~/core/model';
6
+
7
+ const locally = () => {
8
+ const client = getActiveClient();
9
+ const user = getActiveUser();
10
+ client.log('marker/getUserMarker.locally');
11
+
12
+ const { _id: userId } = user;
13
+
14
+ if (!userId)
15
+ throw new ASCError(
16
+ 'The userId has not been defined in active client',
17
+ Amity.ClientError.UNKNOWN_ERROR,
18
+ Amity.ErrorLevel.ERROR,
19
+ );
20
+
21
+ const createdTime = new Date().toISOString();
22
+ const cachedAt = client.cache && Date.now();
23
+
24
+ const data: Amity.UserMarker = pullFromCache<Amity.UserMarker>([
25
+ 'userMarker',
26
+ 'get',
27
+ getResolver('userMarker')({ userId }),
28
+ ])?.data ?? {
29
+ userId,
30
+ unreadCount: 0,
31
+ lastSyncAt: createdTime,
32
+ createdAt: createdTime,
33
+ updatedAt: createdTime,
34
+ };
35
+
36
+ return {
37
+ data,
38
+ cachedAt,
39
+ };
40
+ };
41
+
42
+ export const getUserMarker = (): Promise<Amity.Cached<Amity.UserMarker>> => {
43
+ // API-FIX: backend should implement user marker get API
44
+ return Promise.resolve(locally());
45
+ };
46
+
47
+ getUserMarker.locally = locally;
@@ -0,0 +1,4 @@
1
+ export * from './getChannelMarkers';
2
+ export * from './getMessageMarkers';
3
+ export * from './getSubChannelMarkers';
4
+ export * from './getUserMarker';
@@ -0,0 +1,109 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { ASCApiError } from '~/core/errors';
3
+ import { getResolver } from '~/core/model';
4
+ import { onUserMarkerFetched } from '~/marker/events';
5
+ import { onChannelMarkerFetched } from '~/marker/events/onChannelMarkerFetched';
6
+ import { client, generateChannelMarker, generateUserMarker } from '~/utils/tests';
7
+
8
+ import { getChannelMarkers } from '../getChannelMarkers';
9
+
10
+ const pagingToken = {
11
+ previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
12
+ next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
13
+ };
14
+
15
+ const pagingCriteria = { limit: 10 };
16
+
17
+ const userId = 'user1';
18
+
19
+ const expectedChannelMarkers = [
20
+ generateChannelMarker({ entityId: 'ch1', userId }),
21
+ generateChannelMarker({ entityId: 'ch2', userId }),
22
+ ];
23
+
24
+ const expectedUserMarkers = [generateUserMarker({ userId: 'currentUser1' })];
25
+
26
+ const channelIds = expectedChannelMarkers.map(({ entityId }) => entityId);
27
+
28
+ const resolvedGetValue = {
29
+ data: {
30
+ userEntityMarkers: expectedChannelMarkers,
31
+ userMarkers: expectedUserMarkers,
32
+ paging: pagingToken,
33
+ },
34
+ };
35
+
36
+ describe('getChannelMarkers', () => {
37
+ it('should return channel markers', async () => {
38
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
39
+
40
+ const { data } = await getChannelMarkers(channelIds);
41
+
42
+ expect(data).toEqual(expectedChannelMarkers);
43
+ });
44
+
45
+ test('should return fetched channel markers with correct paging', async () => {
46
+ client.http.get = jest.fn().mockResolvedValueOnce(resolvedGetValue);
47
+
48
+ await expect(getChannelMarkers(channelIds, pagingCriteria)).resolves.toEqual(
49
+ expect.objectContaining({
50
+ data: expectedChannelMarkers,
51
+ prevPage: { before: 55, limit: 10 },
52
+ nextPage: { before: 55, limit: 10 },
53
+ }),
54
+ );
55
+ });
56
+
57
+ test('should update cache after fetching channelMarkers ', async () => {
58
+ enableCache();
59
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
60
+
61
+ await getChannelMarkers(channelIds);
62
+ const cacheKeyResolver = getResolver('channelMarker');
63
+
64
+ const received = channelIds.map(
65
+ entityId =>
66
+ pullFromCache(['channelMarker', 'get', cacheKeyResolver({ entityId, userId })])?.data,
67
+ );
68
+
69
+ expect(received).toEqual(expectedChannelMarkers);
70
+
71
+ disableCache();
72
+ });
73
+
74
+ test('should throw an error if request fails', async () => {
75
+ client.http.get = jest
76
+ .fn()
77
+ .mockRejectedValueOnce(
78
+ new ASCApiError('Not Found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
79
+ );
80
+
81
+ await expect(getChannelMarkers(channelIds)).rejects.toThrow('Amity SDK (400400): Not Found');
82
+ });
83
+
84
+ test('should fire event `onChannelMarkerFetched`', async () => {
85
+ let dispose;
86
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
87
+
88
+ const callbackPromise = new Promise(resolve => {
89
+ dispose = onChannelMarkerFetched(resolve);
90
+ }).finally(dispose);
91
+
92
+ await getChannelMarkers(channelIds);
93
+
94
+ await expect(callbackPromise).resolves.toMatchObject(expectedChannelMarkers[0]);
95
+ });
96
+
97
+ test('should fire event `onUserMarkerFetched`', async () => {
98
+ let dispose;
99
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
100
+
101
+ const callbackPromise = new Promise(resolve => {
102
+ dispose = onUserMarkerFetched(resolve);
103
+ }).finally(dispose);
104
+
105
+ await getChannelMarkers(channelIds);
106
+
107
+ await expect(callbackPromise).resolves.toMatchObject(expectedUserMarkers[0]);
108
+ });
109
+ });
@@ -0,0 +1,114 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { ASCApiError } from '~/core/errors';
3
+ import { getResolver } from '~/core/model';
4
+ import { onMessageMarkerFetched, onUserMarkerFetched } from '~/marker/events';
5
+ import {
6
+ client,
7
+ generateFeedMarker,
8
+ generateMessageMarker,
9
+ generateUserMarker,
10
+ } from '~/utils/tests';
11
+
12
+ import { getMessageMarkers } from '../getMessageMarkers';
13
+
14
+ const pagingToken = {
15
+ previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
16
+ next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
17
+ };
18
+
19
+ const pagingCriteria = { limit: 10 };
20
+
21
+ const expectedMessageMarkers = [
22
+ generateMessageMarker({ feedId: 'sub-ch1', contentId: 'message1' }),
23
+ generateMessageMarker({ feedId: 'sub-ch1', contentId: 'message2' }),
24
+ ];
25
+
26
+ const expectedFeedMarkers = [generateFeedMarker({ feedId: 'sub-ch1', entityId: 'feed1' })];
27
+
28
+ const expectedUserMarkers = [generateUserMarker({ userId: 'currentUser1' })];
29
+
30
+ const messageIds = expectedMessageMarkers.map(({ contentId }) => contentId);
31
+ const messageMarkerResolver = getResolver('messageMarker');
32
+ const messageMarkerCacheIds = expectedMessageMarkers.map(messageMarkerResolver);
33
+
34
+ const resolvedGetValue = {
35
+ data: {
36
+ contentMarkers: expectedMessageMarkers,
37
+ feedMarkers: expectedFeedMarkers,
38
+ userMarkers: expectedUserMarkers,
39
+ paging: pagingToken,
40
+ } as Amity.MessageMarkerPayload,
41
+ };
42
+
43
+ describe('getMessageMarkers', () => {
44
+ it('should return message markers', async () => {
45
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
46
+
47
+ const { data } = await getMessageMarkers(messageIds);
48
+
49
+ expect(data).toEqual(expectedMessageMarkers);
50
+ });
51
+
52
+ test('should return fetched message markers with correct paging', async () => {
53
+ client.http.get = jest.fn().mockResolvedValueOnce(resolvedGetValue);
54
+
55
+ await expect(getMessageMarkers(messageIds, pagingCriteria)).resolves.toEqual(
56
+ expect.objectContaining({
57
+ data: expectedMessageMarkers,
58
+ prevPage: { before: 55, limit: 10 },
59
+ nextPage: { before: 55, limit: 10 },
60
+ }),
61
+ );
62
+ });
63
+
64
+ test('should update cache after fetching message markers ', async () => {
65
+ enableCache();
66
+
67
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
68
+
69
+ await getMessageMarkers(messageIds);
70
+ const received = messageMarkerCacheIds.map(
71
+ id => pullFromCache(['messageMarker', 'get', id])?.data,
72
+ );
73
+
74
+ expect(received).toEqual(expectedMessageMarkers);
75
+
76
+ disableCache();
77
+ });
78
+
79
+ test('should throw an error if request fails', async () => {
80
+ client.http.get = jest
81
+ .fn()
82
+ .mockRejectedValueOnce(
83
+ new ASCApiError('Not Found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
84
+ );
85
+
86
+ await expect(getMessageMarkers(messageIds)).rejects.toThrow('Amity SDK (400400): Not Found');
87
+ });
88
+
89
+ test('should fire event `onMessageMarkerFetched`', async () => {
90
+ let dispose;
91
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
92
+
93
+ const callbackPromise = new Promise(resolve => {
94
+ dispose = onMessageMarkerFetched(resolve);
95
+ }).finally(dispose);
96
+
97
+ await getMessageMarkers(messageIds);
98
+
99
+ await expect(callbackPromise).resolves.toMatchObject(expectedMessageMarkers[0]);
100
+ });
101
+
102
+ test('should fire event `onUserMarkerFetched`', async () => {
103
+ let dispose;
104
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
105
+
106
+ const callbackPromise = new Promise(resolve => {
107
+ dispose = onUserMarkerFetched(resolve);
108
+ }).finally(dispose);
109
+
110
+ await getMessageMarkers(messageIds);
111
+
112
+ await expect(callbackPromise).resolves.toMatchObject(expectedUserMarkers[0]);
113
+ });
114
+ });
@@ -0,0 +1,116 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { ASCApiError } from '~/core/errors';
3
+ import { getResolver } from '~/core/model';
4
+ import { onSubChannelMarkerFetched, onUserMarkerFetched } from '~/marker/events';
5
+ import {
6
+ client,
7
+ generateChannelMarker,
8
+ generateSubChannelMarker,
9
+ generateUserMarker,
10
+ } from '~/utils/tests';
11
+
12
+ import { getSubChannelMarkers } from '../getSubChannelMarkers';
13
+
14
+ const pagingToken = {
15
+ previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
16
+ next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
17
+ };
18
+
19
+ const pagingCriteria = { limit: 10 };
20
+
21
+ const expectedSubChannelMarkers = [
22
+ generateSubChannelMarker({ feedId: 'sub-ch1', entityId: 'ch1' }),
23
+ generateSubChannelMarker({ feedId: 'sub-ch2', entityId: 'ch1' }),
24
+ ];
25
+
26
+ const expectedChannelMarkers = [generateChannelMarker({ entityId: 'ch1', userId: 'user1' })];
27
+
28
+ const expectedUserMarkers = [generateUserMarker({ userId: 'currentUser1' })];
29
+
30
+ const subChannelIds = expectedSubChannelMarkers.map(({ feedId }) => feedId);
31
+ const subChannelMarkerResolver = getResolver('subChannelMarker');
32
+ const subChannelMarkerCacheIds = expectedSubChannelMarkers.map(subChannelMarkerResolver);
33
+
34
+ const resolvedGetValue = {
35
+ data: {
36
+ userFeedMarkers: expectedSubChannelMarkers,
37
+ userEntityMarkers: expectedChannelMarkers,
38
+ userMarkers: expectedUserMarkers,
39
+ paging: pagingToken,
40
+ } as Amity.SubChannelMarkerPayload,
41
+ };
42
+
43
+ describe('getSubChannelMarkers', () => {
44
+ it('should return sub channel markers', async () => {
45
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
46
+
47
+ const { data } = await getSubChannelMarkers(subChannelIds);
48
+
49
+ expect(data).toEqual(expectedSubChannelMarkers);
50
+ });
51
+
52
+ test('should return fetched sub channel markers with correct paging', async () => {
53
+ client.http.get = jest.fn().mockResolvedValueOnce(resolvedGetValue);
54
+
55
+ await expect(getSubChannelMarkers(subChannelIds, pagingCriteria)).resolves.toEqual(
56
+ expect.objectContaining({
57
+ data: expectedSubChannelMarkers,
58
+ prevPage: { before: 55, limit: 10 },
59
+ nextPage: { before: 55, limit: 10 },
60
+ }),
61
+ );
62
+ });
63
+
64
+ test('should update cache after fetching sub channel markers ', async () => {
65
+ enableCache();
66
+
67
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
68
+
69
+ await getSubChannelMarkers(subChannelIds);
70
+ const received = subChannelMarkerCacheIds.map(
71
+ id => pullFromCache(['subChannelMarker', 'get', id])?.data,
72
+ );
73
+
74
+ expect(received).toEqual(expectedSubChannelMarkers);
75
+
76
+ disableCache();
77
+ });
78
+
79
+ test('should throw an error if request fails', async () => {
80
+ client.http.get = jest
81
+ .fn()
82
+ .mockRejectedValueOnce(
83
+ new ASCApiError('Not Found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
84
+ );
85
+
86
+ await expect(getSubChannelMarkers(subChannelIds)).rejects.toThrow(
87
+ 'Amity SDK (400400): Not Found',
88
+ );
89
+ });
90
+
91
+ test('should fire event `onSubChannelMarkerFetched`', async () => {
92
+ let dispose;
93
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
94
+
95
+ const callbackPromise = new Promise(resolve => {
96
+ dispose = onSubChannelMarkerFetched(resolve);
97
+ }).finally(dispose);
98
+
99
+ await getSubChannelMarkers(subChannelIds);
100
+
101
+ await expect(callbackPromise).resolves.toMatchObject(expectedSubChannelMarkers[0]);
102
+ });
103
+
104
+ test('should fire event `onUserMarkerFetched`', async () => {
105
+ let dispose;
106
+ client.http.get = jest.fn().mockResolvedValue(resolvedGetValue);
107
+
108
+ const callbackPromise = new Promise(resolve => {
109
+ dispose = onUserMarkerFetched(resolve);
110
+ }).finally(dispose);
111
+
112
+ await getSubChannelMarkers(subChannelIds);
113
+
114
+ await expect(callbackPromise).resolves.toMatchObject(expectedUserMarkers[0]);
115
+ });
116
+ });
@@ -0,0 +1,10 @@
1
+ export * from './onChannelMarkerFetched';
2
+
3
+ export * from './onSubChannelMarkerFetched';
4
+ export * from './onSubChannelMarkerUpdated';
5
+
6
+ export * from './onFeedlMarkerFetched';
7
+
8
+ export * from './onUserMarkerFetched';
9
+
10
+ export * from './onMessageMarkerFetched';
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onChannelMarkerFetched } from '@amityco/ts-sdk'
7
+ * const dispose = onChannelMarkerFetched(channelMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.ChannelMarker} has been fetched
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category ChannelMarker Events
18
+ */
19
+ export const onChannelMarkerFetched = (
20
+ callback: Amity.Listener<Amity.ChannelMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['local.channelMarker.fetched']) => {
25
+ callback(payload.userEntityMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'channelMarker/onChannelMarkerFetched',
31
+ 'local.channelMarker.fetched',
32
+ filter,
33
+ );
34
+ };
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onFeedMarkerFetched } from '@amityco/ts-sdk'
7
+ * const dispose = onFeedMarkerFetched(feedMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.FeedMarker} has been fetched
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category FeedMarker Events
18
+ */
19
+ export const onFeedMarkerFetched = (
20
+ callback: Amity.Listener<Amity.FeedMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['local.feedMarker.fetched']) => {
25
+ callback(payload.feedMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'feedMarker/onFeedMarkerFetched',
31
+ 'local.feedMarker.fetched',
32
+ filter,
33
+ );
34
+ };
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onMessageMarkerFetched } from '@amityco/ts-sdk'
7
+ * const dispose = onMessageMarkerFetched(messageMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.MessageMarker} has been fetched
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category MessageMarker Events
18
+ */
19
+ export const onMessageMarkerFetched = (
20
+ callback: Amity.Listener<Amity.MessageMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['local.messageMarker.fetched']) => {
25
+ callback(payload.contentMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'messageMarker/onMessageMarkerFetched',
31
+ 'local.messageMarker.fetched',
32
+ filter,
33
+ );
34
+ };
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onSubChannelMarkerFetched } from '@amityco/ts-sdk'
7
+ * const dispose = onSubChannelMarkerFetched(subChannelMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.SubChannelMarker} has been fetched
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category SubChannelMarker Events
18
+ */
19
+ export const onSubChannelMarkerFetched = (
20
+ callback: Amity.Listener<Amity.SubChannelMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['local.subChannelMarker.fetched']) => {
25
+ callback(payload.userFeedMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'subChannelMarker/onSubChannelMarkerFetched',
31
+ 'local.subChannelMarker.fetched',
32
+ filter,
33
+ );
34
+ };
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onSubChannelMarkerUpdated } from '@amityco/ts-sdk'
7
+ * const dispose = onSubChannelMarkerUpdated(subChannelMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.SubChannelMarker} has been updated
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category SubChannelMarker Events
18
+ */
19
+ export const onSubChannelMarkerUpdated = (
20
+ callback: Amity.Listener<Amity.SubChannelMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['local.subChannelMarker.updated']) => {
25
+ callback(payload.userFeedMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'subChannelMarker/onSubChannelMarkerUpdated',
31
+ 'local.subChannelMarker.updated',
32
+ filter,
33
+ );
34
+ };