polfan-server-js-client 0.1.992 → 0.1.994
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/build/index.js +825 -124
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +5 -1
- package/build/types/state-tracker/MessagesManager.d.ts +8 -10
- package/build/types/state-tracker/RoomMessagesHistory.d.ts +17 -0
- package/build/types/state-tracker/RoomsManager.d.ts +4 -2
- package/build/types/state-tracker/TopicHistoryWindow.d.ts +58 -0
- package/build/types/types/src/index.d.ts +6 -2
- package/build/types/types/src/schemes/FollowedTopic.d.ts +0 -1
- package/build/types/types/src/schemes/Message.d.ts +8 -2
- package/{src/types/dist/schemes/commands/Ack.d.ts → build/types/types/src/schemes/commands/GetMessages.d.ts} +3 -2
- package/build/types/types/src/schemes/commands/GetTopics.d.ts +4 -0
- package/{src/types/dist/schemes/events/NewMessage.d.ts → build/types/types/src/schemes/events/Messages.d.ts} +3 -3
- package/build/types/types/src/schemes/events/Topics.d.ts +6 -0
- package/package.json +1 -1
- package/src/AbstractChatClient.ts +8 -0
- package/src/state-tracker/MessagesManager.ts +28 -60
- package/src/state-tracker/RoomMessagesHistory.ts +78 -0
- package/src/state-tracker/RoomsManager.ts +24 -2
- package/src/state-tracker/TopicHistoryWindow.ts +257 -0
- package/src/types/src/index.ts +10 -1
- package/src/types/src/schemes/FollowedTopic.ts +0 -1
- package/src/types/src/schemes/Message.ts +9 -2
- package/src/types/src/schemes/commands/GetMessages.ts +7 -0
- package/src/types/src/schemes/commands/GetTopics.ts +4 -0
- package/src/types/src/schemes/events/Messages.ts +7 -0
- package/src/types/src/schemes/events/Topics.ts +7 -0
- package/tests/history-window.test.ts +129 -0
- package/build/types/types/dist/index.d.ts +0 -1
- package/build/types/types/dist/schemes/ChatLocation.d.ts +0 -1
- package/build/types/types/dist/schemes/Envelope.d.ts +0 -1
- package/build/types/types/dist/schemes/FollowedTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/Message.d.ts +0 -1
- package/build/types/types/dist/schemes/PermissionOverwritesValue.d.ts +0 -1
- package/build/types/types/dist/schemes/Role.d.ts +0 -1
- package/build/types/types/dist/schemes/Room.d.ts +0 -1
- package/build/types/types/dist/schemes/RoomMember.d.ts +0 -1
- package/build/types/types/dist/schemes/RoomSummary.d.ts +0 -1
- package/build/types/types/dist/schemes/Space.d.ts +0 -1
- package/build/types/types/dist/schemes/SpaceMember.d.ts +0 -1
- package/build/types/types/dist/schemes/Topic.d.ts +0 -1
- package/build/types/types/dist/schemes/User.d.ts +0 -1
- package/build/types/types/dist/schemes/UserState.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/Ack.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/AssignRole.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateMessage.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateOwner.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateRole.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateSpace.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/CreateTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeassignRole.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeleteOwner.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeleteRole.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeleteRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeleteSpace.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/DeleteTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/FollowTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetComputedPermissions.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetFollowedTopics.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetOwners.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetRoomMembers.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetSession.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetSpaceMembers.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/GetSpaceRooms.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/JoinRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/JoinSpace.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/LeaveRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/LeaveSpace.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/UnfollowTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/UpdateRole.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/UpdateRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/commands/UpdateSpace.d.ts +0 -1
- package/build/types/types/dist/schemes/events/Bye.d.ts +0 -1
- package/build/types/types/dist/schemes/events/ComputedPermissions.d.ts +0 -1
- package/build/types/types/dist/schemes/events/Error.d.ts +0 -1
- package/build/types/types/dist/schemes/events/FollowedTopicUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/FollowedTopics.d.ts +0 -1
- package/build/types/types/dist/schemes/events/NewMessage.d.ts +0 -1
- package/build/types/types/dist/schemes/events/NewRole.d.ts +0 -1
- package/build/types/types/dist/schemes/events/NewRoom.d.ts +0 -1
- package/build/types/types/dist/schemes/events/NewTopic.d.ts +0 -1
- package/build/types/types/dist/schemes/events/Ok.d.ts +0 -1
- package/build/types/types/dist/schemes/events/Owners.d.ts +0 -1
- package/build/types/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +0 -1
- package/build/types/types/dist/schemes/events/PermissionOverwrites.d.ts +0 -1
- package/build/types/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoleDeleted.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoleUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomDeleted.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomJoined.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomLeft.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomMemberJoined.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomMemberLeft.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomMemberUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomMembers.d.ts +0 -1
- package/build/types/types/dist/schemes/events/RoomUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/Session.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceDeleted.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceJoined.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceLeft.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceMemberJoined.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceMemberLeft.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceMemberUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceMembers.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceRooms.d.ts +0 -1
- package/build/types/types/dist/schemes/events/SpaceUpdated.d.ts +0 -1
- package/build/types/types/dist/schemes/events/TopicDeleted.d.ts +0 -1
- package/build/types/types/dist/schemes/events/TopicFollowed.d.ts +0 -1
- package/build/types/types/dist/schemes/events/TopicUnfollowed.d.ts +0 -1
- package/build/types/types/dist/schemes/events/UserUpdated.d.ts +0 -1
- package/src/types/dist/index.d.ts +0 -88
- package/src/types/dist/index.js +0 -2
- package/src/types/dist/schemes/ChatLocation.d.ts +0 -5
- package/src/types/dist/schemes/ChatLocation.js +0 -2
- package/src/types/dist/schemes/Envelope.d.ts +0 -5
- package/src/types/dist/schemes/Envelope.js +0 -2
- package/src/types/dist/schemes/FollowedTopic.d.ts +0 -7
- package/src/types/dist/schemes/FollowedTopic.js +0 -2
- package/src/types/dist/schemes/Message.d.ts +0 -8
- package/src/types/dist/schemes/Message.js +0 -2
- package/src/types/dist/schemes/PermissionOverwritesValue.d.ts +0 -4
- package/src/types/dist/schemes/PermissionOverwritesValue.js +0 -2
- package/src/types/dist/schemes/Role.d.ts +0 -6
- package/src/types/dist/schemes/Role.js +0 -2
- package/src/types/dist/schemes/Room.d.ts +0 -10
- package/src/types/dist/schemes/Room.js +0 -2
- package/src/types/dist/schemes/RoomMember.d.ts +0 -7
- package/src/types/dist/schemes/RoomMember.js +0 -2
- package/src/types/dist/schemes/RoomSummary.d.ts +0 -5
- package/src/types/dist/schemes/RoomSummary.js +0 -2
- package/src/types/dist/schemes/Space.d.ts +0 -6
- package/src/types/dist/schemes/Space.js +0 -2
- package/src/types/dist/schemes/SpaceMember.d.ts +0 -5
- package/src/types/dist/schemes/SpaceMember.js +0 -2
- package/src/types/dist/schemes/Topic.d.ts +0 -9
- package/src/types/dist/schemes/Topic.js +0 -2
- package/src/types/dist/schemes/User.d.ts +0 -8
- package/src/types/dist/schemes/User.js +0 -2
- package/src/types/dist/schemes/UserState.d.ts +0 -6
- package/src/types/dist/schemes/UserState.js +0 -2
- package/src/types/dist/schemes/commands/Ack.js +0 -2
- package/src/types/dist/schemes/commands/AssignRole.d.ts +0 -6
- package/src/types/dist/schemes/commands/AssignRole.js +0 -2
- package/src/types/dist/schemes/commands/CreateMessage.d.ts +0 -5
- package/src/types/dist/schemes/commands/CreateMessage.js +0 -2
- package/src/types/dist/schemes/commands/CreateOwner.d.ts +0 -5
- package/src/types/dist/schemes/commands/CreateOwner.js +0 -2
- package/src/types/dist/schemes/commands/CreateRole.d.ts +0 -5
- package/src/types/dist/schemes/commands/CreateRole.js +0 -2
- package/src/types/dist/schemes/commands/CreateRoom.d.ts +0 -7
- package/src/types/dist/schemes/commands/CreateRoom.js +0 -2
- package/src/types/dist/schemes/commands/CreateSpace.d.ts +0 -3
- package/src/types/dist/schemes/commands/CreateSpace.js +0 -2
- package/src/types/dist/schemes/commands/CreateTopic.d.ts +0 -12
- package/src/types/dist/schemes/commands/CreateTopic.js +0 -2
- package/src/types/dist/schemes/commands/DeassignRole.d.ts +0 -6
- package/src/types/dist/schemes/commands/DeassignRole.js +0 -2
- package/src/types/dist/schemes/commands/DeleteOwner.d.ts +0 -5
- package/src/types/dist/schemes/commands/DeleteOwner.js +0 -2
- package/src/types/dist/schemes/commands/DeleteRole.d.ts +0 -4
- package/src/types/dist/schemes/commands/DeleteRole.js +0 -2
- package/src/types/dist/schemes/commands/DeleteRoom.d.ts +0 -3
- package/src/types/dist/schemes/commands/DeleteRoom.js +0 -2
- package/src/types/dist/schemes/commands/DeleteSpace.d.ts +0 -3
- package/src/types/dist/schemes/commands/DeleteSpace.js +0 -2
- package/src/types/dist/schemes/commands/DeleteTopic.d.ts +0 -4
- package/src/types/dist/schemes/commands/DeleteTopic.js +0 -2
- package/src/types/dist/schemes/commands/FollowTopic.d.ts +0 -4
- package/src/types/dist/schemes/commands/FollowTopic.js +0 -2
- package/src/types/dist/schemes/commands/GetComputedPermissions.d.ts +0 -4
- package/src/types/dist/schemes/commands/GetComputedPermissions.js +0 -2
- package/src/types/dist/schemes/commands/GetFollowedTopics.d.ts +0 -4
- package/src/types/dist/schemes/commands/GetFollowedTopics.js +0 -2
- package/src/types/dist/schemes/commands/GetOwners.d.ts +0 -4
- package/src/types/dist/schemes/commands/GetOwners.js +0 -2
- package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +0 -4
- package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.js +0 -2
- package/src/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +0 -6
- package/src/types/dist/schemes/commands/GetPermissionOverwrites.js +0 -2
- package/src/types/dist/schemes/commands/GetRoomMembers.d.ts +0 -3
- package/src/types/dist/schemes/commands/GetRoomMembers.js +0 -2
- package/src/types/dist/schemes/commands/GetSession.d.ts +0 -2
- package/src/types/dist/schemes/commands/GetSession.js +0 -2
- package/src/types/dist/schemes/commands/GetSpaceMembers.d.ts +0 -3
- package/src/types/dist/schemes/commands/GetSpaceMembers.js +0 -2
- package/src/types/dist/schemes/commands/GetSpaceRooms.d.ts +0 -3
- package/src/types/dist/schemes/commands/GetSpaceRooms.js +0 -2
- package/src/types/dist/schemes/commands/JoinRoom.d.ts +0 -3
- package/src/types/dist/schemes/commands/JoinRoom.js +0 -2
- package/src/types/dist/schemes/commands/JoinSpace.d.ts +0 -3
- package/src/types/dist/schemes/commands/JoinSpace.js +0 -2
- package/src/types/dist/schemes/commands/LeaveRoom.d.ts +0 -3
- package/src/types/dist/schemes/commands/LeaveRoom.js +0 -2
- package/src/types/dist/schemes/commands/LeaveSpace.d.ts +0 -3
- package/src/types/dist/schemes/commands/LeaveSpace.js +0 -2
- package/src/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +0 -8
- package/src/types/dist/schemes/commands/SetPermissionOverwrites.js +0 -2
- package/src/types/dist/schemes/commands/UnfollowTopic.d.ts +0 -4
- package/src/types/dist/schemes/commands/UnfollowTopic.js +0 -2
- package/src/types/dist/schemes/commands/UpdateRole.d.ts +0 -7
- package/src/types/dist/schemes/commands/UpdateRole.js +0 -2
- package/src/types/dist/schemes/commands/UpdateRoom.d.ts +0 -5
- package/src/types/dist/schemes/commands/UpdateRoom.js +0 -2
- package/src/types/dist/schemes/commands/UpdateSpace.d.ts +0 -4
- package/src/types/dist/schemes/commands/UpdateSpace.js +0 -2
- package/src/types/dist/schemes/events/Bye.d.ts +0 -3
- package/src/types/dist/schemes/events/Bye.js +0 -2
- package/src/types/dist/schemes/events/ComputedPermissions.d.ts +0 -5
- package/src/types/dist/schemes/events/ComputedPermissions.js +0 -2
- package/src/types/dist/schemes/events/Error.d.ts +0 -4
- package/src/types/dist/schemes/events/Error.js +0 -2
- package/src/types/dist/schemes/events/FollowedTopicUpdated.d.ts +0 -4
- package/src/types/dist/schemes/events/FollowedTopicUpdated.js +0 -2
- package/src/types/dist/schemes/events/FollowedTopics.d.ts +0 -6
- package/src/types/dist/schemes/events/FollowedTopics.js +0 -2
- package/src/types/dist/schemes/events/NewMessage.js +0 -2
- package/src/types/dist/schemes/events/NewRole.d.ts +0 -5
- package/src/types/dist/schemes/events/NewRole.js +0 -2
- package/src/types/dist/schemes/events/NewRoom.d.ts +0 -5
- package/src/types/dist/schemes/events/NewRoom.js +0 -2
- package/src/types/dist/schemes/events/NewTopic.d.ts +0 -5
- package/src/types/dist/schemes/events/NewTopic.js +0 -2
- package/src/types/dist/schemes/events/Ok.d.ts +0 -2
- package/src/types/dist/schemes/events/Ok.js +0 -2
- package/src/types/dist/schemes/events/Owners.d.ts +0 -8
- package/src/types/dist/schemes/events/Owners.js +0 -2
- package/src/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +0 -10
- package/src/types/dist/schemes/events/PermissionOverwriteTargets.js +0 -2
- package/src/types/dist/schemes/events/PermissionOverwrites.d.ts +0 -8
- package/src/types/dist/schemes/events/PermissionOverwrites.js +0 -2
- package/src/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +0 -8
- package/src/types/dist/schemes/events/PermissionOverwritesUpdated.js +0 -2
- package/src/types/dist/schemes/events/RoleDeleted.d.ts +0 -4
- package/src/types/dist/schemes/events/RoleDeleted.js +0 -2
- package/src/types/dist/schemes/events/RoleUpdated.d.ts +0 -5
- package/src/types/dist/schemes/events/RoleUpdated.js +0 -2
- package/src/types/dist/schemes/events/RoomDeleted.d.ts +0 -3
- package/src/types/dist/schemes/events/RoomDeleted.js +0 -2
- package/src/types/dist/schemes/events/RoomJoined.d.ts +0 -4
- package/src/types/dist/schemes/events/RoomJoined.js +0 -2
- package/src/types/dist/schemes/events/RoomLeft.d.ts +0 -3
- package/src/types/dist/schemes/events/RoomLeft.js +0 -2
- package/src/types/dist/schemes/events/RoomMemberJoined.d.ts +0 -5
- package/src/types/dist/schemes/events/RoomMemberJoined.js +0 -2
- package/src/types/dist/schemes/events/RoomMemberLeft.d.ts +0 -4
- package/src/types/dist/schemes/events/RoomMemberLeft.js +0 -2
- package/src/types/dist/schemes/events/RoomMemberUpdated.d.ts +0 -6
- package/src/types/dist/schemes/events/RoomMemberUpdated.js +0 -2
- package/src/types/dist/schemes/events/RoomMembers.d.ts +0 -5
- package/src/types/dist/schemes/events/RoomMembers.js +0 -2
- package/src/types/dist/schemes/events/RoomUpdated.d.ts +0 -4
- package/src/types/dist/schemes/events/RoomUpdated.js +0 -2
- package/src/types/dist/schemes/events/Session.d.ts +0 -7
- package/src/types/dist/schemes/events/Session.js +0 -2
- package/src/types/dist/schemes/events/SpaceDeleted.d.ts +0 -3
- package/src/types/dist/schemes/events/SpaceDeleted.js +0 -2
- package/src/types/dist/schemes/events/SpaceJoined.d.ts +0 -4
- package/src/types/dist/schemes/events/SpaceJoined.js +0 -2
- package/src/types/dist/schemes/events/SpaceLeft.d.ts +0 -3
- package/src/types/dist/schemes/events/SpaceLeft.js +0 -2
- package/src/types/dist/schemes/events/SpaceMemberJoined.d.ts +0 -5
- package/src/types/dist/schemes/events/SpaceMemberJoined.js +0 -2
- package/src/types/dist/schemes/events/SpaceMemberLeft.d.ts +0 -4
- package/src/types/dist/schemes/events/SpaceMemberLeft.js +0 -2
- package/src/types/dist/schemes/events/SpaceMemberUpdated.d.ts +0 -6
- package/src/types/dist/schemes/events/SpaceMemberUpdated.js +0 -2
- package/src/types/dist/schemes/events/SpaceMembers.d.ts +0 -5
- package/src/types/dist/schemes/events/SpaceMembers.js +0 -2
- package/src/types/dist/schemes/events/SpaceRooms.d.ts +0 -5
- package/src/types/dist/schemes/events/SpaceRooms.js +0 -2
- package/src/types/dist/schemes/events/SpaceUpdated.d.ts +0 -4
- package/src/types/dist/schemes/events/SpaceUpdated.js +0 -2
- package/src/types/dist/schemes/events/TopicDeleted.d.ts +0 -4
- package/src/types/dist/schemes/events/TopicDeleted.js +0 -2
- package/src/types/dist/schemes/events/TopicFollowed.d.ts +0 -4
- package/src/types/dist/schemes/events/TopicFollowed.js +0 -2
- package/src/types/dist/schemes/events/TopicUnfollowed.d.ts +0 -4
- package/src/types/dist/schemes/events/TopicUnfollowed.js +0 -2
- package/src/types/dist/schemes/events/UserUpdated.d.ts +0 -4
- package/src/types/dist/schemes/events/UserUpdated.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics } from "./types/src/index";
|
|
1
|
+
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics } from "./types/src/index";
|
|
2
2
|
import { EventTarget } from "./EventTarget";
|
|
3
3
|
type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
|
|
4
4
|
export declare abstract class AbstractChatClient extends EventTarget {
|
|
@@ -58,6 +58,8 @@ export type EventsMap = {
|
|
|
58
58
|
TopicUnfollowed: TopicUnfollowed;
|
|
59
59
|
FollowedTopics: FollowedTopics;
|
|
60
60
|
FollowedTopicUpdated: FollowedTopicUpdated;
|
|
61
|
+
Messages: Messages;
|
|
62
|
+
Topics: Topics;
|
|
61
63
|
};
|
|
62
64
|
/**
|
|
63
65
|
* Map of commands and their corresponding events.
|
|
@@ -96,5 +98,7 @@ export type CommandsMap = {
|
|
|
96
98
|
FollowTopic: [FollowTopic, EventsMap['TopicFollowed']];
|
|
97
99
|
UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']];
|
|
98
100
|
GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']];
|
|
101
|
+
GetMessages: [GetMessages, EventsMap['Messages']];
|
|
102
|
+
GetTopics: [GetTopics, EventsMap['Topics']];
|
|
99
103
|
};
|
|
100
104
|
export {};
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { ChatStateTracker } from "./ChatStateTracker";
|
|
2
|
-
import {
|
|
2
|
+
import { FollowedTopic } from "../types/src";
|
|
3
3
|
import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
|
|
4
|
-
|
|
4
|
+
import { RoomMessagesHistory } from "./RoomMessagesHistory";
|
|
5
5
|
export declare class MessagesManager {
|
|
6
6
|
private tracker;
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly roomHistories;
|
|
8
8
|
private readonly followedTopics;
|
|
9
9
|
private readonly followedTopicsPromises;
|
|
10
|
+
private readonly deferredSession;
|
|
10
11
|
constructor(tracker: ChatStateTracker);
|
|
11
12
|
/**
|
|
12
|
-
* Get
|
|
13
|
+
* Get history manager for given room ID.
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
getRoomHistory(roomId: string): Promise<RoomMessagesHistory | undefined>;
|
|
15
16
|
/**
|
|
16
17
|
* Cache followed topics for all joined rooms in a space and fetch them in bulk if necessary.
|
|
17
18
|
* Then you can get them using getRoomFollowedTopics().
|
|
@@ -31,16 +32,13 @@ export declare class MessagesManager {
|
|
|
31
32
|
* Calculate missed messages from any topic in given room.
|
|
32
33
|
* @return Undefined if you are not in room, stats object otherwise.
|
|
33
34
|
*/
|
|
34
|
-
calculateRoomMissedMessages(roomId: string): Promise<
|
|
35
|
-
missed: number;
|
|
36
|
-
missedMore: boolean;
|
|
37
|
-
} | undefined>;
|
|
35
|
+
calculateRoomMissedMessages(roomId: string): Promise<number | undefined>;
|
|
38
36
|
/**
|
|
39
37
|
* For internal use. If you want to delete the message, execute a proper command on client object.
|
|
40
38
|
* @internal
|
|
41
39
|
*/
|
|
42
40
|
_deleteByTopicIds(roomId: string, ...topicIds: string[]): void;
|
|
43
|
-
private
|
|
41
|
+
private createHistoryForNewRoom;
|
|
44
42
|
private handleNewMessage;
|
|
45
43
|
private handleFollowedTopicUpdated;
|
|
46
44
|
private handleTopicFollowed;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChatStateTracker } from "./ChatStateTracker";
|
|
2
|
+
import { Room } from "../types/src";
|
|
3
|
+
import { TopicHistoryWindow } from "./TopicHistoryWindow";
|
|
4
|
+
export declare class RoomMessagesHistory {
|
|
5
|
+
private room;
|
|
6
|
+
private tracker;
|
|
7
|
+
private historyWindows;
|
|
8
|
+
constructor(room: Room, tracker: ChatStateTracker);
|
|
9
|
+
/**
|
|
10
|
+
* Returns a history window object for the given topic ID, allowing you to view message history.
|
|
11
|
+
*/
|
|
12
|
+
getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined>;
|
|
13
|
+
private handleRoomUpdated;
|
|
14
|
+
private handleNewTopic;
|
|
15
|
+
private handleTopicDeleted;
|
|
16
|
+
private createHistoryWindowForTopic;
|
|
17
|
+
}
|
|
@@ -10,6 +10,7 @@ export declare class RoomsManager {
|
|
|
10
10
|
private readonly members;
|
|
11
11
|
private readonly deferredSession;
|
|
12
12
|
private readonly membersPromises;
|
|
13
|
+
private readonly topicsPromises;
|
|
13
14
|
constructor(tracker: ChatStateTracker);
|
|
14
15
|
/**
|
|
15
16
|
* Get collection of room members.
|
|
@@ -24,9 +25,10 @@ export declare class RoomsManager {
|
|
|
24
25
|
*/
|
|
25
26
|
get(): Promise<ObservableIndexedObjectCollection<Room>>;
|
|
26
27
|
/**
|
|
27
|
-
* Get collection of room
|
|
28
|
+
* Get a collection of locally cached Topic objects for given room.
|
|
29
|
+
* You can pass topic ids as second argument, to try to fetch them from the server.
|
|
28
30
|
*/
|
|
29
|
-
getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined>;
|
|
31
|
+
getTopics(roomId: string, tryToFetchTopicIds?: string[]): Promise<ObservableIndexedObjectCollection<Topic> | undefined>;
|
|
30
32
|
private deleteRoom;
|
|
31
33
|
private deleteRoomsBySpaceId;
|
|
32
34
|
private handleSpaceMemberUpdated;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Message, MessageReference } from "../types/src";
|
|
2
|
+
import { ChatStateTracker } from "./ChatStateTracker";
|
|
3
|
+
import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
|
|
4
|
+
export declare enum WindowState {
|
|
5
|
+
UNINITIALIZED = 0,
|
|
6
|
+
LATEST = 1,
|
|
7
|
+
PAST = 2
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class TraversableRemoteCollection<T> extends ObservableIndexedObjectCollection<T> {
|
|
10
|
+
/**
|
|
11
|
+
* Current mode od collection window. To change mode, call one of available fetch methods.
|
|
12
|
+
*/
|
|
13
|
+
get state(): WindowState;
|
|
14
|
+
/**
|
|
15
|
+
* Maximum numer of items stored in window.
|
|
16
|
+
* Null for unlimited.
|
|
17
|
+
*/
|
|
18
|
+
limit: number | null;
|
|
19
|
+
private currentState;
|
|
20
|
+
private fetchingState;
|
|
21
|
+
resetToLatest(): Promise<void>;
|
|
22
|
+
fetchPrevious(): Promise<void>;
|
|
23
|
+
fetchNext(): Promise<void>;
|
|
24
|
+
protected abstract fetchLatestItems(): Promise<T[]>;
|
|
25
|
+
protected abstract fetchItemsBefore(): Promise<T[] | null>;
|
|
26
|
+
protected abstract fetchItemsAfter(): Promise<T[] | null>;
|
|
27
|
+
protected abstract isLatestItemLoaded(): Promise<boolean>;
|
|
28
|
+
protected refreshMode(): Promise<void>;
|
|
29
|
+
private throwIfFetchingInProgress;
|
|
30
|
+
private addItems;
|
|
31
|
+
/**
|
|
32
|
+
* Return array with messages of count that matching limit.
|
|
33
|
+
*/
|
|
34
|
+
private trimItemsArrayToLimit;
|
|
35
|
+
}
|
|
36
|
+
export declare class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
|
|
37
|
+
private roomId;
|
|
38
|
+
private topicId;
|
|
39
|
+
private tracker;
|
|
40
|
+
/**
|
|
41
|
+
* Reexported available window modes enum.
|
|
42
|
+
*/
|
|
43
|
+
readonly WindowState: typeof WindowState;
|
|
44
|
+
constructor(roomId: string, topicId: string, tracker: ChatStateTracker);
|
|
45
|
+
/**
|
|
46
|
+
* For internal use.
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
_setTopicReference(ref: MessageReference): void;
|
|
50
|
+
private handleNewMessage;
|
|
51
|
+
private handleSession;
|
|
52
|
+
protected fetchItemsAfter(): Promise<Message[] | null>;
|
|
53
|
+
protected fetchItemsBefore(): Promise<Message[] | null>;
|
|
54
|
+
protected fetchLatestItems(): Promise<Message[]>;
|
|
55
|
+
private getTopic;
|
|
56
|
+
private getLatestMessageId;
|
|
57
|
+
protected isLatestItemLoaded(): Promise<boolean>;
|
|
58
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Envelope } from "./schemes/Envelope";
|
|
2
|
-
import { Message } from "./schemes/Message";
|
|
2
|
+
import { Message, MessageType } from "./schemes/Message";
|
|
3
3
|
import { PermissionOverwritesValue } from "./schemes/PermissionOverwritesValue";
|
|
4
4
|
import { Role } from "./schemes/Role";
|
|
5
5
|
import { Room } from "./schemes/Room";
|
|
@@ -85,4 +85,8 @@ import { TopicUnfollowed } from "./schemes/events/TopicUnfollowed";
|
|
|
85
85
|
import { TopicFollowed } from "./schemes/events/TopicFollowed";
|
|
86
86
|
import { GetFollowedTopics } from "./schemes/commands/GetFollowedTopics";
|
|
87
87
|
import { FollowedTopicUpdated } from "./schemes/events/FollowedTopicUpdated";
|
|
88
|
-
|
|
88
|
+
import { GetMessages } from "./schemes/commands/GetMessages";
|
|
89
|
+
import { Messages } from "./schemes/events/Messages";
|
|
90
|
+
import { Topics } from "./schemes/events/Topics";
|
|
91
|
+
import { GetTopics } from "./schemes/commands/GetTopics";
|
|
92
|
+
export { Envelope, Message, MessageType, Role, Room, RoomType, RoomMember, RoomSummary, Space, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, MessageReference, Bye, Error, Messages, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, PermissionOverwriteTargets, Owners, Ok, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, Topics, GetTopics, };
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { User } from "./User";
|
|
2
|
+
export declare enum MessageType {
|
|
3
|
+
Text = "Text",
|
|
4
|
+
Join = "Join",
|
|
5
|
+
Leave = "Leave"
|
|
6
|
+
}
|
|
2
7
|
export interface Message {
|
|
3
8
|
id: string;
|
|
4
9
|
createdAt: string;
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
type: MessageType;
|
|
11
|
+
user: User;
|
|
12
|
+
content?: string;
|
|
7
13
|
topicRef: string | null;
|
|
8
14
|
}
|
package/package.json
CHANGED
|
@@ -69,6 +69,10 @@ import {
|
|
|
69
69
|
FollowTopic,
|
|
70
70
|
UnfollowTopic,
|
|
71
71
|
GetFollowedTopics,
|
|
72
|
+
Messages,
|
|
73
|
+
GetMessages,
|
|
74
|
+
Topics,
|
|
75
|
+
GetTopics,
|
|
72
76
|
} from "./types/src/index";
|
|
73
77
|
import {EventTarget} from "./EventTarget";
|
|
74
78
|
|
|
@@ -173,6 +177,8 @@ export type EventsMap = {
|
|
|
173
177
|
TopicUnfollowed: TopicUnfollowed,
|
|
174
178
|
FollowedTopics: FollowedTopics,
|
|
175
179
|
FollowedTopicUpdated: FollowedTopicUpdated,
|
|
180
|
+
Messages: Messages,
|
|
181
|
+
Topics: Topics,
|
|
176
182
|
};
|
|
177
183
|
|
|
178
184
|
/**
|
|
@@ -216,4 +222,6 @@ export type CommandsMap = {
|
|
|
216
222
|
FollowTopic: [FollowTopic, EventsMap['TopicFollowed']],
|
|
217
223
|
UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']],
|
|
218
224
|
GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']],
|
|
225
|
+
GetMessages: [GetMessages, EventsMap['Messages']],
|
|
226
|
+
GetTopics: [GetTopics, EventsMap['Topics']],
|
|
219
227
|
}
|
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
2
|
import {
|
|
3
3
|
ChatLocation,
|
|
4
|
-
Message,
|
|
5
4
|
NewMessage,
|
|
6
|
-
Topic,
|
|
7
5
|
FollowedTopic,
|
|
8
6
|
TopicFollowed,
|
|
9
7
|
TopicUnfollowed,
|
|
10
8
|
RoomDeleted,
|
|
11
9
|
RoomLeft,
|
|
12
10
|
TopicDeleted,
|
|
13
|
-
FollowedTopicUpdated, RoomJoined, NewTopic, Session,
|
|
11
|
+
FollowedTopicUpdated, RoomJoined, NewTopic, Session, Room,
|
|
14
12
|
} from "../types/src";
|
|
15
13
|
import {
|
|
16
14
|
IndexedCollection,
|
|
17
15
|
ObservableIndexedObjectCollection
|
|
18
16
|
} from "../IndexedObjectCollection";
|
|
19
|
-
import {PromiseRegistry} from "./AsyncUtils";
|
|
20
|
-
|
|
21
|
-
export const getCombinedId = (location: ChatLocation) => (location.roomId ?? '') + (location.topicId ?? '');
|
|
17
|
+
import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
|
|
18
|
+
import {RoomMessagesHistory} from "./RoomMessagesHistory";
|
|
22
19
|
|
|
23
20
|
export class MessagesManager {
|
|
24
|
-
|
|
25
|
-
private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();
|
|
21
|
+
private readonly roomHistories = new IndexedCollection<string, RoomMessagesHistory>();
|
|
26
22
|
private readonly followedTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<FollowedTopic>>();
|
|
27
23
|
private readonly followedTopicsPromises = new PromiseRegistry();
|
|
24
|
+
private readonly deferredSession = new DeferredTask();
|
|
28
25
|
|
|
29
26
|
public constructor(private tracker: ChatStateTracker) {
|
|
30
27
|
this.tracker.client.on('Session', ev => this.handleSession(ev));
|
|
@@ -40,10 +37,11 @@ export class MessagesManager {
|
|
|
40
37
|
}
|
|
41
38
|
|
|
42
39
|
/**
|
|
43
|
-
* Get
|
|
40
|
+
* Get history manager for given room ID.
|
|
44
41
|
*/
|
|
45
|
-
public async
|
|
46
|
-
|
|
42
|
+
public async getRoomHistory(roomId: string): Promise<RoomMessagesHistory | undefined> {
|
|
43
|
+
await this.deferredSession.promise;
|
|
44
|
+
return this.roomHistories.get(roomId);
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
/**
|
|
@@ -122,23 +120,17 @@ export class MessagesManager {
|
|
|
122
120
|
* Calculate missed messages from any topic in given room.
|
|
123
121
|
* @return Undefined if you are not in room, stats object otherwise.
|
|
124
122
|
*/
|
|
125
|
-
public async calculateRoomMissedMessages(roomId: string): Promise<
|
|
123
|
+
public async calculateRoomMissedMessages(roomId: string): Promise<number | undefined> {
|
|
126
124
|
const collection = await this.getRoomFollowedTopics(roomId);
|
|
127
125
|
|
|
128
|
-
if (
|
|
129
|
-
return
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
for (const followedTopic of collection.items) {
|
|
135
|
-
missed += followedTopic.missed ?? followedTopic.missedMoreThan ?? 0;
|
|
136
|
-
if (followedTopic.missedMoreThan) {
|
|
137
|
-
missedMore = true;
|
|
138
|
-
}
|
|
126
|
+
if (collection) {
|
|
127
|
+
return collection.items.reduce(
|
|
128
|
+
(previousValue, currentValue) => previousValue + (currentValue.missed ?? 0),
|
|
129
|
+
0,
|
|
130
|
+
);
|
|
139
131
|
}
|
|
140
132
|
|
|
141
|
-
return
|
|
133
|
+
return undefined;
|
|
142
134
|
}
|
|
143
135
|
|
|
144
136
|
/**
|
|
@@ -146,32 +138,14 @@ export class MessagesManager {
|
|
|
146
138
|
* @internal
|
|
147
139
|
*/
|
|
148
140
|
public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {
|
|
149
|
-
this.list.delete(...topicIds.map(topicId => getCombinedId({roomId, topicId})));
|
|
150
141
|
this.followedTopics.get(roomId)?.delete(...topicIds);
|
|
151
142
|
}
|
|
152
143
|
|
|
153
|
-
private
|
|
154
|
-
|
|
155
|
-
const newTopicCombinedId = getCombinedId({roomId, topicId: newTopic.id});
|
|
156
|
-
|
|
157
|
-
this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection<Message>('id')]);
|
|
158
|
-
|
|
159
|
-
// If new topic refers to some message from this room, update other structures
|
|
160
|
-
if (newTopic.messageRef) {
|
|
161
|
-
const refTopicCombinedId = getCombinedId({roomId, topicId: newTopic.messageRef.topicId});
|
|
162
|
-
const refTopicMessages = this.list.get(refTopicCombinedId);
|
|
163
|
-
const refMessage = refTopicMessages?.get(newTopic.messageRef.messageId);
|
|
164
|
-
|
|
165
|
-
if (refMessage) {
|
|
166
|
-
// Update referenced topic ID in message
|
|
167
|
-
refTopicMessages.set({...refMessage, topicRef: newTopic.id});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
144
|
+
private createHistoryForNewRoom(room: Room): void {
|
|
145
|
+
this.roomHistories.set([room.id, new RoomMessagesHistory(room, this.tracker)]);
|
|
171
146
|
}
|
|
172
147
|
|
|
173
148
|
private handleNewMessage(ev: NewMessage): void {
|
|
174
|
-
this.list.get(getCombinedId(ev.location))?.set(ev.message);
|
|
175
149
|
this.updateLocallyFollowedTopicOnNewMessage(ev);
|
|
176
150
|
}
|
|
177
151
|
|
|
@@ -188,23 +162,21 @@ export class MessagesManager {
|
|
|
188
162
|
}
|
|
189
163
|
|
|
190
164
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
165
|
+
this.roomHistories.delete(ev.id);
|
|
191
166
|
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
192
167
|
}
|
|
193
168
|
|
|
194
169
|
private handleRoomJoin(ev: RoomJoined): void {
|
|
195
|
-
|
|
196
|
-
this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic)
|
|
197
|
-
}
|
|
170
|
+
this.createHistoryForNewRoom(ev.room)
|
|
198
171
|
this.clearRoomFollowedTopicsStructures(ev.room.id);
|
|
199
172
|
}
|
|
200
173
|
|
|
201
174
|
private handleRoomLeft(ev: RoomLeft): void {
|
|
175
|
+
this.roomHistories.delete(ev.id);
|
|
202
176
|
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
203
177
|
}
|
|
204
178
|
|
|
205
179
|
private async handleNewTopic(ev: NewTopic): Promise<void> {
|
|
206
|
-
this.createHistoryForNewTopic(ev.roomId, ev.topic);
|
|
207
|
-
|
|
208
180
|
if (this.followedTopics.has(ev.roomId)) {
|
|
209
181
|
// Check if the new topic is followed by user
|
|
210
182
|
// only if client asked for followed topics list before for this room
|
|
@@ -224,11 +196,10 @@ export class MessagesManager {
|
|
|
224
196
|
}
|
|
225
197
|
|
|
226
198
|
private handleSession(ev: Session): void {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
});
|
|
199
|
+
this.followedTopics.deleteAll();
|
|
200
|
+
this.roomHistories.deleteAll();
|
|
201
|
+
ev.state.rooms.forEach(room => this.createHistoryForNewRoom(room));
|
|
202
|
+
this.deferredSession.resolve();
|
|
232
203
|
}
|
|
233
204
|
|
|
234
205
|
private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {
|
|
@@ -240,19 +211,16 @@ export class MessagesManager {
|
|
|
240
211
|
return;
|
|
241
212
|
}
|
|
242
213
|
|
|
243
|
-
const isMe = ev.message.
|
|
214
|
+
const isMe = ev.message.user.id === this.tracker.me?.id;
|
|
244
215
|
|
|
245
216
|
let update: Partial<FollowedTopic>;
|
|
246
217
|
|
|
247
218
|
if (isMe) {
|
|
248
219
|
// Reset missed messages count if new message is authored by me
|
|
249
|
-
update = {missed: 0,
|
|
220
|
+
update = {missed: 0, lastAckMessageId: ev.message.id};
|
|
250
221
|
} else {
|
|
251
222
|
// ...add 1 otherwise
|
|
252
|
-
update = {
|
|
253
|
-
missed: followedTopic.missed === null ? null : followedTopic.missed + 1,
|
|
254
|
-
missedMoreThan: followedTopic.missedMoreThan === null ? null : followedTopic.missedMoreThan,
|
|
255
|
-
};
|
|
223
|
+
update = {missed: followedTopic.missed === null ? null : followedTopic.missed + 1};
|
|
256
224
|
}
|
|
257
225
|
|
|
258
226
|
roomFollowedTopics.set({...followedTopic, ...update});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
|
+
import {NewTopic, Room, RoomUpdated, Topic, TopicDeleted} from "../types/src";
|
|
3
|
+
import {IndexedCollection,} from "../IndexedObjectCollection";
|
|
4
|
+
import {TopicHistoryWindow} from "./TopicHistoryWindow";
|
|
5
|
+
|
|
6
|
+
export class RoomMessagesHistory {
|
|
7
|
+
private historyWindows = new IndexedCollection<string, TopicHistoryWindow>();
|
|
8
|
+
|
|
9
|
+
public constructor(
|
|
10
|
+
private room: Room,
|
|
11
|
+
private tracker: ChatStateTracker,
|
|
12
|
+
) {
|
|
13
|
+
this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
|
|
14
|
+
this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));
|
|
15
|
+
this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
|
|
16
|
+
|
|
17
|
+
if (this.room.defaultTopic) {
|
|
18
|
+
this.createHistoryWindowForTopic(this.room.defaultTopic);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Returns a history window object for the given topic ID, allowing you to view message history.
|
|
24
|
+
*/
|
|
25
|
+
public async getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined> {
|
|
26
|
+
let historyWindow = this.historyWindows.get(topicId);
|
|
27
|
+
|
|
28
|
+
if (! historyWindow) {
|
|
29
|
+
const topic = (await this.tracker.rooms.getTopics(this.room.id, [topicId])).get(topicId);
|
|
30
|
+
|
|
31
|
+
if (topic) {
|
|
32
|
+
this.createHistoryWindowForTopic(topic);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return this.historyWindows.get(topicId);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
40
|
+
if (this.room.id === ev.room.id) {
|
|
41
|
+
this.room = ev.room;
|
|
42
|
+
|
|
43
|
+
if (ev.room.defaultTopic) {
|
|
44
|
+
this.createHistoryWindowForTopic(ev.room.defaultTopic);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private handleNewTopic(ev: NewTopic): void {
|
|
50
|
+
if (this.room.id === ev.roomId) {
|
|
51
|
+
this.createHistoryWindowForTopic(ev.topic);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private handleTopicDeleted(ev: TopicDeleted): void {
|
|
56
|
+
if (this.room.id === ev.location.roomId) {
|
|
57
|
+
this.historyWindows.delete(ev.location.topicId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private createHistoryWindowForTopic(topic: Topic): void {
|
|
62
|
+
if (this.historyWindows.has(topic.id)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this.historyWindows.set([topic.id, new TopicHistoryWindow(this.room.id, topic.id, this.tracker)]);
|
|
67
|
+
|
|
68
|
+
// If new topic refers to some message from this room, update other structures
|
|
69
|
+
if (topic.messageRef) {
|
|
70
|
+
const refHistoryWindow = this.historyWindows.get(topic.messageRef.topicId);
|
|
71
|
+
|
|
72
|
+
refHistoryWindow._setTopicReference({
|
|
73
|
+
topicId: topic.id, // Reverse the reference
|
|
74
|
+
messageId: topic.messageRef.messageId,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -23,6 +23,7 @@ export class RoomsManager {
|
|
|
23
23
|
private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();
|
|
24
24
|
private readonly deferredSession = new DeferredTask();
|
|
25
25
|
private readonly membersPromises = new PromiseRegistry();
|
|
26
|
+
private readonly topicsPromises = new PromiseRegistry();
|
|
26
27
|
|
|
27
28
|
public constructor(private tracker: ChatStateTracker) {
|
|
28
29
|
this.messages = new MessagesManager(tracker);
|
|
@@ -88,10 +89,31 @@ export class RoomsManager {
|
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
/**
|
|
91
|
-
* Get collection of room
|
|
92
|
+
* Get a collection of locally cached Topic objects for given room.
|
|
93
|
+
* You can pass topic ids as second argument, to try to fetch them from the server.
|
|
92
94
|
*/
|
|
93
|
-
public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {
|
|
95
|
+
public async getTopics(roomId: string, tryToFetchTopicIds?: string[]): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {
|
|
94
96
|
await this.deferredSession.promise;
|
|
97
|
+
|
|
98
|
+
if (tryToFetchTopicIds?.length) {
|
|
99
|
+
// Topic can be fetched if it isn't already cached and fetch is not already in progress
|
|
100
|
+
const canFetch = (topicId: string) => ! this.topics.get(roomId)?.has(topicId) && ! this.topicsPromises.has(roomId + topicId);
|
|
101
|
+
const idsToFetch = tryToFetchTopicIds.filter(canFetch);
|
|
102
|
+
|
|
103
|
+
if (idsToFetch.length) {
|
|
104
|
+
const promise = this.tracker
|
|
105
|
+
.client
|
|
106
|
+
.send('GetTopics', {roomId, topicIds: idsToFetch})
|
|
107
|
+
.then(result => this.topics.get(result.data.location.roomId)?.set(...result.data.topics));
|
|
108
|
+
|
|
109
|
+
idsToFetch.forEach(topicId => this.topicsPromises.register(promise, roomId + topicId));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
for (const topicId of tryToFetchTopicIds) {
|
|
113
|
+
await this.topicsPromises.get(roomId + topicId);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
95
117
|
return this.topics.get(roomId);
|
|
96
118
|
}
|
|
97
119
|
|