@amityco/ts-sdk 6.17.3 → 6.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@types/core/events.d.ts +4 -2
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/marker.d.ts +12 -1
- package/dist/@types/core/marker.d.ts.map +1 -1
- package/dist/@types/core/model.d.ts +6 -2
- package/dist/@types/core/model.d.ts.map +1 -1
- package/dist/@types/core/payload.d.ts +20 -3
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/core/readReceipt.d.ts +21 -0
- package/dist/@types/core/readReceipt.d.ts.map +1 -0
- package/dist/@types/domains/channel.d.ts +11 -1
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/@types/domains/client.d.ts +12 -2
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/community.d.ts +1 -3
- package/dist/@types/domains/community.d.ts.map +1 -1
- package/dist/@types/domains/group.d.ts +2 -2
- package/dist/@types/domains/group.d.ts.map +1 -1
- package/dist/@types/domains/marker.d.ts +15 -0
- package/dist/@types/domains/marker.d.ts.map +1 -1
- package/dist/@types/domains/message.d.ts +4 -0
- package/dist/@types/domains/message.d.ts.map +1 -1
- package/dist/@types/domains/story.d.ts +20 -3
- package/dist/@types/domains/story.d.ts.map +1 -1
- package/dist/@types/domains/subChannel.d.ts +4 -0
- package/dist/@types/domains/subChannel.d.ts.map +1 -1
- package/dist/channelRepository/api/markAsRead.d.ts.map +1 -1
- package/dist/channelRepository/channelModeration/api/index.d.ts +2 -0
- package/dist/channelRepository/channelModeration/api/index.d.ts.map +1 -1
- package/dist/channelRepository/channelModeration/api/muteMembers.d.ts +17 -0
- package/dist/channelRepository/channelModeration/api/muteMembers.d.ts.map +1 -0
- package/dist/channelRepository/channelModeration/api/unmuteMembers.d.ts +16 -0
- package/dist/channelRepository/channelModeration/api/unmuteMembers.d.ts.map +1 -0
- package/dist/channelRepository/events/onChannelDeleted.d.ts.map +1 -1
- package/dist/channelRepository/events/onChannelLeft.d.ts.map +1 -1
- package/dist/channelRepository/events/onChannelMemberBanned.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannels/ChannelQueryStreamController.d.ts.map +1 -1
- package/dist/channelRepository/utils/getChannelIsMentioned.d.ts +10 -0
- package/dist/channelRepository/utils/getChannelIsMentioned.d.ts.map +1 -0
- package/dist/channelRepository/utils/getSubChannelsUnreadCount.d.ts +10 -0
- package/dist/channelRepository/utils/getSubChannelsUnreadCount.d.ts.map +1 -0
- package/dist/channelRepository/utils/prepareChannelPayload.d.ts.map +1 -1
- package/dist/client/api/accessTokenExpiryWatcher.d.ts +1 -1
- package/dist/client/api/accessTokenExpiryWatcher.d.ts.map +1 -1
- package/dist/client/api/createClient.d.ts.map +1 -1
- package/dist/client/api/enableUnreadCount.d.ts +2 -0
- package/dist/client/api/enableUnreadCount.d.ts.map +1 -0
- package/dist/client/api/index.d.ts +1 -0
- package/dist/client/api/index.d.ts.map +1 -1
- package/dist/client/api/login.d.ts.map +1 -1
- package/dist/client/api/markerSync.d.ts.map +1 -1
- package/dist/client/api/renewal.d.ts.map +1 -1
- package/dist/client/api/validateTexts.d.ts +8 -0
- package/dist/client/api/validateTexts.d.ts.map +1 -0
- package/dist/client/api/validateUrls.d.ts +8 -0
- package/dist/client/api/validateUrls.d.ts.map +1 -0
- package/dist/client/observers/getUserUnread.d.ts +1 -1
- package/dist/client/observers/getUserUnread.d.ts.map +1 -1
- package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngine.d.ts +33 -0
- package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngine.d.ts.map +1 -0
- package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.d.ts +3 -0
- package/dist/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.d.ts.map +1 -0
- package/dist/client/utils/markerSyncEngine.d.ts +2 -0
- package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
- package/dist/client/utils/setClientToken.d.ts.map +1 -1
- package/dist/client/utils/subscribeGlobalTopic.d.ts.map +1 -1
- package/dist/commentRepository/api/deleteComment.d.ts.map +1 -1
- package/dist/commentRepository/api/queryComments.d.ts.map +1 -1
- package/dist/commentRepository/events/utils.d.ts.map +1 -1
- package/dist/commentRepository/internalApi/queryComments.d.ts.map +1 -1
- package/dist/commentRepository/utils/convertToInternalComment.d.ts +8 -0
- package/dist/commentRepository/utils/convertToInternalComment.d.ts.map +1 -0
- package/dist/core/events.d.ts +3 -3
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/model/idResolvers.d.ts.map +1 -1
- package/dist/core/model/index.d.ts.map +1 -1
- package/dist/core/query/sorting.d.ts +6 -0
- package/dist/core/query/sorting.d.ts.map +1 -1
- package/dist/core/subscription.d.ts +1 -0
- package/dist/core/subscription.d.ts.map +1 -1
- package/dist/index.cjs.js +5745 -4474
- package/dist/index.esm.js +5183 -3914
- package/dist/index.umd.js +4 -4
- package/dist/marker/api/getChannelMarkers.d.ts.map +1 -1
- package/dist/marker/api/getMessageMarkers.d.ts.map +1 -1
- package/dist/marker/api/getSubChannelMarkers.d.ts.map +1 -1
- package/dist/marker/api/getUserMarker.d.ts +1 -1
- package/dist/marker/api/getUserMarker.d.ts.map +1 -1
- package/dist/marker/api/getUserMessageFeedMarkers.d.ts +18 -0
- package/dist/marker/api/getUserMessageFeedMarkers.d.ts.map +1 -0
- package/dist/marker/events/onMessageMarked.d.ts.map +1 -1
- package/dist/marker/events/onUserFeedMarkerUpdated.d.ts +17 -0
- package/dist/marker/events/onUserFeedMarkerUpdated.d.ts.map +1 -0
- package/dist/marker/events/onUserMarkerSync.d.ts.map +1 -1
- package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.d.ts +2 -0
- package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.d.ts.map +1 -0
- package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.d.ts +2 -0
- package/dist/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.d.ts.map +1 -0
- package/dist/marker/utils/deleteChannelUnreadByChannelId.d.ts +2 -0
- package/dist/marker/utils/deleteChannelUnreadByChannelId.d.ts.map +1 -0
- package/dist/marker/utils/persistUnreadCountInfo.d.ts +2 -0
- package/dist/marker/utils/persistUnreadCountInfo.d.ts.map +1 -0
- package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts +2 -0
- package/dist/marker/utils/reCalculateChannelUnreadInfo.d.ts.map +1 -0
- package/dist/marker/utils/updateSubChannelUnreadFromMessage.d.ts +2 -0
- package/dist/marker/utils/updateSubChannelUnreadFromMessage.d.ts.map +1 -0
- package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts +1 -0
- package/dist/messagePreview/utils/getSubChannelMessagePreviewWithUser.d.ts.map +1 -1
- package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts +2 -2
- package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/createMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/deleteMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/editMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/getMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/getMessages.d.ts.map +1 -1
- package/dist/messageRepository/api/markAsDelivered.d.ts.map +1 -1
- package/dist/messageRepository/api/queryMessages.d.ts.map +1 -1
- package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -1
- package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageCreated.d.ts +2 -2
- package/dist/messageRepository/events/onMessageCreated.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageDeleted.d.ts +1 -1
- package/dist/messageRepository/events/onMessageDeleted.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageFetched.d.ts +1 -1
- package/dist/messageRepository/events/onMessageFetched.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageFlagCleared.d.ts +1 -1
- package/dist/messageRepository/events/onMessageFlagCleared.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageFlagged.d.ts +1 -1
- package/dist/messageRepository/events/onMessageFlagged.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageReactionAdded.d.ts +1 -1
- package/dist/messageRepository/events/onMessageReactionAdded.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageReactionRemoved.d.ts +1 -1
- package/dist/messageRepository/events/onMessageReactionRemoved.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageUnflagged.d.ts +1 -1
- package/dist/messageRepository/events/onMessageUnflagged.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageUpdated.d.ts +1 -1
- package/dist/messageRepository/events/onMessageUpdated.d.ts.map +1 -1
- package/dist/messageRepository/internalApi/getMessage.d.ts +32 -0
- package/dist/messageRepository/internalApi/getMessage.d.ts.map +1 -0
- package/dist/messageRepository/internalApi/getMessages.d.ts +32 -0
- package/dist/messageRepository/internalApi/getMessages.d.ts.map +1 -0
- package/dist/messageRepository/observers/getMessage.d.ts.map +1 -1
- package/dist/messageRepository/observers/getMessages/MessageLiveCollectionController.d.ts.map +1 -1
- package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts +2 -2
- package/dist/messageRepository/observers/getMessages/MessageQueryStreamController.d.ts.map +1 -1
- package/dist/messageRepository/observers/observeMessage.d.ts.map +1 -1
- package/dist/messageRepository/observers/observeMessages.d.ts.map +1 -1
- package/dist/messageRepository/utils/getMessageReadCount.d.ts +1 -1
- package/dist/messageRepository/utils/getMessageReadCount.d.ts.map +1 -1
- package/dist/messageRepository/utils/prepareMessagePayload.d.ts +1 -1
- package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactionAdded.d.ts +1 -1
- package/dist/reactionRepository/events/onReactionAdded.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactionRemoved.d.ts +1 -1
- package/dist/reactionRepository/events/onReactionRemoved.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactorAdded.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactorRemoved.d.ts.map +1 -1
- package/dist/reactionRepository/utils/fetchReference.d.ts +1 -1
- package/dist/reactionRepository/utils/fetchReference.d.ts.map +1 -1
- package/dist/reactionRepository/utils/prepareMessagePayloadForCache.d.ts +1 -1
- package/dist/reactionRepository/utils/prepareMessagePayloadForCache.d.ts.map +1 -1
- package/dist/reactionRepository/utils/prepareReactionPayloadFormEvent.d.ts +1 -0
- package/dist/reactionRepository/utils/prepareReactionPayloadFormEvent.d.ts.map +1 -1
- package/dist/storyRepository/api/createImageStory.d.ts.map +1 -1
- package/dist/storyRepository/api/createVideoStory.d.ts.map +1 -1
- package/dist/storyRepository/constants.d.ts +2 -0
- package/dist/storyRepository/constants.d.ts.map +1 -1
- package/dist/storyRepository/events/onStoryReactionAdded.d.ts.map +1 -1
- package/dist/storyRepository/events/onStoryReactionRemoved.d.ts.map +1 -1
- package/dist/storyRepository/internalApi/getStoryByStoryId.d.ts.map +1 -1
- package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -1
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts +14 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.d.ts +13 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts +16 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.d.ts +2 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.d.ts.map +1 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/index.d.ts +2 -0
- package/dist/storyRepository/observers/getGlobalStoryTargets/index.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.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/storyRepository/utils/StoryComputedValue.d.ts +21 -0
- package/dist/storyRepository/utils/StoryComputedValue.d.ts.map +1 -0
- package/dist/storyRepository/utils/convertRawToStory.d.ts +2 -2
- package/dist/storyRepository/utils/convertRawToStory.d.ts.map +1 -1
- package/dist/storyRepository/utils/convertStoryPayloadToRaw.d.ts.map +1 -1
- package/dist/subChannelRepository/api/markAsReadBySegment.d.ts +16 -0
- package/dist/subChannelRepository/api/markAsReadBySegment.d.ts.map +1 -0
- package/dist/subChannelRepository/api/readingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/events/onSubChannelCreated.d.ts.map +1 -1
- package/dist/subChannelRepository/events/onSubChannelDeleted.d.ts.map +1 -1
- package/dist/subChannelRepository/index.d.ts +1 -0
- package/dist/subChannelRepository/index.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/convertSubChannelFromRaw.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/getSubChannelIsMentioned.d.ts +2 -0
- package/dist/subChannelRepository/utils/getSubChannelIsMentioned.d.ts.map +1 -0
- package/dist/subChannelRepository/utils/getSubChannelUnreadCount.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/markReadEngine.d.ts +2 -0
- package/dist/subChannelRepository/utils/markReadEngine.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/messageReceiptSync.d.ts +31 -0
- package/dist/subChannelRepository/utils/messageReceiptSync.d.ts.map +1 -0
- package/dist/subChannelRepository/utils/persistOptimisticUnreadInfo.d.ts +2 -0
- package/dist/subChannelRepository/utils/persistOptimisticUnreadInfo.d.ts.map +1 -0
- package/dist/utils/linkedObject/index.d.ts +1 -0
- package/dist/utils/linkedObject/index.d.ts.map +1 -1
- package/dist/utils/linkedObject/messageLinkedObject.d.ts +2 -0
- package/dist/utils/linkedObject/messageLinkedObject.d.ts.map +1 -0
- package/dist/utils/linkedObject/storyLinkedObject.d.ts.map +1 -1
- package/dist/utils/linkedObject/storyTargetLinkedObject.d.ts.map +1 -1
- package/dist/utils/marker.d.ts +0 -1
- package/dist/utils/marker.d.ts.map +1 -1
- package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
- package/dist/utils/tests/dummy/community.d.ts +1 -1
- package/dist/utils/tests/dummy/marker.d.ts +1 -0
- package/dist/utils/tests/dummy/marker.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/events.ts +4 -2
- package/src/@types/core/marker.ts +13 -1
- package/src/@types/core/model.ts +8 -2
- package/src/@types/core/payload.ts +26 -3
- package/src/@types/core/readReceipt.ts +23 -0
- package/src/@types/domains/channel.ts +11 -1
- package/src/@types/domains/client.ts +14 -6
- package/src/@types/domains/community.ts +2 -3
- package/src/@types/domains/group.ts +2 -2
- package/src/@types/domains/marker.ts +17 -0
- package/src/@types/domains/message.ts +6 -0
- package/src/@types/domains/story.ts +26 -4
- package/src/@types/domains/subChannel.ts +4 -0
- package/src/channelRepository/api/markAsRead.ts +3 -7
- package/src/channelRepository/channelModeration/api/index.ts +3 -0
- package/src/channelRepository/channelModeration/api/muteMembers.ts +47 -0
- package/src/channelRepository/channelModeration/api/unmuteMembers.ts +43 -0
- package/src/channelRepository/events/onChannelCreated.ts +1 -1
- package/src/channelRepository/events/onChannelDeleted.ts +9 -0
- package/src/channelRepository/events/onChannelJoined.ts +1 -1
- package/src/channelRepository/events/onChannelLeft.ts +10 -1
- package/src/channelRepository/events/onChannelMemberAdded.ts +1 -1
- package/src/channelRepository/events/onChannelMemberBanned.ts +17 -0
- package/src/channelRepository/events/onChannelMemberRemoved.ts +1 -1
- package/src/channelRepository/events/onChannelMemberRoleAdded.ts +1 -1
- package/src/channelRepository/events/onChannelMemberRoleRemoved.ts +1 -1
- package/src/channelRepository/events/onChannelMemberUnbanned.ts +1 -1
- package/src/channelRepository/events/onChannelMuted.ts +1 -1
- package/src/channelRepository/events/onChannelUpdated.ts +1 -1
- package/src/channelRepository/observers/getChannel.ts +12 -8
- package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +44 -11
- package/src/channelRepository/observers/getChannels/ChannelQueryStreamController.ts +4 -1
- package/src/channelRepository/utils/getChannelIsMentioned.ts +42 -0
- package/src/channelRepository/utils/getSubChannelsUnreadCount.ts +50 -0
- package/src/channelRepository/utils/prepareChannelPayload.ts +25 -4
- package/src/channelRepository/utils/tests/prepareChannelPayload.test.ts +6 -0
- package/src/client/api/accessTokenExpiryWatcher.ts +7 -2
- package/src/client/api/createClient.ts +11 -0
- package/src/client/api/enableUnreadCount.ts +24 -0
- package/src/client/api/index.ts +2 -0
- package/src/client/api/login.ts +7 -5
- package/src/client/api/markerSync.ts +2 -7
- package/src/client/api/renewal.ts +2 -5
- package/src/client/api/validateTexts.ts +23 -0
- package/src/client/api/validateUrls.ts +23 -0
- package/src/client/observers/getUserUnread.ts +38 -13
- package/src/client/utils/ReadReceiptSync/readReceiptSyncEngine.ts +259 -0
- package/src/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler.ts +21 -0
- package/src/client/utils/markerSyncEngine.ts +30 -5
- package/src/client/utils/setClientToken.ts +0 -2
- package/src/client/utils/subscribeGlobalTopic.ts +2 -0
- package/src/commentRepository/api/deleteComment.ts +29 -12
- package/src/commentRepository/api/queryComments.ts +4 -2
- package/src/commentRepository/events/utils.ts +1 -2
- package/src/commentRepository/internalApi/queryComments.ts +4 -3
- package/src/commentRepository/utils/convertToInternalComment.ts +17 -0
- package/src/core/model/idResolvers.ts +3 -0
- package/src/core/model/index.ts +3 -0
- package/src/core/query/sorting.ts +8 -0
- package/src/core/subscription.ts +6 -0
- package/src/marker/api/getChannelMarkers.ts +2 -4
- package/src/marker/api/getMessageMarkers.ts +1 -5
- package/src/marker/api/getSubChannelMarkers.ts +12 -7
- package/src/marker/api/getUserMarker.ts +3 -10
- package/src/marker/api/getUserMessageFeedMarkers.ts +35 -0
- package/src/marker/api/tests/getSubChannelMarkers.test.ts +7 -0
- package/src/marker/events/onChannelMarkerFetched.ts +1 -1
- package/src/marker/events/onChannelMarkerUpdated.ts +1 -1
- package/src/marker/events/onFeedlMarkerFetched.ts +1 -1
- package/src/marker/events/onFeedlMarkerUpdated.ts +1 -1
- package/src/marker/events/onMessageMarked.ts +28 -12
- package/src/marker/events/onMessageMarkerFetched.ts +1 -1
- package/src/marker/events/onSubChannelMarkerFetched.ts +1 -1
- package/src/marker/events/onSubChannelMarkerUpdated.ts +1 -1
- package/src/marker/events/onUserFeedMarkerUpdated.ts +38 -0
- package/src/marker/events/onUserMarkerFetched.ts +1 -1
- package/src/marker/events/onUserMarkerSync.ts +3 -8
- package/src/marker/utils/addFlagIsDeletedSubChannelUnreadByChannelId.ts +19 -0
- package/src/marker/utils/addFlagIsDeletedSubChannelUnreadBySubChannelId.ts +13 -0
- package/src/marker/utils/deleteChannelUnreadByChannelId.ts +11 -0
- package/src/marker/utils/persistUnreadCountInfo.ts +47 -0
- package/src/marker/utils/reCalculateChannelUnreadInfo.ts +37 -0
- package/src/marker/utils/updateSubChannelUnreadFromMessage.ts +40 -0
- package/src/messagePreview/utils/updateMessagePreviewFromMessage.ts +2 -2
- package/src/messageRepository/api/createMessage.ts +6 -4
- package/src/messageRepository/api/deleteMessage.ts +6 -5
- package/src/messageRepository/api/editMessage.ts +5 -4
- package/src/messageRepository/api/getMessage.ts +2 -1
- package/src/messageRepository/api/getMessages.ts +2 -1
- package/src/messageRepository/api/markAsDelivered.ts +2 -6
- package/src/messageRepository/api/queryMessages.ts +8 -1
- package/src/messageRepository/api/softDeleteMessage.ts +6 -5
- package/src/messageRepository/api/updateMessage.ts +5 -4
- package/src/messageRepository/events/onMessageCreated.ts +12 -2
- package/src/messageRepository/events/onMessageDeleted.ts +4 -2
- package/src/messageRepository/events/onMessageFetched.ts +3 -1
- package/src/messageRepository/events/onMessageFlagCleared.ts +1 -1
- package/src/messageRepository/events/onMessageFlagged.ts +4 -2
- package/src/messageRepository/events/onMessageReactionAdded.ts +1 -1
- package/src/messageRepository/events/onMessageReactionRemoved.ts +1 -1
- package/src/messageRepository/events/onMessageUnflagged.ts +3 -1
- package/src/messageRepository/events/onMessageUpdated.ts +4 -2
- package/src/messageRepository/events/tests/events.test.ts +4 -1
- package/src/messageRepository/internalApi/getMessage.ts +101 -0
- package/src/messageRepository/internalApi/getMessages.ts +82 -0
- package/src/messageRepository/observers/getMessage.ts +10 -2
- package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +4 -2
- package/src/messageRepository/observers/getMessages/MessageQueryStreamController.ts +2 -2
- package/src/messageRepository/observers/observeMessage.ts +13 -4
- package/src/messageRepository/observers/observeMessages.ts +19 -6
- package/src/messageRepository/utils/getMessageReadCount.ts +5 -4
- package/src/messageRepository/utils/prepareMessagePayload.ts +6 -10
- package/src/reactionRepository/events/onReactionAdded.ts +1 -0
- package/src/reactionRepository/events/onReactorAdded.ts +13 -0
- package/src/reactionRepository/events/onReactorRemoved.ts +13 -0
- package/src/reactionRepository/utils/fetchReference.ts +1 -1
- package/src/reactionRepository/utils/prepareMessagePayloadForCache.ts +1 -1
- package/src/reactionRepository/utils/prepareReactionPayloadFormEvent.ts +68 -15
- package/src/storyRepository/api/createImageStory.ts +7 -0
- package/src/storyRepository/api/createVideoStory.ts +7 -0
- package/src/storyRepository/constants.ts +2 -0
- package/src/storyRepository/events/onStoryCreated.ts +2 -2
- package/src/storyRepository/events/onStoryDeleted.ts +2 -2
- package/src/storyRepository/events/onStoryReactionAdded.ts +11 -5
- package/src/storyRepository/events/onStoryReactionRemoved.ts +11 -5
- package/src/storyRepository/events/onStoryUpdated.ts +2 -2
- package/src/storyRepository/internalApi/createStory.ts +2 -2
- package/src/storyRepository/internalApi/deleteStory.ts +1 -1
- package/src/storyRepository/internalApi/getActiveStoriesByTarget.ts +2 -2
- package/src/storyRepository/internalApi/getStoryByStoryId.ts +2 -1
- package/src/storyRepository/observers/getActiveStoriesByTarget.ts +11 -5
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +152 -0
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryPageController.ts +73 -0
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.ts +94 -0
- package/src/storyRepository/observers/getGlobalStoryTargets/getGlobalStoryTargets.ts +32 -0
- package/src/storyRepository/observers/getGlobalStoryTargets/index.ts +1 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts +0 -2
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts +2 -2
- package/src/storyRepository/observers/index.ts +1 -0
- package/src/storyRepository/utils/StoryComputedValue.ts +136 -0
- package/src/storyRepository/utils/convertRawToStory.ts +11 -4
- package/src/storyRepository/utils/convertStoryPayloadToRaw.ts +23 -0
- package/src/subChannelRepository/api/markAsReadBySegment.ts +35 -0
- package/src/subChannelRepository/api/readingAPI.ts +2 -7
- package/src/subChannelRepository/api/startReadingAPI.ts +2 -7
- package/src/subChannelRepository/api/stopReadingAPI.ts +2 -7
- package/src/subChannelRepository/events/onSubChannelCreated.ts +7 -1
- package/src/subChannelRepository/events/onSubChannelDeleted.ts +10 -1
- package/src/subChannelRepository/events/onSubChannelFetched.ts +1 -1
- package/src/subChannelRepository/index.ts +1 -0
- package/src/subChannelRepository/observers/getSubChannel.ts +10 -8
- package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts +9 -4
- package/src/subChannelRepository/utils/convertSubChannelFromRaw.ts +5 -2
- package/src/subChannelRepository/utils/{getSubChannelHasMentioned.ts → getSubChannelIsMentioned.ts} +19 -1
- package/src/subChannelRepository/utils/getSubChannelUnreadCount.ts +18 -0
- package/src/subChannelRepository/utils/markReadEngine.ts +2 -0
- package/src/subChannelRepository/utils/messageReceiptSync.ts +73 -0
- package/src/subChannelRepository/utils/persistOptimisticUnreadInfo.ts +23 -0
- package/src/utils/linkedObject/index.ts +2 -0
- package/src/utils/linkedObject/messageLinkedObject.ts +21 -0
- package/src/utils/linkedObject/storyLinkedObject.ts +2 -1
- package/src/utils/linkedObject/storyTargetLinkedObject.ts +26 -4
- package/src/utils/marker.ts +0 -6
- package/src/utils/tests/dummy/channel.ts +8 -0
- package/src/utils/tests/dummy/marker.ts +15 -1
- package/dist/channelRepository/utils/getChannelHasMentioned.d.ts +0 -7
- package/dist/channelRepository/utils/getChannelHasMentioned.d.ts.map +0 -1
- package/dist/channelRepository/utils/getChannelUnreadCount.d.ts +0 -2
- package/dist/channelRepository/utils/getChannelUnreadCount.d.ts.map +0 -1
- package/dist/storyRepository/utils/calculateHasUnseenFlag.d.ts +0 -6
- package/dist/storyRepository/utils/calculateHasUnseenFlag.d.ts.map +0 -1
- package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts +0 -2
- package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts.map +0 -1
- package/src/channelRepository/utils/getChannelHasMentioned.ts +0 -28
- package/src/channelRepository/utils/getChannelUnreadCount.ts +0 -27
- package/src/storyRepository/utils/calculateHasUnseenFlag.ts +0 -47
|
@@ -32,6 +32,8 @@ import { getChannelMessagePreviewWithUser } from '~/messagePreview/utils';
|
|
|
32
32
|
import { isEqual } from '~/utils/isEqual';
|
|
33
33
|
import { updateChannelCache } from '../utils/updateChannelCache';
|
|
34
34
|
import { onChannelMarkerUpdated } from '~/marker/events/onChannelMarkerUpdated';
|
|
35
|
+
import { onSubChannelCreated } from '~/subChannelRepository';
|
|
36
|
+
import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
|
|
35
37
|
|
|
36
38
|
/* begin_public_function
|
|
37
39
|
id: channel.get
|
|
@@ -104,8 +106,8 @@ export const getChannel = (
|
|
|
104
106
|
convertEventPayload(onChannelMarkerFetched, 'entityId', 'channel'),
|
|
105
107
|
convertEventPayload(onChannelMarkerUpdated, 'entityId', 'channel'),
|
|
106
108
|
convertEventPayload(
|
|
107
|
-
(callback: Amity.Listener<Amity.
|
|
108
|
-
const updateMessagePreview = async (message: Amity.
|
|
109
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
110
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
109
111
|
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
110
112
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
111
113
|
|
|
@@ -129,8 +131,8 @@ export const getChannel = (
|
|
|
129
131
|
'channel',
|
|
130
132
|
),
|
|
131
133
|
convertEventPayload(
|
|
132
|
-
(callback: Amity.Listener<Amity.
|
|
133
|
-
const updateMessagePreview = async (message: Amity.
|
|
134
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
135
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
134
136
|
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
135
137
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
136
138
|
|
|
@@ -154,8 +156,8 @@ export const getChannel = (
|
|
|
154
156
|
'channel',
|
|
155
157
|
),
|
|
156
158
|
convertEventPayload(
|
|
157
|
-
(callback: Amity.Listener<Amity.
|
|
158
|
-
const updateMessagePreview = async (message: Amity.
|
|
159
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
160
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
159
161
|
const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
|
|
160
162
|
if (!channel || channel.messagePreviewId !== message.messageId) return;
|
|
161
163
|
|
|
@@ -174,8 +176,8 @@ export const getChannel = (
|
|
|
174
176
|
'channel',
|
|
175
177
|
),
|
|
176
178
|
convertEventPayload(
|
|
177
|
-
(callback: Amity.Listener<Amity.
|
|
178
|
-
const updateMessagePreview = async (message: Amity.
|
|
179
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
180
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
179
181
|
const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
|
|
180
182
|
if (!channel || channel.messagePreviewId !== message.messageId) return;
|
|
181
183
|
|
|
@@ -262,6 +264,8 @@ export const getChannel = (
|
|
|
262
264
|
'channelId',
|
|
263
265
|
'channel',
|
|
264
266
|
),
|
|
267
|
+
convertEventPayload(onSubChannelCreated, 'channelId', 'channel'),
|
|
268
|
+
convertEventPayload(onUserFeedMarkerUpdated, 'entityId', 'channel'),
|
|
265
269
|
],
|
|
266
270
|
{
|
|
267
271
|
forceDispatch: true,
|
|
@@ -46,6 +46,8 @@ import { getActiveClient } from '~/client';
|
|
|
46
46
|
import { prepareChannelPayload } from '~/channelRepository/utils';
|
|
47
47
|
import { ChannelPaginationNoPageController } from './ChannelPagnationNoPageController';
|
|
48
48
|
import { PaginationController } from '~/core/liveCollection/PaginationController';
|
|
49
|
+
import { onUserFeedMarkerUpdated } from '~/marker/events/onUserFeedMarkerUpdated';
|
|
50
|
+
import { onSubChannelCreated } from '~/subChannelRepository';
|
|
49
51
|
|
|
50
52
|
export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
51
53
|
'channel',
|
|
@@ -225,7 +227,7 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
225
227
|
{
|
|
226
228
|
// TODO: merge this code to another onMessageCreated in this file
|
|
227
229
|
fn: convertEventPayload(
|
|
228
|
-
(callback: Amity.Listener<Amity.
|
|
230
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
229
231
|
return onMessageCreatedMqtt(message => {
|
|
230
232
|
const cacheData = pullFromCache<Amity.Channel>([
|
|
231
233
|
'channel',
|
|
@@ -250,7 +252,7 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
250
252
|
{
|
|
251
253
|
// TODO: merge this code to another onMessageCreated in this file
|
|
252
254
|
fn: convertEventPayload(
|
|
253
|
-
(callback: Amity.Listener<Amity.
|
|
255
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
254
256
|
return onMessageCreatedLocal(message => {
|
|
255
257
|
const cacheData = pullFromCache<Amity.Channel>([
|
|
256
258
|
'channel',
|
|
@@ -276,7 +278,30 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
276
278
|
{ fn: onChannelUpdated, action: 'onUpdate' },
|
|
277
279
|
{ fn: onChannelMuted, action: 'onMute' },
|
|
278
280
|
{ fn: onChannelJoined, action: 'onJoin' },
|
|
279
|
-
{
|
|
281
|
+
{
|
|
282
|
+
fn: (reactor: Amity.Listener<Amity.InternalChannel>) => {
|
|
283
|
+
const callback = (
|
|
284
|
+
channel: Amity.InternalChannel,
|
|
285
|
+
member: Amity.Membership<'channel'>,
|
|
286
|
+
) => {
|
|
287
|
+
const { userId } = getActiveClient();
|
|
288
|
+
// if query for channel member and user is not a member, remove channelId from curren collection
|
|
289
|
+
if (this.query.membership === 'member' && userId === member.userId) {
|
|
290
|
+
const collection = pullFromCache<Amity.ChannelLiveCollectionCache>(
|
|
291
|
+
this.cacheKey,
|
|
292
|
+
)?.data;
|
|
293
|
+
|
|
294
|
+
pushToCache(this.cacheKey, {
|
|
295
|
+
...collection,
|
|
296
|
+
data: collection?.data.filter(c => c !== channel.channelId) ?? [],
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
return reactor(channel);
|
|
300
|
+
};
|
|
301
|
+
return onChannelLeft(callback);
|
|
302
|
+
},
|
|
303
|
+
action: 'onLeft',
|
|
304
|
+
},
|
|
280
305
|
{ fn: onChannelMemberAdded, action: 'onMemberAdded' },
|
|
281
306
|
{ fn: onChannelMemberRemoved, action: 'onMemberRemoved' },
|
|
282
307
|
{
|
|
@@ -289,8 +314,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
289
314
|
},
|
|
290
315
|
{
|
|
291
316
|
fn: convertEventPayload(
|
|
292
|
-
(callback: Amity.Listener<Amity.
|
|
293
|
-
const updateMessagePreview = async (message: Amity.
|
|
317
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
318
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
294
319
|
const messagePreviewSetting =
|
|
295
320
|
await ChannelLiveCollectionController.getMessagePreviewSetting();
|
|
296
321
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
@@ -323,8 +348,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
323
348
|
},
|
|
324
349
|
{
|
|
325
350
|
fn: convertEventPayload(
|
|
326
|
-
(callback: Amity.Listener<Amity.
|
|
327
|
-
const updateMessagePreview = async (message: Amity.
|
|
351
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
352
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
328
353
|
const messagePreviewSetting =
|
|
329
354
|
await ChannelLiveCollectionController.getMessagePreviewSetting();
|
|
330
355
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
@@ -357,8 +382,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
357
382
|
},
|
|
358
383
|
{
|
|
359
384
|
fn: convertEventPayload(
|
|
360
|
-
(callback: Amity.Listener<Amity.
|
|
361
|
-
const updateMessagePreview = async (message: Amity.
|
|
385
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
386
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
362
387
|
const messagePreviewSetting =
|
|
363
388
|
await ChannelLiveCollectionController.getMessagePreviewSetting();
|
|
364
389
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
@@ -379,8 +404,8 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
379
404
|
},
|
|
380
405
|
{
|
|
381
406
|
fn: convertEventPayload(
|
|
382
|
-
(callback: Amity.Listener<Amity.
|
|
383
|
-
const updateMessagePreview = async (message: Amity.
|
|
407
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
408
|
+
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
384
409
|
const messagePreviewSetting =
|
|
385
410
|
await ChannelLiveCollectionController.getMessagePreviewSetting();
|
|
386
411
|
|
|
@@ -464,6 +489,14 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
464
489
|
),
|
|
465
490
|
action: 'onUpdate',
|
|
466
491
|
},
|
|
492
|
+
{
|
|
493
|
+
fn: convertEventPayload(onUserFeedMarkerUpdated, 'entityId', 'channel'),
|
|
494
|
+
action: 'onUpdate',
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
fn: convertEventPayload(onSubChannelCreated, 'channelId', 'channel'),
|
|
498
|
+
action: 'onUpdate',
|
|
499
|
+
},
|
|
467
500
|
];
|
|
468
501
|
|
|
469
502
|
if (this.paginationController instanceof PaginationController) {
|
|
@@ -69,7 +69,10 @@ export class ChannelQueryStreamController extends QueryStreamController<
|
|
|
69
69
|
const collection = pullFromCache<Amity.ChannelLiveCollectionCache>(this.cacheKey)?.data;
|
|
70
70
|
if (!collection) return;
|
|
71
71
|
|
|
72
|
-
if (
|
|
72
|
+
if (
|
|
73
|
+
this.paginationController instanceof ChannelPaginationController &&
|
|
74
|
+
action === 'onCreate'
|
|
75
|
+
) {
|
|
73
76
|
collection.data = [...new Set([payload.channelId, ...collection.data])];
|
|
74
77
|
pushToCache(this.cacheKey, collection);
|
|
75
78
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api/pullFromCache';
|
|
2
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
3
|
+
import { getActiveUser } from '~/client/api/activeUser';
|
|
4
|
+
import { getResolver } from '~/core/model';
|
|
5
|
+
|
|
6
|
+
const getCachedMarker = (entityId: string) => {
|
|
7
|
+
const key = {
|
|
8
|
+
entityId,
|
|
9
|
+
userId: getActiveUser()._id,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return pullFromCache<Amity.ChannelMarker>([
|
|
13
|
+
'channelMarker',
|
|
14
|
+
'get',
|
|
15
|
+
getResolver('channelMarker')(key),
|
|
16
|
+
])?.data;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const getUnreadInfoCached = (channelId: Amity.RawChannel['channelId']) => {
|
|
20
|
+
return pullFromCache<Amity.ChannelUnreadInfo>(['channelUnreadInfo', 'get', channelId])?.data;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The function use to get value of hasMentioned or isMentioned field.
|
|
25
|
+
* function will get the value from marker params first, if there is no hasMentioned field, will look in to the cache.
|
|
26
|
+
*
|
|
27
|
+
* If consistent mode is enabled, the function will return the value from the channelUnreadCountInfo cache.
|
|
28
|
+
* If not, the function will return the value from the channelMarker cache.
|
|
29
|
+
* If not found in the both cache, use `false` as defaul value.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
export const getChannelIsMentioned = (channel: Amity.RawChannel, marker?: Amity.ChannelMarker) => {
|
|
33
|
+
const client = getActiveClient();
|
|
34
|
+
|
|
35
|
+
if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
|
|
36
|
+
return getUnreadInfoCached(channel.channelId)?.isMentioned ?? false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return marker?.hasMentioned !== undefined
|
|
40
|
+
? marker?.hasMentioned
|
|
41
|
+
: getCachedMarker(channel.channelId)?.hasMentioned ?? false;
|
|
42
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api/pullFromCache';
|
|
2
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
3
|
+
import { getActiveUser } from '~/client/api/activeUser';
|
|
4
|
+
import { getResolver } from '~/core/model';
|
|
5
|
+
|
|
6
|
+
const getCachedMarker = (entityId: string) => {
|
|
7
|
+
const key = {
|
|
8
|
+
entityId,
|
|
9
|
+
userId: getActiveUser()._id,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return pullFromCache<Amity.ChannelMarker>([
|
|
13
|
+
'channelMarker',
|
|
14
|
+
'get',
|
|
15
|
+
getResolver('channelMarker')(key),
|
|
16
|
+
])?.data;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const getUnreadInfoCached = (channelId: Amity.RawChannel['channelId']) => {
|
|
20
|
+
return pullFromCache<Amity.ChannelUnreadInfo>(['channelUnreadInfo', 'get', channelId])?.data;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The function use to get value of unreadCount field.
|
|
25
|
+
* function will get the value from marker params first, if there is no hasMentioned field, will look in to the cache.
|
|
26
|
+
*
|
|
27
|
+
* If consistent mode is enabled, the function will return the value from the channelUnreadCountInfo cache.
|
|
28
|
+
* If not, the function will return the value from the channelMarker cache.
|
|
29
|
+
* If not found in the both cache, use `0` as defaul value.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
export const getSubChannelsUnreadCount = (
|
|
33
|
+
channel: Amity.RawChannel,
|
|
34
|
+
marker?: Amity.ChannelMarker,
|
|
35
|
+
) => {
|
|
36
|
+
const client = getActiveClient();
|
|
37
|
+
|
|
38
|
+
if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
|
|
39
|
+
return getUnreadInfoCached(channel.channelId)?.unreadCount ?? 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (marker?.isDeleted) {
|
|
43
|
+
// NOTE: This is a temporary solution to handle the channel marker when the user is forced to
|
|
44
|
+
// leave the channel because currently backend can't handle this, so every time a user is banned
|
|
45
|
+
// from a channel or the channel is deleted the channel's unread count will reset to zero
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return marker?.unreadCount ?? getCachedMarker(channel.channelId)?.unreadCount ?? 0;
|
|
50
|
+
};
|
|
@@ -2,11 +2,13 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
|
2
2
|
import { withUsers } from '~/group/utils/withUser';
|
|
3
3
|
import { getChannelMarkers } from '~/marker/api/getChannelMarkers';
|
|
4
4
|
|
|
5
|
-
import { getChannelUnreadCount } from './getChannelUnreadCount';
|
|
6
|
-
import { getChannelHasMentioned } from './getChannelHasMentioned';
|
|
7
5
|
import { updateChannelMessagePreviewCache } from '~/messagePreview/utils';
|
|
8
6
|
import { getActiveClient } from '~/client/api/activeClient';
|
|
9
7
|
import { pullFromCache } from '~/cache/api/pullFromCache';
|
|
8
|
+
import { getSubChannelsUnreadCount } from './getSubChannelsUnreadCount';
|
|
9
|
+
import { getChannelIsMentioned } from './getChannelIsMentioned';
|
|
10
|
+
import { getUserMessageFeedMakers } from '~/marker/api/getUserMessageFeedMarkers';
|
|
11
|
+
import { persistUnreadCountInfo } from '~/marker/utils/persistUnreadCountInfo';
|
|
10
12
|
|
|
11
13
|
export const MARKER_INCLUDED_CHANNEL_TYPE = ['broadcast', 'conversation', 'community'];
|
|
12
14
|
export const isUnreadCountSupport = ({ type }: Pick<Amity.RawChannel, 'type'>) =>
|
|
@@ -30,10 +32,16 @@ export function convertFromRaw(
|
|
|
30
32
|
|
|
31
33
|
return {
|
|
32
34
|
get unreadCount() {
|
|
33
|
-
return
|
|
35
|
+
return getSubChannelsUnreadCount(channel);
|
|
34
36
|
},
|
|
35
37
|
get hasMentioned() {
|
|
36
|
-
return
|
|
38
|
+
return getChannelIsMentioned(channel);
|
|
39
|
+
},
|
|
40
|
+
get isMentioned() {
|
|
41
|
+
return getChannelIsMentioned(channel);
|
|
42
|
+
},
|
|
43
|
+
get subChannelsUnreadCount() {
|
|
44
|
+
return getSubChannelsUnreadCount(channel);
|
|
37
45
|
},
|
|
38
46
|
...channel,
|
|
39
47
|
defaultSubChannelId: channel._id,
|
|
@@ -60,6 +68,19 @@ export const prepareChannelPayload = async (
|
|
|
60
68
|
const client = getActiveClient();
|
|
61
69
|
const networkPreviewSetting = await client.getMessagePreviewSetting(false);
|
|
62
70
|
|
|
71
|
+
// if consistent mode is enabled, persist the unread count info to the cache
|
|
72
|
+
if (client.isUnreadCountEnabled && client.getMarkerSyncConsistentMode()) {
|
|
73
|
+
const queryPayload = await getUserMessageFeedMakers(
|
|
74
|
+
rawPayload.channels.map(({ channelId }) => channelId),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const { feedMarkers, userFeedMarkers } = queryPayload;
|
|
78
|
+
persistUnreadCountInfo({
|
|
79
|
+
feedMarkers,
|
|
80
|
+
userFeedMarkers,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
63
84
|
if (
|
|
64
85
|
options.isMessagePreviewUpdated &&
|
|
65
86
|
networkPreviewSetting !== Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW &&
|
|
@@ -61,6 +61,8 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
|
|
|
61
61
|
unreadCount: channelMarker1.unreadCount,
|
|
62
62
|
hasMentioned: channelMarker1.hasMentioned,
|
|
63
63
|
messagePreviewId: undefined,
|
|
64
|
+
subChannelsUnreadCount: channelMarker1.unreadCount,
|
|
65
|
+
isMentioned: channelMarker1.hasMentioned,
|
|
64
66
|
},
|
|
65
67
|
{
|
|
66
68
|
...liveChannel,
|
|
@@ -69,6 +71,8 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
|
|
|
69
71
|
unreadCount: 0,
|
|
70
72
|
hasMentioned: false,
|
|
71
73
|
messagePreviewId: undefined,
|
|
74
|
+
subChannelsUnreadCount: 0,
|
|
75
|
+
isMentioned: false,
|
|
72
76
|
},
|
|
73
77
|
{
|
|
74
78
|
...conversationChannel,
|
|
@@ -76,7 +80,9 @@ const convertedChannelPayload: Amity.ProcessedChannelPayload = {
|
|
|
76
80
|
isUnreadCountSupport: true,
|
|
77
81
|
unreadCount: channelMarker2.unreadCount,
|
|
78
82
|
hasMentioned: channelMarker2.hasMentioned,
|
|
83
|
+
isMentioned: channelMarker2.hasMentioned,
|
|
79
84
|
messagePreviewId: undefined,
|
|
85
|
+
subChannelsUnreadCount: channelMarker2.unreadCount,
|
|
80
86
|
},
|
|
81
87
|
],
|
|
82
88
|
channelUsers: [channelUser],
|
|
@@ -3,6 +3,7 @@ import { scheduleTask } from '~/core/microtasks';
|
|
|
3
3
|
import { MINUTE, ACCESS_TOKEN_WATCHER_INTERVAL } from '~/utils/constants';
|
|
4
4
|
|
|
5
5
|
import { renewal } from './renewal';
|
|
6
|
+
import { getActiveClient } from './activeClient';
|
|
6
7
|
|
|
7
8
|
const ABOUT_TO_EXPIRE_THRESHOLD = 80 / 100;
|
|
8
9
|
const COMPENSATED_DELAY = 5 * MINUTE;
|
|
@@ -50,11 +51,15 @@ export const isAboutToExpire = (params: {
|
|
|
50
51
|
* @category private
|
|
51
52
|
*/
|
|
52
53
|
export const accessTokenExpiryWatcher = (
|
|
53
|
-
expiresAt: Amity.Tokens['expiresAt'],
|
|
54
|
-
issuedAt: Amity.Tokens['issuedAt'],
|
|
55
54
|
sessionHandler: Amity.SessionHandler,
|
|
56
55
|
): Amity.Unsubscriber => {
|
|
57
56
|
const interval: ReturnType<typeof setInterval> = setInterval(() => {
|
|
57
|
+
const client = getActiveClient();
|
|
58
|
+
|
|
59
|
+
if (!client.token) return;
|
|
60
|
+
|
|
61
|
+
const { issuedAt, expiresAt } = client.token;
|
|
62
|
+
|
|
58
63
|
if (isExpired(expiresAt)) {
|
|
59
64
|
/*
|
|
60
65
|
* the event handler will take care of updating session state
|
|
@@ -14,10 +14,13 @@ import { createEventEmitter } from '~/core/events';
|
|
|
14
14
|
import { getMessagePreviewSetting } from '~/client/utils/messagePreviewEngine';
|
|
15
15
|
import { getSocialSettings } from '~/client/api/getSocialSettings';
|
|
16
16
|
import { hasPermission } from '~/client/utils/hasPermission';
|
|
17
|
+
import { validateUrls } from './validateUrls';
|
|
18
|
+
import { validateTexts } from './validateTexts';
|
|
17
19
|
import { getActiveClient, setActiveClient } from './activeClient';
|
|
18
20
|
import { getFeedSettings } from './getFeedSettings';
|
|
19
21
|
|
|
20
22
|
import { accessTokenExpiryWatcher } from './accessTokenExpiryWatcher';
|
|
23
|
+
import { getMarkerSyncConsistentMode } from '../utils/markerSyncEngine';
|
|
21
24
|
|
|
22
25
|
const DEFAULT_DEBUG_SESSION = 'amity';
|
|
23
26
|
|
|
@@ -72,6 +75,8 @@ export const createClient = (
|
|
|
72
75
|
const sessionState = Amity.SessionStates.NOT_LOGGED_IN;
|
|
73
76
|
const sessionHandler = undefined;
|
|
74
77
|
|
|
78
|
+
const isUnreadCountEnabled = false;
|
|
79
|
+
|
|
75
80
|
const client = {
|
|
76
81
|
version: `${VERSION}`,
|
|
77
82
|
apiKey,
|
|
@@ -98,11 +103,17 @@ export const createClient = (
|
|
|
98
103
|
sessionHandler,
|
|
99
104
|
|
|
100
105
|
hasPermission,
|
|
106
|
+
validateUrls,
|
|
107
|
+
validateTexts,
|
|
101
108
|
getFeedSettings,
|
|
102
109
|
getSocialSettings,
|
|
103
110
|
getMessagePreviewSetting,
|
|
104
111
|
|
|
105
112
|
use: () => setActiveClient(client),
|
|
113
|
+
|
|
114
|
+
isUnreadCountEnabled,
|
|
115
|
+
|
|
116
|
+
getMarkerSyncConsistentMode,
|
|
106
117
|
};
|
|
107
118
|
|
|
108
119
|
try {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ASCError } from '~/core/errors';
|
|
2
|
+
import { getActiveClient } from './activeClient';
|
|
3
|
+
|
|
4
|
+
export const enableUnreadCount = () => {
|
|
5
|
+
const client = getActiveClient();
|
|
6
|
+
|
|
7
|
+
client.log('client/api/isUnreadCountEnabled', client.isUnreadCountEnabled);
|
|
8
|
+
|
|
9
|
+
if (!client) {
|
|
10
|
+
throw new ASCError(
|
|
11
|
+
'There is no active client',
|
|
12
|
+
Amity.ClientError.UNKNOWN_ERROR,
|
|
13
|
+
Amity.ErrorLevel.FATAL,
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (client.isUnreadCountEnabled) return false;
|
|
18
|
+
|
|
19
|
+
client.isUnreadCountEnabled = true;
|
|
20
|
+
|
|
21
|
+
client.emitter.emit('unreadCountEnabled', true);
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
};
|
package/src/client/api/index.ts
CHANGED
package/src/client/api/login.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { markReadEngineOnLoginHandler } from '~/subChannelRepository/utils/markR
|
|
|
10
10
|
import { onUserDeleted } from '~/userRepository/events/onUserDeleted';
|
|
11
11
|
|
|
12
12
|
import analyticsEngineOnLoginHandler from '~/analytic/utils/analyticsEngineOnLoginHandler';
|
|
13
|
+
import readReceiptSyncEngineOnLoginHandler from '../utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler';
|
|
13
14
|
import { logout } from './logout';
|
|
14
15
|
|
|
15
16
|
import { getActiveClient } from './activeClient';
|
|
@@ -25,6 +26,7 @@ import { onTokenTerminated } from '../events/onTokenTerminated';
|
|
|
25
26
|
import { setClientToken } from '../utils/setClientToken';
|
|
26
27
|
import { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';
|
|
27
28
|
import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
|
|
29
|
+
import { startMarkerSync } from '../utils/markerSyncEngine';
|
|
28
30
|
import { ASCError } from '~/core/errors';
|
|
29
31
|
|
|
30
32
|
/*
|
|
@@ -130,11 +132,7 @@ export const login = async (
|
|
|
130
132
|
* Cannot push to subscriptions as watcher needs to continue working even if
|
|
131
133
|
* token expires
|
|
132
134
|
*/
|
|
133
|
-
unsubWatcher = client.accessTokenExpiryWatcher(
|
|
134
|
-
client.token?.expiresAt!,
|
|
135
|
-
client.token?.issuedAt!,
|
|
136
|
-
sessionHandler!,
|
|
137
|
-
);
|
|
135
|
+
unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
|
|
138
136
|
|
|
139
137
|
setActiveUser(user);
|
|
140
138
|
} catch (error) {
|
|
@@ -199,7 +197,11 @@ export const login = async (
|
|
|
199
197
|
|
|
200
198
|
markReadEngineOnLoginHandler(),
|
|
201
199
|
analyticsEngineOnLoginHandler(),
|
|
200
|
+
readReceiptSyncEngineOnLoginHandler(),
|
|
202
201
|
);
|
|
202
|
+
|
|
203
|
+
const markerSyncUnsubscriber = await startMarkerSync();
|
|
204
|
+
subscriptions.push(markerSyncUnsubscriber);
|
|
203
205
|
}
|
|
204
206
|
|
|
205
207
|
return true;
|
|
@@ -2,11 +2,7 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
|
2
2
|
import { fireEvent } from '~/core/events';
|
|
3
3
|
|
|
4
4
|
import { getActiveClient } from './activeClient';
|
|
5
|
-
import {
|
|
6
|
-
convertChannelMarkerResponse,
|
|
7
|
-
convertSubChannelMarkerResponse,
|
|
8
|
-
convertUserMarkerResponse,
|
|
9
|
-
} from '~/utils/marker';
|
|
5
|
+
import { convertChannelMarkerResponse, convertSubChannelMarkerResponse } from '~/utils/marker';
|
|
10
6
|
|
|
11
7
|
/**
|
|
12
8
|
* ```js
|
|
@@ -43,10 +39,9 @@ export const markerSync = async (
|
|
|
43
39
|
userEntityMarkers: userEntityMarkersPayload,
|
|
44
40
|
userFeedMarkers: userFeedMarkersPayload,
|
|
45
41
|
feedMarkers,
|
|
46
|
-
userMarkers
|
|
42
|
+
userMarkers,
|
|
47
43
|
} = payload;
|
|
48
44
|
|
|
49
|
-
const userMarkers = convertUserMarkerResponse(userMarkersPayload);
|
|
50
45
|
const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
|
|
51
46
|
const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload);
|
|
52
47
|
|
|
@@ -35,14 +35,11 @@ export const renewal = (): Amity.AccessTokenRenewal => {
|
|
|
35
35
|
|
|
36
36
|
const params = { userId, displayName, authToken, deviceId };
|
|
37
37
|
|
|
38
|
-
if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED) {
|
|
39
|
-
|
|
40
|
-
await login(params, client.sessionHandler!);
|
|
38
|
+
if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED && client.sessionHandler) {
|
|
39
|
+
await login(params, client.sessionHandler);
|
|
41
40
|
} else {
|
|
42
41
|
// about to expire
|
|
43
42
|
|
|
44
|
-
// @ts-ignore: in that particular case, typing can be
|
|
45
|
-
// ignored since we enforce default values just before.
|
|
46
43
|
await refreshToken(params);
|
|
47
44
|
}
|
|
48
45
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getActiveClient } from './activeClient';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate a list of texts
|
|
5
|
+
* @param texts array of strings to validate (max 10 items)
|
|
6
|
+
*
|
|
7
|
+
* @category Client API
|
|
8
|
+
*/
|
|
9
|
+
export const validateTexts = async (texts: string[]): Promise<boolean> => {
|
|
10
|
+
const client = getActiveClient();
|
|
11
|
+
client.log('channel/markerSync');
|
|
12
|
+
|
|
13
|
+
if (texts.length === 0) return false;
|
|
14
|
+
|
|
15
|
+
const { data: payload } = await client.http.post<{ success: boolean }>(
|
|
16
|
+
'/api/v3/blocklists/verify',
|
|
17
|
+
{
|
|
18
|
+
data: texts,
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return payload.success;
|
|
23
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getActiveClient } from './activeClient';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate a list of urls
|
|
5
|
+
* @param urls array of strings to validate (max 10 items)
|
|
6
|
+
*
|
|
7
|
+
* @category Client API
|
|
8
|
+
*/
|
|
9
|
+
export const validateUrls = async (urls: string[]): Promise<boolean> => {
|
|
10
|
+
const client = getActiveClient();
|
|
11
|
+
client.log('channel/markerSync');
|
|
12
|
+
|
|
13
|
+
if (urls.length === 0) return false;
|
|
14
|
+
|
|
15
|
+
const { data: payload } = await client.http.post<{ success: boolean }>(
|
|
16
|
+
'/api/v3/allowlists/verify',
|
|
17
|
+
{
|
|
18
|
+
data: urls,
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return payload.success;
|
|
23
|
+
};
|