@amityco/ts-sdk 0.0.1-beta.42.3 → 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 (296) 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/index.d.ts +0 -2
  22. package/dist/channel/api/index.d.ts.map +1 -1
  23. package/dist/channel/events/onChannelUpdated.d.ts.map +1 -1
  24. package/dist/channel/utils/index.d.ts +1 -2
  25. package/dist/channel/utils/index.d.ts.map +1 -1
  26. package/dist/channel/utils/prepareChannelPayload.d.ts +6 -0
  27. package/dist/channel/utils/prepareChannelPayload.d.ts.map +1 -0
  28. package/dist/channel/utils/tests/prepareChannelPayload.test.d.ts +5 -1
  29. package/dist/channel/utils/tests/prepareChannelPayload.test.d.ts.map +1 -1
  30. package/dist/client/api/activeUser.d.ts +2 -2
  31. package/dist/client/api/activeUser.d.ts.map +1 -1
  32. package/dist/client/api/connectClient.d.ts.map +1 -1
  33. package/dist/client/api/index.d.ts +2 -0
  34. package/dist/client/api/index.d.ts.map +1 -1
  35. package/dist/client/api/markerSync.d.ts +21 -0
  36. package/dist/client/api/markerSync.d.ts.map +1 -0
  37. package/dist/client/observers/getTotalUnreadCount.d.ts +18 -0
  38. package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -0
  39. package/dist/client/observers/index.d.ts +2 -0
  40. package/dist/client/observers/index.d.ts.map +1 -0
  41. package/dist/client/observers/tests/getTotalUnreadCount.test.d.ts +2 -0
  42. package/dist/client/observers/tests/getTotalUnreadCount.test.d.ts.map +1 -0
  43. package/dist/client/utils/index.d.ts +2 -0
  44. package/dist/client/utils/index.d.ts.map +1 -0
  45. package/dist/client/utils/markerSyncEngine.d.ts +46 -0
  46. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -0
  47. package/dist/core/events.d.ts +3 -3
  48. package/dist/core/events.d.ts.map +1 -1
  49. package/dist/core/model/idResolvers.d.ts.map +1 -1
  50. package/dist/core/model/index.d.ts.map +1 -1
  51. package/dist/index.cjs.js +1921 -1185
  52. package/dist/index.d.ts +5 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.esm.js +1891 -1186
  55. package/dist/index.umd.js +4 -4
  56. package/dist/marker/api/getChannelMarkers.d.ts +18 -0
  57. package/dist/marker/api/getChannelMarkers.d.ts.map +1 -0
  58. package/dist/marker/api/getMessageMarkers.d.ts +18 -0
  59. package/dist/marker/api/getMessageMarkers.d.ts.map +1 -0
  60. package/dist/marker/api/getSubChannelMarkers.d.ts +18 -0
  61. package/dist/marker/api/getSubChannelMarkers.d.ts.map +1 -0
  62. package/dist/marker/api/getUserMarker.d.ts +8 -0
  63. package/dist/marker/api/getUserMarker.d.ts.map +1 -0
  64. package/dist/marker/api/index.d.ts +5 -0
  65. package/dist/marker/api/index.d.ts.map +1 -0
  66. package/dist/marker/api/tests/getChannelMarkers.test.d.ts +2 -0
  67. package/dist/marker/api/tests/getChannelMarkers.test.d.ts.map +1 -0
  68. package/dist/marker/api/tests/getMessageMarkers.test.d.ts +2 -0
  69. package/dist/marker/api/tests/getMessageMarkers.test.d.ts.map +1 -0
  70. package/dist/marker/api/tests/getSubChannelMarkers.test.d.ts +2 -0
  71. package/dist/marker/api/tests/getSubChannelMarkers.test.d.ts.map +1 -0
  72. package/dist/marker/events/index.d.ts +7 -0
  73. package/dist/marker/events/index.d.ts.map +1 -0
  74. package/dist/marker/events/onChannelMarkerFetched.d.ts +17 -0
  75. package/dist/marker/events/onChannelMarkerFetched.d.ts.map +1 -0
  76. package/dist/marker/events/onFeedlMarkerFetched.d.ts +17 -0
  77. package/dist/marker/events/onFeedlMarkerFetched.d.ts.map +1 -0
  78. package/dist/marker/events/onMessageMarkerFetched.d.ts +17 -0
  79. package/dist/marker/events/onMessageMarkerFetched.d.ts.map +1 -0
  80. package/dist/marker/events/onSubChannelMarkerFetched.d.ts +17 -0
  81. package/dist/marker/events/onSubChannelMarkerFetched.d.ts.map +1 -0
  82. package/dist/marker/events/onSubChannelMarkerUpdated.d.ts +17 -0
  83. package/dist/marker/events/onSubChannelMarkerUpdated.d.ts.map +1 -0
  84. package/dist/marker/events/onUserMarkerFetched.d.ts +17 -0
  85. package/dist/marker/events/onUserMarkerFetched.d.ts.map +1 -0
  86. package/dist/message/api/getMessage.d.ts.map +1 -1
  87. package/dist/message/api/getMessages.d.ts.map +1 -1
  88. package/dist/message/api/index.d.ts +1 -0
  89. package/dist/message/api/index.d.ts.map +1 -1
  90. package/dist/message/api/markAsDelivered.d.ts +17 -0
  91. package/dist/message/api/markAsDelivered.d.ts.map +1 -0
  92. package/dist/message/api/queryMessages.d.ts.map +1 -1
  93. package/dist/message/api/tests/markAsDelivered.test.d.ts +2 -0
  94. package/dist/message/api/tests/markAsDelivered.test.d.ts.map +1 -0
  95. package/dist/message/api/updateMessage.d.ts.map +1 -1
  96. package/dist/message/events/index.d.ts +1 -0
  97. package/dist/message/events/index.d.ts.map +1 -1
  98. package/dist/message/events/onMessageCreated.d.ts +2 -1
  99. package/dist/message/events/onMessageCreated.d.ts.map +1 -1
  100. package/dist/message/events/onMessageUpdated.d.ts.map +1 -1
  101. package/dist/message/utils/index.d.ts +1 -18
  102. package/dist/message/utils/index.d.ts.map +1 -1
  103. package/dist/message/utils/prepareMessagePayload.d.ts +16 -0
  104. package/dist/message/utils/prepareMessagePayload.d.ts.map +1 -0
  105. package/dist/report/api/createReport.d.ts.map +1 -1
  106. package/dist/report/api/deleteReport.d.ts.map +1 -1
  107. package/dist/subChannel/api/getSubChannels.d.ts.map +1 -1
  108. package/dist/subChannel/api/index.d.ts +2 -0
  109. package/dist/subChannel/api/index.d.ts.map +1 -1
  110. package/dist/subChannel/api/startReadingAPI.d.ts +17 -0
  111. package/dist/subChannel/api/startReadingAPI.d.ts.map +1 -0
  112. package/dist/subChannel/api/stopReadingAPI.d.ts +17 -0
  113. package/dist/subChannel/api/stopReadingAPI.d.ts.map +1 -0
  114. package/dist/subChannel/events/onSubChannelUpdated.d.ts +1 -1
  115. package/dist/subChannel/events/onSubChannelUpdated.d.ts.map +1 -1
  116. package/dist/subChannel/observers/liveSubChannel.d.ts.map +1 -1
  117. package/dist/subChannel/utils/index.d.ts +2 -7
  118. package/dist/subChannel/utils/index.d.ts.map +1 -1
  119. package/dist/subChannel/utils/markReadEngine.d.ts +33 -0
  120. package/dist/subChannel/utils/markReadEngine.d.ts.map +1 -0
  121. package/dist/subChannel/utils/prepareSubChannelPayload.d.ts +15 -0
  122. package/dist/subChannel/utils/prepareSubChannelPayload.d.ts.map +1 -0
  123. package/dist/utils/liveObject.d.ts +1 -1
  124. package/dist/utils/liveObject.d.ts.map +1 -1
  125. package/dist/utils/tests/client.d.ts +1 -0
  126. package/dist/utils/tests/client.d.ts.map +1 -1
  127. package/dist/utils/tests/dummy/channel.d.ts +4 -0
  128. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  129. package/dist/utils/tests/dummy/index.d.ts +1 -0
  130. package/dist/utils/tests/dummy/index.d.ts.map +1 -1
  131. package/dist/utils/tests/dummy/marker.d.ts +6 -0
  132. package/dist/utils/tests/dummy/marker.d.ts.map +1 -0
  133. package/dist/utils/tests/dummy/message.d.ts +2 -0
  134. package/dist/utils/tests/dummy/message.d.ts.map +1 -1
  135. package/dist/utils/tests/dummy/subChannel.d.ts +1 -0
  136. package/dist/utils/tests/dummy/subChannel.d.ts.map +1 -1
  137. package/dist/utils/tests/utils.d.ts.map +1 -1
  138. package/package.json +1 -1
  139. package/src/@types/core/events.ts +13 -1
  140. package/src/@types/core/marker.ts +42 -0
  141. package/src/@types/core/model.ts +12 -0
  142. package/src/@types/core/payload.ts +52 -0
  143. package/src/@types/domains/channel.ts +5 -16
  144. package/src/@types/domains/client.ts +2 -0
  145. package/src/@types/domains/marker.ts +15 -0
  146. package/src/@types/domains/message.ts +3 -0
  147. package/src/@types/domains/partials.ts +4 -0
  148. package/src/@types/domains/subChannel.ts +2 -0
  149. package/src/channel/api/addChannelMembers.ts +1 -1
  150. package/src/channel/api/addChannelMembersRole.ts +1 -1
  151. package/src/channel/api/banChannelMembers.ts +1 -1
  152. package/src/channel/api/createChannel.ts +1 -1
  153. package/src/channel/api/getChannel.ts +1 -1
  154. package/src/channel/api/getChannels.ts +1 -1
  155. package/src/channel/api/index.ts +0 -3
  156. package/src/channel/api/joinChannel.ts +1 -1
  157. package/src/channel/api/leaveChannel.ts +1 -1
  158. package/src/channel/api/queryChannelMembers.ts +1 -1
  159. package/src/channel/api/queryChannels.ts +1 -1
  160. package/src/channel/api/removeChannelMembers.ts +1 -1
  161. package/src/channel/api/removeChannelMembersRole.ts +1 -1
  162. package/src/channel/api/tests/addChannelMembers.test.ts +16 -0
  163. package/src/channel/api/tests/createChannel.test.ts +29 -8
  164. package/src/channel/api/tests/getChannel.test.ts +11 -4
  165. package/src/channel/api/tests/getChannels.test.ts +20 -12
  166. package/src/channel/api/tests/queryChannelMembers.test.ts +13 -4
  167. package/src/channel/api/tests/queryChannels.test.ts +19 -9
  168. package/src/channel/api/unbanChannelMembers.ts +1 -1
  169. package/src/channel/api/updateChannel.ts +1 -1
  170. package/src/channel/events/onChannelCreated.ts +2 -2
  171. package/src/channel/events/onChannelDeleted.ts +4 -4
  172. package/src/channel/events/onChannelJoined.ts +2 -2
  173. package/src/channel/events/onChannelLeft.ts +2 -2
  174. package/src/channel/events/onChannelMemberAdded.ts +2 -2
  175. package/src/channel/events/onChannelMemberBanned.ts +3 -3
  176. package/src/channel/events/onChannelMemberRemoved.ts +2 -2
  177. package/src/channel/events/onChannelMemberUnbanned.ts +2 -2
  178. package/src/channel/events/onChannelMuted.ts +2 -2
  179. package/src/channel/events/onChannelUpdated.ts +25 -4
  180. package/src/channel/events/tests/onChannelCreated.test.ts +4 -1
  181. package/src/channel/events/tests/onChannelJoined.test.ts +5 -1
  182. package/src/channel/events/tests/onChannelMemberAdded.test.ts +5 -1
  183. package/src/channel/events/tests/onChannelMemberBanned.test.ts +4 -1
  184. package/src/channel/events/tests/onChannelMemberRemoved.test.ts +5 -1
  185. package/src/channel/events/tests/onChannelMemberUnbanned.test.ts +10 -10
  186. package/src/channel/events/tests/onChannelUpdated.test.ts +5 -1
  187. package/src/channel/observers/tests/liveChannelMembers.test.ts +5 -11
  188. package/src/channel/observers/tests/liveChannels.test.ts +21 -24
  189. package/src/channel/utils/index.ts +1 -57
  190. package/src/channel/utils/prepareChannelPayload.ts +91 -0
  191. package/src/channel/utils/tests/prepareChannelPayload.test.ts +102 -104
  192. package/src/client/api/activeUser.ts +2 -2
  193. package/src/client/api/connectClient.ts +2 -1
  194. package/src/client/api/index.ts +3 -0
  195. package/src/client/api/markerSync.ts +42 -0
  196. package/src/client/observers/getTotalUnreadCount.ts +52 -0
  197. package/src/client/observers/index.ts +1 -0
  198. package/src/client/observers/tests/getTotalUnreadCount.test.ts +126 -0
  199. package/src/client/utils/index.ts +1 -0
  200. package/src/client/utils/markerSyncEngine.ts +179 -0
  201. package/src/comment/api/tests/queryComments.test.ts +2 -2
  202. package/src/core/model/idResolvers.ts +7 -0
  203. package/src/core/model/identifyModel.ts +1 -1
  204. package/src/core/model/index.ts +6 -0
  205. package/src/core/tests/query/query/runQuery.test.ts +3 -1
  206. package/src/group/utils/withUser.ts +2 -2
  207. package/src/index.ts +6 -0
  208. package/src/marker/api/getChannelMarkers.ts +53 -0
  209. package/src/marker/api/getMessageMarkers.ts +54 -0
  210. package/src/marker/api/getSubChannelMarkers.ts +54 -0
  211. package/src/marker/api/getUserMarker.ts +47 -0
  212. package/src/marker/api/index.ts +4 -0
  213. package/src/marker/api/tests/getChannelMarkers.test.ts +109 -0
  214. package/src/marker/api/tests/getMessageMarkers.test.ts +114 -0
  215. package/src/marker/api/tests/getSubChannelMarkers.test.ts +116 -0
  216. package/src/marker/events/index.ts +10 -0
  217. package/src/marker/events/onChannelMarkerFetched.ts +34 -0
  218. package/src/marker/events/onFeedlMarkerFetched.ts +34 -0
  219. package/src/marker/events/onMessageMarkerFetched.ts +34 -0
  220. package/src/marker/events/onSubChannelMarkerFetched.ts +34 -0
  221. package/src/marker/events/onSubChannelMarkerUpdated.ts +34 -0
  222. package/src/marker/events/onUserMarkerFetched.ts +34 -0
  223. package/src/message/api/createMessage.ts +1 -1
  224. package/src/message/api/getMessage.ts +6 -5
  225. package/src/message/api/getMessages.ts +7 -6
  226. package/src/message/api/index.ts +1 -0
  227. package/src/message/api/markAsDelivered.ts +36 -0
  228. package/src/message/api/queryMessages.ts +8 -6
  229. package/src/message/api/tests/createMessage.test.ts +13 -4
  230. package/src/message/api/tests/getMessage.test.ts +12 -3
  231. package/src/message/api/tests/getMessages.test.ts +14 -5
  232. package/src/message/api/tests/markAsDelivered.test.ts +83 -0
  233. package/src/message/api/tests/queryMessages.test.ts +14 -3
  234. package/src/message/api/updateMessage.ts +8 -7
  235. package/src/message/events/index.ts +2 -0
  236. package/src/message/events/onMessageCreated.ts +14 -41
  237. package/src/message/events/onMessageDeleted.ts +2 -2
  238. package/src/message/events/onMessageFlagCleared.ts +2 -2
  239. package/src/message/events/onMessageFlagged.ts +2 -2
  240. package/src/message/events/onMessageReactionAdded.ts +2 -2
  241. package/src/message/events/onMessageReactionRemoved.ts +2 -2
  242. package/src/message/events/onMessageUnflagged.ts +2 -2
  243. package/src/message/events/onMessageUpdated.ts +27 -5
  244. package/src/message/tests/events.test.ts +4 -2
  245. package/src/message/tests/observers/liveMessage.test.ts +22 -10
  246. package/src/message/tests/observers/liveMessages.test.ts +25 -18
  247. package/src/message/utils/index.ts +1 -140
  248. package/src/message/utils/prepareMessagePayload.ts +182 -0
  249. package/src/reaction/events/onReactionAdded.ts +2 -2
  250. package/src/reaction/events/onReactionRemoved.ts +2 -2
  251. package/src/reaction/events/onReactorAdded.ts +2 -2
  252. package/src/reaction/events/onReactorRemoved.ts +2 -2
  253. package/src/report/api/createReport.ts +2 -1
  254. package/src/report/api/deleteReport.ts +2 -1
  255. package/src/subChannel/api/createSubChannel.ts +1 -1
  256. package/src/subChannel/api/getSubChannel.ts +1 -1
  257. package/src/subChannel/api/getSubChannels.ts +2 -1
  258. package/src/subChannel/api/index.ts +3 -0
  259. package/src/subChannel/api/querySubChannels.ts +1 -1
  260. package/src/subChannel/api/startReadingAPI.ts +33 -0
  261. package/src/subChannel/api/stopReadingAPI.ts +33 -0
  262. package/src/subChannel/api/tests/createSubChannel.test.ts +6 -3
  263. package/src/subChannel/api/tests/deleteSubChannel.test.ts +7 -5
  264. package/src/subChannel/api/tests/getSubChannel.test.ts +6 -4
  265. package/src/subChannel/api/tests/getSubChannels.test.ts +6 -3
  266. package/src/subChannel/api/tests/updateSubChannel.test.ts +6 -3
  267. package/src/subChannel/api/updateSubChannel.ts +1 -1
  268. package/src/subChannel/events/onSubChannelCreated.ts +2 -2
  269. package/src/subChannel/events/onSubChannelDeleted.ts +2 -2
  270. package/src/subChannel/events/onSubChannelUpdated.ts +43 -4
  271. package/src/subChannel/observers/liveSubChannel.ts +2 -0
  272. package/src/subChannel/observers/tests/liveSubChannel.test.ts +15 -10
  273. package/src/subChannel/observers/tests/liveSubChannels.test.ts +21 -14
  274. package/src/subChannel/utils/index.ts +2 -50
  275. package/src/subChannel/utils/markReadEngine.ts +117 -0
  276. package/src/subChannel/utils/prepareSubChannelPayload.ts +132 -0
  277. package/src/utils/liveObject.ts +15 -4
  278. package/src/utils/tests/client.ts +3 -1
  279. package/src/utils/tests/dummy/channel.ts +38 -21
  280. package/src/utils/tests/dummy/index.ts +1 -0
  281. package/src/utils/tests/dummy/marker.ts +68 -0
  282. package/src/utils/tests/dummy/message.ts +43 -3
  283. package/src/utils/tests/dummy/subChannel.ts +16 -5
  284. package/src/utils/tests/utils.ts +4 -1
  285. package/dist/channel/api/startReading.d.ts +0 -17
  286. package/dist/channel/api/startReading.d.ts.map +0 -1
  287. package/dist/channel/api/stopReading.d.ts +0 -16
  288. package/dist/channel/api/stopReading.d.ts.map +0 -1
  289. package/dist/channel/api/tests/startReading.test.d.ts +0 -2
  290. package/dist/channel/api/tests/startReading.test.d.ts.map +0 -1
  291. package/dist/channel/api/tests/stopReading.test.d.ts +0 -2
  292. package/dist/channel/api/tests/stopReading.test.d.ts.map +0 -1
  293. package/src/channel/api/startReading.ts +0 -57
  294. package/src/channel/api/stopReading.ts +0 -53
  295. package/src/channel/api/tests/startReading.test.ts +0 -25
  296. package/src/channel/api/tests/stopReading.test.ts +0 -25
@@ -8,12 +8,18 @@ import { hasUpdates } from '~/core/model';
8
8
  import { createQuery, runQuery } from '~/core/query';
9
9
  import { ASCApiError } from '~/core/errors';
10
10
 
11
- export const liveObject = <T extends Amity.Models[Amity.Domain], K extends keyof T>(
11
+ export const liveObject = <
12
+ T extends Amity.Models[Amity.Domain],
13
+ K extends keyof T,
14
+ CallbackData extends any = any,
15
+ >(
12
16
  id: T[K],
13
- callback: Amity.LiveObjectCallback<T>,
17
+ callback: Amity.LiveObjectCallback<CallbackData>,
14
18
  key: K,
15
19
  fetcher: (id: T[K]) => Promise<Amity.Cached<T>>,
16
20
  eventHandlers: Array<(callback: Amity.Listener<T>) => Amity.Unsubscriber>,
21
+ callbackDataSelector: (data: T) => CallbackData = data => <CallbackData>data,
22
+ callbackFilter?: (currentModel: T, previousModel: T) => boolean,
17
23
  ): Amity.Unsubscriber => {
18
24
  const { cache } = getActiveClient();
19
25
 
@@ -26,8 +32,13 @@ export const liveObject = <T extends Amity.Models[Amity.Domain], K extends keyof
26
32
  const disposers: Amity.Unsubscriber[] = [];
27
33
 
28
34
  const dispatcher = (data: Amity.LiveObject<T>) => {
29
- model = data.data;
30
- callback(data);
35
+ const { data: newModel, ...rest } = data;
36
+
37
+ if (!callbackFilter || callbackFilter(newModel, model)) {
38
+ callback({ data: callbackDataSelector(newModel), ...rest });
39
+ }
40
+
41
+ model = newModel;
31
42
  };
32
43
 
33
44
  const realtimeRouter = (eventModel: T) => {
@@ -6,6 +6,8 @@ import {
6
6
 
7
7
  import { user11 } from './dummy';
8
8
 
9
+ export const activeUser = user11;
10
+
9
11
  const sessionHandler: Amity.SessionHandler = {
10
12
  sessionWillRenewAccessToken(_) {
11
13
  // do nothing
@@ -28,7 +30,7 @@ export const connectClient = async () => {
28
30
  data: {
29
31
  accessToken: 'accessToken',
30
32
  refreshToken: 'refreshToken',
31
- users: [user11],
33
+ users: [activeUser],
32
34
  expiresAt: nextMonth.toISOString(),
33
35
  issuedAt: now.toISOString(),
34
36
  },
@@ -1,6 +1,26 @@
1
+ import { withUsers } from '~/group/utils';
1
2
  import { convertFromRaw } from '~/channel/utils';
3
+ import { activeUser } from '~/utils/tests';
4
+ import * as activeUserModule from '~/client/api/activeUser';
5
+
2
6
  import { date, user11, user12, user13, user14, file11 } from '.';
3
7
 
8
+ export const convertChannelFromRaw = (
9
+ channel: Amity.RawChannel,
10
+ marker?: Amity.ChannelMarker,
11
+ ): Amity.Channel => {
12
+ jest.spyOn(activeUserModule, 'getActiveUser').mockReturnValue(activeUser);
13
+ return convertFromRaw(channel, marker);
14
+ };
15
+
16
+ export const convertRawChannelPayload = (
17
+ rawPayload: Amity.ChannelPayload,
18
+ ): Amity.ProcessedChannelPayload => ({
19
+ ...rawPayload,
20
+ channels: rawPayload.channels.map(channel => convertChannelFromRaw(channel)),
21
+ channelUsers: withUsers(rawPayload.channelUsers),
22
+ });
23
+
4
24
  export function generateRawChannel(params?: Partial<Amity.RawChannel>): Amity.RawChannel {
5
25
  const channelId = params?.channelId ?? 'channelId11';
6
26
 
@@ -19,7 +39,7 @@ export function generateRawChannel(params?: Partial<Amity.RawChannel>): Amity.Ra
19
39
  };
20
40
  }
21
41
 
22
- function generateRawChannelUser(
42
+ export function generateRawChannelUser(
23
43
  params?: Partial<Amity.RawMembership<'channel'>>,
24
44
  ): Amity.RawMembership<'channel'> {
25
45
  return {
@@ -38,15 +58,14 @@ function generateRawChannelUser(
38
58
  ...params,
39
59
  };
40
60
  }
41
- function convertChannelUserFromRaw(
61
+
62
+ export const convertChannelUserFromRaw = (
42
63
  member: Amity.RawMembership<'channel'>,
43
- user: Amity.User,
44
- ): Amity.Membership<'channel'> {
45
- return {
46
- ...member,
47
- user,
48
- };
49
- }
64
+ user: Amity.User | undefined,
65
+ ): Amity.Membership<'channel'> => ({
66
+ ...member,
67
+ user,
68
+ });
50
69
 
51
70
  export const mockPage = {
52
71
  paging: {
@@ -73,19 +92,17 @@ export const channelRaw3: Amity.RawChannel = generateRawChannel({
73
92
  channelId: 'channelId21',
74
93
  });
75
94
 
76
- export const channel1: Amity.Channel = convertFromRaw(channelRaw1, {
77
- defaultSubChannelHasUnreadMention: false,
78
- defaultSubChannelUnreadCount: 0,
79
- localLastMentionSegment: 0,
80
- localReadToSegment: 0,
81
- });
95
+ export const channel1: Amity.Channel = {
96
+ ...channelRaw1,
97
+ isUnreadCountSupport: true,
98
+ unreadCount: 0,
99
+ };
82
100
 
83
- export const channel2: Amity.Channel = convertFromRaw(channelRaw2, {
84
- defaultSubChannelHasUnreadMention: false,
85
- defaultSubChannelUnreadCount: 0,
86
- localLastMentionSegment: 0,
87
- localReadToSegment: 0,
88
- });
101
+ export const channel2: Amity.Channel = {
102
+ ...channelRaw2,
103
+ isUnreadCountSupport: true,
104
+ unreadCount: 0,
105
+ };
89
106
 
90
107
  export const rawChannelUser = generateRawChannelUser();
91
108
  export const channelUser = convertChannelUserFromRaw(rawChannelUser, user11);
@@ -14,6 +14,7 @@ export * from './reaction';
14
14
 
15
15
  export * from './channel';
16
16
  export * from './subChannel';
17
+ export * from './marker';
17
18
 
18
19
  export * from './message';
19
20
  export * from './token';
@@ -0,0 +1,68 @@
1
+ import { activeUser } from '../client';
2
+ import { date } from '.';
3
+
4
+ export const generateChannelMarker = ({
5
+ entityId,
6
+ ...params
7
+ }: MakeRequired<Amity.ChannelMarker, 'entityId'>): Amity.ChannelMarker => ({
8
+ entityId,
9
+ userId: activeUser.userId,
10
+ unreadCount: 0,
11
+ isDeleted: false,
12
+ createdAt: date,
13
+ updatedAt: date,
14
+ ...params,
15
+ });
16
+
17
+ export const generateSubChannelMarker = ({
18
+ feedId,
19
+ entityId,
20
+ ...params
21
+ }: MakeRequired<Amity.SubChannelMarker, 'feedId' | 'entityId'>): Amity.SubChannelMarker => ({
22
+ feedId,
23
+ entityId,
24
+ userId: activeUser.userId,
25
+ readToSegment: 0,
26
+ deliveredToSegment: 0,
27
+ unreadCount: 0,
28
+ createdAt: date,
29
+ updatedAt: date,
30
+ ...params,
31
+ });
32
+
33
+ export const generateMessageMarker = ({
34
+ feedId,
35
+ contentId,
36
+ ...params
37
+ }: MakeRequired<Amity.MessageMarker, 'feedId' | 'contentId'>): Amity.MessageMarker => ({
38
+ feedId,
39
+ contentId,
40
+ creatorId: activeUser.userId,
41
+ readCount: 0,
42
+ deliveredCount: 0,
43
+ createdAt: date,
44
+ updatedAt: date,
45
+ ...params,
46
+ });
47
+ export const generateFeedMarker = ({
48
+ feedId,
49
+ entityId,
50
+ ...params
51
+ }: MakeRequired<Amity.FeedMarker, 'feedId' | 'entityId'>): Amity.FeedMarker => ({
52
+ feedId,
53
+ entityId,
54
+ lastSegment: 0,
55
+ isDeleted: false,
56
+ createdAt: date,
57
+ updatedAt: date,
58
+ ...params,
59
+ });
60
+
61
+ export const generateUserMarker = (params?: Partial<Amity.UserMarker>): Amity.UserMarker => ({
62
+ lastSyncAt: date,
63
+ userId: activeUser.userId,
64
+ unreadCount: 0,
65
+ createdAt: date,
66
+ updatedAt: date,
67
+ ...params,
68
+ });
@@ -1,5 +1,4 @@
1
- import { convertFromRaw } from '~/message/utils';
2
- import { channel1, file11, user11 } from '.';
1
+ import { channel1, user11, file11 } from '.';
3
2
 
4
3
  export function generateRawMessage(params?: Partial<Amity.RawMessage>): Amity.RawMessage {
5
4
  return {
@@ -28,7 +27,48 @@ export function generateRawMessage(params?: Partial<Amity.RawMessage>): Amity.Ra
28
27
  };
29
28
  }
30
29
 
31
- export const message11: Amity.Message = convertFromRaw(
30
+ export const convertRawMessage = ({
31
+ channelPublicId,
32
+ childCount,
33
+ creatorPublicId,
34
+ mentionedUsers,
35
+ messageFeedId,
36
+ reactionCount,
37
+ reactions,
38
+ referenceId,
39
+ segment,
40
+ messageId,
41
+ myReactions,
42
+ ...rest
43
+ }: Amity.RawMessage): Amity.Message => ({
44
+ ...rest,
45
+ messageId,
46
+ channelId: channelPublicId,
47
+ channelSegment: segment,
48
+ childrenNumber: childCount,
49
+ creatorId: creatorPublicId,
50
+ mentionees: mentionedUsers?.map(mention => {
51
+ if (mention.type === 'channel') return mention;
52
+
53
+ return { type: 'user', userIds: mention.userPublicIds };
54
+ }),
55
+ reactions: reactions ?? {},
56
+ reactionsCount: reactionCount,
57
+ subChannelId: messageFeedId,
58
+ uniqueId: messageId,
59
+ myReactions: [],
60
+ readCount: 0,
61
+ deliveredCount: 0,
62
+ });
63
+
64
+ export const convertRawMessagePayload = (
65
+ rawPayload: Amity.MessagePayload,
66
+ ): Amity.ProcessedMessagePayload => ({
67
+ ...rawPayload,
68
+ messages: rawPayload.messages.map(convertRawMessage),
69
+ });
70
+
71
+ export const message11: Amity.Message = convertRawMessage(
32
72
  generateRawMessage({
33
73
  channelPublicId: channel1.channelId,
34
74
  creatorPublicId: user11.userId,
@@ -1,11 +1,14 @@
1
+ import * as activeUserModule from '~/client/api/activeUser';
1
2
  import { convertFromRaw } from '~/subChannel/utils';
2
- import { channel1, date, user11 } from '.';
3
+ import { activeUser } from '~/utils/tests';
4
+
5
+ import { channelRaw1, date, user11 } from '.';
3
6
 
4
7
  export function generateRawSubChannel(params?: Partial<Amity.RawSubChannel>): Amity.RawSubChannel {
5
8
  return {
6
9
  channelId: 'private-channel-id',
7
- channelPublicId: channel1.channelId,
8
- channelType: channel1.type,
10
+ channelPublicId: channelRaw1.channelId,
11
+ channelType: channelRaw1.type,
9
12
  childCount: 0,
10
13
  createdAt: date,
11
14
  creatorId: 'private-user-id',
@@ -13,7 +16,7 @@ export function generateRawSubChannel(params?: Partial<Amity.RawSubChannel>): Am
13
16
  isDeleted: false,
14
17
  lastMessageId: 'xxx',
15
18
  lastMessageTimestamp: date,
16
- messageFeedId: `${channel1.channelId}--sub-channel-id`,
19
+ messageFeedId: `${channelRaw1.channelId}--sub-channel-id`,
17
20
  name: 'sub channel name',
18
21
  path: 'sub-channel-path',
19
22
  updatedAt: date,
@@ -21,9 +24,17 @@ export function generateRawSubChannel(params?: Partial<Amity.RawSubChannel>): Am
21
24
  };
22
25
  }
23
26
 
27
+ export const convertSubChannelFromRaw = (
28
+ subChannel: Amity.RawSubChannel,
29
+ marker?: Amity.SubChannelMarker,
30
+ ): Amity.SubChannel => {
31
+ jest.spyOn(activeUserModule, 'getActiveUser').mockReturnValue(activeUser);
32
+ return convertFromRaw(subChannel, marker);
33
+ };
34
+
24
35
  export function generateSubChannel(params?: Record<string, any>): Amity.SubChannel {
25
36
  return {
26
- ...convertFromRaw(generateRawSubChannel()),
37
+ ...convertSubChannelFromRaw(generateRawSubChannel()),
27
38
  ...params,
28
39
  };
29
40
  }
@@ -6,8 +6,11 @@ export const encodeJson = (value: Record<string, any>) => encode(JSON.stringify(
6
6
  * Used instead of asserting an async request is completed, when the async
7
7
  * request is not the API being tested. This util makes tests readable by moving
8
8
  * all assertions to the end of the test
9
+ *
10
+ * Use 500ms by default on MacBook Pro Core-i5 2020. Lower than this is not enough
11
+ * to wait for async task before assertions.
9
12
  */
10
- export const pause = (ms = 50) =>
13
+ export const pause = (ms = 500) =>
11
14
  new Promise(resolve => {
12
15
  setTimeout(resolve, ms);
13
16
  });
@@ -1,17 +0,0 @@
1
- /**
2
- * ```js
3
- * import { startReading } from '@amityco/ts-sdk'
4
- * const success = await startReading('foo')
5
- * ```
6
- *
7
- * Mark all messages as read and start reading message inside channel
8
- *
9
- * @param subChannelId - The channel ID to start reading.
10
- * @param userId - The user ID of channel member.
11
- * @return A success boolean if the channel reading of the sub channel had begun.
12
- *
13
- * @category Message API
14
- * @async
15
- */
16
- export declare const startReading: (subChannelId: string, userId?: string | undefined) => Promise<boolean | undefined>;
17
- //# sourceMappingURL=startReading.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startReading.d.ts","sourceRoot":"","sources":["../../../src/channel/api/startReading.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,iBAAwB,MAAM,8DAiCtD,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * ```js
3
- * import { stopReading } from '@amityco/ts-sdk'
4
- * const success = await stopReading('foo')
5
- * ```
6
- *
7
- * Stop reading message inside channel
8
- *
9
- * @param subChannelId - The channel ID to stop reading.
10
- * @return A success boolean if the sub channel reading was halted.
11
- *
12
- * @category Message API
13
- * @async
14
- */
15
- export declare const stopReading: (subChannelId: string) => Promise<boolean | undefined>;
16
- //# sourceMappingURL=stopReading.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stopReading.d.ts","sourceRoot":"","sources":["../../../src/channel/api/stopReading.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,iBAAwB,MAAM,iCA8BrD,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=startReading.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startReading.test.d.ts","sourceRoot":"","sources":["../../../../src/channel/api/tests/startReading.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=stopReading.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stopReading.test.d.ts","sourceRoot":"","sources":["../../../../src/channel/api/tests/stopReading.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import { getActiveClient } from '~/client/api';
2
- import { synchronousWSCall } from '~/core/transports';
3
- import { pullFromCache, pushToCache } from '~/cache/api';
4
-
5
- /* begin_public_function
6
- id: channel.start_reading
7
- */
8
- /**
9
- * ```js
10
- * import { startReading } from '@amityco/ts-sdk'
11
- * const success = await startReading('foo')
12
- * ```
13
- *
14
- * Mark all messages as read and start reading message inside channel
15
- *
16
- * @param subChannelId - The channel ID to start reading.
17
- * @param userId - The user ID of channel member.
18
- * @return A success boolean if the channel reading of the sub channel had begun.
19
- *
20
- * @category Message API
21
- * @async
22
- */
23
- export const startReading = async (subChannelId: string, userId = getActiveClient().userId) => {
24
- const client = getActiveClient();
25
- client.log('message/startReading', { subChannelId });
26
-
27
- const subChannel = pullFromCache<Amity.SubChannel>(['subChannel', 'get', subChannelId]);
28
-
29
- if (!subChannel) {
30
- return;
31
- }
32
-
33
- const { channelId } = subChannel.data;
34
- const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId]);
35
-
36
- if (!channel || channel.data.defaultSubChannelId !== subChannelId) {
37
- return;
38
- }
39
-
40
- const update: Amity.Channel = {
41
- ...channel.data,
42
- // @ts-ignore
43
- localReading: true,
44
- defaultSubChannelUnreadCount: 0,
45
- defaultSubChannelHasUnreadMention: false,
46
- };
47
-
48
- pushToCache(['channel', 'get', channelId], update);
49
- client.emitter.emit('local.channel.updated', { channels: [update] });
50
-
51
- const result = await synchronousWSCall<Record<never, never>>(client, 'channel.startReading', {
52
- channelId,
53
- });
54
-
55
- return !!result;
56
- };
57
- /* end_public_function */
@@ -1,53 +0,0 @@
1
- import { getActiveClient } from '~/client/api';
2
- import { synchronousWSCall } from '~/core/transports';
3
- import { pullFromCache, pushToCache } from '~/cache/api';
4
-
5
- /* begin_public_function
6
- id: channel.stop_reading
7
- */
8
- /**
9
- * ```js
10
- * import { stopReading } from '@amityco/ts-sdk'
11
- * const success = await stopReading('foo')
12
- * ```
13
- *
14
- * Stop reading message inside channel
15
- *
16
- * @param subChannelId - The channel ID to stop reading.
17
- * @return A success boolean if the sub channel reading was halted.
18
- *
19
- * @category Message API
20
- * @async
21
- */
22
- export const stopReading = async (subChannelId: string) => {
23
- const client = getActiveClient();
24
- client.log('message/stopReading', { subChannelId });
25
-
26
- const subChannel = pullFromCache<Amity.SubChannel>(['subChannel', 'get', subChannelId]);
27
-
28
- if (!subChannel) {
29
- return;
30
- }
31
-
32
- const { channelId } = subChannel.data;
33
- const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId]);
34
-
35
- if (!channel || channel.data.defaultSubChannelId !== subChannelId) {
36
- return;
37
- }
38
-
39
- const update: Amity.Channel = {
40
- ...channel.data,
41
- // @ts-ignore
42
- localReading: false,
43
- };
44
-
45
- pushToCache(['channel', 'get', channelId], update);
46
-
47
- const result = await synchronousWSCall<Record<never, never>>(client, 'channel.stopReading', {
48
- channelId,
49
- });
50
-
51
- return !!result;
52
- };
53
- /* end_public_function */
@@ -1,25 +0,0 @@
1
- import { channel1, client } from '~/utils/tests';
2
-
3
- import { startReading } from '../startReading';
4
-
5
- const resolvedSuccessValue = { status: 'success', data: {} };
6
- const resolvedErrorValue = { status: 'error', message: 'error', code: 500000 };
7
-
8
- // FIXME: wait for marker service
9
- xdescribe('startReading', () => {
10
- test('should resolves true value', async () => {
11
- client.ws.emit = jest
12
- .fn()
13
- .mockImplementationOnce((event, data, callback) => callback(resolvedSuccessValue));
14
-
15
- await expect(startReading(channel1.channelId)).resolves.toEqual(true);
16
- });
17
-
18
- test('should throw an error if request fails', async () => {
19
- client.ws.emit = jest
20
- .fn()
21
- .mockImplementationOnce((event, data, callback) => callback(resolvedErrorValue));
22
-
23
- await expect(startReading(channel1.channelId)).rejects.toThrow(resolvedErrorValue.message);
24
- });
25
- });
@@ -1,25 +0,0 @@
1
- import { channel1, client } from '~/utils/tests';
2
-
3
- import { stopReading } from '../stopReading';
4
-
5
- const resolvedSuccessValue = { status: 'success', data: {} };
6
- const resolvedErrorValue = { status: 'error', message: 'error', code: 500000 };
7
-
8
- // FIXME: wait for marker service
9
- xdescribe('stopReading', () => {
10
- test('should resolves true value', async () => {
11
- client.ws.emit = jest
12
- .fn()
13
- .mockImplementationOnce((event, data, callback) => callback(resolvedSuccessValue));
14
-
15
- await expect(stopReading(channel1.channelId)).resolves.toEqual(true);
16
- });
17
-
18
- test('should throw an error if request fails', async () => {
19
- client.ws.emit = jest
20
- .fn()
21
- .mockImplementationOnce((event, data, callback) => callback(resolvedErrorValue));
22
-
23
- await expect(stopReading(channel1.channelId)).rejects.toThrow(resolvedErrorValue.message);
24
- });
25
- });