@amityco/ts-sdk 7.6.1-2841ad2c.0 → 7.6.1-63bd9d56.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 (247) hide show
  1. package/dist/@types/core/events.d.ts +1 -6
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/payload.d.ts +1 -26
  4. package/dist/@types/core/payload.d.ts.map +1 -1
  5. package/dist/@types/domains/channel.d.ts +0 -6
  6. package/dist/@types/domains/channel.d.ts.map +1 -1
  7. package/dist/@types/domains/content.d.ts +8 -2
  8. package/dist/@types/domains/content.d.ts.map +1 -1
  9. package/dist/@types/domains/feed.d.ts +6 -1
  10. package/dist/@types/domains/feed.d.ts.map +1 -1
  11. package/dist/@types/domains/file.d.ts +3 -1
  12. package/dist/@types/domains/file.d.ts.map +1 -1
  13. package/dist/@types/domains/post.d.ts +3 -3
  14. package/dist/@types/domains/post.d.ts.map +1 -1
  15. package/dist/@types/domains/stream.d.ts +1 -9
  16. package/dist/@types/domains/stream.d.ts.map +1 -1
  17. package/dist/@types/index.d.ts +0 -1
  18. package/dist/@types/index.d.ts.map +1 -1
  19. package/dist/channelRepository/api/createChannel.d.ts +1 -3
  20. package/dist/channelRepository/api/createChannel.d.ts.map +1 -1
  21. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -1
  22. package/dist/channelRepository/events/index.d.ts +1 -1
  23. package/dist/channelRepository/events/index.d.ts.map +1 -1
  24. package/dist/channelRepository/events/onChannelMuted.d.ts +2 -0
  25. package/dist/channelRepository/events/onChannelMuted.d.ts.map +1 -0
  26. package/dist/channelRepository/internalApi/getChannel.d.ts.map +1 -1
  27. package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -1
  28. package/dist/client/api/login.d.ts.map +1 -1
  29. package/dist/communityRepository/api/getCommunity.d.ts +1 -1
  30. package/dist/communityRepository/api/getCommunity.d.ts.map +1 -1
  31. package/dist/core/events.d.ts +3 -3
  32. package/dist/core/events.d.ts.map +1 -1
  33. package/dist/core/model/index.d.ts.map +1 -1
  34. package/dist/core/subscription.d.ts +1 -2
  35. package/dist/core/subscription.d.ts.map +1 -1
  36. package/dist/feedRepository/api/index.d.ts +0 -1
  37. package/dist/feedRepository/api/index.d.ts.map +1 -1
  38. package/dist/feedRepository/api/queryGlobalFeed.d.ts +3 -0
  39. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  40. package/dist/feedRepository/index.d.ts +2 -1
  41. package/dist/feedRepository/index.d.ts.map +1 -1
  42. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/LiveCollectionController.d.ts +13 -0
  43. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/LiveCollectionController.d.ts.map +1 -0
  44. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/PaginationController.d.ts +5 -0
  45. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/PaginationController.d.ts.map +1 -0
  46. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/QueryStreamController.d.ts +15 -0
  47. package/dist/feedRepository/observers/getCustomRankingGlobalFeed/QueryStreamController.d.ts.map +1 -0
  48. package/dist/feedRepository/observers/getCustomRankingGlobalFeed.d.ts +22 -0
  49. package/dist/feedRepository/observers/getCustomRankingGlobalFeed.d.ts.map +1 -0
  50. package/dist/feedRepository/observers/getGlobalFeed/LiveCollectionController.d.ts +13 -0
  51. package/dist/feedRepository/observers/getGlobalFeed/LiveCollectionController.d.ts.map +1 -0
  52. package/dist/feedRepository/observers/getGlobalFeed/PaginationController.d.ts +5 -0
  53. package/dist/feedRepository/observers/getGlobalFeed/PaginationController.d.ts.map +1 -0
  54. package/dist/feedRepository/observers/getGlobalFeed/QueryStreamController.d.ts +15 -0
  55. package/dist/feedRepository/observers/getGlobalFeed/QueryStreamController.d.ts.map +1 -0
  56. package/dist/feedRepository/observers/getGlobalFeed.d.ts +22 -0
  57. package/dist/feedRepository/observers/getGlobalFeed.d.ts.map +1 -0
  58. package/dist/feedRepository/observers/index.d.ts +3 -0
  59. package/dist/feedRepository/observers/index.d.ts.map +1 -0
  60. package/dist/feedRepository/observers/utils.d.ts +6 -0
  61. package/dist/feedRepository/observers/utils.d.ts.map +1 -0
  62. package/dist/fileRepository/api/index.d.ts +1 -0
  63. package/dist/fileRepository/api/index.d.ts.map +1 -1
  64. package/dist/fileRepository/api/uploadClip.d.ts +17 -0
  65. package/dist/fileRepository/api/uploadClip.d.ts.map +1 -0
  66. package/dist/index.cjs.js +7215 -7438
  67. package/dist/index.d.ts +0 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.esm.js +7289 -7510
  70. package/dist/index.umd.js +3 -3
  71. package/dist/liveStreamPlayer/utils/eventRegister.d.ts +1 -2
  72. package/dist/liveStreamPlayer/utils/eventRegister.d.ts.map +1 -1
  73. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts +0 -4
  74. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts.map +1 -1
  75. package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts +1 -1
  76. package/dist/messageRepository/api/deleteMessage.d.ts.map +1 -1
  77. package/dist/messageRepository/observers/getMessage.d.ts.map +1 -1
  78. package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -1
  79. package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -1
  80. package/dist/postRepository/api/createClipPost.d.ts +32 -0
  81. package/dist/postRepository/api/createClipPost.d.ts.map +1 -0
  82. package/dist/postRepository/api/createPost.d.ts.map +1 -1
  83. package/dist/postRepository/api/index.d.ts +1 -0
  84. package/dist/postRepository/api/index.d.ts.map +1 -1
  85. package/dist/postRepository/events/utils.d.ts.map +1 -1
  86. package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.d.ts.map +1 -1
  87. package/dist/postRepository/observers/getPinnedPosts/PinnedPostLiveCollectionController.d.ts.map +1 -1
  88. package/dist/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.d.ts +6 -0
  89. package/dist/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.d.ts.map +1 -1
  90. package/dist/postRepository/observers/getPosts/PostLiveCollectionController.d.ts.map +1 -1
  91. package/dist/postRepository/observers/utils.d.ts +13 -0
  92. package/dist/postRepository/observers/utils.d.ts.map +1 -0
  93. package/dist/postRepository/utils/payload.d.ts.map +1 -1
  94. package/dist/reactionRepository/api/addReaction.d.ts.map +1 -1
  95. package/dist/reactionRepository/api/removeReaction.d.ts.map +1 -1
  96. package/dist/streamRepository/api/createStream.d.ts +1 -1
  97. package/dist/streamRepository/api/createStream.d.ts.map +1 -1
  98. package/dist/streamRepository/api/index.d.ts +0 -1
  99. package/dist/streamRepository/api/index.d.ts.map +1 -1
  100. package/dist/streamRepository/api/updateStream.d.ts +1 -4
  101. package/dist/streamRepository/api/updateStream.d.ts.map +1 -1
  102. package/dist/streamRepository/events/index.d.ts +0 -2
  103. package/dist/streamRepository/events/index.d.ts.map +1 -1
  104. package/dist/streamRepository/internalApi/getStream.d.ts +2 -2
  105. package/dist/streamRepository/internalApi/getStream.d.ts.map +1 -1
  106. package/dist/streamRepository/observers/getStreamById.d.ts.map +1 -1
  107. package/dist/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.d.ts.map +1 -1
  108. package/dist/utils/linkedObject/channelLinkedObject.d.ts.map +1 -1
  109. package/dist/utils/linkedObject/postLinkedObject.d.ts.map +1 -1
  110. package/dist/utils/linkedObject/streamLinkedObject.d.ts.map +1 -1
  111. package/dist/utils/postTypePredicate.d.ts +4 -5
  112. package/dist/utils/postTypePredicate.d.ts.map +1 -1
  113. package/dist/utils/tests/dummy/comment.d.ts +1 -1
  114. package/package.json +1 -1
  115. package/src/@types/core/events.ts +1 -10
  116. package/src/@types/core/payload.ts +1 -33
  117. package/src/@types/domains/channel.ts +0 -9
  118. package/src/@types/domains/content.ts +10 -0
  119. package/src/@types/domains/feed.ts +18 -1
  120. package/src/@types/domains/file.ts +5 -0
  121. package/src/@types/domains/post.ts +4 -4
  122. package/src/@types/domains/stream.ts +1 -13
  123. package/src/@types/index.ts +0 -1
  124. package/src/channelRepository/api/createChannel.ts +8 -11
  125. package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +0 -2
  126. package/src/channelRepository/events/index.ts +1 -1
  127. package/src/channelRepository/events/onChannelMuted.ts +39 -0
  128. package/src/channelRepository/internalApi/getChannel.ts +1 -0
  129. package/src/channelRepository/observers/getChannel.ts +2 -2
  130. package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +2 -2
  131. package/src/channelRepository/utils/constructChannelObject.ts +2 -2
  132. package/src/client/api/login.ts +0 -2
  133. package/src/commentRepository/api/deleteComment.ts +6 -6
  134. package/src/communityRepository/api/getCommunity.ts +0 -9
  135. package/src/core/events.ts +1 -4
  136. package/src/core/model/index.ts +2 -1
  137. package/src/core/subscription.ts +6 -10
  138. package/src/feedRepository/api/index.ts +0 -1
  139. package/src/feedRepository/api/queryGlobalFeed.ts +6 -1
  140. package/src/feedRepository/index.ts +2 -1
  141. package/src/feedRepository/observers/getCustomRankingGlobalFeed/LiveCollectionController.ts +95 -0
  142. package/src/feedRepository/observers/getCustomRankingGlobalFeed/PaginationController.ts +25 -0
  143. package/src/feedRepository/observers/getCustomRankingGlobalFeed/QueryStreamController.ts +101 -0
  144. package/src/feedRepository/observers/getCustomRankingGlobalFeed.ts +56 -0
  145. package/src/feedRepository/observers/getGlobalFeed/LiveCollectionController.ts +91 -0
  146. package/src/feedRepository/observers/getGlobalFeed/PaginationController.ts +23 -0
  147. package/src/feedRepository/observers/getGlobalFeed/QueryStreamController.ts +99 -0
  148. package/src/feedRepository/observers/getGlobalFeed.ts +56 -0
  149. package/src/feedRepository/observers/index.ts +2 -0
  150. package/src/feedRepository/observers/utils.ts +85 -0
  151. package/src/fileRepository/api/index.ts +1 -0
  152. package/src/fileRepository/api/uploadClip.ts +71 -0
  153. package/src/index.ts +0 -2
  154. package/src/liveStreamPlayer/api/getPlayer.ts +1 -1
  155. package/src/liveStreamPlayer/utils/eventRegister.ts +1 -16
  156. package/src/messageRepository/api/deleteMessage.ts +0 -16
  157. package/src/messageRepository/observers/getMessage.ts +0 -2
  158. package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +0 -2
  159. package/src/messageRepository/observers/getMessages/MessageQueryStreamController.ts +0 -13
  160. package/src/postRepository/api/createClipPost.ts +62 -0
  161. package/src/postRepository/api/createPost.ts +2 -3
  162. package/src/postRepository/api/index.ts +2 -0
  163. package/src/postRepository/api/queryPosts.ts +1 -1
  164. package/src/postRepository/events/utils.ts +35 -1
  165. package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.ts +5 -0
  166. package/src/postRepository/observers/getPinnedPosts/PinnedPostLiveCollectionController.ts +7 -1
  167. package/src/postRepository/observers/getPinnedPosts/PinnedPostQueryStreamController.ts +27 -0
  168. package/src/postRepository/observers/getPosts/PostLiveCollectionController.ts +2 -74
  169. package/src/postRepository/observers/getPosts/PostPaginationController.ts +1 -1
  170. package/src/postRepository/observers/utils.ts +97 -0
  171. package/src/postRepository/utils/payload.ts +1 -37
  172. package/src/reactionRepository/api/addReaction.ts +1 -0
  173. package/src/reactionRepository/api/removeReaction.ts +1 -0
  174. package/src/streamRepository/api/createStream.ts +1 -4
  175. package/src/streamRepository/api/index.ts +0 -1
  176. package/src/streamRepository/api/updateStream.ts +1 -8
  177. package/src/streamRepository/events/index.ts +0 -2
  178. package/src/streamRepository/internalApi/getStream.ts +3 -3
  179. package/src/streamRepository/observers/getStreamById.ts +0 -2
  180. package/src/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.ts +1 -5
  181. package/src/utils/linkedObject/channelLinkedObject.ts +0 -3
  182. package/src/utils/linkedObject/postLinkedObject.ts +8 -28
  183. package/src/utils/linkedObject/streamLinkedObject.ts +0 -4
  184. package/src/utils/postTypePredicate.ts +6 -20
  185. package/dist/@types/domains/liveReaction.d.ts +0 -20
  186. package/dist/@types/domains/liveReaction.d.ts.map +0 -1
  187. package/dist/channelRepository/events/onChannelSetMuted.d.ts +0 -2
  188. package/dist/channelRepository/events/onChannelSetMuted.d.ts.map +0 -1
  189. package/dist/channelRepository/events/onChannelSetUserMuted.d.ts +0 -2
  190. package/dist/channelRepository/events/onChannelSetUserMuted.d.ts.map +0 -1
  191. package/dist/channelRepository/internalApi/getMyMembership.d.ts +0 -11
  192. package/dist/channelRepository/internalApi/getMyMembership.d.ts.map +0 -1
  193. package/dist/channelRepository/observers/getMyMembership.d.ts +0 -2
  194. package/dist/channelRepository/observers/getMyMembership.d.ts.map +0 -1
  195. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts +0 -37
  196. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts.map +0 -1
  197. package/dist/liveReactionRepository/api/createReaction.d.ts +0 -20
  198. package/dist/liveReactionRepository/api/createReaction.d.ts.map +0 -1
  199. package/dist/liveReactionRepository/api/index.d.ts +0 -2
  200. package/dist/liveReactionRepository/api/index.d.ts.map +0 -1
  201. package/dist/liveReactionRepository/events/index.d.ts +0 -2
  202. package/dist/liveReactionRepository/events/index.d.ts.map +0 -1
  203. package/dist/liveReactionRepository/events/onLiveReactionCreated.d.ts +0 -17
  204. package/dist/liveReactionRepository/events/onLiveReactionCreated.d.ts.map +0 -1
  205. package/dist/liveReactionRepository/events/onLiveReactionCreatedLocal.d.ts +0 -17
  206. package/dist/liveReactionRepository/events/onLiveReactionCreatedLocal.d.ts.map +0 -1
  207. package/dist/liveReactionRepository/index.d.ts +0 -4
  208. package/dist/liveReactionRepository/index.d.ts.map +0 -1
  209. package/dist/liveReactionRepository/internalApi/createLiveReaction.d.ts +0 -20
  210. package/dist/liveReactionRepository/internalApi/createLiveReaction.d.ts.map +0 -1
  211. package/dist/liveReactionRepository/observers/getReactions.d.ts +0 -19
  212. package/dist/liveReactionRepository/observers/getReactions.d.ts.map +0 -1
  213. package/dist/liveReactionRepository/observers/index.d.ts +0 -2
  214. package/dist/liveReactionRepository/observers/index.d.ts.map +0 -1
  215. package/dist/liveReactionRepository/service/ReactionSyncEngine.d.ts +0 -26
  216. package/dist/liveReactionRepository/service/ReactionSyncEngine.d.ts.map +0 -1
  217. package/dist/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.d.ts +0 -3
  218. package/dist/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.d.ts.map +0 -1
  219. package/dist/streamRepository/api/editStream.d.ts +0 -18
  220. package/dist/streamRepository/api/editStream.d.ts.map +0 -1
  221. package/dist/streamRepository/events/onStreamViewerBanned.d.ts +0 -17
  222. package/dist/streamRepository/events/onStreamViewerBanned.d.ts.map +0 -1
  223. package/dist/streamRepository/events/onStreamViewerUnbanned.d.ts +0 -17
  224. package/dist/streamRepository/events/onStreamViewerUnbanned.d.ts.map +0 -1
  225. package/dist/streamRepository/internalApi/getLiveChat.d.ts +0 -16
  226. package/dist/streamRepository/internalApi/getLiveChat.d.ts.map +0 -1
  227. package/src/@types/domains/liveReaction.ts +0 -25
  228. package/src/channelRepository/events/onChannelSetMuted.ts +0 -48
  229. package/src/channelRepository/events/onChannelSetUserMuted.ts +0 -65
  230. package/src/channelRepository/internalApi/getMyMembership.ts +0 -37
  231. package/src/channelRepository/observers/getMyMembership.ts +0 -98
  232. package/src/feedRepository/api/getCustomRankingGlobalFeed.ts +0 -115
  233. package/src/liveReactionRepository/api/createReaction.ts +0 -58
  234. package/src/liveReactionRepository/api/index.ts +0 -1
  235. package/src/liveReactionRepository/events/index.ts +0 -1
  236. package/src/liveReactionRepository/events/onLiveReactionCreated.ts +0 -37
  237. package/src/liveReactionRepository/events/onLiveReactionCreatedLocal.ts +0 -29
  238. package/src/liveReactionRepository/index.ts +0 -3
  239. package/src/liveReactionRepository/internalApi/createLiveReaction.ts +0 -42
  240. package/src/liveReactionRepository/observers/getReactions.ts +0 -59
  241. package/src/liveReactionRepository/observers/index.ts +0 -1
  242. package/src/liveReactionRepository/service/ReactionSyncEngine.ts +0 -138
  243. package/src/liveReactionRepository/utils/ReactionSyncEngineOnLoginHandler.ts +0 -19
  244. package/src/streamRepository/api/editStream.ts +0 -51
  245. package/src/streamRepository/events/onStreamViewerBanned.ts +0 -58
  246. package/src/streamRepository/events/onStreamViewerUnbanned.ts +0 -47
  247. package/src/streamRepository/internalApi/getLiveChat.ts +0 -59
@@ -0,0 +1,91 @@
1
+ import hash from 'object-hash';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { GlobalFeedPaginationController } from './PaginationController';
4
+ import { GlobalFeedQueryStreamController } from './QueryStreamController';
5
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
6
+ import { isNonNullable } from '~/utils';
7
+ import { LinkedObject } from '~/utils/linkedObject';
8
+ import { preparePostPayload } from '~/postRepository/utils/payload';
9
+ import { getGlobalFeedSubscriptions } from '../utils';
10
+
11
+ export class GlobalFeedLiveCollectionController extends LiveCollectionController<
12
+ 'post',
13
+ Amity.GlobalFeedLiveCollection,
14
+ Amity.Post,
15
+ GlobalFeedPaginationController
16
+ > {
17
+ private queryStreamController: GlobalFeedQueryStreamController;
18
+
19
+ private query: Amity.GlobalFeedLiveCollection;
20
+
21
+ constructor(
22
+ query: Amity.GlobalFeedLiveCollection,
23
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
24
+ ) {
25
+ const queryStreamId = hash(query);
26
+ const cacheKey = ['globalFeed', 'collection', queryStreamId];
27
+ const paginationController = new GlobalFeedPaginationController(query);
28
+
29
+ super(paginationController, queryStreamId, cacheKey, callback);
30
+
31
+ this.query = query;
32
+ this.queryStreamController = new GlobalFeedQueryStreamController(
33
+ this.query,
34
+ this.cacheKey,
35
+ this.notifyChange.bind(this),
36
+ preparePostPayload,
37
+ );
38
+
39
+ this.callback = callback.bind(this);
40
+ this.loadPage({ initial: true });
41
+ }
42
+
43
+ protected setup() {
44
+ const collection = pullFromCache<Amity.GlobalFeedLiveCollectionCache>(this.cacheKey)?.data;
45
+
46
+ if (!collection) {
47
+ pushToCache(this.cacheKey, {
48
+ data: [],
49
+ params: {},
50
+ });
51
+ }
52
+ }
53
+
54
+ protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {
55
+ await this.queryStreamController.saveToMainDB(queryPayload);
56
+ }
57
+
58
+ protected persistQueryStream({
59
+ response,
60
+ direction,
61
+ refresh,
62
+ }: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {
63
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
64
+ }
65
+
66
+ startSubscription() {
67
+ return this.queryStreamController.subscribeRTE(getGlobalFeedSubscriptions(this.cacheKey));
68
+ }
69
+
70
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
71
+ const collection = pullFromCache<Amity.GlobalFeedLiveCollectionCache>(this.cacheKey)?.data;
72
+ if (!collection) return;
73
+
74
+ const data = (
75
+ collection.data
76
+ .map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)
77
+ .filter(isNonNullable)
78
+ .map(({ data }) => data) ?? []
79
+ ).map(LinkedObject.post);
80
+
81
+ if (!this.shouldNotify(data) && origin === 'event') return;
82
+
83
+ this.callback({
84
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
85
+ data,
86
+ hasNextPage: !!this.paginationController.getNextToken(),
87
+ loading,
88
+ error,
89
+ });
90
+ }
91
+ }
@@ -0,0 +1,23 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+
3
+ export class GlobalFeedPaginationController extends PaginationController<
4
+ 'post',
5
+ Amity.GlobalFeedLiveCollection
6
+ > {
7
+ async getRequest(queryParams: Amity.GlobalFeedLiveCollection, token: string | undefined) {
8
+ const { limit, resolveParent, ...params } = queryParams;
9
+ const options = token ? { token } : { limit };
10
+
11
+ const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(
12
+ `/api/v4/me/global-feeds`,
13
+ {
14
+ params: {
15
+ ...params,
16
+ resolveParent: resolveParent ?? true,
17
+ options,
18
+ },
19
+ },
20
+ );
21
+ return queryResponse;
22
+ }
23
+ }
@@ -0,0 +1,99 @@
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
+ import { EnumPostActions } from '~/postRepository/observers/enums';
7
+
8
+ export class GlobalFeedQueryStreamController extends QueryStreamController<
9
+ Amity.PostPayload,
10
+ Amity.GlobalFeedLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload;
15
+
16
+ constructor(
17
+ query: Amity.GlobalFeedLiveCollection,
18
+ cacheKey: string[],
19
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
20
+ preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload,
21
+ ) {
22
+ super(query, cacheKey);
23
+ this.notifyChange = notifyChange;
24
+ this.preparePayload = preparePayload;
25
+ }
26
+
27
+ async saveToMainDB(response: Amity.PostPayload) {
28
+ const processedPayload = await this.preparePayload(response);
29
+
30
+ const client = getActiveClient();
31
+ const cachedAt = client.cache && Date.now();
32
+
33
+ if (client.cache) {
34
+ ingestInCache(processedPayload, { cachedAt });
35
+ }
36
+ }
37
+
38
+ appendToQueryStream(
39
+ response: Amity.PostPayload & Partial<Amity.Pagination>,
40
+ direction: Amity.LiveCollectionPageDirection,
41
+ refresh = false,
42
+ ) {
43
+ if (refresh) {
44
+ pushToCache(this.cacheKey, {
45
+ data: response.posts.map(getResolver('post')),
46
+ });
47
+ } else {
48
+ const collection = pullFromCache<Amity.CommunityLiveCollectionCache>(this.cacheKey)?.data;
49
+
50
+ const posts = collection?.data ?? [];
51
+
52
+ pushToCache(this.cacheKey, {
53
+ ...collection,
54
+ data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])],
55
+ });
56
+ }
57
+ }
58
+
59
+ reactor(action: EnumPostActions) {
60
+ return (post: Amity.InternalPost) => {
61
+ const collection = pullFromCache<Amity.GlobalFeedLiveCollectionCache>(this.cacheKey)?.data;
62
+
63
+ if (!collection) return;
64
+
65
+ if (post.parentPostId && !collection.data.includes(post.parentPostId)) return;
66
+
67
+ // Delete Action
68
+ if (action === EnumPostActions.OnPostDeleted) {
69
+ // Parent Post - Remove from collection
70
+ collection.data = collection.data.filter(postId => postId !== post.postId);
71
+ }
72
+
73
+ if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
74
+ // If the query has dataTypes array with value, check if post.dataType is include in the array
75
+ if (this.query.dataTypes && this.query.dataTypes.length > 0) {
76
+ if (!this.query.dataTypes.includes(post.dataType)) return;
77
+ }
78
+
79
+ collection.data = [...new Set([post.postId, ...collection.data])];
80
+ }
81
+
82
+ if (action === EnumPostActions.OnPostDeclined) {
83
+ collection.data = collection.data.filter(postId => postId !== post.postId);
84
+ }
85
+
86
+ pushToCache(this.cacheKey, collection);
87
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
88
+ };
89
+ }
90
+
91
+ subscribeRTE(
92
+ createSubscriber: {
93
+ fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;
94
+ action: EnumPostActions;
95
+ }[],
96
+ ) {
97
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
98
+ }
99
+ }
@@ -0,0 +1,56 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { dropFromCache } from '~/cache/api';
3
+
4
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
5
+ import { GlobalFeedLiveCollectionController } from './getGlobalFeed/LiveCollectionController';
6
+
7
+ /* begin_public_function
8
+ id: feed.query.global_feed
9
+ */
10
+ /**
11
+ * ```js
12
+ * import { FeedRepository } from '@amityco/ts-sdk'
13
+ *
14
+ * let posts = []
15
+ * const unsub = FeedRepository.getGlobalFeed({
16
+ * dataTypes: ['video','image'],
17
+ * resolveParent: true,
18
+ * }, response => processResponse(response))
19
+ * ```
20
+ *
21
+ * Observe all mutations on a list of {@link Amity.Post} for global feed
22
+ * @param params.dataTypes array of data types for the posts
23
+ * @param params.resolveParent
24
+ * @param callback the function to call when new data are available
25
+ * @param config
26
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
27
+ *
28
+ * @category Posts Live Collection
29
+ */
30
+ export const getGlobalFeed = (
31
+ params: Amity.GlobalFeedLiveCollection,
32
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
33
+ config?: Amity.LiveCollectionConfig,
34
+ ): Amity.Unsubscriber => {
35
+ const { log, cache } = getActiveClient();
36
+
37
+ if (!cache) {
38
+ console.log(ENABLE_CACHE_MESSAGE);
39
+ }
40
+
41
+ const timestamp = Date.now();
42
+ log(`getGlobalFeed(tmpid: ${timestamp}) > listen`);
43
+
44
+ const liveCollection = new GlobalFeedLiveCollectionController(params, callback);
45
+ const disposers = liveCollection.startSubscription();
46
+
47
+ const cacheKey = liveCollection.getCacheKey();
48
+
49
+ disposers.push(() => dropFromCache(cacheKey));
50
+
51
+ return () => {
52
+ log(`getGlobalFeed(tmpid: ${timestamp}) > dispose`);
53
+ disposers.forEach(fn => fn());
54
+ };
55
+ };
56
+ /* end_public_function */
@@ -0,0 +1,2 @@
1
+ export { getCustomRankingGlobalFeed } from './getCustomRankingGlobalFeed';
2
+ export { getGlobalFeed } from './getGlobalFeed';
@@ -0,0 +1,85 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
3
+ import { getPost } from '~/postRepository/internalApi';
4
+ import {
5
+ onPostCreated,
6
+ onPostUpdated,
7
+ onPostDeleted,
8
+ onPostFlagged,
9
+ onPostUnflagged,
10
+ onPostReactionAdded,
11
+ onPostReactionRemoved,
12
+ onPostApproved,
13
+ onPostDeclined,
14
+ } from '~/postRepository/events';
15
+ import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
16
+ import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
17
+ import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
18
+ import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
19
+ import { EnumPostActions } from '~/postRepository/observers/enums';
20
+ import { convertEventPayload } from '~/utils/event';
21
+ import { onCommentCreatedLocal } from '~/commentRepository/events/onCommentCreatedLocal';
22
+ import { onCommentDeleteLocal } from '~/commentRepository/events/onCommentDeletedLocal';
23
+ import { onCommentReactionAdded, onCommentReactionRemoved } from '~/commentRepository/events';
24
+ import { onLocalCommentReactionAdded } from '~/commentRepository/events/onLocalCommentReactionAdded';
25
+ import { onLocalCommentReactionRemoved } from '~/commentRepository/events/onLocalCommentReactionRemoved';
26
+
27
+ type CommentEventHandler = (callback: Amity.Listener<Amity.InternalComment>) => Amity.Unsubscriber;
28
+
29
+ const commentEventHanlder = (
30
+ callback: Amity.Listener<Amity.InternalComment>,
31
+ eventHandler: CommentEventHandler,
32
+ cacheKey: Amity.CacheKey,
33
+ ) => {
34
+ return eventHandler(async (comment: Amity.InternalComment) => {
35
+ const currentCollection =
36
+ pullFromCache<Amity.CustomRankingGlobalFeedLiveCollectionCache>(cacheKey)?.data;
37
+
38
+ if (!currentCollection || !currentCollection.data.includes(comment.referenceId)) return;
39
+
40
+ await getPost(comment.referenceId);
41
+ callback(comment);
42
+ });
43
+ };
44
+
45
+ const generateCommentSubscriptions = (cacheKey: Amity.CacheKey) => {
46
+ const eventHandlers = [
47
+ onCommentCreated,
48
+ onCommentDeleted,
49
+ onCommentReactionAdded,
50
+ onCommentReactionRemoved,
51
+ onCommentCreatedLocal,
52
+ onCommentDeleteLocal,
53
+ onLocalCommentReactionAdded,
54
+ onLocalCommentReactionRemoved,
55
+ ];
56
+
57
+ return eventHandlers.map(handler => ({
58
+ fn: convertEventPayload(
59
+ (callback: Amity.Listener<Amity.InternalComment>) =>
60
+ commentEventHanlder(callback, handler, cacheKey),
61
+ 'referenceId',
62
+ 'post',
63
+ ),
64
+ action: EnumPostActions.OnPostUpdated,
65
+ }));
66
+ };
67
+
68
+ export const getGlobalFeedSubscriptions = (cacheKey: Amity.CacheKey) => {
69
+ return [
70
+ { fn: onPostCreated, action: EnumPostActions.OnPostCreated },
71
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
72
+ { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
73
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
74
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
75
+ { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
76
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
77
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
78
+ { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
79
+ { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
80
+ { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
81
+ { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
82
+ { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
83
+ ...generateCommentSubscriptions(cacheKey),
84
+ ];
85
+ };
@@ -5,3 +5,4 @@ export * from './fileUrlWithSize';
5
5
  export * from './uploadVideo';
6
6
  export * from './uploadImage';
7
7
  export * from './updateAltText';
8
+ export * from './uploadClip';
@@ -0,0 +1,71 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { ingestInCache } from '~/cache/api/ingestInCache';
3
+ import GlobalFileAccessType from '~/client/utils/GlobalFileAccessType';
4
+
5
+ /* begin_public_function
6
+ id: file.upload.clip
7
+ */
8
+ /**
9
+ * ```js
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadClip(formData)
12
+ * ```
13
+ *
14
+ * Creates an {@link Amity.File}
15
+ *
16
+ * @param formData The data necessary to create a new {@link Amity.File}
17
+ * @param onProgress The callback to track the upload progress
18
+ * @returns The newly created {@link Amity.File}
19
+ *
20
+ * @category File API
21
+ * @async
22
+ */
23
+ export const uploadClip = async (
24
+ formData: FormData,
25
+ feedType?: Amity.ContentFeedType,
26
+ onProgress?: (percent: number) => void,
27
+ ): Promise<Amity.Cached<Amity.File<'clip'>[]>> => {
28
+ const client = getActiveClient();
29
+ client.log('file/uploadClip', formData);
30
+
31
+ const file = formData.get('files');
32
+
33
+ if (!file) throw new Error('The formData object must have a `files` key.');
34
+
35
+ const accessType = GlobalFileAccessType.getInstance().getFileAccessType();
36
+ formData.append('accessType', accessType);
37
+
38
+ formData.append('preferredFilename', (file as File).name);
39
+
40
+ if (feedType) {
41
+ formData.append('feedType', feedType);
42
+ }
43
+
44
+ const headers =
45
+ 'getHeaders' in formData
46
+ ? (formData as any).getHeaders()
47
+ : { 'content-type': 'multipart/form-data' };
48
+
49
+ const { data } = await client.upload.post<Amity.CreateFilePayload<'clip'>>(
50
+ '/api/v4/clips',
51
+ formData,
52
+ {
53
+ headers,
54
+ onUploadProgress({ loaded, total = 100 }) {
55
+ onProgress && onProgress(Math.round((loaded * 100) / total));
56
+ },
57
+ },
58
+ );
59
+
60
+ // API-FIX: payload should be serialized properly
61
+ // const { files } = data
62
+
63
+ const cachedAt = client.cache && Date.now();
64
+ if (client.cache) ingestInCache({ files: data }, { cachedAt });
65
+
66
+ return {
67
+ data,
68
+ cachedAt,
69
+ };
70
+ };
71
+ /* end_public_function */
package/src/index.ts CHANGED
@@ -53,5 +53,3 @@ export * from './external/api';
53
53
  export * as notificationTray from './notificationTray';
54
54
 
55
55
  export * as InvitationRepository from './invitationRepository';
56
-
57
- export * as LiveReactionRepository from './liveReactionRepository';
@@ -60,7 +60,7 @@ export const getPlayer = async (parameters: { streamId: string }): Promise<HTMLV
60
60
  video.src = recording.mp4.url;
61
61
  }
62
62
 
63
- new EventRegister(video, resolution, streamId).registerEvents();
63
+ new EventRegister(video, resolution).registerEvents();
64
64
 
65
65
  return video;
66
66
  };
@@ -1,6 +1,5 @@
1
1
  import uuid from 'react-native-uuid';
2
2
  import { getUsageCollector } from '../api/getUsageCollector';
3
- import { onStreamViewerBanned } from '~/streamRepository/events';
4
3
 
5
4
  const SECOND = 1000;
6
5
  /*
@@ -33,9 +32,7 @@ export class EventRegister {
33
32
 
34
33
  _observer: MutationObserver;
35
34
 
36
- _SDKUnsubscribers: Amity.Unsubscriber[] = [];
37
-
38
- constructor(player: HTMLVideoElement, resolution: string, streamId: string) {
35
+ constructor(player: HTMLVideoElement, resolution: string) {
39
36
  this.player = player;
40
37
  this.resolution = resolution;
41
38
  this._startTime = null;
@@ -56,22 +53,10 @@ export class EventRegister {
56
53
  mutation.removedNodes.forEach(node => {
57
54
  if (node === player) {
58
55
  this._unregisterEvents();
59
- this._SDKUnsubscribers.forEach(fn => fn?.());
60
56
  }
61
57
  });
62
58
  });
63
59
  });
64
-
65
- this._SDKUnsubscribers.push(
66
- onStreamViewerBanned(stream => {
67
- // if still has stream.watcherUrl, the current user has not banned.
68
- if (stream.watcherUrl) return;
69
- this.player.pause();
70
- this.player.removeAttribute('src');
71
- this.player.load();
72
- this.player.remove();
73
- }),
74
- );
75
60
  }
76
61
 
77
62
  _resetStartTime() {
@@ -23,22 +23,6 @@ export const deleteMessage = async (
23
23
  const client = getActiveClient();
24
24
  client.log('message/deleteMessage', messageId);
25
25
 
26
- if (messageId.includes('LOCAL_')) {
27
- const message = pullFromCache<Amity.InternalMessage>(['message', 'get', messageId])?.data;
28
- if (!message) throw Error('messageId not found');
29
-
30
- const deletedMessage = {
31
- ...message,
32
- isDeleted: true,
33
- };
34
-
35
- fireEvent('local.message.deleted', {
36
- messages: [deletedMessage],
37
- });
38
-
39
- return LinkedObject.message(deletedMessage);
40
- }
41
-
42
26
  // API-FIX: This endpoint has not been implemented yet.
43
27
  const { data: deleted } = await client.http.delete<Amity.MessagePayload>(
44
28
  `/api/v5/messages/${encodeURIComponent(messageId)}`,
@@ -11,7 +11,6 @@ import {
11
11
  onMessageReactionAdded,
12
12
  onMessageReactionRemoved,
13
13
  } from '../events';
14
- import { onStreamViewerBanned } from '~/streamRepository/events/onStreamViewerBanned';
15
14
  import { onMessageFetched } from '../events/onMessageFetched';
16
15
  import { LinkedObject } from '~/utils/linkedObject';
17
16
 
@@ -58,7 +57,6 @@ export const getMessage = (
58
57
  onMessageReactionRemoved,
59
58
  convertEventPayload(onMessageMarkerFetched, 'contentId', 'message'),
60
59
  convertEventPayload(onMessageMarked, 'contentId', 'message'),
61
- convertEventPayload(onStreamViewerBanned, 'channelId', 'message'),
62
60
  ]);
63
61
  };
64
62
  /* end_public_function */
@@ -11,7 +11,6 @@ import {
11
11
  onMessageUnflagged,
12
12
  onMessageUpdated,
13
13
  } from '~/messageRepository/events';
14
- import { onStreamViewerBanned } from '~/streamRepository/events/onStreamViewerBanned';
15
14
  import { convertEventPayload } from '~/utils/event';
16
15
  import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
17
16
  import { onMessageMarked, onMessageMarkerFetched } from '~/marker/events';
@@ -71,7 +70,6 @@ export class MessageLiveCollectionController extends LiveCollectionController<
71
70
  action: 'onUpdate',
72
71
  },
73
72
  { fn: convertEventPayload(onMessageMarked, 'contentId', 'message'), action: 'onUpdate' },
74
- { fn: convertEventPayload(onStreamViewerBanned, 'channelId', 'message'), action: 'onUpdate' },
75
73
  ]);
76
74
  }
77
75
 
@@ -116,19 +116,6 @@ export class MessageQueryStreamController extends QueryStreamController<
116
116
  pushToCache(this.cacheKey, collection);
117
117
  }
118
118
 
119
- if (action === 'onDelete' && payload.syncState === Amity.SyncState.Error) {
120
- const collection = pullFromCache<Amity.MessageLiveCollectionCache>(this.cacheKey)?.data;
121
- if (!collection) return;
122
-
123
- if (collection.data.includes(payload.messageId)) {
124
- const newCollectionData = collection.data.filter(
125
- messageId => messageId !== payload.messageId,
126
- );
127
-
128
- pushToCache(this.cacheKey, { ...collection, data: newCollectionData });
129
- }
130
- }
131
-
132
119
  this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
133
120
  };
134
121
  }
@@ -0,0 +1,62 @@
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
+ import { LinkedObject } from '~/utils/linkedObject';
7
+
8
+ /* begin_public_function
9
+ id: post.create.clip_post
10
+ */
11
+ /**
12
+ * ```js
13
+ * import { PostRepository } from '@amityco/ts-sdk'
14
+ * const created = await PostRepository.createClipPost({
15
+ * targetType: 'user',
16
+ * targetId: 'foobar',
17
+ * dataType: 'clip',
18
+ * data: { text: 'hello world' },
19
+ * attachments: [{ type: 'clip', fileId: 'fileId123', displayMode: 'fill', isMuted: false }]
20
+ * }))
21
+ * ```
22
+ *
23
+ * Creates an {@link Amity.Post}
24
+ *
25
+ * @param bundle The data necessary to create a new {@link Amity.Post}
26
+ * @returns The newly created {@link Amity.Post}
27
+ *
28
+ * @category Post API
29
+ * @async
30
+ */
31
+ export const createClipPost = async <T extends Amity.PostContentType | string>(
32
+ bundle: Pick<Amity.Post<T>, 'targetType' | 'targetId'> &
33
+ Partial<Pick<Amity.Post<T>, 'metadata' | 'mentionees' | 'tags'>> & {
34
+ data: { [k: string]: any };
35
+ attachments: {
36
+ type: T;
37
+ fileId: Amity.File['fileId'];
38
+ displayMode?: Amity.ClipDisplayMode;
39
+ isMuted?: boolean;
40
+ }[];
41
+ },
42
+ ): Promise<Amity.Cached<Amity.Post>> => {
43
+ const client = getActiveClient();
44
+ client.log('post/createPost', bundle);
45
+
46
+ const { data: payload } = await client.http.post<Amity.PostPayload>('/api/v4/posts', bundle);
47
+
48
+ fireEvent('post.created', payload);
49
+
50
+ const data = prepareMembershipPayload(payload, 'communityUsers');
51
+ const cachedAt = client.cache && Date.now();
52
+
53
+ if (client.cache) ingestInCache(data, { cachedAt });
54
+
55
+ const { posts } = data;
56
+
57
+ return {
58
+ data: LinkedObject.post(posts[0]),
59
+ cachedAt,
60
+ };
61
+ };
62
+ /* end_public_function */
@@ -2,8 +2,8 @@ import { getActiveClient } from '~/client/api';
2
2
 
3
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
4
4
  import { fireEvent } from '~/core/events';
5
+ import { prepareMembershipPayload } from '~/group/utils';
5
6
  import { LinkedObject } from '~/utils/linkedObject';
6
- import { preparePostPayload } from '../utils/payload';
7
7
 
8
8
  /* begin_public_function
9
9
  id: post.create.text_post, post.create.image_post, post.create.file_post, post.create.video_post, post.create.poll_post, post.create.livestream_post, post.create.custom_post
@@ -46,8 +46,7 @@ export const createPost = async <T extends Amity.PostContentType | string>(
46
46
 
47
47
  fireEvent('post.created', payload);
48
48
 
49
- const data = preparePostPayload(payload);
50
-
49
+ const data = prepareMembershipPayload(payload, 'communityUsers');
51
50
  const cachedAt = client.cache && Date.now();
52
51
 
53
52
  if (client.cache) ingestInCache(data, { cachedAt });
@@ -13,3 +13,5 @@ export * from './declinePost';
13
13
  export * from './flagPost';
14
14
  export * from './unflagPost';
15
15
  export * from './isPostFlaggedByMe';
16
+
17
+ export * from './createClipPost';
@@ -43,7 +43,7 @@ export const queryPosts = async (
43
43
  // API-FIX: parameters should be querystring. (1)
44
44
  // API-FIX: backend should answer Amity.Response (2)
45
45
  // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
46
- const { data } = await client.http.get<Amity.PostPayload & Amity.Pagination>(`/api/v4/posts`, {
46
+ const { data } = await client.http.get<Amity.PostPayload & Amity.Pagination>(`/api/v5/posts`, {
47
47
  params: {
48
48
  ...params,
49
49
  isDeleted: inferIsDeleted(includeDeleted),