polfan-server-js-client 0.1.2 → 0.1.7
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/.gitmodules +3 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/polfan-server-js-client.iml +3 -1
- package/.idea/vcs.xml +2 -1
- package/README.md +17 -17
- package/build/index.js +1985 -462
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +26 -9
- package/build/types/IndexedObjectCollection.d.ts +3 -3
- package/build/types/Permissions.d.ts +65 -0
- package/build/types/WebSocketChatClient.d.ts +1 -1
- package/build/types/index.d.ts +4 -1
- package/build/types/state-tracker/AsyncUtils.d.ts +14 -0
- package/build/types/state-tracker/ChatStateTracker.d.ts +26 -0
- package/build/types/state-tracker/MessagesManager.d.ts +39 -0
- package/build/types/state-tracker/PermissionsManager.d.ts +41 -0
- package/build/types/state-tracker/RoomsManager.d.ts +49 -0
- package/build/types/state-tracker/SpacesManager.d.ts +52 -0
- package/build/types/state-tracker/functions.d.ts +2 -0
- package/build/types/types/dist/index.d.ts +1 -0
- package/build/types/types/dist/schemes/AckReport.d.ts +1 -0
- package/build/types/types/dist/schemes/ChatLocation.d.ts +1 -0
- package/build/types/types/dist/schemes/Envelope.d.ts +1 -0
- package/build/types/types/dist/schemes/Message.d.ts +1 -0
- package/build/types/types/dist/schemes/PermissionOverwritesValue.d.ts +1 -0
- package/build/types/types/dist/schemes/Role.d.ts +1 -0
- package/build/types/types/dist/schemes/Room.d.ts +1 -0
- package/build/types/types/dist/schemes/RoomMember.d.ts +1 -0
- package/build/types/types/dist/schemes/RoomSummary.d.ts +1 -0
- package/build/types/types/dist/schemes/Space.d.ts +1 -0
- package/build/types/types/dist/schemes/SpaceMember.d.ts +1 -0
- package/build/types/types/dist/schemes/Topic.d.ts +1 -0
- package/build/types/types/dist/schemes/User.d.ts +1 -0
- package/build/types/types/dist/schemes/UserState.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/Ack.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/AssignRole.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateMessage.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateOwner.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateRole.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateSpace.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/CreateTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeassignRole.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeleteOwner.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeleteRole.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeleteRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeleteSpace.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/DeleteTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetAckReports.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetComputedPermissions.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetOwners.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetRoomMembers.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetSession.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetSpaceMembers.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/GetSpaceRooms.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/JoinRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/JoinSpace.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/LeaveRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/LeaveSpace.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/UpdateRole.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/UpdateRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/commands/UpdateSpace.d.ts +1 -0
- package/build/types/types/dist/schemes/events/AckReports.d.ts +1 -0
- package/build/types/types/dist/schemes/events/Bye.d.ts +1 -0
- package/build/types/types/dist/schemes/events/ComputedPermissions.d.ts +1 -0
- package/build/types/types/dist/schemes/events/Error.d.ts +1 -0
- package/build/types/types/dist/schemes/events/NewMessage.d.ts +1 -0
- package/build/types/types/dist/schemes/events/NewRole.d.ts +1 -0
- package/build/types/types/dist/schemes/events/NewRoom.d.ts +1 -0
- package/build/types/types/dist/schemes/events/NewTopic.d.ts +1 -0
- package/build/types/types/dist/schemes/events/Ok.d.ts +1 -0
- package/build/types/types/dist/schemes/events/Owners.d.ts +1 -0
- package/build/types/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +1 -0
- package/build/types/types/dist/schemes/events/PermissionOverwrites.d.ts +1 -0
- package/build/types/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoleDeleted.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoleUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomDeleted.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomJoined.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomLeft.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomMemberJoined.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomMemberLeft.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomMemberUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomMembers.d.ts +1 -0
- package/build/types/types/dist/schemes/events/RoomUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/Session.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceDeleted.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceJoined.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceLeft.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceMemberJoined.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceMemberLeft.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceMemberUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceMembers.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceRooms.d.ts +1 -0
- package/build/types/types/dist/schemes/events/SpaceUpdated.d.ts +1 -0
- package/build/types/types/dist/schemes/events/TopicDeleted.d.ts +1 -0
- package/build/types/types/dist/schemes/events/UserUpdated.d.ts +1 -0
- package/build/types/types/src/index.d.ts +82 -0
- package/build/types/types/src/schemes/AckReport.d.ts +7 -0
- package/build/types/types/src/schemes/ChatLocation.d.ts +5 -0
- package/build/types/types/src/schemes/Envelope.d.ts +5 -0
- package/build/types/types/src/schemes/Message.d.ts +7 -0
- package/build/types/types/src/schemes/PermissionOverwritesValue.d.ts +4 -0
- package/build/types/types/src/schemes/Role.d.ts +6 -0
- package/build/types/types/src/schemes/Room.d.ts +10 -0
- package/build/types/types/src/schemes/RoomMember.d.ts +7 -0
- package/build/types/types/src/schemes/RoomSummary.d.ts +5 -0
- package/build/types/types/src/schemes/Space.d.ts +6 -0
- package/build/types/types/src/schemes/SpaceMember.d.ts +5 -0
- package/build/types/types/src/schemes/Topic.d.ts +9 -0
- package/build/types/types/src/schemes/User.d.ts +8 -0
- package/build/types/types/src/schemes/UserState.d.ts +6 -0
- package/build/types/types/src/schemes/commands/Ack.d.ts +5 -0
- package/build/types/types/src/schemes/commands/AssignRole.d.ts +6 -0
- package/build/types/types/src/schemes/commands/CreateMessage.d.ts +5 -0
- package/build/types/types/src/schemes/commands/CreateOwner.d.ts +5 -0
- package/build/types/types/src/schemes/commands/CreateRole.d.ts +5 -0
- package/build/types/types/src/schemes/commands/CreateRoom.d.ts +7 -0
- package/build/types/types/src/schemes/commands/CreateSpace.d.ts +3 -0
- package/build/types/types/src/schemes/commands/CreateTopic.d.ts +12 -0
- package/build/types/types/src/schemes/commands/DeassignRole.d.ts +6 -0
- package/build/types/types/src/schemes/commands/DeleteOwner.d.ts +5 -0
- package/build/types/types/src/schemes/commands/DeleteRole.d.ts +4 -0
- package/build/types/types/src/schemes/commands/DeleteRoom.d.ts +3 -0
- package/build/types/types/src/schemes/commands/DeleteSpace.d.ts +3 -0
- package/build/types/types/src/schemes/commands/DeleteTopic.d.ts +4 -0
- package/build/types/types/src/schemes/commands/GetAckReports.d.ts +4 -0
- package/build/types/types/src/schemes/commands/GetComputedPermissions.d.ts +4 -0
- package/build/types/types/src/schemes/commands/GetOwners.d.ts +4 -0
- package/build/types/types/src/schemes/commands/GetPermissionOverwriteTargets.d.ts +4 -0
- package/build/types/types/src/schemes/commands/GetPermissionOverwrites.d.ts +6 -0
- package/build/types/types/src/schemes/commands/GetRoomMembers.d.ts +3 -0
- package/build/types/types/src/schemes/commands/GetSession.d.ts +2 -0
- package/build/types/types/src/schemes/commands/GetSpaceMembers.d.ts +3 -0
- package/build/types/types/src/schemes/commands/GetSpaceRooms.d.ts +3 -0
- package/build/types/types/src/schemes/commands/JoinRoom.d.ts +3 -0
- package/build/types/types/src/schemes/commands/JoinSpace.d.ts +3 -0
- package/build/types/types/src/schemes/commands/LeaveRoom.d.ts +3 -0
- package/build/types/types/src/schemes/commands/LeaveSpace.d.ts +3 -0
- package/build/types/types/src/schemes/commands/SetPermissionOverwrites.d.ts +8 -0
- package/build/types/types/src/schemes/commands/UpdateRole.d.ts +7 -0
- package/build/types/types/src/schemes/commands/UpdateRoom.d.ts +5 -0
- package/build/types/types/src/schemes/commands/UpdateSpace.d.ts +4 -0
- package/build/types/types/src/schemes/events/AckReports.d.ts +4 -0
- package/build/types/types/src/schemes/events/Bye.d.ts +3 -0
- package/build/types/types/src/schemes/events/ComputedPermissions.d.ts +5 -0
- package/build/types/types/src/schemes/events/Error.d.ts +4 -0
- package/build/types/types/src/schemes/events/NewMessage.d.ts +6 -0
- package/build/types/types/src/schemes/events/NewRole.d.ts +5 -0
- package/build/types/types/src/schemes/events/NewRoom.d.ts +5 -0
- package/build/types/types/src/schemes/events/NewTopic.d.ts +5 -0
- package/build/types/types/src/schemes/events/Ok.d.ts +2 -0
- package/build/types/types/src/schemes/events/Owners.d.ts +8 -0
- package/build/types/types/src/schemes/events/PermissionOverwriteTargets.d.ts +10 -0
- package/build/types/types/src/schemes/events/PermissionOverwrites.d.ts +8 -0
- package/build/types/types/src/schemes/events/PermissionOverwritesUpdated.d.ts +8 -0
- package/build/types/types/src/schemes/events/RoleDeleted.d.ts +4 -0
- package/build/types/types/src/schemes/events/RoleUpdated.d.ts +5 -0
- package/build/types/types/src/schemes/events/RoomDeleted.d.ts +3 -0
- package/build/types/types/src/schemes/events/RoomJoined.d.ts +4 -0
- package/build/types/types/src/schemes/events/RoomLeft.d.ts +3 -0
- package/build/types/types/src/schemes/events/RoomMemberJoined.d.ts +5 -0
- package/build/types/types/src/schemes/events/RoomMemberLeft.d.ts +4 -0
- package/build/types/types/src/schemes/events/RoomMemberUpdated.d.ts +6 -0
- package/build/types/types/src/schemes/events/RoomMembers.d.ts +5 -0
- package/build/types/types/src/schemes/events/RoomUpdated.d.ts +4 -0
- package/build/types/types/src/schemes/events/Session.d.ts +7 -0
- package/build/types/types/src/schemes/events/SpaceDeleted.d.ts +3 -0
- package/build/types/types/src/schemes/events/SpaceJoined.d.ts +4 -0
- package/build/types/types/src/schemes/events/SpaceLeft.d.ts +3 -0
- package/build/types/types/src/schemes/events/SpaceMemberJoined.d.ts +5 -0
- package/build/types/types/src/schemes/events/SpaceMemberLeft.d.ts +4 -0
- package/build/types/types/src/schemes/events/SpaceMemberUpdated.d.ts +6 -0
- package/build/types/types/src/schemes/events/SpaceMembers.d.ts +5 -0
- package/build/types/types/src/schemes/events/SpaceRooms.d.ts +5 -0
- package/build/types/types/src/schemes/events/SpaceUpdated.d.ts +4 -0
- package/build/types/types/src/schemes/events/TopicDeleted.d.ts +4 -0
- package/build/types/types/src/schemes/events/UserUpdated.d.ts +4 -0
- package/jest.config.ts +199 -0
- package/package.json +4 -22
- package/src/AbstractChatClient.ts +50 -16
- package/src/AbstractRestClient.ts +65 -65
- package/src/IndexedObjectCollection.ts +3 -3
- package/src/Permissions.ts +46 -0
- package/src/WebApiChatClient.ts +1 -1
- package/src/WebSocketChatClient.ts +2 -2
- package/src/index.ts +7 -2
- package/src/state-tracker/AsyncUtils.ts +38 -0
- package/src/state-tracker/ChatStateTracker.ts +42 -0
- package/src/state-tracker/MessagesManager.ts +168 -0
- package/src/state-tracker/PermissionsManager.ts +306 -0
- package/src/state-tracker/RoomsManager.ts +272 -0
- package/src/state-tracker/SpacesManager.ts +267 -0
- package/src/state-tracker/functions.ts +25 -0
- package/src/types/README.md +2 -0
- package/src/types/dist/index.d.ts +82 -0
- package/src/types/dist/index.js +2 -0
- package/src/types/dist/schemes/AckReport.d.ts +7 -0
- package/src/types/dist/schemes/AckReport.js +2 -0
- package/src/types/dist/schemes/ChatLocation.d.ts +5 -0
- package/src/types/dist/schemes/ChatLocation.js +2 -0
- package/src/types/dist/schemes/Envelope.d.ts +5 -0
- package/src/types/dist/schemes/Envelope.js +2 -0
- package/src/types/dist/schemes/Message.d.ts +7 -0
- package/src/types/dist/schemes/Message.js +2 -0
- package/src/types/dist/schemes/PermissionOverwritesValue.d.ts +4 -0
- package/src/types/dist/schemes/PermissionOverwritesValue.js +2 -0
- package/src/types/dist/schemes/Role.d.ts +6 -0
- package/src/types/dist/schemes/Role.js +2 -0
- package/src/types/dist/schemes/Room.d.ts +10 -0
- package/src/types/dist/schemes/Room.js +2 -0
- package/src/types/dist/schemes/RoomMember.d.ts +7 -0
- package/src/types/dist/schemes/RoomMember.js +2 -0
- package/src/types/dist/schemes/RoomSummary.d.ts +5 -0
- package/src/types/dist/schemes/RoomSummary.js +2 -0
- package/src/types/dist/schemes/Space.d.ts +6 -0
- package/src/types/dist/schemes/Space.js +2 -0
- package/src/types/dist/schemes/SpaceMember.d.ts +5 -0
- package/src/types/dist/schemes/SpaceMember.js +2 -0
- package/src/types/dist/schemes/Topic.d.ts +9 -0
- package/src/types/dist/schemes/Topic.js +2 -0
- package/src/types/dist/schemes/User.d.ts +8 -0
- package/src/types/dist/schemes/User.js +2 -0
- package/src/types/dist/schemes/UserState.d.ts +6 -0
- package/src/types/dist/schemes/UserState.js +2 -0
- package/src/types/dist/schemes/commands/Ack.d.ts +5 -0
- package/src/types/dist/schemes/commands/Ack.js +2 -0
- package/src/types/dist/schemes/commands/AssignRole.d.ts +6 -0
- package/src/types/dist/schemes/commands/AssignRole.js +2 -0
- package/src/types/dist/schemes/commands/CreateMessage.d.ts +5 -0
- package/src/types/dist/schemes/commands/CreateMessage.js +2 -0
- package/src/types/dist/schemes/commands/CreateOwner.d.ts +5 -0
- package/src/types/dist/schemes/commands/CreateOwner.js +2 -0
- package/src/types/dist/schemes/commands/CreateRole.d.ts +5 -0
- package/src/types/dist/schemes/commands/CreateRole.js +2 -0
- package/src/types/dist/schemes/commands/CreateRoom.d.ts +7 -0
- package/src/types/dist/schemes/commands/CreateRoom.js +2 -0
- package/src/types/dist/schemes/commands/CreateSpace.d.ts +3 -0
- package/src/types/dist/schemes/commands/CreateSpace.js +2 -0
- package/src/types/dist/schemes/commands/CreateTopic.d.ts +12 -0
- package/src/types/dist/schemes/commands/CreateTopic.js +2 -0
- package/src/types/dist/schemes/commands/DeassignRole.d.ts +6 -0
- package/src/types/dist/schemes/commands/DeassignRole.js +2 -0
- package/src/types/dist/schemes/commands/DeleteOwner.d.ts +5 -0
- package/src/types/dist/schemes/commands/DeleteOwner.js +2 -0
- package/src/types/dist/schemes/commands/DeleteRole.d.ts +4 -0
- package/src/types/dist/schemes/commands/DeleteRole.js +2 -0
- package/src/types/dist/schemes/commands/DeleteRoom.d.ts +3 -0
- package/src/types/dist/schemes/commands/DeleteRoom.js +2 -0
- package/src/types/dist/schemes/commands/DeleteSpace.d.ts +3 -0
- package/src/types/dist/schemes/commands/DeleteSpace.js +2 -0
- package/src/types/dist/schemes/commands/DeleteTopic.d.ts +4 -0
- package/src/types/dist/schemes/commands/DeleteTopic.js +2 -0
- package/src/types/dist/schemes/commands/GetAckReports.d.ts +4 -0
- package/src/types/dist/schemes/commands/GetAckReports.js +2 -0
- package/src/types/dist/schemes/commands/GetComputedPermissions.d.ts +4 -0
- package/src/types/dist/schemes/commands/GetComputedPermissions.js +2 -0
- package/src/types/dist/schemes/commands/GetOwners.d.ts +4 -0
- package/src/types/dist/schemes/commands/GetOwners.js +2 -0
- package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +4 -0
- package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.js +2 -0
- package/src/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +6 -0
- package/src/types/dist/schemes/commands/GetPermissionOverwrites.js +2 -0
- package/src/types/dist/schemes/commands/GetRoomMembers.d.ts +3 -0
- package/src/types/dist/schemes/commands/GetRoomMembers.js +2 -0
- package/src/types/dist/schemes/commands/GetSession.d.ts +2 -0
- package/src/types/dist/schemes/commands/GetSession.js +2 -0
- package/src/types/dist/schemes/commands/GetSpaceMembers.d.ts +3 -0
- package/src/types/dist/schemes/commands/GetSpaceMembers.js +2 -0
- package/src/types/dist/schemes/commands/GetSpaceRooms.d.ts +3 -0
- package/src/types/dist/schemes/commands/GetSpaceRooms.js +2 -0
- package/src/types/dist/schemes/commands/JoinRoom.d.ts +3 -0
- package/src/types/dist/schemes/commands/JoinRoom.js +2 -0
- package/src/types/dist/schemes/commands/JoinSpace.d.ts +3 -0
- package/src/types/dist/schemes/commands/JoinSpace.js +2 -0
- package/src/types/dist/schemes/commands/LeaveRoom.d.ts +3 -0
- package/src/types/dist/schemes/commands/LeaveRoom.js +2 -0
- package/src/types/dist/schemes/commands/LeaveSpace.d.ts +3 -0
- package/src/types/dist/schemes/commands/LeaveSpace.js +2 -0
- package/src/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +8 -0
- package/src/types/dist/schemes/commands/SetPermissionOverwrites.js +2 -0
- package/src/types/dist/schemes/commands/UpdateRole.d.ts +7 -0
- package/src/types/dist/schemes/commands/UpdateRole.js +2 -0
- package/src/types/dist/schemes/commands/UpdateRoom.d.ts +5 -0
- package/src/types/dist/schemes/commands/UpdateRoom.js +2 -0
- package/src/types/dist/schemes/commands/UpdateSpace.d.ts +4 -0
- package/src/types/dist/schemes/commands/UpdateSpace.js +2 -0
- package/src/types/dist/schemes/events/AckReports.d.ts +4 -0
- package/src/types/dist/schemes/events/AckReports.js +2 -0
- package/src/types/dist/schemes/events/Bye.d.ts +3 -0
- package/src/types/dist/schemes/events/Bye.js +2 -0
- package/src/types/dist/schemes/events/ComputedPermissions.d.ts +5 -0
- package/src/types/dist/schemes/events/ComputedPermissions.js +2 -0
- package/src/types/dist/schemes/events/Error.d.ts +4 -0
- package/src/types/dist/schemes/events/Error.js +2 -0
- package/src/types/dist/schemes/events/NewMessage.d.ts +6 -0
- package/src/types/dist/schemes/events/NewMessage.js +2 -0
- package/src/types/dist/schemes/events/NewRole.d.ts +5 -0
- package/src/types/dist/schemes/events/NewRole.js +2 -0
- package/src/types/dist/schemes/events/NewRoom.d.ts +5 -0
- package/src/types/dist/schemes/events/NewRoom.js +2 -0
- package/src/types/dist/schemes/events/NewTopic.d.ts +5 -0
- package/src/types/dist/schemes/events/NewTopic.js +2 -0
- package/src/types/dist/schemes/events/Ok.d.ts +2 -0
- package/src/types/dist/schemes/events/Ok.js +2 -0
- package/src/types/dist/schemes/events/Owners.d.ts +8 -0
- package/src/types/dist/schemes/events/Owners.js +2 -0
- package/src/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +10 -0
- package/src/types/dist/schemes/events/PermissionOverwriteTargets.js +2 -0
- package/src/types/dist/schemes/events/PermissionOverwrites.d.ts +8 -0
- package/src/types/dist/schemes/events/PermissionOverwrites.js +2 -0
- package/src/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +8 -0
- package/src/types/dist/schemes/events/PermissionOverwritesUpdated.js +2 -0
- package/src/types/dist/schemes/events/RoleDeleted.d.ts +4 -0
- package/src/types/dist/schemes/events/RoleDeleted.js +2 -0
- package/src/types/dist/schemes/events/RoleUpdated.d.ts +5 -0
- package/src/types/dist/schemes/events/RoleUpdated.js +2 -0
- package/src/types/dist/schemes/events/RoomDeleted.d.ts +3 -0
- package/src/types/dist/schemes/events/RoomDeleted.js +2 -0
- package/src/types/dist/schemes/events/RoomJoined.d.ts +4 -0
- package/src/types/dist/schemes/events/RoomJoined.js +2 -0
- package/src/types/dist/schemes/events/RoomLeft.d.ts +3 -0
- package/src/types/dist/schemes/events/RoomLeft.js +2 -0
- package/src/types/dist/schemes/events/RoomMemberJoined.d.ts +5 -0
- package/src/types/dist/schemes/events/RoomMemberJoined.js +2 -0
- package/src/types/dist/schemes/events/RoomMemberLeft.d.ts +4 -0
- package/src/types/dist/schemes/events/RoomMemberLeft.js +2 -0
- package/src/types/dist/schemes/events/RoomMemberUpdated.d.ts +6 -0
- package/src/types/dist/schemes/events/RoomMemberUpdated.js +2 -0
- package/src/types/dist/schemes/events/RoomMembers.d.ts +5 -0
- package/src/types/dist/schemes/events/RoomMembers.js +2 -0
- package/src/types/dist/schemes/events/RoomUpdated.d.ts +4 -0
- package/src/types/dist/schemes/events/RoomUpdated.js +2 -0
- package/src/types/dist/schemes/events/Session.d.ts +7 -0
- package/src/types/dist/schemes/events/Session.js +2 -0
- package/src/types/dist/schemes/events/SpaceDeleted.d.ts +3 -0
- package/src/types/dist/schemes/events/SpaceDeleted.js +2 -0
- package/src/types/dist/schemes/events/SpaceJoined.d.ts +4 -0
- package/src/types/dist/schemes/events/SpaceJoined.js +2 -0
- package/src/types/dist/schemes/events/SpaceLeft.d.ts +3 -0
- package/src/types/dist/schemes/events/SpaceLeft.js +2 -0
- package/src/types/dist/schemes/events/SpaceMemberJoined.d.ts +5 -0
- package/src/types/dist/schemes/events/SpaceMemberJoined.js +2 -0
- package/src/types/dist/schemes/events/SpaceMemberLeft.d.ts +4 -0
- package/src/types/dist/schemes/events/SpaceMemberLeft.js +2 -0
- package/src/types/dist/schemes/events/SpaceMemberUpdated.d.ts +6 -0
- package/src/types/dist/schemes/events/SpaceMemberUpdated.js +2 -0
- package/src/types/dist/schemes/events/SpaceMembers.d.ts +5 -0
- package/src/types/dist/schemes/events/SpaceMembers.js +2 -0
- package/src/types/dist/schemes/events/SpaceRooms.d.ts +5 -0
- package/src/types/dist/schemes/events/SpaceRooms.js +2 -0
- package/src/types/dist/schemes/events/SpaceUpdated.d.ts +4 -0
- package/src/types/dist/schemes/events/SpaceUpdated.js +2 -0
- package/src/types/dist/schemes/events/TopicDeleted.d.ts +4 -0
- package/src/types/dist/schemes/events/TopicDeleted.js +2 -0
- package/src/types/dist/schemes/events/UserUpdated.d.ts +4 -0
- package/src/types/dist/schemes/events/UserUpdated.js +2 -0
- package/src/types/package-lock.json +31 -0
- package/src/types/package.json +16 -0
- package/src/types/src/index.ts +168 -0
- package/src/types/src/schemes/AckReport.ts +7 -0
- package/src/types/src/schemes/ChatLocation.ts +5 -0
- package/src/types/src/schemes/Envelope.ts +5 -0
- package/src/types/src/schemes/Message.ts +8 -0
- package/src/types/src/schemes/PermissionOverwritesValue.ts +4 -0
- package/src/types/src/schemes/Role.ts +6 -0
- package/src/types/src/schemes/Room.ts +12 -0
- package/src/types/src/schemes/RoomMember.ts +8 -0
- package/src/types/src/schemes/RoomSummary.ts +5 -0
- package/src/types/src/schemes/Space.ts +7 -0
- package/src/types/src/schemes/SpaceMember.ts +6 -0
- package/src/types/src/schemes/Topic.ts +10 -0
- package/src/types/src/schemes/User.ts +9 -0
- package/src/types/src/schemes/UserState.ts +7 -0
- package/src/types/src/schemes/commands/Ack.ts +6 -0
- package/src/types/src/schemes/commands/AssignRole.ts +7 -0
- package/src/types/src/schemes/commands/CreateMessage.ts +6 -0
- package/src/types/src/schemes/commands/CreateOwner.ts +6 -0
- package/src/types/src/schemes/commands/CreateRole.ts +5 -0
- package/src/types/src/schemes/commands/CreateRoom.ts +8 -0
- package/src/types/src/schemes/commands/CreateSpace.ts +3 -0
- package/src/types/src/schemes/commands/CreateTopic.ts +14 -0
- package/src/types/src/schemes/commands/DeassignRole.ts +7 -0
- package/src/types/src/schemes/commands/DeleteOwner.ts +6 -0
- package/src/types/src/schemes/commands/DeleteRole.ts +4 -0
- package/src/types/src/schemes/commands/DeleteRoom.ts +3 -0
- package/src/types/src/schemes/commands/DeleteSpace.ts +3 -0
- package/src/types/src/schemes/commands/DeleteTopic.ts +5 -0
- package/src/types/src/schemes/commands/GetAckReports.ts +5 -0
- package/src/types/src/schemes/commands/GetComputedPermissions.ts +5 -0
- package/src/types/src/schemes/commands/GetOwners.ts +5 -0
- package/src/types/src/schemes/commands/GetPermissionOverwriteTargets.ts +5 -0
- package/src/types/src/schemes/commands/GetPermissionOverwrites.ts +7 -0
- package/src/types/src/schemes/commands/GetRoomMembers.ts +3 -0
- package/src/types/src/schemes/commands/GetSession.ts +2 -0
- package/src/types/src/schemes/commands/GetSpaceMembers.ts +3 -0
- package/src/types/src/schemes/commands/GetSpaceRooms.ts +3 -0
- package/src/types/src/schemes/commands/JoinRoom.ts +3 -0
- package/src/types/src/schemes/commands/JoinSpace.ts +3 -0
- package/src/types/src/schemes/commands/LeaveRoom.ts +3 -0
- package/src/types/src/schemes/commands/LeaveSpace.ts +3 -0
- package/src/types/src/schemes/commands/SetPermissionOverwrites.ts +9 -0
- package/src/types/src/schemes/commands/UpdateRole.ts +7 -0
- package/src/types/src/schemes/commands/UpdateRoom.ts +5 -0
- package/src/types/src/schemes/commands/UpdateSpace.ts +4 -0
- package/src/types/src/schemes/events/AckReports.ts +5 -0
- package/src/types/src/schemes/events/Bye.ts +3 -0
- package/src/types/src/schemes/events/ComputedPermissions.ts +6 -0
- package/src/types/src/schemes/events/Error.ts +4 -0
- package/src/types/src/schemes/events/NewMessage.ts +7 -0
- package/src/types/src/schemes/events/NewRole.ts +6 -0
- package/src/types/src/schemes/events/NewRoom.ts +6 -0
- package/src/types/src/schemes/events/NewTopic.ts +6 -0
- package/src/types/src/schemes/events/Ok.ts +3 -0
- package/src/types/src/schemes/events/Owners.ts +9 -0
- package/src/types/src/schemes/events/PermissionOverwriteTargets.ts +11 -0
- package/src/types/src/schemes/events/PermissionOverwrites.ts +9 -0
- package/src/types/src/schemes/events/PermissionOverwritesUpdated.ts +9 -0
- package/src/types/src/schemes/events/RoleDeleted.ts +4 -0
- package/src/types/src/schemes/events/RoleUpdated.ts +6 -0
- package/src/types/src/schemes/events/RoomDeleted.ts +3 -0
- package/src/types/src/schemes/events/RoomJoined.ts +5 -0
- package/src/types/src/schemes/events/RoomLeft.ts +3 -0
- package/src/types/src/schemes/events/RoomMemberJoined.ts +6 -0
- package/src/types/src/schemes/events/RoomMemberLeft.ts +4 -0
- package/src/types/src/schemes/events/RoomMemberUpdated.ts +7 -0
- package/src/types/src/schemes/events/RoomMembers.ts +6 -0
- package/src/types/src/schemes/events/RoomUpdated.ts +5 -0
- package/src/types/src/schemes/events/Session.ts +8 -0
- package/src/types/src/schemes/events/SpaceDeleted.ts +3 -0
- package/src/types/src/schemes/events/SpaceJoined.ts +5 -0
- package/src/types/src/schemes/events/SpaceLeft.ts +3 -0
- package/src/types/src/schemes/events/SpaceMemberJoined.ts +6 -0
- package/src/types/src/schemes/events/SpaceMemberLeft.ts +4 -0
- package/src/types/src/schemes/events/SpaceMemberUpdated.ts +7 -0
- package/src/types/src/schemes/events/SpaceMembers.ts +6 -0
- package/src/types/src/schemes/events/SpaceRooms.ts +6 -0
- package/src/types/src/schemes/events/SpaceUpdated.ts +5 -0
- package/src/types/src/schemes/events/TopicDeleted.ts +5 -0
- package/src/types/src/schemes/events/UserUpdated.ts +5 -0
- package/src/types/tsconfig.json +75 -0
- package/tests/async-utils.test.ts +30 -0
- package/tests/permissions.test.ts +14 -0
- package/tests/space-roles.test.ts +43 -0
- package/build/types/ChatStateTracker.d.ts +0 -54
- package/index.html +0 -8
- package/src/ChatStateTracker.ts +0 -336
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Ok,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdate,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetUserPermissions,\n SetUserPermissions,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetRolePermissions,\n GetRolePermissions,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage, Envelope,\n} from \"pserv-ts-types\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractChatClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Ok: Ok,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdate: SpaceMemberUpdate,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']],\n GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']],\n SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']],\n GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | null {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | null {\n return this._items.get(id);\n }\n\n public getAt(index: number): T|null {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"./IndexedObjectCollection\";\nimport {\n Message,\n NewMessage,\n NewRole,\n NewRoom,\n NewTopic, Role,\n RoleDeleted,\n Room,\n RoomDeleted,\n RoomJoined,\n RoomLeft, RoomMember,\n RoomMemberJoined,\n RoomMemberLeft,\n RoomMembers, RoomSummary,\n Session,\n Space,\n SpaceDeleted,\n SpaceJoined,\n SpaceLeft, SpaceMember,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMembers,\n SpaceMemberUpdate,\n SpaceRooms, Topic,\n TopicDeleted, User\n} from \"pserv-ts-types\";\n\ntype Deferred = {resolver: () => void, promise: Promise<void>};\n\nexport class ChatStateTracker {\n private readonly joinedSpaces = new ObservableIndexedObjectCollection<Space>('id');\n private readonly joinedRooms = new ObservableIndexedObjectCollection<Room>('id');\n private readonly spacesRoles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\n private readonly roomsTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\n private readonly topicsMessages = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\n\n // lazy loaded collections\n private readonly spacesRooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\n private readonly spacesMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\n private readonly roomsMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\n private readonly deferredGetters = new IndexedCollection<string, Deferred>();\n\n private reconnecting: boolean = false;\n private me: User = null;\n\n public constructor(private readonly client: WebSocketChatClient) {\n this.createDeferredGetter('session');\n this.bind();\n }\n\n public async getMe(): Promise<User> {\n await this.deferredGetterReadiness('session');\n return this.me;\n }\n\n public async getJoinedSpaces(): Promise<ObservableIndexedObjectCollection<Space>> {\n await this.deferredGetterReadiness('session');\n return this.joinedSpaces;\n }\n\n public async getJoinedRooms(): Promise<ObservableIndexedObjectCollection<Room>> {\n await this.deferredGetterReadiness('session');\n return this.joinedRooms;\n }\n\n public async getSpaceRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | null> {\n await this.deferredGetterReadiness('session');\n return this.spacesRoles.get(spaceId);\n }\n\n public async getRoomTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | null> {\n await this.deferredGetterReadiness('session');\n return this.roomsTopics.get(roomId);\n }\n\n public async getTopicMessages(topicId: string): Promise<ObservableIndexedObjectCollection<Message> | null> {\n return this.topicsMessages.get(topicId);\n }\n\n public async getSpaceRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | null> {\n const deferredGetterName = `spaces-rooms-${spaceId}`;\n if (!this.spacesRooms.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceRooms', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesRooms.get(spaceId);\n }\n\n public async getSpaceMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | null> {\n const deferredGetterName = `spaces-members-${spaceId}`;\n if (!this.spacesMembers.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceMembers', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesMembers.get(spaceId);\n }\n\n public async getRoomMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | null> {\n const deferredGetterName = `rooms-members-${roomId}`;\n if (!this.roomsMembers.has(roomId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetRoomMembers', {id: roomId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.roomsMembers.get(roomId);\n }\n\n private async deferredGetterReadiness(name: string): Promise<void> {\n if (this.deferredGetters.has(name)) {\n await this.deferredGetters.get(name)?.promise;\n }\n }\n\n private bind(): void {\n this.client.on(this.client.Event.disconnect, ev => this.handleDisconnect(ev as any as boolean));\n this.client.on('NewMessage', ev => this.handleNewMessage(ev));\n this.client.on('NewRole', ev => this.handleNewRole(ev));\n this.client.on('NewRoom', ev => this.handleNewRoom(ev));\n this.client.on('NewTopic', ev => this.handleNewTopic(ev));\n this.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\n this.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\n this.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\n this.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\n this.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\n this.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\n this.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\n this.client.on('Session', ev => this.handleSession(ev));\n this.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\n this.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\n this.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));\n this.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\n this.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\n this.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\n this.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\n this.client.on('SpaceMemberUpdate', ev => this.handleSpaceMemberUpdate(ev));\n this.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\n }\n\n private createDeferredGetter(name: string): void {\n if (this.deferredGetters.has(name)) {\n return;\n }\n const deferred: Deferred = {promise: undefined, resolver: undefined};\n deferred.promise = new Promise(resolve => deferred.resolver = resolve);\n this.deferredGetters.set([name, deferred]);\n }\n\n private handleDisconnect(reconnect: boolean): void {\n if (reconnect) {\n this.reconnecting = true;\n return;\n }\n }\n\n private handleNewMessage(ev: NewMessage): void {\n this.topicsMessages.get(ev.topicId).set(ev.message);\n }\n\n private handleNewRole(ev: NewRole): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.set(ev.role);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleNewRoom(ev: NewRoom): void {\n this.spacesRooms.get(ev.spaceId)?.set(ev.summary);\n }\n\n private handleNewTopic(ev: NewTopic): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.set(ev.topic);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n\n private handleRoleDeleted(ev: RoleDeleted): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.delete(ev.id);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleRoomDeleted(ev: RoomDeleted): void {\n if (ev.spaceId) {\n this.spacesRooms.get(ev.spaceId).delete(ev.id);\n }\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomJoined(ev: RoomJoined): void {\n this.addJoinedRooms(ev.room);\n }\n\n private addJoinedRooms(...rooms: Room[]): void {\n this.roomsTopics.set(...rooms.map<[string, ObservableIndexedObjectCollection<Topic>]>(room => [\n room.id,\n new ObservableIndexedObjectCollection<Topic>('id', room.topics)\n ]));\n\n const topicsMessages: [string, ObservableIndexedObjectCollection<Message>][] = [];\n for (const room of rooms) {\n topicsMessages.push(...room.topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\n topic.id,\n new ObservableIndexedObjectCollection<Message>('id')\n ]));\n }\n this.topicsMessages.set(...topicsMessages);\n\n this.joinedRooms.set(...rooms);\n }\n\n private handleRoomLeft(ev: RoomLeft): void {\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).set(ev.member);\n }\n }\n\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).delete(ev.userId);\n }\n }\n\n private handleRoomMembers(ev: RoomMembers): void {\n if (!this.roomsMembers.has(ev.id)) {\n this.roomsMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(\n member => member?.user.id ?? member.spaceMember.user.id,\n ev.members,\n )\n ]);\n this.deferredGetters.get(`rooms-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSession(ev: Session): void {\n if (this.me && !this.reconnecting) {\n return;\n }\n\n this.me = ev.user;\n this.reconnecting = false;\n\n this.joinedRooms.deleteAll();\n this.roomsTopics.deleteAll();\n this.roomsMembers.deleteAll();\n this.joinedSpaces.deleteAll();\n this.spacesRoles.deleteAll();\n this.spacesRooms.deleteAll();\n this.spacesMembers.deleteAll();\n\n this.addJoinedRooms(...ev.state.rooms);\n this.addJoinedSpaces(...ev.state.spaces);\n\n this.deferredGetters.get('session')?.resolver();\n }\n\n private handleSpaceDeleted(ev: SpaceDeleted): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n \n private handleSpaceJoined(ev: SpaceJoined): void {\n this.addJoinedSpaces(ev.space);\n }\n\n private addJoinedSpaces(...spaces: Space[]): void {\n this.spacesRoles.set(...(spaces.map(space => [\n space.id,\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\n this.joinedSpaces.set(...spaces);\n }\n\n private handleSpaceLeft(ev: SpaceLeft): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).delete(ev.userId);\n }\n }\n\n private handleSpaceMembers(ev: SpaceMembers): void {\n if (!this.spacesMembers.has(ev.id)) {\n this.spacesMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\n ]);\n this.deferredGetters.get(`spaces-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceRooms(ev: SpaceRooms): void {\n if (!this.spacesRooms.has(ev.id)) {\n this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\n this.deferredGetters.get(`spaces-rooms-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceMemberUpdate(ev: SpaceMemberUpdate): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleTopicDeleted(ev: TopicDeleted): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.delete(ev.id);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./ChatStateTracker\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"pserv-ts-types\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\n url?: string;\n token: string;\n}\n\nexport interface RestClientResponse<T> {\n ok: boolean;\n status: number;\n data: T;\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport abstract class AbstractRestClient {\n protected abstract defaultUrl: string;\n\n public constructor(\n private readonly options: RestClientOptions,\n ) {}\n\n protected async send<ResponseT = any>(\n method: HttpMethod,\n uri: string,\n data: any = undefined\n ): Promise<RestClientResponse<ResponseT>> {\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n }\n\n let url = this.getUrl(uri);\n let body = undefined;\n\n if (data) {\n if (['GET', 'DELETE'].includes(method)) {\n url += new URLSearchParams(data).toString()\n } else {\n body = JSON.stringify(data);\n }\n }\n\n const result = await fetch(url, {method, body, headers});\n\n return {\n ok: result.ok,\n status: result.status,\n data: await result.json(),\n };\n }\n\n protected getUrl(uri: string): string {\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\n }\n\n private removeStartingSlash(text: string): string {\n return text.replace(/^\\/+/, '');\n }\n\n private removeEndingSlash(text: string): string {\n return text.replace(/\\/+$/, '');\n }\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n WebSocketChatClient, WebApiChatClient,\n AuthClient\n};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","ChatStateTracker","client","createDeferredGetter","bind","deferredGetterReadiness","me","joinedSpaces","joinedRooms","spaceId","spacesRoles","roomId","roomsTopics","topicId","topicsMessages","deferredGetterName","spacesRooms","deferredGetters","send","spacesMembers","roomsMembers","name","promise","Event","disconnect","ev","handleDisconnect","handleNewMessage","handleNewRole","handleNewRoom","handleNewTopic","handleRoleDeleted","handleRoomDeleted","handleRoomJoined","handleRoomLeft","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleSession","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleSpaceMemberUpdate","handleTopicDeleted","deferred","undefined","resolver","resolve","reconnect","reconnecting","message","collection","role","roles","summary","topic","topics","addJoinedRooms","room","rooms","member","userId","user","spaceMember","members","state","addJoinedSpaces","spaces","space","summaries","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","Error","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","isAuthenticated","connect","sendFromQueue","clearTimeout","code","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","then","onError","AbstractRestClient","uri","getUrl","URLSearchParams","ok","status","removeEndingSlash","defaultUrl","removeStartingSlash","text","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permissions.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdated,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetPermissionOverwrites,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetPermissionOverwrites,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage,\n Envelope,\n PermissionOverwrites,\n PermissionOverwritesUpdated,\n RoomMemberUpdated,\n UpdateRole,\n RoleUpdated,\n AckReports,\n Ack,\n GetAckReports,\n UserUpdated,\n UpdateRoom,\n RoomUpdated,\n UpdateSpace,\n SpaceUpdated,\n PermissionOverwriteTargets,\n GetPermissionOverwriteTargets,\n Owners,\n Ok,\n GetOwners,\n CreateOwner, RoleDeleted,\n} from \"./types/src/index\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractChatClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Ok: Ok,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n PermissionOverwrites: PermissionOverwrites,\n PermissionOverwritesUpdated: PermissionOverwritesUpdated,\n PermissionOverwriteTargets: PermissionOverwriteTargets,\n Owners: Owners,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdated: SpaceMemberUpdated,\n SpaceUpdated: SpaceUpdated,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoleDeleted,\n RoleUpdated: RoleUpdated,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMemberUpdated: RoomMemberUpdated,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n RoomUpdated: RoomUpdated,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n AckReports: AckReports,\n UserUpdated: UserUpdated,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n GetPermissionOverwriteTargets: [GetPermissionOverwriteTargets, EventsMap['PermissionOverwriteTargets']],\n GetOwners: [GetOwners, EventsMap['Owners']],\n CreateOwner: [CreateOwner, EventsMap['Owners']],\n DeleteOwner: [CreateOwner, EventsMap['Owners']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n Ack: [Ack, EventsMap['AckReports']],\n GetAckReports: [GetAckReports, EventsMap['AckReports']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {AckReport, AckReports, ChatLocation, Message, NewMessage, Topic} from \"../types/src\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\n\r\nexport const getCombinedId = (location: ChatLocation) => (location.roomId ?? '') + (location.topicId ?? '');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly acks: IndexedCollection<string, ObservableIndexedObjectCollection<AckReport>> = new IndexedCollection();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('AckReports', ev => this.handleAckReports(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(location: ChatLocation): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(location));\r\n }\r\n\r\n /**\r\n * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get the reports using getRoomAckReports().\r\n * @see getRoomAckReports\r\n */\r\n public async cacheSpaceAckReports(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw new Error(`You are not in space ${spaceId}`);\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).map(room => room.id);\r\n const missingRoomIds = roomIds.filter(roomId => ! this.acks.has(roomId));\r\n\r\n if (missingRoomIds.length) {\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetAckReports', {location: {spaceId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n missingRoomIds.forEach(roomId => {\r\n const reports = result.data.reports.filter(report => report.roomId === roomId);\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room. Undefined if you are not in the room.\r\n * @param roomId\r\n */\r\n public async getRoomAckReports(roomId: string): Promise<ObservableIndexedObjectCollection<AckReport> | undefined> {\r\n const room = (await this.tracker.rooms.get()).get(roomId);\r\n\r\n if (! room) {\r\n return undefined;\r\n }\r\n\r\n if (! this.acks.has(roomId)) {\r\n const result = await this.tracker.client.send('GetAckReports', {location: {roomId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);\r\n }\r\n\r\n return this.acks.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId({roomId, topicId})));\r\n this.acks.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to add new topic, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _handleNewTopics(roomId: string, ...newTopics: Topic[]):void {\r\n for (const newTopic of newTopics) {\r\n const newTopicCombinedId = getCombinedId({roomId, topicId: newTopic.id});\r\n\r\n this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection<Message>('id')]);\r\n\r\n // If new topic refers to some message from this room, update other structures\r\n if (newTopic.messageRef) {\r\n const refTopicCombinedId = getCombinedId({roomId, topicId: newTopic.messageRef.topicId});\r\n const refTopicMessages = this.list.get(refTopicCombinedId);\r\n const refMessage = refTopicMessages?.get(newTopic.messageRef.messageId);\r\n\r\n if (refMessage) {\r\n // Update referenced topic ID in message\r\n refTopicMessages.set({...refMessage, topicRef: newTopic.id});\r\n }\r\n }\r\n }\r\n\r\n this.createAckReportsForNewTopics(roomId, newTopics);\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.location)).set(ev.message);\r\n this.updateLocallyAckReportOnNewMessage(ev);\r\n }\r\n\r\n private handleAckReports(ev: AckReports): void {\r\n ev.reports.forEach(report => {\r\n const ackReports = this.acks.get(report.roomId);\r\n if (ackReports) {\r\n ackReports.set(report);\r\n }\r\n });\r\n }\r\n\r\n private createAckReportsForNewTopics(roomId: string, topics: Topic[]): void {\r\n const ackReports = this.acks.get(roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const newReports: AckReport[] = topics.map(topic => ({\r\n roomId, topicId: topic.id, lastAckMessageId: null, missed: 0, missedMoreThan: null\r\n }));\r\n\r\n ackReports.set(...newReports);\r\n }\r\n\r\n private updateLocallyAckReportOnNewMessage(ev: NewMessage): void {\r\n const ackReports = this.acks.get(ev.location.roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n const currentAckReport = ackReports.get(ev.location.topicId);\r\n let update: Partial<AckReport>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,\r\n missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan,\r\n };\r\n }\r\n\r\n ackReports.set({...currentAckReport, ...update});\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserUpdated,\r\n} from \"../types/src\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(roomId)) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(roomId);\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.list\r\n .findBy('spaceId', ev.spaceId).items\r\n .forEach(room => this.members.get(room.id)?.delete(ev.userId));\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.location.roomId);\r\n collection.delete(ev.location.topicId);\r\n\r\n const room = this.list.get(ev.location.roomId);\r\n if (room.defaultTopic?.id === ev.location.topicId) {\r\n this.list.set({...room, defaultTopic: null});\r\n }\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n\r\n this.messages._handleNewTopics(roomId, ...topics);\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as Room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n if (room.defaultTopic) {\r\n this.addJoinedRoomTopics(room.id, room.defaultTopic);\r\n }\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n}","import {Role} from \"../types/src\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted,\r\n RoleUpdated,\r\n RoomDeleted,\r\n RoomSummary,\r\n RoomUpdated,\r\n Session,\r\n Space,\r\n SpaceDeleted,\r\n SpaceJoined,\r\n SpaceLeft,\r\n SpaceMember,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMembers,\r\n SpaceMemberUpdated,\r\n SpaceRooms,\r\n SpaceUpdated,\r\n UserUpdated\r\n} from \"../types/src\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly roomIdToSpaceId = new IndexedCollection<string, string>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(spaceId)) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(spaceId);\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n this.roomIdToSpaceId.set([ev.summary.id, ev.spaceId]);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {\r\n const rooms = this.rooms.get(ev.room.spaceId);\r\n rooms.set({\r\n ...rooms.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as RoomSummary);\r\n }\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted): Promise<void> {\r\n const spaceId = this.roomIdToSpaceId.get(ev.id);\r\n\r\n if (spaceId && this.rooms.has(spaceId)) {\r\n this.rooms.get(spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceUpdated(ev: SpaceUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.space.id),\r\n name: ev.space.name,\r\n } as Space);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const roomIds = this.rooms.get(ev.id)?.map(item => item.id) ?? [];\r\n this.roomIdToSpaceId.delete(...roomIds);\r\n\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n this.roomIdToSpaceId.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Layer {\r\n Global,\r\n Space,\r\n Room,\r\n Topic,\r\n}\r\n\r\nexport class PermissionDefinition {\r\n value: number;\r\n maxLayer: Layer;\r\n}\r\n\r\nexport class Permissions {\r\n public static readonly list = {\r\n Root: {value: 1 << 0, maxLayer: Layer.Room},\r\n CreateSpaces: {value: 1 << 1, maxLayer: Layer.Global},\r\n ManageSpace: {value: 1 << 2, maxLayer: Layer.Space},\r\n ManageSpaceRoles: {value: 1 << 3, maxLayer: Layer.Space},\r\n ManageRoom: {value: 1 << 4, maxLayer: Layer.Room},\r\n ManageTopic: {value: 1 << 5, maxLayer: Layer.Topic},\r\n ManageSpaceMembers: {value: 1 << 6, maxLayer: Layer.Space},\r\n ManageRoomMembers: {value: 1 << 7, maxLayer: Layer.Room},\r\n CreateMessages: {value: 1 << 8, maxLayer: Layer.Topic},\r\n ManagePermissions: {value: 1 << 9, maxLayer: Layer.Topic},\r\n CreateSpaceRooms: {value: 1 << 10, maxLayer: Layer.Space},\r\n ManageSpaceRooms: {value: 1 << 11, maxLayer: Layer.Space},\r\n };\r\n\r\n public static getNames(): (keyof typeof this.list)[] {\r\n return Object.keys(this.list) as any;\r\n }\r\n\r\n public static getByName(name: keyof typeof this.list): PermissionDefinition | undefined {\r\n return this.list[name];\r\n }\r\n\r\n public static canBeDefinedOnLayer(permissionName: keyof typeof this.list, layer: Layer): boolean {\r\n const def = this.getByName(permissionName);\r\n\r\n if (! def) {\r\n throw new Error(`Invalid permission name: ${permissionName}`);\r\n }\r\n\r\n return layer <= this.getByName(permissionName).maxLayer;\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n ChatLocation,\r\n PermissionOverwrites,\r\n PermissionOverwritesUpdated,\r\n PermissionOverwritesValue,\r\n RoleDeleted,\r\n RoomDeleted,\r\n RoomLeft, RoomMember, RoomMemberUpdated,\r\n SpaceDeleted,\r\n SpaceLeft, SpaceMember,\r\n SpaceMemberUpdated,\r\n TopicDeleted,\r\n} from \"../types/src\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permissions} from \"../Permissions\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n location: ChatLocation,\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => (location.spaceId ?? '') + (location.roomId ?? '') + (location.topicId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(\r\n overwrites.location, overwrites.target, overwrites.targetId\r\n);\r\n\r\ninterface CheckPermissionsResult {\r\n /**\r\n * @deprecated Use `hasAll` instead.\r\n */\r\n ok: boolean;\r\n hasAll: boolean;\r\n hasAny: boolean;\r\n missing: string[];\r\n}\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n location: ChatLocation,\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n this.validateLocation(location);\r\n\r\n const id = getOvId(location, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {location, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permissions.list)[],\r\n location: ChatLocation,\r\n ): Promise<CheckPermissionsResult> {\r\n if (! permissionNames.length) {\r\n throw new Error('Permission names array cannot be empty');\r\n }\r\n\r\n const ownedPermissions = await this.calculatePermissions(location);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permissions.getByName(name).value) {\r\n missing.push(name as string);\r\n }\r\n });\r\n\r\n return {\r\n ok: missing.length === 0,\r\n hasAll: missing.length === 0,\r\n hasAny: missing.length < permissionNames.length,\r\n missing,\r\n };\r\n }\r\n\r\n public async calculatePermissions(location: ChatLocation): Promise<number> {\r\n this.validateLocation(location);\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n const [spaceMember, roomMember] = await this.fetchMembersOrFail(location);\r\n const userRoles: string[] = [...(spaceMember?.roles ?? []), ...(roomMember?.roles ?? [])];\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites({}, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (location.spaceId && (await this.tracker.spaces.get())?.has(location.spaceId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId};\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.roomId && (await this.tracker.rooms.get())?.has(location.roomId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId, roomId: location.roomId};\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n }\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.topicId && (await this.tracker.rooms.getTopics(location.roomId))?.has(location.topicId)) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(location, userRoles));\r\n }\r\n promises.push(this.getOverwrites(location, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted | RoomLeft): Promise<void> {\r\n const room = (await this.tracker.rooms.get()).get(ev.id);\r\n if (room) {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: room.spaceId, roomId: room.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId(ev.location));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.spaceId}, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in space could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in room could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n location: ChatLocation,\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(location, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(location.spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow?.toString(2).length ?? 0,\r\n currentValue.overwrites.deny?.toString(2).length ?? 0,\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny?.toString(2).split('').reverse().join('') ?? '';\r\n const revDecAllows = overwrites.allow?.toString(2).split('').reverse().join('') ?? '';\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permissions.getByName('Root').value) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of Permissions.getNames()) {\r\n result |= Permissions.getByName(name).value;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private async fetchMembersOrFail(location: ChatLocation): Promise<[SpaceMember | null, RoomMember | null]> {\r\n const results = await Promise.all([\r\n location.spaceId ? this.tracker.spaces.getMe(location.spaceId) : null,\r\n location.roomId ? this.tracker.rooms.getMe(location.roomId) : null,\r\n ]);\r\n\r\n const spaceFail = location.spaceId && ! results[0];\r\n const roomFail = location.roomId && ! results[1];\r\n\r\n if (spaceFail || roomFail) {\r\n const layer = spaceFail ? `space (${location.spaceId})` : `room (${location.roomId})`;\r\n throw new Error(`Attempting to calculate permissions for a ${layer} that the user does not belong to`);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n private validateLocation(location: ChatLocation): void {\r\n if (location.topicId && ! location.roomId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"../types/src\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ChatStateTracker} from \"./state-tracker/ChatStateTracker\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permissions, PermissionDefinition, Layer } from \"./Permissions\";\nimport * as ChatTypes from './types/src';\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permissions, PermissionDefinition, Layer,\n WebSocketChatClient, WebApiChatClient,\n AuthClient,\n};\n\nexport type {ChatTypes};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","location","roomId","topicId","MessagesManager","tracker","client","ev","handleNewMessage","handleAckReports","list","spaceId","spaces","Error","rooms","roomIds","findBy","room","missingRoomIds","filter","acks","send","reports","report","undefined","topicIds","newTopics","newTopic","newTopicCombinedId","messageRef","refTopicCombinedId","refTopicMessages","refMessage","messageId","topicRef","createAckReportsForNewTopics","message","updateLocallyAckReportOnNewMessage","ackReports","topics","newReports","topic","lastAckMessageId","missed","missedMoreThan","isMe","author","me","currentAckReport","update","RoomsManager","messages","handleNewTopic","handleTopicDeleted","handleRoomJoined","handleRoomLeft","handleRoomUpdated","handleRoomDeleted","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserUpdated","handleSession","membersPromises","notExist","registerByFunction","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","forget","_deleteByTopicIds","deleteRoom","roomMembers","roomMember","newMember","deleteRoomsBySpaceId","collection","defaultTopic","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","name","description","state","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceUpdated","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","roomIdToSpaceId","space","addJoinedSpaces","summaries","newRole","rolesToUpdate","Layer","PermissionDefinition","Permissions","Object","permissionName","layer","def","getByName","maxLayer","Root","Room","CreateSpaces","Global","ManageSpace","Space","ManageSpaceRoles","ManageRoom","ManageTopic","Topic","ManageSpaceMembers","ManageRoomMembers","CreateMessages","ManagePermissions","CreateSpaceRooms","ManageSpaceRooms","getOvId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","validateLocation","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","ok","hasAll","hasAny","fetchMembersOrFail","userRoles","getOverwrites","then","v","filterLocation","collectRoleOverwrites","getTopics","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","join","revDecAllows","i","parseInt","permissionOverwritesValues","getRootAccessValue","getNames","results","spaceFail","roomFail","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|