@amityco/ts-sdk-react-native 6.14.1 → 6.15.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 (280) hide show
  1. package/dist/@types/core/events.d.ts +6 -1
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/live.d.ts +5 -3
  4. package/dist/@types/core/live.d.ts.map +1 -1
  5. package/dist/@types/core/model.d.ts +4 -0
  6. package/dist/@types/core/model.d.ts.map +1 -1
  7. package/dist/@types/core/payload.d.ts +14 -0
  8. package/dist/@types/core/payload.d.ts.map +1 -1
  9. package/dist/@types/core/permissions.d.ts +2 -1
  10. package/dist/@types/core/permissions.d.ts.map +1 -1
  11. package/dist/@types/domains/analytics.d.ts +4 -1
  12. package/dist/@types/domains/analytics.d.ts.map +1 -1
  13. package/dist/@types/domains/category.d.ts +2 -1
  14. package/dist/@types/domains/category.d.ts.map +1 -1
  15. package/dist/@types/domains/channel.d.ts +3 -1
  16. package/dist/@types/domains/channel.d.ts.map +1 -1
  17. package/dist/@types/domains/comment.d.ts +1 -1
  18. package/dist/@types/domains/comment.d.ts.map +1 -1
  19. package/dist/@types/domains/community.d.ts +8 -3
  20. package/dist/@types/domains/community.d.ts.map +1 -1
  21. package/dist/@types/domains/feed.d.ts +15 -0
  22. package/dist/@types/domains/feed.d.ts.map +1 -1
  23. package/dist/@types/domains/messagePreview.d.ts +1 -1
  24. package/dist/@types/domains/messagePreview.d.ts.map +1 -1
  25. package/dist/@types/domains/partials.d.ts +9 -0
  26. package/dist/@types/domains/partials.d.ts.map +1 -1
  27. package/dist/@types/domains/post.d.ts +3 -2
  28. package/dist/@types/domains/post.d.ts.map +1 -1
  29. package/dist/@types/domains/story.d.ts +126 -0
  30. package/dist/@types/domains/story.d.ts.map +1 -0
  31. package/dist/@types/domains/stream.d.ts +2 -1
  32. package/dist/@types/domains/stream.d.ts.map +1 -1
  33. package/dist/@types/domains/subChannel.d.ts +1 -1
  34. package/dist/@types/domains/subChannel.d.ts.map +1 -1
  35. package/dist/@types/index.d.ts +1 -0
  36. package/dist/@types/index.d.ts.map +1 -1
  37. package/dist/analytic/constant.d.ts +1 -0
  38. package/dist/analytic/constant.d.ts.map +1 -1
  39. package/dist/analytic/service/analytic/AnalyticsEngine.d.ts +1 -0
  40. package/dist/analytic/service/analytic/AnalyticsEngine.d.ts.map +1 -1
  41. package/dist/analytic/service/analytic/AnalyticsEventCapturer.d.ts +5 -0
  42. package/dist/analytic/service/analytic/AnalyticsEventCapturer.d.ts.map +1 -1
  43. package/dist/analytic/service/analytic/AnalyticsEventSyncer.d.ts +2 -0
  44. package/dist/analytic/service/analytic/AnalyticsEventSyncer.d.ts.map +1 -1
  45. package/dist/categoryRepository/internalApi/queryCategories.d.ts +2 -2
  46. package/dist/categoryRepository/internalApi/queryCategories.d.ts.map +1 -1
  47. package/dist/categoryRepository/observers/getCategories.d.ts.map +1 -1
  48. package/dist/channelRepository/api/createChannel.d.ts +1 -1
  49. package/dist/channelRepository/api/createChannel.d.ts.map +1 -1
  50. package/dist/channelRepository/channelMembership/observers/getMembers.d.ts.map +1 -1
  51. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberLiveCollectionController.d.ts +14 -0
  52. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberLiveCollectionController.d.ts.map +1 -0
  53. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberPaginationController.d.ts +13 -0
  54. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberPaginationController.d.ts.map +1 -0
  55. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberQueryStreamController.d.ts +14 -0
  56. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberQueryStreamController.d.ts.map +1 -0
  57. package/dist/channelRepository/observers/getChannels.d.ts.map +1 -1
  58. package/dist/channelRepository/observers/liveCollection/ChannelLiveCollectionController.d.ts +19 -0
  59. package/dist/channelRepository/observers/liveCollection/ChannelLiveCollectionController.d.ts.map +1 -0
  60. package/dist/channelRepository/observers/liveCollection/ChannelPaginationController.d.ts +14 -0
  61. package/dist/channelRepository/observers/liveCollection/ChannelPaginationController.d.ts.map +1 -0
  62. package/dist/channelRepository/observers/liveCollection/ChannelPagnationNoPageController.d.ts +5 -0
  63. package/dist/channelRepository/observers/liveCollection/ChannelPagnationNoPageController.d.ts.map +1 -0
  64. package/dist/channelRepository/observers/liveCollection/ChannelQueryStreamController.d.ts +17 -0
  65. package/dist/channelRepository/observers/liveCollection/ChannelQueryStreamController.d.ts.map +1 -0
  66. package/dist/channelRepository/utils/prepareChannelPayload.d.ts +1 -0
  67. package/dist/channelRepository/utils/prepareChannelPayload.d.ts.map +1 -1
  68. package/dist/communityRepository/api/createCommunity.d.ts +1 -1
  69. package/dist/communityRepository/api/createCommunity.d.ts.map +1 -1
  70. package/dist/communityRepository/api/queryCommunities.d.ts +1 -1
  71. package/dist/communityRepository/api/queryCommunities.d.ts.map +1 -1
  72. package/dist/communityRepository/api/updateCommunity.d.ts +1 -1
  73. package/dist/communityRepository/api/updateCommunity.d.ts.map +1 -1
  74. package/dist/communityRepository/communityMembership/api/queryCommunityMembers.d.ts +2 -7
  75. package/dist/communityRepository/communityMembership/api/queryCommunityMembers.d.ts.map +1 -1
  76. package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
  77. package/dist/communityRepository/observers/getCommunities.d.ts.map +1 -1
  78. package/dist/communityRepository/utils/payload.d.ts +2 -1
  79. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  80. package/dist/core/events.d.ts +3 -3
  81. package/dist/core/events.d.ts.map +1 -1
  82. package/dist/core/liveCollection/LiveCollectionController.d.ts +3 -2
  83. package/dist/core/liveCollection/LiveCollectionController.d.ts.map +1 -1
  84. package/dist/core/liveCollection/PaginationNoPageController.d.ts +9 -0
  85. package/dist/core/liveCollection/PaginationNoPageController.d.ts.map +1 -0
  86. package/dist/core/model/idResolvers.d.ts.map +1 -1
  87. package/dist/core/model/index.d.ts.map +1 -1
  88. package/dist/core/query/sorting.d.ts +14 -0
  89. package/dist/core/query/sorting.d.ts.map +1 -1
  90. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts +36 -2
  91. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts.map +1 -1
  92. package/dist/feedRepository/api/queryGlobalFeed.d.ts +24 -6
  93. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  94. package/dist/index.cjs.js +7936 -7216
  95. package/dist/index.d.ts +1 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.esm.js +5842 -5121
  98. package/dist/index.umd.js +4 -4
  99. package/dist/marker/api/getChannelMarkers.d.ts +2 -5
  100. package/dist/marker/api/getChannelMarkers.d.ts.map +1 -1
  101. package/dist/marker/api/getMessageMarkers.d.ts +3 -4
  102. package/dist/marker/api/getMessageMarkers.d.ts.map +1 -1
  103. package/dist/marker/events/onMessageMarked.d.ts.map +1 -1
  104. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts +1 -47
  105. package/dist/messagePreview/utils/getChannelMessagePreviewWithUser.d.ts.map +1 -1
  106. package/dist/messageRepository/observers/liveCollection/MessageLiveCollectionController.d.ts.map +1 -1
  107. package/dist/messageRepository/observers/liveCollection/MessageQueryStreamController.d.ts +1 -1
  108. package/dist/messageRepository/observers/liveCollection/MessageQueryStreamController.d.ts.map +1 -1
  109. package/dist/postRepository/api/queryPosts.d.ts +1 -1
  110. package/dist/postRepository/api/queryPosts.d.ts.map +1 -1
  111. package/dist/postRepository/observers/getPosts.d.ts.map +1 -1
  112. package/dist/role/api/queryRoles.d.ts +9 -1
  113. package/dist/role/api/queryRoles.d.ts.map +1 -1
  114. package/dist/storyRepository/api/createImageStory.d.ts +17 -0
  115. package/dist/storyRepository/api/createImageStory.d.ts.map +1 -0
  116. package/dist/storyRepository/api/createVideoStory.d.ts +15 -0
  117. package/dist/storyRepository/api/createVideoStory.d.ts.map +1 -0
  118. package/dist/storyRepository/api/hardDeleteStory.d.ts +2 -0
  119. package/dist/storyRepository/api/hardDeleteStory.d.ts.map +1 -0
  120. package/dist/storyRepository/api/index.d.ts +5 -0
  121. package/dist/storyRepository/api/index.d.ts.map +1 -0
  122. package/dist/storyRepository/api/softDeleteStory.d.ts +2 -0
  123. package/dist/storyRepository/api/softDeleteStory.d.ts.map +1 -0
  124. package/dist/storyRepository/events/onStoryCreated.d.ts +2 -0
  125. package/dist/storyRepository/events/onStoryCreated.d.ts.map +1 -0
  126. package/dist/storyRepository/events/onStoryDeleted.d.ts +2 -0
  127. package/dist/storyRepository/events/onStoryDeleted.d.ts.map +1 -0
  128. package/dist/storyRepository/events/onStoryError.d.ts +2 -0
  129. package/dist/storyRepository/events/onStoryError.d.ts.map +1 -0
  130. package/dist/storyRepository/index.d.ts +3 -0
  131. package/dist/storyRepository/index.d.ts.map +1 -0
  132. package/dist/storyRepository/internalApi/createStory.d.ts +2 -0
  133. package/dist/storyRepository/internalApi/createStory.d.ts.map +1 -0
  134. package/dist/storyRepository/internalApi/deleteStory.d.ts +2 -0
  135. package/dist/storyRepository/internalApi/deleteStory.d.ts.map +1 -0
  136. package/dist/storyRepository/internalApi/getActiveStoriesByTarget.d.ts +2 -0
  137. package/dist/storyRepository/internalApi/getActiveStoriesByTarget.d.ts.map +1 -0
  138. package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts +2 -0
  139. package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -0
  140. package/dist/storyRepository/observers/index.d.ts +2 -0
  141. package/dist/storyRepository/observers/index.d.ts.map +1 -0
  142. package/dist/storyRepository/utils/convertRawToStory.d.ts +3 -0
  143. package/dist/storyRepository/utils/convertRawToStory.d.ts.map +1 -0
  144. package/dist/storyRepository/utils/convertStoryPayloadToRaw.d.ts +2 -0
  145. package/dist/storyRepository/utils/convertStoryPayloadToRaw.d.ts.map +1 -0
  146. package/dist/storyRepository/utils/createOptimisticEvent.d.ts +6 -0
  147. package/dist/storyRepository/utils/createOptimisticEvent.d.ts.map +1 -0
  148. package/dist/storyRepository/utils/getStoryCache.d.ts +5 -0
  149. package/dist/storyRepository/utils/getStoryCache.d.ts.map +1 -0
  150. package/dist/streamRepository/api/index.d.ts.map +1 -1
  151. package/dist/streamRepository/api/queryStreams.d.ts +2 -0
  152. package/dist/streamRepository/api/queryStreams.d.ts.map +1 -1
  153. package/dist/streamRepository/internalApi/queryStreams.d.ts +16 -0
  154. package/dist/streamRepository/internalApi/queryStreams.d.ts.map +1 -0
  155. package/dist/streamRepository/observers/getStreams.d.ts +1 -1
  156. package/dist/streamRepository/observers/getStreams.d.ts.map +1 -1
  157. package/dist/subChannelRepository/observers/getSubChannels.d.ts.map +1 -1
  158. package/dist/subChannelRepository/observers/liveCollection/SubChannelLiveCollectionController.d.ts +14 -0
  159. package/dist/subChannelRepository/observers/liveCollection/SubChannelLiveCollectionController.d.ts.map +1 -0
  160. package/dist/subChannelRepository/observers/liveCollection/SubChannelPaginationController.d.ts +9 -0
  161. package/dist/subChannelRepository/observers/liveCollection/SubChannelPaginationController.d.ts.map +1 -0
  162. package/dist/subChannelRepository/observers/liveCollection/SubChannelQueryStreamController.d.ts +14 -0
  163. package/dist/subChannelRepository/observers/liveCollection/SubChannelQueryStreamController.d.ts.map +1 -0
  164. package/dist/subChannelRepository/utils/prepareSubChannelPayload.d.ts +1 -0
  165. package/dist/subChannelRepository/utils/prepareSubChannelPayload.d.ts.map +1 -1
  166. package/dist/utils/constants.d.ts +5 -0
  167. package/dist/utils/constants.d.ts.map +1 -1
  168. package/dist/utils/linkedObject/commentLinkedObject.d.ts.map +1 -1
  169. package/dist/utils/linkedObject/index.d.ts +1 -0
  170. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  171. package/dist/utils/linkedObject/postLinkedObject.d.ts.map +1 -1
  172. package/dist/utils/linkedObject/storyLinkedObject.d.ts +2 -0
  173. package/dist/utils/linkedObject/storyLinkedObject.d.ts.map +1 -0
  174. package/dist/utils/tests/dummy/channel.d.ts +9 -0
  175. package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
  176. package/package.json +1 -1
  177. package/src/@types/core/events.ts +8 -1
  178. package/src/@types/core/live.ts +7 -4
  179. package/src/@types/core/model.ts +6 -0
  180. package/src/@types/core/payload.ts +19 -0
  181. package/src/@types/core/permissions.ts +1 -0
  182. package/src/@types/domains/analytics.ts +4 -1
  183. package/src/@types/domains/category.ts +2 -1
  184. package/src/@types/domains/channel.ts +4 -1
  185. package/src/@types/domains/comment.ts +1 -1
  186. package/src/@types/domains/community.ts +11 -5
  187. package/src/@types/domains/feed.ts +16 -0
  188. package/src/@types/domains/messagePreview.ts +1 -1
  189. package/src/@types/domains/partials.ts +12 -0
  190. package/src/@types/domains/post.ts +3 -2
  191. package/src/@types/domains/story.ts +150 -0
  192. package/src/@types/domains/stream.ts +2 -1
  193. package/src/@types/domains/subChannel.ts +1 -1
  194. package/src/@types/index.ts +1 -3
  195. package/src/analytic/constant.ts +2 -1
  196. package/src/analytic/service/analytic/AnalyticsEngine.ts +9 -0
  197. package/src/analytic/service/analytic/AnalyticsEventCapturer.ts +63 -10
  198. package/src/analytic/service/analytic/AnalyticsEventSyncer.ts +34 -4
  199. package/src/categoryRepository/internalApi/queryCategories.ts +25 -18
  200. package/src/categoryRepository/observers/getCategories.ts +4 -3
  201. package/src/channelRepository/api/createChannel.ts +7 -3
  202. package/src/channelRepository/channelMembership/observers/getMembers.ts +9 -123
  203. package/src/channelRepository/channelMembership/observers/liveCollection/ChannelMemberLiveCollectionController.ts +154 -0
  204. package/src/channelRepository/channelMembership/observers/liveCollection/ChannelMemberPaginationController.ts +28 -0
  205. package/src/channelRepository/channelMembership/observers/liveCollection/ChannelMemberQueryStreamController.ts +109 -0
  206. package/src/channelRepository/channelMembership/observers/tests/getMembers.test.ts +3 -1
  207. package/src/channelRepository/observers/getChannels.ts +10 -316
  208. package/src/channelRepository/observers/liveCollection/ChannelLiveCollectionController.ts +413 -0
  209. package/src/channelRepository/observers/liveCollection/ChannelPaginationController.ts +36 -0
  210. package/src/channelRepository/observers/liveCollection/ChannelPagnationNoPageController.ts +20 -0
  211. package/src/channelRepository/observers/liveCollection/ChannelQueryStreamController.ts +89 -0
  212. package/src/channelRepository/observers/tests/getChannel.test.ts +4 -1
  213. package/src/channelRepository/observers/tests/getChannels.test.ts +153 -40
  214. package/src/channelRepository/utils/prepareChannelPayload.ts +1 -1
  215. package/src/client/utils/markerSyncEngine.ts +1 -1
  216. package/src/communityRepository/api/createCommunity.ts +7 -6
  217. package/src/communityRepository/api/queryCommunities.ts +12 -14
  218. package/src/communityRepository/api/test/queryCommunity.test.ts +18 -12
  219. package/src/communityRepository/api/updateCommunity.ts +4 -3
  220. package/src/communityRepository/communityMembership/api/queryCommunityMembers.ts +26 -25
  221. package/src/communityRepository/communityMembership/observers/getMembers.ts +4 -3
  222. package/src/communityRepository/observers/getCommunities.ts +8 -5
  223. package/src/communityRepository/utils/payload.ts +7 -2
  224. package/src/core/liveCollection/LiveCollectionController.ts +19 -5
  225. package/src/core/liveCollection/PaginationNoPageController.ts +26 -0
  226. package/src/core/model/idResolvers.ts +2 -0
  227. package/src/core/model/index.ts +2 -0
  228. package/src/core/query/sorting.ts +18 -0
  229. package/src/feedRepository/api/getCustomRankingGlobalFeed.ts +50 -8
  230. package/src/feedRepository/api/queryGlobalFeed.ts +56 -12
  231. package/src/index.ts +2 -1
  232. package/src/marker/api/getChannelMarkers.ts +6 -16
  233. package/src/marker/api/getMessageMarkers.ts +12 -20
  234. package/src/marker/api/tests/getChannelMarkers.test.ts +1 -11
  235. package/src/marker/api/tests/getMessageMarkers.test.ts +1 -11
  236. package/src/marker/events/onMessageMarked.ts +4 -5
  237. package/src/messagePreview/utils/getChannelMessagePreviewWithUser.ts +9 -2
  238. package/src/messageRepository/observers/liveCollection/MessageLiveCollectionController.ts +1 -0
  239. package/src/messageRepository/observers/liveCollection/MessageQueryStreamController.ts +2 -1
  240. package/src/postRepository/api/queryPosts.ts +12 -10
  241. package/src/postRepository/observers/getPosts.ts +7 -4
  242. package/src/role/api/queryRoles.ts +25 -6
  243. package/src/storyRepository/api/createImageStory.ts +94 -0
  244. package/src/storyRepository/api/createVideoStory.ts +92 -0
  245. package/src/storyRepository/api/hardDeleteStory.ts +6 -0
  246. package/src/storyRepository/api/index.ts +4 -0
  247. package/src/storyRepository/api/softDeleteStory.ts +6 -0
  248. package/src/storyRepository/events/onStoryCreated.ts +14 -0
  249. package/src/storyRepository/events/onStoryDeleted.ts +14 -0
  250. package/src/storyRepository/events/onStoryError.ts +14 -0
  251. package/src/storyRepository/index.ts +2 -0
  252. package/src/storyRepository/internalApi/createStory.ts +26 -0
  253. package/src/storyRepository/internalApi/deleteStory.ts +35 -0
  254. package/src/storyRepository/internalApi/getActiveStoriesByTarget.ts +36 -0
  255. package/src/storyRepository/observers/getActiveStoriesByTarget.ts +163 -0
  256. package/src/storyRepository/observers/index.ts +1 -0
  257. package/src/storyRepository/utils/convertRawToStory.ts +16 -0
  258. package/src/storyRepository/utils/convertStoryPayloadToRaw.ts +43 -0
  259. package/src/storyRepository/utils/createOptimisticEvent.ts +63 -0
  260. package/src/storyRepository/utils/getStoryCache.ts +6 -0
  261. package/src/streamRepository/api/index.ts +1 -1
  262. package/src/streamRepository/api/queryStreams.ts +2 -0
  263. package/src/streamRepository/internalApi/queryStreams.ts +57 -0
  264. package/src/streamRepository/observers/getStreams.ts +6 -5
  265. package/src/subChannelRepository/observers/getSubChannels.ts +8 -228
  266. package/src/subChannelRepository/observers/liveCollection/SubChannelLiveCollectionController.ts +274 -0
  267. package/src/subChannelRepository/observers/liveCollection/SubChannelPaginationController.ts +35 -0
  268. package/src/subChannelRepository/observers/liveCollection/SubChannelQueryStreamController.ts +94 -0
  269. package/src/subChannelRepository/observers/tests/getSubChannels.test.ts +73 -45
  270. package/src/subChannelRepository/observers/tests/getSubChannelsWithMessagePreview.test.ts +58 -21
  271. package/src/subChannelRepository/utils/prepareSubChannelPayload.ts +1 -1
  272. package/src/utils/constants.ts +5 -0
  273. package/src/utils/linkedObject/commentLinkedObject.ts +3 -1
  274. package/src/utils/linkedObject/index.ts +2 -0
  275. package/src/utils/linkedObject/postLinkedObject.ts +4 -2
  276. package/src/utils/linkedObject/storyLinkedObject.ts +83 -0
  277. package/src/utils/tests/dummy/channel.ts +14 -4
  278. package/dist/categoryRepository/api/queryCategories.d.ts +0 -32
  279. package/dist/categoryRepository/api/queryCategories.d.ts.map +0 -1
  280. package/src/categoryRepository/api/queryCategories.ts +0 -116
@@ -7,13 +7,6 @@ import { client, generateChannelMarker, generateUserMarker } from '~/utils/tests
7
7
 
8
8
  import { getChannelMarkers } from '../getChannelMarkers';
9
9
 
10
- const pagingToken = {
11
- previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
12
- next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
13
- };
14
-
15
- const pagingCriteria = { limit: 10 };
16
-
17
10
  const userId = 'user1';
18
11
 
19
12
  const expectedChannelMarkers = [
@@ -29,7 +22,6 @@ const resolvedGetValue = {
29
22
  data: {
30
23
  userEntityMarkers: expectedChannelMarkers,
31
24
  userMarkers: expectedUserMarkers,
32
- paging: pagingToken,
33
25
  },
34
26
  };
35
27
 
@@ -45,11 +37,9 @@ describe('getChannelMarkers', () => {
45
37
  test('should return fetched channel markers with correct paging', async () => {
46
38
  client.http.get = jest.fn().mockResolvedValueOnce(resolvedGetValue);
47
39
 
48
- await expect(getChannelMarkers(channelIds, pagingCriteria)).resolves.toEqual(
40
+ await expect(getChannelMarkers(channelIds)).resolves.toEqual(
49
41
  expect.objectContaining({
50
42
  data: expectedChannelMarkers,
51
- prevPage: { before: 55, limit: 10 },
52
- nextPage: { before: 55, limit: 10 },
53
43
  }),
54
44
  );
55
45
  });
@@ -12,13 +12,6 @@ import {
12
12
 
13
13
  import { getMessageMarkers } from '../getMessageMarkers';
14
14
 
15
- const pagingToken = {
16
- previous: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
17
- next: 'eyJiZWZvcmUiOjU1LCJsYXN0IjoxMH0=',
18
- };
19
-
20
- const pagingCriteria = { limit: 10 };
21
-
22
15
  const expectedMessageMarkers = [
23
16
  generateMessageMarker({ feedId: 'sub-ch1', contentId: 'message1' }),
24
17
  generateMessageMarker({ feedId: 'sub-ch1', contentId: 'message2' }),
@@ -38,7 +31,6 @@ const resolvedGetValue = {
38
31
  contentMarkers: expectedMessageMarkers,
39
32
  feedMarkers: expectedFeedMarkers,
40
33
  userMarkers: userMarkersResponse,
41
- paging: pagingToken,
42
34
  } as Amity.MessageMarkerPayload,
43
35
  };
44
36
 
@@ -54,11 +46,9 @@ describe('getMessageMarkers', () => {
54
46
  test('should return fetched message markers with correct paging', async () => {
55
47
  client.http.get = jest.fn().mockResolvedValueOnce(resolvedGetValue);
56
48
 
57
- await expect(getMessageMarkers(messageIds, pagingCriteria)).resolves.toEqual(
49
+ await expect(getMessageMarkers(messageIds)).resolves.toEqual(
58
50
  expect.objectContaining({
59
51
  data: expectedMessageMarkers,
60
- prevPage: { before: 55, limit: 10 },
61
- nextPage: { before: 55, limit: 10 },
62
52
  }),
63
53
  );
64
54
  });
@@ -1,8 +1,11 @@
1
+ import { get } from 'http';
1
2
  import { pullFromCache, pushToCache, queryCache } from '~/cache/api';
2
3
  import { ingestInCache } from '~/cache/api/ingestInCache';
3
4
  import { getActiveClient } from '~/client/api';
4
5
  import { createEventSubscriber } from '~/core/events';
6
+ import { getResolver } from '~/core/model';
5
7
  import { isObject } from '~/utils/object';
8
+ import { shallowClone } from '~/utils/shallowClone';
6
9
 
7
10
  /**
8
11
  * ```js
@@ -36,11 +39,7 @@ export const onMessageMarked = (
36
39
  * use feedId of the feedMarkers to check if it equal to subChannelId.
37
40
  */
38
41
  const currentMessageCollection = cacheCollection.filter(currentMessage => {
39
- const cacheKey = currentMessage.key;
40
- if (!isObject(cacheKey[2])) return false;
41
-
42
- const queryParams = cacheKey[2] as Amity.MessagesLiveCollection;
43
- return queryParams.subChannelId === feedMarkers[0].feedId;
42
+ return currentMessage.data?.query?.subChannelId === feedMarkers[0].feedId;
44
43
  });
45
44
 
46
45
  if (currentMessageCollection.length > 0 && contentMarkers?.length > 0) {
@@ -1,15 +1,22 @@
1
1
  import { pullFromCache } from '~/cache/api';
2
2
  import { getChannelMessagePreview } from './getChannelMessagePreview';
3
+ import { LinkedObject } from '~/utils/linkedObject';
3
4
 
4
- export const getChannelMessagePreviewWithUser = (channel: Amity.Channel) => {
5
+ export const getChannelMessagePreviewWithUser = (channel: Amity.InternalChannel): Amity.Channel => {
5
6
  const messagePreview = channel.messagePreviewId
6
7
  ? getChannelMessagePreview(channel.channelId)
7
8
  : null;
8
9
 
10
+ const internalUser = pullFromCache<Amity.InternalUser>([
11
+ 'user',
12
+ 'get',
13
+ messagePreview?.creatorId,
14
+ ])?.data;
15
+
9
16
  const messagePreviewWithUser = messagePreview
10
17
  ? {
11
18
  ...messagePreview,
12
- user: pullFromCache<Amity.InternalUser>(['user', 'get', messagePreview?.creatorId])?.data,
19
+ user: internalUser ? LinkedObject.user(internalUser) : undefined,
13
20
  }
14
21
  : null;
15
22
 
@@ -56,6 +56,7 @@ export class MessageLiveCollectionController extends LiveCollectionController<
56
56
  if (!collection) {
57
57
  pushToCache(this.cacheKey, {
58
58
  data: [],
59
+ query: this.query,
59
60
  });
60
61
  }
61
62
  }
@@ -44,13 +44,14 @@ export class MessageQueryStreamController extends QueryStreamController<
44
44
  }
45
45
 
46
46
  appendToQueryStream(
47
- response: Amity.MessagePayload & Amity.Pagination,
47
+ response: Amity.MessagePayload & Partial<Amity.Pagination>,
48
48
  direction: Amity.LiveCollectionPageDirection,
49
49
  refresh = false,
50
50
  ) {
51
51
  if (refresh) {
52
52
  pushToCache(this.cacheKey, {
53
53
  data: response.messages.map(getResolver('message')),
54
+ query: this.query,
54
55
  });
55
56
  } else {
56
57
  const collection = pullFromCache<Amity.MessageLiveCollectionCache>(this.cacheKey)?.data;
@@ -26,13 +26,20 @@ import { LinkedObject } from '~/utils/linkedObject';
26
26
  */
27
27
  export const queryPosts = async (
28
28
  query: Amity.QueryPosts,
29
- ): Promise<Amity.Cached<Amity.Paged<Amity.Post, Amity.PageRaw>>> => {
29
+ ): Promise<Amity.Cached<Amity.PageToken<Amity.Post>>> => {
30
30
  const client = getActiveClient();
31
31
  client.log('post/queryPosts', query);
32
32
 
33
- const { page = { limit: 10 }, includeDeleted, ...params } = query;
33
+ const { page, limit = 10, includeDeleted, ...params } = query;
34
34
  const { dataTypes, matchingOnlyParentPost } = params;
35
35
 
36
+ const options = (() => {
37
+ if (page) return { token: page };
38
+ if (limit) return { limit };
39
+
40
+ return undefined;
41
+ })();
42
+
36
43
  // API-FIX: parameters should be querystring. (1)
37
44
  // API-FIX: backend should answer Amity.Response (2)
38
45
  // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
@@ -48,9 +55,7 @@ export const queryPosts = async (
48
55
  * By default, BE queries only parent post
49
56
  */
50
57
  matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,
51
- options: {
52
- token: toToken(page, 'afterbeforeraw'),
53
- },
58
+ options,
54
59
  },
55
60
  });
56
61
 
@@ -66,12 +71,9 @@ export const queryPosts = async (
66
71
  if (client.cache) {
67
72
  ingestInCache(paperedPayload, { cachedAt });
68
73
 
69
- const cacheKey = ['post', 'query', { ...params, options: { ...page } } as Amity.Serializable];
74
+ const cacheKey = ['post', 'query', { ...params, options } as Amity.Serializable];
70
75
  pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
71
76
  }
72
77
 
73
- const nextPage = toPageRaw(paging.next);
74
- const prevPage = toPageRaw(paging.previous);
75
-
76
- return { data: posts.map(LinkedObject.post), cachedAt, prevPage, nextPage };
78
+ return { data: posts.map(LinkedObject.post), cachedAt, paging };
77
79
  };
@@ -150,21 +150,24 @@ export const getPosts = (
150
150
 
151
151
  const query = createQuery(queryPosts, {
152
152
  ...queryParams,
153
- page: (!initial ? collection?.params.page : undefined) ?? { limit },
153
+ limit: initial ? limit : undefined,
154
+ page: !initial ? collection?.params.page : undefined,
154
155
  });
155
156
 
156
157
  runQuery(
157
158
  query,
158
- ({ data: result, error, loading, nextPage: page }) => {
159
+ ({ data: result, error, loading, paging }) => {
159
160
  const data = {
160
161
  loading,
161
162
  error,
162
- params: { page },
163
+ params: { page: paging?.next },
163
164
  data: posts,
164
165
  };
165
166
 
166
167
  if (result) {
167
- data.data = [...new Set([...posts, ...result.map(getResolver('post'))])];
168
+ data.data = initial
169
+ ? result.map(getResolver('post'))
170
+ : [...new Set([...posts, ...result.map(getResolver('post'))])];
168
171
  }
169
172
 
170
173
  pushToCache(cacheKey, data);
@@ -21,12 +21,33 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
21
21
  export const queryRoles = async (query?: {
22
22
  displayName?: Amity.Role['displayName'];
23
23
  sortBy?: 'displayName' | 'firstCreated' | 'lastCreated';
24
+ /**
25
+ * @deprecated please use `queryToken` to query next pages or previous pages
26
+ * The first page result includes previous token and next token in paging field
27
+ * use this token as the `queryToken` to query next pages or previous pages
28
+ *
29
+ */
24
30
  page?: Amity.Page;
25
- }): Promise<Amity.Cached<Amity.Paged<Amity.Role>>> => {
31
+ limit?: number;
32
+ queryToken?: string;
33
+ }): Promise<Amity.Cached<Amity.Paged<Amity.Role>> & Amity.Pagination> => {
26
34
  const client = getActiveClient();
27
35
  client.log('role/queryRoles', query);
28
36
 
29
- const { page = { limit: 10 }, displayName, sortBy, ...params } = query ?? {};
37
+ const { page, limit = 10, queryToken, displayName, sortBy, ...params } = query ?? {};
38
+
39
+ const options = (() => {
40
+ if (queryToken) return { token: queryToken };
41
+
42
+ if (limit) return { limit };
43
+
44
+ if (page)
45
+ return {
46
+ token: toToken(page, 'skiplimit'),
47
+ };
48
+
49
+ return undefined;
50
+ })();
30
51
 
31
52
  // API-FIX: parameters should be querystring.
32
53
  const { data } = await client.http.get<Amity.RolePayload & Amity.Pagination>(`/api/v3/roles`, {
@@ -34,9 +55,7 @@ export const queryRoles = async (query?: {
34
55
  ...params,
35
56
  keyword: displayName,
36
57
  sortBy,
37
- options: {
38
- token: toToken(page, 'skiplimit'),
39
- },
58
+ options,
40
59
  },
41
60
  });
42
61
 
@@ -49,7 +68,7 @@ export const queryRoles = async (query?: {
49
68
  const nextPage = toPage(paging.next);
50
69
  const prevPage = toPage(paging.previous);
51
70
 
52
- return { data: roles, cachedAt, prevPage, nextPage };
71
+ return { data: roles, cachedAt, prevPage, nextPage, paging };
53
72
  };
54
73
 
55
74
  /**
@@ -0,0 +1,94 @@
1
+ import { uploadImage } from '~/fileRepository';
2
+ import { uuid } from '~/core/uuid';
3
+ import { fireEvent } from '~/core/events';
4
+ import { createOptimisticEvent } from '~/storyRepository/utils/createOptimisticEvent';
5
+ import { LinkedObject } from '~/utils/linkedObject';
6
+ import { createStory } from '../internalApi/createStory';
7
+
8
+ /**
9
+ * ```js
10
+ * import { StoryRepository } from '@amityco/ts-sdk-react-native'
11
+ * StoryRepository.createImageStory('community', 'communityId', formData, metadata, imageDisplayMode, items)
12
+ * ```
13
+ *
14
+ * Create a new image story
15
+ * @param targetType The type of the target
16
+ * @param targetId The id of the target
17
+ * @param formData The form data
18
+ * @param metadata The metadata
19
+ * @param items The story items
20
+ * @param imageDisplayMode The image display mode
21
+ * @returns The created story
22
+ */
23
+ export const createImageStory = async (
24
+ targetType: Amity.InternalStory['targetType'],
25
+ targetId: Amity.InternalStory['targetId'],
26
+ formData: FormData,
27
+ metadata: Amity.Metadata = {},
28
+ imageDisplayMode: Amity.ImageDisplayMode = 'fit',
29
+ items: Amity.StoryItem[] = [],
30
+ ): Promise<Amity.Cached<Amity.Story | undefined>> => {
31
+ if (!formData.getAll('files').length) {
32
+ throw new Error('The formData object must have a `files` key.');
33
+ }
34
+
35
+ let payload: Amity.StoryCreatePayload = {
36
+ data: {
37
+ text: '', // Still not in used now
38
+ fileId: undefined,
39
+ fileData: null,
40
+ imageDisplayMode,
41
+ },
42
+ syncState: Amity.SyncState.Syncing,
43
+ referenceId: uuid(),
44
+ dataType: Amity.StoryDataType.Image,
45
+ items,
46
+ targetType,
47
+ targetId,
48
+ metadata,
49
+ };
50
+
51
+ // Fire optimistic event
52
+ createOptimisticEvent({ payload, formData }, optimisticData => {
53
+ fireEvent('story.created', optimisticData);
54
+ });
55
+
56
+ try {
57
+ const { data } = await uploadImage(formData);
58
+
59
+ // @TODO: Need to implement retrying logic in a future
60
+ if (data.length === 0) throw new Error('Failed to upload image');
61
+ const { fileId } = data[0];
62
+
63
+ payload = {
64
+ ...payload,
65
+ data: {
66
+ ...payload.data,
67
+ fileId,
68
+ },
69
+ };
70
+
71
+ // Fire optimistic event - update fileId
72
+ createOptimisticEvent({ payload, formData }, optimisticData => {
73
+ fireEvent('story.created', optimisticData);
74
+ });
75
+
76
+ const result = await createStory(payload);
77
+ if (!result.data) return result;
78
+
79
+ return {
80
+ ...result,
81
+ data: LinkedObject.story(result.data),
82
+ };
83
+ } catch (error) {
84
+ // Fire optimistic event - failed to upload image
85
+ createOptimisticEvent(
86
+ { payload: { ...payload, syncState: Amity.SyncState.Error }, formData },
87
+ optimisticData => {
88
+ fireEvent('story.error', optimisticData);
89
+ },
90
+ );
91
+
92
+ throw error;
93
+ }
94
+ };
@@ -0,0 +1,92 @@
1
+ import { uploadVideo } from '~/fileRepository';
2
+ import { uuid } from '~/core/uuid';
3
+ import { fireEvent } from '~/core/events';
4
+ import { createOptimisticEvent } from '~/storyRepository/utils/createOptimisticEvent';
5
+ import { ContentFeedType } from '~/@types';
6
+ import { LinkedObject } from '~/utils/linkedObject';
7
+ import { createStory } from '../internalApi/createStory';
8
+
9
+ /**
10
+ * ```js
11
+ * import { StoryRepository } from '@amityco/ts-sdk-react-native'
12
+ * StoryRepository.createVideoStory('community', 'communityId', formData, metadata, items)
13
+ * ```
14
+ *
15
+ * Create a new video story
16
+ * @param targetType
17
+ * @param targetId
18
+ * @param formData
19
+ * @param metadata
20
+ * @param items
21
+ */
22
+
23
+ export const createVideoStory = async (
24
+ targetType: Amity.InternalStory['targetType'],
25
+ targetId: Amity.InternalStory['targetId'],
26
+ formData: FormData,
27
+ metadata: Amity.Metadata = {},
28
+ items: Amity.StoryItem[] = [],
29
+ ): Promise<Amity.Cached<Amity.Story | undefined>> => {
30
+ if (!formData.getAll('files').length)
31
+ throw new Error('The formData object must have a `files` key.');
32
+
33
+ let payload: Amity.StoryCreatePayload = {
34
+ data: {
35
+ text: '', // Still not in used now
36
+ fileId: undefined,
37
+ fileData: null,
38
+ },
39
+ syncState: Amity.SyncState.Syncing,
40
+ referenceId: uuid(),
41
+ dataType: Amity.StoryDataType.Video,
42
+ items,
43
+ targetType,
44
+ targetId,
45
+ metadata,
46
+ };
47
+
48
+ // Fire optimistic event
49
+ createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
50
+ fireEvent('story.created', optimisticData);
51
+ });
52
+
53
+ try {
54
+ const { data } = await uploadVideo(formData, ContentFeedType.STORY);
55
+
56
+ // @TODO: Need to implement retrying logic in a future
57
+ if (data.length === 0) throw new Error('Failed to upload video');
58
+ const { fileId } = data[0];
59
+
60
+ payload = {
61
+ ...payload,
62
+ data: {
63
+ ...payload.data,
64
+ fileId,
65
+ videoFileId: { original: fileId },
66
+ },
67
+ };
68
+
69
+ // Fire optimistic event - update fileId
70
+ createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
71
+ fireEvent('story.created', optimisticData);
72
+ });
73
+
74
+ const result = await createStory(payload);
75
+ if (!result.data) return result;
76
+
77
+ return {
78
+ ...result,
79
+ data: LinkedObject.story(result.data),
80
+ };
81
+ } catch (error) {
82
+ // Fire optimistic upload failed
83
+ createOptimisticEvent(
84
+ { payload: { ...payload, syncState: Amity.SyncState.Error }, formData, isVideo: true },
85
+ optimisticData => {
86
+ fireEvent('story.error', optimisticData);
87
+ },
88
+ );
89
+
90
+ throw error;
91
+ }
92
+ };
@@ -0,0 +1,6 @@
1
+ import { deleteStory } from '~/storyRepository/internalApi/deleteStory';
2
+
3
+ export const hardDeleteStory = async (storyId: Amity.Story['storyId']): Promise<boolean> => {
4
+ const result = await deleteStory(storyId, true);
5
+ return result;
6
+ };
@@ -0,0 +1,4 @@
1
+ export * from './createImageStory';
2
+ export * from './createVideoStory';
3
+ export * from './hardDeleteStory';
4
+ export * from './softDeleteStory';
@@ -0,0 +1,6 @@
1
+ import { deleteStory } from '~/storyRepository/internalApi/deleteStory';
2
+
3
+ export const softDeleteStory = async (storyId: Amity.Story['storyId']): Promise<boolean> => {
4
+ const result = await deleteStory(storyId);
5
+ return result;
6
+ };
@@ -0,0 +1,14 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+
5
+ export const onStoryCreated = (callback: Amity.Listener<Amity.InternalStory[]>) => {
6
+ const client = getActiveClient();
7
+
8
+ const filter = async (payload: Amity.StoryPayload) => {
9
+ ingestInCache(payload);
10
+ callback(payload.stories);
11
+ };
12
+
13
+ return createEventSubscriber(client, 'onStoryCreated', 'story.created', filter);
14
+ };
@@ -0,0 +1,14 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+
5
+ export const onStoryDeleted = (callback: Amity.Listener<Amity.InternalStory[]>) => {
6
+ const client = getActiveClient();
7
+
8
+ const filter = async (payload: Amity.StoryPayload) => {
9
+ ingestInCache(payload);
10
+ callback(payload.stories);
11
+ };
12
+
13
+ return createEventSubscriber(client, 'onStoryDeleted', 'story.deleted', filter);
14
+ };
@@ -0,0 +1,14 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+
5
+ export const onStoryError = (callback: Amity.Listener<Amity.InternalStory[]>) => {
6
+ const client = getActiveClient();
7
+
8
+ const filter = async (payload: Amity.StoryPayload) => {
9
+ ingestInCache(payload);
10
+ callback(payload.stories);
11
+ };
12
+
13
+ return createEventSubscriber(client, 'onStoryError', 'story.error', filter);
14
+ };
@@ -0,0 +1,2 @@
1
+ export * from './api';
2
+ export * from './observers';
@@ -0,0 +1,26 @@
1
+ import { getActiveClient } from '~/client';
2
+ import { ingestInCache } from '~/cache/api/ingestInCache';
3
+ import { convertStoryRawToInternal } from '~/storyRepository/utils/convertRawToStory';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ export const createStory = async (
7
+ payload: Amity.StoryCreatePayload,
8
+ ): Promise<Amity.Cached<Amity.InternalStory | undefined>> => {
9
+ const client = getActiveClient();
10
+ client.log('post/createStory', payload);
11
+
12
+ const response = await client.http.post<Amity.StoryPayload>('/api/v4/stories', payload);
13
+
14
+ const convertedResponse = convertStoryRawToInternal(response.data);
15
+
16
+ if (client.cache) ingestInCache(convertedResponse);
17
+
18
+ fireEvent('story.created', convertedResponse);
19
+
20
+ const cachedAt = client.cache && Date.now();
21
+
22
+ return {
23
+ data: convertedResponse.stories.length > 0 ? convertedResponse.stories[0] : undefined,
24
+ cachedAt,
25
+ };
26
+ };
@@ -0,0 +1,35 @@
1
+ import { getActiveClient } from '~/client';
2
+ import { fireEvent } from '~/core/events';
3
+ import { getStoryCache } from '../utils/getStoryCache';
4
+
5
+ export const deleteStory = async (
6
+ storyId: Amity.Story['storyId'],
7
+ permanent = false,
8
+ ): Promise<boolean> => {
9
+ const client = getActiveClient();
10
+ client.log('story/deleteStory', storyId);
11
+
12
+ let cached;
13
+
14
+ if (client.cache) {
15
+ cached = getStoryCache(storyId);
16
+ if (cached?.data) {
17
+ const { data } = cached;
18
+ fireEvent('story.deleted', {
19
+ categories: [],
20
+ comments: [],
21
+ communities: [],
22
+ communityUsers: [],
23
+ files: [],
24
+ users: [],
25
+ stories: [{ ...data, isDeleted: true }],
26
+ });
27
+ }
28
+ }
29
+
30
+ const response = await client.http.delete(`/api/v4/stories/${storyId}`, {
31
+ params: { permanent },
32
+ });
33
+
34
+ return response.data.success;
35
+ };
@@ -0,0 +1,36 @@
1
+ import { getActiveClient } from '~/client';
2
+ import { ingestInCache } from '~/cache/api/ingestInCache';
3
+ import { convertStoryRawToInternal } from '~/storyRepository/utils/convertRawToStory';
4
+
5
+ export const getActiveStoriesByTarget = async (
6
+ targetType: Amity.InternalStory['targetType'],
7
+ targetId: Amity.InternalStory['targetId'],
8
+ option?: Amity.StorySortOption,
9
+ ): Promise<Amity.Cached<Amity.PageToken<Amity.InternalStory>>> => {
10
+ const client = getActiveClient();
11
+ client.log('story/getActiveStoriesByTarget');
12
+ const cachedAt = client.cache && Date.now();
13
+
14
+ const response = await client.http.get<Amity.StoryPayload>('/api/v4/stories', {
15
+ params: {
16
+ targetType,
17
+ targetId,
18
+ options: {
19
+ sortBy: option?.sortBy || 'createdAt',
20
+ orderBy: option?.orderBy || 'desc',
21
+ },
22
+ },
23
+ });
24
+
25
+ const convertedData: Amity.StoryPayload = convertStoryRawToInternal(response.data);
26
+
27
+ if (client.cache) {
28
+ ingestInCache(convertedData);
29
+ }
30
+
31
+ return {
32
+ data: convertedData.stories,
33
+ cachedAt,
34
+ paging: { next: undefined, previous: undefined }, // Disable pagination for this API
35
+ };
36
+ };