@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.
- package/README.md +0 -4
- package/dist/@types/domains/channel.d.ts +5 -1
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/channelRepsitory/api/createChannel.d.ts +1 -1
- package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/api/index.d.ts +3 -0
- package/dist/communityRepository/communityMembership/api/index.d.ts.map +1 -0
- package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/api/tests/addMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityMembership/api/tests/removeMembers.test.d.ts.map +1 -0
- package/dist/communityRepository/communityMembership/index.d.ts +1 -0
- package/dist/communityRepository/communityMembership/index.d.ts.map +1 -1
- package/dist/communityRepository/communityModeration/api/index.d.ts +0 -2
- package/dist/communityRepository/communityModeration/api/index.d.ts.map +1 -1
- package/dist/feedRepository/api/index.d.ts +1 -0
- package/dist/feedRepository/api/index.d.ts.map +1 -1
- package/dist/fileRepository/api/index.d.ts +3 -3
- package/dist/fileRepository/api/test/uploadFile.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadFile.test.d.ts.map +1 -0
- package/dist/fileRepository/api/test/uploadImage.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadImage.test.d.ts.map +1 -0
- package/dist/fileRepository/api/test/uploadVideo.test.d.ts +2 -0
- package/dist/fileRepository/api/test/uploadVideo.test.d.ts.map +1 -0
- package/dist/fileRepository/api/{createFile.d.ts → uploadFile.d.ts} +4 -4
- package/dist/fileRepository/api/uploadFile.d.ts.map +1 -0
- package/dist/fileRepository/api/{createImage.d.ts → uploadImage.d.ts} +4 -4
- package/dist/fileRepository/api/uploadImage.d.ts.map +1 -0
- package/dist/fileRepository/api/{createVideo.d.ts → uploadVideo.d.ts} +5 -5
- package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -0
- package/dist/index.cjs.js +657 -170
- package/dist/index.esm.js +657 -170
- package/dist/index.umd.js +4 -4
- package/dist/messageRepository/api/createMessage.d.ts +1 -1
- package/dist/messageRepository/api/editMessage.d.ts +38 -0
- package/dist/messageRepository/api/editMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/flagMessage.d.ts +14 -0
- package/dist/messageRepository/api/flagMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/index.d.ts +5 -1
- package/dist/messageRepository/api/index.d.ts.map +1 -1
- package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts +14 -0
- package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts.map +1 -0
- package/dist/messageRepository/api/{deleteMessage.d.ts → softDeleteMessage.d.ts} +6 -6
- package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/editMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/editMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/flagMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/flagMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/tests/unflagMessage.test.d.ts +2 -0
- package/dist/messageRepository/api/tests/unflagMessage.test.d.ts.map +1 -0
- package/dist/messageRepository/api/unflagMessage.d.ts +14 -0
- package/dist/messageRepository/api/unflagMessage.d.ts.map +1 -0
- package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
- package/dist/postRepository/api/deletePost.d.ts +1 -1
- package/dist/postRepository/api/deletePost.d.ts.map +1 -1
- package/dist/postRepository/api/editPost.d.ts +24 -0
- package/dist/postRepository/api/editPost.d.ts.map +1 -0
- package/dist/postRepository/api/flagPost.d.ts +14 -0
- package/dist/postRepository/api/flagPost.d.ts.map +1 -0
- package/dist/postRepository/api/hardDeletePost.d.ts +16 -0
- package/dist/postRepository/api/hardDeletePost.d.ts.map +1 -0
- package/dist/postRepository/api/index.d.ts +6 -0
- package/dist/postRepository/api/index.d.ts.map +1 -1
- package/dist/postRepository/api/isPostFlaggedByMe.d.ts +14 -0
- package/dist/postRepository/api/isPostFlaggedByMe.d.ts.map +1 -0
- package/dist/postRepository/api/softDeletePost.d.ts +16 -0
- package/dist/postRepository/api/softDeletePost.d.ts.map +1 -0
- package/dist/postRepository/api/unflagPost.d.ts +14 -0
- package/dist/postRepository/api/unflagPost.d.ts.map +1 -0
- package/dist/postRepository/api/updatePost.d.ts.map +1 -1
- package/dist/userRepository/api/flagUser.d.ts +14 -0
- package/dist/userRepository/api/flagUser.d.ts.map +1 -0
- package/dist/userRepository/api/index.d.ts +3 -0
- package/dist/userRepository/api/index.d.ts.map +1 -1
- package/dist/userRepository/api/isUserFlaggedByMe.d.ts +14 -0
- package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -0
- package/dist/userRepository/api/tests/flagUser.test.d.ts +2 -0
- package/dist/userRepository/api/tests/flagUser.test.d.ts.map +1 -0
- package/dist/userRepository/api/tests/unflagUser.test.d.ts +2 -0
- package/dist/userRepository/api/tests/unflagUser.test.d.ts.map +1 -0
- package/dist/userRepository/api/unflagUser.d.ts +14 -0
- package/dist/userRepository/api/unflagUser.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/@types/domains/channel.ts +7 -2
- package/src/categoryRepository/observers/getCategories.ts +1 -1
- package/src/channelRepsitory/channelMembership/observers/getMembers.ts +1 -1
- package/src/channelRepsitory/observers/getChannels.ts +1 -1
- package/src/channelRepsitory/observers/tests/getChannels.test.ts +3 -9
- package/src/commentRepository/observers/getComments.ts +4 -4
- package/src/communityRepository/communityMembership/api/index.ts +2 -0
- package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.ts +1 -1
- package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.ts +1 -1
- package/src/communityRepository/communityMembership/index.ts +1 -0
- package/src/communityRepository/communityMembership/observers/getMembers.ts +1 -1
- package/src/communityRepository/communityModeration/api/index.ts +0 -3
- package/src/communityRepository/observers/getCommunities.ts +1 -1
- package/src/core/query/tests/runQuery.test.ts +3 -3
- package/src/feedRepository/api/index.ts +1 -0
- package/src/fileRepository/api/index.ts +3 -3
- package/src/fileRepository/api/test/uploadFile.test.ts +69 -0
- package/src/fileRepository/api/test/{createImage.test.ts → uploadImage.test.ts} +7 -7
- package/src/fileRepository/api/test/{createVideo.test.ts → uploadVideo.test.ts} +8 -8
- package/src/fileRepository/api/{createFile.ts → uploadFile.ts} +4 -6
- package/src/fileRepository/api/{createImage.ts → uploadImage.ts} +4 -6
- package/src/fileRepository/api/{createVideo.ts → uploadVideo.ts} +5 -7
- package/src/messageRepository/api/editMessage.ts +100 -0
- package/src/messageRepository/api/flagMessage.ts +40 -0
- package/src/messageRepository/api/index.ts +7 -1
- package/src/messageRepository/api/isMessageFlaggedByMe.ts +30 -0
- package/src/messageRepository/api/{deleteMessage.ts → softDeleteMessage.ts} +8 -8
- package/src/messageRepository/api/tests/deleteMessage.test.ts +11 -11
- package/src/messageRepository/api/tests/{updateMessage.test.ts → editMessage.test.ts} +10 -10
- package/src/messageRepository/api/tests/flagMessage.test.ts +87 -0
- package/src/messageRepository/api/tests/unflagMessage.test.ts +87 -0
- package/src/messageRepository/api/unflagMessage.ts +40 -0
- package/src/messageRepository/api/updateMessage.ts +4 -0
- package/src/messageRepository/observers/getMessages.ts +4 -4
- package/src/postRepository/api/deletePost.ts +1 -7
- package/src/postRepository/api/editPost.ts +58 -0
- package/src/postRepository/api/flagPost.ts +38 -0
- package/src/postRepository/api/hardDeletePost.ts +30 -0
- package/src/postRepository/api/index.ts +8 -0
- package/src/postRepository/api/isPostFlaggedByMe.ts +33 -0
- package/src/postRepository/api/softDeletePost.ts +30 -0
- package/src/postRepository/api/unflagPost.ts +39 -0
- package/src/postRepository/api/updatePost.ts +4 -0
- package/src/postRepository/observers/getPosts.ts +4 -4
- package/src/reactionRepository/observers/getReactions.ts +4 -4
- package/src/report/api/createReport.ts +1 -1
- package/src/report/api/tests/createReport.test.ts +2 -62
- package/src/report/api/tests/deleteReport.test.ts +2 -62
- package/src/userRepository/api/flagUser.ts +37 -0
- package/src/userRepository/api/index.ts +4 -0
- package/src/userRepository/api/isUserFlaggedByMe.ts +33 -0
- package/src/userRepository/api/tests/flagUser.test.ts +81 -0
- package/src/userRepository/api/tests/unflagUser.test.ts +80 -0
- package/src/userRepository/api/unflagUser.ts +37 -0
- package/src/userRepository/observers/getBlockedUsers.ts +4 -4
- package/src/userRepository/observers/getUsers.ts +1 -1
- package/src/userRepository/observers/tests/getUsers.test.ts +3 -9
- package/src/userRepository/relationship/follow/observers/getFollowers.ts +4 -4
- package/src/userRepository/relationship/follow/observers/getFollowings.ts +4 -4
- package/dist/communityRepository/communityModeration/api/test/addMembers.test.d.ts.map +0 -1
- package/dist/communityRepository/communityModeration/api/test/removeMembers.test.d.ts.map +0 -1
- package/dist/fileRepository/api/createFile.d.ts.map +0 -1
- package/dist/fileRepository/api/createImage.d.ts.map +0 -1
- package/dist/fileRepository/api/createVideo.d.ts.map +0 -1
- package/dist/fileRepository/api/test/createImage.test.d.ts +0 -2
- package/dist/fileRepository/api/test/createImage.test.d.ts.map +0 -1
- package/dist/fileRepository/api/test/createVideo.test.d.ts +0 -2
- package/dist/fileRepository/api/test/createVideo.test.d.ts.map +0 -1
- package/dist/messageRepository/api/deleteMessage.d.ts.map +0 -1
- package/dist/messageRepository/api/tests/updateMessage.test.d.ts +0 -2
- package/dist/messageRepository/api/tests/updateMessage.test.d.ts.map +0 -1
- /package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.d.ts +0 -0
- /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.d.ts +0 -0
- /package/src/communityRepository/{communityModeration → communityMembership}/api/addMembers.ts +0 -0
- /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 {
|
|
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(
|
|
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(
|
|
151
|
+
const query = createQuery(softDeleteMessage, deletingMsgId);
|
|
152
152
|
runQuery(query, callback);
|
|
153
153
|
await pause();
|
|
154
154
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './getFile';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './uploadFile';
|
|
3
3
|
export * from './deleteFile';
|
|
4
4
|
export * from './fileUrlWithSize';
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
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 {
|
|
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('
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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 {
|
|
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('
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
11
|
-
* const created = await
|
|
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
|
|
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/
|
|
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 {
|
|
11
|
-
* const created = await
|
|
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
|
|
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/
|
|
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 {
|
|
11
|
-
* const created = await
|
|
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
|
|
19
|
+
* @returns The newly uploaded {@link Amity.File<'video'>}
|
|
20
20
|
*
|
|
21
21
|
* @category File API
|
|
22
22
|
* @async
|
|
23
23
|
*/
|
|
24
|
-
export const
|
|
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/
|
|
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 './
|
|
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 {
|
|
13
|
-
* const success = await
|
|
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
|
|
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/
|
|
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 {
|
|
45
|
-
* const success =
|
|
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
|
-
|
|
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/
|
|
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 {
|
|
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('
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
66
|
+
await softDeleteMessage(deleteId);
|
|
67
67
|
|
|
68
68
|
await expect(callbackPromise).resolves.toEqual(deletedMessage);
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
describe('
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
121
|
+
expect(softDeleteMessage.optimistically(deleteId)?.cachedAt).toBe(-1);
|
|
122
122
|
});
|
|
123
123
|
});
|