@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "6.29.2",
3
+ "version": "6.29.3-9895419.0",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -52,6 +52,9 @@ declare global {
52
52
 
53
53
  ad: Amity.InternalAd;
54
54
  advertiser: Amity.InternalAdvertiser;
55
+
56
+ pinTarget: Amity.InternalPinTarget;
57
+ pin: Amity.InternalPin;
55
58
  };
56
59
 
57
60
  type Model = ValueOf<Models>;
@@ -108,6 +111,9 @@ declare global {
108
111
 
109
112
  ad: Pick<Amity.InternalAd, 'adId'>;
110
113
  advertiser: Pick<Amity.Advertiser, 'advertiserId'>;
114
+
115
+ pinTarget: Pick<Amity.InternalPinTarget, 'targetId'>;
116
+ pin: Pick<Amity.InternalPin, 'referenceId'>;
111
117
  };
112
118
  }
113
119
  }
@@ -20,9 +20,15 @@ declare global {
20
20
  story: Amity.StoryPayload;
21
21
  globalStoryFeed: Amity.GlobalStoryFeedPayload;
22
22
  reaction: Amity.ReactionPayload;
23
+ pinnedPost: Amity.PinnedPostPayload;
23
24
  };
24
25
 
25
26
  type UserPayload = {
27
+ users: Amity.RawUser[];
28
+ files: Amity.File<'image'>[];
29
+ };
30
+
31
+ type ProcessedUserPayload = {
26
32
  users: Amity.InternalUser[];
27
33
  files: Amity.File<'image'>[];
28
34
  };
@@ -49,12 +55,12 @@ declare global {
49
55
  roles: Amity.Role[];
50
56
  };
51
57
 
52
- type ChannelPayload<T extends Amity.ChannelType = any> = {
58
+ type ChannelPayload<T extends Amity.ChannelType = any> = Amity.UserPayload & {
53
59
  channels: Amity.RawChannel<T>[];
54
60
  channelUsers: Amity.RawMembership<'channel'>[];
55
61
  messagePreviews: Amity.MessagePreviewPayload[];
56
62
  messageFeedsInfo?: Amity.messageFeedsInfoPayload[];
57
- } & Amity.UserPayload;
63
+ };
58
64
 
59
65
  /**
60
66
  * Items that extend from `Amity.Channel`
@@ -63,10 +69,11 @@ declare global {
63
69
  */
64
70
  type ProcessedChannelPayload<T extends Amity.ChannelType = any> = Omit<
65
71
  ChannelPayload,
66
- 'channels' | 'channelUsers' | 'messagePreviews' | 'messageFeedsInfo'
72
+ 'channels' | 'channelUsers' | 'messagePreviews' | 'messageFeedsInfo' | 'users'
67
73
  > & {
68
74
  channels: Amity.InternalChannel<T>[];
69
75
  channelUsers: Amity.Membership<'channel'>[];
76
+ users: Amity.InternalUser[];
70
77
  };
71
78
 
72
79
  type UserMarkerResponse = Omit<Amity.UserMarker, 'hasMentioned'> & Amity.IsMentioned;
@@ -210,7 +217,8 @@ declare global {
210
217
  channels: Amity.RawChannel[];
211
218
  channelUsers: Amity.RawMembership<'channel'>[];
212
219
  messagePreviews: Amity.MessagePreviewPayload[];
213
- } & Amity.UserPayload;
220
+ users: Amity.RawUser[];
221
+ } & Omit<Amity.UserPayload, 'users'>;
214
222
 
215
223
  /**
216
224
  * Items that extend from `Amity.ChannelMembershipPayload`
@@ -386,7 +394,9 @@ declare global {
386
394
  followCounts: Amity.FollowCount[];
387
395
  };
388
396
 
389
- type FollowersPayload = Amity.FollowStatusPayload & UserPayload;
397
+ // TODO: apply Amity.RawUser type
398
+ type FollowersPayload = Amity.FollowStatusPayload &
399
+ Omit<Amity.UserPayload, 'users'> & { users: Amity.InternalUser[] };
390
400
 
391
401
  type FollowInfoPayload = FollowInfoMePayload & Amity.FollowStatusPayload;
392
402
 
@@ -395,9 +405,9 @@ declare global {
395
405
  followCounts: Amity.FollowCount[];
396
406
  };
397
407
 
408
+ // TODO: apply Amity.RawUser type
398
409
  type BlockedUserPayload = Amity.FollowStatusPayload[] &
399
- Amity.UserPayload &
400
- Amity.BlockedUserPaged;
410
+ Omit<Amity.UserPayload, 'users'> & { users: Amity.InternalUser[] } & Amity.BlockedUserPaged;
401
411
 
402
412
  type MessagePreviewPayload<T extends Amity.MessageContentType = any> = {
403
413
  messageId: string;
@@ -129,6 +129,7 @@ declare global {
129
129
  sortBy?: 'firstCreated' | 'lastCreated';
130
130
  search?: string;
131
131
  page?: Amity.Page;
132
+ includeDeleted?: boolean;
132
133
  };
133
134
 
134
135
  type SearchChannelMembers = Amity.LiveCollectionParams<Omit<QueryChannelMembers, 'sortBy'>>;
@@ -145,6 +146,18 @@ declare global {
145
146
  >
146
147
  >;
147
148
 
149
+ type SearchChannelMembersLiveCollection = Amity.LiveCollectionParams<
150
+ Omit<
151
+ SearchChannelMembers,
152
+ 'page'
153
+ /**
154
+ * @remarks
155
+ * search will be deprecated in the next major version, please use `searchMembers()` instead.
156
+ * | 'search'
157
+ */
158
+ >
159
+ >;
160
+
148
161
  type ChannelMembersLiveCollectionCache = Amity.LiveCollectionCache<
149
162
  Amity.Membership<'channel'>['userId'],
150
163
  Pick<QueryChannelMembers, 'page'>
@@ -15,13 +15,13 @@ declare global {
15
15
  | 'onReactionAdded'
16
16
  | 'onReactionRemoved';
17
17
 
18
- type InternalComment<T extends CommentContentType = any> = {
18
+ type RawComment<T extends CommentContentType = any> = {
19
19
  commentId: string;
20
20
  userId: string;
21
- parentId?: InternalComment['commentId'];
22
- rootId: InternalComment['commentId'];
21
+ parentId?: RawComment['commentId'];
22
+ rootId: RawComment['commentId'];
23
23
  childrenNumber: number;
24
- children: InternalComment['commentId'][];
24
+ children: RawComment['commentId'][];
25
25
  segmentNumber: number;
26
26
  editedAt: Amity.timestamp;
27
27
  attachments?: Amity.Attachment[];
@@ -37,6 +37,8 @@ declare global {
37
37
  Amity.Subscribable &
38
38
  Amity.Mentionable<'user'>;
39
39
 
40
+ type InternalComment<T extends CommentContentType = any> = RawComment<T>;
41
+
40
42
  type CommentTarget = {
41
43
  type: InternalComment['targetType'] | 'unknown';
42
44
  communityId?: Amity.Community['communityId'];
@@ -23,6 +23,40 @@ export const DefaultCommunityPostSetting = 'ONLY_ADMIN_CAN_POST';
23
23
 
24
24
  declare global {
25
25
  namespace Amity {
26
+ const enum CommunitySortByEnum {
27
+ FirstCreated = 'firstCreated',
28
+ LastCreated = 'lastCreated',
29
+ /** @deprecated sortBy displayName is not available */
30
+ DisplayName = 'displayName',
31
+ }
32
+
33
+ type CommunitySortBy = `${Amity.CommunitySortByEnum}`;
34
+
35
+ const enum SearchCommunitySortByEnum {
36
+ FirstCreated = 'firstCreated',
37
+ LastCreated = 'lastCreated',
38
+ DisplayName = 'displayName',
39
+ }
40
+
41
+ type SearchCommunitySortBy = `${Amity.SearchCommunitySortByEnum}`;
42
+
43
+ const enum CommunityMemberSortByEnum {
44
+ FirstCreated = 'firstCreated',
45
+ LastCreated = 'lastCreated',
46
+ /** @deprecated sortBy displayName is not available */
47
+ DisplayName = 'displayName',
48
+ }
49
+
50
+ type CommunityMemberSortBy = `${Amity.CommunityMemberSortByEnum}`;
51
+
52
+ const enum SearchCommunityMemberSortByEnum {
53
+ FirstCreated = 'firstCreated',
54
+ LastCreated = 'lastCreated',
55
+ DisplayName = 'displayName',
56
+ }
57
+
58
+ type SearchCommunityMemberSortBy = `${Amity.SearchCommunityMemberSortByEnum}`;
59
+
26
60
  type CommunityActionType =
27
61
  | 'onCreate'
28
62
  | 'onUpdate'
@@ -81,11 +115,7 @@ declare global {
81
115
  categoryId?: Amity.InternalCategory['categoryId'];
82
116
  includeDeleted?: boolean;
83
117
  tags?: Amity.Taggable['tags'];
84
- sortBy?:
85
- | 'firstCreated'
86
- | 'lastCreated'
87
- /** @deprecated sortBy displayName is not available */
88
- | 'displayName';
118
+ sortBy?: Amity.CommunitySortBy | Amity.CommunitySortByEnum;
89
119
  page?: string;
90
120
  limit?: number;
91
121
  };
@@ -96,7 +126,7 @@ declare global {
96
126
  categoryId?: Amity.InternalCategory['categoryId'];
97
127
  includeDeleted?: boolean;
98
128
  tags?: Amity.Taggable['tags'];
99
- sortBy?: 'displayName' | 'firstCreated' | 'lastCreated';
129
+ sortBy?: Amity.SearchCommunitySortBy | Amity.SearchCommunitySortByEnum;
100
130
  page?: string;
101
131
  limit?: number;
102
132
  };
@@ -121,25 +151,23 @@ declare global {
121
151
  communityId: string;
122
152
  memberships?: ('banned' | 'member')[];
123
153
  roles?: string[];
124
- sortBy?:
125
- | 'firstCreated'
126
- | 'lastCreated'
127
- /** @deprecated sortBy displayName is not available */
128
- | 'displayName';
154
+ sortBy?: Amity.CommunityMemberSortByEnum | Amity.CommunityMemberSortBy;
129
155
  /** @deprecated use searchCommunityMembers instead */
130
156
  search?: Amity.InternalUser['displayName'] | Amity.InternalUser['userId'];
131
157
  page?: string;
132
158
  limit?: number;
159
+ includeDeleted?: boolean;
133
160
  };
134
161
 
135
162
  type QuerySearchCommunityMembers = {
136
163
  communityId: string;
137
164
  memberships?: ('banned' | 'member')[];
138
165
  roles?: string[];
139
- sortBy?: 'firstCreated' | 'lastCreated' | 'displayName';
166
+ sortBy?: Amity.SearchCommunityMemberSortByEnum | Amity.SearchCommunityMemberSortBy;
140
167
  search?: Amity.InternalUser['displayName'] | Amity.InternalUser['userId'];
141
168
  page?: string;
142
169
  limit?: number;
170
+ includeDeleted?: boolean;
143
171
  };
144
172
 
145
173
  type CommunityMemberLiveCollection = Amity.LiveCollectionParams<
@@ -2,14 +2,18 @@ export {};
2
2
 
3
3
  declare global {
4
4
  namespace Amity {
5
- type GroupType = 'channel' | 'community';
5
+ enum GroupTypeEnum {
6
+ CHANNEL = 'channel',
7
+ COMMUNITY = 'community',
8
+ }
9
+ type GroupType = `${GroupTypeEnum}`;
6
10
  type GroupMembership = 'member' | 'none' | 'banned' | 'muted';
7
11
 
8
12
  type Group = {
9
13
  membersCount: number;
10
14
  };
11
15
 
12
- type Member<T extends GroupType> = {
16
+ type Member<T extends Amity.GroupType> = {
13
17
  userId: Amity.InternalUser['userId'];
14
18
  } & (T extends 'channel'
15
19
  ? {
@@ -26,16 +30,20 @@ declare global {
26
30
  : never) &
27
31
  Amity.Timestamps;
28
32
 
29
- type MemberWithUser<T extends GroupType> = Member<T> & { user: Amity.InternalUser | undefined };
33
+ type MemberWithUser<T extends Amity.GroupType> = Member<T> & {
34
+ readonly user?: Amity.InternalUser;
35
+ };
30
36
 
31
- type RawMembership<T extends GroupType, WithUser = false> = {
37
+ type RawMembership<T extends Amity.GroupType> = {
32
38
  isBanned: boolean;
33
39
  isMuted: boolean;
34
40
  muteTimeout: string;
35
41
  lastActivity: Amity.timestamp;
36
- } & (WithUser extends true ? MemberWithUser<T> : Member<T>) &
42
+ } & Amity.Member<T> &
37
43
  Amity.Accredited;
38
44
 
39
- type Membership<T extends Amity.GroupType> = Amity.RawMembership<T, true>;
45
+ type Membership<T extends Amity.GroupType> = Amity.RawMembership<T> & {
46
+ readonly user?: Amity.InternalUser;
47
+ };
40
48
  }
41
49
  }
@@ -0,0 +1,27 @@
1
+ export {};
2
+
3
+ declare global {
4
+ namespace Amity {
5
+ type RawPin = {
6
+ referenceId: string; // postId
7
+ referenceType: string; // post
8
+ placement: string; // 'default' | 'announcement'
9
+ pinnedBy: string; // userId
10
+ pinnedAt: Date;
11
+ };
12
+
13
+ type RawPinTarget = {
14
+ targetId: string; // communityId | messageFeedId
15
+ targetType: string; // community | messageFeed
16
+ lastPinsUpdatedAt: Date;
17
+ };
18
+
19
+ type InternalPin = RawPin;
20
+
21
+ type InternalPinTarget = RawPinTarget;
22
+
23
+ type Pin = InternalPin;
24
+
25
+ type PinTarget = InternalPinTarget;
26
+ }
27
+ }
@@ -0,0 +1,35 @@
1
+ export {};
2
+
3
+ declare global {
4
+ namespace Amity {
5
+ // Raw response from BE, not contain all linked objects
6
+ type PinnedPostPayload<T extends Amity.PostContentType = any> = {
7
+ pinTargets: Amity.RawPinTarget[];
8
+ pins: Amity.RawPin[];
9
+ posts: Amity.RawPost<T>[];
10
+ postChildren: Amity.RawPost<T>[];
11
+ comments: Amity.RawComment[];
12
+ videoStreamings: Amity.RawStream[];
13
+ polls: Amity.RawPoll[];
14
+ } & Amity.CommunityPayload;
15
+
16
+ type PinnedPostLiveCollection = Amity.LiveCollectionParams<{
17
+ communityId: Amity.Community['communityId'];
18
+ placement?: string | null;
19
+ sortBy: 'lastPinned' | 'lastCreated';
20
+ }>;
21
+
22
+ type PinnedPostLiveCollectionCache = Omit<
23
+ Amity.LiveCollectionCache<Amity.InternalPin['referenceId'], Amity.Page>,
24
+ 'params'
25
+ >;
26
+
27
+ type PinnedPost = {
28
+ post: Amity.Post | undefined;
29
+ placement: Amity.Pin['placement'];
30
+ target: Amity.PinTarget | undefined;
31
+ pinnedBy: Amity.User;
32
+ pinnedAt: Date;
33
+ };
34
+ }
35
+ }
@@ -16,7 +16,7 @@ declare global {
16
16
 
17
17
  type PollStatus = 'closed' | 'open';
18
18
 
19
- type Poll = {
19
+ type RawPoll = {
20
20
  pollId: string;
21
21
  question: string;
22
22
  answers: PollAnswer[];
@@ -28,5 +28,9 @@ declare global {
28
28
  userId: Amity.InternalUser['userId'];
29
29
  } & Amity.Timestamps &
30
30
  Amity.SoftDelete;
31
+
32
+ type InternalPoll = RawPoll;
33
+
34
+ type Poll = InternalPoll;
31
35
  }
32
36
  }
@@ -26,15 +26,15 @@ declare global {
26
26
  | 'onReactionAdded'
27
27
  | 'onReactionRemoved';
28
28
 
29
- type InternalPost<T extends PostContentType = any> = {
29
+ type RawPost<T extends PostContentType = any> = {
30
30
  postId: string;
31
- postedUserId: Amity.InternalUser['userId']; // API-FIX: it should be "userId"
32
- parentId: Amity.InternalPost['postId'];
33
- parentPostId: Amity.InternalPost['postId'];
31
+ postedUserId: Amity.RawUser['userId'];
32
+ parentId: Amity.RawPost['postId'];
33
+ parentPostId: Amity.RawPost['postId'];
34
34
  targetType: PostTargetType;
35
35
  targetId: string;
36
36
  feedId: Amity.Feed['feedId'];
37
- children: Amity.InternalPost['postId'][];
37
+ children: Amity.RawPost['postId'][];
38
38
  comments: Amity.InternalComment['commentId'][];
39
39
  commentsCount: number; // API-FIX: backend doesn't follow its own convention
40
40
  hasFlaggedChildren: false;
@@ -51,6 +51,8 @@ declare global {
51
51
  Amity.AnalyticPostData &
52
52
  Amity.Mentionable<'user'>;
53
53
 
54
+ type InternalPost<T extends PostContentType = any> = RawPost<T>;
55
+
54
56
  type PostLinkObject = {
55
57
  latestComments: (Amity.Comment | null)[];
56
58
  creator: Amity.User | undefined;
@@ -44,7 +44,7 @@ declare global {
44
44
  stopTime: number;
45
45
  };
46
46
 
47
- type InternalStream = {
47
+ type RawStream = {
48
48
  streamId: string;
49
49
  title: string;
50
50
  thumbnailFileId?: Amity.File<'image'>['fileId'];
@@ -65,6 +65,8 @@ declare global {
65
65
  Amity.Timestamps &
66
66
  Amity.SoftDelete;
67
67
 
68
+ type InternalStream = RawStream;
69
+
68
70
  type StreamLinkedObject = {
69
71
  moderation?: Amity.StreamModeration;
70
72
  };
@@ -2,6 +2,23 @@ export {};
2
2
 
3
3
  declare global {
4
4
  namespace Amity {
5
+ enum UserSortByEnum {
6
+ FirstCreated = 'firstCreated',
7
+ LastCreated = 'lastCreated',
8
+ /** @deprecated sortBy displayName is not available */
9
+ DisplayName = 'displayName',
10
+ }
11
+
12
+ type UserSortBy = `${Amity.UserSortByEnum}`;
13
+
14
+ enum SearchUserSortByEnum {
15
+ FirstCreated = 'firstCreated',
16
+ LastCreated = 'lastCreated',
17
+ DisplayName = 'displayName',
18
+ }
19
+
20
+ type SearchUserSortBy = `${Amity.SearchUserSortByEnum}`;
21
+
5
22
  type UserActionType =
6
23
  | 'onFetch'
7
24
  | 'onUpdate'
@@ -10,14 +27,27 @@ declare global {
10
27
  | 'onUnflagged'
11
28
  | 'onFlagCleared';
12
29
 
13
- type InternalUser = {
30
+ type RawUser = {
14
31
  _id: string;
15
32
  userId: string;
16
- isGlobalBanned: boolean;
33
+ userInternalId: string;
34
+ userPublicId: string;
17
35
  displayName?: string;
18
- avatarFileId?: Amity.File<'image'>['fileId'];
36
+ avatarFileId?: string;
19
37
  avatarCustomUrl?: string;
20
38
  description?: string;
39
+ isBrand: boolean;
40
+ isGlobalBan: boolean;
41
+ } & Amity.Metadata &
42
+ Amity.Taggable &
43
+ Amity.Flaggable &
44
+ Amity.Accredited &
45
+ Amity.Timestamps &
46
+ Amity.SoftDelete &
47
+ Amity.Subscribable;
48
+
49
+ type InternalUser = Amity.RawUser & {
50
+ isGlobalBanned: boolean;
21
51
  } & Amity.Metadata &
22
52
  Amity.Taggable &
23
53
  Amity.Flaggable &
@@ -31,16 +61,29 @@ declare global {
31
61
  };
32
62
 
33
63
  type QueryUsers = {
64
+ /** @deprecated use searchUsers instead */
34
65
  displayName?: Amity.InternalUser['displayName'];
35
66
  filter?: 'all' | 'flagged';
36
- sortBy?: 'displayName' | 'firstCreated' | 'lastCreated';
67
+ sortBy?: Amity.UserSortBy | Amity.UserSortByEnum;
37
68
  limit?: number;
38
69
  page?: string;
39
70
  };
40
71
 
41
- type UserLiveCollection = Amity.LiveCollectionParams<Omit<QueryUsers, 'page'>>;
72
+ type QuerySearchUsers = {
73
+ displayName?: Amity.InternalUser['displayName'];
74
+ filter?: 'all' | 'flagged';
75
+ sortBy?: Amity.SearchUserSortBy | Amity.SearchUserSortByEnum;
76
+ limit?: number;
77
+ page?: string;
78
+ };
79
+
80
+ type UserLiveCollection = Amity.LiveCollectionParams<Omit<Amity.QueryUsers, 'page'>>;
81
+
82
+ type SearchUserLiveCollection = Amity.LiveCollectionParams<
83
+ Omit<Amity.QuerySearchUsers, 'sortBy'>
84
+ >;
42
85
 
43
- type UserSearchLiveCollection = Amity.LiveCollectionParams<Omit<QueryUsers, 'sortBy'>>;
86
+ type UserSearchLiveCollection = Amity.SearchUserLiveCollection;
44
87
 
45
88
  type UserLiveCollectionCache = Amity.LiveCollectionCache<
46
89
  Amity.InternalUser['userId'],
@@ -143,6 +143,12 @@ export class ChannelMemberLiveCollectionController extends LiveCollectionControl
143
143
  channelMembers = filterBySearchTerm(channelMembers, this.query.search);
144
144
  }
145
145
 
146
+ if (typeof this.query.includeDeleted === 'boolean') {
147
+ channelMembers = channelMembers.filter(
148
+ member => member.user?.isDeleted === this.query.includeDeleted,
149
+ );
150
+ }
151
+
146
152
  // sort, 'lastCreated' is the default sort order
147
153
  const sortBy = this.query.sortBy ? this.query.sortBy : 'lastCreated';
148
154
  channelMembers = channelMembers.sort(
@@ -0,0 +1,142 @@
1
+ /* eslint-disable no-use-before-define */
2
+ import hash from 'object-hash';
3
+ import { pullFromCache, pushToCache } from '~/cache/api';
4
+ import { SearchChannelMemberPaginationController } from './SearchChannelMemberPaginationController';
5
+ import { SearchChannelMemberQueryStreamController } from './SearchChannelMemberQueryStreamController';
6
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
7
+ import {
8
+ onChannelJoined,
9
+ onChannelLeft,
10
+ onChannelMemberAdded,
11
+ onChannelMemberRemoved,
12
+ onChannelMemberBanned,
13
+ onChannelMemberUnbanned,
14
+ onChannelMemberRoleAdded,
15
+ onChannelMemberRoleRemoved,
16
+ } from '~/channelRepository/events';
17
+ import { filterByPropIntersection, filterBySearchTerm } from '~/core/query';
18
+ import { prepareChannelPayload } from '~/channelRepository/utils';
19
+
20
+ export class SearchChannelMemberLiveCollectionController extends LiveCollectionController<
21
+ 'channelUser',
22
+ Amity.SearchChannelMembersLiveCollection,
23
+ Amity.Membership<'channel'>,
24
+ SearchChannelMemberPaginationController
25
+ > {
26
+ private queryStreamController: SearchChannelMemberQueryStreamController;
27
+
28
+ private query: Amity.SearchChannelMembersLiveCollection;
29
+
30
+ constructor(
31
+ query: Amity.SearchChannelMembersLiveCollection,
32
+ callback: Amity.LiveCollectionCallback<Amity.Membership<'channel'>>,
33
+ ) {
34
+ const queryStreamId = hash(query);
35
+ const cacheKey = ['channelUsers', 'collection', queryStreamId];
36
+ const paginationController = new SearchChannelMemberPaginationController(query);
37
+
38
+ super(paginationController, queryStreamId, cacheKey, callback);
39
+
40
+ this.query = query;
41
+ this.queryStreamController = new SearchChannelMemberQueryStreamController(
42
+ this.query,
43
+ this.cacheKey,
44
+ this.notifyChange.bind(this),
45
+ prepareChannelPayload,
46
+ );
47
+
48
+ this.callback = callback.bind(this);
49
+ this.loadPage({ initial: true });
50
+ }
51
+
52
+ protected setup() {
53
+ const collection = pullFromCache<Amity.ChannelMembersLiveCollectionCache>(this.cacheKey)?.data;
54
+ if (!collection) {
55
+ pushToCache(this.cacheKey, {
56
+ data: [],
57
+ params: {},
58
+ });
59
+ }
60
+ }
61
+
62
+ protected async persistModel(queryPayload: Amity.ChannelMembershipPayload & Amity.Pagination) {
63
+ await this.queryStreamController.saveToMainDB(queryPayload);
64
+ }
65
+
66
+ protected persistQueryStream({
67
+ response,
68
+ direction,
69
+ refresh,
70
+ }: Amity.LiveCollectionPersistQueryStreamParams<'channelUser'>) {
71
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
72
+ }
73
+
74
+ startSubscription() {
75
+ return this.queryStreamController.subscribeRTE([
76
+ { fn: onChannelJoined, action: 'onJoin' },
77
+ { fn: onChannelLeft, action: 'onLeft' },
78
+ { fn: onChannelMemberAdded, action: 'onMemberAdded' },
79
+ { fn: onChannelMemberRemoved, action: 'onMemberRemoved' },
80
+ { fn: onChannelMemberBanned, action: 'onChannelMemberBanned' },
81
+ { fn: onChannelMemberUnbanned, action: 'onChannelMemberUnbanned' },
82
+ { fn: onChannelMemberRoleAdded, action: 'onChannelMemberRoleAdded' },
83
+ { fn: onChannelMemberRoleRemoved, action: 'onChannelMemberRoleRemoved' },
84
+ ]);
85
+ }
86
+
87
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
88
+ const collection = pullFromCache<Amity.ChannelMembersLiveCollectionCache>(this.cacheKey)?.data;
89
+ if (!collection) return;
90
+
91
+ const data = this.applyFilter(
92
+ collection.data
93
+ .map(id => pullFromCache<Amity.Membership<'channel'>>(['channelUsers', 'get', id])!)
94
+ .filter(Boolean)
95
+ .map(({ data }) => data) ?? [],
96
+ );
97
+
98
+ if (!this.shouldNotify(data) && origin === 'event') return;
99
+
100
+ this.callback({
101
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
102
+ data,
103
+ hasNextPage: !!this.paginationController.getNextToken(),
104
+ loading,
105
+ error,
106
+ });
107
+ }
108
+
109
+ applyFilter(data: Amity.Membership<'channel'>[]) {
110
+ let channelMembers = filterByPropIntersection(data, 'roles', this.query.roles);
111
+
112
+ if (this.query.memberships) {
113
+ /*
114
+ * even though membership includes muted as a possible value
115
+ * when querying the server.
116
+ * Muted is specified under seperarte property namely isMuted
117
+ * Hence why I've seperately checked for it's equality
118
+ */
119
+ channelMembers = channelMembers.filter(member => {
120
+ if (this.query.memberships?.includes('muted') && member.isMuted) {
121
+ return true;
122
+ }
123
+
124
+ if (member.membership !== 'none') {
125
+ return this.query.memberships?.includes(member.membership);
126
+ }
127
+
128
+ return false;
129
+ });
130
+ }
131
+
132
+ if (this.query.search) {
133
+ // eslint-disable-next-line no-console
134
+ console.warn(
135
+ '`search` param will be deprecated in the next major release. If you want to search channel members by displayName, Please use `searchMembers()` instead.',
136
+ );
137
+ channelMembers = filterBySearchTerm(channelMembers, this.query.search);
138
+ }
139
+
140
+ return channelMembers;
141
+ }
142
+ }