polfan-server-js-client 0.1.37 → 0.1.38

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
@@ -954,6 +954,9 @@ var RoomsManager = /*#__PURE__*/function () {
954
954
  this.tracker.client.on('RoomLeft', function (ev) {
955
955
  return _this.handleRoomLeft(ev);
956
956
  });
957
+ this.tracker.client.on('RoomDeleted', function (ev) {
958
+ return _this.handleRoomDeleted(ev);
959
+ });
957
960
  this.tracker.client.on('RoomMemberJoined', function (ev) {
958
961
  return _this.handleRoomMemberJoined(ev);
959
962
  });
@@ -966,9 +969,15 @@ var RoomsManager = /*#__PURE__*/function () {
966
969
  this.tracker.client.on('RoomMemberUpdated', function (ev) {
967
970
  return _this.handleRoomMemberUpdated(ev);
968
971
  });
972
+ this.tracker.client.on('SpaceMemberLeft', function (ev) {
973
+ return _this.handleSpaceMemberLeft(ev);
974
+ });
969
975
  this.tracker.client.on('SpaceMemberUpdated', function (ev) {
970
976
  return _this.handleSpaceMemberUpdated(ev);
971
977
  });
978
+ this.tracker.client.on('SpaceDeleted', function (ev) {
979
+ return _this.handleSpaceDeleted(ev);
980
+ });
972
981
  this.tracker.client.on('UserChanged', function (ev) {
973
982
  return _this.handleUserChanged(ev);
974
983
  });
@@ -1129,13 +1138,9 @@ var RoomsManager = /*#__PURE__*/function () {
1129
1138
  }
1130
1139
  return getTopics;
1131
1140
  }()
1132
- /**
1133
- * For internal use. If you want to leave the room, execute a proper command on client object.
1134
- * @internal
1135
- */
1136
1141
  }, {
1137
- key: "_delete",
1138
- value: function _delete() {
1142
+ key: "deleteRoom",
1143
+ value: function deleteRoom() {
1139
1144
  var _this$list, _this$members, _this$membersPromises, _this$topics;
1140
1145
  for (var _len = arguments.length, roomIds = new Array(_len), _key = 0; _key < _len; _key++) {
1141
1146
  roomIds[_key] = arguments[_key];
@@ -1153,15 +1158,10 @@ var RoomsManager = /*#__PURE__*/function () {
1153
1158
  }
1154
1159
  (_this$topics = this.topics)["delete"].apply(_this$topics, roomIds);
1155
1160
  }
1156
-
1157
- /**
1158
- * For internal use. If you want to leave the room, execute a proper command on client object.
1159
- * @internal
1160
- */
1161
1161
  }, {
1162
- key: "_deleteBySpaceId",
1163
- value: function _deleteBySpaceId(spaceId) {
1164
- this._delete.apply(this, RoomsManager_toConsumableArray(this.list.findBy('spaceId', spaceId).map(function (room) {
1162
+ key: "deleteRoomsBySpaceId",
1163
+ value: function deleteRoomsBySpaceId(spaceId) {
1164
+ this.deleteRoom.apply(this, RoomsManager_toConsumableArray(this.list.findBy('spaceId', spaceId).map(function (room) {
1165
1165
  return room.id;
1166
1166
  })));
1167
1167
  }
@@ -1195,6 +1195,11 @@ var RoomsManager = /*#__PURE__*/function () {
1195
1195
  _iterator.f();
1196
1196
  }
1197
1197
  }
1198
+ }, {
1199
+ key: "handleSpaceMemberLeft",
1200
+ value: function handleSpaceMemberLeft(ev) {
1201
+ this.deleteRoomsBySpaceId(ev.spaceId);
1202
+ }
1198
1203
  }, {
1199
1204
  key: "handleRoomMemberUpdated",
1200
1205
  value: function handleRoomMemberUpdated(ev) {
@@ -1214,6 +1219,11 @@ var RoomsManager = /*#__PURE__*/function () {
1214
1219
  }
1215
1220
  members.set(newMember);
1216
1221
  }
1222
+ }, {
1223
+ key: "handleSpaceDeleted",
1224
+ value: function handleSpaceDeleted(ev) {
1225
+ this.deleteRoomsBySpaceId(ev.id);
1226
+ }
1217
1227
  }, {
1218
1228
  key: "handleTopicDeleted",
1219
1229
  value: function handleTopicDeleted(ev) {
@@ -1247,6 +1257,11 @@ var RoomsManager = /*#__PURE__*/function () {
1247
1257
  value: function handleRoomJoined(ev) {
1248
1258
  this.addJoinedRooms(ev.room);
1249
1259
  }
1260
+ }, {
1261
+ key: "handleRoomDeleted",
1262
+ value: function handleRoomDeleted(ev) {
1263
+ this.deleteRoom(ev.id);
1264
+ }
1250
1265
  }, {
1251
1266
  key: "addJoinedRooms",
1252
1267
  value: function addJoinedRooms() {
@@ -1263,7 +1278,7 @@ var RoomsManager = /*#__PURE__*/function () {
1263
1278
  }, {
1264
1279
  key: "handleRoomLeft",
1265
1280
  value: function handleRoomLeft(ev) {
1266
- this._delete(ev.id);
1281
+ this.deleteRoom(ev.id);
1267
1282
  }
1268
1283
  }, {
1269
1284
  key: "handleRoomMemberJoined",
@@ -1388,7 +1403,7 @@ var SpacesManager = /*#__PURE__*/function () {
1388
1403
  return _this.handleSpaceJoined(ev);
1389
1404
  });
1390
1405
  this.tracker.client.on('SpaceLeft', function (ev) {
1391
- return _this.handleSpaceLeft(ev);
1406
+ return _this.handleSpaceDeleted(ev);
1392
1407
  });
1393
1408
  this.tracker.client.on('SpaceMemberJoined', function (ev) {
1394
1409
  return _this.handleSpaceMemberJoined(ev);
@@ -1648,7 +1663,6 @@ var SpacesManager = /*#__PURE__*/function () {
1648
1663
  if (ev.spaceId) {
1649
1664
  this.rooms.get(ev.spaceId)["delete"](ev.id);
1650
1665
  }
1651
- this.tracker.rooms._delete(ev.id);
1652
1666
  }
1653
1667
  }, {
1654
1668
  key: "handleRoleDeleted",
@@ -1660,7 +1674,6 @@ var SpacesManager = /*#__PURE__*/function () {
1660
1674
  }, {
1661
1675
  key: "handleSpaceDeleted",
1662
1676
  value: function handleSpaceDeleted(ev) {
1663
- this.tracker.rooms._deleteBySpaceId(ev.id);
1664
1677
  this.roles["delete"](ev.id);
1665
1678
  this.members["delete"](ev.id);
1666
1679
  this.membersPromises.forget(ev.id);
@@ -1685,11 +1698,6 @@ var SpacesManager = /*#__PURE__*/function () {
1685
1698
  })));
1686
1699
  (_this$list = this.list).set.apply(_this$list, spaces);
1687
1700
  }
1688
- }, {
1689
- key: "handleSpaceLeft",
1690
- value: function handleSpaceLeft(ev) {
1691
- this.handleSpaceDeleted(ev);
1692
- }
1693
1701
  }, {
1694
1702
  key: "handleSpaceMemberJoined",
1695
1703
  value: function handleSpaceMemberJoined(ev) {
@@ -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/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permission.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdated,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetPermissionOverwrites,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetPermissionOverwrites,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage,\n Envelope,\n PermissionOverwrites,\n PermissionOverwritesChanged,\n RoomMemberUpdated,\n UpdateRole,\n RoleUpdated,\n AckReports,\n Ack,\n GetAckReports,\n UserChanged,\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 Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n PermissionOverwrites: PermissionOverwrites,\n PermissionOverwritesChanged: PermissionOverwritesChanged,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdated: SpaceMemberUpdated,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n RoleUpdated: RoleUpdated,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMemberUpdated: RoomMemberUpdated,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n AckReports: AckReports,\n UserChanged: UserChanged,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesChanged']],\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\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 UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n Ack: [Ack, EventsMap['AckReports']],\n GetAckReports: [GetAckReports, EventsMap['AckReports']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {AckReport, AckReports, Message, NewMessage, Topic} from \"pserv-ts-types\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\n\r\nexport const getCombinedId = (...ids: string[]) => ids.join('_');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly acks: IndexedCollection<string, ObservableIndexedObjectCollection<AckReport>> = new IndexedCollection();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('AckReports', ev => this.handleAckReports(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(roomId: string, topicId: string): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(roomId, topicId));\r\n }\r\n\r\n /**\r\n * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get the reports using getRoomAckReports().\r\n * @see getRoomAckReports\r\n */\r\n public async cacheSpaceAckReports(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw `You are not in space ${spaceId}`;\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).map(room => room.id);\r\n const missingRoomIds = roomIds.filter(roomId => ! this.acks.has(roomId));\r\n\r\n if (missingRoomIds.length) {\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetAckReports', {spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n missingRoomIds.forEach(roomId => {\r\n const reports = result.data.reports.filter(report => report.roomId === roomId);\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room. Undefined if you are not in the room.\r\n * @param roomId\r\n */\r\n public async getRoomAckReports(roomId: string): Promise<ObservableIndexedObjectCollection<AckReport> | undefined> {\r\n const room = (await this.tracker.rooms.get()).get(roomId);\r\n\r\n if (! room) {\r\n return undefined;\r\n }\r\n\r\n if (! this.acks.has(roomId)) {\r\n const result = await this.tracker.client.send('GetAckReports', {roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);\r\n }\r\n\r\n return this.acks.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId(roomId, topicId)));\r\n this.acks.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to add new topic, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _handleNewTopics(roomId: string, ...topics: Topic[]): void {\r\n this.list.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\r\n getCombinedId(roomId, topic.id),\r\n new ObservableIndexedObjectCollection<Message>('id'),\r\n ]));\r\n this.createAckReportsForNewTopics(roomId, topics);\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.roomId, ev.topicId)).set(ev.message);\r\n this.updateLocallyAckReportOnNewMessage(ev);\r\n }\r\n\r\n private handleAckReports(ev: AckReports): void {\r\n ev.reports.forEach(report => {\r\n const ackReports = this.acks.get(report.roomId);\r\n if (ackReports) {\r\n ackReports.set(report);\r\n }\r\n });\r\n }\r\n\r\n private createAckReportsForNewTopics(roomId: string, topics: Topic[]): void {\r\n const ackReports = this.acks.get(roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const newReports: AckReport[] = topics.map(topic => ({\r\n roomId, topicId: topic.id, lastAckMessageId: null, missed: 0, missedMoreThan: null\r\n }));\r\n\r\n ackReports.set(...newReports);\r\n }\r\n\r\n private updateLocallyAckReportOnNewMessage(ev: NewMessage): void {\r\n const ackReports = this.acks.get(ev.roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n const currentAckReport = ackReports.get(ev.topicId);\r\n let update: Partial<AckReport>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,\r\n missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan,\r\n };\r\n }\r\n\r\n ackReports.set({...currentAckReport, ...update});\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewTopic,\r\n Room,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, Session,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserChanged,\r\n} from \"pserv-ts-types\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(roomId);\r\n\r\n if (! members) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to leave the room, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _delete(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to leave the room, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteBySpaceId(spaceId: string): void {\r\n this._delete(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.roomId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.roomId).topics = collection.items;\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n this.list.get(ev.roomId).topics.push(ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n\r\n this.messages._handleNewTopics(roomId, ...topics);\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n this.addJoinedRoomTopics(room.id, ...room.topics);\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this._delete(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n}","import {Role} from \"pserv-ts-types\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted, RoleUpdated, RoomDeleted,\r\n RoomSummary, Session,\r\n Space,\r\n SpaceDeleted, SpaceJoined, SpaceLeft,\r\n SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, UserChanged\r\n} from \"pserv-ts-types\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(spaceId);\r\n\r\n if (! members) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n if (ev.spaceId) {\r\n this.rooms.get(ev.spaceId).delete(ev.id);\r\n }\r\n\r\n this.tracker.rooms._delete(ev.id);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted): void {\r\n this.tracker.rooms._deleteBySpaceId(ev.id);\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceLeft(ev: SpaceLeft): void {\r\n this.handleSpaceDeleted(ev);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Permission {\r\n Root = 1 << 0,\r\n CreateSpaces = 1 << 1,\r\n ManageSpaces = 1 << 2,\r\n ManageRoles = 1 << 3,\r\n ChangeNick = 1 << 4,\r\n ManageRooms = 1 << 5,\r\n ManageTopics = 1 << 6,\r\n ManageMembers = 1 << 7,\r\n SendMessages = 1 << 8,\r\n ViewMessages = 1 << 9,\r\n ChangeMessages = 1 << 10,\r\n ManageMessages = 1 << 11,\r\n ManagePermissions = 1 << 12,\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n PermissionOverwrites,\r\n PermissionOverwritesChanged,\r\n PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesChanged): string => getOvId(\r\n overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId\r\n);\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesChanged', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n const id = getOvId(layer, layerId, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permission)[],\r\n spaceId?: string,\r\n roomId?: string,\r\n topicId?: string,\r\n ): Promise<{ok: boolean, missing: string[]}> {\r\n const ownedPermissions = await this.calculatePermissions(spaceId, roomId, topicId);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permission[name]) {\r\n missing.push(name);\r\n }\r\n });\r\n\r\n return {ok: missing.length === 0, missing};\r\n }\r\n\r\n public async calculatePermissions(spaceId?: string, roomId?: string, topicId?: string): Promise<number> {\r\n if (topicId && ! roomId || roomId && ! spaceId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n const userRoles: string[] = [];\r\n\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites('Global', null, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (spaceId) {\r\n userRoles.push(...(await this.tracker.spaces.getMe(spaceId)).roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Space', spaceId, userRoles));\r\n promises.push(this.getOverwrites('Space', spaceId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (roomId) {\r\n const roomMember = await this.tracker.rooms.getMe(roomId);\r\n\r\n if (roomMember.roles !== null) { // Room overwrites from roles (only for space rooms)\r\n userRoles.push(...roomMember.roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Room', roomId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Room', roomId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (topicId) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Topic', topicId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Topic', topicId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesChanged | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted | RoomLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Room', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Topic', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.spaceId, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n spaceId: string,\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(layer, layerId, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow.toString(2).length,\r\n currentValue.overwrites.deny.toString(2).length\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny.toString(2).split('').reverse().join('');\r\n const revDecAllows = overwrites.allow.toString(2).split('').reverse().join('');\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permission.Root) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of this.getPermissionNames()) {\r\n result |= Permission[name];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getPermissionNames(): string[] {\r\n return Object.keys(Permission).filter(key => Number.isNaN(parseInt(key)));\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"pserv-ts-types\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./state-tracker/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 {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permission } from \"./Permission\";\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permission,\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","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","join","MessagesManager","tracker","client","ev","handleNewMessage","handleAckReports","roomId","topicId","list","spaceId","spaces","rooms","roomIds","findBy","room","missingRoomIds","filter","acks","send","reports","report","undefined","topicIds","topics","topic","createAckReportsForNewTopics","message","updateLocallyAckReportOnNewMessage","ackReports","newReports","lastAckMessageId","missed","missedMoreThan","isMe","author","me","currentAckReport","update","RoomsManager","messages","handleNewTopic","handleTopicDeleted","handleRoomJoined","handleRoomLeft","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberUpdated","handleUserChanged","handleSession","membersPromises","notExist","registerByFunction","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","forget","_deleteByTopicIds","_delete","roomMembers","roomMember","newMember","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","state","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleRoomDeleted","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","_deleteBySpaceId","addJoinedSpaces","space","summaries","newRole","rolesToUpdate","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","name","ok","Error","userRoles","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","Number","isNaN","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permission.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdated,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetPermissionOverwrites,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetPermissionOverwrites,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage,\n Envelope,\n PermissionOverwrites,\n PermissionOverwritesChanged,\n RoomMemberUpdated,\n UpdateRole,\n RoleUpdated,\n AckReports,\n Ack,\n GetAckReports,\n UserChanged,\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 Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n PermissionOverwrites: PermissionOverwrites,\n PermissionOverwritesChanged: PermissionOverwritesChanged,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdated: SpaceMemberUpdated,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n RoleUpdated: RoleUpdated,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMemberUpdated: RoomMemberUpdated,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n AckReports: AckReports,\n UserChanged: UserChanged,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesChanged']],\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\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 UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n Ack: [Ack, EventsMap['AckReports']],\n GetAckReports: [GetAckReports, EventsMap['AckReports']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {AckReport, AckReports, Message, NewMessage, Topic} from \"pserv-ts-types\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\n\r\nexport const getCombinedId = (...ids: string[]) => ids.join('_');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly acks: IndexedCollection<string, ObservableIndexedObjectCollection<AckReport>> = new IndexedCollection();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('AckReports', ev => this.handleAckReports(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(roomId: string, topicId: string): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(roomId, topicId));\r\n }\r\n\r\n /**\r\n * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get the reports using getRoomAckReports().\r\n * @see getRoomAckReports\r\n */\r\n public async cacheSpaceAckReports(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw `You are not in space ${spaceId}`;\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).map(room => room.id);\r\n const missingRoomIds = roomIds.filter(roomId => ! this.acks.has(roomId));\r\n\r\n if (missingRoomIds.length) {\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetAckReports', {spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n missingRoomIds.forEach(roomId => {\r\n const reports = result.data.reports.filter(report => report.roomId === roomId);\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room. Undefined if you are not in the room.\r\n * @param roomId\r\n */\r\n public async getRoomAckReports(roomId: string): Promise<ObservableIndexedObjectCollection<AckReport> | undefined> {\r\n const room = (await this.tracker.rooms.get()).get(roomId);\r\n\r\n if (! room) {\r\n return undefined;\r\n }\r\n\r\n if (! this.acks.has(roomId)) {\r\n const result = await this.tracker.client.send('GetAckReports', {roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);\r\n }\r\n\r\n return this.acks.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId(roomId, topicId)));\r\n this.acks.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to add new topic, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _handleNewTopics(roomId: string, ...topics: Topic[]): void {\r\n this.list.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\r\n getCombinedId(roomId, topic.id),\r\n new ObservableIndexedObjectCollection<Message>('id'),\r\n ]));\r\n this.createAckReportsForNewTopics(roomId, topics);\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.roomId, ev.topicId)).set(ev.message);\r\n this.updateLocallyAckReportOnNewMessage(ev);\r\n }\r\n\r\n private handleAckReports(ev: AckReports): void {\r\n ev.reports.forEach(report => {\r\n const ackReports = this.acks.get(report.roomId);\r\n if (ackReports) {\r\n ackReports.set(report);\r\n }\r\n });\r\n }\r\n\r\n private createAckReportsForNewTopics(roomId: string, topics: Topic[]): void {\r\n const ackReports = this.acks.get(roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const newReports: AckReport[] = topics.map(topic => ({\r\n roomId, topicId: topic.id, lastAckMessageId: null, missed: 0, missedMoreThan: null\r\n }));\r\n\r\n ackReports.set(...newReports);\r\n }\r\n\r\n private updateLocallyAckReportOnNewMessage(ev: NewMessage): void {\r\n const ackReports = this.acks.get(ev.roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n const currentAckReport = ackReports.get(ev.topicId);\r\n let update: Partial<AckReport>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,\r\n missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan,\r\n };\r\n }\r\n\r\n ackReports.set({...currentAckReport, ...update});\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, Session, SpaceDeleted, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserChanged,\r\n} from \"pserv-ts-types\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(roomId);\r\n\r\n if (! members) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.deleteRoomsBySpaceId(ev.spaceId);\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.roomId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.roomId).topics = collection.items;\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n this.list.get(ev.roomId).topics.push(ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n\r\n this.messages._handleNewTopics(roomId, ...topics);\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n this.addJoinedRoomTopics(room.id, ...room.topics);\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n}","import {Role} from \"pserv-ts-types\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted, RoleUpdated, RoomDeleted,\r\n RoomSummary, Session,\r\n Space,\r\n SpaceDeleted, SpaceJoined, SpaceLeft,\r\n SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, UserChanged\r\n} from \"pserv-ts-types\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(spaceId);\r\n\r\n if (! members) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n if (ev.spaceId) {\r\n this.rooms.get(ev.spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Permission {\r\n Root = 1 << 0,\r\n CreateSpaces = 1 << 1,\r\n ManageSpaces = 1 << 2,\r\n ManageRoles = 1 << 3,\r\n ChangeNick = 1 << 4,\r\n ManageRooms = 1 << 5,\r\n ManageTopics = 1 << 6,\r\n ManageMembers = 1 << 7,\r\n SendMessages = 1 << 8,\r\n ViewMessages = 1 << 9,\r\n ChangeMessages = 1 << 10,\r\n ManageMessages = 1 << 11,\r\n ManagePermissions = 1 << 12,\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n PermissionOverwrites,\r\n PermissionOverwritesChanged,\r\n PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesChanged): string => getOvId(\r\n overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId\r\n);\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesChanged', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n const id = getOvId(layer, layerId, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permission)[],\r\n spaceId?: string,\r\n roomId?: string,\r\n topicId?: string,\r\n ): Promise<{ok: boolean, missing: string[]}> {\r\n const ownedPermissions = await this.calculatePermissions(spaceId, roomId, topicId);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permission[name]) {\r\n missing.push(name);\r\n }\r\n });\r\n\r\n return {ok: missing.length === 0, missing};\r\n }\r\n\r\n public async calculatePermissions(spaceId?: string, roomId?: string, topicId?: string): Promise<number> {\r\n if (topicId && ! roomId || roomId && ! spaceId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n const userRoles: string[] = [];\r\n\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites('Global', null, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (spaceId) {\r\n userRoles.push(...(await this.tracker.spaces.getMe(spaceId)).roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Space', spaceId, userRoles));\r\n promises.push(this.getOverwrites('Space', spaceId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (roomId) {\r\n const roomMember = await this.tracker.rooms.getMe(roomId);\r\n\r\n if (roomMember.roles !== null) { // Room overwrites from roles (only for space rooms)\r\n userRoles.push(...roomMember.roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Room', roomId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Room', roomId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (topicId) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Topic', topicId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Topic', topicId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesChanged | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted | RoomLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Room', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Topic', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.spaceId, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n spaceId: string,\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(layer, layerId, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow.toString(2).length,\r\n currentValue.overwrites.deny.toString(2).length\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny.toString(2).split('').reverse().join('');\r\n const revDecAllows = overwrites.allow.toString(2).split('').reverse().join('');\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permission.Root) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of this.getPermissionNames()) {\r\n result |= Permission[name];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getPermissionNames(): string[] {\r\n return Object.keys(Permission).filter(key => Number.isNaN(parseInt(key)));\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"pserv-ts-types\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./state-tracker/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 {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permission } from \"./Permission\";\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permission,\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","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","join","MessagesManager","tracker","client","ev","handleNewMessage","handleAckReports","roomId","topicId","list","spaceId","spaces","rooms","roomIds","findBy","room","missingRoomIds","filter","acks","send","reports","report","undefined","topicIds","topics","topic","createAckReportsForNewTopics","message","updateLocallyAckReportOnNewMessage","ackReports","newReports","lastAckMessageId","missed","missedMoreThan","isMe","author","me","currentAckReport","update","RoomsManager","messages","handleNewTopic","handleTopicDeleted","handleRoomJoined","handleRoomLeft","handleRoomDeleted","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserChanged","handleSession","membersPromises","notExist","registerByFunction","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","forget","_deleteByTopicIds","deleteRoom","roomMembers","roomMember","deleteRoomsBySpaceId","newMember","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","state","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","addJoinedSpaces","space","summaries","newRole","rolesToUpdate","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","name","ok","Error","userRoles","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","Number","isNaN","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
@@ -27,22 +27,17 @@ export declare class RoomsManager {
27
27
  * Get collection of room topics.
28
28
  */
29
29
  getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined>;
30
- /**
31
- * For internal use. If you want to leave the room, execute a proper command on client object.
32
- * @internal
33
- */
34
- _delete(...roomIds: string[]): void;
35
- /**
36
- * For internal use. If you want to leave the room, execute a proper command on client object.
37
- * @internal
38
- */
39
- _deleteBySpaceId(spaceId: string): void;
30
+ private deleteRoom;
31
+ private deleteRoomsBySpaceId;
40
32
  private handleSpaceMemberUpdated;
33
+ private handleSpaceMemberLeft;
41
34
  private handleRoomMemberUpdated;
35
+ private handleSpaceDeleted;
42
36
  private handleTopicDeleted;
43
37
  private handleNewTopic;
44
38
  private addJoinedRoomTopics;
45
39
  private handleRoomJoined;
40
+ private handleRoomDeleted;
46
41
  private addJoinedRooms;
47
42
  private handleRoomLeft;
48
43
  private handleRoomMemberJoined;
@@ -38,7 +38,6 @@ export declare class SpacesManager {
38
38
  private handleSpaceDeleted;
39
39
  private handleSpaceJoined;
40
40
  private addJoinedSpaces;
41
- private handleSpaceLeft;
42
41
  private handleSpaceMemberJoined;
43
42
  private handleSpaceMemberLeft;
44
43
  private handleSpaceMembers;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.37",
3
+ "version": "0.1.38",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -1,10 +1,10 @@
1
1
  import {IndexedCollection, ObservableIndexedObjectCollection} from "../IndexedObjectCollection";
2
2
  import {
3
3
  NewTopic,
4
- Room,
4
+ Room, RoomDeleted,
5
5
  RoomJoined, RoomLeft,
6
6
  RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,
7
- RoomMemberUpdated, Session,
7
+ RoomMemberUpdated, Session, SpaceDeleted, SpaceMemberLeft,
8
8
  SpaceMemberUpdated,
9
9
  Topic,
10
10
  TopicDeleted,
@@ -30,11 +30,14 @@ export class RoomsManager {
30
30
  this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
31
31
  this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));
32
32
  this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));
33
+ this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
33
34
  this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));
34
35
  this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));
35
36
  this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));
36
37
  this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));
38
+ this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));
37
39
  this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
40
+ this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
38
41
  this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));
39
42
  this.tracker.client.on('Session', ev => this.handleSession(ev));
40
43
  }
@@ -88,11 +91,7 @@ export class RoomsManager {
88
91
  return this.topics.get(roomId);
89
92
  }
90
93
 
91
- /**
92
- * For internal use. If you want to leave the room, execute a proper command on client object.
93
- * @internal
94
- */
95
- public _delete(...roomIds: string[]): void {
94
+ private deleteRoom(...roomIds: string[]): void {
96
95
  this.list.delete(...roomIds);
97
96
  this.members.delete(...roomIds);
98
97
  this.membersPromises.forget(...roomIds);
@@ -105,12 +104,8 @@ export class RoomsManager {
105
104
  this.topics.delete(...roomIds);
106
105
  }
107
106
 
108
- /**
109
- * For internal use. If you want to leave the room, execute a proper command on client object.
110
- * @internal
111
- */
112
- public _deleteBySpaceId(spaceId: string): void {
113
- this._delete(
107
+ private deleteRoomsBySpaceId(spaceId: string): void {
108
+ this.deleteRoom(
114
109
  ...this.list.findBy('spaceId', spaceId).map(room => room.id)
115
110
  );
116
111
  }
@@ -135,6 +130,10 @@ export class RoomsManager {
135
130
  }
136
131
  }
137
132
 
133
+ private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {
134
+ this.deleteRoomsBySpaceId(ev.spaceId);
135
+ }
136
+
138
137
  private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {
139
138
  if (! this.members.has(ev.roomId)) {
140
139
  // We do not track member list for this room.
@@ -155,6 +154,10 @@ export class RoomsManager {
155
154
  members.set(newMember);
156
155
  }
157
156
 
157
+ private handleSpaceDeleted(ev: SpaceDeleted): void {
158
+ this.deleteRoomsBySpaceId(ev.id);
159
+ }
160
+
158
161
  private handleTopicDeleted(ev: TopicDeleted): void {
159
162
  const collection = this.topics.get(ev.roomId);
160
163
  collection.delete(ev.id);
@@ -180,6 +183,10 @@ export class RoomsManager {
180
183
  this.addJoinedRooms(ev.room);
181
184
  }
182
185
 
186
+ private handleRoomDeleted(ev: RoomDeleted): void {
187
+ this.deleteRoom(ev.id);
188
+ }
189
+
183
190
  private addJoinedRooms(...rooms: Room[]): void {
184
191
  for (const room of rooms) {
185
192
  this.addJoinedRoomTopics(room.id, ...room.topics);
@@ -188,7 +195,7 @@ export class RoomsManager {
188
195
  }
189
196
 
190
197
  private handleRoomLeft(ev: RoomLeft): void {
191
- this._delete(ev.id);
198
+ this.deleteRoom(ev.id);
192
199
  }
193
200
 
194
201
  private handleRoomMemberJoined(ev: RoomMemberJoined): void {
@@ -27,7 +27,7 @@ export class SpacesManager {
27
27
  this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
28
28
  this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
29
29
  this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));
30
- this.tracker.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));
30
+ this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
31
31
  this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));
32
32
  this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));
33
33
  this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
@@ -121,8 +121,6 @@ export class SpacesManager {
121
121
  if (ev.spaceId) {
122
122
  this.rooms.get(ev.spaceId).delete(ev.id);
123
123
  }
124
-
125
- this.tracker.rooms._delete(ev.id);
126
124
  }
127
125
 
128
126
  private handleRoleDeleted(ev: RoleDeleted): void {
@@ -131,8 +129,7 @@ export class SpacesManager {
131
129
  this.list.get(ev.spaceId).roles = collection.items;
132
130
  }
133
131
 
134
- private handleSpaceDeleted(ev: SpaceDeleted): void {
135
- this.tracker.rooms._deleteBySpaceId(ev.id);
132
+ private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {
136
133
  this.roles.delete(ev.id);
137
134
  this.members.delete(ev.id);
138
135
  this.membersPromises.forget(ev.id);
@@ -153,10 +150,6 @@ export class SpacesManager {
153
150
  this.list.set(...spaces);
154
151
  }
155
152
 
156
- private handleSpaceLeft(ev: SpaceLeft): void {
157
- this.handleSpaceDeleted(ev);
158
- }
159
-
160
153
  private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {
161
154
  if (this.members.has(ev.spaceId)) {
162
155
  this.members.get(ev.spaceId).set(ev.member);