@amityco/ts-sdk 6.2.1-b60a2f4.0 → 6.2.1-b68e715.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 (159) hide show
  1. package/README.md +0 -4
  2. package/dist/@types/domains/channel.d.ts +5 -1
  3. package/dist/@types/domains/channel.d.ts.map +1 -1
  4. package/dist/channelRepsitory/api/createChannel.d.ts +1 -1
  5. package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts.map +1 -1
  6. package/dist/communityRepository/communityMembership/api/index.d.ts +3 -0
  7. package/dist/communityRepository/communityMembership/api/index.d.ts.map +1 -0
  8. package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts.map +1 -1
  9. package/dist/communityRepository/communityMembership/api/tests/addMembers.test.d.ts.map +1 -0
  10. package/dist/communityRepository/communityMembership/api/tests/removeMembers.test.d.ts.map +1 -0
  11. package/dist/communityRepository/communityMembership/index.d.ts +1 -0
  12. package/dist/communityRepository/communityMembership/index.d.ts.map +1 -1
  13. package/dist/communityRepository/communityModeration/api/index.d.ts +0 -2
  14. package/dist/communityRepository/communityModeration/api/index.d.ts.map +1 -1
  15. package/dist/feedRepository/api/index.d.ts +1 -0
  16. package/dist/feedRepository/api/index.d.ts.map +1 -1
  17. package/dist/fileRepository/api/index.d.ts +3 -3
  18. package/dist/fileRepository/api/test/uploadFile.test.d.ts +2 -0
  19. package/dist/fileRepository/api/test/uploadFile.test.d.ts.map +1 -0
  20. package/dist/fileRepository/api/test/uploadImage.test.d.ts +2 -0
  21. package/dist/fileRepository/api/test/uploadImage.test.d.ts.map +1 -0
  22. package/dist/fileRepository/api/test/uploadVideo.test.d.ts +2 -0
  23. package/dist/fileRepository/api/test/uploadVideo.test.d.ts.map +1 -0
  24. package/dist/fileRepository/api/{createFile.d.ts → uploadFile.d.ts} +4 -4
  25. package/dist/fileRepository/api/uploadFile.d.ts.map +1 -0
  26. package/dist/fileRepository/api/{createImage.d.ts → uploadImage.d.ts} +4 -4
  27. package/dist/fileRepository/api/uploadImage.d.ts.map +1 -0
  28. package/dist/fileRepository/api/{createVideo.d.ts → uploadVideo.d.ts} +5 -5
  29. package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -0
  30. package/dist/index.cjs.js +657 -170
  31. package/dist/index.esm.js +657 -170
  32. package/dist/index.umd.js +4 -4
  33. package/dist/messageRepository/api/createMessage.d.ts +1 -1
  34. package/dist/messageRepository/api/editMessage.d.ts +38 -0
  35. package/dist/messageRepository/api/editMessage.d.ts.map +1 -0
  36. package/dist/messageRepository/api/flagMessage.d.ts +14 -0
  37. package/dist/messageRepository/api/flagMessage.d.ts.map +1 -0
  38. package/dist/messageRepository/api/index.d.ts +5 -1
  39. package/dist/messageRepository/api/index.d.ts.map +1 -1
  40. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts +14 -0
  41. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts.map +1 -0
  42. package/dist/messageRepository/api/{deleteMessage.d.ts → softDeleteMessage.d.ts} +6 -6
  43. package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -0
  44. package/dist/messageRepository/api/tests/editMessage.test.d.ts +2 -0
  45. package/dist/messageRepository/api/tests/editMessage.test.d.ts.map +1 -0
  46. package/dist/messageRepository/api/tests/flagMessage.test.d.ts +2 -0
  47. package/dist/messageRepository/api/tests/flagMessage.test.d.ts.map +1 -0
  48. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts +2 -0
  49. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts.map +1 -0
  50. package/dist/messageRepository/api/unflagMessage.d.ts +14 -0
  51. package/dist/messageRepository/api/unflagMessage.d.ts.map +1 -0
  52. package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
  53. package/dist/postRepository/api/deletePost.d.ts +1 -1
  54. package/dist/postRepository/api/deletePost.d.ts.map +1 -1
  55. package/dist/postRepository/api/editPost.d.ts +24 -0
  56. package/dist/postRepository/api/editPost.d.ts.map +1 -0
  57. package/dist/postRepository/api/flagPost.d.ts +14 -0
  58. package/dist/postRepository/api/flagPost.d.ts.map +1 -0
  59. package/dist/postRepository/api/hardDeletePost.d.ts +16 -0
  60. package/dist/postRepository/api/hardDeletePost.d.ts.map +1 -0
  61. package/dist/postRepository/api/index.d.ts +6 -0
  62. package/dist/postRepository/api/index.d.ts.map +1 -1
  63. package/dist/postRepository/api/isPostFlaggedByMe.d.ts +14 -0
  64. package/dist/postRepository/api/isPostFlaggedByMe.d.ts.map +1 -0
  65. package/dist/postRepository/api/softDeletePost.d.ts +16 -0
  66. package/dist/postRepository/api/softDeletePost.d.ts.map +1 -0
  67. package/dist/postRepository/api/unflagPost.d.ts +14 -0
  68. package/dist/postRepository/api/unflagPost.d.ts.map +1 -0
  69. package/dist/postRepository/api/updatePost.d.ts.map +1 -1
  70. package/dist/userRepository/api/flagUser.d.ts +14 -0
  71. package/dist/userRepository/api/flagUser.d.ts.map +1 -0
  72. package/dist/userRepository/api/index.d.ts +3 -0
  73. package/dist/userRepository/api/index.d.ts.map +1 -1
  74. package/dist/userRepository/api/isUserFlaggedByMe.d.ts +14 -0
  75. package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -0
  76. package/dist/userRepository/api/tests/flagUser.test.d.ts +2 -0
  77. package/dist/userRepository/api/tests/flagUser.test.d.ts.map +1 -0
  78. package/dist/userRepository/api/tests/unflagUser.test.d.ts +2 -0
  79. package/dist/userRepository/api/tests/unflagUser.test.d.ts.map +1 -0
  80. package/dist/userRepository/api/unflagUser.d.ts +14 -0
  81. package/dist/userRepository/api/unflagUser.d.ts.map +1 -0
  82. package/package.json +1 -1
  83. package/src/@types/domains/channel.ts +7 -2
  84. package/src/categoryRepository/observers/getCategories.ts +1 -1
  85. package/src/channelRepsitory/channelMembership/observers/getMembers.ts +1 -1
  86. package/src/channelRepsitory/observers/getChannels.ts +1 -1
  87. package/src/channelRepsitory/observers/tests/getChannels.test.ts +3 -9
  88. package/src/commentRepository/observers/getComments.ts +4 -4
  89. package/src/communityRepository/communityMembership/api/index.ts +2 -0
  90. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.ts +1 -1
  91. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.ts +1 -1
  92. package/src/communityRepository/communityMembership/index.ts +1 -0
  93. package/src/communityRepository/communityMembership/observers/getMembers.ts +1 -1
  94. package/src/communityRepository/communityModeration/api/index.ts +0 -3
  95. package/src/communityRepository/observers/getCommunities.ts +1 -1
  96. package/src/core/query/tests/runQuery.test.ts +3 -3
  97. package/src/feedRepository/api/index.ts +1 -0
  98. package/src/fileRepository/api/index.ts +3 -3
  99. package/src/fileRepository/api/test/uploadFile.test.ts +69 -0
  100. package/src/fileRepository/api/test/{createImage.test.ts → uploadImage.test.ts} +7 -7
  101. package/src/fileRepository/api/test/{createVideo.test.ts → uploadVideo.test.ts} +8 -8
  102. package/src/fileRepository/api/{createFile.ts → uploadFile.ts} +4 -6
  103. package/src/fileRepository/api/{createImage.ts → uploadImage.ts} +4 -6
  104. package/src/fileRepository/api/{createVideo.ts → uploadVideo.ts} +5 -7
  105. package/src/messageRepository/api/editMessage.ts +100 -0
  106. package/src/messageRepository/api/flagMessage.ts +40 -0
  107. package/src/messageRepository/api/index.ts +7 -1
  108. package/src/messageRepository/api/isMessageFlaggedByMe.ts +30 -0
  109. package/src/messageRepository/api/{deleteMessage.ts → softDeleteMessage.ts} +8 -8
  110. package/src/messageRepository/api/tests/deleteMessage.test.ts +11 -11
  111. package/src/messageRepository/api/tests/{updateMessage.test.ts → editMessage.test.ts} +10 -10
  112. package/src/messageRepository/api/tests/flagMessage.test.ts +87 -0
  113. package/src/messageRepository/api/tests/unflagMessage.test.ts +87 -0
  114. package/src/messageRepository/api/unflagMessage.ts +40 -0
  115. package/src/messageRepository/api/updateMessage.ts +4 -0
  116. package/src/messageRepository/observers/getMessages.ts +4 -4
  117. package/src/postRepository/api/deletePost.ts +1 -7
  118. package/src/postRepository/api/editPost.ts +58 -0
  119. package/src/postRepository/api/flagPost.ts +38 -0
  120. package/src/postRepository/api/hardDeletePost.ts +30 -0
  121. package/src/postRepository/api/index.ts +8 -0
  122. package/src/postRepository/api/isPostFlaggedByMe.ts +33 -0
  123. package/src/postRepository/api/softDeletePost.ts +30 -0
  124. package/src/postRepository/api/unflagPost.ts +39 -0
  125. package/src/postRepository/api/updatePost.ts +4 -0
  126. package/src/postRepository/observers/getPosts.ts +4 -4
  127. package/src/reactionRepository/observers/getReactions.ts +4 -4
  128. package/src/report/api/createReport.ts +1 -1
  129. package/src/report/api/tests/createReport.test.ts +2 -62
  130. package/src/report/api/tests/deleteReport.test.ts +2 -62
  131. package/src/userRepository/api/flagUser.ts +37 -0
  132. package/src/userRepository/api/index.ts +4 -0
  133. package/src/userRepository/api/isUserFlaggedByMe.ts +33 -0
  134. package/src/userRepository/api/tests/flagUser.test.ts +81 -0
  135. package/src/userRepository/api/tests/unflagUser.test.ts +80 -0
  136. package/src/userRepository/api/unflagUser.ts +37 -0
  137. package/src/userRepository/observers/getBlockedUsers.ts +4 -4
  138. package/src/userRepository/observers/getUsers.ts +1 -1
  139. package/src/userRepository/observers/tests/getUsers.test.ts +3 -9
  140. package/src/userRepository/relationship/follow/observers/getFollowers.ts +4 -4
  141. package/src/userRepository/relationship/follow/observers/getFollowings.ts +4 -4
  142. package/dist/communityRepository/communityModeration/api/test/addMembers.test.d.ts.map +0 -1
  143. package/dist/communityRepository/communityModeration/api/test/removeMembers.test.d.ts.map +0 -1
  144. package/dist/fileRepository/api/createFile.d.ts.map +0 -1
  145. package/dist/fileRepository/api/createImage.d.ts.map +0 -1
  146. package/dist/fileRepository/api/createVideo.d.ts.map +0 -1
  147. package/dist/fileRepository/api/test/createImage.test.d.ts +0 -2
  148. package/dist/fileRepository/api/test/createImage.test.d.ts.map +0 -1
  149. package/dist/fileRepository/api/test/createVideo.test.d.ts +0 -2
  150. package/dist/fileRepository/api/test/createVideo.test.d.ts.map +0 -1
  151. package/dist/messageRepository/api/deleteMessage.d.ts.map +0 -1
  152. package/dist/messageRepository/api/tests/updateMessage.test.d.ts +0 -2
  153. package/dist/messageRepository/api/tests/updateMessage.test.d.ts.map +0 -1
  154. /package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts +0 -0
  155. /package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts +0 -0
  156. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.d.ts +0 -0
  157. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.d.ts +0 -0
  158. /package/src/communityRepository/{communityModeration → communityMembership}/api/addMembers.ts +0 -0
  159. /package/src/communityRepository/{communityModeration → communityMembership}/api/removeMembers.ts +0 -0
@@ -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
  });
@@ -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
  });
@@ -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 */
@@ -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
+ });
@@ -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 */
@@ -56,16 +56,16 @@ export const getBlockedUsers = (
56
56
  *};
57
57
  */
58
58
 
59
- const onFetch = () => {
59
+ const onFetch = (initial = false) => {
60
60
  const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(cacheKey)?.data;
61
61
 
62
62
  const users = collection?.data ?? [];
63
63
 
64
- if (users.length > 0 && !collection?.params.page) return;
64
+ if (!initial && users.length > 0 && !collection?.params.page) return;
65
65
 
66
66
  const query = createQuery(queryBlockedUsers, {
67
67
  limit,
68
- token: toToken(collection?.params.page, 'afterbeforeraw'),
68
+ token: toToken(!initial ? collection?.params.page : undefined, 'afterbeforeraw'),
69
69
  });
70
70
 
71
71
  runQuery(
@@ -94,7 +94,7 @@ export const getBlockedUsers = (
94
94
  // @TODO -> update once observers added
95
95
  });
96
96
 
97
- onFetch();
97
+ onFetch(true);
98
98
 
99
99
  return () => {
100
100
  log(`getCategories(tmpid: ${timestamp}) > dispose`);
@@ -123,7 +123,7 @@ export const getUsers = (
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(
@@ -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,
@@ -99,16 +99,16 @@ export const getFollowers = (
99
99
  responder(collection);
100
100
  };
101
101
 
102
- const onFetch = () => {
102
+ const onFetch = (initial = false) => {
103
103
  const collection = pullFromCache<Amity.FollowerLiveCollectionCache>(cacheKey)?.data;
104
104
 
105
105
  const followers = collection?.data ?? [];
106
106
 
107
- if (followers.length > 0 && !collection?.params?.page) return;
107
+ if (!initial && followers.length > 0 && !collection?.params?.page) return;
108
108
 
109
109
  const query = createQuery(queryFollowers, {
110
110
  ...queryParams,
111
- page: collection?.params?.page ?? { limit },
111
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
112
112
  });
113
113
 
114
114
  runQuery(
@@ -143,7 +143,7 @@ export const getFollowers = (
143
143
  onFollowerDeleted(realtimeRouter('onDeleted')),
144
144
  );
145
145
 
146
- onFetch();
146
+ onFetch(true);
147
147
 
148
148
  return () => {
149
149
  log(`getFollowers(tmpid: ${timestamp}) > dispose`);
@@ -99,16 +99,16 @@ export const getFollowings = (
99
99
  responder(collection);
100
100
  };
101
101
 
102
- const onFetch = () => {
102
+ const onFetch = (initial = false) => {
103
103
  const collection = pullFromCache<Amity.FollowingLiveCollectionCache>(cacheKey)?.data;
104
104
 
105
105
  const followings = collection?.data ?? [];
106
106
 
107
- if (followings.length > 0 && !collection?.params?.page) return;
107
+ if (!initial && followings.length > 0 && !collection?.params?.page) return;
108
108
 
109
109
  const query = createQuery(queryFollowings, {
110
110
  ...queryParams,
111
- page: collection?.params?.page ?? { limit },
111
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
112
112
  });
113
113
 
114
114
  runQuery(
@@ -143,7 +143,7 @@ export const getFollowings = (
143
143
  onFollowerDeleted(realtimeRouter('onDeleted')),
144
144
  );
145
145
 
146
- onFetch();
146
+ onFetch(true);
147
147
 
148
148
  return () => {
149
149
  log(`getFollowings(tmpid: ${timestamp}) > dispose`);
@@ -1 +0,0 @@
1
- {"version":3,"file":"addMembers.test.d.ts","sourceRoot":"","sources":["../../../../../src/communityRepository/communityModeration/api/test/addMembers.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"removeMembers.test.d.ts","sourceRoot":"","sources":["../../../../../src/communityRepository/communityModeration/api/test/removeMembers.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFile.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/createFile.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,6CACX,QAAQ,0BACK,MAAM,KAAK,IAAI,kBACrC,QAAQ,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CA6BpC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createImage.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/createImage.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,aACZ,QAAQ,0BACK,MAAM,KAAK,IAAI,kBACrC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAiC7C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createVideo.d.ts","sourceRoot":"","sources":["../../../src/fileRepository/api/createVideo.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,aACZ,QAAQ,aACP,MAAM,eAAe,0BACT,MAAM,KAAK,IAAI,kBACrC,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAqC7C,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createImage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createImage.test.d.ts","sourceRoot":"","sources":["../../../../src/fileRepository/api/test/createImage.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createVideo.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createVideo.test.d.ts","sourceRoot":"","sources":["../../../../src/fileRepository/api/test/createVideo.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"deleteMessage.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/api/deleteMessage.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa;gBACb,MAAM,OAAO,CAAC,WAAW,CAAC,GACpC,QAAQ,MAAM,OAAO,CAAC;IAgBzB;;;;;;;;;;;;OAYG;8BAEU,MAAM,OAAO,CAAC,WAAW,CAAC,GACpC,MAAM,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS;CAjBzC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=updateMessage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateMessage.test.d.ts","sourceRoot":"","sources":["../../../../src/messageRepository/api/tests/updateMessage.test.ts"],"names":[],"mappings":""}