@amityco/ts-sdk 6.2.0 → 6.2.1-0cf9bee.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 (236) hide show
  1. package/README.md +0 -4
  2. package/dist/@types/core/events.d.ts +1 -0
  3. package/dist/@types/core/events.d.ts.map +1 -1
  4. package/dist/@types/core/payload.d.ts +4 -0
  5. package/dist/@types/core/payload.d.ts.map +1 -1
  6. package/dist/@types/domains/channel.d.ts +5 -1
  7. package/dist/@types/domains/channel.d.ts.map +1 -1
  8. package/dist/@types/domains/marker.d.ts +2 -1
  9. package/dist/@types/domains/marker.d.ts.map +1 -1
  10. package/dist/channelRepsitory/api/createChannel.d.ts +1 -1
  11. package/dist/channelRepsitory/api/markAsRead.d.ts +1 -1
  12. package/dist/channelRepsitory/api/muteChannel.d.ts.map +1 -1
  13. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
  14. package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts.map +1 -1
  15. package/dist/communityRepository/communityMembership/api/index.d.ts +3 -0
  16. package/dist/communityRepository/communityMembership/api/index.d.ts.map +1 -0
  17. package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts.map +1 -1
  18. package/dist/communityRepository/communityMembership/api/tests/addMembers.test.d.ts.map +1 -0
  19. package/dist/communityRepository/communityMembership/api/tests/removeMembers.test.d.ts.map +1 -0
  20. package/dist/communityRepository/communityMembership/index.d.ts +1 -0
  21. package/dist/communityRepository/communityMembership/index.d.ts.map +1 -1
  22. package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
  23. package/dist/communityRepository/communityModeration/api/banMembers.d.ts +16 -0
  24. package/dist/communityRepository/communityModeration/api/banMembers.d.ts.map +1 -0
  25. package/dist/communityRepository/communityModeration/api/index.d.ts +2 -2
  26. package/dist/communityRepository/communityModeration/api/index.d.ts.map +1 -1
  27. package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts +2 -0
  28. package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts.map +1 -0
  29. package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts +2 -0
  30. package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts.map +1 -0
  31. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts +16 -0
  32. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts.map +1 -0
  33. package/dist/core/events.d.ts +3 -3
  34. package/dist/core/events.d.ts.map +1 -1
  35. package/dist/core/query/filtering.d.ts +1 -0
  36. package/dist/core/query/filtering.d.ts.map +1 -1
  37. package/dist/core/query/sorting.d.ts.map +1 -1
  38. package/dist/core/transports/mqtt.d.ts +1 -1
  39. package/dist/core/transports/mqtt.d.ts.map +1 -1
  40. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts +36 -0
  41. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts.map +1 -0
  42. package/dist/feedRepository/api/index.d.ts +1 -0
  43. package/dist/feedRepository/api/index.d.ts.map +1 -1
  44. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  45. package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts +2 -0
  46. package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts.map +1 -0
  47. package/dist/fileRepository/api/index.d.ts +3 -3
  48. package/dist/fileRepository/api/test/uploadFile.test.d.ts +2 -0
  49. package/dist/fileRepository/api/test/uploadFile.test.d.ts.map +1 -0
  50. package/dist/fileRepository/api/test/uploadImage.test.d.ts +2 -0
  51. package/dist/fileRepository/api/test/uploadImage.test.d.ts.map +1 -0
  52. package/dist/fileRepository/api/test/uploadVideo.test.d.ts +2 -0
  53. package/dist/fileRepository/api/test/uploadVideo.test.d.ts.map +1 -0
  54. package/dist/fileRepository/api/{createFile.d.ts → uploadFile.d.ts} +4 -4
  55. package/dist/fileRepository/api/uploadFile.d.ts.map +1 -0
  56. package/dist/fileRepository/api/{createImage.d.ts → uploadImage.d.ts} +4 -4
  57. package/dist/fileRepository/api/uploadImage.d.ts.map +1 -0
  58. package/dist/fileRepository/api/{createVideo.d.ts → uploadVideo.d.ts} +5 -5
  59. package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -0
  60. package/dist/index.cjs.js +795 -193
  61. package/dist/index.esm.js +794 -194
  62. package/dist/index.umd.js +4 -4
  63. package/dist/marker/events/index.d.ts +1 -0
  64. package/dist/marker/events/index.d.ts.map +1 -1
  65. package/dist/marker/events/onFeedlMarkerUpdated.d.ts +17 -0
  66. package/dist/marker/events/onFeedlMarkerUpdated.d.ts.map +1 -0
  67. package/dist/messageRepository/api/createMessage.d.ts +1 -1
  68. package/dist/messageRepository/api/editMessage.d.ts +38 -0
  69. package/dist/messageRepository/api/editMessage.d.ts.map +1 -0
  70. package/dist/messageRepository/api/flagMessage.d.ts +14 -0
  71. package/dist/messageRepository/api/flagMessage.d.ts.map +1 -0
  72. package/dist/messageRepository/api/index.d.ts +5 -1
  73. package/dist/messageRepository/api/index.d.ts.map +1 -1
  74. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts +14 -0
  75. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts.map +1 -0
  76. package/dist/messageRepository/api/markAsDelivered.d.ts +2 -2
  77. package/dist/messageRepository/api/{deleteMessage.d.ts → softDeleteMessage.d.ts} +6 -6
  78. package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -0
  79. package/dist/messageRepository/api/tests/editMessage.test.d.ts +2 -0
  80. package/dist/messageRepository/api/tests/editMessage.test.d.ts.map +1 -0
  81. package/dist/messageRepository/api/tests/flagMessage.test.d.ts +2 -0
  82. package/dist/messageRepository/api/tests/flagMessage.test.d.ts.map +1 -0
  83. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts +2 -0
  84. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts.map +1 -0
  85. package/dist/messageRepository/api/unflagMessage.d.ts +14 -0
  86. package/dist/messageRepository/api/unflagMessage.d.ts.map +1 -0
  87. package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
  88. package/dist/postRepository/api/deletePost.d.ts +1 -1
  89. package/dist/postRepository/api/deletePost.d.ts.map +1 -1
  90. package/dist/postRepository/api/editPost.d.ts +24 -0
  91. package/dist/postRepository/api/editPost.d.ts.map +1 -0
  92. package/dist/postRepository/api/flagPost.d.ts +14 -0
  93. package/dist/postRepository/api/flagPost.d.ts.map +1 -0
  94. package/dist/postRepository/api/hardDeletePost.d.ts +16 -0
  95. package/dist/postRepository/api/hardDeletePost.d.ts.map +1 -0
  96. package/dist/postRepository/api/index.d.ts +6 -0
  97. package/dist/postRepository/api/index.d.ts.map +1 -1
  98. package/dist/postRepository/api/isPostFlaggedByMe.d.ts +14 -0
  99. package/dist/postRepository/api/isPostFlaggedByMe.d.ts.map +1 -0
  100. package/dist/postRepository/api/softDeletePost.d.ts +16 -0
  101. package/dist/postRepository/api/softDeletePost.d.ts.map +1 -0
  102. package/dist/postRepository/api/unflagPost.d.ts +14 -0
  103. package/dist/postRepository/api/unflagPost.d.ts.map +1 -0
  104. package/dist/postRepository/api/updatePost.d.ts.map +1 -1
  105. package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
  106. package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
  107. package/dist/userRepository/api/flagUser.d.ts +14 -0
  108. package/dist/userRepository/api/flagUser.d.ts.map +1 -0
  109. package/dist/userRepository/api/index.d.ts +3 -0
  110. package/dist/userRepository/api/index.d.ts.map +1 -1
  111. package/dist/userRepository/api/isUserFlaggedByMe.d.ts +14 -0
  112. package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -0
  113. package/dist/userRepository/{relationship/block/api → api}/queryBlockedUsers.d.ts +2 -2
  114. package/dist/userRepository/api/queryBlockedUsers.d.ts.map +1 -0
  115. package/dist/userRepository/api/tests/flagUser.test.d.ts +2 -0
  116. package/dist/userRepository/api/tests/flagUser.test.d.ts.map +1 -0
  117. package/dist/userRepository/api/tests/queryBlockedUsers.test.d.ts.map +1 -0
  118. package/dist/userRepository/api/tests/unflagUser.test.d.ts +2 -0
  119. package/dist/userRepository/api/tests/unflagUser.test.d.ts.map +1 -0
  120. package/dist/userRepository/api/unflagUser.d.ts +14 -0
  121. package/dist/userRepository/api/unflagUser.d.ts.map +1 -0
  122. package/dist/userRepository/observers/getBlockedUsers.d.ts +2 -0
  123. package/dist/userRepository/observers/getBlockedUsers.d.ts.map +1 -0
  124. package/dist/userRepository/observers/index.d.ts +1 -0
  125. package/dist/userRepository/observers/index.d.ts.map +1 -1
  126. package/dist/userRepository/relationship/block/observers/getBlockedUsers.d.ts.map +1 -1
  127. package/package.json +1 -1
  128. package/src/@types/core/events.ts +1 -0
  129. package/src/@types/core/payload.ts +5 -0
  130. package/src/@types/domains/channel.ts +7 -2
  131. package/src/@types/domains/marker.ts +1 -0
  132. package/src/categoryRepository/observers/getCategories.ts +4 -4
  133. package/src/channelRepsitory/api/markAsRead.ts +1 -1
  134. package/src/channelRepsitory/api/muteChannel.ts +8 -0
  135. package/src/channelRepsitory/api/tests/muteChannel.test.ts +12 -0
  136. package/src/channelRepsitory/channelMembership/observers/getMembers.ts +6 -6
  137. package/src/channelRepsitory/observers/getChannels.ts +5 -5
  138. package/src/channelRepsitory/observers/tests/getChannels.test.ts +3 -9
  139. package/src/client/utils/markerSyncEngine.ts +2 -14
  140. package/src/commentRepository/observers/getComments.ts +5 -5
  141. package/src/communityRepository/communityMembership/api/index.ts +2 -0
  142. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.ts +1 -1
  143. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.ts +1 -1
  144. package/src/communityRepository/communityMembership/index.ts +1 -0
  145. package/src/communityRepository/communityMembership/observers/getMembers.ts +6 -8
  146. package/src/communityRepository/communityModeration/api/banMembers.ts +50 -0
  147. package/src/communityRepository/communityModeration/api/index.ts +3 -2
  148. package/src/communityRepository/communityModeration/api/test/banMembers.test.ts +70 -0
  149. package/src/communityRepository/communityModeration/api/test/unbanMembers.test.ts +70 -0
  150. package/src/communityRepository/communityModeration/api/unbanMembers.ts +50 -0
  151. package/src/communityRepository/observers/getCommunities.ts +5 -5
  152. package/src/core/query/filtering.ts +22 -2
  153. package/src/core/query/sorting.ts +2 -4
  154. package/src/core/query/tests/filtering.test.ts +6 -0
  155. package/src/core/query/tests/runQuery.test.ts +3 -3
  156. package/src/core/transports/mqtt.ts +3 -2
  157. package/src/feedRepository/api/getCustomRankingGlobalFeed.ts +117 -0
  158. package/src/feedRepository/api/index.ts +1 -0
  159. package/src/feedRepository/api/queryGlobalFeed.ts +12 -4
  160. package/src/feedRepository/api/test/getCustomRankingGlobalFeed.test.ts +130 -0
  161. package/src/feedRepository/api/test/queryGlobalFeed.test.ts +1 -15
  162. package/src/fileRepository/api/index.ts +3 -3
  163. package/src/fileRepository/api/test/uploadFile.test.ts +69 -0
  164. package/src/fileRepository/api/test/{createImage.test.ts → uploadImage.test.ts} +7 -7
  165. package/src/fileRepository/api/test/{createVideo.test.ts → uploadVideo.test.ts} +8 -8
  166. package/src/fileRepository/api/{createFile.ts → uploadFile.ts} +4 -6
  167. package/src/fileRepository/api/{createImage.ts → uploadImage.ts} +4 -6
  168. package/src/fileRepository/api/{createVideo.ts → uploadVideo.ts} +5 -7
  169. package/src/marker/events/index.ts +1 -0
  170. package/src/marker/events/onFeedlMarkerUpdated.ts +34 -0
  171. package/src/messageRepository/api/editMessage.ts +100 -0
  172. package/src/messageRepository/api/flagMessage.ts +40 -0
  173. package/src/messageRepository/api/index.ts +7 -1
  174. package/src/messageRepository/api/isMessageFlaggedByMe.ts +30 -0
  175. package/src/messageRepository/api/markAsDelivered.ts +2 -2
  176. package/src/messageRepository/api/{deleteMessage.ts → softDeleteMessage.ts} +8 -8
  177. package/src/messageRepository/api/tests/deleteMessage.test.ts +11 -11
  178. package/src/messageRepository/api/tests/{updateMessage.test.ts → editMessage.test.ts} +10 -10
  179. package/src/messageRepository/api/tests/flagMessage.test.ts +87 -0
  180. package/src/messageRepository/api/tests/unflagMessage.test.ts +87 -0
  181. package/src/messageRepository/api/unflagMessage.ts +40 -0
  182. package/src/messageRepository/api/updateMessage.ts +4 -0
  183. package/src/messageRepository/events/onMessageDeleted.ts +1 -1
  184. package/src/messageRepository/observers/getMessages.ts +5 -5
  185. package/src/postRepository/api/deletePost.ts +1 -7
  186. package/src/postRepository/api/editPost.ts +58 -0
  187. package/src/postRepository/api/flagPost.ts +38 -0
  188. package/src/postRepository/api/hardDeletePost.ts +30 -0
  189. package/src/postRepository/api/index.ts +8 -0
  190. package/src/postRepository/api/isPostFlaggedByMe.ts +33 -0
  191. package/src/postRepository/api/softDeletePost.ts +30 -0
  192. package/src/postRepository/api/unflagPost.ts +39 -0
  193. package/src/postRepository/api/updatePost.ts +4 -0
  194. package/src/postRepository/observers/getPosts.ts +5 -5
  195. package/src/reactionRepository/observers/getReactions.ts +4 -4
  196. package/src/report/api/createReport.ts +1 -1
  197. package/src/report/api/tests/createReport.test.ts +2 -62
  198. package/src/report/api/tests/deleteReport.test.ts +2 -62
  199. package/src/subChannelRepository/api/startReadingAPI.ts +13 -0
  200. package/src/subChannelRepository/api/stopReadingAPI.ts +13 -0
  201. package/src/userRepository/api/flagUser.ts +37 -0
  202. package/src/userRepository/api/index.ts +4 -0
  203. package/src/userRepository/api/isUserFlaggedByMe.ts +33 -0
  204. package/src/userRepository/{relationship/block/api → api}/queryBlockedUsers.ts +3 -2
  205. package/src/userRepository/api/tests/flagUser.test.ts +81 -0
  206. package/src/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.ts +1 -1
  207. package/src/userRepository/api/tests/unflagUser.test.ts +80 -0
  208. package/src/userRepository/api/unflagUser.ts +37 -0
  209. package/src/userRepository/observers/getBlockedUsers.ts +104 -0
  210. package/src/userRepository/observers/getUsers.ts +4 -4
  211. package/src/userRepository/observers/index.ts +1 -0
  212. package/src/userRepository/observers/tests/getUsers.test.ts +3 -9
  213. package/src/userRepository/relationship/block/observers/getBlockedUsers.ts +5 -96
  214. package/src/userRepository/relationship/follow/observers/getFollowers.ts +4 -4
  215. package/src/userRepository/relationship/follow/observers/getFollowings.ts +4 -4
  216. package/dist/communityRepository/communityModeration/api/test/addMembers.test.d.ts.map +0 -1
  217. package/dist/communityRepository/communityModeration/api/test/removeMembers.test.d.ts.map +0 -1
  218. package/dist/fileRepository/api/createFile.d.ts.map +0 -1
  219. package/dist/fileRepository/api/createImage.d.ts.map +0 -1
  220. package/dist/fileRepository/api/createVideo.d.ts.map +0 -1
  221. package/dist/fileRepository/api/test/createImage.test.d.ts +0 -2
  222. package/dist/fileRepository/api/test/createImage.test.d.ts.map +0 -1
  223. package/dist/fileRepository/api/test/createVideo.test.d.ts +0 -2
  224. package/dist/fileRepository/api/test/createVideo.test.d.ts.map +0 -1
  225. package/dist/messageRepository/api/deleteMessage.d.ts.map +0 -1
  226. package/dist/messageRepository/api/tests/updateMessage.test.d.ts +0 -2
  227. package/dist/messageRepository/api/tests/updateMessage.test.d.ts.map +0 -1
  228. package/dist/userRepository/relationship/block/api/queryBlockedUsers.d.ts.map +0 -1
  229. package/dist/userRepository/relationship/block/api/tests/queryBlockedUsers.test.d.ts.map +0 -1
  230. /package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts +0 -0
  231. /package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts +0 -0
  232. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.d.ts +0 -0
  233. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.d.ts +0 -0
  234. /package/dist/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.d.ts +0 -0
  235. /package/src/communityRepository/{communityModeration → communityMembership}/api/addMembers.ts +0 -0
  236. /package/src/communityRepository/{communityModeration → communityMembership}/api/removeMembers.ts +0 -0
@@ -1,14 +1,5 @@
1
- import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
- import {
3
- client,
4
- connectClient,
5
- disconnectClient,
6
- flaggedUser as unflaggedUser,
7
- flaggedUserQueryResponse as unflaggedUserQueryResponse,
8
- } from '~/utils/tests';
9
- import { ASCApiError } from '~/core/errors';
10
-
11
- import { onUserUnflagged } from '~/userRepository/events';
1
+ import { disableCache } from '~/cache/api';
2
+ import { client, connectClient, disconnectClient } from '~/utils/tests';
12
3
 
13
4
  import { deleteReport } from '..';
14
5
  import REFERENCE_TYPES from '../../constants/referenceTypes';
@@ -18,48 +9,10 @@ describe('deleteReport', () => {
18
9
  beforeAll(connectClient);
19
10
  afterAll(disconnectClient);
20
11
 
21
- // integration_test_id: fddf1d63-98e2-4296-ab3a-4e2b55044f89
22
- test('it should unflag user with userId', async () => {
23
- const expected = true;
24
- client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
25
-
26
- const received = await deleteReport('user', unflaggedUser.userId);
27
-
28
- expect(received).toBe(expected);
29
- });
30
-
31
- // integration_test_id: a95a0784-56ce-4b17-ac1b-0f1c50a361ef
32
- test('it should throw error with 400400 when sending invalid userId', async () => {
33
- client.http.delete = jest
34
- .fn()
35
- .mockRejectedValueOnce(
36
- new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
37
- );
38
-
39
- await expect(deleteReport('user', unflaggedUser.userId)).rejects.toThrow('400400');
40
- });
41
-
42
- test('it should fire event for user', async () => {
43
- let dispose;
44
- const expected = unflaggedUser;
45
-
46
- client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
47
-
48
- const callbackPromise = new Promise(resolve => {
49
- dispose = onUserUnflagged(resolve);
50
- }).finally(dispose);
51
-
52
- const recieved = await deleteReport('user', unflaggedUser.userId);
53
-
54
- expect(recieved).toBe(true);
55
- await expect(callbackPromise).resolves.toEqual(expect.objectContaining(expected));
56
- });
57
-
58
12
  test.todo('it should fire event for unflagging message');
59
13
  test.todo('it should fire event for unflagging delete');
60
14
 
61
15
  const tests: [keyof typeof REFERENCE_TYPES, string, string][] = [
62
- ['user', 'userId', `/api/v4/me/flags/${encodeURIComponent('userId')}`],
63
16
  ['post', 'postId', `/api/v3/posts/${encodeURIComponent('postId')}/unflag`],
64
17
  ['message', 'messageId', `/api/v5/messages/${encodeURIComponent('messageId')}/flags`],
65
18
  ];
@@ -78,17 +31,4 @@ describe('deleteReport', () => {
78
31
  expect(received).toBe(expected);
79
32
  },
80
33
  );
81
-
82
- test('it should add data to cache', async () => {
83
- enableCache();
84
- const expected = unflaggedUser;
85
- client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
86
-
87
- await deleteReport('user', unflaggedUser.userId);
88
- const recieved = pullFromCache(['user', 'get', unflaggedUser.userId]);
89
-
90
- expect(recieved?.data).toBe(expected);
91
-
92
- disableCache();
93
- });
94
34
  });
@@ -1,5 +1,11 @@
1
1
  import { ingestInCache } from '~/cache/api/ingestInCache';
2
2
  import { getActiveClient } from '~/client/api';
3
+ import {
4
+ channelMarkerReducer,
5
+ feedMarkerReducer,
6
+ subChannelMarkerReducer,
7
+ userMarkerReducer,
8
+ } from '~/marker/utils/markerDispatcher';
3
9
 
4
10
  /**
5
11
  * ```js
@@ -26,8 +32,15 @@ export const startReadingAPI = async (
26
32
  `/api/v1/markers/message-feeds/${messageFeedId}/start-reading`,
27
33
  );
28
34
 
35
+ const { userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers } = payload;
36
+
29
37
  const cachedAt = client.cache && Date.now();
30
38
  if (client.cache) ingestInCache(payload as Amity.StartReadingPayload, { cachedAt });
31
39
 
40
+ feedMarkerReducer('local.feedMarker.fetched', feedMarkers);
41
+ channelMarkerReducer('local.channelMarker.fetched', userEntityMarkers);
42
+ subChannelMarkerReducer('local.subChannelMarker.fetched', userFeedMarkers);
43
+ userMarkerReducer('local.userMarker.fetched', userMarkers);
44
+
32
45
  return true;
33
46
  };
@@ -1,5 +1,11 @@
1
1
  import { ingestInCache } from '~/cache/api/ingestInCache';
2
2
  import { getActiveClient } from '~/client/api';
3
+ import {
4
+ channelMarkerReducer,
5
+ feedMarkerReducer,
6
+ subChannelMarkerReducer,
7
+ userMarkerReducer,
8
+ } from '~/marker/utils/markerDispatcher';
3
9
 
4
10
  /**
5
11
  * ```js
@@ -26,8 +32,15 @@ export const stopReadingAPI = async (
26
32
  `/api/v1/markers/message-feeds/${messageFeedId}/stop-reading`,
27
33
  );
28
34
 
35
+ const { userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers } = payload;
36
+
29
37
  const cachedAt = client.cache && Date.now();
30
38
  if (client.cache) ingestInCache(payload as Amity.StopReadingPayload, { cachedAt });
31
39
 
40
+ feedMarkerReducer('local.feedMarker.fetched', feedMarkers);
41
+ channelMarkerReducer('local.channelMarker.fetched', userEntityMarkers);
42
+ subChannelMarkerReducer('local.subChannelMarker.fetched', userFeedMarkers);
43
+ userMarkerReducer('local.userMarker.fetched', userMarkers);
44
+
32
45
  return true;
33
46
  };
@@ -0,0 +1,37 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ /* begin_public_function
7
+ id: user.flag
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { UserRepository } from '@amityco/ts-sdk'
12
+ * const flagged = await UserRepository.flagUser('userId')
13
+ * ```
14
+ *
15
+ * @param userId The ID of the user to add a be flagged
16
+ * @returns the created report result
17
+ *
18
+ * @category User API
19
+ * @async
20
+ * */
21
+ export const flagUser = async (userId: Amity.User['userId']): Promise<boolean> => {
22
+ const client = getActiveClient();
23
+ client.log('user/flagUser', userId);
24
+
25
+ const { data: payload } = await client.http.post<Amity.UserPayload>(
26
+ `api/v4/me/flags/${encodeURIComponent(userId)}`,
27
+ );
28
+
29
+ if (client.cache) {
30
+ ingestInCache(payload);
31
+ }
32
+
33
+ fireEvent('user.flagged', payload);
34
+
35
+ return !!payload;
36
+ };
37
+ /* end_public_function */
@@ -1,2 +1,6 @@
1
1
  export { getUserByIds } from './getUserByIds';
2
2
  export { updateUser } from './updateUser';
3
+
4
+ export { flagUser } from './flagUser';
5
+ export { unflagUser } from './unflagUser';
6
+ export { isUserFlaggedByMe } from './isUserFlaggedByMe';
@@ -0,0 +1,33 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { synchronousWSCall } from '~/core/transports';
3
+
4
+ /* begin_public_function
5
+ id: user.check_flag_by_me
6
+ */
7
+ /**
8
+ * ```js
9
+ * import { UserRepository } from '@amityco/ts-sdk'
10
+ * const isFlagged = await UserRepository.isUserFlaggedByMe('post', postId)
11
+ * ```
12
+ *
13
+ * @param userId The ID of the thing to check a report to.
14
+ * @returns `true` if the report is created by me, `false` if doesn't.
15
+ *
16
+ * @category Report API
17
+ * @async
18
+ * */
19
+ export const isUserFlaggedByMe = async (userId: Amity.User['userId']): Promise<boolean> => {
20
+ const client = getActiveClient();
21
+ client.log('user/isUserFlaggedByMe', userId);
22
+
23
+ const { result, isFlagByMe } =
24
+ (await synchronousWSCall<{
25
+ result?: boolean;
26
+ isFlagByMe?: boolean;
27
+ }>(client, 'user.isFlagByMe', {
28
+ userId,
29
+ })) ?? {};
30
+
31
+ return result ?? isFlagByMe ?? false;
32
+ };
33
+ /* end_public_function */
@@ -6,8 +6,8 @@ import { toPageRaw } from '~/core/query';
6
6
 
7
7
  /**
8
8
  * ```js
9
- * import { queryBlockedUsers } from '@amityco/ts-sdk'
10
- * const { data: users, prevPage, nextPage, total } = await queryBlockedUsers({ page: Amity.PageRaw, limit: number })
9
+ * import { UserRepository } from '@amityco/ts-sdk'
10
+ * const { data: users, prevPage, nextPage, total } = await UserRepository.queryBlockedUsers({ page: Amity.PageRaw, limit: number })
11
11
  * ```
12
12
  *
13
13
  * @param query The query parameters
@@ -16,6 +16,7 @@ import { toPageRaw } from '~/core/query';
16
16
  * @category Block API
17
17
  * @async
18
18
  */
19
+
19
20
  export const queryBlockedUsers = async (
20
21
  query?: Amity.QueryBlockedUser,
21
22
  ): Promise<
@@ -0,0 +1,81 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import {
3
+ client,
4
+ connectClient,
5
+ disconnectClient,
6
+ flaggedUser,
7
+ flaggedUserQueryResponse,
8
+ } from '~/utils/tests';
9
+ import { ASCApiError } from '~/core/errors';
10
+ import { fireEvent } from '~/core/events';
11
+
12
+ import { flagUser } from '..';
13
+
14
+ jest.mock('~/core/events', () => ({
15
+ __esModule: true,
16
+ ...jest.requireActual('~/core/events'),
17
+ fireEvent: jest.fn(),
18
+ }));
19
+
20
+ describe('flagUser', () => {
21
+ beforeEach(disableCache);
22
+ beforeAll(connectClient);
23
+ afterAll(disconnectClient);
24
+
25
+ // integration_test_id: ca4a760f-4342-4a99-9f3c-6c17cd205ca6
26
+ test('it should flag user with userId', async () => {
27
+ const expected = true;
28
+ client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
29
+
30
+ const received = await flagUser(flaggedUser.userId);
31
+
32
+ expect(received).toBe(expected);
33
+ });
34
+
35
+ // integration_test_id: e8d0f02c-3558-488f-bdae-e70835d8cefb
36
+ test('it should throw error with 400400 when sending invalid userId', async () => {
37
+ client.http.post = jest
38
+ .fn()
39
+ .mockRejectedValueOnce(
40
+ new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
41
+ );
42
+
43
+ await expect(flagUser(flaggedUser.userId)).rejects.toThrow('400400');
44
+ });
45
+
46
+ test('it should call fire event method', async () => {
47
+ client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
48
+
49
+ const recieved = await flagUser(flaggedUser.userId);
50
+ const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
51
+
52
+ expect(recieved).toBe(true);
53
+ expect(recievedMqttString).toBe('user.flagged');
54
+ });
55
+
56
+ test('it should call the appropriate api', async () => {
57
+ const apimock = jest.fn();
58
+ const expected = `api/v4/me/flags/${encodeURIComponent('userId')}`;
59
+
60
+ client.http.post = apimock.mockResolvedValue({ data: {} });
61
+
62
+ await flagUser('userId');
63
+
64
+ const received = apimock.mock.lastCall[0];
65
+
66
+ expect(received).toBe(expected);
67
+ });
68
+
69
+ test('it should add data to cache', async () => {
70
+ enableCache();
71
+ const expected = flaggedUser;
72
+ client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
73
+
74
+ await flagUser(flaggedUser.userId);
75
+ const recieved = pullFromCache(['user', 'get', flaggedUser.userId]);
76
+
77
+ expect(recieved?.data).toBe(expected);
78
+
79
+ disableCache();
80
+ });
81
+ });
@@ -1,5 +1,5 @@
1
1
  import { client, user12, user13 } from '~/utils/tests';
2
- import { queryBlockedUsers } from '~/userRepository/relationship/block/api/queryBlockedUsers';
2
+ import { queryBlockedUsers } from '~/userRepository/api/queryBlockedUsers';
3
3
  import { disableCache, enableCache } from '~/cache/api';
4
4
  import { generateBlockedUsers } from '~/utils/tests/dummy/block';
5
5
 
@@ -0,0 +1,80 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import {
3
+ client,
4
+ connectClient,
5
+ disconnectClient,
6
+ flaggedUser as unflaggedUser,
7
+ flaggedUserQueryResponse as unflaggedUserQueryResponse,
8
+ } from '~/utils/tests';
9
+ import { ASCApiError } from '~/core/errors';
10
+ import { fireEvent } from '~/core/events';
11
+
12
+ import { unflagUser } from '..';
13
+
14
+ jest.mock('~/core/events', () => ({
15
+ __esModule: true,
16
+ ...jest.requireActual('~/core/events'),
17
+ fireEvent: jest.fn(),
18
+ }));
19
+
20
+ describe('unflagUser', () => {
21
+ beforeEach(disableCache);
22
+ beforeAll(connectClient);
23
+ afterAll(disconnectClient);
24
+
25
+ // integration_test_id: fddf1d63-98e2-4296-ab3a-4e2b55044f89
26
+ test('it should unflag user with userId', async () => {
27
+ const expected = true;
28
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
29
+
30
+ const received = await unflagUser(unflaggedUser.userId);
31
+
32
+ expect(received).toBe(expected);
33
+ });
34
+
35
+ // integration_test_id: a95a0784-56ce-4b17-ac1b-0f1c50a361ef
36
+ test('it should throw error with 400400 when sending invalid userId', async () => {
37
+ client.http.delete = jest
38
+ .fn()
39
+ .mockRejectedValueOnce(
40
+ new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
41
+ );
42
+
43
+ await expect(unflagUser(unflaggedUser.userId)).rejects.toThrow('400400');
44
+ });
45
+
46
+ test('it should fire event for user', async () => {
47
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
48
+
49
+ const recieved = await unflagUser(unflaggedUser.userId);
50
+ const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
51
+
52
+ expect(recieved).toBe(true);
53
+ expect(recievedMqttString).toBe('user.unflagged');
54
+ });
55
+
56
+ test('it should call the appropriate api', async () => {
57
+ const apimock = jest.fn();
58
+ const expected = `/api/v4/me/flags/${encodeURIComponent('userId')}`;
59
+
60
+ client.http.delete = apimock.mockResolvedValue({ data: {} });
61
+
62
+ await unflagUser('userId');
63
+ const received = apimock.mock.lastCall[0];
64
+
65
+ expect(received).toBe(expected);
66
+ });
67
+
68
+ test('it should add data to cache', async () => {
69
+ enableCache();
70
+ const expected = unflaggedUser;
71
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedUserQueryResponse);
72
+
73
+ await unflagUser(unflaggedUser.userId);
74
+ const recieved = pullFromCache(['user', 'get', unflaggedUser.userId]);
75
+
76
+ expect(recieved?.data).toBe(expected);
77
+
78
+ disableCache();
79
+ });
80
+ });
@@ -0,0 +1,37 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ /* begin_public_function
7
+ id: user.unflag
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { UserRepository } from '@amityco/ts-sdk'
12
+ * const unflagged = await UserRepository.unflagUser('post', postId)
13
+ * ```
14
+ *
15
+ * @param userId The ID of the user to unflag
16
+ * @returns the deleted report result
17
+ *
18
+ * @category User API
19
+ * @async
20
+ * */
21
+ export const unflagUser = async (userId: Amity.User['userId']): Promise<boolean> => {
22
+ const client = getActiveClient();
23
+ client.log('user/unflag', userId);
24
+
25
+ const { data: payload } = await client.http.delete<Amity.UserPayload>(
26
+ `/api/v4/me/flags/${encodeURIComponent(userId)}`,
27
+ );
28
+
29
+ if (client.cache) {
30
+ ingestInCache(payload);
31
+ }
32
+
33
+ fireEvent('user.unflagged', payload);
34
+
35
+ return !!payload;
36
+ };
37
+ /* end_public_function */
@@ -0,0 +1,104 @@
1
+ /* eslint-disable no-use-before-define */
2
+ import { getActiveClient } from '~/client';
3
+ import {
4
+ COLLECTION_DEFAULT_CACHING_POLICY,
5
+ COLLECTION_DEFAULT_PAGINATION_LIMIT,
6
+ ENABLE_CACHE_MESSAGE,
7
+ } from '~/utils/constants';
8
+ import { dropFromCache, pullFromCache, pushToCache } from '~/cache/api';
9
+ import { createQuery, queryOptions, runQuery, toToken } from '~/core/query';
10
+ import { CACHE_SHORTEN_LIFESPAN } from '~/cache/utils';
11
+ import { getResolver } from '~/core/model';
12
+ import { queryBlockedUsers } from '../api/queryBlockedUsers';
13
+
14
+ export const getBlockedUsers = (
15
+ params: Amity.BlockedUsersLiveCollection,
16
+ callback: Amity.LiveCollectionCallback<Amity.User>,
17
+ config?: Amity.LiveCollectionConfig,
18
+ ) => {
19
+ const { log, cache } = getActiveClient();
20
+
21
+ if (!cache) {
22
+ console.log(ENABLE_CACHE_MESSAGE);
23
+ }
24
+
25
+ const timestamp = Date.now();
26
+ log(`getBlockedUsers(tmpid: ${timestamp}) > listen`);
27
+
28
+ const { limit: queryLimit, token } = params;
29
+
30
+ const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
31
+ const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
32
+
33
+ const disposers: Amity.Unsubscriber[] = [];
34
+ const cacheKey = ['blockedUsers', 'collection', {}];
35
+
36
+ const responder = (data: Amity.BlockedUserLiveCollectionCache) => {
37
+ const users: Amity.User[] =
38
+ data.data
39
+ .map(userId => pullFromCache<Amity.User>(['user', 'get', userId])!)
40
+ .filter(Boolean)
41
+ .map(({ data }) => data) ?? [];
42
+
43
+ callback({
44
+ onNextPage: onFetch,
45
+ data: users,
46
+ hasNextPage: !!data.params?.page,
47
+ loading: data.loading,
48
+ error: data.error,
49
+ });
50
+ };
51
+
52
+ /*
53
+ * const realtimeRouter = () => {
54
+ * @TODO: At the time of creating this method category does not have any
55
+ * observers
56
+ *};
57
+ */
58
+
59
+ const onFetch = (initial = false) => {
60
+ const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(cacheKey)?.data;
61
+
62
+ const users = collection?.data ?? [];
63
+
64
+ if (!initial && users.length > 0 && !collection?.params.page) return;
65
+
66
+ const query = createQuery(queryBlockedUsers, {
67
+ limit,
68
+ token: toToken(!initial ? collection?.params.page : undefined, 'afterbeforeraw'),
69
+ });
70
+
71
+ runQuery(
72
+ query,
73
+ // @ts-ignore
74
+ ({ data: result, loading, error, nextPage: page, total }) => {
75
+ const data = {
76
+ loading,
77
+ error,
78
+ params: { page, total },
79
+ data: users,
80
+ };
81
+
82
+ if (result) {
83
+ data.data = [...new Set([...users, ...result.map(getResolver('user'))])];
84
+ }
85
+
86
+ pushToCache(cacheKey, data);
87
+ responder(data);
88
+ },
89
+ queryOptions(policy, CACHE_SHORTEN_LIFESPAN),
90
+ );
91
+ };
92
+
93
+ disposers.push(() => {
94
+ // @TODO -> update once observers added
95
+ });
96
+
97
+ onFetch(true);
98
+
99
+ return () => {
100
+ log(`getCategories(tmpid: ${timestamp}) > dispose`);
101
+ disposers.forEach(fn => fn());
102
+ dropFromCache(cacheKey);
103
+ };
104
+ };
@@ -114,16 +114,16 @@ export const getUsers = (
114
114
  responder(collection);
115
115
  };
116
116
 
117
- const onFetch = () => {
117
+ const onFetch = (initial = false) => {
118
118
  const collection = pullFromCache<Amity.UserLiveCollectionCache>(cacheKey)?.data;
119
119
 
120
120
  const users = collection?.data ?? [];
121
121
 
122
- if (users.length > 0 && !collection?.params.page) return;
122
+ if (!initial && users.length > 0 && !collection?.params.page) return;
123
123
 
124
124
  const query = createQuery(queryUsers, {
125
125
  ...queryParams,
126
- page: collection?.params.page ?? { limit },
126
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
127
127
  });
128
128
 
129
129
  runQuery(
@@ -156,7 +156,7 @@ export const getUsers = (
156
156
  onUserFlagCleared(realtimeRouter('onFlagCleared')),
157
157
  );
158
158
 
159
- onFetch();
159
+ onFetch(true);
160
160
 
161
161
  return () => {
162
162
  log(`liveUsers(tmpid: ${timestamp}) > dispose`);
@@ -1,3 +1,4 @@
1
1
  export { getUser } from './getUser';
2
2
  export { getUsers } from './getUsers';
3
3
  export { observeUser } from './observeUser';
4
+ export { getBlockedUsers } from './getBlockedUsers';
@@ -65,17 +65,11 @@ describe('getUsers', () => {
65
65
  getUsers(params, callback);
66
66
  await pause();
67
67
 
68
- expect(callback).toHaveBeenCalledTimes(2);
68
+ // The second `getUsers` call fetches data from the cache,
69
+ // so there is no loading state and the callback only fires once.
70
+ expect(callback).toHaveBeenCalledTimes(1);
69
71
  expect(callback).toHaveBeenNthCalledWith(
70
72
  1,
71
- expect.objectContaining(
72
- getSnapshot({
73
- data: payload.users,
74
- }),
75
- ),
76
- );
77
- expect(callback).toHaveBeenNthCalledWith(
78
- 2,
79
73
  expect.objectContaining(
80
74
  getSnapshot({
81
75
  data: payload.users,