@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
@@ -0,0 +1,87 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { client, connectClient, disconnectClient, generateRawMessage, user11 } from '~/utils/tests';
3
+ import { ASCApiError } from '~/core/errors';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ import { unflagMessage } from '..';
7
+ import { convertFromRaw } from '../../utils';
8
+
9
+ jest.mock('~/core/events', () => ({
10
+ __esModule: true,
11
+ ...jest.requireActual('~/core/events'),
12
+ fireEvent: jest.fn(),
13
+ }));
14
+
15
+ const unflaggedRawMessage = generateRawMessage();
16
+ const message = convertFromRaw(unflaggedRawMessage);
17
+ const { messageId } = unflaggedRawMessage;
18
+
19
+ const unflaggedMessageQueryResponse = {
20
+ data: {
21
+ messages: [unflaggedRawMessage],
22
+ users: [user11],
23
+ },
24
+ };
25
+
26
+ describe('unflagMessage', () => {
27
+ beforeEach(disableCache);
28
+ beforeAll(connectClient);
29
+ afterAll(disconnectClient);
30
+
31
+ // integration_test_id: afb432ec-52eb-49d7-8054-c162e3b60535
32
+ test('it should unflag message with messageId', async () => {
33
+ const expected = true;
34
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedMessageQueryResponse);
35
+
36
+ const received = await unflagMessage(messageId);
37
+
38
+ expect(received).toBe(expected);
39
+ });
40
+
41
+ // integration_test_id: 5c6b5a0a-628d-4834-8453-d11df656dea8
42
+ test('it should throw error with 400400 when sending invalid messageId', async () => {
43
+ client.http.delete = jest
44
+ .fn()
45
+ .mockRejectedValueOnce(
46
+ new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
47
+ );
48
+
49
+ await expect(unflagMessage(messageId)).rejects.toThrow('400400');
50
+ });
51
+
52
+ test('it should call fire event method', async () => {
53
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedMessageQueryResponse);
54
+
55
+ const recieved = await unflagMessage(messageId);
56
+ const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
57
+
58
+ expect(recieved).toBe(true);
59
+ expect(recievedMqttString).toBe('message.unflagged');
60
+ });
61
+
62
+ test('it should call the appropriate api', async () => {
63
+ const apimock = jest.fn();
64
+ const expected = `/api/v5/messages/${encodeURIComponent('messageId')}/flags`;
65
+
66
+ client.http.delete = apimock.mockResolvedValue({ data: {} });
67
+
68
+ await unflagMessage('messageId');
69
+
70
+ const received = apimock.mock.lastCall[0];
71
+
72
+ expect(received).toBe(expected);
73
+ });
74
+
75
+ test('it should add data to cache', async () => {
76
+ enableCache();
77
+ const expected = message;
78
+ client.http.delete = jest.fn().mockResolvedValue(unflaggedMessageQueryResponse);
79
+
80
+ await unflagMessage(messageId);
81
+ const recieved = pullFromCache(['message', 'get', messageId]);
82
+
83
+ expect(recieved?.data).toStrictEqual(expected);
84
+
85
+ disableCache();
86
+ });
87
+ });
@@ -0,0 +1,40 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+
5
+ import { fireEvent } from '~/core/events';
6
+ import { prepareMessagePayload } from '~/messageRepository/utils';
7
+
8
+ /* begin_public_function
9
+ id: message.unflag
10
+ */
11
+ /**
12
+ * ```js
13
+ * import { MessageRepository } from '@amityco/ts-sdk'
14
+ * const unflagged = await MessageRepository.unflag(messageId)
15
+ * ```
16
+ *
17
+ * @param messageId of the message to unflag
18
+ * @returns boolean to indicate success
19
+ *
20
+ * @category Report API
21
+ * @async
22
+ * */
23
+ export const unflagMessage = async (messageId: Amity.Message['messageId']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('message/unflag', messageId);
26
+
27
+ const { data: payload } = await client.http.delete<Amity.MessagePayload>(
28
+ `/api/v5/messages/${encodeURIComponent(messageId)}/flags`,
29
+ );
30
+
31
+ if (client.cache) {
32
+ const messagePayload = await prepareMessagePayload(payload);
33
+ ingestInCache(messagePayload);
34
+ }
35
+
36
+ fireEvent('message.unflagged', payload);
37
+
38
+ return !!payload;
39
+ };
40
+ /* end_public_function */
@@ -33,6 +33,10 @@ export const updateMessage = async (
33
33
  const client = getActiveClient();
34
34
  client.log('message/updateMessage', patch);
35
35
 
36
+ console.warn(
37
+ 'MessageRepository.updateMessage will be replaced with MessageRepository.editMessage',
38
+ );
39
+
36
40
  const { data: payload } = await client.http.put<Amity.MessagePayload>(
37
41
  `/api/v5/messages/${encodeURIComponent(messageId)}`,
38
42
  convertParams(patch),
@@ -31,7 +31,7 @@ export const onMessageDeleted = (callback: Amity.Listener<Amity.Message>): Amity
31
31
 
32
32
  const disposers = [
33
33
  createEventSubscriber(client, 'message/onMessageDeleted', 'message.deleted', filter),
34
- createEventSubscriber(client, 'local.message.deleted', 'local.message.deleted', payload =>
34
+ createEventSubscriber(client, 'message/onMessageDeleted', 'local.message.deleted', payload =>
35
35
  callback(payload.messages[0]),
36
36
  ),
37
37
  ];
@@ -100,21 +100,20 @@ export const getMessages = (
100
100
  collection.data = [...new Set([message.messageId, ...collection.data])];
101
101
 
102
102
  pushToCache(cacheKey, collection);
103
- disposers.push(() => dropFromCache(cacheKey));
104
103
 
105
104
  responder(collection);
106
105
  };
107
106
 
108
- const onFetch = () => {
107
+ const onFetch = (initial = false) => {
109
108
  const collection = pullFromCache<Amity.MessageLiveCollectionCache>(cacheKey)?.data;
110
109
 
111
110
  const messages = collection?.data ?? [];
112
111
 
113
- if (messages.length > 0 && !collection?.params?.page) return;
112
+ if (!initial && messages.length > 0 && !collection?.params?.page) return;
114
113
 
115
114
  const query = createQuery(queryMessages, {
116
115
  ...queryParams,
117
- page: collection?.params?.page ?? { limit },
116
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
118
117
  });
119
118
 
120
119
  runQuery(
@@ -151,7 +150,8 @@ export const getMessages = (
151
150
  onMessageReactionRemoved(realtimeRouter('onReactionRemoved')),
152
151
  );
153
152
 
154
- onFetch();
153
+ onFetch(true);
154
+ disposers.push(() => dropFromCache(cacheKey));
155
155
 
156
156
  return () => {
157
157
  log(`getMessages(tmpid: ${timestamp}) > dispose`);
@@ -7,9 +7,6 @@ import { pushToTombstone } from '~/cache/api/pushToTombstone';
7
7
 
8
8
  import { getPost } from './getPost';
9
9
 
10
- /* begin_public_function
11
- id: post.soft_delete, post.hard_delete
12
- */
13
10
  /**
14
11
  * ```js
15
12
  * import { deletePost } from '@amityco/ts-sdk'
@@ -21,7 +18,7 @@ import { getPost } from './getPost';
21
18
  * @param postId The {@link Amity.Post} ID to delete
22
19
  * @return A success boolean if the {@link Amity.Post} was deleted
23
20
  *
24
- * @category Post API
21
+ * @private
25
22
  * @async
26
23
  */
27
24
  export const deletePost = async (
@@ -29,11 +26,9 @@ export const deletePost = async (
29
26
  permanent = false,
30
27
  ): Promise<Amity.Post> => {
31
28
  const client = getActiveClient();
32
- client.log('post/deletePost', postId);
33
29
 
34
30
  const post = await getPost(postId);
35
31
 
36
- // API-FIX: This endpoint has not been implemented yet.
37
32
  await client.http.delete<{ success: boolean }>(`/api/v4/posts/${encodeURIComponent(postId)}`, {
38
33
  params: {
39
34
  postId,
@@ -82,4 +77,3 @@ export const deletePost = async (
82
77
 
83
78
  return deleted;
84
79
  };
85
- /* end_public_function */
@@ -0,0 +1,58 @@
1
+ import { getActiveClient } from '~/client/api';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+ import { prepareMembershipPayload } from '~/group/utils';
6
+
7
+ /* begin_public_function
8
+ id: post.edit
9
+ */
10
+ /**
11
+ * ```js
12
+ * import { PostRepository } from '@amityco/ts-sdk'
13
+ * const updated = await PostRepository.editPost(postId, {
14
+ * data: { text: 'hello world' }
15
+ * })
16
+ * ```
17
+ *
18
+ * Updates an {@link Amity.Post}
19
+ *
20
+ * @param postId The ID of the {@link Amity.Post} to edit
21
+ * @param patch The patch data to apply
22
+ * @returns the updated {@link Amity.Post} object
23
+ *
24
+ * @category Post API
25
+ * @async
26
+ */
27
+ export const editPost = async <T extends Amity.PostContentType>(
28
+ postId: Amity.Post['postId'],
29
+ patch: Patch<Amity.Post, 'data' | 'metadata' | 'mentionees' | 'tags'> & {
30
+ attachments?: {
31
+ type: T;
32
+ fileId: Amity.File['fileId'];
33
+ }[];
34
+ },
35
+ ): Promise<Amity.Cached<Amity.Post>> => {
36
+ const client = getActiveClient();
37
+ client.log('user/editPost', patch);
38
+
39
+ const { data: payload } = await client.http.put<Amity.PostPayload>(
40
+ `/api/v4/posts/${encodeURIComponent(postId)}`,
41
+ patch,
42
+ );
43
+
44
+ const data = prepareMembershipPayload(payload, 'communityUsers');
45
+
46
+ const cachedAt = client.cache && Date.now();
47
+ if (client.cache) ingestInCache(data, { cachedAt });
48
+
49
+ fireEvent('post.updated', data);
50
+
51
+ const { posts } = data;
52
+
53
+ return {
54
+ data: posts.find(post => post.postId === postId)!,
55
+ cachedAt,
56
+ };
57
+ };
58
+ /* end_public_function */
@@ -0,0 +1,38 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+ import { prepareMembershipPayload } from '~/group/utils';
6
+
7
+ /* begin_public_function
8
+ id: post.flag
9
+ */
10
+ /**
11
+ * ```js
12
+ * import { PostRepository } from '@amityco/ts-sdk'
13
+ * const flagged = await PostRepository.flagPost(postId)
14
+ * ```
15
+ *
16
+ * @param postId of the post to flag
17
+ * @returns a boolean
18
+ *
19
+ * @category Post API
20
+ * @async
21
+ * */
22
+ export const flagPost = async (postId: Amity.Post['postId']): Promise<boolean> => {
23
+ const client = getActiveClient();
24
+ client.log('post/flagPost', postId);
25
+
26
+ const { data: payload } = await client.http.post<Amity.PostPayload>(
27
+ `/api/v3/posts/${encodeURIComponent(postId)}/flag`,
28
+ );
29
+
30
+ if (client.cache) {
31
+ ingestInCache(prepareMembershipPayload(payload, 'communityUsers'));
32
+ }
33
+
34
+ fireEvent('post.flagged', payload);
35
+
36
+ return !!payload;
37
+ };
38
+ /* end_public_function */
@@ -0,0 +1,30 @@
1
+ import { getActiveClient } from '~/client/api';
2
+
3
+ import { deletePost } from './deletePost';
4
+
5
+ /* begin_public_function
6
+ id: post.hard_delete
7
+ */
8
+ /**
9
+ * ```js
10
+ * import { hardDeletePost } from '@amityco/ts-sdk'
11
+ * const success = await hardDeletePost('foobar')
12
+ * ```
13
+ *
14
+ * Hard deletes a {@link Amity.Post}
15
+ *
16
+ * @param postId The {@link Amity.Post} ID to be hard delete
17
+ * @return A success boolean if the {@link Amity.Post} was deleted
18
+ *
19
+ * @category Post API
20
+ * @async
21
+ */
22
+ export const hardDeletePost = async (postId: Amity.Post['postId']): Promise<Amity.Post> => {
23
+ const client = getActiveClient();
24
+ client.log('post/hardDeletePost', postId);
25
+
26
+ const hardDeleted = await deletePost(postId, true);
27
+
28
+ return hardDeleted;
29
+ };
30
+ /* end_public_function */
@@ -2,7 +2,15 @@ export * from './getPostByIds';
2
2
 
3
3
  export * from './createPost';
4
4
  export * from './updatePost';
5
+ export * from './editPost';
6
+
5
7
  export * from './deletePost';
8
+ export * from './softDeletePost';
9
+ export * from './hardDeletePost';
6
10
 
7
11
  export * from './approvePost';
8
12
  export * from './declinePost';
13
+
14
+ export * from './flagPost';
15
+ export * from './unflagPost';
16
+ export * from './isPostFlaggedByMe';
@@ -0,0 +1,33 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { synchronousWSCall } from '~/core/transports';
3
+
4
+ /* begin_public_function
5
+ id: post.check_flag_by_me
6
+ */
7
+ /**
8
+ * ```js
9
+ * import { PostRepository } from '@amityco/ts-sdk'
10
+ * const isReported = await PostRepository.isPostFlaggedByMe('post', postId)
11
+ * ```
12
+ *
13
+ * @param postId of the post to check if flagged by current user
14
+ * @returns `true` if the post is flagged by me, `false` if doesn't.
15
+ *
16
+ * @category Post API
17
+ * @async
18
+ * */
19
+ export const isPostFlaggedByMe = async (postId: Amity.Post['postId']): Promise<boolean> => {
20
+ const client = getActiveClient();
21
+ client.log('post/isPostFlaggedByMe', postId);
22
+
23
+ const { result, isFlagByMe } =
24
+ (await synchronousWSCall<{
25
+ result?: boolean;
26
+ isFlagByMe?: boolean;
27
+ }>(client, 'v3/post.isflagbyme', {
28
+ postId,
29
+ })) ?? {};
30
+
31
+ return result ?? isFlagByMe ?? false;
32
+ };
33
+ /* end_public_function */
@@ -0,0 +1,30 @@
1
+ import { getActiveClient } from '~/client/api';
2
+
3
+ import { deletePost } from './deletePost';
4
+
5
+ /* begin_public_function
6
+ id: post.soft_delete
7
+ */
8
+ /**
9
+ * ```js
10
+ * import { PostRepository } from '@amityco/ts-sdk'
11
+ * const success = await PostRepository.softDeletePost('foobar')
12
+ * ```
13
+ *
14
+ * Soft deletes a {@link Amity.Post}
15
+ *
16
+ * @param postId The {@link Amity.Post} ID to soft delete
17
+ * @return A success boolean if the {@link Amity.Post} was deleted
18
+ *
19
+ * @category Post API
20
+ * @async
21
+ */
22
+ export const softDeletePost = async (postId: Amity.Post['postId']): Promise<Amity.Post> => {
23
+ const client = getActiveClient();
24
+ client.log('post/softDeletePost', postId);
25
+
26
+ const softDeleted = await deletePost(postId, false);
27
+
28
+ return softDeleted;
29
+ };
30
+ /* end_public_function */
@@ -0,0 +1,39 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+
5
+ import { fireEvent } from '~/core/events';
6
+ import { prepareMembershipPayload } from '~/group/utils';
7
+
8
+ /* begin_public_function
9
+ id: post.unflag
10
+ */
11
+ /**
12
+ * ```js
13
+ * import { PostRepository } from '@amityco/ts-sdk'
14
+ * const unflagged = await PostRepository.unflagPost(postId)
15
+ * ```
16
+ *
17
+ * @param postId of the post to unflag
18
+ * @returns the unflag post result
19
+ *
20
+ * @category Post API
21
+ * @async
22
+ * */
23
+ export const unflagPost = async (postId: Amity.Post['postId']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('post/unflagPost', postId);
26
+
27
+ const { data: payload } = await client.http.delete<Amity.PostPayload>(
28
+ `/api/v3/posts/${encodeURIComponent(postId)}/unflag`,
29
+ );
30
+
31
+ if (client.cache) {
32
+ ingestInCache(prepareMembershipPayload(payload, 'communityUsers'));
33
+ }
34
+
35
+ fireEvent('post.unflagged', payload);
36
+
37
+ return !!payload;
38
+ };
39
+ /* end_public_function */
@@ -36,6 +36,10 @@ export const updatePost = async <T extends Amity.PostContentType>(
36
36
  const client = getActiveClient();
37
37
  client.log('user/updatePost', patch);
38
38
 
39
+ console.warn(
40
+ 'Deprecation: updatePost has been renamed to editPost. Update post API will be deprecated soon.',
41
+ );
42
+
39
43
  const { data: payload } = await client.http.put<Amity.PostPayload>(
40
44
  `/api/v4/posts/${encodeURIComponent(postId)}`,
41
45
  patch,
@@ -135,21 +135,20 @@ export const getPosts = (
135
135
  }
136
136
 
137
137
  pushToCache(cacheKey, collection);
138
- disposers.push(() => dropFromCache(cacheKey));
139
138
 
140
139
  responder(collection);
141
140
  };
142
141
 
143
- const onFetch = () => {
142
+ const onFetch = (initial = false) => {
144
143
  const collection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
145
144
 
146
145
  const posts = collection?.data ?? [];
147
146
 
148
- if (posts.length > 0 && !collection?.params?.page) return;
147
+ if (!initial && posts.length > 0 && !collection?.params?.page) return;
149
148
 
150
149
  const query = createQuery(queryPosts, {
151
150
  ...queryParams,
152
- page: collection?.params?.page ?? { limit },
151
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
153
152
  });
154
153
 
155
154
  runQuery(
@@ -187,7 +186,8 @@ export const getPosts = (
187
186
  onPostReactionRemoved(realtimeRouter('onReactionRemoved')),
188
187
  );
189
188
 
190
- onFetch();
189
+ onFetch(true);
190
+ disposers.push(() => dropFromCache(cacheKey));
191
191
 
192
192
  return () => {
193
193
  log(`getPosts(tmpid: ${timestamp}) > dispose`);
@@ -91,16 +91,16 @@ export const getReactions = (
91
91
  responder(collection);
92
92
  };
93
93
 
94
- const onFetch = () => {
94
+ const onFetch = (initial = false) => {
95
95
  const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(cacheKey)?.data;
96
96
 
97
97
  const reactions = collection?.data ?? [];
98
98
 
99
- if (reactions.length > 0 && !collection?.params?.page) return;
99
+ if (!initial && reactions.length > 0 && !collection?.params?.page) return;
100
100
 
101
101
  const query = createQuery(queryReactions, {
102
102
  ...queryParams,
103
- page: collection?.params?.page ?? { limit },
103
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
104
104
  });
105
105
 
106
106
  runQuery(
@@ -136,7 +136,7 @@ export const getReactions = (
136
136
  ),
137
137
  );
138
138
 
139
- onFetch();
139
+ onFetch(true);
140
140
 
141
141
  return () => {
142
142
  log(`liveReactions(tmpid: ${timestamp}) > dispose`);
@@ -8,7 +8,7 @@ import { prepareMessagePayload } from '~/messageRepository/utils';
8
8
  import REFERENCE_TYPES from '../constants/referenceTypes';
9
9
 
10
10
  /* begin_public_function
11
- id: user.flag, message.flag, post.flag, comment.flag
11
+ id: message.flag, post.flag, comment.flag
12
12
  */
13
13
  /**
14
14
  * ```js
@@ -1,14 +1,5 @@
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
-
11
- import { onUserFlagged } from '~/userRepository/events';
1
+ import { disableCache } from '~/cache/api';
2
+ import { client, connectClient, disconnectClient } from '~/utils/tests';
12
3
 
13
4
  import { createReport } from '..';
14
5
  import REFERENCE_TYPES from '../../constants/referenceTypes';
@@ -18,48 +9,10 @@ describe('createReport', () => {
18
9
  beforeAll(connectClient);
19
10
  afterAll(disconnectClient);
20
11
 
21
- // integration_test_id: ca4a760f-4342-4a99-9f3c-6c17cd205ca6
22
- test('it should flag user with userId', async () => {
23
- const expected = true;
24
- client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
25
-
26
- const received = await createReport('user', flaggedUser.userId);
27
-
28
- expect(received).toBe(expected);
29
- });
30
-
31
- // integration_test_id: e8d0f02c-3558-488f-bdae-e70835d8cefb
32
- test('it should throw error with 400400 when sending invalid userId', async () => {
33
- client.http.post = jest
34
- .fn()
35
- .mockRejectedValueOnce(
36
- new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
37
- );
38
-
39
- await expect(createReport('user', flaggedUser.userId)).rejects.toThrow('400400');
40
- });
41
-
42
- test('it should fire event for user', async () => {
43
- let dispose;
44
- const expected = flaggedUser;
45
-
46
- client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
47
-
48
- const callbackPromise = new Promise(resolve => {
49
- dispose = onUserFlagged(resolve);
50
- }).finally(dispose);
51
-
52
- const recieved = await createReport('user', flaggedUser.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 flagging message');
59
13
  test.todo('it should fire event for flagging post');
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')}/flag`],
64
17
  ['message', 'messageId', `/api/v5/messages/${encodeURIComponent('messageId')}/flags`],
65
18
  ];
@@ -78,17 +31,4 @@ describe('createReport', () => {
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 = flaggedUser;
85
- client.http.post = jest.fn().mockResolvedValue(flaggedUserQueryResponse);
86
-
87
- await createReport('user', flaggedUser.userId);
88
- const recieved = pullFromCache(['user', 'get', flaggedUser.userId]);
89
-
90
- expect(recieved?.data).toBe(expected);
91
-
92
- disableCache();
93
- });
94
34
  });