@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
@@ -2,7 +2,7 @@ import { ASCApiError } from '~/core/errors';
2
2
  import { disableCache, enableCache, pullFromCache, pushToCache } from '~/cache/api';
3
3
  import { client, generateRawMessage } from '~/utils/tests';
4
4
 
5
- import { updateMessage } from '../updateMessage';
5
+ import { editMessage } from '../editMessage';
6
6
  import { onMessageUpdated } from '../../events';
7
7
  import { convertFromRaw } from '../../utils';
8
8
 
@@ -21,12 +21,12 @@ const getResolvedMessageValue = () => ({
21
21
  },
22
22
  });
23
23
 
24
- describe('updateMessage', () => {
24
+ describe('editMessage', () => {
25
25
  // integration_test_id: 3ae17ea2-dee5-4418-88af-fe809ee48a52
26
26
  test('should return updated message', async () => {
27
27
  client.http.put = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
28
28
 
29
- const recieved = updateMessage(messageId, patch);
29
+ const recieved = editMessage(messageId, patch);
30
30
 
31
31
  await expect(recieved).resolves.toEqual(expect.objectContaining({ data: updatedMessage }));
32
32
  });
@@ -39,14 +39,14 @@ describe('updateMessage', () => {
39
39
  new ASCApiError('not found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
40
40
  );
41
41
 
42
- await expect(updateMessage(messageId, patch)).rejects.toThrow('400400');
42
+ await expect(editMessage(messageId, patch)).rejects.toThrow('400400');
43
43
  });
44
44
 
45
45
  test('should update cache after updated messages', async () => {
46
46
  enableCache();
47
47
  client.http.put = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
48
48
 
49
- await updateMessage(messageId, patch);
49
+ await editMessage(messageId, patch);
50
50
  const recieved = pullFromCache<Amity.Message>(['message', 'get', messageId])?.data;
51
51
 
52
52
  expect(recieved).toEqual(expect.objectContaining(patch));
@@ -62,20 +62,20 @@ describe('updateMessage', () => {
62
62
  dispose = onMessageUpdated(resolve);
63
63
  }).finally(dispose);
64
64
 
65
- await updateMessage(messageId, patch);
65
+ await editMessage(messageId, patch);
66
66
 
67
67
  await expect(callbackPromise).resolves.toEqual(expect.objectContaining(updatedMessage));
68
68
  });
69
69
  });
70
70
 
71
- describe('updateMessage.optimistically', () => {
71
+ describe('editMessage.optimistically', () => {
72
72
  beforeEach(() => enableCache());
73
73
  afterEach(() => disableCache());
74
74
 
75
75
  test('should update cache after updated message', () => {
76
76
  pushToCache(['message', 'get', messageId], messageToUpdate);
77
77
 
78
- updateMessage.optimistically(messageId, patch);
78
+ editMessage.optimistically(messageId, patch);
79
79
  const recieved = pullFromCache<Amity.Message>(['message', 'get', messageId])?.data;
80
80
 
81
81
  expect(recieved).toEqual(expect.objectContaining(patch));
@@ -90,7 +90,7 @@ describe('updateMessage.optimistically', () => {
90
90
  });
91
91
  }).finally(dispose);
92
92
 
93
- updateMessage.optimistically(messageId, patch);
93
+ editMessage.optimistically(messageId, patch);
94
94
 
95
95
  await expect(callbackPromise).resolves.toEqual(
96
96
  expect.objectContaining({
@@ -103,6 +103,6 @@ describe('updateMessage.optimistically', () => {
103
103
  test('should define object as unsynced object', () => {
104
104
  pushToCache(['message', 'get', messageId], messageToUpdate);
105
105
 
106
- expect(updateMessage.optimistically(messageId, patch)?.cachedAt).toBe(-1);
106
+ expect(editMessage.optimistically(messageId, patch)?.cachedAt).toBe(-1);
107
107
  });
108
108
  });
@@ -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 { flagMessage } 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 flaggedRawMessage = generateRawMessage({ flagCount: 1 });
16
+ const message = convertFromRaw(flaggedRawMessage);
17
+ const { messageId } = flaggedRawMessage;
18
+
19
+ const flaggedMessageQueryResponse = {
20
+ data: {
21
+ messages: [flaggedRawMessage],
22
+ users: [user11],
23
+ },
24
+ };
25
+
26
+ describe('flagMessage', () => {
27
+ beforeEach(disableCache);
28
+ beforeAll(connectClient);
29
+ afterAll(disconnectClient);
30
+
31
+ // integration_test_id: fd507b43-99e7-4aed-816d-d51d357d303b
32
+ test('it should flag message with messageId', async () => {
33
+ const expected = true;
34
+ client.http.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
35
+
36
+ const received = await flagMessage(messageId);
37
+
38
+ expect(received).toBe(expected);
39
+ });
40
+
41
+ // integration_test_id: 0c78c9fd-1d4e-4af7-ad6b-e76372addb2f
42
+ test('it should throw error with 400400 when sending invalid messageId', async () => {
43
+ client.http.post = jest
44
+ .fn()
45
+ .mockRejectedValueOnce(
46
+ new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
47
+ );
48
+
49
+ await expect(flagMessage(messageId)).rejects.toThrow('400400');
50
+ });
51
+
52
+ test('it should call fire event method', async () => {
53
+ client.http.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
54
+
55
+ const recieved = await flagMessage(messageId);
56
+ const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
57
+
58
+ expect(recieved).toBe(true);
59
+ expect(recievedMqttString).toBe('message.flagged');
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.post = apimock.mockResolvedValue({ data: {} });
67
+
68
+ await flagMessage('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.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
79
+
80
+ await flagMessage(messageId);
81
+ const recieved = pullFromCache(['message', 'get', messageId]);
82
+
83
+ expect(recieved?.data).toStrictEqual(expected);
84
+
85
+ disableCache();
86
+ });
87
+ });
@@ -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),
@@ -104,16 +104,16 @@ export const getMessages = (
104
104
  responder(collection);
105
105
  };
106
106
 
107
- const onFetch = () => {
107
+ const onFetch = (initial = false) => {
108
108
  const collection = pullFromCache<Amity.MessageLiveCollectionCache>(cacheKey)?.data;
109
109
 
110
110
  const messages = collection?.data ?? [];
111
111
 
112
- if (messages.length > 0 && !collection?.params?.page) return;
112
+ if (!initial && messages.length > 0 && !collection?.params?.page) return;
113
113
 
114
114
  const query = createQuery(queryMessages, {
115
115
  ...queryParams,
116
- page: collection?.params?.page ?? { limit },
116
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
117
117
  });
118
118
 
119
119
  runQuery(
@@ -150,7 +150,7 @@ export const getMessages = (
150
150
  onMessageReactionRemoved(realtimeRouter('onReactionRemoved')),
151
151
  );
152
152
 
153
- onFetch();
153
+ onFetch(true);
154
154
  disposers.push(() => dropFromCache(cacheKey));
155
155
 
156
156
  return () => {
@@ -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,
@@ -140,16 +140,16 @@ export const getPosts = (
140
140
  responder(collection);
141
141
  };
142
142
 
143
- const onFetch = () => {
143
+ const onFetch = (initial = false) => {
144
144
  const collection = pullFromCache<Amity.PostLiveCollectionCache>(cacheKey)?.data;
145
145
 
146
146
  const posts = collection?.data ?? [];
147
147
 
148
- if (posts.length > 0 && !collection?.params?.page) return;
148
+ if (!initial && posts.length > 0 && !collection?.params?.page) return;
149
149
 
150
150
  const query = createQuery(queryPosts, {
151
151
  ...queryParams,
152
- page: collection?.params?.page ?? { limit },
152
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
153
153
  });
154
154
 
155
155
  runQuery(
@@ -187,7 +187,7 @@ export const getPosts = (
187
187
  onPostReactionRemoved(realtimeRouter('onReactionRemoved')),
188
188
  );
189
189
 
190
- onFetch();
190
+ onFetch(true);
191
191
 
192
192
  return () => {
193
193
  log(`getPosts(tmpid: ${timestamp}) > dispose`);