@amityco/ts-sdk-react-native 6.23.0 → 6.23.1-d8b4c4c.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 (214) hide show
  1. package/.env +26 -26
  2. package/dist/@types/core/events.d.ts +7 -0
  3. package/dist/@types/core/events.d.ts.map +1 -1
  4. package/dist/@types/core/model.d.ts +4 -2
  5. package/dist/@types/core/model.d.ts.map +1 -1
  6. package/dist/@types/core/payload.d.ts +2 -1
  7. package/dist/@types/core/payload.d.ts.map +1 -1
  8. package/dist/@types/domains/community.d.ts +30 -1
  9. package/dist/@types/domains/community.d.ts.map +1 -1
  10. package/dist/@types/domains/stream.d.ts +19 -3
  11. package/dist/@types/domains/stream.d.ts.map +1 -1
  12. package/dist/client/api/secureLogout.d.ts +1 -1
  13. package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngine.d.ts.map +1 -1
  14. package/dist/commentRepository/api/deleteComment.d.ts.map +1 -1
  15. package/dist/commentRepository/internalApi/createComment.d.ts.map +1 -1
  16. package/dist/communityRepository/api/createCommunity.d.ts.map +1 -1
  17. package/dist/communityRepository/api/getCommunities.d.ts.map +1 -1
  18. package/dist/communityRepository/api/getCommunity.d.ts.map +1 -1
  19. package/dist/communityRepository/api/queryCommunities.d.ts.map +1 -1
  20. package/dist/communityRepository/api/updateCommunity.d.ts.map +1 -1
  21. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersLiveCollectionController.d.ts +14 -0
  22. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersLiveCollectionController.d.ts.map +1 -0
  23. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersPaginationController.d.ts +9 -0
  24. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersPaginationController.d.ts.map +1 -0
  25. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.d.ts +15 -0
  26. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.d.ts.map +1 -0
  27. package/dist/communityRepository/communityMembership/observers/getMembers/enums.d.ts +10 -0
  28. package/dist/communityRepository/communityMembership/observers/getMembers/enums.d.ts.map +1 -0
  29. package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
  30. package/dist/communityRepository/communityMembership/observers/index.d.ts +1 -0
  31. package/dist/communityRepository/communityMembership/observers/index.d.ts.map +1 -1
  32. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersLiveCollectionController.d.ts +14 -0
  33. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersLiveCollectionController.d.ts.map +1 -0
  34. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersPaginationController.d.ts +9 -0
  35. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersPaginationController.d.ts.map +1 -0
  36. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.d.ts +15 -0
  37. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.d.ts.map +1 -0
  38. package/dist/communityRepository/communityMembership/observers/searchMembers/enums.d.ts +10 -0
  39. package/dist/communityRepository/communityMembership/observers/searchMembers/enums.d.ts.map +1 -0
  40. package/dist/communityRepository/communityMembership/observers/searchMembers.d.ts +20 -0
  41. package/dist/communityRepository/communityMembership/observers/searchMembers.d.ts.map +1 -0
  42. package/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.d.ts +14 -0
  43. package/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.d.ts.map +1 -0
  44. package/dist/communityRepository/observers/getCommunities/CommunitiesPaginationController.d.ts +9 -0
  45. package/dist/communityRepository/observers/getCommunities/CommunitiesPaginationController.d.ts.map +1 -0
  46. package/dist/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.d.ts +15 -0
  47. package/dist/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.d.ts.map +1 -0
  48. package/dist/communityRepository/observers/getCommunities/enums.d.ts +6 -0
  49. package/dist/communityRepository/observers/getCommunities/enums.d.ts.map +1 -0
  50. package/dist/communityRepository/observers/getCommunities.d.ts.map +1 -1
  51. package/dist/communityRepository/observers/index.d.ts +1 -0
  52. package/dist/communityRepository/observers/index.d.ts.map +1 -1
  53. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesLiveCollectionController.d.ts +14 -0
  54. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesLiveCollectionController.d.ts.map +1 -0
  55. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesPaginationController.d.ts +9 -0
  56. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesPaginationController.d.ts.map +1 -0
  57. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.d.ts +15 -0
  58. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.d.ts.map +1 -0
  59. package/dist/communityRepository/observers/searchCommunities/enums.d.ts +6 -0
  60. package/dist/communityRepository/observers/searchCommunities/enums.d.ts.map +1 -0
  61. package/dist/communityRepository/observers/searchCommunities.d.ts +20 -0
  62. package/dist/communityRepository/observers/searchCommunities.d.ts.map +1 -0
  63. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  64. package/dist/communityRepository/utils/saveCommunityUsers.d.ts +2 -0
  65. package/dist/communityRepository/utils/saveCommunityUsers.d.ts.map +1 -0
  66. package/dist/core/events.d.ts +3 -3
  67. package/dist/core/events.d.ts.map +1 -1
  68. package/dist/core/liveCollection/LiveCollectionController.d.ts +4 -1
  69. package/dist/core/liveCollection/LiveCollectionController.d.ts.map +1 -1
  70. package/dist/core/model/idResolvers.d.ts.map +1 -1
  71. package/dist/core/model/index.d.ts.map +1 -1
  72. package/dist/index.cjs.js +1604 -977
  73. package/dist/index.esm.js +1372 -745
  74. package/dist/index.umd.js +4 -4
  75. package/dist/marker/events/onChannelUnreadUpdatedLocal.d.ts +12 -0
  76. package/dist/marker/events/onChannelUnreadUpdatedLocal.d.ts.map +1 -0
  77. package/dist/marker/events/onSubChannelUnreadUpdatedLocal.d.ts +12 -0
  78. package/dist/marker/events/onSubChannelUnreadUpdatedLocal.d.ts.map +1 -0
  79. package/dist/marker/events/onUserFeedMarkerUpdated.d.ts.map +1 -1
  80. package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts +1 -1
  81. package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts.map +1 -1
  82. package/dist/postRepository/observers/getPost.d.ts.map +1 -1
  83. package/dist/postRepository/observers/getPosts.d.ts.map +1 -1
  84. package/dist/streamRepository/api/createStream.d.ts +4 -4
  85. package/dist/streamRepository/api/createStream.d.ts.map +1 -1
  86. package/dist/streamRepository/api/deleteStream.d.ts +4 -4
  87. package/dist/streamRepository/api/deleteStream.d.ts.map +1 -1
  88. package/dist/streamRepository/api/disposeStream.d.ts +4 -4
  89. package/dist/streamRepository/api/disposeStream.d.ts.map +1 -1
  90. package/dist/streamRepository/api/queryStreams.d.ts +4 -4
  91. package/dist/streamRepository/api/queryStreams.d.ts.map +1 -1
  92. package/dist/streamRepository/api/updateStream.d.ts.map +1 -1
  93. package/dist/streamRepository/events/index.d.ts +2 -0
  94. package/dist/streamRepository/events/index.d.ts.map +1 -1
  95. package/dist/streamRepository/events/onStreamFlagged.d.ts +17 -0
  96. package/dist/streamRepository/events/onStreamFlagged.d.ts.map +1 -0
  97. package/dist/streamRepository/events/onStreamRecorded.d.ts +2 -2
  98. package/dist/streamRepository/events/onStreamRecorded.d.ts.map +1 -1
  99. package/dist/streamRepository/events/onStreamStarted.d.ts +2 -2
  100. package/dist/streamRepository/events/onStreamStarted.d.ts.map +1 -1
  101. package/dist/streamRepository/events/onStreamStopped.d.ts +2 -2
  102. package/dist/streamRepository/events/onStreamStopped.d.ts.map +1 -1
  103. package/dist/streamRepository/events/onStreamTerminated.d.ts +17 -0
  104. package/dist/streamRepository/events/onStreamTerminated.d.ts.map +1 -0
  105. package/dist/streamRepository/internalApi/queryStreams.d.ts +3 -3
  106. package/dist/streamRepository/internalApi/queryStreams.d.ts.map +1 -1
  107. package/dist/streamRepository/observers/getStreamById.d.ts +1 -0
  108. package/dist/streamRepository/observers/getStreamById.d.ts.map +1 -1
  109. package/dist/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.d.ts +14 -0
  110. package/dist/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.d.ts.map +1 -0
  111. package/dist/streamRepository/observers/getStreams/GetStreamsPageController.d.ts +14 -0
  112. package/dist/streamRepository/observers/getStreams/GetStreamsPageController.d.ts.map +1 -0
  113. package/dist/streamRepository/observers/getStreams/GetStreamsQueryStreamController.d.ts +15 -0
  114. package/dist/streamRepository/observers/getStreams/GetStreamsQueryStreamController.d.ts.map +1 -0
  115. package/dist/streamRepository/observers/getStreams/getStreams.d.ts +2 -0
  116. package/dist/streamRepository/observers/getStreams/getStreams.d.ts.map +1 -0
  117. package/dist/streamRepository/observers/getStreams/index.d.ts +2 -0
  118. package/dist/streamRepository/observers/getStreams/index.d.ts.map +1 -0
  119. package/dist/utils/linkedObject/index.d.ts +1 -0
  120. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  121. package/dist/utils/linkedObject/streamLinkedObject.d.ts +2 -0
  122. package/dist/utils/linkedObject/streamLinkedObject.d.ts.map +1 -0
  123. package/dist/utils/liveObject.d.ts +3 -0
  124. package/dist/utils/liveObject.d.ts.map +1 -1
  125. package/package.json +1 -1
  126. package/src/@types/core/events.ts +12 -0
  127. package/src/@types/core/model.ts +4 -2
  128. package/src/@types/core/payload.ts +2 -1
  129. package/src/@types/domains/community.ts +50 -1
  130. package/src/@types/domains/stream.ts +23 -3
  131. package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +2 -2
  132. package/src/channelRepository/observers/getChannel.ts +2 -2
  133. package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +7 -7
  134. package/src/client/api/secureLogout.ts +1 -1
  135. package/src/client/utils/ReadReceiptSync/readReceiptSyncEngine.ts +6 -3
  136. package/src/commentRepository/api/createComment.ts +2 -2
  137. package/src/commentRepository/api/deleteComment.ts +2 -4
  138. package/src/commentRepository/events/utils.ts +1 -1
  139. package/src/commentRepository/internalApi/createComment.ts +3 -2
  140. package/src/commentRepository/internalApi/deleteComment.ts +2 -2
  141. package/src/communityRepository/api/createCommunity.ts +5 -2
  142. package/src/communityRepository/api/getCommunities.ts +5 -1
  143. package/src/communityRepository/api/getCommunity.ts +5 -1
  144. package/src/communityRepository/api/queryCommunities.ts +2 -2
  145. package/src/communityRepository/api/updateCommunity.ts +5 -1
  146. package/src/communityRepository/communityMembership/observers/getMembers/CommunityMembersLiveCollectionController.ts +152 -0
  147. package/src/communityRepository/communityMembership/observers/getMembers/CommunityMembersPaginationController.ts +26 -0
  148. package/src/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.ts +114 -0
  149. package/src/communityRepository/communityMembership/observers/getMembers/enums.ts +9 -0
  150. package/src/communityRepository/communityMembership/observers/getMembers.ts +15 -128
  151. package/src/communityRepository/communityMembership/observers/index.ts +1 -0
  152. package/src/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersLiveCollectionController.ts +130 -0
  153. package/src/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersPaginationController.ts +29 -0
  154. package/src/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.ts +105 -0
  155. package/src/communityRepository/communityMembership/observers/searchMembers/enums.ts +9 -0
  156. package/src/communityRepository/communityMembership/observers/searchMembers.ts +60 -0
  157. package/src/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.ts +147 -0
  158. package/src/communityRepository/observers/getCommunities/CommunitiesPaginationController.ts +31 -0
  159. package/src/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.ts +86 -0
  160. package/src/communityRepository/observers/getCommunities/enums.ts +5 -0
  161. package/src/communityRepository/observers/getCommunities.ts +7 -150
  162. package/src/communityRepository/observers/index.ts +1 -0
  163. package/src/communityRepository/observers/searchCommunities/SearchCommunitiesLiveCollectionController.ts +129 -0
  164. package/src/communityRepository/observers/searchCommunities/SearchCommunitiesPaginationController.ts +31 -0
  165. package/src/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.ts +81 -0
  166. package/src/communityRepository/observers/searchCommunities/enums.ts +5 -0
  167. package/src/communityRepository/observers/searchCommunities.ts +56 -0
  168. package/src/communityRepository/utils/payload.ts +35 -1
  169. package/src/communityRepository/utils/saveCommunityUsers.ts +16 -0
  170. package/src/core/liveCollection/LiveCollectionController.ts +6 -3
  171. package/src/core/model/idResolvers.ts +1 -0
  172. package/src/core/model/index.ts +1 -0
  173. package/src/marker/events/onChannelUnreadUpdatedLocal.ts +29 -0
  174. package/src/marker/events/onSubChannelMarkerFetched.ts +1 -1
  175. package/src/marker/events/onSubChannelUnreadUpdatedLocal.ts +29 -0
  176. package/src/marker/events/onUserFeedMarkerUpdated.ts +3 -4
  177. package/src/marker/utils/reCalculateChannelUnreadInfo.ts +7 -3
  178. package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +3 -3
  179. package/src/postRepository/api/editPost.ts +1 -1
  180. package/src/postRepository/api/updatePost.ts +1 -1
  181. package/src/postRepository/observers/getPost.ts +26 -0
  182. package/src/postRepository/observers/getPosts.ts +31 -0
  183. package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +2 -2
  184. package/src/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.ts +1 -1
  185. package/src/streamRepository/api/createStream.ts +8 -5
  186. package/src/streamRepository/api/deleteStream.ts +6 -4
  187. package/src/streamRepository/api/disposeStream.ts +5 -5
  188. package/src/streamRepository/api/queryStreams.ts +4 -4
  189. package/src/streamRepository/api/updateStream.ts +2 -1
  190. package/src/streamRepository/events/index.ts +2 -0
  191. package/src/streamRepository/events/onStreamFlagged.ts +37 -0
  192. package/src/streamRepository/events/onStreamRecorded.ts +4 -2
  193. package/src/streamRepository/events/onStreamStarted.ts +4 -2
  194. package/src/streamRepository/events/onStreamStopped.ts +4 -2
  195. package/src/streamRepository/events/onStreamTerminated.ts +37 -0
  196. package/src/streamRepository/internalApi/queryStreams.ts +3 -3
  197. package/src/streamRepository/observers/getStreamById.ts +18 -5
  198. package/src/streamRepository/observers/getStreams/GetStreamsLiveCollectionController.ts +114 -0
  199. package/src/streamRepository/observers/getStreams/GetStreamsPageController.ts +23 -0
  200. package/src/streamRepository/observers/getStreams/GetStreamsQueryStreamController.ts +83 -0
  201. package/src/streamRepository/observers/getStreams/getStreams.ts +32 -0
  202. package/src/streamRepository/observers/getStreams/index.ts +1 -0
  203. package/src/streamRepository/observers/tests/getStreamById.test.ts +1 -1
  204. package/src/subChannelRepository/observers/getSubChannel.ts +2 -2
  205. package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts +4 -4
  206. package/src/utils/linkedObject/index.ts +2 -0
  207. package/src/utils/linkedObject/streamLinkedObject.ts +11 -0
  208. package/src/utils/liveObject.ts +3 -0
  209. package/dist/streamRepository/api/getStreams.d.ts +0 -39
  210. package/dist/streamRepository/api/getStreams.d.ts.map +0 -1
  211. package/dist/streamRepository/observers/getStreams.d.ts +0 -17
  212. package/dist/streamRepository/observers/getStreams.d.ts.map +0 -1
  213. package/src/streamRepository/api/getStreams.ts +0 -81
  214. package/src/streamRepository/observers/getStreams.ts +0 -152
@@ -0,0 +1,114 @@
1
+ import hash from 'object-hash';
2
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
3
+ import { pullFromCache, pushToCache } from '~/cache/api';
4
+ import { LinkedObject } from '~/utils/linkedObject';
5
+ import { filterByPropEquality, sortByFirstCreated, sortByLastCreated } from '~/core/query';
6
+ import {
7
+ onStreamFlagged,
8
+ onStreamRecorded,
9
+ onStreamStarted,
10
+ onStreamStopped,
11
+ onStreamTerminated,
12
+ } from '~/streamRepository/events';
13
+ import { GetStreamsPageController } from '~/streamRepository/observers/getStreams/GetStreamsPageController';
14
+ import { GetStreamsQueryStreamController } from '~/streamRepository/observers/getStreams/GetStreamsQueryStreamController';
15
+
16
+ export class GetStreamsLiveCollectionController extends LiveCollectionController<
17
+ 'stream',
18
+ Amity.StreamLiveCollection,
19
+ Amity.Stream,
20
+ GetStreamsPageController
21
+ > {
22
+ private queryStreamController: GetStreamsQueryStreamController;
23
+
24
+ private query: Amity.StreamLiveCollection;
25
+
26
+ constructor(
27
+ query: Amity.StreamLiveCollection,
28
+ callback: Amity.LiveCollectionCallback<Amity.Stream>,
29
+ ) {
30
+ const queryStreamId = hash(query);
31
+ const cacheKey = ['streams', 'collection', queryStreamId];
32
+ const paginationController = new GetStreamsPageController(query);
33
+
34
+ super(paginationController, queryStreamId, cacheKey, callback);
35
+
36
+ this.query = query;
37
+
38
+ this.queryStreamController = new GetStreamsQueryStreamController(
39
+ this.query,
40
+ this.cacheKey,
41
+ this.notifyChange.bind(this),
42
+ paginationController,
43
+ );
44
+
45
+ this.paginationController = paginationController;
46
+ this.callback = callback.bind(this);
47
+ this.loadPage({ initial: true });
48
+ }
49
+
50
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
51
+ const collection = pullFromCache<Amity.StreamLiveCollectionCache>(this.cacheKey)?.data;
52
+ if (!collection) return;
53
+
54
+ let data = collection.data
55
+ .map(streamId => pullFromCache<Amity.InternalStream>(['stream', 'get', streamId])!)
56
+ .filter(Boolean)
57
+ .map(stream => LinkedObject.stream(stream.data));
58
+
59
+ if (!this.shouldNotify(data) && origin === 'event') return;
60
+
61
+ data = this.applyFilter(data);
62
+
63
+ this.callback({
64
+ onNextPage: () =>
65
+ this.loadPage({ initial: false, direction: Amity.LiveCollectionPageDirection.NEXT }),
66
+ data,
67
+ hasNextPage: !!this.paginationController.getNextToken(),
68
+ loading,
69
+ error,
70
+ });
71
+ }
72
+
73
+ startSubscription() {
74
+ return this.queryStreamController.subscribeRTE([
75
+ { fn: onStreamRecorded, action: 'onStreamRecorded' },
76
+ { fn: onStreamStarted, action: 'onStreamStarted' },
77
+ { fn: onStreamStopped, action: 'onStreamStopped' },
78
+ { fn: onStreamFlagged, action: 'onStreamFlagged' },
79
+ { fn: onStreamTerminated, action: 'onStreamTerminated' },
80
+ ]);
81
+ }
82
+
83
+ protected setup() {
84
+ const collection = pullFromCache<Amity.StreamLiveCollectionCache>(this.cacheKey)?.data;
85
+ if (!collection) {
86
+ pushToCache(this.cacheKey, {
87
+ data: [],
88
+ params: {},
89
+ });
90
+ }
91
+ }
92
+
93
+ protected persistModel(response: Amity.StreamPayload) {
94
+ this.queryStreamController.saveToMainDB(response);
95
+ }
96
+
97
+ protected persistQueryStream({
98
+ response,
99
+ direction,
100
+ refresh,
101
+ }: Amity.LiveCollectionPersistQueryStreamParams<'stream'>) {
102
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
103
+ }
104
+
105
+ private applyFilter = (data: Amity.InternalStream[]): Amity.InternalStream[] => {
106
+ let streams = filterByPropEquality(data, 'isDeleted', this.query.isDeleted);
107
+
108
+ streams = streams.sort(
109
+ this.query.sortBy === 'lastCreated' ? sortByLastCreated : sortByFirstCreated,
110
+ );
111
+
112
+ return streams;
113
+ };
114
+ }
@@ -0,0 +1,23 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
3
+
4
+ export class GetStreamsPageController extends PaginationController<
5
+ 'stream',
6
+ Amity.StreamLiveCollection
7
+ > {
8
+ async getRequest(queryParams: Amity.StreamLiveCollection, token: string | undefined) {
9
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, ...params } = queryParams;
10
+ const options = token ? { token } : { limit };
11
+
12
+ const { data: queryResponse } = await this.http.get<
13
+ { results: Amity.StreamPayload } & Amity.Pagination
14
+ >(`/api/v3/video-streaming`, {
15
+ params: {
16
+ ...params,
17
+ options,
18
+ },
19
+ });
20
+
21
+ return { ...queryResponse.results, paging: queryResponse.paging };
22
+ }
23
+ }
@@ -0,0 +1,83 @@
1
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
2
+ import { getActiveClient } from '~/client';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { GetStreamsPageController } from '~/streamRepository/observers/getStreams/GetStreamsPageController';
5
+ import { getResolver } from '~/core/model';
6
+ import { pullFromCache, pushToCache } from '~/cache/api';
7
+
8
+ export class GetStreamsQueryStreamController extends QueryStreamController<
9
+ Amity.StreamPayload,
10
+ Amity.StreamLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private paginationController: GetStreamsPageController;
15
+
16
+ constructor(
17
+ query: Amity.StreamLiveCollection,
18
+ cacheKey: string[],
19
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
20
+ paginationController: GetStreamsPageController,
21
+ ) {
22
+ super(query, cacheKey);
23
+ this.notifyChange = notifyChange;
24
+ this.paginationController = paginationController;
25
+ }
26
+
27
+ // eslint-disable-next-line class-methods-use-this
28
+ saveToMainDB(response: Amity.StreamPayload) {
29
+ const client = getActiveClient();
30
+ const cachedAt = client.cache && Date.now();
31
+
32
+ if (client.cache) {
33
+ ingestInCache(response, { cachedAt });
34
+ }
35
+ }
36
+
37
+ appendToQueryStream(
38
+ response: Amity.StreamPayload & Partial<Amity.Pagination>,
39
+ direction: Amity.LiveCollectionPageDirection,
40
+ refresh = false,
41
+ ) {
42
+ if (refresh) {
43
+ pushToCache(this.cacheKey, {
44
+ data: response.videoStreamings.map(getResolver('stream')),
45
+ query: this.query,
46
+ });
47
+ } else {
48
+ const collection = pullFromCache<Amity.StreamLiveCollectionCache>(this.cacheKey)?.data;
49
+
50
+ const messages = collection?.data ?? [];
51
+
52
+ pushToCache(this.cacheKey, {
53
+ ...collection,
54
+ data:
55
+ direction === 'next'
56
+ ? [...new Set([...messages, ...response.videoStreamings.map(getResolver('stream'))])]
57
+ : [...new Set([...response.videoStreamings.map(getResolver('stream')), ...messages])],
58
+ });
59
+ }
60
+ }
61
+
62
+ reactor(action: string) {
63
+ return (payload: Amity.InternalStream) => {
64
+ const collection = pullFromCache<Amity.StreamLiveCollectionCache>(this.cacheKey)?.data;
65
+ if (!collection) return;
66
+
67
+ collection.data = [...new Set([payload.streamId, ...collection.data])];
68
+
69
+ pushToCache(this.cacheKey, collection);
70
+
71
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
72
+ };
73
+ }
74
+
75
+ subscribeRTE(
76
+ createSubscriber: {
77
+ fn: (reactor: Amity.Listener<Amity.InternalStream>) => Amity.Unsubscriber;
78
+ action: string;
79
+ }[],
80
+ ) {
81
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
82
+ }
83
+ }
@@ -0,0 +1,32 @@
1
+ import { getActiveClient } from '~/client';
2
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
3
+ import { dropFromCache } from '~/cache/api';
4
+ import { GetStreamsLiveCollectionController } from '~/streamRepository/observers/getStreams/GetStreamsLiveCollectionController';
5
+
6
+ export const getStreams = (
7
+ params: Amity.StreamLiveCollection,
8
+ callback: Amity.LiveCollectionCallback<Amity.Stream>,
9
+ config?: Amity.LiveCollectionConfig,
10
+ ) => {
11
+ const { log, cache, userId } = getActiveClient();
12
+
13
+ if (!cache) {
14
+ console.log(ENABLE_CACHE_MESSAGE);
15
+ }
16
+
17
+ const timestamp = Date.now();
18
+ log(`getStreams(tmpid: ${timestamp}) > listen`);
19
+
20
+ const liveCollection = new GetStreamsLiveCollectionController(params, callback);
21
+ const disposers = liveCollection.startSubscription();
22
+ const cacheKey = liveCollection.getCacheKey();
23
+
24
+ disposers.push(() => {
25
+ dropFromCache(cacheKey);
26
+ });
27
+
28
+ return () => {
29
+ log(`getStreams(tmpid: ${timestamp}) > dispose`);
30
+ disposers.forEach(fn => fn());
31
+ };
32
+ };
@@ -0,0 +1 @@
1
+ export * from './getStreams';
@@ -6,7 +6,7 @@ const STREAM_ID = streamResponse.data.videoStreamings[0].streamId;
6
6
 
7
7
  const getSnapshot = (params?: Record<string, any>) => {
8
8
  return {
9
- data: undefined as undefined | Amity.Stream,
9
+ data: undefined as undefined | Amity.InternalStream,
10
10
  loading: true,
11
11
  error: undefined as any,
12
12
  ...params,
@@ -20,7 +20,7 @@ import { getActiveClient } from '~/client';
20
20
  import { getSubChannelMessagePreviewWithUser } from '~/messagePreview/utils';
21
21
  import { isEqual } from '~/utils/isEqual';
22
22
  import { updateSubChannelCache } from '../utils/updateSubChannelCache';
23
- import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
23
+ import { onSubChannelUnreadUpdatedLocal } from '~/marker/events/onSubChannelUnreadUpdatedLocal';
24
24
 
25
25
  /* begin_public_function
26
26
  id: subchannel.get
@@ -221,7 +221,7 @@ export const getSubChannel = (
221
221
  'subChannelId',
222
222
  'subChannel',
223
223
  ),
224
- convertEventPayload(onUserFeedMarkerUpdated, 'feedId', 'subChannel'),
224
+ convertEventPayload(onSubChannelUnreadUpdatedLocal, 'subChannelId', 'subChannel'),
225
225
  ],
226
226
  {
227
227
  forceDispatch: true,
@@ -29,7 +29,7 @@ import { getSubChannel } from '~/subChannelRepository/api/getSubChannel';
29
29
  import { updateSubChannelCache } from '~/subChannelRepository/utils/updateSubChannelCache';
30
30
  import { prepareSubChannelPayload } from '~/subChannelRepository/utils';
31
31
  import { onSubChannelFetched } from '~/subChannelRepository/events/onSubChannelFetched';
32
- import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
32
+ import { onSubChannelUnreadUpdatedLocal } from '~/marker/events/onSubChannelUnreadUpdatedLocal';
33
33
 
34
34
  export class SubChannelLiveCollectionController extends LiveCollectionController<
35
35
  'subChannel',
@@ -59,7 +59,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
59
59
  prepareSubChannelPayload,
60
60
  );
61
61
  this.callback = callback.bind(this);
62
- this.loadPage(true);
62
+ this.loadPage({ initial: true });
63
63
  }
64
64
 
65
65
  protected setup() {
@@ -294,7 +294,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
294
294
  action: 'onUpdate',
295
295
  },
296
296
  {
297
- fn: convertEventPayload(onUserFeedMarkerUpdated, 'feedId', 'subChannel'),
297
+ fn: convertEventPayload(onSubChannelUnreadUpdatedLocal, 'subChannelId', 'subChannel'),
298
298
  action: 'onUpdate',
299
299
  },
300
300
  ]);
@@ -315,7 +315,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
315
315
  if (!this.shouldNotify(data) && origin === 'event') return;
316
316
 
317
317
  this.callback({
318
- onNextPage: () => this.loadPage(false, Amity.LiveCollectionPageDirection.NEXT),
318
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
319
319
  data,
320
320
  hasNextPage: !!this.paginationController.getNextToken(),
321
321
  loading,
@@ -1,4 +1,5 @@
1
1
  import { storyLinkedObject } from '~/utils/linkedObject/storyLinkedObject';
2
+ import { streamLinkedObject } from '~/utils/linkedObject/streamLinkedObject';
2
3
  import { categoryLinkedObject } from './categoryLinkedObject';
3
4
  import { commentLinkedObject } from './commentLinkedObject';
4
5
  import { userLinkedObject } from './userLinkedObject';
@@ -13,6 +14,7 @@ export const LinkedObject = {
13
14
  post: postLinkedObject,
14
15
  user: userLinkedObject,
15
16
  category: categoryLinkedObject,
17
+ stream: streamLinkedObject,
16
18
  story: storyLinkedObject,
17
19
  storyTarget: storyTargetLinkedObject,
18
20
  message: messageLinkedObject,
@@ -0,0 +1,11 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+
3
+ export const streamLinkedObject = (stream: Amity.InternalStream): Amity.Stream => {
4
+ return {
5
+ ...stream,
6
+ get moderation() {
7
+ return pullFromCache<Amity.StreamModeration>(['streamModeration', 'get', stream.streamId])
8
+ ?.data;
9
+ },
10
+ };
11
+ };
@@ -10,6 +10,9 @@ import { convertGetterPropsToStatic } from '~/utils/object';
10
10
 
11
11
  import { isEqual } from './isEqual';
12
12
 
13
+ /**
14
+ * @deprecated This function is deprecated
15
+ */
13
16
  export const liveObject = <
14
17
  T extends Amity.Model,
15
18
  K extends keyof T,
@@ -1,39 +0,0 @@
1
- /**
2
- * ```js
3
- * import { getStreams } from '@amityco/ts-sdk-react-native'
4
- * const streams = await getStreams()
5
- * ```
6
- *
7
- * Queries a paginable list of {@link Amity.Stream} objects
8
- *
9
- * @param query The query parameters
10
- * @returns A page of {@link Amity.Stream} objects
11
- *
12
- * @category Stream API
13
- * @async
14
- */
15
- export declare const getStreams: {
16
- (query?: {
17
- isLive?: boolean;
18
- statuses?: Amity.StreamStatus[];
19
- userPublicIds?: Amity.InternalUser['userId'][];
20
- sortBy?: 'lastCreated' | 'firstCreated';
21
- isDeleted?: Amity.Stream['isDeleted'];
22
- page?: Amity.Page;
23
- }): Promise<Amity.Cached<Amity.Paged<Amity.Stream>>>;
24
- /**
25
- * ```js
26
- * import { getStreams } from '@amityco/ts-sdk-react-native'
27
- * const streams = getStreams.locally()
28
- * ```
29
- *
30
- * Queries a paginable list of {@link Amity.Stream} objects from cache
31
- *
32
- * @param query The query parameters
33
- * @returns streams
34
- *
35
- * @category Stream API
36
- */
37
- locally(query: Parameters<typeof getStreams>[0]): void;
38
- };
39
- //# sourceMappingURL=getStreams.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStreams.d.ts","sourceRoot":"","sources":["../../../src/streamRepository/api/getStreams.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;aAAkB;QACvC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;QAChC,aAAa,CAAC,EAAE,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;QACxC,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;KACnB,GAAG,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;IAiCpD;;;;;;;;;;;;OAYG;mBAC0B,WAAW,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAhB5D,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * ```js
3
- * import { StreamRepository } from '@amityco/ts-sdk-react-native'
4
- * const streams = await StreamRepository.getStreams()
5
- * ```
6
- *
7
- * Observe all mutations on a list of {@link Amity.Stream}s
8
- *
9
- * @param params for querying streams
10
- * @param callback the function to call when new data are available
11
- * @param config
12
- * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the streams
13
- *
14
- * @category Stream Live Collection
15
- */
16
- export declare const getStreams: (params: Amity.StreamLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Stream>, config?: Amity.LiveCollectionConfig) => () => void;
17
- //# sourceMappingURL=getStreams.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getStreams.d.ts","sourceRoot":"","sources":["../../../src/streamRepository/observers/getStreams.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,oBAAoB,YACxB,MAAM,sBAAsB,CAAC,MAAM,MAAM,CAAC,WAC3C,MAAM,oBAAoB,eA0GpC,CAAC"}
@@ -1,81 +0,0 @@
1
- import { getActiveClient } from '~/client/api';
2
-
3
- import { toPage, toToken } from '~/core/query';
4
- import { ingestInCache } from '~/cache/api/ingestInCache';
5
-
6
- /* begin_public_function
7
- id: stream.query
8
- */
9
- /**
10
- * ```js
11
- * import { getStreams } from '@amityco/ts-sdk-react-native'
12
- * const streams = await getStreams()
13
- * ```
14
- *
15
- * Queries a paginable list of {@link Amity.Stream} objects
16
- *
17
- * @param query The query parameters
18
- * @returns A page of {@link Amity.Stream} objects
19
- *
20
- * @category Stream API
21
- * @async
22
- */
23
- export const getStreams = async (query?: {
24
- isLive?: boolean;
25
- statuses?: Amity.StreamStatus[];
26
- userPublicIds?: Amity.InternalUser['userId'][];
27
- sortBy?: 'lastCreated' | 'firstCreated';
28
- isDeleted?: Amity.Stream['isDeleted'];
29
- page?: Amity.Page;
30
- }): Promise<Amity.Cached<Amity.Paged<Amity.Stream>>> => {
31
- const client = getActiveClient();
32
- client.log('stream/getStreams', query);
33
-
34
- const { page, ...params } = query ?? {};
35
-
36
- const { data } = await client.http.get<{ results: Amity.StreamPayload } & Amity.Pagination>(
37
- `/api/v3/video-streaming`,
38
- {
39
- params: {
40
- ...params,
41
- options: {
42
- token: toToken(page, 'skiplimit'),
43
- },
44
- },
45
- },
46
- );
47
-
48
- // API-FIX: backend to response Amity.Response: const { paging, videoStreamings } = unwrapPayload(data)
49
- // API-FIX: seems returned data has a results identifier on top of data, like no other apis, and this is beautiful
50
- const { paging, results: payload } = data;
51
- const { videoStreamings } = payload;
52
-
53
- const cachedAt = client.cache && Date.now();
54
- if (client.cache) ingestInCache(payload as Amity.StreamPayload, { cachedAt });
55
-
56
- const nextPage = toPage(paging.next);
57
- const prevPage = toPage(paging.previous);
58
-
59
- return { data: videoStreamings, cachedAt, prevPage, nextPage };
60
- };
61
- /* end_public_function */
62
-
63
- /**
64
- * ```js
65
- * import { getStreams } from '@amityco/ts-sdk-react-native'
66
- * const streams = getStreams.locally()
67
- * ```
68
- *
69
- * Queries a paginable list of {@link Amity.Stream} objects from cache
70
- *
71
- * @param query The query parameters
72
- * @returns streams
73
- *
74
- * @category Stream API
75
- */
76
- getStreams.locally = (query: Parameters<typeof getStreams>[0]) => {
77
- const client = getActiveClient();
78
- client.log('stream/getStreams.locally', query);
79
-
80
- // TODO
81
- };
@@ -1,152 +0,0 @@
1
- /* eslint-disable no-use-before-define */
2
- import { getResolver } from '~/core/model';
3
- import { pullFromCache, pushToCache } from '~/cache/api';
4
- import { getActiveClient } from '~/client/api';
5
-
6
- import {
7
- createQuery,
8
- filterByPropEquality,
9
- queryOptions,
10
- runQuery,
11
- sortByFirstCreated,
12
- sortByLastCreated,
13
- } from '~/core/query';
14
-
15
- import {
16
- COLLECTION_DEFAULT_CACHING_POLICY,
17
- COLLECTION_DEFAULT_PAGINATION_LIMIT,
18
- ENABLE_CACHE_MESSAGE,
19
- } from '~/utils/constants';
20
-
21
- import { queryStreams as _queryStreams } from '../internalApi/queryStreams';
22
- import { onStreamRecorded, onStreamStarted, onStreamStopped } from '../events';
23
-
24
- /* begin_public_function
25
- id: stream.query
26
- */
27
- /**
28
- * ```js
29
- * import { StreamRepository } from '@amityco/ts-sdk-react-native'
30
- * const streams = await StreamRepository.getStreams()
31
- * ```
32
- *
33
- * Observe all mutations on a list of {@link Amity.Stream}s
34
- *
35
- * @param params for querying streams
36
- * @param callback the function to call when new data are available
37
- * @param config
38
- * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the streams
39
- *
40
- * @category Stream Live Collection
41
- */
42
- export const getStreams = (
43
- params: Amity.StreamLiveCollection,
44
- callback: Amity.LiveCollectionCallback<Amity.Stream>,
45
- config?: Amity.LiveCollectionConfig,
46
- ) => {
47
- const { log, cache } = getActiveClient();
48
-
49
- if (!cache) {
50
- console.log(ENABLE_CACHE_MESSAGE);
51
- }
52
-
53
- const timestamp = Date.now();
54
- log(`getStreams(tmpid: ${timestamp}) > listen`);
55
-
56
- const { limit: queryLimit, ...queryParams } = params;
57
-
58
- const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
59
- const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
60
-
61
- const disposers: Amity.Unsubscriber[] = [];
62
- const cacheKey = ['streams', 'collection', params];
63
-
64
- const applyFilter = (data: Amity.Stream[]): Amity.Stream[] => {
65
- let streams = filterByPropEquality(data, 'isDeleted', params.isDeleted);
66
-
67
- streams = streams.sort(
68
- params.sortBy === 'lastCreated' ? sortByLastCreated : sortByFirstCreated,
69
- );
70
-
71
- return streams;
72
- };
73
-
74
- const responder = (data: Amity.StreamLiveCollectionCache, isEventModel = false) => {
75
- const streams: Amity.Stream[] =
76
- data.data
77
- .map(streamId => {
78
- return pullFromCache<Amity.Stream>(['stream', 'get', streamId])!;
79
- })
80
- .filter(Boolean)
81
- .map(({ data }) => data) ?? [];
82
-
83
- callback({
84
- onNextPage: onFetch,
85
- /*
86
- * Only apply filter to RTE Model
87
- */
88
- data: isEventModel ? applyFilter(streams) : streams,
89
- hasNextPage: !!data.params?.page,
90
- loading: data.loading,
91
- error: data.error,
92
- });
93
- };
94
-
95
- const realtimeRouter = (_: Amity.StreamActionType) => (stream: Amity.Stream) => {
96
- const collection = pullFromCache<Amity.StreamLiveCollectionCache>(cacheKey)?.data;
97
- if (!collection) return;
98
-
99
- collection.data = [...new Set([stream.streamId, ...collection.data])];
100
-
101
- pushToCache(cacheKey, collection);
102
- responder(collection, true);
103
- };
104
-
105
- const onFetch = (initial = false) => {
106
- const collection = pullFromCache<Amity.StreamLiveCollectionCache>(cacheKey)?.data;
107
-
108
- const streams = collection?.data ?? [];
109
-
110
- if (!initial && streams.length > 0 && !collection?.params.page) return;
111
-
112
- const query = createQuery(_queryStreams, {
113
- ...queryParams,
114
- limit: initial ? limit : undefined,
115
- page: !initial ? collection?.params.page : undefined,
116
- });
117
-
118
- runQuery(
119
- query,
120
- ({ data: result, error, loading, paging }) => {
121
- const data = {
122
- loading,
123
- error,
124
- params: { page: paging?.next },
125
- data: streams,
126
- };
127
-
128
- if (result) {
129
- data.data = [...new Set([...streams, ...result.map(getResolver('stream'))])];
130
- }
131
- pushToCache(cacheKey, data);
132
-
133
- responder(data);
134
- },
135
- queryOptions(policy),
136
- );
137
- };
138
-
139
- disposers.push(
140
- onStreamRecorded(realtimeRouter('onStreamRecorded')),
141
- onStreamStarted(realtimeRouter('onStreamStarted')),
142
- onStreamStopped(realtimeRouter('onStreamStopped')),
143
- );
144
-
145
- onFetch(true);
146
-
147
- return () => {
148
- log(`getStreams(tmpid: ${timestamp}) > dispose`);
149
- disposers.forEach(fn => fn());
150
- };
151
- };
152
- /* end_public_function */