@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.
- package/dist/@types/core/events.d.ts +15 -4
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/payload.d.ts +1 -0
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/core/permissions.d.ts +5 -0
- package/dist/@types/core/permissions.d.ts.map +1 -1
- package/dist/@types/domains/client.d.ts +1 -0
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/story.d.ts +7 -1
- package/dist/@types/domains/story.d.ts.map +1 -1
- package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -0
- package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberPaginationController.d.ts.map +1 -0
- package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberQueryStreamController.d.ts.map +1 -0
- package/dist/channelRepository/channelMembership/observers/getMembers/getMembers.d.ts.map +1 -0
- package/dist/channelRepository/channelMembership/observers/getMembers/index.d.ts +2 -0
- package/dist/channelRepository/channelMembership/observers/getMembers/index.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannels/ChannelPaginationController.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannels/ChannelPagnationNoPageController.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannels/ChannelQueryStreamController.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannels/getChannels.d.ts.map +1 -0
- package/dist/channelRepository/observers/getChannels/index.d.ts +2 -0
- package/dist/channelRepository/observers/getChannels/index.d.ts.map +1 -0
- package/dist/client/api/createClient.d.ts.map +1 -1
- package/dist/client/api/login.d.ts.map +1 -1
- package/dist/client/api/logout.d.ts.map +1 -1
- package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -1
- package/dist/client/observers/getUserUnread.d.ts.map +1 -1
- package/dist/client/utils/hasPermission/checkChannelPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkChannelPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/checkUserPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkUserPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/hasPermission.d.ts +6 -0
- package/dist/client/utils/hasPermission/hasPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/index.d.ts +2 -0
- package/dist/client/utils/hasPermission/index.d.ts.map +1 -0
- package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
- package/dist/client/utils/setClientToken.d.ts +1 -1
- package/dist/client/utils/setClientToken.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/utils.d.ts +1 -1
- package/dist/communityRepository/communityMembership/events/utils.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
- package/dist/core/events.d.ts +3 -3
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/liveCollection/LiveCollectionController.d.ts +1 -1
- package/dist/core/liveCollection/LiveCollectionController.d.ts.map +1 -1
- package/dist/core/liveCollection/QueryStreamController.d.ts +1 -1
- package/dist/core/liveCollection/QueryStreamController.d.ts.map +1 -1
- package/dist/core/subscription.d.ts +2 -0
- package/dist/core/subscription.d.ts.map +1 -1
- package/dist/index.cjs.js +734 -114
- package/dist/index.esm.js +732 -115
- package/dist/index.umd.js +4 -4
- package/dist/marker/api/getUserMarker.d.ts +1 -1
- package/dist/marker/api/getUserMarker.d.ts.map +1 -1
- package/dist/marker/events/onChannelMarkerFetched.d.ts.map +1 -1
- package/dist/marker/events/onUserMarkerFetched.d.ts +2 -1
- package/dist/marker/events/onUserMarkerFetched.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageCreated.d.ts +2 -1
- package/dist/messageRepository/events/onMessageCreated.d.ts.map +1 -1
- package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -0
- package/dist/messageRepository/observers/getMessages/MessagePaginationController.d.ts.map +1 -0
- package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -0
- package/dist/messageRepository/observers/getMessages/getMessages.d.ts.map +1 -0
- package/dist/messageRepository/observers/getMessages/index.d.ts +2 -0
- package/dist/messageRepository/observers/getMessages/index.d.ts.map +1 -0
- package/dist/messageRepository/observers/observeMessages.d.ts.map +1 -1
- package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
- package/dist/storyRepository/constants.d.ts +1 -0
- package/dist/storyRepository/constants.d.ts.map +1 -1
- package/dist/storyRepository/events/onStoryCreated.d.ts +2 -1
- package/dist/storyRepository/events/onStoryCreated.d.ts.map +1 -1
- package/dist/storyRepository/events/onStoryDeleted.d.ts +2 -1
- package/dist/storyRepository/events/onStoryDeleted.d.ts.map +1 -1
- package/dist/storyRepository/events/onStoryReactionAdded.d.ts +3 -0
- package/dist/storyRepository/events/onStoryReactionAdded.d.ts.map +1 -0
- package/dist/storyRepository/events/onStoryReactionRemoved.d.ts +3 -0
- package/dist/storyRepository/events/onStoryReactionRemoved.d.ts.map +1 -0
- package/dist/storyRepository/events/onStoryUpdated.d.ts +2 -1
- package/dist/storyRepository/events/onStoryUpdated.d.ts.map +1 -1
- package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts +20 -0
- package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -1
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts +14 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts +5 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts +16 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts +5 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts +2 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoryByStoryId.d.ts.map +1 -1
- package/dist/storyRepository/observers/index.d.ts +1 -0
- package/dist/storyRepository/observers/index.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelQueryStreamController.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannels/getSubChannels.d.ts.map +1 -0
- package/dist/subChannelRepository/observers/getSubChannels/index.d.ts +2 -0
- package/dist/subChannelRepository/observers/getSubChannels/index.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/events.ts +16 -4
- package/src/@types/core/payload.ts +1 -0
- package/src/@types/core/permissions.ts +6 -0
- package/src/@types/domains/client.ts +2 -0
- package/src/@types/domains/story.ts +7 -0
- package/src/analytic/api/queryReachUser.ts +1 -1
- package/src/analytic/service/analytic/AnalyticsEventCapturer.ts +1 -1
- package/src/channelRepository/channelMembership/observers/{getMembers.ts → getMembers/getMembers.ts} +1 -1
- package/src/channelRepository/channelMembership/observers/getMembers/index.ts +1 -0
- package/src/channelRepository/observers/getChannel.ts +30 -2
- package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelLiveCollectionController.ts +65 -3
- package/src/channelRepository/observers/{getChannels.ts → getChannels/getChannels.ts} +1 -1
- package/src/channelRepository/observers/getChannels/index.ts +1 -0
- package/src/client/api/createClient.ts +3 -1
- package/src/client/api/login.ts +29 -6
- package/src/client/api/logout.ts +5 -0
- package/src/client/observers/getTotalUnreadCount.ts +14 -4
- package/src/client/observers/getUserUnread.ts +95 -11
- package/src/client/utils/hasPermission/checkChannelPermission.ts +22 -0
- package/src/client/utils/hasPermission/checkCommunityPermission.ts +22 -0
- package/src/client/utils/hasPermission/checkUserPermission.ts +12 -0
- package/src/client/utils/hasPermission/hasPermission.ts +18 -0
- package/src/client/utils/hasPermission/index.ts +1 -0
- package/src/client/utils/markerSyncEngine.ts +46 -32
- package/src/client/utils/setClientToken.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityJoined.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityLeft.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserAdded.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserBanned.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserChanged.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserRemoved.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserRoleAdded.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.ts +1 -1
- package/src/communityRepository/communityMembership/events/onCommunityUserUnbanned.ts +1 -1
- package/src/communityRepository/communityMembership/events/utils.ts +19 -13
- package/src/communityRepository/communityMembership/observers/getMembers.ts +18 -9
- package/src/core/liveCollection/LiveCollectionController.ts +2 -2
- package/src/core/liveCollection/QueryStreamController.ts +1 -1
- package/src/core/subscription.ts +19 -0
- package/src/marker/api/getUserMarker.ts +15 -4
- package/src/marker/events/onChannelMarkerFetched.ts +3 -1
- package/src/marker/events/onUserMarkerFetched.ts +17 -0
- package/src/messageRepository/api/tests/createMessage.test.ts +4 -4
- package/src/messageRepository/events/onMessageCreated.ts +20 -8
- package/src/messageRepository/events/tests/events.test.ts +2 -2
- package/src/messageRepository/observers/{liveCollection → getMessages}/MessageLiveCollectionController.ts +2 -2
- package/src/messageRepository/observers/{getMessages.ts → getMessages/getMessages.ts} +4 -26
- package/src/messageRepository/observers/getMessages/index.ts +1 -0
- package/src/messageRepository/observers/observeMessages.ts +8 -2
- package/src/messageRepository/utils/prepareMessagePayload.ts +14 -4
- package/src/storyRepository/api/createImageStory.ts +3 -3
- package/src/storyRepository/api/createVideoStory.ts +3 -3
- package/src/storyRepository/constants.ts +1 -0
- package/src/storyRepository/events/onStoryCreated.ts +25 -1
- package/src/storyRepository/events/onStoryDeleted.ts +22 -1
- package/src/storyRepository/events/onStoryError.ts +1 -1
- package/src/storyRepository/events/onStoryLocalDataUpdated.ts +1 -1
- package/src/storyRepository/events/onStoryReactionAdded.ts +39 -0
- package/src/storyRepository/events/onStoryReactionRemoved.ts +39 -0
- package/src/storyRepository/events/onStoryUpdated.ts +25 -1
- package/src/storyRepository/internalApi/createStory.ts +1 -1
- package/src/storyRepository/observers/getActiveStoriesByTarget.ts +40 -3
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.ts +113 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts +18 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts +97 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.ts +32 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/index.ts +1 -0
- package/src/storyRepository/observers/getStoryByStoryId.ts +22 -2
- package/src/storyRepository/observers/index.ts +1 -0
- package/src/subChannelRepository/observers/getSubChannel.ts +35 -2
- package/src/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.ts +53 -2
- package/src/subChannelRepository/observers/{getSubChannels.ts → getSubChannels/getSubChannels.ts} +1 -1
- package/src/subChannelRepository/observers/getSubChannels/index.ts +1 -0
- package/src/utils/index.ts +4 -0
- package/dist/channelRepository/channelMembership/observers/getMembers.d.ts.map +0 -1
- package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberLiveCollectionController.d.ts.map +0 -1
- package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberPaginationController.d.ts.map +0 -1
- package/dist/channelRepository/channelMembership/observers/liveCollection/ChannelMemberQueryStreamController.d.ts.map +0 -1
- package/dist/channelRepository/observers/getChannels.d.ts.map +0 -1
- package/dist/channelRepository/observers/liveCollection/ChannelLiveCollectionController.d.ts.map +0 -1
- package/dist/channelRepository/observers/liveCollection/ChannelPaginationController.d.ts.map +0 -1
- package/dist/channelRepository/observers/liveCollection/ChannelPagnationNoPageController.d.ts.map +0 -1
- package/dist/channelRepository/observers/liveCollection/ChannelQueryStreamController.d.ts.map +0 -1
- package/dist/messageRepository/observers/getMessages.d.ts.map +0 -1
- package/dist/messageRepository/observers/liveCollection/MessageLiveCollectionController.d.ts.map +0 -1
- package/dist/messageRepository/observers/liveCollection/MessagePaginationController.d.ts.map +0 -1
- package/dist/messageRepository/observers/liveCollection/MessageQueryStreamController.d.ts.map +0 -1
- package/dist/subChannelRepository/observers/getSubChannels.d.ts.map +0 -1
- /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberLiveCollectionController.d.ts +0 -0
- /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberPaginationController.d.ts +0 -0
- /package/dist/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberQueryStreamController.d.ts +0 -0
- /package/dist/channelRepository/channelMembership/observers/{getMembers.d.ts → getMembers/getMembers.d.ts} +0 -0
- /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelLiveCollectionController.d.ts +0 -0
- /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelPaginationController.d.ts +0 -0
- /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelPagnationNoPageController.d.ts +0 -0
- /package/dist/channelRepository/observers/{liveCollection → getChannels}/ChannelQueryStreamController.d.ts +0 -0
- /package/dist/channelRepository/observers/{getChannels.d.ts → getChannels/getChannels.d.ts} +0 -0
- /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessageLiveCollectionController.d.ts +0 -0
- /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessagePaginationController.d.ts +0 -0
- /package/dist/messageRepository/observers/{liveCollection → getMessages}/MessageQueryStreamController.d.ts +0 -0
- /package/dist/messageRepository/observers/{getMessages.d.ts → getMessages/getMessages.d.ts} +0 -0
- /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelLiveCollectionController.d.ts +0 -0
- /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.d.ts +0 -0
- /package/dist/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelQueryStreamController.d.ts +0 -0
- /package/dist/subChannelRepository/observers/{getSubChannels.d.ts → getSubChannels/getSubChannels.d.ts} +0 -0
- /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberLiveCollectionController.ts +0 -0
- /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberPaginationController.ts +0 -0
- /package/src/channelRepository/channelMembership/observers/{liveCollection → getMembers}/ChannelMemberQueryStreamController.ts +0 -0
- /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelPaginationController.ts +0 -0
- /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelPagnationNoPageController.ts +0 -0
- /package/src/channelRepository/observers/{liveCollection → getChannels}/ChannelQueryStreamController.ts +0 -0
- /package/src/messageRepository/observers/{liveCollection → getMessages}/MessagePaginationController.ts +0 -0
- /package/src/messageRepository/observers/{liveCollection → getMessages}/MessageQueryStreamController.ts +0 -0
- /package/src/subChannelRepository/observers/{liveCollection → getSubChannels}/SubChannelPaginationController.ts +0 -0
- /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 './
|
|
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,
|
package/src/client/api/login.ts
CHANGED
|
@@ -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
|
-
|
|
88
|
+
const defaultDeviceId = await getDeviceId();
|
|
88
89
|
|
|
89
90
|
try {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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 =
|
|
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(
|
|
139
|
+
setActiveUser(user);
|
|
117
140
|
} catch (error) {
|
|
118
141
|
/*
|
|
119
142
|
* if getting token failed session state reverts to initial state when app
|
package/src/client/api/logout.ts
CHANGED
|
@@ -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 {
|
|
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(
|
|
41
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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 {
|
|
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:
|
|
25
|
+
let deviceLastSyncAt: Date | null = null;
|
|
26
26
|
|
|
27
27
|
const getDeviceLastSyncAt = () => {
|
|
28
28
|
if (deviceLastSyncAt == null) {
|
|
29
|
-
return new Date()
|
|
29
|
+
return new Date();
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
return deviceLastSyncAt;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
const saveDeviceLastSyncAt = (lastSyncAt:
|
|
36
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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,
|
|
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
|
|
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')
|
|
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')
|
|
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'))
|
|
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'))
|
|
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,
|
|
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
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|