@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
@@ -147,7 +147,7 @@ export const getCommunities = (
147
147
 
148
148
  const query = createQuery(queryCommunities, {
149
149
  ...queryParams,
150
- page: collection?.params.page ?? { limit },
150
+ page: (!initial ? collection?.params.page : undefined) ?? { limit },
151
151
  });
152
152
 
153
153
  runQuery(
@@ -3,7 +3,7 @@ import { disableCache, enableCache, pushToCache } from '~/cache/api';
3
3
  import { runQuery, createQuery } from '~/core/query';
4
4
  import { createPost } from '~/postRepository/api';
5
5
  import { getPost } from '~/postRepository/api/getPost';
6
- import { deleteMessage } from '~/messageRepository/api';
6
+ import { softDeleteMessage } from '~/messageRepository/api';
7
7
 
8
8
  import { posts, client, pause, emptyPostPayload } from '~/utils/tests';
9
9
 
@@ -115,7 +115,7 @@ describe('Core/Query/runQuery', () => {
115
115
  // 'get', gets called after delete to verify delete
116
116
  client.http.get = jest.fn();
117
117
 
118
- const query = createQuery(deleteMessage, deletingMsgId);
118
+ const query = createQuery(softDeleteMessage, deletingMsgId);
119
119
  runQuery(query);
120
120
 
121
121
  expect(client.http.delete).toHaveBeenCalledWith(`/api/v5/messages/${deletingMsgId}`);
@@ -148,7 +148,7 @@ describe('Core/Query/runQuery', () => {
148
148
  );
149
149
  const callback = jest.fn();
150
150
 
151
- const query = createQuery(deleteMessage, deletingMsgId);
151
+ const query = createQuery(softDeleteMessage, deletingMsgId);
152
152
  runQuery(query, callback);
153
153
  await pause();
154
154
 
@@ -1 +1,2 @@
1
1
  export * from './queryGlobalFeed';
2
+ export * from './getCustomRankingGlobalFeed';
@@ -1,6 +1,6 @@
1
1
  export * from './getFile';
2
- export * from './createFile';
2
+ export * from './uploadFile';
3
3
  export * from './deleteFile';
4
4
  export * from './fileUrlWithSize';
5
- export * from './createVideo';
6
- export * from './createImage';
5
+ export * from './uploadVideo';
6
+ export * from './uploadImage';
@@ -0,0 +1,69 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { client, file12, createEmptyFormData, createFileFormData } from '~/utils/tests';
3
+
4
+ import { uploadFile } from '../uploadFile';
5
+
6
+ const videoToCreate = [file12];
7
+ const createIds = videoToCreate.map(({ fileId }) => fileId);
8
+ const resolvedPayloadValue = { data: videoToCreate };
9
+
10
+ describe('uploadFile', () => {
11
+ test('it should return created file', async () => {
12
+ const formData = createFileFormData();
13
+ client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
14
+
15
+ const received = uploadFile(formData);
16
+
17
+ await expect(received).resolves.toEqual(expect.objectContaining({ data: videoToCreate }));
18
+ });
19
+
20
+ test('it should throw an error if request fails', async () => {
21
+ const formData = createFileFormData();
22
+ client.http.post = jest.fn().mockRejectedValueOnce(new Error('error'));
23
+
24
+ await expect(uploadFile(formData)).rejects.toThrow('error');
25
+ });
26
+
27
+ test('it should throw an error if formData is empty', async () => {
28
+ const emptyFormData = createEmptyFormData();
29
+
30
+ await expect(uploadFile(emptyFormData)).rejects.toThrow(
31
+ 'The formData object must have a `files` key.',
32
+ );
33
+ });
34
+
35
+ test('it should call onProgress params on upload progress updated', async () => {
36
+ expect.assertions(3);
37
+ const formData = createFileFormData();
38
+ const onProgress = jest.fn();
39
+
40
+ jest.spyOn(client.http, 'post').mockImplementationOnce(
41
+ (_, __, config) =>
42
+ new Promise((resolve, _reject) => {
43
+ config?.onUploadProgress?.({ loaded: 0, bytes: 0, total: 100 });
44
+ config?.onUploadProgress?.({ loaded: 40, bytes: 40, total: 100 });
45
+ config?.onUploadProgress?.({ loaded: 100, bytes: 100, total: 100 });
46
+ resolve(resolvedPayloadValue);
47
+ }),
48
+ );
49
+
50
+ await uploadFile(formData, onProgress);
51
+
52
+ expect(onProgress).toHaveBeenNthCalledWith(1, 0);
53
+ expect(onProgress).toHaveBeenNthCalledWith(2, 40);
54
+ expect(onProgress).toHaveBeenNthCalledWith(3, 100);
55
+ });
56
+
57
+ test('it should create cache after created file', async () => {
58
+ enableCache();
59
+ const formData = createFileFormData();
60
+ client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
61
+
62
+ await uploadFile(formData);
63
+ const received = createIds.map(id => pullFromCache(['file', 'get', id])?.data);
64
+
65
+ expect(received).toEqual(expect.objectContaining(videoToCreate));
66
+
67
+ disableCache();
68
+ });
69
+ });
@@ -1,18 +1,18 @@
1
1
  import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
2
  import { client, file11, createEmptyFormData, createFileFormData } from '~/utils/tests';
3
3
 
4
- import { createImage } from '../createImage';
4
+ import { uploadImage } from '../uploadImage';
5
5
 
6
6
  const imageToCreate = [file11];
7
7
  const createIds = imageToCreate.map(({ fileId }) => fileId);
8
8
  const resolvedPayloadValue = { data: imageToCreate };
9
9
 
10
- describe('createImage', () => {
10
+ describe('uploadImage', () => {
11
11
  test('should return created image', async () => {
12
12
  const formData = createFileFormData();
13
13
  client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
14
14
 
15
- const received = createImage(formData);
15
+ const received = uploadImage(formData);
16
16
 
17
17
  await expect(received).resolves.toEqual(expect.objectContaining({ data: imageToCreate }));
18
18
  });
@@ -21,13 +21,13 @@ describe('createImage', () => {
21
21
  const formData = createFileFormData();
22
22
  client.http.post = jest.fn().mockRejectedValueOnce(new Error('error'));
23
23
 
24
- await expect(createImage(formData)).rejects.toThrow('error');
24
+ await expect(uploadImage(formData)).rejects.toThrow('error');
25
25
  });
26
26
 
27
27
  test('should throw an error if formData is empty', async () => {
28
28
  const emptyFormData = createEmptyFormData();
29
29
 
30
- await expect(createImage(emptyFormData)).rejects.toThrow(
30
+ await expect(uploadImage(emptyFormData)).rejects.toThrow(
31
31
  'The formData object must have a `files` key.',
32
32
  );
33
33
  });
@@ -47,7 +47,7 @@ describe('createImage', () => {
47
47
  }),
48
48
  );
49
49
 
50
- await createImage(formData, onProgress);
50
+ await uploadImage(formData, onProgress);
51
51
 
52
52
  expect(onProgress).toHaveBeenNthCalledWith(1, 0);
53
53
  expect(onProgress).toHaveBeenNthCalledWith(2, 40);
@@ -59,7 +59,7 @@ describe('createImage', () => {
59
59
  const formData = createFileFormData();
60
60
  client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
61
61
 
62
- await createImage(formData);
62
+ await uploadImage(formData);
63
63
  const received = createIds.map(id => pullFromCache(['file', 'get', id])?.data);
64
64
 
65
65
  expect(received).toEqual(expect.objectContaining(imageToCreate));
@@ -2,18 +2,18 @@ import { ContentFeedType } from '~/@types';
2
2
  import { disableCache, enableCache, pullFromCache } from '~/cache/api';
3
3
  import { client, file12, createEmptyFormData, createFileFormData } from '~/utils/tests';
4
4
 
5
- import { createVideo } from '../createVideo';
5
+ import { uploadVideo } from '../uploadVideo';
6
6
 
7
7
  const videoToCreate = [file12];
8
8
  const createIds = videoToCreate.map(({ fileId }) => fileId);
9
9
  const resolvedPayloadValue = { data: videoToCreate };
10
10
 
11
- describe('createVideo', () => {
11
+ describe('uploadVideo', () => {
12
12
  test('should return created video', async () => {
13
13
  const formData = createFileFormData();
14
14
  client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
15
15
 
16
- const received = createVideo(formData);
16
+ const received = uploadVideo(formData);
17
17
 
18
18
  await expect(received).resolves.toEqual(expect.objectContaining({ data: videoToCreate }));
19
19
  });
@@ -22,13 +22,13 @@ describe('createVideo', () => {
22
22
  const formData = createFileFormData();
23
23
  client.http.post = jest.fn().mockRejectedValueOnce(new Error('error'));
24
24
 
25
- await expect(createVideo(formData)).rejects.toThrow('error');
25
+ await expect(uploadVideo(formData)).rejects.toThrow('error');
26
26
  });
27
27
 
28
28
  test('should throw an error if formData is empty', async () => {
29
29
  const emptyFormData = createEmptyFormData();
30
30
 
31
- await expect(createVideo(emptyFormData)).rejects.toThrow(
31
+ await expect(uploadVideo(emptyFormData)).rejects.toThrow(
32
32
  'The formData object must have a `files` key.',
33
33
  );
34
34
  });
@@ -39,7 +39,7 @@ describe('createVideo', () => {
39
39
  const formData = createFileFormData();
40
40
  client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
41
41
 
42
- await createVideo(formData, ContentFeedType.POST);
42
+ await uploadVideo(formData, ContentFeedType.POST);
43
43
 
44
44
  expect(formData.get('feedType')).toEqual(ContentFeedType.POST);
45
45
  });
@@ -59,7 +59,7 @@ describe('createVideo', () => {
59
59
  }),
60
60
  );
61
61
 
62
- await createVideo(formData, undefined, onProgress);
62
+ await uploadVideo(formData, undefined, onProgress);
63
63
 
64
64
  expect(onProgress).toHaveBeenNthCalledWith(1, 0);
65
65
  expect(onProgress).toHaveBeenNthCalledWith(2, 40);
@@ -71,7 +71,7 @@ describe('createVideo', () => {
71
71
  const formData = createFileFormData();
72
72
  client.http.post = jest.fn().mockResolvedValue(resolvedPayloadValue);
73
73
 
74
- await createVideo(formData);
74
+ await uploadVideo(formData);
75
75
  const received = createIds.map(id => pullFromCache(['file', 'get', id])?.data);
76
76
 
77
77
  expect(received).toEqual(expect.objectContaining(videoToCreate));
@@ -7,8 +7,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
7
7
  */
8
8
  /**
9
9
  * ```js
10
- * import { createFile } from '@amityco/ts-sdk'
11
- * const created = await createFile(formData)
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadFile(formData)
12
12
  * ```
13
13
  *
14
14
  * Creates an {@link Amity.File}
@@ -20,12 +20,12 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
20
20
  * @category File API
21
21
  * @async
22
22
  */
23
- export const createFile = async <T extends Amity.FileType = any>(
23
+ export const uploadFile = async <T extends Amity.FileType = any>(
24
24
  formData: FormData,
25
25
  onProgress?: (percent: number) => void,
26
26
  ): Promise<Amity.Cached<Amity.File[]>> => {
27
27
  const client = getActiveClient();
28
- client.log('file/createFile', formData);
28
+ client.log('file/uploadFile', formData);
29
29
 
30
30
  if (!formData.getAll('files').length)
31
31
  throw new Error('The formData object must have a `files` key.');
@@ -54,5 +54,3 @@ export const createFile = async <T extends Amity.FileType = any>(
54
54
  };
55
55
  };
56
56
  /* end_public_function */
57
-
58
- // TODO: consider doing local creation with URL.createObjectURL()
@@ -7,8 +7,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
7
7
  */
8
8
  /**
9
9
  * ```js
10
- * import { createImage } from '@amityco/ts-sdk'
11
- * const created = await createImage(formData)
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadImage(formData)
12
12
  * ```
13
13
  *
14
14
  * Creates an {@link Amity.File<'image'>}
@@ -20,12 +20,12 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
20
20
  * @category File API
21
21
  * @async
22
22
  */
23
- export const createImage = async (
23
+ export const uploadImage = async (
24
24
  formData: FormData,
25
25
  onProgress?: (percent: number) => void,
26
26
  ): Promise<Amity.Cached<Amity.File<'image'>[]>> => {
27
27
  const client = getActiveClient();
28
- client.log('file/createImage', formData);
28
+ client.log('file/uploadImage', formData);
29
29
 
30
30
  if (!formData.getAll('files').length)
31
31
  throw new Error('The formData object must have a `files` key.');
@@ -58,5 +58,3 @@ export const createImage = async (
58
58
  };
59
59
  };
60
60
  /* end_public_function */
61
-
62
- // TODO: consider doing local creation with URL.createObjectURL()
@@ -7,8 +7,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
7
7
  */
8
8
  /**
9
9
  * ```js
10
- * import { createVideo } from '@amityco/ts-sdk'
11
- * const created = await createVideo(formData)
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadVideo(formData)
12
12
  * ```
13
13
  *
14
14
  * Creates an {@link Amity.File<'video'>}
@@ -16,18 +16,18 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
16
16
  * @param formData The data necessary to create a new {@link Amity.File<'video'>}
17
17
  * @param feedType The {@link Amity.File<'video'>} feed type
18
18
  * @param onProgress The callback to track the upload progress
19
- * @returns The newly created {@link Amity.File<'video'>}
19
+ * @returns The newly uploaded {@link Amity.File<'video'>}
20
20
  *
21
21
  * @category File API
22
22
  * @async
23
23
  */
24
- export const createVideo = async (
24
+ export const uploadVideo = async (
25
25
  formData: FormData,
26
26
  feedType?: Amity.ContentFeedType,
27
27
  onProgress?: (percent: number) => void,
28
28
  ): Promise<Amity.Cached<Amity.File<'video'>[]>> => {
29
29
  const client = getActiveClient();
30
- client.log('file/createVideo', formData);
30
+ client.log('file/uploadVideo', formData);
31
31
 
32
32
  if (!formData.getAll('files').length)
33
33
  throw new Error('The formData object must have a `files` key.');
@@ -64,5 +64,3 @@ export const createVideo = async (
64
64
  };
65
65
  };
66
66
  /* end_public_function */
67
-
68
- // TODO: consider doing local creation with URL.createObjectURL()
@@ -0,0 +1,100 @@
1
+ import { getActiveClient } from '~/client/api';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { pullFromCache, upsertInCache } from '~/cache/api';
5
+ import { fireEvent } from '~/core/events';
6
+
7
+ import { convertParams, prepareMessagePayload } from '../utils';
8
+
9
+ /* begin_public_function
10
+ id: message.edit
11
+ */
12
+ /**
13
+ * ```js
14
+ * import { MessageRepository } from '@amityco/ts-sdk'
15
+ * const updated = await MessageRepository.editMessage(messageId, {
16
+ * data: { text: 'hello world' }
17
+ * })
18
+ * ```
19
+ *
20
+ * Updates an {@link Amity.Message}
21
+ *
22
+ * @param messageId The ID of the {@link Amity.Message} to edit
23
+ * @param patch The patch data to apply
24
+ * @returns the updated {@link Amity.Message} object
25
+ *
26
+ * @category Message API
27
+ * @async
28
+ */
29
+ export const editMessage = async (
30
+ messageId: Amity.Message['messageId'],
31
+ patch: Patch<Amity.Message, 'data' | 'tags' | 'metadata' | 'mentionees'>,
32
+ ): Promise<Amity.Cached<Amity.Message>> => {
33
+ const client = getActiveClient();
34
+ client.log('message/editMessage', patch);
35
+
36
+ const { data: payload } = await client.http.put<Amity.MessagePayload>(
37
+ `/api/v5/messages/${encodeURIComponent(messageId)}`,
38
+ convertParams(patch),
39
+ );
40
+
41
+ const data = await prepareMessagePayload(payload);
42
+
43
+ const cachedAt = client.cache && Date.now();
44
+ if (client.cache) ingestInCache(data, { cachedAt });
45
+
46
+ const { messages } = data;
47
+
48
+ fireEvent('local.message.updated', { messages });
49
+
50
+ return {
51
+ data: messages.find(message => message.messageId === messageId)!,
52
+ cachedAt,
53
+ };
54
+ };
55
+
56
+ /**
57
+ * ```js
58
+ * import { editMessage } from '@amityco/ts-sdk'
59
+ * const updated = editMessage.optimistically('foobar', {
60
+ * data: { text: 'hello world' }
61
+ * })
62
+ * ```
63
+ *
64
+ * Updates an {@link Amity.Message} in cache
65
+ *
66
+ * @param messageId The ID of the {@link Amity.Message} to edit
67
+ * @param patch The patch data to apply
68
+ * @returns the updated {@link Amity.Message} object
69
+ *
70
+ * @category Message API
71
+ */
72
+ editMessage.optimistically = (
73
+ messageId: Amity.Message['messageId'],
74
+ patch: Patch<Amity.Message, 'data' | 'tags' | 'metadata' | 'mentionees'>,
75
+ ): Amity.Cached<Amity.Message> | undefined => {
76
+ const client = getActiveClient();
77
+ client.log('message/editMessage.optimistically', patch);
78
+
79
+ if (!client.cache) return;
80
+
81
+ const message = pullFromCache<Amity.Message>(['message', 'get', messageId]);
82
+
83
+ if (!message) return;
84
+
85
+ const cachedAt = -1;
86
+ const edited: Amity.Message = {
87
+ ...message.data,
88
+ ...patch,
89
+ updatedAt: new Date().toISOString(),
90
+ };
91
+
92
+ upsertInCache(['message', 'get', messageId], edited, { cachedAt });
93
+ fireEvent('local.message.updated', { messages: [edited] });
94
+
95
+ return {
96
+ data: edited,
97
+ cachedAt,
98
+ };
99
+ };
100
+ /* end_public_function */
@@ -0,0 +1,40 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ import { prepareMessagePayload } from '~/messageRepository/utils';
7
+
8
+ /* begin_public_function
9
+ id: message.flag
10
+ */
11
+ /**
12
+ * ```js
13
+ * import { MessageRepository } from '@amityco/ts-sdk'
14
+ * const flagged = await MessageRepository.flagMessage(messageId)
15
+ * ```
16
+ *
17
+ * @param messageId of the message to flag
18
+ * @returns the created report result
19
+ *
20
+ * @category Message API
21
+ * @async
22
+ * */
23
+ export const flagMessage = async (messageId: Amity.Message['messageId']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('message/flag', messageId);
26
+
27
+ const { data: payload } = await client.http.post<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.flagged', payload);
37
+
38
+ return !!payload;
39
+ };
40
+ /* end_public_function */
@@ -2,7 +2,13 @@ export { getMessages as getMessageByIds } from './getMessages';
2
2
 
3
3
  export * from './createMessage';
4
4
  export * from './updateMessage';
5
- export * from './deleteMessage';
5
+ export * from './editMessage';
6
+ export * from './softDeleteMessage';
7
+
6
8
  export * from './markAsDelivered';
7
9
  export * from './getReadUsers';
8
10
  export * from './getDeliveredUsers';
11
+
12
+ export * from './flagMessage';
13
+ export * from './unflagMessage';
14
+ export * from './isMessageFlaggedByMe';
@@ -0,0 +1,30 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ /* begin_public_function
4
+ id: message.check_flag_by_me
5
+ */
6
+ /**
7
+ * ```js
8
+ * import { MessageRepository } from '@amityco/ts-sdk'
9
+ * const isReportedByMe = await MessageRepository.isMessageFlaggedByMe(messageId)
10
+ * ```
11
+ *
12
+ * @param messageId of the message to check a report of.
13
+ * @returns `true` if the report is created by me, `false` if doesn't.
14
+ *
15
+ * @category Report API
16
+ * @async
17
+ * */
18
+ export const isMessageFlaggedByMe = async (
19
+ messageId: Amity.Message['messageId'],
20
+ ): Promise<boolean> => {
21
+ const client = getActiveClient();
22
+ client.log('message/isMessageFlaggedByMe', messageId);
23
+
24
+ const { data } = await client.http.get<{ result: boolean }>(
25
+ `/api/v5/messages/${encodeURIComponent(messageId)}/flags`,
26
+ );
27
+
28
+ return data.result;
29
+ };
30
+ /* end_public_function */
@@ -9,8 +9,8 @@ import { getMessage } from './getMessage';
9
9
  */
10
10
  /**
11
11
  * ```js
12
- * import { deleteMessage } from '@amityco/ts-sdk'
13
- * const success = await deleteMessage('foobar')
12
+ * import { softDeleteMessage } from '@amityco/ts-sdk'
13
+ * const success = await softDeleteMessage('foobar')
14
14
  * ```
15
15
  *
16
16
  * Delete a {@link Amity.Message}
@@ -21,11 +21,11 @@ import { getMessage } from './getMessage';
21
21
  * @category Message API
22
22
  * @async
23
23
  */
24
- export const deleteMessage = async (
24
+ export const softDeleteMessage = async (
25
25
  messageId: Amity.Message['messageId'],
26
26
  ): Promise<Amity.Message> => {
27
27
  const client = getActiveClient();
28
- client.log('message/deleteMessage', messageId);
28
+ client.log('message/softDeleteMessage', messageId);
29
29
 
30
30
  // API-FIX: This endpoint has not been implemented yet.
31
31
  await client.http.delete<{ success: boolean }>(
@@ -41,8 +41,8 @@ export const deleteMessage = async (
41
41
 
42
42
  /**
43
43
  * ```js
44
- * import { deleteMessage } from '@amityco/ts-sdk'
45
- * const success = deleteMessage.optimistically('foobar')
44
+ * import { softDeleteMessage } from '@amityco/ts-sdk'
45
+ * const success = softDeleteMessage.optimistically('foobar')
46
46
  * ```
47
47
  *
48
48
  * Deletes a {@link Amity.Message}
@@ -52,11 +52,11 @@ export const deleteMessage = async (
52
52
  *
53
53
  * @category Message API
54
54
  */
55
- deleteMessage.optimistically = (
55
+ softDeleteMessage.optimistically = (
56
56
  messageId: Amity.Message['messageId'],
57
57
  ): Amity.Cached<Amity.Message> | undefined => {
58
58
  const client = getActiveClient();
59
- client.log('message/deleteMessage.optimistically', messageId);
59
+ client.log('message/softDeleteMessage.optimistically', messageId);
60
60
 
61
61
  const message = pullFromCache<Amity.Message>(['message', 'get', messageId]);
62
62
 
@@ -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 { deleteMessage } from '../deleteMessage';
5
+ import { softDeleteMessage } from '../softDeleteMessage';
6
6
  import { onMessageDeleted } from '../../events';
7
7
  import { convertFromRaw } from '../../utils';
8
8
 
@@ -20,13 +20,13 @@ const getResolvedMessageValue = () => ({
20
20
  },
21
21
  });
22
22
 
23
- describe('deleteMessage', () => {
23
+ describe('softDeleteMessage', () => {
24
24
  // integration_test_id: 16106137-0e4a-4d2f-b8cf-1a6c571bf0c7
25
25
  test('should return deleted message', async () => {
26
26
  client.http.delete = jest.fn();
27
27
  client.http.get = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
28
28
 
29
- await expect(deleteMessage(deleteId)).resolves.toEqual(deletedMessage);
29
+ await expect(softDeleteMessage(deleteId)).resolves.toEqual(deletedMessage);
30
30
  });
31
31
 
32
32
  // integration_test_id: 27d393d9-480e-4eec-bfdb-f04738801b04
@@ -37,7 +37,7 @@ describe('deleteMessage', () => {
37
37
  new ASCApiError('not found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
38
38
  );
39
39
 
40
- await expect(deleteMessage(deleteId)).rejects.toThrow('400400');
40
+ await expect(softDeleteMessage(deleteId)).rejects.toThrow('400400');
41
41
  });
42
42
 
43
43
  test('should update cache after deleted messages', async () => {
@@ -46,7 +46,7 @@ describe('deleteMessage', () => {
46
46
  client.http.get = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
47
47
  pushToCache(['message', 'get', deleteId], messageToDelete);
48
48
 
49
- await deleteMessage(deleteId);
49
+ await softDeleteMessage(deleteId);
50
50
  const recieved = pullFromCache<Amity.Message>(['message', 'get', deleteId])?.data;
51
51
 
52
52
  expect(recieved).toEqual(deletedMessage);
@@ -63,20 +63,20 @@ describe('deleteMessage', () => {
63
63
  dispose = onMessageDeleted(resolve);
64
64
  }).finally(dispose);
65
65
 
66
- await deleteMessage(deleteId);
66
+ await softDeleteMessage(deleteId);
67
67
 
68
68
  await expect(callbackPromise).resolves.toEqual(deletedMessage);
69
69
  });
70
70
  });
71
71
 
72
- describe('deleteMessage.optimistically', () => {
72
+ describe('softDeleteMessage.optimistically', () => {
73
73
  beforeEach(() => enableCache());
74
74
  afterEach(() => disableCache());
75
75
 
76
76
  test('should update `isDeleted` in cache after deleted message', () => {
77
77
  pushToCache(['message', 'get', deleteId], messageToDelete);
78
78
 
79
- deleteMessage.optimistically(deleteId);
79
+ softDeleteMessage.optimistically(deleteId);
80
80
  const recieved = pullFromCache<Amity.Message>(['message', 'get', deleteId])?.data;
81
81
 
82
82
  expect(recieved).toEqual({
@@ -91,7 +91,7 @@ describe('deleteMessage.optimistically', () => {
91
91
  pushToCache(['channel', 'get', channelId], { channelId, messageCount: 2 });
92
92
  pushToCache(['message', 'get', deleteId], { ...messageToDelete, channelId });
93
93
 
94
- deleteMessage.optimistically(deleteId);
94
+ softDeleteMessage.optimistically(deleteId);
95
95
  const recieved = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
96
96
 
97
97
  expect(recieved?.messageCount).toBe(1);
@@ -107,7 +107,7 @@ describe('deleteMessage.optimistically', () => {
107
107
  });
108
108
  }).finally(dispose);
109
109
 
110
- await deleteMessage.optimistically(deleteId);
110
+ softDeleteMessage.optimistically(deleteId);
111
111
 
112
112
  await expect(callbackPromise).resolves.toEqual({
113
113
  ...deletedMessage,
@@ -118,6 +118,6 @@ describe('deleteMessage.optimistically', () => {
118
118
  test('should define object as unsynced object', () => {
119
119
  pushToCache(['message', 'get', deleteId], messageToDelete);
120
120
 
121
- expect(deleteMessage.optimistically(deleteId)?.cachedAt).toBe(-1);
121
+ expect(softDeleteMessage.optimistically(deleteId)?.cachedAt).toBe(-1);
122
122
  });
123
123
  });