@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
@@ -3,7 +3,7 @@
3
3
  import { dropFromCache } from '~/cache/api';
4
4
  import { getActiveClient } from '~/client/api';
5
5
  import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
6
- import { ChannelLiveCollectionController } from './liveCollection/ChannelLiveCollectionController';
6
+ import { ChannelLiveCollectionController } from './ChannelLiveCollectionController';
7
7
 
8
8
  /* begin_public_function
9
9
  id: channel.query
@@ -0,0 +1 @@
1
+ export * from './getChannels';
@@ -12,9 +12,10 @@ import {
12
12
  import { createEventEmitter } from '~/core/events';
13
13
 
14
14
  import { getMessagePreviewSetting } from '~/client/utils/messagePreviewEngine';
15
+ import { getSocialSettings } from '~/client/api/getSocialSettings';
16
+ import { hasPermission } from '~/client/utils/hasPermission';
15
17
  import { getActiveClient, setActiveClient } from './activeClient';
16
18
  import { getFeedSettings } from './getFeedSettings';
17
- import { getSocialSettings } from '~/client/api/getSocialSettings';
18
19
 
19
20
  import { accessTokenExpiryWatcher } from './accessTokenExpiryWatcher';
20
21
 
@@ -96,6 +97,7 @@ export const createClient = (
96
97
  accessTokenExpiryWatcher,
97
98
  sessionHandler,
98
99
 
100
+ hasPermission,
99
101
  getFeedSettings,
100
102
  getSocialSettings,
101
103
  getMessagePreviewSetting,
@@ -25,6 +25,7 @@ import { onTokenTerminated } from '../events/onTokenTerminated';
25
25
  import { setClientToken } from '../utils/setClientToken';
26
26
  import { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';
27
27
  import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
28
+ import { ASCError } from '~/core/errors';
28
29
 
29
30
  /*
30
31
  * declared earlier to accomodate case when logging in with a different user
@@ -84,12 +85,34 @@ export const login = async (
84
85
  }
85
86
 
86
87
  // default values
87
- params.deviceId ??= await getDeviceId();
88
+ const defaultDeviceId = await getDeviceId();
88
89
 
89
90
  try {
90
- // @ts-ignore: in that particular case, typing can be
91
- // ignored since we enforce default values just before.
92
- const { users } = await setClientToken(params);
91
+ const { users } = await setClientToken({
92
+ ...params,
93
+ displayName: params?.displayName || params.userId,
94
+ deviceId: params?.deviceId || defaultDeviceId,
95
+ });
96
+
97
+ const user = users.find(u => u.userId === params.userId);
98
+
99
+ if (user == null) {
100
+ throw new ASCError(
101
+ `${params.userId} has not been founded`,
102
+ Amity.ClientError.UNKNOWN_ERROR,
103
+ Amity.ErrorLevel.ERROR,
104
+ );
105
+ }
106
+
107
+ if (user.isDeleted) {
108
+ terminateClient(Amity.TokenTerminationReason.USER_DELETED);
109
+ return false;
110
+ }
111
+
112
+ if (user.isGlobalBanned) {
113
+ terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);
114
+ return false;
115
+ }
93
116
 
94
117
  // FIXME: events are duplicated if connectClient is called few times without disconnectClient
95
118
  // wire websocket events to our event emitter
@@ -99,7 +122,7 @@ export const login = async (
99
122
  client.ws.open();
100
123
  });
101
124
 
102
- client.userId = params.userId;
125
+ client.userId = user.userId;
103
126
 
104
127
  client.sessionHandler = sessionHandler;
105
128
 
@@ -113,7 +136,7 @@ export const login = async (
113
136
  sessionHandler!,
114
137
  );
115
138
 
116
- setActiveUser(users[0]);
139
+ setActiveUser(user);
117
140
  } catch (error) {
118
141
  /*
119
142
  * if getting token failed session state reverts to initial state when app
@@ -53,6 +53,11 @@ export const logout = async (): Promise<boolean> => {
53
53
  client.token = undefined;
54
54
 
55
55
  client.http.defaults.headers.common.Authorization = '';
56
+ client.http.defaults.metadata = {
57
+ tokenExpiry: '',
58
+ isGlobalBanned: false,
59
+ isUserDeleted: false,
60
+ };
56
61
  client.ws.io.opts.query = { token: '' };
57
62
 
58
63
  /*
@@ -1,6 +1,6 @@
1
1
  import { ASCError } from '~/core/errors';
2
2
  import { getUserMarker } from '~/marker/api';
3
- import { onUserMarkerFetched } from '~/marker/events';
3
+ import { onUserMarkerFetchedLegacy } from '~/marker/events';
4
4
  import { liveObject } from '~/utils/liveObject';
5
5
 
6
6
  import { getActiveUser } from '../api';
@@ -37,7 +37,17 @@ export const getTotalUnreadCount = (
37
37
 
38
38
  const callbackDataSelector = (data: Amity.UserMarker | undefined) => data?.unreadCount ?? 0;
39
39
 
40
- return liveObject(userId, callback, 'userId', getUserMarker, [onUserMarkerFetched], {
41
- callbackDataSelector,
42
- });
40
+ return liveObject(
41
+ userId,
42
+ callback,
43
+ 'userId',
44
+ async (): Promise<Amity.Cached<Amity.UserMarker>> => {
45
+ const { data: userMarker, cachedAt } = await getUserMarker();
46
+ return { data: userMarker as Amity.UserMarker, cachedAt };
47
+ },
48
+ [onUserMarkerFetchedLegacy],
49
+ {
50
+ callbackDataSelector,
51
+ },
52
+ );
43
53
  };
@@ -1,9 +1,13 @@
1
- import { ASCError } from '~/core/errors';
1
+ import { ASCApiError, ASCError } from '~/core/errors';
2
2
  import { getUserMarker } from '~/marker/api';
3
3
  import { onUserMarkerFetched } from '~/marker/events';
4
- import { liveObject } from '~/utils/liveObject';
5
4
 
6
- import { getActiveUser } from '../api';
5
+ import { getActiveClient, getActiveUser } from '../api';
6
+ import { createQuery, runQuery } from '~/core/query';
7
+ import {
8
+ UNSYNCED_OBJECT_CACHED_AT_MESSAGE,
9
+ UNSYNCED_OBJECT_CACHED_AT_VALUE,
10
+ } from '~/utils/constants';
7
11
 
8
12
  /**
9
13
  *
@@ -34,14 +38,94 @@ export const getUserUnread = (
34
38
  Amity.ErrorLevel.ERROR,
35
39
  );
36
40
 
37
- const callbackDataSelector = (data: Amity.UserMarker | undefined) => {
38
- return {
39
- unreadCount: data?.unreadCount ?? 0,
40
- hasMentioned: !!data?.hasMentioned,
41
- };
41
+ const { log, cache } = getActiveClient();
42
+
43
+ if (!cache) {
44
+ console.log('For using Live Object feature you need to enable Cache!');
45
+ }
46
+
47
+ const timestamp = Date.now();
48
+ log(`liveUserUnread(tmpid: ${timestamp}) > listen`);
49
+
50
+ const disposers: Amity.Unsubscriber[] = [];
51
+
52
+ let isUnsyncedModel = false; // for messages
53
+
54
+ const dispatcher = (data: Amity.LiveObject<Amity.UserMarker>) => {
55
+ const userUnread = data.data;
56
+
57
+ callback({
58
+ data: {
59
+ hasMentioned: userUnread.hasMentioned,
60
+ unreadCount: userUnread.unreadCount,
61
+ },
62
+ loading: data.loading,
63
+ error: data.error,
64
+ });
65
+ };
66
+
67
+ const realtimeRouter = (userMarkers: Amity.UserMarker[]) => {
68
+ const filterUserMarkers = userMarkers.filter(userMarker => userId === userMarker.userId);
69
+
70
+ const latestUserMarker = filterUserMarkers.reduce((currentMaxUserMarker, userMarker) => {
71
+ if (
72
+ currentMaxUserMarker == null ||
73
+ new Date(userMarker.lastSyncAt).getTime() >
74
+ new Date(currentMaxUserMarker.lastSyncAt).getTime()
75
+ ) {
76
+ return userMarker;
77
+ }
78
+ return currentMaxUserMarker;
79
+ }, null as Amity.UserMarker | null);
80
+
81
+ dispatcher({
82
+ loading: false,
83
+ data: {
84
+ unreadCount: latestUserMarker?.unreadCount ?? 0,
85
+ hasMentioned: filterUserMarkers.some(userMarker => !!userMarker.hasMentioned),
86
+ } as Amity.UserMarker,
87
+ });
42
88
  };
43
89
 
44
- return liveObject(userId, callback, 'userId', getUserMarker, [onUserMarkerFetched], {
45
- callbackDataSelector,
46
- });
90
+ function isAmityUserMarkerData(data: unknown): data is Amity.UserMarker {
91
+ if (data == null) return false;
92
+ return (data as { data: Amity.UserMarker })?.data != null;
93
+ }
94
+
95
+ const onFetch = () => {
96
+ const query = createQuery(getUserMarker);
97
+
98
+ runQuery(query, ({ error, data, loading, origin, cachedAt }) => {
99
+ if (!isAmityUserMarkerData(data)) return;
100
+ if (cachedAt === UNSYNCED_OBJECT_CACHED_AT_VALUE) {
101
+ dispatcher({
102
+ data,
103
+ origin,
104
+ loading: false,
105
+ error: new ASCApiError(
106
+ UNSYNCED_OBJECT_CACHED_AT_MESSAGE,
107
+ Amity.ClientError.DISALOOW_UNSYNCED_OBJECT,
108
+ Amity.ErrorLevel.ERROR,
109
+ ),
110
+ });
111
+
112
+ isUnsyncedModel = true;
113
+ disposers.forEach(fn => fn());
114
+ } else if (!isUnsyncedModel) {
115
+ dispatcher({ loading, data, origin, error });
116
+ }
117
+
118
+ if (error) {
119
+ disposers.forEach(fn => fn());
120
+ }
121
+ });
122
+ };
123
+
124
+ disposers.push(onUserMarkerFetched(userMarkers => realtimeRouter(userMarkers)));
125
+
126
+ onFetch();
127
+
128
+ return () => {
129
+ disposers.forEach(fn => fn());
130
+ };
47
131
  };
@@ -0,0 +1,22 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+ import { checkUserPermission } from './checkUserPermission';
3
+
4
+ export const checkChannelPermission = (
5
+ userId: Amity.User['userId'] | undefined,
6
+ permission: string,
7
+ channelId: Amity.Channel['channelId'],
8
+ ) => {
9
+ if (!userId) return false;
10
+
11
+ const member = pullFromCache<Amity.Membership<'channel'>>([
12
+ 'channelUsers',
13
+ 'get',
14
+ `${channelId}#${userId}`,
15
+ ])?.data;
16
+
17
+ if (!member) return false;
18
+
19
+ if (member.permissions.some(x => x === permission)) return true;
20
+
21
+ return checkUserPermission(userId, permission);
22
+ };
@@ -0,0 +1,22 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+ import { checkUserPermission } from './checkUserPermission';
3
+
4
+ export const checkCommunityPermission = (
5
+ userId: Amity.User['userId'] | undefined,
6
+ permission: string,
7
+ communityId: Amity.Community['communityId'],
8
+ ) => {
9
+ if (!userId) return false;
10
+
11
+ const member = pullFromCache<Amity.Membership<'community'>>([
12
+ 'communityUsers',
13
+ 'get',
14
+ `${communityId}#${userId}`,
15
+ ])?.data;
16
+
17
+ if (!member) return false;
18
+
19
+ if (member.permissions.some(x => x === permission)) return true;
20
+
21
+ return checkUserPermission(userId, permission);
22
+ };
@@ -0,0 +1,12 @@
1
+ import { pullFromCache } from '~/cache/api';
2
+
3
+ export const checkUserPermission = (
4
+ userId: Amity.User['userId'] | undefined,
5
+ permission: string,
6
+ ) => {
7
+ const user = pullFromCache<Amity.User>(['users', 'get', userId])?.data;
8
+
9
+ if (!user) return false;
10
+
11
+ return user.permissions.some(x => x === permission);
12
+ };
@@ -0,0 +1,18 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { checkCommunityPermission } from '~/client/utils/hasPermission/checkCommunityPermission';
3
+ import { checkChannelPermission } from '~/client/utils/hasPermission/checkChannelPermission';
4
+ import { checkUserPermission } from '~/client/utils/hasPermission/checkUserPermission';
5
+
6
+ export const hasPermission = (permission: string) => {
7
+ const { userId } = getActiveClient();
8
+
9
+ return {
10
+ currentUser: () => checkUserPermission(userId, permission),
11
+
12
+ community: (communityId: Amity.Community['communityId']) =>
13
+ checkCommunityPermission(userId, permission, communityId),
14
+
15
+ channel: (channelId: Amity.Channel['channelId']) =>
16
+ checkChannelPermission(userId, permission, channelId),
17
+ };
18
+ };
@@ -0,0 +1 @@
1
+ export * from './hasPermission';
@@ -8,7 +8,7 @@ import { onUserMarkerSync } from '~/marker/events/onUserMarkerSync';
8
8
  import { setIntervalTask } from '~/utils/timer';
9
9
  import { getUserMarker } from '~/marker/api';
10
10
  import { onFeedMarkerUpdated } from '~/marker/events';
11
- import { onMessageCreated } from '~/messageRepository/events';
11
+ import { onMessageCreatedMqtt } from '~/messageRepository/events';
12
12
  import { onSubChannelCreated, onSubChannelDeleted } from '~/subChannelRepository/events';
13
13
  import { isUnreadCountSupport } from '~/subChannelRepository/utils';
14
14
 
@@ -22,25 +22,27 @@ let isSyncRunning = false;
22
22
  let disposers: (() => void)[] = [];
23
23
  let isWaitingForResponse = false;
24
24
 
25
- let deviceLastSyncAt: string | null = null;
25
+ let deviceLastSyncAt: Date | null = null;
26
26
 
27
27
  const getDeviceLastSyncAt = () => {
28
28
  if (deviceLastSyncAt == null) {
29
- return new Date().toISOString();
29
+ return new Date();
30
30
  }
31
31
 
32
32
  return deviceLastSyncAt;
33
33
  };
34
34
 
35
- const saveDeviceLastSyncAt = (lastSyncAt: string) => {
36
- if (!deviceLastSyncAt || new Date(lastSyncAt).getTime() > new Date(deviceLastSyncAt).getTime()) {
35
+ const saveDeviceLastSyncAt = (lastSyncAt: Date | null) => {
36
+ if (lastSyncAt == null) return;
37
+ if (!deviceLastSyncAt || lastSyncAt.getTime() > deviceLastSyncAt.getTime()) {
37
38
  deviceLastSyncAt = lastSyncAt;
38
39
  }
39
40
  };
40
41
 
41
42
  const fetchDeviceLastSyncAt = async () => {
42
43
  const { data: userMarker } = await getUserMarker();
43
- saveDeviceLastSyncAt(userMarker.lastSyncAt);
44
+ if (userMarker == null) return;
45
+ saveDeviceLastSyncAt(new Date(userMarker.lastSyncAt));
44
46
  };
45
47
 
46
48
  /**
@@ -84,24 +86,41 @@ export const markerSyncTrigger = async () => {
84
86
  // no event that require to call marker sync API
85
87
  return;
86
88
  }
87
-
88
- isWaitingForResponse = true;
89
-
90
- // any past events are considered processed here.
91
- // however during waiting for the response, RTE could add the new message event;
92
- // which will make the engine trigger another call next round.
93
- events = [];
94
-
95
- const response = await markerSync(getDeviceLastSyncAt());
96
-
97
- saveDeviceLastSyncAt(response.data.userMarkers[0].lastSyncAt);
98
-
99
- if (response.hasMore) {
100
- events.push(Amity.MarkerSyncEvent.HAS_MORE);
89
+ try {
90
+ isWaitingForResponse = true;
91
+ // any past events are considered processed here.
92
+ // however during waiting for the response, RTE could add the new message event;
93
+ // which will make the engine trigger another call next round.
94
+ events = [];
95
+
96
+ const response = await markerSync(getDeviceLastSyncAt().toISOString());
97
+
98
+ const latestLastSyncAt: Date | null = response.data.userMarkers.reduce(
99
+ (maxLastSyncAt, userMarker) => {
100
+ if (
101
+ maxLastSyncAt == null ||
102
+ maxLastSyncAt.getTime() < new Date(userMarker.lastSyncAt).getTime()
103
+ ) {
104
+ return new Date(userMarker.lastSyncAt);
105
+ }
106
+
107
+ return maxLastSyncAt;
108
+ },
109
+ null as Date | null,
110
+ );
111
+
112
+ saveDeviceLastSyncAt(latestLastSyncAt);
113
+
114
+ if (response.hasMore) {
115
+ events.push(Amity.MarkerSyncEvent.HAS_MORE);
116
+ }
117
+ } catch {
118
+ // prevent sync from stopping
119
+ } finally {
120
+ if (isWaitingForResponse) {
121
+ isWaitingForResponse = false;
122
+ }
101
123
  }
102
-
103
- // eslint-disable-next-line require-atomic-updates
104
- isWaitingForResponse = false;
105
124
  };
106
125
 
107
126
  const registerEventListeners = () => {
@@ -119,15 +138,10 @@ const registerEventListeners = () => {
119
138
  events.push(Amity.MarkerSyncEvent.RESUME);
120
139
  }),
121
140
 
122
- onMessageCreated(
123
- message => {
124
- // only conversation, community and broadcast types can sync
125
- if (isUnreadCountSupport(message)) events.push(Amity.MarkerSyncEvent.NEW_MESSAGE);
126
- },
127
- // only trigger sync from remote events to prevent an unread count equal `-1`
128
- // when an optimistic message creation is performed.
129
- false,
130
- ),
141
+ onMessageCreatedMqtt(message => {
142
+ // only conversation, community and broadcast types can sync
143
+ if (isUnreadCountSupport(message)) events.push(Amity.MarkerSyncEvent.NEW_MESSAGE);
144
+ }),
131
145
 
132
146
  onChannelCreated(() => events.push(Amity.MarkerSyncEvent.CHANNEL_CREATED)),
133
147
  onChannelDeleted(() => events.push(Amity.MarkerSyncEvent.CHANNEL_DELETED)),
@@ -14,7 +14,7 @@ import { getToken } from '../api/getToken';
14
14
  * @category private
15
15
  * @async
16
16
  */
17
- export const setClientToken = async (params: Parameters<typeof getToken>) => {
17
+ export const setClientToken = async (params: Parameters<typeof getToken>[0]) => {
18
18
  const client = getActiveClient();
19
19
  // begin establishing session
20
20
  setSessionState(Amity.SessionStates.ESTABLISHING);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityJoined = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.joined', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityLeft = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.left', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserAdded = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.userAdded', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserBanned = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.userBanned', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserChanged = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, members: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.userChanged', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserRemoved = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.userRemoved', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserRoleAdded = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.roleAdded', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserRoleRemoved = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.roleRemoved', callback);
@@ -16,5 +16,5 @@ import { createCommunityMemberEventSubscriber } from './utils';
16
16
  * @category Community Events
17
17
  */
18
18
  export const onCommunityUserUnbanned = (
19
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
19
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>[]) => void,
20
20
  ) => createCommunityMemberEventSubscriber('community.userUnbanned', callback);
@@ -6,6 +6,7 @@ import { getResolver } from '~/core/model';
6
6
 
7
7
  import { prepareCommunityPayload } from '../../utils';
8
8
  import { updateMembershipStatus } from '../../utils/communityWithMembership';
9
+ import { isNonNullable } from '~/utils';
9
10
 
10
11
  function hasPermission(
11
12
  member: Amity.Membership<'community'>,
@@ -31,30 +32,30 @@ function getEventRelatedMember(
31
32
  },
32
33
  ) {
33
34
  if (event === 'community.joined' || event === 'community.left') {
34
- return payload.communityUsers![0];
35
+ return payload.communityUsers;
35
36
  }
36
37
 
37
38
  // NOTE: backend returns the one who took the action and the one on whom
38
39
  // the action was taken. We need the 2nd one
39
40
  if (event === 'community.userRemoved') {
40
- return payload.communityUsers!.filter(x => x.communityMembership === 'none')[0];
41
+ return payload.communityUsers!.filter(x => x.communityMembership === 'none');
41
42
  }
42
43
 
43
44
  if (event === 'community.userBanned') {
44
- return payload.communityUsers!.filter(x => x.communityMembership === 'banned')[0];
45
+ return payload.communityUsers!.filter(x => x.communityMembership === 'banned');
45
46
  }
46
47
 
47
48
  // NOTE: it might be that in certain edge cases permission check won't be enough
48
49
  if (event === 'community.userUnbanned') {
49
- return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'))[0];
50
+ return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'));
50
51
  }
51
52
 
52
- return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'))[0];
53
+ return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'));
53
54
  }
54
55
 
55
56
  export const createCommunityMemberEventSubscriber = (
56
57
  event: keyof Amity.MqttCommunityUserEvents,
57
- callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
58
+ callback: (community: Amity.Community, members: Amity.Membership<'community'>[]) => void,
58
59
  ) => {
59
60
  const client = getActiveClient();
60
61
 
@@ -82,13 +83,18 @@ export const createCommunityMemberEventSubscriber = (
82
83
  preparedPayload.communities[0].communityId,
83
84
  ])!;
84
85
 
85
- const member = pullFromCache<Amity.Membership<'community'>>([
86
- 'communityUsers',
87
- 'get',
88
- getResolver('communityUsers')(getEventRelatedMember(event, preparedPayload)),
89
- ])!;
90
-
91
- callback(community.data, member.data);
86
+ const members = getEventRelatedMember(event, preparedPayload)
87
+ .map(member => {
88
+ const memberCache = pullFromCache<Amity.Membership<'community'>>([
89
+ 'communityUsers',
90
+ 'get',
91
+ getResolver('communityUsers')(member),
92
+ ]);
93
+ return memberCache?.data;
94
+ })
95
+ .filter(isNonNullable);
96
+
97
+ callback(community.data, members);
92
98
  }
93
99
  };
94
100