polfan-server-js-client 0.1.22 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -842,7 +842,6 @@ var ChatStateTracker = /*#__PURE__*/function () {
842
842
  key: "deferredGetterReadiness",
843
843
  value: function () {
844
844
  var _deferredGetterReadiness = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(name) {
845
- var _this$deferredGetters;
846
845
  return _regeneratorRuntime().wrap(function _callee10$(_context10) {
847
846
  while (1) {
848
847
  switch (_context10.prev = _context10.next) {
@@ -852,7 +851,7 @@ var ChatStateTracker = /*#__PURE__*/function () {
852
851
  break;
853
852
  }
854
853
  _context10.next = 3;
855
- return (_this$deferredGetters = this.deferredGetters.get(name)) === null || _this$deferredGetters === void 0 ? void 0 : _this$deferredGetters.promise;
854
+ return this.deferredGetters.get(name).promise;
856
855
  case 3:
857
856
  case "end":
858
857
  return _context10.stop();
@@ -939,6 +938,7 @@ var ChatStateTracker = /*#__PURE__*/function () {
939
938
  }, {
940
939
  key: "createDeferredGetter",
941
940
  value: function createDeferredGetter(name) {
941
+ var _this2 = this;
942
942
  if (this.deferredGetters.has(name)) {
943
943
  return;
944
944
  }
@@ -947,7 +947,10 @@ var ChatStateTracker = /*#__PURE__*/function () {
947
947
  resolver: undefined
948
948
  };
949
949
  deferred.promise = new Promise(function (resolve) {
950
- return deferred.resolver = resolve;
950
+ return deferred.resolver = function () {
951
+ _this2.deferredGetters["delete"](name);
952
+ resolve();
953
+ };
951
954
  });
952
955
  this.deferredGetters.set([name, deferred]);
953
956
  }
@@ -980,9 +983,25 @@ var ChatStateTracker = /*#__PURE__*/function () {
980
983
  }, {
981
984
  key: "handleNewTopic",
982
985
  value: function handleNewTopic(ev) {
983
- var collection = this.roomsTopics.get(ev.roomId);
984
- collection.set(ev.topic);
985
- this.joinedRooms.get(ev.roomId).topics = collection.items;
986
+ this.addJoinedRoomTopics(ev.roomId, ev.topic);
987
+ this.joinedRooms.get(ev.roomId).topics.push(ev.topic);
988
+ }
989
+ }, {
990
+ key: "addJoinedRoomTopics",
991
+ value: function addJoinedRoomTopics(roomId) {
992
+ var _this$topicsMessages;
993
+ for (var _len = arguments.length, topics = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
994
+ topics[_key - 1] = arguments[_key];
995
+ }
996
+ if (this.roomsTopics.has(roomId)) {
997
+ var _this$roomsTopics$get;
998
+ (_this$roomsTopics$get = this.roomsTopics.get(roomId)).set.apply(_this$roomsTopics$get, topics);
999
+ } else {
1000
+ this.roomsTopics.set([roomId, new ObservableIndexedObjectCollection('id', topics)]);
1001
+ }
1002
+ (_this$topicsMessages = this.topicsMessages).set.apply(_this$topicsMessages, ChatStateTracker_toConsumableArray(topics.map(function (topic) {
1003
+ return [topic.id, new ObservableIndexedObjectCollection('id')];
1004
+ })));
986
1005
  }
987
1006
  }, {
988
1007
  key: "handleRoleDeleted",
@@ -997,9 +1016,7 @@ var ChatStateTracker = /*#__PURE__*/function () {
997
1016
  if (ev.spaceId) {
998
1017
  this.spacesRooms.get(ev.spaceId)["delete"](ev.id);
999
1018
  }
1000
- this.joinedRooms["delete"](ev.id);
1001
- this.roomsMembers["delete"](ev.id);
1002
- this.roomsTopics["delete"](ev.id);
1019
+ this.deleteJoinedRooms(ev.id);
1003
1020
  }
1004
1021
  }, {
1005
1022
  key: "handleRoomJoined",
@@ -1009,29 +1026,40 @@ var ChatStateTracker = /*#__PURE__*/function () {
1009
1026
  }, {
1010
1027
  key: "addJoinedRooms",
1011
1028
  value: function addJoinedRooms() {
1012
- var _this$roomsTopics, _this$topicsMessages, _this$joinedRooms;
1013
- for (var _len = arguments.length, rooms = new Array(_len), _key = 0; _key < _len; _key++) {
1014
- rooms[_key] = arguments[_key];
1029
+ var _this$joinedRooms;
1030
+ for (var _len2 = arguments.length, rooms = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1031
+ rooms[_key2] = arguments[_key2];
1015
1032
  }
1016
- (_this$roomsTopics = this.roomsTopics).set.apply(_this$roomsTopics, ChatStateTracker_toConsumableArray(rooms.map(function (room) {
1017
- return [room.id, new ObservableIndexedObjectCollection('id', room.topics)];
1018
- })));
1019
- var topicsMessages = [];
1020
1033
  for (var _i = 0, _rooms = rooms; _i < _rooms.length; _i++) {
1021
1034
  var room = _rooms[_i];
1022
- topicsMessages.push.apply(topicsMessages, ChatStateTracker_toConsumableArray(room.topics.map(function (topic) {
1023
- return [topic.id, new ObservableIndexedObjectCollection('id')];
1024
- })));
1035
+ this.addJoinedRoomTopics.apply(this, [room.id].concat(ChatStateTracker_toConsumableArray(room.topics)));
1025
1036
  }
1026
- (_this$topicsMessages = this.topicsMessages).set.apply(_this$topicsMessages, topicsMessages);
1027
1037
  (_this$joinedRooms = this.joinedRooms).set.apply(_this$joinedRooms, rooms);
1028
1038
  }
1029
1039
  }, {
1030
1040
  key: "handleRoomLeft",
1031
1041
  value: function handleRoomLeft(ev) {
1032
- this.joinedRooms["delete"](ev.id);
1033
- this.roomsMembers["delete"](ev.id);
1034
- this.roomsTopics["delete"](ev.id);
1042
+ this.deleteJoinedRooms(ev.id);
1043
+ }
1044
+ }, {
1045
+ key: "deleteJoinedRooms",
1046
+ value: function deleteJoinedRooms() {
1047
+ var _this$joinedRooms2, _this$roomsMembers, _this$topicsMessages2, _this$roomsTopics;
1048
+ for (var _len3 = arguments.length, roomIds = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1049
+ roomIds[_key3] = arguments[_key3];
1050
+ }
1051
+ (_this$joinedRooms2 = this.joinedRooms)["delete"].apply(_this$joinedRooms2, roomIds);
1052
+ (_this$roomsMembers = this.roomsMembers)["delete"].apply(_this$roomsMembers, roomIds);
1053
+ var topicIds = [];
1054
+ for (var _i2 = 0, _roomIds = roomIds; _i2 < _roomIds.length; _i2++) {
1055
+ var _this$roomsTopics$get2, _this$roomsTopics$get3;
1056
+ var roomId = _roomIds[_i2];
1057
+ topicIds.push.apply(topicIds, ChatStateTracker_toConsumableArray((_this$roomsTopics$get2 = (_this$roomsTopics$get3 = this.roomsTopics.get(roomId)) === null || _this$roomsTopics$get3 === void 0 ? void 0 : _this$roomsTopics$get3.map(function (topic) {
1058
+ return topic.id;
1059
+ })) !== null && _this$roomsTopics$get2 !== void 0 ? _this$roomsTopics$get2 : []));
1060
+ }
1061
+ (_this$topicsMessages2 = this.topicsMessages)["delete"].apply(_this$topicsMessages2, topicIds);
1062
+ (_this$roomsTopics = this.roomsTopics)["delete"].apply(_this$roomsTopics, roomIds);
1035
1063
  }
1036
1064
  }, {
1037
1065
  key: "handleRoomMemberJoined",
@@ -1051,18 +1079,18 @@ var ChatStateTracker = /*#__PURE__*/function () {
1051
1079
  key: "handleRoomMembers",
1052
1080
  value: function handleRoomMembers(ev) {
1053
1081
  if (!this.roomsMembers.has(ev.id)) {
1054
- var _this$deferredGetters2;
1082
+ var _this$deferredGetters;
1055
1083
  this.roomsMembers.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1056
1084
  var _member$user$id, _member$user;
1057
1085
  return (_member$user$id = (_member$user = member.user) === null || _member$user === void 0 ? void 0 : _member$user.id) !== null && _member$user$id !== void 0 ? _member$user$id : member.spaceMember.user.id;
1058
1086
  }, ev.members)]);
1059
- (_this$deferredGetters2 = this.deferredGetters.get("rooms-members-".concat(ev.id))) === null || _this$deferredGetters2 === void 0 ? void 0 : _this$deferredGetters2.resolver();
1087
+ (_this$deferredGetters = this.deferredGetters.get("rooms-members-".concat(ev.id))) === null || _this$deferredGetters === void 0 ? void 0 : _this$deferredGetters.resolver();
1060
1088
  }
1061
1089
  }
1062
1090
  }, {
1063
1091
  key: "handleSession",
1064
1092
  value: function handleSession(ev) {
1065
- var _this$deferredGetters3;
1093
+ var _this$deferredGetters2;
1066
1094
  if (this.me && !this.reconnecting) {
1067
1095
  return;
1068
1096
  }
@@ -1077,11 +1105,14 @@ var ChatStateTracker = /*#__PURE__*/function () {
1077
1105
  this.spacesMembers.deleteAll();
1078
1106
  this.addJoinedRooms.apply(this, ChatStateTracker_toConsumableArray(ev.state.rooms));
1079
1107
  this.addJoinedSpaces.apply(this, ChatStateTracker_toConsumableArray(ev.state.spaces));
1080
- (_this$deferredGetters3 = this.deferredGetters.get('session')) === null || _this$deferredGetters3 === void 0 ? void 0 : _this$deferredGetters3.resolver();
1108
+ (_this$deferredGetters2 = this.deferredGetters.get('session')) === null || _this$deferredGetters2 === void 0 ? void 0 : _this$deferredGetters2.resolver();
1081
1109
  }
1082
1110
  }, {
1083
1111
  key: "handleSpaceDeleted",
1084
1112
  value: function handleSpaceDeleted(ev) {
1113
+ this.deleteJoinedRooms.apply(this, ChatStateTracker_toConsumableArray(this.joinedRooms.findBy('spaceId', ev.id).map(function (room) {
1114
+ return room.id;
1115
+ })));
1085
1116
  this.spacesRoles["delete"](ev.id);
1086
1117
  this.spacesMembers["delete"](ev.id);
1087
1118
  this.spacesRooms["delete"](ev.id);
@@ -1096,8 +1127,8 @@ var ChatStateTracker = /*#__PURE__*/function () {
1096
1127
  key: "addJoinedSpaces",
1097
1128
  value: function addJoinedSpaces() {
1098
1129
  var _this$spacesRoles, _this$joinedSpaces;
1099
- for (var _len2 = arguments.length, spaces = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1100
- spaces[_key2] = arguments[_key2];
1130
+ for (var _len4 = arguments.length, spaces = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
1131
+ spaces[_key4] = arguments[_key4];
1101
1132
  }
1102
1133
  (_this$spacesRoles = this.spacesRoles).set.apply(_this$spacesRoles, ChatStateTracker_toConsumableArray(spaces.map(function (space) {
1103
1134
  return [space.id, new ObservableIndexedObjectCollection('id', space.roles)];
@@ -1107,10 +1138,7 @@ var ChatStateTracker = /*#__PURE__*/function () {
1107
1138
  }, {
1108
1139
  key: "handleSpaceLeft",
1109
1140
  value: function handleSpaceLeft(ev) {
1110
- this.spacesRoles["delete"](ev.id);
1111
- this.spacesMembers["delete"](ev.id);
1112
- this.spacesRooms["delete"](ev.id);
1113
- this.joinedSpaces["delete"](ev.id);
1141
+ this.handleSpaceDeleted(ev);
1114
1142
  }
1115
1143
  }, {
1116
1144
  key: "handleSpaceMemberJoined",
@@ -1130,20 +1158,20 @@ var ChatStateTracker = /*#__PURE__*/function () {
1130
1158
  key: "handleSpaceMembers",
1131
1159
  value: function handleSpaceMembers(ev) {
1132
1160
  if (!this.spacesMembers.has(ev.id)) {
1133
- var _this$deferredGetters4;
1161
+ var _this$deferredGetters3;
1134
1162
  this.spacesMembers.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1135
1163
  return member === null || member === void 0 ? void 0 : member.user.id;
1136
1164
  }, ev.members)]);
1137
- (_this$deferredGetters4 = this.deferredGetters.get("spaces-members-".concat(ev.id))) === null || _this$deferredGetters4 === void 0 ? void 0 : _this$deferredGetters4.resolver();
1165
+ (_this$deferredGetters3 = this.deferredGetters.get("spaces-members-".concat(ev.id))) === null || _this$deferredGetters3 === void 0 ? void 0 : _this$deferredGetters3.resolver();
1138
1166
  }
1139
1167
  }
1140
1168
  }, {
1141
1169
  key: "handleSpaceRooms",
1142
1170
  value: function handleSpaceRooms(ev) {
1143
1171
  if (!this.spacesRooms.has(ev.id)) {
1144
- var _this$deferredGetters5;
1172
+ var _this$deferredGetters4;
1145
1173
  this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);
1146
- (_this$deferredGetters5 = this.deferredGetters.get("spaces-rooms-".concat(ev.id))) === null || _this$deferredGetters5 === void 0 ? void 0 : _this$deferredGetters5.resolver();
1174
+ (_this$deferredGetters4 = this.deferredGetters.get("spaces-rooms-".concat(ev.id))) === null || _this$deferredGetters4 === void 0 ? void 0 : _this$deferredGetters4.resolver();
1147
1175
  }
1148
1176
  }
1149
1177
  }, {
@@ -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/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 = () => {\n this.deferredGetters.delete(name);\n resolve();\n });\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 this.addJoinedRoomTopics(ev.roomId, ev.topic);\n this.joinedRooms.get(ev.roomId).topics.push(ev.topic);\n }\n\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\n if (this.roomsTopics.has(roomId)) {\n this.roomsTopics.get(roomId).set(...topics);\n } else {\n this.roomsTopics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\n }\n\n this.topicsMessages.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\n topic.id,\n new ObservableIndexedObjectCollection<Message>('id')\n ]));\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.deleteJoinedRooms(ev.id);\n }\n\n private handleRoomJoined(ev: RoomJoined): void {\n this.addJoinedRooms(ev.room);\n }\n\n private addJoinedRooms(...rooms: Room[]): void {\n for (const room of rooms) {\n this.addJoinedRoomTopics(room.id, ...room.topics);\n }\n this.joinedRooms.set(...rooms);\n }\n\n private handleRoomLeft(ev: RoomLeft): void {\n this.deleteJoinedRooms(ev.id);\n }\n\n private deleteJoinedRooms(...roomIds: string[]): void {\n this.joinedRooms.delete(...roomIds);\n this.roomsMembers.delete(...roomIds);\n\n const topicIds: string[] = [];\n for (const roomId of roomIds) {\n topicIds.push(...(this.roomsTopics.get(roomId)?.map(topic => topic.id) ?? []));\n }\n this.topicsMessages.delete(...topicIds);\n\n this.roomsTopics.delete(...roomIds);\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.deleteJoinedRooms(\n ...this.joinedRooms.findBy('spaceId', ev.id).map(room => room.id)\n );\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.handleSpaceDeleted(ev);\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","addJoinedRoomTopics","topic","topics","deleteJoinedRooms","addJoinedRooms","room","rooms","roomIds","topicIds","member","userId","user","spaceMember","members","state","addJoinedSpaces","spaces","findBy","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":""}
@@ -32,11 +32,13 @@ export declare class ChatStateTracker {
32
32
  private handleNewRole;
33
33
  private handleNewRoom;
34
34
  private handleNewTopic;
35
+ private addJoinedRoomTopics;
35
36
  private handleRoleDeleted;
36
37
  private handleRoomDeleted;
37
38
  private handleRoomJoined;
38
39
  private addJoinedRooms;
39
40
  private handleRoomLeft;
41
+ private deleteJoinedRooms;
40
42
  private handleRoomMemberJoined;
41
43
  private handleRoomMemberLeft;
42
44
  private handleRoomMembers;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -112,7 +112,7 @@ export class ChatStateTracker {
112
112
 
113
113
  private async deferredGetterReadiness(name: string): Promise<void> {
114
114
  if (this.deferredGetters.has(name)) {
115
- await this.deferredGetters.get(name)?.promise;
115
+ await this.deferredGetters.get(name).promise;
116
116
  }
117
117
  }
118
118
 
@@ -146,7 +146,10 @@ export class ChatStateTracker {
146
146
  return;
147
147
  }
148
148
  const deferred: Deferred = {promise: undefined, resolver: undefined};
149
- deferred.promise = new Promise(resolve => deferred.resolver = resolve);
149
+ deferred.promise = new Promise(resolve => deferred.resolver = () => {
150
+ this.deferredGetters.delete(name);
151
+ resolve();
152
+ });
150
153
  this.deferredGetters.set([name, deferred]);
151
154
  }
152
155
 
@@ -172,9 +175,21 @@ export class ChatStateTracker {
172
175
  }
173
176
 
174
177
  private handleNewTopic(ev: NewTopic): void {
175
- const collection = this.roomsTopics.get(ev.roomId);
176
- collection.set(ev.topic);
177
- this.joinedRooms.get(ev.roomId).topics = collection.items;
178
+ this.addJoinedRoomTopics(ev.roomId, ev.topic);
179
+ this.joinedRooms.get(ev.roomId).topics.push(ev.topic);
180
+ }
181
+
182
+ private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {
183
+ if (this.roomsTopics.has(roomId)) {
184
+ this.roomsTopics.get(roomId).set(...topics);
185
+ } else {
186
+ this.roomsTopics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);
187
+ }
188
+
189
+ this.topicsMessages.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [
190
+ topic.id,
191
+ new ObservableIndexedObjectCollection<Message>('id')
192
+ ]));
178
193
  }
179
194
 
180
195
  private handleRoleDeleted(ev: RoleDeleted): void {
@@ -187,9 +202,7 @@ export class ChatStateTracker {
187
202
  if (ev.spaceId) {
188
203
  this.spacesRooms.get(ev.spaceId).delete(ev.id);
189
204
  }
190
- this.joinedRooms.delete(ev.id);
191
- this.roomsMembers.delete(ev.id);
192
- this.roomsTopics.delete(ev.id);
205
+ this.deleteJoinedRooms(ev.id);
193
206
  }
194
207
 
195
208
  private handleRoomJoined(ev: RoomJoined): void {
@@ -197,27 +210,27 @@ export class ChatStateTracker {
197
210
  }
198
211
 
199
212
  private addJoinedRooms(...rooms: Room[]): void {
200
- this.roomsTopics.set(...rooms.map<[string, ObservableIndexedObjectCollection<Topic>]>(room => [
201
- room.id,
202
- new ObservableIndexedObjectCollection<Topic>('id', room.topics)
203
- ]));
204
-
205
- const topicsMessages: [string, ObservableIndexedObjectCollection<Message>][] = [];
206
213
  for (const room of rooms) {
207
- topicsMessages.push(...room.topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [
208
- topic.id,
209
- new ObservableIndexedObjectCollection<Message>('id')
210
- ]));
214
+ this.addJoinedRoomTopics(room.id, ...room.topics);
211
215
  }
212
- this.topicsMessages.set(...topicsMessages);
213
-
214
216
  this.joinedRooms.set(...rooms);
215
217
  }
216
218
 
217
219
  private handleRoomLeft(ev: RoomLeft): void {
218
- this.joinedRooms.delete(ev.id);
219
- this.roomsMembers.delete(ev.id);
220
- this.roomsTopics.delete(ev.id);
220
+ this.deleteJoinedRooms(ev.id);
221
+ }
222
+
223
+ private deleteJoinedRooms(...roomIds: string[]): void {
224
+ this.joinedRooms.delete(...roomIds);
225
+ this.roomsMembers.delete(...roomIds);
226
+
227
+ const topicIds: string[] = [];
228
+ for (const roomId of roomIds) {
229
+ topicIds.push(...(this.roomsTopics.get(roomId)?.map(topic => topic.id) ?? []));
230
+ }
231
+ this.topicsMessages.delete(...topicIds);
232
+
233
+ this.roomsTopics.delete(...roomIds);
221
234
  }
222
235
 
223
236
  private handleRoomMemberJoined(ev: RoomMemberJoined): void {
@@ -268,6 +281,9 @@ export class ChatStateTracker {
268
281
  }
269
282
 
270
283
  private handleSpaceDeleted(ev: SpaceDeleted): void {
284
+ this.deleteJoinedRooms(
285
+ ...this.joinedRooms.findBy('spaceId', ev.id).map(room => room.id)
286
+ );
271
287
  this.spacesRoles.delete(ev.id);
272
288
  this.spacesMembers.delete(ev.id);
273
289
  this.spacesRooms.delete(ev.id);
@@ -287,10 +303,7 @@ export class ChatStateTracker {
287
303
  }
288
304
 
289
305
  private handleSpaceLeft(ev: SpaceLeft): void {
290
- this.spacesRoles.delete(ev.id);
291
- this.spacesMembers.delete(ev.id);
292
- this.spacesRooms.delete(ev.id);
293
- this.joinedSpaces.delete(ev.id);
306
+ this.handleSpaceDeleted(ev);
294
307
  }
295
308
 
296
309
  private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {