@amityco/ts-sdk 6.29.2 → 6.29.3-9895419.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 (172) hide show
  1. package/.env +26 -26
  2. package/dist/@types/core/model.d.ts +4 -0
  3. package/dist/@types/core/model.d.ts.map +1 -1
  4. package/dist/@types/core/payload.d.ts +17 -6
  5. package/dist/@types/core/payload.d.ts.map +1 -1
  6. package/dist/@types/domains/channel.d.ts +8 -0
  7. package/dist/@types/domains/channel.d.ts.map +1 -1
  8. package/dist/@types/domains/comment.d.ts +5 -4
  9. package/dist/@types/domains/comment.d.ts.map +1 -1
  10. package/dist/@types/domains/community.d.ts +32 -8
  11. package/dist/@types/domains/community.d.ts.map +1 -1
  12. package/dist/@types/domains/group.d.ts +13 -7
  13. package/dist/@types/domains/group.d.ts.map +1 -1
  14. package/dist/@types/domains/pin.d.ts +22 -0
  15. package/dist/@types/domains/pin.d.ts.map +1 -0
  16. package/dist/@types/domains/pinnedPost.d.ts +28 -0
  17. package/dist/@types/domains/pinnedPost.d.ts.map +1 -0
  18. package/dist/@types/domains/poll.d.ts +3 -1
  19. package/dist/@types/domains/poll.d.ts.map +1 -1
  20. package/dist/@types/domains/post.d.ts +6 -5
  21. package/dist/@types/domains/post.d.ts.map +1 -1
  22. package/dist/@types/domains/stream.d.ts +2 -1
  23. package/dist/@types/domains/stream.d.ts.map +1 -1
  24. package/dist/@types/domains/user.d.ts +34 -6
  25. package/dist/@types/domains/user.d.ts.map +1 -1
  26. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -1
  27. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberPaginationController.d.ts +3 -2
  28. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberPaginationController.d.ts.map +1 -1
  29. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.d.ts +14 -0
  30. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.d.ts.map +1 -0
  31. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberPaginationController.d.ts +14 -0
  32. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberPaginationController.d.ts.map +1 -0
  33. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts +14 -0
  34. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts.map +1 -0
  35. package/dist/channelRepository/channelMembership/observers/searchMembers/index.d.ts +2 -0
  36. package/dist/channelRepository/channelMembership/observers/searchMembers/index.d.ts.map +1 -0
  37. package/dist/channelRepository/channelMembership/observers/searchMembers/searchMembers.d.ts +21 -0
  38. package/dist/channelRepository/channelMembership/observers/searchMembers/searchMembers.d.ts.map +1 -0
  39. package/dist/channelRepository/observers/getChannels/ChannelPaginationController.d.ts +3 -3
  40. package/dist/channelRepository/utils/prepareChannelPayload.d.ts.map +1 -1
  41. package/dist/channelRepository/utils/tests/prepareChannelPayload.test.d.ts +1 -1
  42. package/dist/channelRepository/utils/tests/prepareChannelPayload.test.d.ts.map +1 -1
  43. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersLiveCollectionController.d.ts.map +1 -1
  44. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersLiveCollectionController.d.ts.map +1 -1
  45. package/dist/communityRepository/utils/payload.d.ts +2 -6
  46. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  47. package/dist/core/model/idResolvers.d.ts.map +1 -1
  48. package/dist/core/model/index.d.ts.map +1 -1
  49. package/dist/group/utils/withUser.d.ts +13 -0
  50. package/dist/group/utils/withUser.d.ts.map +1 -1
  51. package/dist/index.cjs.js +957 -614
  52. package/dist/index.esm.js +880 -537
  53. package/dist/index.umd.js +4 -4
  54. package/dist/pollRepository/observers/observePoll.d.ts +1 -1
  55. package/dist/pollRepository/observers/observePoll.d.ts.map +1 -1
  56. package/dist/postRepository/internalApi/index.d.ts +1 -12
  57. package/dist/postRepository/internalApi/index.d.ts.map +1 -1
  58. package/dist/postRepository/observers/getPinnedPosts/PinnedPostLiveCollectionController.d.ts +14 -0
  59. package/dist/postRepository/observers/getPinnedPosts/PinnedPostLiveCollectionController.d.ts.map +1 -0
  60. package/dist/postRepository/observers/getPinnedPosts/PinnedPostPaginationController.d.ts +13 -0
  61. package/dist/postRepository/observers/getPinnedPosts/PinnedPostPaginationController.d.ts.map +1 -0
  62. package/dist/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.d.ts +9 -0
  63. package/dist/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.d.ts.map +1 -0
  64. package/dist/postRepository/observers/getPinnedPosts.d.ts +12 -0
  65. package/dist/postRepository/observers/getPinnedPosts.d.ts.map +1 -0
  66. package/dist/postRepository/observers/index.d.ts +1 -0
  67. package/dist/postRepository/observers/index.d.ts.map +1 -1
  68. package/dist/postRepository/utils/payload.d.ts.map +1 -1
  69. package/dist/report/api/createReport.d.ts +1 -2
  70. package/dist/report/api/createReport.d.ts.map +1 -1
  71. package/dist/report/api/deleteReport.d.ts +1 -2
  72. package/dist/report/api/deleteReport.d.ts.map +1 -1
  73. package/dist/report/api/isReportedByMe.d.ts +1 -2
  74. package/dist/report/api/isReportedByMe.d.ts.map +1 -1
  75. package/dist/streamRepository/observers/getStreams/GetStreamsPageController.d.ts +1 -1
  76. package/dist/userRepository/api/flagUser.d.ts.map +1 -1
  77. package/dist/userRepository/api/getUser.d.ts.map +1 -1
  78. package/dist/userRepository/api/getUserByIds.d.ts.map +1 -1
  79. package/dist/userRepository/api/queryBlockedUsers.d.ts.map +1 -1
  80. package/dist/userRepository/api/queryUsers.d.ts.map +1 -1
  81. package/dist/userRepository/api/unflagUser.d.ts.map +1 -1
  82. package/dist/userRepository/api/updateUser.d.ts.map +1 -1
  83. package/dist/userRepository/events/utils.d.ts.map +1 -1
  84. package/dist/userRepository/internalApi/getUser.d.ts.map +1 -1
  85. package/dist/userRepository/internalApi/queryUsers.d.ts.map +1 -1
  86. package/dist/userRepository/observers/enums.d.ts +8 -0
  87. package/dist/userRepository/observers/enums.d.ts.map +1 -0
  88. package/dist/userRepository/observers/getUsers/UserLiveCollectionController.d.ts +14 -0
  89. package/dist/userRepository/observers/getUsers/UserLiveCollectionController.d.ts.map +1 -0
  90. package/dist/userRepository/observers/getUsers/UserPaginationController.d.ts +5 -0
  91. package/dist/userRepository/observers/getUsers/UserPaginationController.d.ts.map +1 -0
  92. package/dist/userRepository/observers/getUsers/UserQueryStreamController.d.ts +15 -0
  93. package/dist/userRepository/observers/getUsers/UserQueryStreamController.d.ts.map +1 -0
  94. package/dist/userRepository/observers/getUsers.d.ts +0 -1
  95. package/dist/userRepository/observers/getUsers.d.ts.map +1 -1
  96. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserLiveCollectionController.d.ts +14 -0
  97. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserLiveCollectionController.d.ts.map +1 -0
  98. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserPaginationController.d.ts +5 -0
  99. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserPaginationController.d.ts.map +1 -0
  100. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserQueryStreamController.d.ts +15 -0
  101. package/dist/userRepository/observers/searchUserByDisplayName/SearchUserQueryStreamController.d.ts.map +1 -0
  102. package/dist/userRepository/observers/searchUserByDisplayName.d.ts.map +1 -1
  103. package/dist/userRepository/utils/index.d.ts +3 -0
  104. package/dist/userRepository/utils/index.d.ts.map +1 -0
  105. package/dist/utils/linkedObject/index.d.ts +2 -1
  106. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  107. package/dist/utils/linkedObject/pinnedPostLinkedObject.d.ts +2 -0
  108. package/dist/utils/linkedObject/pinnedPostLinkedObject.d.ts.map +1 -0
  109. package/dist/utils/tests/dummy/channel.d.ts +12 -12
  110. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  111. package/dist/utils/tests/dummy/community.d.ts +2 -2
  112. package/dist/utils/tests/dummy/user.d.ts +10 -2
  113. package/dist/utils/tests/dummy/user.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/src/@types/core/model.ts +6 -0
  116. package/src/@types/core/payload.ts +17 -7
  117. package/src/@types/domains/channel.ts +13 -0
  118. package/src/@types/domains/comment.ts +6 -4
  119. package/src/@types/domains/community.ts +40 -12
  120. package/src/@types/domains/group.ts +14 -6
  121. package/src/@types/domains/pin.ts +27 -0
  122. package/src/@types/domains/pinnedPost.ts +35 -0
  123. package/src/@types/domains/poll.ts +5 -1
  124. package/src/@types/domains/post.ts +7 -5
  125. package/src/@types/domains/stream.ts +3 -1
  126. package/src/@types/domains/user.ts +49 -6
  127. package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +6 -0
  128. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.ts +142 -0
  129. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberPaginationController.ts +28 -0
  130. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.ts +112 -0
  131. package/src/channelRepository/channelMembership/observers/searchMembers/index.ts +1 -0
  132. package/src/channelRepository/channelMembership/observers/searchMembers/searchMembers.ts +111 -0
  133. package/src/channelRepository/utils/prepareChannelPayload.ts +8 -4
  134. package/src/communityRepository/communityMembership/observers/getMembers/CommunityMembersLiveCollectionController.ts +6 -0
  135. package/src/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersLiveCollectionController.ts +6 -0
  136. package/src/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.ts +3 -3
  137. package/src/communityRepository/utils/payload.ts +23 -58
  138. package/src/core/model/idResolvers.ts +3 -0
  139. package/src/core/model/index.ts +3 -0
  140. package/src/group/utils/withUser.ts +33 -0
  141. package/src/postRepository/internalApi/index.ts +1 -16
  142. package/src/postRepository/observers/getPinnedPosts/PinnedPostLiveCollectionController.ts +104 -0
  143. package/src/postRepository/observers/getPinnedPosts/PinnedPostPaginationController.ts +23 -0
  144. package/src/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.ts +61 -0
  145. package/src/postRepository/observers/getPinnedPosts.ts +41 -0
  146. package/src/postRepository/observers/index.ts +1 -0
  147. package/src/postRepository/utils/payload.ts +23 -7
  148. package/src/report/api/createReport.ts +100 -31
  149. package/src/report/api/deleteReport.ts +100 -31
  150. package/src/report/api/isReportedByMe.ts +72 -11
  151. package/src/userRepository/api/flagUser.ts +5 -2
  152. package/src/userRepository/api/getUser.ts +4 -43
  153. package/src/userRepository/api/getUserByIds.ts +5 -2
  154. package/src/userRepository/api/queryBlockedUsers.ts +6 -6
  155. package/src/userRepository/api/queryUsers.ts +11 -87
  156. package/src/userRepository/api/unflagUser.ts +5 -2
  157. package/src/userRepository/api/updateUser.ts +5 -11
  158. package/src/userRepository/events/utils.ts +4 -1
  159. package/src/userRepository/internalApi/getUser.ts +12 -16
  160. package/src/userRepository/internalApi/queryUsers.ts +7 -4
  161. package/src/userRepository/observers/enums.ts +7 -0
  162. package/src/userRepository/observers/getUsers/UserLiveCollectionController.ts +131 -0
  163. package/src/userRepository/observers/getUsers/UserPaginationController.ts +25 -0
  164. package/src/userRepository/observers/getUsers/UserQueryStreamController.ts +82 -0
  165. package/src/userRepository/observers/getUsers.ts +7 -137
  166. package/src/userRepository/observers/searchUserByDisplayName/SearchUserLiveCollectionController.ts +116 -0
  167. package/src/userRepository/observers/searchUserByDisplayName/SearchUserPaginationController.ts +25 -0
  168. package/src/userRepository/observers/searchUserByDisplayName/SearchUserQueryStreamController.ts +82 -0
  169. package/src/userRepository/observers/searchUserByDisplayName.ts +25 -1
  170. package/src/userRepository/utils/index.ts +13 -0
  171. package/src/utils/linkedObject/index.ts +2 -0
  172. package/src/utils/linkedObject/pinnedPostLinkedObject.ts +28 -0
@@ -0,0 +1,61 @@
1
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { getResolver } from '~/core/model';
5
+ import { getActiveClient } from '~/client';
6
+
7
+ export class PinnedPostQueryStreamController extends QueryStreamController<
8
+ Amity.PinnedPostPayload,
9
+ Amity.PinnedPostLiveCollection
10
+ > {
11
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
12
+
13
+ private preparePayload: (response: Amity.PinnedPostPayload) => Amity.ProcessedPostPayload;
14
+
15
+ constructor(
16
+ query: Amity.PinnedPostLiveCollection,
17
+ cacheKey: string[],
18
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
19
+ preparePayload: (response: Amity.PinnedPostPayload) => Amity.ProcessedPostPayload,
20
+ ) {
21
+ super(query, cacheKey);
22
+ this.notifyChange = notifyChange;
23
+ this.preparePayload = preparePayload;
24
+ }
25
+
26
+ // eslint-disable-next-line class-methods-use-this
27
+ async saveToMainDB(response: Amity.PinnedPostPayload) {
28
+ const client = getActiveClient();
29
+ const cachedAt = client.cache && Date.now();
30
+
31
+ if (client.cache) {
32
+ ingestInCache(response, { cachedAt });
33
+ }
34
+ }
35
+
36
+ appendToQueryStream(
37
+ response: Amity.PinnedPostPayload & Partial<Amity.Pagination>,
38
+ direction: Amity.LiveCollectionPageDirection,
39
+ refresh = false,
40
+ ) {
41
+ if (refresh) {
42
+ pushToCache(this.cacheKey, {
43
+ data: response.pins.map(getResolver('pin')),
44
+ });
45
+ } else {
46
+ const collection = pullFromCache<Amity.PinnedPostLiveCollectionCache>(this.cacheKey)?.data;
47
+
48
+ const pinnedPosts = collection?.data ?? [];
49
+
50
+ pushToCache(this.cacheKey, {
51
+ ...collection,
52
+ data: [...new Set([...pinnedPosts, ...response.pins.map(getResolver('pin'))])],
53
+ });
54
+
55
+ this.notifyChange({
56
+ origin: Amity.LiveDataOrigin.SERVER,
57
+ loading: false,
58
+ });
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,41 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { dropFromCache } from '~/cache/api';
3
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
4
+ import { PinnedPostLiveCollectionController } from './getPinnedPosts/PinnedPostLiveCollectionController';
5
+
6
+ /**
7
+ * Get pinned posts for a community
8
+ *
9
+ * @param communityId the ID of the community
10
+ * @param placement the placement of the pinned post ('announcement' or 'default'), or null to fetch all pinned posts
11
+ * @returns the associated pinned post(s)
12
+ *
13
+ * @category Pined Posts Live Collection
14
+ *
15
+ */
16
+ export const getPinnedPosts = (
17
+ params: Amity.LiveCollectionParams<Amity.PinnedPostLiveCollection>,
18
+ callback: Amity.LiveCollectionCallback<Amity.PinnedPost>,
19
+ config?: Amity.LiveCollectionConfig,
20
+ ) => {
21
+ const { log, cache } = getActiveClient();
22
+
23
+ if (!cache) {
24
+ console.log(ENABLE_CACHE_MESSAGE);
25
+ }
26
+
27
+ const timestamp = Date.now();
28
+ log(`getPinnedPosts(tmpid: ${timestamp}) > listen`);
29
+
30
+ const pinnedPostLiveCollection = new PinnedPostLiveCollectionController(params, callback);
31
+ const disposers = pinnedPostLiveCollection.startSubscription();
32
+
33
+ const cacheKey = pinnedPostLiveCollection.getCacheKey();
34
+
35
+ disposers.push(() => dropFromCache(cacheKey));
36
+
37
+ return () => {
38
+ log(`getPinnedPosts(tmpid: ${timestamp}) > dispose`);
39
+ disposers.forEach(fn => fn());
40
+ };
41
+ };
@@ -2,3 +2,4 @@ export * from './observePosts';
2
2
  export * from './observePost';
3
3
  export * from './getPost';
4
4
  export * from './getPosts';
5
+ export * from './getPinnedPosts';
@@ -1,17 +1,33 @@
1
- import { convertCommunityPayload } from '~/communityRepository/utils';
1
+ import { addPostSetting } from '~/communityRepository/utils';
2
+ import { updateMembershipStatus } from '~/communityRepository/utils/communityWithMembership';
2
3
 
3
4
  export const preparePostPayload = (postPayload: Amity.PostPayload): Amity.ProcessedPostPayload => {
4
5
  const { posts } = postPayload;
5
6
 
6
- const { communities, communityUsers } = convertCommunityPayload({
7
- communities: postPayload.communities,
8
- communityUsers: postPayload.communityUsers,
9
- });
7
+ // Unpack community payload by mapping payload field to postSetting value.
8
+ const communitiesWithPostSetting = addPostSetting({ communities: postPayload.communities });
9
+
10
+ // map users with community
11
+ const mappedCommunityUsers: Array<Amity.Membership<'community'>> = postPayload.communityUsers.map(
12
+ communityUser => {
13
+ const user = postPayload.users.find(user => user.userId === communityUser.userId)!;
14
+
15
+ return {
16
+ ...communityUser,
17
+ user,
18
+ };
19
+ },
20
+ );
21
+
22
+ const communityWithMembershipStatus = updateMembershipStatus(
23
+ communitiesWithPostSetting,
24
+ mappedCommunityUsers,
25
+ );
10
26
 
11
27
  return {
12
28
  ...postPayload,
13
29
  posts,
14
- communities,
15
- communityUsers,
30
+ communities: communityWithMembershipStatus,
31
+ communityUsers: mappedCommunityUsers,
16
32
  };
17
33
  };
@@ -2,10 +2,94 @@ import { getActiveClient } from '~/client/api/activeClient';
2
2
 
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
  import { fireEvent } from '~/core/events';
5
- import { prepareMembershipPayload } from '~/group/utils';
6
-
7
5
  import { prepareMessagePayload } from '~/messageRepository/utils';
8
- import REFERENCE_TYPES from '../constants/referenceTypes';
6
+ import { preparePostPayload } from '~/postRepository/utils/payload';
7
+ import { prepareUserPayload } from '~/userRepository/utils';
8
+ import { prepareCommentPayload } from '~/commentRepository/utils/payload';
9
+
10
+ const createMessageReport = async ({
11
+ client,
12
+ referenceId,
13
+ }: {
14
+ client: Amity.Client;
15
+ referenceId: string;
16
+ }) => {
17
+ const { data: payload } = await client.http.post<Amity.MessagePayload>(
18
+ `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`,
19
+ );
20
+
21
+ if (client.cache) {
22
+ const messagePayload = await prepareMessagePayload(payload as Amity.MessagePayload);
23
+ ingestInCache(messagePayload);
24
+ }
25
+
26
+ fireEvent(`message.flagged`, payload);
27
+
28
+ return !!payload;
29
+ };
30
+
31
+ const createPostReport = async ({
32
+ client,
33
+ referenceId,
34
+ }: {
35
+ client: Amity.Client;
36
+ referenceId: string;
37
+ }) => {
38
+ const { data: payload } = await client.http.post<Amity.PostPayload>(
39
+ `/api/v3/post/${encodeURIComponent(referenceId)}/flag`,
40
+ );
41
+
42
+ if (client.cache) {
43
+ const postPayload = await preparePostPayload(payload);
44
+ ingestInCache(postPayload);
45
+ }
46
+
47
+ fireEvent(`post.flagged`, payload);
48
+
49
+ return !!payload;
50
+ };
51
+
52
+ const createUserReport = async ({
53
+ client,
54
+ referenceId,
55
+ }: {
56
+ client: Amity.Client;
57
+ referenceId: string;
58
+ }) => {
59
+ const { data: payload } = await client.http.post<Amity.UserPayload>(
60
+ `/api/v4/me/flags/${encodeURIComponent(referenceId)}`,
61
+ );
62
+
63
+ if (client.cache) {
64
+ const userPayload = await prepareUserPayload(payload);
65
+ ingestInCache(userPayload);
66
+ }
67
+
68
+ fireEvent(`user.flagged`, payload);
69
+
70
+ return !!payload;
71
+ };
72
+
73
+ const createCommentReport = async ({
74
+ client,
75
+ referenceId,
76
+ }: {
77
+ client: Amity.Client;
78
+ referenceId: string;
79
+ }) => {
80
+ const { data: payload } = await client.http.post<Amity.CommentPayload>(
81
+ `/api/v3/comment/${encodeURIComponent(referenceId)}/flag`,
82
+ );
83
+
84
+ if (client.cache) {
85
+ const commentPayload = await prepareCommentPayload(payload);
86
+ ingestInCache(commentPayload);
87
+ }
88
+
89
+ fireEvent(`comment.flagged`, payload);
90
+
91
+ return !!payload;
92
+ };
9
93
 
10
94
  /**
11
95
  * ```js
@@ -21,42 +105,27 @@ import REFERENCE_TYPES from '../constants/referenceTypes';
21
105
  * @async
22
106
  * */
23
107
  export const createReport = async (
24
- referenceType: keyof typeof REFERENCE_TYPES,
108
+ referenceType: 'post' | 'comment' | 'message' | 'user',
25
109
  referenceId: string,
26
110
  ): Promise<boolean> => {
27
111
  const client = getActiveClient();
28
112
  client.log('report/createReport', { referenceType, referenceId });
29
113
 
30
- const getAPIUrl = (): string => {
31
- if (referenceType === 'user') {
32
- return `/api/v4/me/flags/${encodeURIComponent(referenceId)}`;
33
- }
34
-
35
- if (referenceType === 'message') {
36
- return `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`;
37
- }
38
-
39
- const { domainName } = REFERENCE_TYPES[referenceType];
40
-
41
- return `/api/v3/${domainName}/${encodeURIComponent(referenceId)}/flag`;
42
- };
114
+ if (referenceType === 'user') {
115
+ return createUserReport({ client, referenceId });
116
+ }
43
117
 
44
- const { data: payload } = await client.http.post<
45
- Amity.PostPayload | Amity.CommentPayload | Amity.MessagePayload | Amity.UserPayload
46
- >(getAPIUrl());
118
+ if (referenceType === 'message') {
119
+ return createMessageReport({ client, referenceId });
120
+ }
47
121
 
48
- if (client.cache) {
49
- if (referenceType === 'message') {
50
- const messagePayload = await prepareMessagePayload(payload as Amity.MessagePayload);
51
- ingestInCache(messagePayload);
52
- } else if (referenceType === 'post') {
53
- ingestInCache(prepareMembershipPayload(payload as Amity.PostPayload, 'communityUsers'));
54
- } else {
55
- ingestInCache(payload as Amity.CommentPayload | Amity.UserPayload);
56
- }
122
+ if (referenceType === 'post') {
123
+ return createPostReport({ client, referenceId });
57
124
  }
58
125
 
59
- fireEvent(`${referenceType}.flagged`, payload);
126
+ if (referenceType === 'comment') {
127
+ return createCommentReport({ client, referenceId });
128
+ }
60
129
 
61
- return !!payload;
130
+ return false;
62
131
  };
@@ -3,9 +3,94 @@ import { getActiveClient } from '~/client/api/activeClient';
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
 
5
5
  import { fireEvent } from '~/core/events';
6
- import { prepareMembershipPayload } from '~/group/utils';
7
6
  import { prepareMessagePayload } from '~/messageRepository/utils';
8
- import REFERENCE_TYPES from '../constants/referenceTypes';
7
+ import { preparePostPayload } from '~/postRepository/utils/payload';
8
+ import { prepareUserPayload } from '~/userRepository/utils';
9
+ import { prepareCommentPayload } from '~/commentRepository/utils/payload';
10
+
11
+ const deleteMessageReport = async ({
12
+ client,
13
+ referenceId,
14
+ }: {
15
+ client: Amity.Client;
16
+ referenceId: string;
17
+ }) => {
18
+ const { data: payload } = await client.http.delete<Amity.MessagePayload>(
19
+ `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`,
20
+ );
21
+
22
+ if (client.cache) {
23
+ const messagePayload = await prepareMessagePayload(payload as Amity.MessagePayload);
24
+ ingestInCache(messagePayload);
25
+ }
26
+
27
+ fireEvent(`message.unflagged`, payload);
28
+
29
+ return !!payload;
30
+ };
31
+
32
+ const deletePostReport = async ({
33
+ client,
34
+ referenceId,
35
+ }: {
36
+ client: Amity.Client;
37
+ referenceId: string;
38
+ }) => {
39
+ const { data: payload } = await client.http.delete<Amity.PostPayload>(
40
+ `/api/v3/post/${encodeURIComponent(referenceId)}/flag`,
41
+ );
42
+
43
+ if (client.cache) {
44
+ const postPayload = await preparePostPayload(payload);
45
+ ingestInCache(postPayload);
46
+ }
47
+
48
+ fireEvent(`post.unflagged`, payload);
49
+
50
+ return !!payload;
51
+ };
52
+
53
+ const deleteUserReport = async ({
54
+ client,
55
+ referenceId,
56
+ }: {
57
+ client: Amity.Client;
58
+ referenceId: string;
59
+ }) => {
60
+ const { data: payload } = await client.http.delete<Amity.UserPayload>(
61
+ `/api/v4/me/flags/${encodeURIComponent(referenceId)}`,
62
+ );
63
+
64
+ if (client.cache) {
65
+ const userPayload = await prepareUserPayload(payload);
66
+ ingestInCache(userPayload);
67
+ }
68
+
69
+ fireEvent(`user.unflagged`, payload);
70
+
71
+ return !!payload;
72
+ };
73
+
74
+ const deleteCommentReport = async ({
75
+ client,
76
+ referenceId,
77
+ }: {
78
+ client: Amity.Client;
79
+ referenceId: string;
80
+ }) => {
81
+ const { data: payload } = await client.http.delete<Amity.CommentPayload>(
82
+ `/api/v3/comment/${encodeURIComponent(referenceId)}/flag`,
83
+ );
84
+
85
+ if (client.cache) {
86
+ const commentPayload = await prepareCommentPayload(payload);
87
+ ingestInCache(commentPayload);
88
+ }
89
+
90
+ fireEvent(`comment.unflagged`, payload);
91
+
92
+ return !!payload;
93
+ };
9
94
 
10
95
  /**
11
96
  * ```js
@@ -21,43 +106,27 @@ import REFERENCE_TYPES from '../constants/referenceTypes';
21
106
  * @async
22
107
  * */
23
108
  export const deleteReport = async (
24
- referenceType: keyof typeof REFERENCE_TYPES,
109
+ referenceType: 'user' | 'message' | 'post' | 'comment',
25
110
  referenceId: string,
26
111
  ): Promise<boolean> => {
27
112
  const client = getActiveClient();
28
113
  client.log('report/deleteReport', { referenceType, referenceId });
29
114
 
30
- const getAPIUrl = (): string => {
31
- if (referenceType === 'user') {
32
- return `/api/v4/me/flags/${encodeURIComponent(referenceId)}`;
33
- }
34
-
35
- if (referenceType === 'message') {
36
- return `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`;
37
- }
38
-
39
- const { domainName } = REFERENCE_TYPES[referenceType];
40
-
41
- return `/api/v3/${domainName}/${encodeURIComponent(referenceId)}/unflag`;
42
- };
115
+ if (referenceType === 'user') {
116
+ return deleteUserReport({ client, referenceId });
117
+ }
43
118
 
44
- const { data: payload } = await client.http.delete<
45
- Amity.PostPayload | Amity.CommentPayload | Amity.ProcessedMessagePayload | Amity.UserPayload
46
- >(getAPIUrl());
119
+ if (referenceType === 'message') {
120
+ return deleteMessageReport({ client, referenceId });
121
+ }
47
122
 
48
- if (client.cache) {
49
- if (referenceType === 'message') {
50
- const messagePayload = await prepareMessagePayload(payload as Amity.MessagePayload);
51
- ingestInCache(messagePayload);
52
- } else if (referenceType === 'post') {
53
- ingestInCache(prepareMembershipPayload(payload as Amity.PostPayload, 'communityUsers'));
54
- } else {
55
- ingestInCache(payload as Amity.CommentPayload | Amity.UserPayload);
56
- }
123
+ if (referenceType === 'post') {
124
+ return deletePostReport({ client, referenceId });
57
125
  }
58
126
 
59
- // @ts-ignore
60
- fireEvent(`${referenceType}.unflagged`, payload);
127
+ if (referenceType === 'comment') {
128
+ return deleteCommentReport({ client, referenceId });
129
+ }
61
130
 
62
- return !!payload;
131
+ return false;
63
132
  };
@@ -1,5 +1,64 @@
1
1
  import { getActiveClient } from '~/client/api/activeClient';
2
- import REFERENCE_TYPES from '../constants/referenceTypes';
2
+
3
+ type ResponseData = { result?: boolean; isFlagByMe?: boolean };
4
+
5
+ const getMessageReport = async ({
6
+ client,
7
+ referenceId,
8
+ }: {
9
+ client: Amity.Client;
10
+ referenceId: string;
11
+ }) => {
12
+ const { data } = await client.http.get<ResponseData>(
13
+ `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`,
14
+ );
15
+
16
+ const { result, isFlagByMe } = data ?? {};
17
+
18
+ return result ?? isFlagByMe ?? false;
19
+ };
20
+
21
+ const getPostReport = async ({
22
+ client,
23
+ referenceId,
24
+ }: {
25
+ client: Amity.Client;
26
+ referenceId: string;
27
+ }) => {
28
+ const { data } = await client.http.get<ResponseData>(`/api/v3/user/${referenceId}/isflagbyme`);
29
+
30
+ const { result, isFlagByMe } = data ?? {};
31
+
32
+ return result ?? isFlagByMe ?? false;
33
+ };
34
+
35
+ const getUserReport = async ({
36
+ client,
37
+ referenceId,
38
+ }: {
39
+ client: Amity.Client;
40
+ referenceId: string;
41
+ }) => {
42
+ const { data } = await client.http.get<ResponseData>(`/api/v3/user/${referenceId}/isflagbyme`);
43
+
44
+ const { result, isFlagByMe } = data ?? {};
45
+
46
+ return result ?? isFlagByMe ?? false;
47
+ };
48
+
49
+ const getCommentReport = async ({
50
+ client,
51
+ referenceId,
52
+ }: {
53
+ client: Amity.Client;
54
+ referenceId: string;
55
+ }) => {
56
+ const { data } = await client.http.get<ResponseData>(`/api/v3/comment/${referenceId}/isflagbyme`);
57
+
58
+ const { result, isFlagByMe } = data ?? {};
59
+
60
+ return result ?? isFlagByMe ?? false;
61
+ };
3
62
 
4
63
  /**
5
64
  * ```js
@@ -15,25 +74,27 @@ import REFERENCE_TYPES from '../constants/referenceTypes';
15
74
  * @async
16
75
  * */
17
76
  export const isReportedByMe = async (
18
- referenceType: keyof typeof REFERENCE_TYPES,
77
+ referenceType: 'user' | 'message' | 'post' | 'comment',
19
78
  referenceId: string,
20
79
  ): Promise<boolean> => {
21
80
  const client = getActiveClient();
22
81
  client.log('report/isReportedByMe', { referenceType, referenceId });
23
82
 
24
- const { domainName } = REFERENCE_TYPES[referenceType];
83
+ if (referenceType === 'user') {
84
+ return getUserReport({ client, referenceId });
85
+ }
25
86
 
26
87
  if (referenceType === 'message') {
27
- const { data } = await client.http.get<{ result: boolean }>(
28
- `/api/v5/messages/${encodeURIComponent(referenceId)}/flags`,
29
- );
30
-
31
- return data.result;
88
+ return getMessageReport({ client, referenceId });
32
89
  }
33
90
 
34
- const { data } = await client.http.get(`/api/v3/${domainName}/${referenceId}/isflagbyme`);
91
+ if (referenceType === 'post') {
92
+ return getPostReport({ client, referenceId });
93
+ }
35
94
 
36
- const { result, isFlagByMe } = data ?? {};
95
+ if (referenceType === 'comment') {
96
+ return getCommentReport({ client, referenceId });
97
+ }
37
98
 
38
- return result ?? isFlagByMe ?? false;
99
+ return false;
39
100
  };
@@ -2,6 +2,7 @@ import { getActiveClient } from '~/client/api/activeClient';
2
2
 
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
  import { fireEvent } from '~/core/events';
5
+ import { prepareUserPayload } from '../utils';
5
6
 
6
7
  /* begin_public_function
7
8
  id: user.flag
@@ -22,15 +23,17 @@ export const flagUser = async (userId: Amity.User['userId']): Promise<boolean> =
22
23
  const client = getActiveClient();
23
24
  client.log('user/flagUser', userId);
24
25
 
25
- const { data: payload } = await client.http.post<Amity.UserPayload>(
26
+ const { data } = await client.http.post<Amity.UserPayload>(
26
27
  `api/v4/me/flags/${encodeURIComponent(userId)}`,
27
28
  );
28
29
 
30
+ const payload = prepareUserPayload(data);
31
+
29
32
  if (client.cache) {
30
33
  ingestInCache(payload);
31
34
  }
32
35
 
33
- fireEvent('user.flagged', payload);
36
+ fireEvent('user.flagged', data);
34
37
 
35
38
  return !!payload;
36
39
  };
@@ -1,13 +1,5 @@
1
- import { getActiveClient } from '~/client/api';
2
-
3
- import { pullFromCache } from '~/cache/api';
4
- import { ingestInCache } from '~/cache/api/ingestInCache';
5
- import { fireEvent } from '~/core/events';
6
-
7
- import { isInTombstone } from '~/cache/api/isInTombstone';
8
- import { checkIfShouldGoesToTombstone } from '~/cache/utils';
9
- import { pushToTombstone } from '~/cache/api/pushToTombstone';
10
1
  import { LinkedObject } from '~/utils/linkedObject';
2
+ import { getUser as getUserInternal } from '../internalApi/getUser';
11
3
 
12
4
  /**
13
5
  * ```js
@@ -24,36 +16,10 @@ import { LinkedObject } from '~/utils/linkedObject';
24
16
  * @async
25
17
  */
26
18
  export const getUser = async (userId: Amity.User['userId']): Promise<Amity.Cached<Amity.User>> => {
27
- const client = getActiveClient();
28
- client.log('user/getUser', userId);
29
-
30
- isInTombstone('user', userId);
31
-
32
- let data: Amity.UserPayload;
33
-
34
- try {
35
- const response = await client.http.get<Amity.UserPayload>(
36
- `/api/v3/users/${encodeURIComponent(userId)}`,
37
- );
38
-
39
- data = response.data;
40
- } catch (error) {
41
- if (checkIfShouldGoesToTombstone((error as Amity.ErrorResponse)?.code)) {
42
- pushToTombstone('user', userId);
43
- }
44
-
45
- throw error;
46
- }
47
-
48
- const cachedAt = client.cache && Date.now();
49
- if (client.cache) ingestInCache(data, { cachedAt });
50
-
51
- const { users } = data;
52
-
53
- fireEvent('user.fetched', data);
19
+ const { data, cachedAt } = await getUserInternal(userId);
54
20
 
55
21
  return {
56
- data: LinkedObject.user(users.find(user => user.userId === userId)!),
22
+ data: LinkedObject.user(data),
57
23
  cachedAt,
58
24
  };
59
25
  };
@@ -72,12 +38,7 @@ export const getUser = async (userId: Amity.User['userId']): Promise<Amity.Cache
72
38
  * @category User API
73
39
  */
74
40
  getUser.locally = (userId: Amity.User['userId']): Amity.Cached<Amity.User> | undefined => {
75
- const client = getActiveClient();
76
- client.log('user/getUser.locally', userId);
77
-
78
- if (!client.cache) return;
79
-
80
- const cached = pullFromCache<Amity.InternalUser>(['user', 'get', userId]);
41
+ const cached = getUserInternal.locally(userId);
81
42
 
82
43
  if (!cached) return;
83
44
 
@@ -4,6 +4,7 @@ import { pullFromCache } from '~/cache/api';
4
4
  import { ingestInCache } from '~/cache/api/ingestInCache';
5
5
  import { fireEvent } from '~/core/events';
6
6
  import { LinkedObject } from '~/utils/linkedObject';
7
+ import { prepareUserPayload } from '../utils';
7
8
 
8
9
  /* begin_public_function
9
10
  id: user.get_by_ids
@@ -35,13 +36,15 @@ export const getUserByIds = async (
35
36
  params: { userIds: encodedUserIds },
36
37
  });
37
38
 
39
+ const payload = prepareUserPayload(data);
40
+
38
41
  const cachedAt = client.cache && Date.now();
39
- if (client.cache) ingestInCache(data, { cachedAt });
42
+ if (client.cache) ingestInCache(payload, { cachedAt });
40
43
 
41
44
  fireEvent('user.fetched', data);
42
45
 
43
46
  return {
44
- data: data.users.map(user => LinkedObject.user(user)),
47
+ data: payload.users.map(user => LinkedObject.user(user)),
45
48
  cachedAt,
46
49
  };
47
50
  };