@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
|
@@ -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 { 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('
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
|
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('
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
-
* @
|
|
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
|
|
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`);
|