@amityco/ts-sdk-react-native 6.17.0 → 6.17.3

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 (241) hide show
  1. package/dist/@types/core/events.d.ts +15 -4
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/payload.d.ts +1 -0
  4. package/dist/@types/core/payload.d.ts.map +1 -1
  5. package/dist/@types/core/permissions.d.ts +5 -0
  6. package/dist/@types/core/permissions.d.ts.map +1 -1
  7. package/dist/@types/domains/client.d.ts +1 -0
  8. package/dist/@types/domains/client.d.ts.map +1 -1
  9. package/dist/@types/domains/story.d.ts +7 -1
  10. package/dist/@types/domains/story.d.ts.map +1 -1
  11. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -0
  12. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberPaginationController.d.ts.map +1 -0
  13. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberQueryStreamController.d.ts.map +1 -0
  14. package/dist/channelRepository/channelMembership/observers/getMembers/getMembers.d.ts.map +1 -0
  15. package/dist/channelRepository/channelMembership/observers/getMembers/index.d.ts +2 -0
  16. package/dist/channelRepository/channelMembership/observers/getMembers/index.d.ts.map +1 -0
  17. package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
  18. package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -0
  19. package/dist/channelRepository/observers/getChannels/ChannelPaginationController.d.ts.map +1 -0
  20. package/dist/channelRepository/observers/getChannels/ChannelPagnationNoPageController.d.ts.map +1 -0
  21. package/dist/channelRepository/observers/getChannels/ChannelQueryStreamController.d.ts.map +1 -0
  22. package/dist/channelRepository/observers/getChannels/getChannels.d.ts.map +1 -0
  23. package/dist/channelRepository/observers/getChannels/index.d.ts +2 -0
  24. package/dist/channelRepository/observers/getChannels/index.d.ts.map +1 -0
  25. package/dist/client/api/createClient.d.ts.map +1 -1
  26. package/dist/client/api/login.d.ts.map +1 -1
  27. package/dist/client/api/logout.d.ts.map +1 -1
  28. package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -1
  29. package/dist/client/observers/getUserUnread.d.ts.map +1 -1
  30. package/dist/client/utils/hasPermission/checkChannelPermission.d.ts +2 -0
  31. package/dist/client/utils/hasPermission/checkChannelPermission.d.ts.map +1 -0
  32. package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts +2 -0
  33. package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts.map +1 -0
  34. package/dist/client/utils/hasPermission/checkUserPermission.d.ts +2 -0
  35. package/dist/client/utils/hasPermission/checkUserPermission.d.ts.map +1 -0
  36. package/dist/client/utils/hasPermission/hasPermission.d.ts +6 -0
  37. package/dist/client/utils/hasPermission/hasPermission.d.ts.map +1 -0
  38. package/dist/client/utils/hasPermission/index.d.ts +2 -0
  39. package/dist/client/utils/hasPermission/index.d.ts.map +1 -0
  40. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
  41. package/dist/client/utils/setClientToken.d.ts +1 -1
  42. package/dist/client/utils/setClientToken.d.ts.map +1 -1
  43. package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts +1 -1
  44. package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts.map +1 -1
  45. package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts +1 -1
  46. package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts.map +1 -1
  47. package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts +1 -1
  48. package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts.map +1 -1
  49. package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts +1 -1
  50. package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts.map +1 -1
  51. package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts +1 -1
  52. package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts.map +1 -1
  53. package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts +1 -1
  54. package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts.map +1 -1
  55. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts +1 -1
  56. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts.map +1 -1
  57. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts +1 -1
  58. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts.map +1 -1
  59. package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts +1 -1
  60. package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts.map +1 -1
  61. package/dist/communityRepository/communityMembership/events/utils.d.ts +1 -1
  62. package/dist/communityRepository/communityMembership/events/utils.d.ts.map +1 -1
  63. package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
  64. package/dist/core/events.d.ts +3 -3
  65. package/dist/core/events.d.ts.map +1 -1
  66. package/dist/core/liveCollection/LiveCollectionController.d.ts +1 -1
  67. package/dist/core/liveCollection/LiveCollectionController.d.ts.map +1 -1
  68. package/dist/core/liveCollection/QueryStreamController.d.ts +1 -1
  69. package/dist/core/liveCollection/QueryStreamController.d.ts.map +1 -1
  70. package/dist/core/subscription.d.ts +2 -0
  71. package/dist/core/subscription.d.ts.map +1 -1
  72. package/dist/index.cjs.js +734 -114
  73. package/dist/index.esm.js +732 -115
  74. package/dist/index.umd.js +4 -4
  75. package/dist/marker/api/getUserMarker.d.ts +1 -1
  76. package/dist/marker/api/getUserMarker.d.ts.map +1 -1
  77. package/dist/marker/events/onChannelMarkerFetched.d.ts.map +1 -1
  78. package/dist/marker/events/onUserMarkerFetched.d.ts +2 -1
  79. package/dist/marker/events/onUserMarkerFetched.d.ts.map +1 -1
  80. package/dist/messageRepository/events/onMessageCreated.d.ts +2 -1
  81. package/dist/messageRepository/events/onMessageCreated.d.ts.map +1 -1
  82. package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -0
  83. package/dist/messageRepository/observers/getMessages/MessagePaginationController.d.ts.map +1 -0
  84. package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -0
  85. package/dist/messageRepository/observers/getMessages/getMessages.d.ts.map +1 -0
  86. package/dist/messageRepository/observers/getMessages/index.d.ts +2 -0
  87. package/dist/messageRepository/observers/getMessages/index.d.ts.map +1 -0
  88. package/dist/messageRepository/observers/observeMessages.d.ts.map +1 -1
  89. package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
  90. package/dist/storyRepository/constants.d.ts +1 -0
  91. package/dist/storyRepository/constants.d.ts.map +1 -1
  92. package/dist/storyRepository/events/onStoryCreated.d.ts +2 -1
  93. package/dist/storyRepository/events/onStoryCreated.d.ts.map +1 -1
  94. package/dist/storyRepository/events/onStoryDeleted.d.ts +2 -1
  95. package/dist/storyRepository/events/onStoryDeleted.d.ts.map +1 -1
  96. package/dist/storyRepository/events/onStoryReactionAdded.d.ts +3 -0
  97. package/dist/storyRepository/events/onStoryReactionAdded.d.ts.map +1 -0
  98. package/dist/storyRepository/events/onStoryReactionRemoved.d.ts +3 -0
  99. package/dist/storyRepository/events/onStoryReactionRemoved.d.ts.map +1 -0
  100. package/dist/storyRepository/events/onStoryUpdated.d.ts +2 -1
  101. package/dist/storyRepository/events/onStoryUpdated.d.ts.map +1 -1
  102. package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts +20 -0
  103. package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -1
  104. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts +14 -0
  105. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts.map +1 -0
  106. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts +5 -0
  107. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts.map +1 -0
  108. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts +16 -0
  109. package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts.map +1 -0
  110. package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts +5 -0
  111. package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts.map +1 -0
  112. package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts +2 -0
  113. package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts.map +1 -0
  114. package/dist/storyRepository/observers/getStoryByStoryId.d.ts.map +1 -1
  115. package/dist/storyRepository/observers/index.d.ts +1 -0
  116. package/dist/storyRepository/observers/index.d.ts.map +1 -1
  117. package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
  118. package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.d.ts.map +1 -1
  119. package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.d.ts.map +1 -1
  120. package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelQueryStreamController.d.ts.map +1 -1
  121. package/dist/subChannelRepository/observers/getSubChannels/getSubChannels.d.ts.map +1 -0
  122. package/dist/subChannelRepository/observers/getSubChannels/index.d.ts +2 -0
  123. package/dist/subChannelRepository/observers/getSubChannels/index.d.ts.map +1 -0
  124. package/dist/utils/index.d.ts +1 -0
  125. package/dist/utils/index.d.ts.map +1 -1
  126. package/package.json +1 -1
  127. package/src/@types/core/events.ts +16 -4
  128. package/src/@types/core/payload.ts +1 -0
  129. package/src/@types/core/permissions.ts +6 -0
  130. package/src/@types/domains/client.ts +2 -0
  131. package/src/@types/domains/story.ts +7 -0
  132. package/src/analytic/api/queryReachUser.ts +1 -1
  133. package/src/analytic/service/analytic/AnalyticsEventCapturer.ts +1 -1
  134. package/src/channelRepository/channelMembership/observers/{getMembers.ts → getMembers/getMembers.ts} +1 -1
  135. package/src/channelRepository/channelMembership/observers/getMembers/index.ts +1 -0
  136. package/src/channelRepository/observers/getChannel.ts +30 -2
  137. package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelLiveCollectionController.ts +65 -3
  138. package/src/channelRepository/observers/{getChannels.ts → getChannels/getChannels.ts} +1 -1
  139. package/src/channelRepository/observers/getChannels/index.ts +1 -0
  140. package/src/client/api/createClient.ts +3 -1
  141. package/src/client/api/login.ts +29 -6
  142. package/src/client/api/logout.ts +5 -0
  143. package/src/client/observers/getTotalUnreadCount.ts +14 -4
  144. package/src/client/observers/getUserUnread.ts +95 -11
  145. package/src/client/utils/hasPermission/checkChannelPermission.ts +22 -0
  146. package/src/client/utils/hasPermission/checkCommunityPermission.ts +22 -0
  147. package/src/client/utils/hasPermission/checkUserPermission.ts +12 -0
  148. package/src/client/utils/hasPermission/hasPermission.ts +18 -0
  149. package/src/client/utils/hasPermission/index.ts +1 -0
  150. package/src/client/utils/markerSyncEngine.ts +46 -32
  151. package/src/client/utils/setClientToken.ts +1 -1
  152. package/src/communityRepository/communityMembership/events/onCommunityJoined.ts +1 -1
  153. package/src/communityRepository/communityMembership/events/onCommunityLeft.ts +1 -1
  154. package/src/communityRepository/communityMembership/events/onCommunityUserAdded.ts +1 -1
  155. package/src/communityRepository/communityMembership/events/onCommunityUserBanned.ts +1 -1
  156. package/src/communityRepository/communityMembership/events/onCommunityUserChanged.ts +1 -1
  157. package/src/communityRepository/communityMembership/events/onCommunityUserRemoved.ts +1 -1
  158. package/src/communityRepository/communityMembership/events/onCommunityUserRoleAdded.ts +1 -1
  159. package/src/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.ts +1 -1
  160. package/src/communityRepository/communityMembership/events/onCommunityUserUnbanned.ts +1 -1
  161. package/src/communityRepository/communityMembership/events/utils.ts +19 -13
  162. package/src/communityRepository/communityMembership/observers/getMembers.ts +18 -9
  163. package/src/core/liveCollection/LiveCollectionController.ts +2 -2
  164. package/src/core/liveCollection/QueryStreamController.ts +1 -1
  165. package/src/core/subscription.ts +19 -0
  166. package/src/marker/api/getUserMarker.ts +15 -4
  167. package/src/marker/events/onChannelMarkerFetched.ts +3 -1
  168. package/src/marker/events/onUserMarkerFetched.ts +17 -0
  169. package/src/messageRepository/api/tests/createMessage.test.ts +4 -4
  170. package/src/messageRepository/events/onMessageCreated.ts +20 -8
  171. package/src/messageRepository/events/tests/events.test.ts +2 -2
  172. package/src/messageRepository/observers/{liveCollection → getMessages}/MessageLiveCollectionController.ts +2 -2
  173. package/src/messageRepository/observers/{getMessages.ts → getMessages/getMessages.ts} +4 -26
  174. package/src/messageRepository/observers/getMessages/index.ts +1 -0
  175. package/src/messageRepository/observers/observeMessages.ts +8 -2
  176. package/src/messageRepository/utils/prepareMessagePayload.ts +14 -4
  177. package/src/storyRepository/api/createImageStory.ts +3 -3
  178. package/src/storyRepository/api/createVideoStory.ts +3 -3
  179. package/src/storyRepository/constants.ts +1 -0
  180. package/src/storyRepository/events/onStoryCreated.ts +25 -1
  181. package/src/storyRepository/events/onStoryDeleted.ts +22 -1
  182. package/src/storyRepository/events/onStoryError.ts +1 -1
  183. package/src/storyRepository/events/onStoryLocalDataUpdated.ts +1 -1
  184. package/src/storyRepository/events/onStoryReactionAdded.ts +39 -0
  185. package/src/storyRepository/events/onStoryReactionRemoved.ts +39 -0
  186. package/src/storyRepository/events/onStoryUpdated.ts +25 -1
  187. package/src/storyRepository/internalApi/createStory.ts +1 -1
  188. package/src/storyRepository/observers/getActiveStoriesByTarget.ts +40 -3
  189. package/src/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.ts +113 -0
  190. package/src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts +18 -0
  191. package/src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts +97 -0
  192. package/src/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.ts +32 -0
  193. package/src/storyRepository/observers/getStoriesByTargetIds/index.ts +1 -0
  194. package/src/storyRepository/observers/getStoryByStoryId.ts +22 -2
  195. package/src/storyRepository/observers/index.ts +1 -0
  196. package/src/subChannelRepository/observers/getSubChannel.ts +35 -2
  197. package/src/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.ts +53 -2
  198. package/src/subChannelRepository/observers/{getSubChannels.ts → getSubChannels/getSubChannels.ts} +1 -1
  199. package/src/subChannelRepository/observers/getSubChannels/index.ts +1 -0
  200. package/src/utils/index.ts +4 -0
  201. package/dist/channelRepository/channelMembership/observers/getMembers.d.ts.map +0 -1
  202. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberLiveCollectionController.d.ts.map +0 -1
  203. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberPaginationController.d.ts.map +0 -1
  204. package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberQueryStreamController.d.ts.map +0 -1
  205. package/dist/channelRepository/observers/getChannels.d.ts.map +0 -1
  206. package/dist/channelRepository/observers/liveCollection/ChannelLiveCollectionController.d.ts.map +0 -1
  207. package/dist/channelRepository/observers/liveCollection/ChannelPaginationController.d.ts.map +0 -1
  208. package/dist/channelRepository/observers/liveCollection/ChannelPagnationNoPageController.d.ts.map +0 -1
  209. package/dist/channelRepository/observers/liveCollection/ChannelQueryStreamController.d.ts.map +0 -1
  210. package/dist/messageRepository/observers/getMessages.d.ts.map +0 -1
  211. package/dist/messageRepository/observers/liveCollection/MessageLiveCollectionController.d.ts.map +0 -1
  212. package/dist/messageRepository/observers/liveCollection/MessagePaginationController.d.ts.map +0 -1
  213. package/dist/messageRepository/observers/liveCollection/MessageQueryStreamController.d.ts.map +0 -1
  214. package/dist/subChannelRepository/observers/getSubChannels.d.ts.map +0 -1
  215. /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberLiveCollectionController.d.ts +0 -0
  216. /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberPaginationController.d.ts +0 -0
  217. /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberQueryStreamController.d.ts +0 -0
  218. /package/dist/channelRepository/channelMembership/observers/{getMembers.d.ts → getMembers/getMembers.d.ts} +0 -0
  219. /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelLiveCollectionController.d.ts +0 -0
  220. /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelPaginationController.d.ts +0 -0
  221. /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelPagnationNoPageController.d.ts +0 -0
  222. /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelQueryStreamController.d.ts +0 -0
  223. /package/dist/channelRepository/observers/{getChannels.d.ts → getChannels/getChannels.d.ts} +0 -0
  224. /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessageLiveCollectionController.d.ts +0 -0
  225. /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessagePaginationController.d.ts +0 -0
  226. /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessageQueryStreamController.d.ts +0 -0
  227. /package/dist/messageRepository/observers/{getMessages.d.ts → getMessages/getMessages.d.ts} +0 -0
  228. /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.d.ts +0 -0
  229. /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.d.ts +0 -0
  230. /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelQueryStreamController.d.ts +0 -0
  231. /package/dist/subChannelRepository/observers/{getSubChannels.d.ts → getSubChannels/getSubChannels.d.ts} +0 -0
  232. /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberLiveCollectionController.ts +0 -0
  233. /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberPaginationController.ts +0 -0
  234. /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberQueryStreamController.ts +0 -0
  235. /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelPaginationController.ts +0 -0
  236. /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelPagnationNoPageController.ts +0 -0
  237. /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelQueryStreamController.ts +0 -0
  238. /package/src/messageRepository/observers/{liveCollection → getMessages}/MessagePaginationController.ts +0 -0
  239. /package/src/messageRepository/observers/{liveCollection → getMessages}/MessageQueryStreamController.ts +0 -0
  240. /package/src/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.ts +0 -0
  241. /package/src/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelQueryStreamController.ts +0 -0
package/dist/index.cjs.js CHANGED
@@ -118,8 +118,8 @@ const PostContentType = Object.freeze({
118
118
 
119
119
  function getVersion() {
120
120
  try {
121
- // the string ''v6.17.0-cjs'' should be replaced by actual value by @rollup/plugin-replace
122
- return 'v6.17.0-cjs';
121
+ // the string ''v6.17.3-cjs'' should be replaced by actual value by @rollup/plugin-replace
122
+ return 'v6.17.3-cjs';
123
123
  }
124
124
  catch (error) {
125
125
  return '__dev__';
@@ -1454,6 +1454,16 @@ const getPostTopic = ({ path }, level = exports.SubscriptionLevels.POST) => {
1454
1454
  const getCommentTopic = ({ path }) => {
1455
1455
  return path;
1456
1456
  };
1457
+ // Subscribe on comment and story update on a single story
1458
+ const getStoryTopic = ({ targetId, targetType, storyId, }) => {
1459
+ const user = getActiveUser();
1460
+ return `${getNetworkId(user)}/social/${targetType}/${targetId}/story/${storyId}/#`;
1461
+ };
1462
+ // Subscribe on comment and story update on stories under community
1463
+ const getCommunityStoriesTopic = ({ targetId, targetType, }) => {
1464
+ const user = getActiveUser();
1465
+ return `${getNetworkId(user)}/social/${targetType}/${targetId}/story/#`;
1466
+ };
1457
1467
  const getMyFollowersTopic = () => {
1458
1468
  const user = getActiveUser();
1459
1469
  return `${getNetworkId(user)}/membership/${user._id}/+/+`;
@@ -4989,7 +4999,7 @@ class AnalyticsEventCapturer {
4989
4999
  return;
4990
5000
  this._throttleStoryTimer = setTimeout(() => {
4991
5001
  clearTimeout(this._throttleStoryTimer);
4992
- fireEvent('local.story.updated', { referenceIds: this._bufferNewSeenStoryReferenceIds });
5002
+ fireEvent('local.story.reload', { referenceIds: this._bufferNewSeenStoryReferenceIds });
4993
5003
  this._bufferNewSeenStoryReferenceIds = [];
4994
5004
  }, 300);
4995
5005
  }
@@ -5854,7 +5864,14 @@ const getUserMarker = async () => {
5854
5864
  if (client.cache)
5855
5865
  ingestInCache({ userMarkers }, { cachedAt });
5856
5866
  fireEvent('local.userMarker.fetched', { userMarkers });
5857
- return { data: userMarkers[0], cachedAt };
5867
+ const latestUserMarker = userMarkers.reduce((maxUserMarker, userMarker) => {
5868
+ if (maxUserMarker == null ||
5869
+ new Date(maxUserMarker.lastSyncAt).getTime() < new Date(userMarker.lastSyncAt).getTime()) {
5870
+ return userMarker;
5871
+ }
5872
+ return maxUserMarker;
5873
+ }, null);
5874
+ return { data: latestUserMarker, cachedAt };
5858
5875
  };
5859
5876
 
5860
5877
  /** @hidden */
@@ -6029,17 +6046,25 @@ const preUpdateMessageCache = (rawPayload) => {
6029
6046
  messages: rawPayload.messages.map(message => convertFromRaw(message, rawPayload.reactions)),
6030
6047
  });
6031
6048
  };
6049
+ const DEBOUNCE_TIME = 2000;
6050
+ const currentDebounceMap = {};
6032
6051
  const prepareMessagePayload = async (payload, event) => {
6033
6052
  const markerIds = payload.messages.map(({ messageId }) => messageId);
6034
6053
  if (markerIds.length > 0) {
6035
6054
  // since the get markers method requires a channel cache to function with the reducer.
6036
6055
  preUpdateMessageCache(payload);
6037
- try {
6038
- await getMessageMarkers(markerIds);
6039
- }
6040
- catch (e) {
6041
- // empty block (from the spec, allow marker fetch to fail without having to do anything)
6056
+ const markerIdsKey = markerIds.join('');
6057
+ if (currentDebounceMap[markerIdsKey]) {
6058
+ clearTimeout(currentDebounceMap[markerIdsKey]);
6042
6059
  }
6060
+ currentDebounceMap[markerIdsKey] = setTimeout(() => {
6061
+ try {
6062
+ getMessageMarkers(markerIds);
6063
+ }
6064
+ catch (_error) {
6065
+ // do nothing
6066
+ }
6067
+ }, DEBOUNCE_TIME);
6043
6068
  }
6044
6069
  const { messageFeeds } = payload, restPayload = __rest(payload, ["messageFeeds"]);
6045
6070
  // upsert messageFeeds to subchannel cache because messageFeeds from event payload not include messagePreviewId
@@ -6660,43 +6685,92 @@ const initializeMessagePreviewSetting = async () => {
6660
6685
 
6661
6686
  /**
6662
6687
  * ```js
6663
- * import { getFeedSettings } from '@amityco/ts-sdk-react-native'
6664
- * const feedSettings = await getFeedSettings()
6665
- * const postFeedSetting = feedSettings.post
6688
+ * import { getSocialSettings } from '@amityco/ts-sdk-react-native'
6689
+ * const socialSettings = await getSocialSettings()
6666
6690
  * ```
6667
6691
  *
6668
- * Fetches a {@link Amity.FeedSettings} object
6692
+ * Fetches a {@link Amity.SocialSettings} object
6669
6693
  *
6670
- * @returns A Promise of {@link Amity.FeedSettings} object
6694
+ * @returns A Promise of {@link Amity.SocialSettings} object
6671
6695
  *
6672
6696
  * @category Client API
6673
6697
  * @async
6674
6698
  */
6675
- const getFeedSettings = async () => {
6699
+ const getSocialSettings = async () => {
6676
6700
  const client = getActiveClient();
6677
- const { data } = await client.http.get(`/api/v3/network-settings/feed-setting`);
6678
- return Object.fromEntries(data.feedSettings.map(({ feedType, contentSettings }) => {
6679
- return [feedType, contentSettings];
6680
- }));
6701
+ const { data } = await client.http.get(`/api/v3/network-settings/social`);
6702
+ return data.socialNetworkSetting;
6703
+ };
6704
+
6705
+ const checkUserPermission = (userId, permission) => {
6706
+ var _a;
6707
+ const user = (_a = pullFromCache(['users', 'get', userId])) === null || _a === void 0 ? void 0 : _a.data;
6708
+ if (!user)
6709
+ return false;
6710
+ return user.permissions.some(x => x === permission);
6711
+ };
6712
+
6713
+ const checkCommunityPermission = (userId, permission, communityId) => {
6714
+ var _a;
6715
+ if (!userId)
6716
+ return false;
6717
+ const member = (_a = pullFromCache([
6718
+ 'communityUsers',
6719
+ 'get',
6720
+ `${communityId}#${userId}`,
6721
+ ])) === null || _a === void 0 ? void 0 : _a.data;
6722
+ if (!member)
6723
+ return false;
6724
+ if (member.permissions.some(x => x === permission))
6725
+ return true;
6726
+ return checkUserPermission(userId, permission);
6727
+ };
6728
+
6729
+ const checkChannelPermission = (userId, permission, channelId) => {
6730
+ var _a;
6731
+ if (!userId)
6732
+ return false;
6733
+ const member = (_a = pullFromCache([
6734
+ 'channelUsers',
6735
+ 'get',
6736
+ `${channelId}#${userId}`,
6737
+ ])) === null || _a === void 0 ? void 0 : _a.data;
6738
+ if (!member)
6739
+ return false;
6740
+ if (member.permissions.some(x => x === permission))
6741
+ return true;
6742
+ return checkUserPermission(userId, permission);
6743
+ };
6744
+
6745
+ const hasPermission$1 = (permission) => {
6746
+ const { userId } = getActiveClient();
6747
+ return {
6748
+ currentUser: () => checkUserPermission(userId, permission),
6749
+ community: (communityId) => checkCommunityPermission(userId, permission, communityId),
6750
+ channel: (channelId) => checkChannelPermission(userId, permission, channelId),
6751
+ };
6681
6752
  };
6682
6753
 
6683
6754
  /**
6684
6755
  * ```js
6685
- * import { getSocialSettings } from '@amityco/ts-sdk-react-native'
6686
- * const socialSettings = await getSocialSettings()
6756
+ * import { getFeedSettings } from '@amityco/ts-sdk-react-native'
6757
+ * const feedSettings = await getFeedSettings()
6758
+ * const postFeedSetting = feedSettings.post
6687
6759
  * ```
6688
6760
  *
6689
- * Fetches a {@link Amity.SocialSettings} object
6761
+ * Fetches a {@link Amity.FeedSettings} object
6690
6762
  *
6691
- * @returns A Promise of {@link Amity.SocialSettings} object
6763
+ * @returns A Promise of {@link Amity.FeedSettings} object
6692
6764
  *
6693
6765
  * @category Client API
6694
6766
  * @async
6695
6767
  */
6696
- const getSocialSettings = async () => {
6768
+ const getFeedSettings = async () => {
6697
6769
  const client = getActiveClient();
6698
- const { data } = await client.http.get(`/api/v3/network-settings/social`);
6699
- return data.socialNetworkSetting;
6770
+ const { data } = await client.http.get(`/api/v3/network-settings/feed-setting`);
6771
+ return Object.fromEntries(data.feedSettings.map(({ feedType, contentSettings }) => {
6772
+ return [feedType, contentSettings];
6773
+ }));
6700
6774
  };
6701
6775
 
6702
6776
  /*
@@ -6958,6 +7032,11 @@ const logout = async () => {
6958
7032
  client.userId = undefined;
6959
7033
  client.token = undefined;
6960
7034
  client.http.defaults.headers.common.Authorization = '';
7035
+ client.http.defaults.metadata = {
7036
+ tokenExpiry: '',
7037
+ isGlobalBanned: false,
7038
+ isUserDeleted: false,
7039
+ };
6961
7040
  client.ws.io.opts.query = { token: '' };
6962
7041
  /*
6963
7042
  * Cache should be usable if tokenExpired
@@ -7142,7 +7221,7 @@ async function runMqtt() {
7142
7221
  * @async
7143
7222
  */
7144
7223
  const login = async (params, sessionHandler, config) => {
7145
- var _a, _b, _c;
7224
+ var _a, _b;
7146
7225
  const client = getActiveClient();
7147
7226
  let unsubWatcher;
7148
7227
  client.log('client/api/connectClient', Object.assign({ apiKey: client.apiKey, sessionState: client.sessionState }, params));
@@ -7154,25 +7233,35 @@ const login = async (params, sessionHandler, config) => {
7154
7233
  subscriptions = [];
7155
7234
  }
7156
7235
  // default values
7157
- (_a = params.deviceId) !== null && _a !== void 0 ? _a : (params.deviceId = await getDeviceId());
7236
+ const defaultDeviceId = await getDeviceId();
7158
7237
  try {
7159
- // @ts-ignore: in that particular case, typing can be
7160
- // ignored since we enforce default values just before.
7161
- const { users } = await setClientToken(params);
7238
+ const { users } = await setClientToken(Object.assign(Object.assign({}, params), { displayName: (params === null || params === void 0 ? void 0 : params.displayName) || params.userId, deviceId: (params === null || params === void 0 ? void 0 : params.deviceId) || defaultDeviceId }));
7239
+ const user = users.find(u => u.userId === params.userId);
7240
+ if (user == null) {
7241
+ throw new ASCError(`${params.userId} has not been founded`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7242
+ }
7243
+ if (user.isDeleted) {
7244
+ terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
7245
+ return false;
7246
+ }
7247
+ if (user.isGlobalBanned) {
7248
+ terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
7249
+ return false;
7250
+ }
7162
7251
  // FIXME: events are duplicated if connectClient is called few times without disconnectClient
7163
7252
  // wire websocket events to our event emitter
7164
7253
  proxyWebsocketEvents(client.ws, client.emitter);
7165
7254
  client.ws.once('connect', () => {
7166
7255
  client.ws.open();
7167
7256
  });
7168
- client.userId = params.userId;
7257
+ client.userId = user.userId;
7169
7258
  client.sessionHandler = sessionHandler;
7170
7259
  /*
7171
7260
  * Cannot push to subscriptions as watcher needs to continue working even if
7172
7261
  * token expires
7173
7262
  */
7174
- unsubWatcher = client.accessTokenExpiryWatcher((_b = client.token) === null || _b === void 0 ? void 0 : _b.expiresAt, (_c = client.token) === null || _c === void 0 ? void 0 : _c.issuedAt, sessionHandler);
7175
- setActiveUser(users[0]);
7263
+ unsubWatcher = client.accessTokenExpiryWatcher((_a = client.token) === null || _a === void 0 ? void 0 : _a.expiresAt, (_b = client.token) === null || _b === void 0 ? void 0 : _b.issuedAt, sessionHandler);
7264
+ setActiveUser(user);
7176
7265
  }
7177
7266
  catch (error) {
7178
7267
  /*
@@ -7401,6 +7490,7 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
7401
7490
  sessionState,
7402
7491
  accessTokenExpiryWatcher,
7403
7492
  sessionHandler,
7493
+ hasPermission: hasPermission$1,
7404
7494
  getFeedSettings,
7405
7495
  getSocialSettings,
7406
7496
  getMessagePreviewSetting,
@@ -7495,7 +7585,9 @@ const markerSync = async (deviceLastSyncAt) => {
7495
7585
  const onChannelMarkerFetched = (callback) => {
7496
7586
  const client = getActiveClient();
7497
7587
  const filter = (payload) => {
7498
- callback(payload.userEntityMarkers[0]);
7588
+ payload.userEntityMarkers.forEach(marker => {
7589
+ callback(marker);
7590
+ });
7499
7591
  };
7500
7592
  return createEventSubscriber(client, 'channelMarker/onChannelMarkerFetched', 'local.channelMarker.fetched', filter);
7501
7593
  };
@@ -7609,6 +7701,13 @@ const onFeedMarkerUpdated = (callback) => {
7609
7701
  * @category UserMarker Events
7610
7702
  */
7611
7703
  const onUserMarkerFetched = (callback) => {
7704
+ const client = getActiveClient();
7705
+ const filter = (payload) => {
7706
+ callback(payload.userMarkers);
7707
+ };
7708
+ return createEventSubscriber(client, 'userMarker/onUserMarkerFetched', 'local.userMarker.fetched', filter);
7709
+ };
7710
+ const onUserMarkerFetchedLegacy = (callback) => {
7612
7711
  const client = getActiveClient();
7613
7712
  const filter = (payload) => {
7614
7713
  callback(payload.userMarkers[0]);
@@ -7864,7 +7963,10 @@ const getTotalUnreadCount = (callback) => {
7864
7963
  if (!userId)
7865
7964
  throw new ASCError('The _id has not been defined in ActiveUser', 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7866
7965
  const callbackDataSelector = (data) => { var _a; return (_a = data === null || data === void 0 ? void 0 : data.unreadCount) !== null && _a !== void 0 ? _a : 0; };
7867
- return liveObject(userId, callback, 'userId', getUserMarker, [onUserMarkerFetched], {
7966
+ return liveObject(userId, callback, 'userId', async () => {
7967
+ const { data: userMarker, cachedAt } = await getUserMarker();
7968
+ return { data: userMarker, cachedAt };
7969
+ }, [onUserMarkerFetchedLegacy], {
7868
7970
  callbackDataSelector,
7869
7971
  });
7870
7972
  };
@@ -7890,16 +7992,77 @@ const getUserUnread = (callback) => {
7890
7992
  const { _id: userId } = getActiveUser();
7891
7993
  if (!userId)
7892
7994
  throw new ASCError('The _id has not been defined in ActiveUser', 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7893
- const callbackDataSelector = (data) => {
7995
+ const { log, cache } = getActiveClient();
7996
+ if (!cache) {
7997
+ console.log('For using Live Object feature you need to enable Cache!');
7998
+ }
7999
+ const timestamp = Date.now();
8000
+ log(`liveUserUnread(tmpid: ${timestamp}) > listen`);
8001
+ const disposers = [];
8002
+ let isUnsyncedModel = false; // for messages
8003
+ const dispatcher = (data) => {
8004
+ const userUnread = data.data;
8005
+ callback({
8006
+ data: {
8007
+ hasMentioned: userUnread.hasMentioned,
8008
+ unreadCount: userUnread.unreadCount,
8009
+ },
8010
+ loading: data.loading,
8011
+ error: data.error,
8012
+ });
8013
+ };
8014
+ const realtimeRouter = (userMarkers) => {
7894
8015
  var _a;
7895
- return {
7896
- unreadCount: (_a = data === null || data === void 0 ? void 0 : data.unreadCount) !== null && _a !== void 0 ? _a : 0,
7897
- hasMentioned: !!(data === null || data === void 0 ? void 0 : data.hasMentioned),
7898
- };
8016
+ const filterUserMarkers = userMarkers.filter(userMarker => userId === userMarker.userId);
8017
+ const latestUserMarker = filterUserMarkers.reduce((currentMaxUserMarker, userMarker) => {
8018
+ if (currentMaxUserMarker == null ||
8019
+ new Date(userMarker.lastSyncAt).getTime() >
8020
+ new Date(currentMaxUserMarker.lastSyncAt).getTime()) {
8021
+ return userMarker;
8022
+ }
8023
+ return currentMaxUserMarker;
8024
+ }, null);
8025
+ dispatcher({
8026
+ loading: false,
8027
+ data: {
8028
+ unreadCount: (_a = latestUserMarker === null || latestUserMarker === void 0 ? void 0 : latestUserMarker.unreadCount) !== null && _a !== void 0 ? _a : 0,
8029
+ hasMentioned: filterUserMarkers.some(userMarker => !!userMarker.hasMentioned),
8030
+ },
8031
+ });
8032
+ };
8033
+ function isAmityUserMarkerData(data) {
8034
+ if (data == null)
8035
+ return false;
8036
+ return (data === null || data === void 0 ? void 0 : data.data) != null;
8037
+ }
8038
+ const onFetch = () => {
8039
+ const query = createQuery(getUserMarker);
8040
+ runQuery(query, ({ error, data, loading, origin, cachedAt }) => {
8041
+ if (!isAmityUserMarkerData(data))
8042
+ return;
8043
+ if (cachedAt === UNSYNCED_OBJECT_CACHED_AT_VALUE) {
8044
+ dispatcher({
8045
+ data,
8046
+ origin,
8047
+ loading: false,
8048
+ error: new ASCApiError(UNSYNCED_OBJECT_CACHED_AT_MESSAGE, 800800 /* Amity.ClientError.DISALOOW_UNSYNCED_OBJECT */, "error" /* Amity.ErrorLevel.ERROR */),
8049
+ });
8050
+ isUnsyncedModel = true;
8051
+ disposers.forEach(fn => fn());
8052
+ }
8053
+ else if (!isUnsyncedModel) {
8054
+ dispatcher({ loading, data, origin, error });
8055
+ }
8056
+ if (error) {
8057
+ disposers.forEach(fn => fn());
8058
+ }
8059
+ });
8060
+ };
8061
+ disposers.push(onUserMarkerFetched(userMarkers => realtimeRouter(userMarkers)));
8062
+ onFetch();
8063
+ return () => {
8064
+ disposers.forEach(fn => fn());
7899
8065
  };
7900
- return liveObject(userId, callback, 'userId', getUserMarker, [onUserMarkerFetched], {
7901
- callbackDataSelector,
7902
- });
7903
8066
  };
7904
8067
 
7905
8068
  /**
@@ -8210,21 +8373,30 @@ const onUserMarkerSync = (callback) => {
8210
8373
  *
8211
8374
  * @category Message Events
8212
8375
  */
8213
- const onMessageCreated = (callback, local = true) => {
8376
+ const onMessageCreatedMqtt = (callback) => {
8214
8377
  const client = getActiveClient();
8215
8378
  const filter = async (rawPayload) => {
8216
8379
  const payload = await prepareMessagePayload(rawPayload);
8217
- const message = payload.messages[0];
8218
8380
  // Update in cache
8219
8381
  ingestInCache(payload);
8220
- callback(message);
8382
+ payload.messages.forEach(message => {
8383
+ callback(message);
8384
+ });
8221
8385
  };
8222
8386
  const disposers = [
8223
8387
  createEventSubscriber(client, 'message/onMessageCreated', 'message.created', filter),
8224
8388
  ];
8225
- if (local) {
8226
- createEventSubscriber(client, 'message/onMessageCreated', 'local.message.created', payload => callback(payload.messages[0]));
8227
- }
8389
+ return () => {
8390
+ disposers.forEach(fn => fn());
8391
+ };
8392
+ };
8393
+ const onMessageCreatedLocal = (callback) => {
8394
+ const client = getActiveClient();
8395
+ const disposers = [
8396
+ createEventSubscriber(client, 'message/onMessageCreated', 'local.message.created', payload => payload.messages.forEach(message => {
8397
+ callback(message);
8398
+ })),
8399
+ ];
8228
8400
  return () => {
8229
8401
  disposers.forEach(fn => fn());
8230
8402
  };
@@ -8538,18 +8710,22 @@ let isWaitingForResponse = false;
8538
8710
  let deviceLastSyncAt = null;
8539
8711
  const getDeviceLastSyncAt = () => {
8540
8712
  if (deviceLastSyncAt == null) {
8541
- return new Date().toISOString();
8713
+ return new Date();
8542
8714
  }
8543
8715
  return deviceLastSyncAt;
8544
8716
  };
8545
8717
  const saveDeviceLastSyncAt = (lastSyncAt) => {
8546
- if (!deviceLastSyncAt || new Date(lastSyncAt).getTime() > new Date(deviceLastSyncAt).getTime()) {
8718
+ if (lastSyncAt == null)
8719
+ return;
8720
+ if (!deviceLastSyncAt || lastSyncAt.getTime() > deviceLastSyncAt.getTime()) {
8547
8721
  deviceLastSyncAt = lastSyncAt;
8548
8722
  }
8549
8723
  };
8550
8724
  const fetchDeviceLastSyncAt = async () => {
8551
8725
  const { data: userMarker } = await getUserMarker();
8552
- saveDeviceLastSyncAt(userMarker.lastSyncAt);
8726
+ if (userMarker == null)
8727
+ return;
8728
+ saveDeviceLastSyncAt(new Date(userMarker.lastSyncAt));
8553
8729
  };
8554
8730
  /**
8555
8731
  * list of conditions that make timer still trigger the syncing process.
@@ -8587,18 +8763,33 @@ const markerSyncTrigger = async () => {
8587
8763
  // no event that require to call marker sync API
8588
8764
  return;
8589
8765
  }
8590
- isWaitingForResponse = true;
8591
- // any past events are considered processed here.
8592
- // however during waiting for the response, RTE could add the new message event;
8593
- // which will make the engine trigger another call next round.
8594
- events = [];
8595
- const response = await markerSync(getDeviceLastSyncAt());
8596
- saveDeviceLastSyncAt(response.data.userMarkers[0].lastSyncAt);
8597
- if (response.hasMore) {
8598
- events.push("has_more" /* Amity.MarkerSyncEvent.HAS_MORE */);
8599
- }
8600
- // eslint-disable-next-line require-atomic-updates
8601
- isWaitingForResponse = false;
8766
+ try {
8767
+ isWaitingForResponse = true;
8768
+ // any past events are considered processed here.
8769
+ // however during waiting for the response, RTE could add the new message event;
8770
+ // which will make the engine trigger another call next round.
8771
+ events = [];
8772
+ const response = await markerSync(getDeviceLastSyncAt().toISOString());
8773
+ const latestLastSyncAt = response.data.userMarkers.reduce((maxLastSyncAt, userMarker) => {
8774
+ if (maxLastSyncAt == null ||
8775
+ maxLastSyncAt.getTime() < new Date(userMarker.lastSyncAt).getTime()) {
8776
+ return new Date(userMarker.lastSyncAt);
8777
+ }
8778
+ return maxLastSyncAt;
8779
+ }, null);
8780
+ saveDeviceLastSyncAt(latestLastSyncAt);
8781
+ if (response.hasMore) {
8782
+ events.push("has_more" /* Amity.MarkerSyncEvent.HAS_MORE */);
8783
+ }
8784
+ }
8785
+ catch (_a) {
8786
+ // prevent sync from stopping
8787
+ }
8788
+ finally {
8789
+ if (isWaitingForResponse) {
8790
+ isWaitingForResponse = false;
8791
+ }
8792
+ }
8602
8793
  };
8603
8794
  const registerEventListeners = () => {
8604
8795
  if (disposers.length > 0) {
@@ -8612,14 +8803,11 @@ const registerEventListeners = () => {
8612
8803
  disposers.push(onOnline(() => {
8613
8804
  // should add RESUME to the event to trigger marker syncing again
8614
8805
  events.push("resume" /* Amity.MarkerSyncEvent.RESUME */);
8615
- }), onMessageCreated(message => {
8806
+ }), onMessageCreatedMqtt(message => {
8616
8807
  // only conversation, community and broadcast types can sync
8617
8808
  if (isUnreadCountSupport(message))
8618
8809
  events.push("new message" /* Amity.MarkerSyncEvent.NEW_MESSAGE */);
8619
- },
8620
- // only trigger sync from remote events to prevent an unread count equal `-1`
8621
- // when an optimistic message creation is performed.
8622
- false), onChannelCreated(() => events.push("subchannel is created" /* Amity.MarkerSyncEvent.CHANNEL_CREATED */)), onChannelDeleted(() => events.push("subchannel is deleted" /* Amity.MarkerSyncEvent.CHANNEL_DELETED */)), onChannelJoined(() => events.push("subchannel is joined" /* Amity.MarkerSyncEvent.CHANNEL_JOINED */)), onChannelLeft(() => events.push("subchannel is left" /* Amity.MarkerSyncEvent.CHANNEL_LEFT */)), onSubChannelCreated(() => events.push("subchannel is created" /* Amity.MarkerSyncEvent.SUB_CHANNEL_CREATED */)), onSubChannelDeleted(() =>
8810
+ }), onChannelCreated(() => events.push("subchannel is created" /* Amity.MarkerSyncEvent.CHANNEL_CREATED */)), onChannelDeleted(() => events.push("subchannel is deleted" /* Amity.MarkerSyncEvent.CHANNEL_DELETED */)), onChannelJoined(() => events.push("subchannel is joined" /* Amity.MarkerSyncEvent.CHANNEL_JOINED */)), onChannelLeft(() => events.push("subchannel is left" /* Amity.MarkerSyncEvent.CHANNEL_LEFT */)), onSubChannelCreated(() => events.push("subchannel is created" /* Amity.MarkerSyncEvent.SUB_CHANNEL_CREATED */)), onSubChannelDeleted(() =>
8623
8811
  /*
8624
8812
  workaround: when receiving the event for sub-channel deletion,
8625
8813
  before triggering marker update, the SDK will have to add a 2-second delay.
@@ -13160,7 +13348,26 @@ const getChannel = (channelId, callback) => {
13160
13348
  });
13161
13349
  callback(message);
13162
13350
  };
13163
- return onMessageCreated(updateMessagePreview);
13351
+ return onMessageCreatedMqtt(updateMessagePreview);
13352
+ }, 'channelId', 'channel'),
13353
+ convertEventPayload((callback) => {
13354
+ const updateMessagePreview = async (message) => {
13355
+ var _a;
13356
+ const messagePreviewSetting = await client.getMessagePreviewSetting(false);
13357
+ if (messagePreviewSetting === "no-message-preview" /* Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW */)
13358
+ return;
13359
+ await handleMessageCreated(message);
13360
+ if (message.channelId !== channelId)
13361
+ return;
13362
+ const channel = (_a = pullFromCache(['channel', 'get', channelId])) === null || _a === void 0 ? void 0 : _a.data;
13363
+ if (!channel)
13364
+ return;
13365
+ updateChannelCache(channel, {
13366
+ messagePreviewId: message.messageId,
13367
+ });
13368
+ callback(message);
13369
+ };
13370
+ return onMessageCreatedLocal(updateMessagePreview);
13164
13371
  }, 'channelId', 'channel'),
13165
13372
  convertEventPayload((callback) => {
13166
13373
  const updateMessagePreview = async (message) => {
@@ -13599,7 +13806,27 @@ class ChannelLiveCollectionController extends LiveCollectionController {
13599
13806
  {
13600
13807
  // TODO: merge this code to another onMessageCreated in this file
13601
13808
  fn: convertEventPayload((callback) => {
13602
- return onMessageCreated(message => {
13809
+ return onMessageCreatedMqtt(message => {
13810
+ var _a;
13811
+ const cacheData = (_a = pullFromCache([
13812
+ 'channel',
13813
+ 'get',
13814
+ message.channelId,
13815
+ ])) === null || _a === void 0 ? void 0 : _a.data;
13816
+ if (!cacheData)
13817
+ return;
13818
+ updateChannelCache(cacheData, {
13819
+ lastActivity: message.createdAt,
13820
+ });
13821
+ callback(message);
13822
+ });
13823
+ }, 'messageId', 'channel'),
13824
+ action: 'onUpdate',
13825
+ },
13826
+ {
13827
+ // TODO: merge this code to another onMessageCreated in this file
13828
+ fn: convertEventPayload((callback) => {
13829
+ return onMessageCreatedLocal(message => {
13603
13830
  var _a;
13604
13831
  const cacheData = (_a = pullFromCache([
13605
13832
  'channel',
@@ -13653,7 +13880,33 @@ class ChannelLiveCollectionController extends LiveCollectionController {
13653
13880
  });
13654
13881
  callback(message);
13655
13882
  };
13656
- return onMessageCreated(updateMessagePreview);
13883
+ return onMessageCreatedMqtt(updateMessagePreview);
13884
+ }, 'channelId', 'channel'),
13885
+ action: 'onUpdate',
13886
+ },
13887
+ {
13888
+ fn: convertEventPayload((callback) => {
13889
+ const updateMessagePreview = async (message) => {
13890
+ var _a;
13891
+ const messagePreviewSetting = await ChannelLiveCollectionController.getMessagePreviewSetting();
13892
+ if (messagePreviewSetting === "no-message-preview" /* Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW */)
13893
+ return;
13894
+ handleMessageCreated(message);
13895
+ if (this.shouldAbort(message.channelId))
13896
+ return;
13897
+ const channel = (_a = pullFromCache([
13898
+ 'channel',
13899
+ 'get',
13900
+ message.channelId,
13901
+ ])) === null || _a === void 0 ? void 0 : _a.data;
13902
+ if (!channel)
13903
+ return;
13904
+ updateChannelCache(channel, {
13905
+ messagePreviewId: message.messageId,
13906
+ });
13907
+ callback(message);
13908
+ };
13909
+ return onMessageCreatedLocal(updateMessagePreview);
13657
13910
  }, 'channelId', 'channel'),
13658
13911
  action: 'onUpdate',
13659
13912
  },
@@ -15155,7 +15408,7 @@ class MessageLiveCollectionController extends LiveCollectionController {
15155
15408
  }
15156
15409
  startSubscription() {
15157
15410
  return this.queryStreamController.subscribeRTE([
15158
- { fn: onMessageCreated, action: 'onCreate' },
15411
+ { fn: onMessageCreatedMqtt, action: 'onCreate' },
15159
15412
  { fn: onMessageDeleted, action: 'onDelete' },
15160
15413
  { fn: onMessageUpdated, action: 'onUpdate' },
15161
15414
  { fn: onMessageFlagged, action: 'onFlagged' },
@@ -15233,6 +15486,7 @@ class MessageLiveCollectionController extends LiveCollectionController {
15233
15486
  }
15234
15487
  }
15235
15488
 
15489
+ /* eslint-disable no-use-before-define */
15236
15490
  /* begin_public_function
15237
15491
  id: message.query
15238
15492
  */
@@ -15353,7 +15607,7 @@ const observeMessages = (subChannelId, callback) => {
15353
15607
  (_b = callback.onEvent) === null || _b === void 0 ? void 0 : _b.call(callback, action, message);
15354
15608
  (_c = callback[action]) === null || _c === void 0 ? void 0 : _c.call(callback, message);
15355
15609
  };
15356
- disposers.push(onMessageCreated(data => router({ data, loading: false, origin: 'event' }, 'onCreate')), onMessageUpdated(data => router({ data, loading: false, origin: 'event' }, 'onUpdate')), onMessageDeleted(data => router({ data, loading: false, origin: 'event' }, 'onDelete')), convertEventPayload(onMessageMarkerFetched, 'contentId', 'message')(data => router({ data, loading: false, origin: 'event' }, 'onCreate')), convertEventPayload(onMessageMarked, 'contentId', 'message')(data => router({ data, loading: false, origin: 'event' }, 'onCreate')));
15610
+ disposers.push(onMessageCreatedMqtt(data => router({ data, loading: false, origin: 'event' }, 'onCreate')), onMessageCreatedLocal(data => router({ data, loading: false, origin: 'event' }, 'onCreate')), onMessageUpdated(data => router({ data, loading: false, origin: 'event' }, 'onUpdate')), onMessageDeleted(data => router({ data, loading: false, origin: 'event' }, 'onDelete')), convertEventPayload(onMessageMarkerFetched, 'contentId', 'message')(data => router({ data, loading: false, origin: 'event' }, 'onCreate')), convertEventPayload(onMessageMarked, 'contentId', 'message')(data => router({ data, loading: false, origin: 'event' }, 'onCreate')));
15357
15611
  return () => {
15358
15612
  log(`observeMessages(tmpid: ${timestamp}) > dispose`);
15359
15613
  disposers.forEach(fn => fn());
@@ -15374,7 +15628,8 @@ var index$c = /*#__PURE__*/Object.freeze({
15374
15628
  flagMessage: flagMessage,
15375
15629
  unflagMessage: unflagMessage,
15376
15630
  isMessageFlaggedByMe: isMessageFlaggedByMe,
15377
- onMessageCreated: onMessageCreated,
15631
+ onMessageCreatedMqtt: onMessageCreatedMqtt,
15632
+ onMessageCreatedLocal: onMessageCreatedLocal,
15378
15633
  onMessageUpdated: onMessageUpdated,
15379
15634
  onMessageDeleted: onMessageDeleted,
15380
15635
  onMessageFlagged: onMessageFlagged,
@@ -15642,7 +15897,30 @@ const getSubChannel = (subChannelId, callback) => {
15642
15897
  });
15643
15898
  callback(message);
15644
15899
  };
15645
- return onMessageCreated(updateMessagePreview);
15900
+ return onMessageCreatedMqtt(updateMessagePreview);
15901
+ }, 'subChannelId', 'subChannel'),
15902
+ convertEventPayload((callback) => {
15903
+ const updateMessagePreview = async (message) => {
15904
+ var _a;
15905
+ const messagePreviewSetting = await client.getMessagePreviewSetting(false);
15906
+ if (messagePreviewSetting === "no-message-preview" /* Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW */)
15907
+ return;
15908
+ await handleMessageCreated(message);
15909
+ if (message.subChannelId !== subChannelId)
15910
+ return;
15911
+ const subChannel = (_a = pullFromCache([
15912
+ 'subChannel',
15913
+ 'get',
15914
+ subChannelId,
15915
+ ])) === null || _a === void 0 ? void 0 : _a.data;
15916
+ if (!subChannel)
15917
+ return;
15918
+ updateSubChannelCache(message.subChannelId, subChannel, {
15919
+ messagePreviewId: message.messageId,
15920
+ });
15921
+ callback(message);
15922
+ };
15923
+ return onMessageCreatedLocal(updateMessagePreview);
15646
15924
  }, 'subChannelId', 'subChannel'),
15647
15925
  convertEventPayload((callback) => {
15648
15926
  const updateMessagePreview = async (message) => {
@@ -15807,7 +16085,42 @@ class SubChannelLiveCollectionController extends LiveCollectionController {
15807
16085
  },
15808
16086
  {
15809
16087
  fn: callback => {
15810
- return onMessageCreated(async (message) => {
16088
+ return onMessageCreatedMqtt(async (message) => {
16089
+ var _a, _b;
16090
+ const cacheData = pullFromCache([
16091
+ 'subChannel',
16092
+ 'get',
16093
+ message.subChannelId,
16094
+ ]);
16095
+ if (!cacheData)
16096
+ return;
16097
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
16098
+ if (!collection || !collection.data.includes(message.subChannelId))
16099
+ return;
16100
+ const client = getActiveClient();
16101
+ const messagePreviewSetting = await client.getMessagePreviewSetting(false);
16102
+ if (messagePreviewSetting === "no-message-preview" /* Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW */)
16103
+ return;
16104
+ handleMessageCreated(message);
16105
+ const subChannelCache = (_b = pullFromCache([
16106
+ 'subChannel',
16107
+ 'get',
16108
+ message.subChannelId,
16109
+ ])) === null || _b === void 0 ? void 0 : _b.data;
16110
+ if (!subChannelCache)
16111
+ return;
16112
+ updateSubChannelCache(message.subChannelId, subChannelCache, {
16113
+ lastActivity: message.createdAt,
16114
+ messagePreviewId: message.messageId,
16115
+ });
16116
+ callback(Object.assign(Object.assign({}, cacheData.data), { messagePreviewId: message.messageId, subChannelId: message.subChannelId, lastActivity: message.createdAt }));
16117
+ });
16118
+ },
16119
+ action: 'onUpdate',
16120
+ },
16121
+ {
16122
+ fn: callback => {
16123
+ return onMessageCreatedLocal(async (message) => {
15811
16124
  var _a, _b;
15812
16125
  const cacheData = pullFromCache([
15813
16126
  'subChannel',
@@ -16472,6 +16785,10 @@ const onCommunityUpdated = (callback) => createCommunityEventSubscriber('communi
16472
16785
  */
16473
16786
  const onCommunityDeleted = (callback) => createCommunityEventSubscriber('community.deleted', callback);
16474
16787
 
16788
+ function isNonNullable(value) {
16789
+ return value != null;
16790
+ }
16791
+
16475
16792
  function hasPermission(member, payload, permission) {
16476
16793
  if (member.permissions.some(x => x === permission)) {
16477
16794
  return true;
@@ -16482,21 +16799,21 @@ function hasPermission(member, payload, permission) {
16482
16799
  }
16483
16800
  function getEventRelatedMember(event, payload) {
16484
16801
  if (event === 'community.joined' || event === 'community.left') {
16485
- return payload.communityUsers[0];
16802
+ return payload.communityUsers;
16486
16803
  }
16487
16804
  // NOTE: backend returns the one who took the action and the one on whom
16488
16805
  // the action was taken. We need the 2nd one
16489
16806
  if (event === 'community.userRemoved') {
16490
- return payload.communityUsers.filter(x => x.communityMembership === 'none')[0];
16807
+ return payload.communityUsers.filter(x => x.communityMembership === 'none');
16491
16808
  }
16492
16809
  if (event === 'community.userBanned') {
16493
- return payload.communityUsers.filter(x => x.communityMembership === 'banned')[0];
16810
+ return payload.communityUsers.filter(x => x.communityMembership === 'banned');
16494
16811
  }
16495
16812
  // NOTE: it might be that in certain edge cases permission check won't be enough
16496
16813
  if (event === 'community.userUnbanned') {
16497
- return payload.communityUsers.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'))[0];
16814
+ return payload.communityUsers.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'));
16498
16815
  }
16499
- return payload.communityUsers.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'))[0];
16816
+ return payload.communityUsers.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'));
16500
16817
  }
16501
16818
  const createCommunityMemberEventSubscriber = (event, callback) => {
16502
16819
  const client = getActiveClient();
@@ -16520,12 +16837,17 @@ const createCommunityMemberEventSubscriber = (event, callback) => {
16520
16837
  'get',
16521
16838
  preparedPayload.communities[0].communityId,
16522
16839
  ]);
16523
- const member = pullFromCache([
16524
- 'communityUsers',
16525
- 'get',
16526
- getResolver('communityUsers')(getEventRelatedMember(event, preparedPayload)),
16527
- ]);
16528
- callback(community.data, member.data);
16840
+ const members = getEventRelatedMember(event, preparedPayload)
16841
+ .map(member => {
16842
+ const memberCache = pullFromCache([
16843
+ 'communityUsers',
16844
+ 'get',
16845
+ getResolver('communityUsers')(member),
16846
+ ]);
16847
+ return memberCache === null || memberCache === void 0 ? void 0 : memberCache.data;
16848
+ })
16849
+ .filter(isNonNullable);
16850
+ callback(community.data, members);
16529
16851
  }
16530
16852
  };
16531
16853
  return createEventSubscriber(client, event, event, filter);
@@ -17570,19 +17892,25 @@ const getMembers = (params, callback, config) => {
17570
17892
  error: data.error,
17571
17893
  });
17572
17894
  };
17573
- const realtimeRouter = (_) => (_, communityMember) => {
17895
+ const realtimeRouter = (_) => (_, communityMembers) => {
17574
17896
  var _a;
17575
- if (params.communityId !== communityMember.communityId) {
17576
- return;
17577
- }
17578
17897
  const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
17579
- if (!collection)
17898
+ if (!collection) {
17580
17899
  return;
17581
- const communityMemberCacheId = getResolver('communityUsers')({
17582
- communityId: params.communityId,
17583
- userId: communityMember.userId,
17584
- });
17585
- collection.data = [...new Set([communityMemberCacheId, ...collection.data])];
17900
+ }
17901
+ const communityMemberCacheIds = communityMembers
17902
+ .map(communityMember => {
17903
+ if (params.communityId !== communityMember.communityId) {
17904
+ return;
17905
+ }
17906
+ const communityMemberCacheId = getResolver('communityUsers')({
17907
+ communityId: params.communityId,
17908
+ userId: communityMember.userId,
17909
+ });
17910
+ return communityMemberCacheId;
17911
+ })
17912
+ .filter(isNonNullable);
17913
+ collection.data = [...new Set([...communityMemberCacheIds, ...collection.data])];
17586
17914
  pushToCache(cacheKey, collection);
17587
17915
  pushToCache(cacheByCommunityIdKey, collection);
17588
17916
  responder(collection, true);
@@ -20889,7 +21217,7 @@ const createStory = async (payload) => {
20889
21217
  if (client.cache)
20890
21218
  ingestInCache(convertedResponse);
20891
21219
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, payload.targetId], "synced" /* Amity.SyncState.Synced */);
20892
- fireEvent('story.created', convertedResponse);
21220
+ fireEvent('local.story.created', convertedResponse);
20893
21221
  const cachedAt = client.cache && Date.now();
20894
21222
  return {
20895
21223
  data: convertedResponse.stories.length > 0 ? convertedResponse.stories[0] : undefined,
@@ -20934,7 +21262,7 @@ const createImageStory = async (targetType, targetId, formData, metadata = {}, i
20934
21262
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "syncing" /* Amity.SyncState.Syncing */);
20935
21263
  // Fire optimistic event
20936
21264
  createOptimisticEvent({ payload, formData }, optimisticData => {
20937
- fireEvent('story.created', optimisticData);
21265
+ fireEvent('local.story.created', optimisticData);
20938
21266
  });
20939
21267
  try {
20940
21268
  const { data } = await uploadImage(formData);
@@ -20945,7 +21273,7 @@ const createImageStory = async (targetType, targetId, formData, metadata = {}, i
20945
21273
  payload = Object.assign(Object.assign({}, payload), { data: Object.assign(Object.assign({}, payload.data), { fileId }) });
20946
21274
  // Fire optimistic event - update fileId
20947
21275
  createOptimisticEvent({ payload, formData }, optimisticData => {
20948
- fireEvent('story.created', optimisticData);
21276
+ fireEvent('local.story.created', optimisticData);
20949
21277
  });
20950
21278
  const result = await createStory(payload);
20951
21279
  if (!result.data)
@@ -20956,7 +21284,7 @@ const createImageStory = async (targetType, targetId, formData, metadata = {}, i
20956
21284
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "error" /* Amity.SyncState.Error */);
20957
21285
  // Fire optimistic event - failed to upload image
20958
21286
  createOptimisticEvent({ payload: Object.assign(Object.assign({}, payload), { syncState: "error" /* Amity.SyncState.Error */ }), formData }, optimisticData => {
20959
- fireEvent('story.error', optimisticData);
21287
+ fireEvent('local.story.error', optimisticData);
20960
21288
  });
20961
21289
  throw error;
20962
21290
  }
@@ -20995,7 +21323,7 @@ const createVideoStory = async (targetType, targetId, formData, metadata = {}, i
20995
21323
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "syncing" /* Amity.SyncState.Syncing */);
20996
21324
  // Fire optimistic event
20997
21325
  createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
20998
- fireEvent('story.created', optimisticData);
21326
+ fireEvent('local.story.created', optimisticData);
20999
21327
  });
21000
21328
  try {
21001
21329
  const { data } = await uploadVideo(formData, ContentFeedType.STORY);
@@ -21006,7 +21334,7 @@ const createVideoStory = async (targetType, targetId, formData, metadata = {}, i
21006
21334
  payload = Object.assign(Object.assign({}, payload), { data: Object.assign(Object.assign({}, payload.data), { fileId, videoFileId: { original: fileId } }) });
21007
21335
  // Fire optimistic event - update fileId
21008
21336
  createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
21009
- fireEvent('story.created', optimisticData);
21337
+ fireEvent('local.story.created', optimisticData);
21010
21338
  });
21011
21339
  const result = await createStory(payload);
21012
21340
  if (!result.data)
@@ -21017,7 +21345,7 @@ const createVideoStory = async (targetType, targetId, formData, metadata = {}, i
21017
21345
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "error" /* Amity.SyncState.Error */);
21018
21346
  // Fire optimistic upload failed
21019
21347
  createOptimisticEvent({ payload: Object.assign(Object.assign({}, payload), { syncState: "error" /* Amity.SyncState.Error */ }), formData, isVideo: true }, optimisticData => {
21020
- fireEvent('story.error', optimisticData);
21348
+ fireEvent('local.story.error', optimisticData);
21021
21349
  });
21022
21350
  throw error;
21023
21351
  }
@@ -21065,12 +21393,86 @@ const softDeleteStory = async (storyId) => {
21065
21393
  };
21066
21394
 
21067
21395
  const onStoryUpdated = (callback) => {
21396
+ const client = getActiveClient();
21397
+ const filter = async (payload) => {
21398
+ // Apply the necessary field for story payload
21399
+ const convertPayload = convertStoryRawToInternal(payload);
21400
+ ingestInCache(convertPayload);
21401
+ callback(convertPayload.stories);
21402
+ };
21403
+ const disposers = [createEventSubscriber(client, 'onStoryUpdated', 'story.updated', filter)];
21404
+ return () => {
21405
+ disposers.forEach(fn => fn());
21406
+ };
21407
+ };
21408
+ const onStoryUpdatedLocal = (callback) => {
21068
21409
  const client = getActiveClient();
21069
21410
  const filter = async (payload) => {
21070
21411
  ingestInCache(payload);
21071
21412
  callback(payload.stories);
21072
21413
  };
21073
- return createEventSubscriber(client, 'onStoryUpdated', 'story.updated', filter);
21414
+ const disposers = [
21415
+ createEventSubscriber(client, 'onStoryUpdated', 'local.story.updated', filter),
21416
+ ];
21417
+ return () => {
21418
+ disposers.forEach(fn => fn());
21419
+ };
21420
+ };
21421
+
21422
+ const onStoryReactionAdded = (callback) => {
21423
+ const client = getActiveClient();
21424
+ const filter = async (payload) => {
21425
+ const convertPayload = convertStoryRawToInternal(payload);
21426
+ ingestInCache(convertPayload);
21427
+ callback(convertPayload.stories);
21428
+ };
21429
+ const disposers = [
21430
+ createEventSubscriber(client, 'onStoryReactionAdded', 'story.reactionAdded', filter),
21431
+ ];
21432
+ return () => {
21433
+ disposers.forEach(fn => fn());
21434
+ };
21435
+ };
21436
+ const onStoryReactionAddedLocal = (callback) => {
21437
+ const client = getActiveClient();
21438
+ const filter = async (payload) => {
21439
+ ingestInCache(payload);
21440
+ callback(payload.stories);
21441
+ };
21442
+ const disposers = [
21443
+ createEventSubscriber(client, 'onStoryReactionAdded', 'local.story.reactionAdded', filter),
21444
+ ];
21445
+ return () => {
21446
+ disposers.forEach(fn => fn());
21447
+ };
21448
+ };
21449
+
21450
+ const onStoryReactionRemoved = (callback) => {
21451
+ const client = getActiveClient();
21452
+ const filter = async (payload) => {
21453
+ const convertPayload = convertStoryRawToInternal(payload);
21454
+ ingestInCache(convertPayload);
21455
+ callback(convertPayload.stories);
21456
+ };
21457
+ const disposers = [
21458
+ createEventSubscriber(client, 'onStoryReactionRemoved', 'story.reactionRemoved', filter),
21459
+ ];
21460
+ return () => {
21461
+ disposers.forEach(fn => fn());
21462
+ };
21463
+ };
21464
+ const onStoryReactionRemovedLocal = (callback) => {
21465
+ const client = getActiveClient();
21466
+ const filter = async (payload) => {
21467
+ ingestInCache(payload);
21468
+ callback(payload.stories);
21469
+ };
21470
+ const disposers = [
21471
+ createEventSubscriber(client, 'onStoryReactionRemoved', 'local.story.reactionRemoved', filter),
21472
+ ];
21473
+ return () => {
21474
+ disposers.forEach(fn => fn());
21475
+ };
21074
21476
  };
21075
21477
 
21076
21478
  const updateLocalLastStoryExpires = (stories) => {
@@ -21120,21 +21522,54 @@ const getActiveStoriesByTarget$1 = async ({ targetType, targetId, options, }) =>
21120
21522
  };
21121
21523
 
21122
21524
  const onStoryCreated = (callback) => {
21525
+ const client = getActiveClient();
21526
+ const filter = async (payload) => {
21527
+ // Apply the necessary field for story payload
21528
+ const convertPayload = convertStoryRawToInternal(payload);
21529
+ ingestInCache(convertPayload);
21530
+ callback(convertPayload.stories);
21531
+ };
21532
+ const disposers = [createEventSubscriber(client, 'onStoryCreated', 'story.created', filter)];
21533
+ return () => {
21534
+ disposers.forEach(fn => fn());
21535
+ };
21536
+ };
21537
+ const onStoryCreatedLocal = (callback) => {
21123
21538
  const client = getActiveClient();
21124
21539
  const filter = async (payload) => {
21125
21540
  ingestInCache(payload);
21126
21541
  callback(payload.stories);
21127
21542
  };
21128
- return createEventSubscriber(client, 'onStoryCreated', 'story.created', filter);
21543
+ const disposers = [
21544
+ createEventSubscriber(client, 'onStoryCreated', 'local.story.created', filter),
21545
+ ];
21546
+ return () => {
21547
+ disposers.forEach(fn => fn());
21548
+ };
21129
21549
  };
21130
21550
 
21131
21551
  const onStoryDeleted = (callback) => {
21552
+ const client = getActiveClient();
21553
+ const filter = async (payload) => {
21554
+ const convertPayload = convertStoryRawToInternal(payload);
21555
+ ingestInCache(convertPayload);
21556
+ callback(convertPayload.stories);
21557
+ };
21558
+ const disposer = [createEventSubscriber(client, 'onStoryDeleted', 'story.deleted', filter)];
21559
+ return () => {
21560
+ disposer.forEach(fn => fn());
21561
+ };
21562
+ };
21563
+ const onStoryDeletedLocal = (callback) => {
21132
21564
  const client = getActiveClient();
21133
21565
  const filter = async (payload) => {
21134
21566
  ingestInCache(payload);
21135
21567
  callback(payload.stories);
21136
21568
  };
21137
- return createEventSubscriber(client, 'onStoryDeleted', 'story.deleted', filter);
21569
+ const disposer = [createEventSubscriber(client, 'onStoryDeleted', 'local.story.deleted', filter)];
21570
+ return () => {
21571
+ disposer.forEach(fn => fn());
21572
+ };
21138
21573
  };
21139
21574
 
21140
21575
  const onStoryError = (callback) => {
@@ -21143,7 +21578,7 @@ const onStoryError = (callback) => {
21143
21578
  ingestInCache(payload);
21144
21579
  callback(payload.stories);
21145
21580
  };
21146
- return createEventSubscriber(client, 'onStoryError', 'story.error', filter);
21581
+ return createEventSubscriber(client, 'onStoryError', 'local.story.error', filter);
21147
21582
  };
21148
21583
 
21149
21584
  const onStoryLocalDataUpdated = (callback) => {
@@ -21151,9 +21586,29 @@ const onStoryLocalDataUpdated = (callback) => {
21151
21586
  const filter = (payload) => {
21152
21587
  callback(payload);
21153
21588
  };
21154
- return createEventSubscriber(client, 'onStoryLocalDataUpdated', 'local.story.updated', filter);
21589
+ return createEventSubscriber(client, 'onStoryLocalDataUpdated', 'local.story.reload', filter);
21155
21590
  };
21156
21591
 
21592
+ /**
21593
+ * ```js
21594
+ * import { StoryRepository } from '@amityco/js-sdk';
21595
+ * let storiesData;
21596
+ *
21597
+ * const unsubscribe = StoryRepository.getActiveStoriesByTarget({ targetId, targetType }, response => {
21598
+ * storiesData = response.data;
21599
+ * });
21600
+ *
21601
+ * unsubscribe();
21602
+ * ```
21603
+ *
21604
+ * Observe all mutations on a given {@link Amity.Story}
21605
+ *
21606
+ * @param params for querying stories from a community
21607
+ * @param callback the function to call when new data are available
21608
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the story
21609
+ *
21610
+ * @category SubChannel Live Object
21611
+ */
21157
21612
  const getActiveStoriesByTarget = (params, callback) => {
21158
21613
  const { log, cache } = getActiveClient();
21159
21614
  const disposers = [];
@@ -21269,7 +21724,7 @@ const getActiveStoriesByTarget = (params, callback) => {
21269
21724
  });
21270
21725
  };
21271
21726
  onFetch(true);
21272
- disposers.push(onStoryCreated(realtimeRouter()), onStoryUpdated(realtimeRouter()), onStoryDeleted(realtimeRouter()), onStoryError(realtimeRouter()), onStoryLocalDataUpdated(reloadData()), () => dropFromCache(cacheKey));
21727
+ disposers.push(onStoryCreated(realtimeRouter()), onStoryUpdated(realtimeRouter()), onStoryDeleted(realtimeRouter()), onStoryReactionAdded(realtimeRouter()), onStoryReactionRemoved(realtimeRouter()), onStoryError(realtimeRouter()), onStoryCreatedLocal(realtimeRouter()), onStoryUpdatedLocal(realtimeRouter()), onStoryDeletedLocal(realtimeRouter()), onStoryReactionAddedLocal(realtimeRouter()), onStoryReactionRemovedLocal(realtimeRouter()), onStoryLocalDataUpdated(reloadData()), () => dropFromCache(cacheKey));
21273
21728
  return () => {
21274
21729
  log(`getActiveStoriesByTarget(tmpid: ${timestamp}) > dispose`);
21275
21730
  disposers.forEach(fn => fn());
@@ -21338,7 +21793,17 @@ const getStoryByStoryId = (storyId, callback) => {
21338
21793
  return;
21339
21794
  }
21340
21795
  callback(Object.assign(Object.assign({}, data), { data: LinkedObject.story(data.data) }));
21341
- }, 'storyId', getStoryByStoryId$1, [getSingleItemFromArray(onStoryDeleted), getSingleItemFromArray(onStoryError)]);
21796
+ }, 'storyId', getStoryByStoryId$1, [
21797
+ getSingleItemFromArray(onStoryUpdated),
21798
+ getSingleItemFromArray(onStoryDeleted),
21799
+ getSingleItemFromArray(onStoryReactionAdded),
21800
+ getSingleItemFromArray(onStoryReactionRemoved),
21801
+ getSingleItemFromArray(onStoryError),
21802
+ getSingleItemFromArray(onStoryUpdatedLocal),
21803
+ getSingleItemFromArray(onStoryDeletedLocal),
21804
+ getSingleItemFromArray(onStoryReactionAddedLocal),
21805
+ getSingleItemFromArray(onStoryReactionRemovedLocal),
21806
+ ]);
21342
21807
  };
21343
21808
 
21344
21809
  const getTargetsByTargetIds$1 = async (targets) => {
@@ -21431,6 +21896,157 @@ const getTargetsByTargetIds = (params, callback) => {
21431
21896
  };
21432
21897
  };
21433
21898
 
21899
+ class StoryQueryStreamController extends QueryStreamController {
21900
+ constructor(query, cacheKey, notifyChange, paginationController) {
21901
+ super(query, cacheKey);
21902
+ this.notifyChange = notifyChange;
21903
+ this.paginationController = paginationController;
21904
+ }
21905
+ // eslint-disable-next-line class-methods-use-this
21906
+ saveToMainDB(response) {
21907
+ const client = getActiveClient();
21908
+ const cachedAt = client.cache && Date.now();
21909
+ const convertedData = convertStoryRawToInternal(response);
21910
+ if (client.cache) {
21911
+ ingestInCache(convertedData, { cachedAt });
21912
+ // Update local last story expires
21913
+ updateLocalLastStoryExpires(convertedData.stories);
21914
+ // Map storyId to referenceId
21915
+ mappingStoryIdToReferenceId(convertedData.stories);
21916
+ }
21917
+ }
21918
+ // eslint-disable-next-line class-methods-use-this
21919
+ getStoryReferenceIds(story) {
21920
+ if (story === null || story === void 0 ? void 0 : story.referenceId) {
21921
+ return story.referenceId;
21922
+ }
21923
+ return story.storyId;
21924
+ }
21925
+ appendToQueryStream(response, direction, refresh = false) {
21926
+ var _a, _b;
21927
+ if (refresh) {
21928
+ pushToCache(this.cacheKey, {
21929
+ data: response.stories.map(this.getStoryReferenceIds),
21930
+ });
21931
+ }
21932
+ else {
21933
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21934
+ const stories = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
21935
+ pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: [...new Set([...stories, ...response.stories.map(this.getStoryReferenceIds)])] }));
21936
+ }
21937
+ }
21938
+ reactor(action) {
21939
+ return (payload) => {
21940
+ var _a;
21941
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21942
+ if (!collection)
21943
+ return;
21944
+ const newReferenceIds = payload.map(({ referenceId }) => referenceId);
21945
+ collection.data = [...new Set([...newReferenceIds, ...collection.data])];
21946
+ pushToCache(this.cacheKey, collection);
21947
+ this.notifyChange({ origin: "event" /* Amity.LiveDataOrigin.EVENT */, loading: false });
21948
+ };
21949
+ }
21950
+ subscribeRTE(createSubscriber) {
21951
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
21952
+ }
21953
+ }
21954
+
21955
+ /* eslint-disable no-use-before-define */
21956
+ class StoryPaginationNoPageController extends PaginationNoPageController {
21957
+ async getRequest(queryParams) {
21958
+ const { data: queryResponse } = await this.http.get('/api/v4/stories-by-targets', {
21959
+ params: Object.assign({}, queryParams),
21960
+ });
21961
+ return queryResponse;
21962
+ }
21963
+ }
21964
+
21965
+ class StoryLiveCollectionController extends LiveCollectionController {
21966
+ constructor(query, callback) {
21967
+ const queryStreamId = hash__default["default"](query);
21968
+ const cacheKey = ["story-target-ids" /* STORY_KEY_CACHE.STORY_TARGET_IDS */, 'collection', queryStreamId];
21969
+ const paginationController = new StoryPaginationNoPageController(query);
21970
+ super(paginationController, queryStreamId, cacheKey, callback);
21971
+ this.query = query;
21972
+ this.queryStreamController = new StoryQueryStreamController(this.query, this.cacheKey, this.notifyChange.bind(this), paginationController);
21973
+ this.paginationController = paginationController;
21974
+ this.callback = callback.bind(this);
21975
+ this.loadPage(true);
21976
+ }
21977
+ setup() {
21978
+ var _a;
21979
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21980
+ if (!collection) {
21981
+ pushToCache(this.cacheKey, {
21982
+ data: [],
21983
+ params: {},
21984
+ });
21985
+ }
21986
+ }
21987
+ persistModel(response) {
21988
+ this.queryStreamController.saveToMainDB(response);
21989
+ }
21990
+ persistQueryStream({ response, direction, refresh, }) {
21991
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
21992
+ }
21993
+ notifyChange({ origin, loading, error }) {
21994
+ var _a;
21995
+ const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
21996
+ if (!collection)
21997
+ return;
21998
+ let data = collection.data
21999
+ .map(referenceId => pullFromCache(["story" /* STORY_KEY_CACHE.STORY */, 'get', referenceId]))
22000
+ .filter(Boolean)
22001
+ .map(internStory => LinkedObject.story(internStory.data));
22002
+ if (!this.shouldNotify(data) && origin === 'event')
22003
+ return;
22004
+ data = this.applyFilter(data);
22005
+ this.callback({
22006
+ onNextPage: undefined,
22007
+ data,
22008
+ hasNextPage: false,
22009
+ loading,
22010
+ error,
22011
+ });
22012
+ }
22013
+ applyFilter(data) {
22014
+ var _a, _b;
22015
+ const internalStories = data;
22016
+ const orderBy = ((_b = (_a = this.query) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.orderBy) || 'desc';
22017
+ return orderBy === 'asc'
22018
+ ? internalStories.sort(sortByFirstCreated)
22019
+ : internalStories.sort(sortByLastCreated);
22020
+ }
22021
+ startSubscription() {
22022
+ return this.queryStreamController.subscribeRTE([
22023
+ { fn: onStoryCreated, action: "onCreate" /* Amity.StoryActionType.OnCreate */ },
22024
+ { fn: onStoryUpdated, action: "onUpdate" /* Amity.StoryActionType.OnUpdate */ },
22025
+ { fn: onStoryDeleted, action: "onDelete" /* Amity.StoryActionType.OnDelete */ },
22026
+ { fn: onStoryError, action: "onError" /* Amity.StoryActionType.OnError */ },
22027
+ ]);
22028
+ }
22029
+ }
22030
+
22031
+ const getStoriesByTargetIds = (params, callback, config) => {
22032
+ const { log, cache, userId } = getActiveClient();
22033
+ if (!cache) {
22034
+ console.log(ENABLE_CACHE_MESSAGE);
22035
+ }
22036
+ const timestamp = Date.now();
22037
+ log(`getStoriesByTargetIds(tmpid: ${timestamp}) > listen`);
22038
+ const storyLiveCollection = new StoryLiveCollectionController(params, callback);
22039
+ const disposers = storyLiveCollection.startSubscription();
22040
+ const cacheKey = storyLiveCollection.getCacheKey();
22041
+ disposers.push(() => {
22042
+ dropFromCache(cacheKey);
22043
+ });
22044
+ return () => {
22045
+ log(`getStoriesByTargetIds(tmpid: ${timestamp}) > dispose`);
22046
+ disposers.forEach(fn => fn());
22047
+ };
22048
+ };
22049
+
21434
22050
  var index = /*#__PURE__*/Object.freeze({
21435
22051
  __proto__: null,
21436
22052
  createImageStory: createImageStory,
@@ -21440,7 +22056,8 @@ var index = /*#__PURE__*/Object.freeze({
21440
22056
  getActiveStoriesByTarget: getActiveStoriesByTarget,
21441
22057
  getStoryByStoryId: getStoryByStoryId,
21442
22058
  getTargetById: getTargetById,
21443
- getTargetsByTargetIds: getTargetsByTargetIds
22059
+ getTargetsByTargetIds: getTargetsByTargetIds,
22060
+ getStoriesByTargetIds: getStoriesByTargetIds
21444
22061
  });
21445
22062
 
21446
22063
  /**
@@ -21512,6 +22129,7 @@ exports.filterBySearchTerm = filterBySearchTerm;
21512
22129
  exports.filterByStringComparePartially = filterByStringComparePartially;
21513
22130
  exports.getChannelTopic = getChannelTopic;
21514
22131
  exports.getCommentTopic = getCommentTopic;
22132
+ exports.getCommunityStoriesTopic = getCommunityStoriesTopic;
21515
22133
  exports.getCommunityTopic = getCommunityTopic;
21516
22134
  exports.getMarkedMessageTopic = getMarkedMessageTopic;
21517
22135
  exports.getMessageTopic = getMessageTopic;
@@ -21523,6 +22141,7 @@ exports.getRole = getRole;
21523
22141
  exports.getSmartFeedChannelTopic = getSmartFeedChannelTopic;
21524
22142
  exports.getSmartFeedMessageTopic = getSmartFeedMessageTopic;
21525
22143
  exports.getSmartFeedSubChannelTopic = getSmartFeedSubChannelTopic;
22144
+ exports.getStoryTopic = getStoryTopic;
21526
22145
  exports.getSubChannelTopic = getSubChannelTopic;
21527
22146
  exports.getUserTopic = getUserTopic;
21528
22147
  exports.isAfterBefore = isAfterBefore;
@@ -21545,6 +22164,7 @@ exports.onMessageMarkerFetched = onMessageMarkerFetched;
21545
22164
  exports.onSubChannelMarkerFetched = onSubChannelMarkerFetched;
21546
22165
  exports.onSubChannelMarkerUpdated = onSubChannelMarkerUpdated;
21547
22166
  exports.onUserMarkerFetched = onUserMarkerFetched;
22167
+ exports.onUserMarkerFetchedLegacy = onUserMarkerFetchedLegacy;
21548
22168
  exports.pullFromCache = pullFromCache;
21549
22169
  exports.pushToCache = pushToCache;
21550
22170
  exports.queryCache = queryCache;