polfan-server-js-client 0.1.32 → 0.1.34

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.
@@ -0,0 +1,6 @@
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
+ </profile>
6
+ </component>
@@ -1,7 +1,9 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <module type="WEB_MODULE" version="4">
3
3
  <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$" />
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/build" />
6
+ </content>
5
7
  <orderEntry type="inheritedJdk" />
6
8
  <orderEntry type="sourceFolder" forTests="false" />
7
9
  </component>
package/.idea/vcs.xml CHANGED
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project version="4">
3
3
  <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
4
+ <mapping directory="" vcs="Git" />
5
5
  </component>
6
6
  </project>
package/build/index.js CHANGED
@@ -869,6 +869,8 @@ var MessagesManager = /*#__PURE__*/function () {
869
869
  }();
870
870
  ;// CONCATENATED MODULE: ./src/state-tracker/RoomsManager.ts
871
871
  function RoomsManager_typeof(obj) { "@babel/helpers - typeof"; return RoomsManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, RoomsManager_typeof(obj); }
872
+ function RoomsManager_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
873
+ function RoomsManager_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? RoomsManager_ownKeys(Object(source), !0).forEach(function (key) { RoomsManager_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : RoomsManager_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
872
874
  function RoomsManager_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = RoomsManager_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
873
875
  function RoomsManager_toConsumableArray(arr) { return RoomsManager_arrayWithoutHoles(arr) || RoomsManager_iterableToArray(arr) || RoomsManager_unsupportedIterableToArray(arr) || RoomsManager_nonIterableSpread(); }
874
876
  function RoomsManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -923,6 +925,12 @@ var RoomsManager = /*#__PURE__*/function () {
923
925
  this.tracker.client.on('RoomMemberUpdated', function (ev) {
924
926
  return _this.handleRoomMemberUpdated(ev);
925
927
  });
928
+ this.tracker.client.on('SpaceMemberUpdated', function (ev) {
929
+ return _this.handleSpaceMemberUpdated(ev);
930
+ });
931
+ this.tracker.client.on('UserChanged', function (ev) {
932
+ return _this.handleUserChanged(ev);
933
+ });
926
934
  this.tracker.client.on('Session', function (ev) {
927
935
  return _this.handleSession(ev);
928
936
  });
@@ -1102,16 +1110,11 @@ var RoomsManager = /*#__PURE__*/function () {
1102
1110
  return room.id;
1103
1111
  })));
1104
1112
  }
1105
-
1106
- /**
1107
- * For internal use.
1108
- * @internal
1109
- */
1110
1113
  }, {
1111
- key: "_handleSpaceMemberUpdate",
1112
- value: function _handleSpaceMemberUpdate(spaceId, member) {
1114
+ key: "handleSpaceMemberUpdated",
1115
+ value: function handleSpaceMemberUpdated(ev) {
1113
1116
  // Update members of rooms related to this space
1114
- var _iterator = RoomsManager_createForOfIteratorHelper(this.list.findBy('spaceId', spaceId).items),
1117
+ var _iterator = RoomsManager_createForOfIteratorHelper(this.list.findBy('spaceId', ev.spaceId).items),
1115
1118
  _step;
1116
1119
  try {
1117
1120
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -1121,8 +1124,13 @@ var RoomsManager = /*#__PURE__*/function () {
1121
1124
  // Skip update if member list for this room is not loaded
1122
1125
  continue;
1123
1126
  }
1124
- var roomMember = roomMembers.get(member.user.id);
1125
- roomMember.spaceMember = member;
1127
+ var roomMember = roomMembers.get(ev.userId);
1128
+ var user = roomMember.spaceMember.user;
1129
+
1130
+ // Update space member but first fill user object (it's null in event object)
1131
+ roomMember.spaceMember = RoomsManager_objectSpread(RoomsManager_objectSpread({}, ev.member), {}, {
1132
+ user: user
1133
+ });
1126
1134
  roomMembers.set(roomMember);
1127
1135
  }
1128
1136
  } catch (err) {
@@ -1134,10 +1142,21 @@ var RoomsManager = /*#__PURE__*/function () {
1134
1142
  }, {
1135
1143
  key: "handleRoomMemberUpdated",
1136
1144
  value: function handleRoomMemberUpdated(ev) {
1145
+ var _member$spaceMember$u, _member$spaceMember;
1137
1146
  if (!this.members.has(ev.roomId)) {
1147
+ // We do not track member list for this room.
1138
1148
  return;
1139
1149
  }
1140
- this.members.get(ev.roomId).set(ev.member);
1150
+ var members = this.members.get(ev.roomId);
1151
+ var member = members.get(ev.userId);
1152
+ var newMember = ev.member;
1153
+ var user = (_member$spaceMember$u = (_member$spaceMember = member.spaceMember) === null || _member$spaceMember === void 0 ? void 0 : _member$spaceMember.user) !== null && _member$spaceMember$u !== void 0 ? _member$spaceMember$u : member.user;
1154
+ if (newMember.spaceMember) {
1155
+ newMember.spaceMember.user = user;
1156
+ } else {
1157
+ newMember.user = user;
1158
+ }
1159
+ members.set(newMember);
1141
1160
  }
1142
1161
  }, {
1143
1162
  key: "handleTopicDeleted",
@@ -1223,11 +1242,31 @@ var RoomsManager = /*#__PURE__*/function () {
1223
1242
  this.addJoinedRooms.apply(this, RoomsManager_toConsumableArray(ev.state.rooms));
1224
1243
  this.deferredSession.resolve();
1225
1244
  }
1245
+ }, {
1246
+ key: "handleUserChanged",
1247
+ value: function handleUserChanged(ev) {
1248
+ this.members.items.forEach(function (members) {
1249
+ var member = members.get(ev.user.id);
1250
+ if (!member) {
1251
+ // Skip room; updated user is not here
1252
+ return;
1253
+ }
1254
+ var newMember = RoomsManager_objectSpread({}, member);
1255
+ if (member.user) {
1256
+ newMember.user = ev.user;
1257
+ } else {
1258
+ newMember.spaceMember.user = ev.user;
1259
+ }
1260
+ members.set(newMember);
1261
+ });
1262
+ }
1226
1263
  }]);
1227
1264
  return RoomsManager;
1228
1265
  }();
1229
1266
  ;// CONCATENATED MODULE: ./src/state-tracker/SpacesManager.ts
1230
1267
  function SpacesManager_typeof(obj) { "@babel/helpers - typeof"; return SpacesManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, SpacesManager_typeof(obj); }
1268
+ function SpacesManager_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1269
+ function SpacesManager_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? SpacesManager_ownKeys(Object(source), !0).forEach(function (key) { SpacesManager_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : SpacesManager_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1231
1270
  function SpacesManager_toConsumableArray(arr) { return SpacesManager_arrayWithoutHoles(arr) || SpacesManager_iterableToArray(arr) || SpacesManager_unsupportedIterableToArray(arr) || SpacesManager_nonIterableSpread(); }
1232
1271
  function SpacesManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1233
1272
  function SpacesManager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SpacesManager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SpacesManager_arrayLikeToArray(o, minLen); }
@@ -1285,6 +1324,9 @@ var SpacesManager = /*#__PURE__*/function () {
1285
1324
  this.tracker.client.on('SpaceMemberUpdated', function (ev) {
1286
1325
  return _this.handleSpaceMemberUpdated(ev);
1287
1326
  });
1327
+ this.tracker.client.on('UserChanged', function (ev) {
1328
+ return _this.handleUserChanged(ev);
1329
+ });
1288
1330
  this.tracker.client.on('NewRole', function (ev) {
1289
1331
  return _this.handleNewRole(ev);
1290
1332
  });
@@ -1573,9 +1615,12 @@ var SpacesManager = /*#__PURE__*/function () {
1573
1615
  key: "handleSpaceMemberUpdated",
1574
1616
  value: function handleSpaceMemberUpdated(ev) {
1575
1617
  if (this.members.has(ev.spaceId)) {
1576
- this.members.get(ev.spaceId).set(ev.member);
1618
+ var members = this.members.get(ev.spaceId);
1619
+ var member = members.get(ev.userId);
1620
+ members.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, ev.member), {}, {
1621
+ user: member.user
1622
+ }));
1577
1623
  }
1578
- this.tracker.rooms._handleSpaceMemberUpdate(ev.spaceId, ev.member);
1579
1624
  }
1580
1625
  }, {
1581
1626
  key: "handleRoleUpdated",
@@ -1592,6 +1637,20 @@ var SpacesManager = /*#__PURE__*/function () {
1592
1637
  this.addJoinedSpaces.apply(this, SpacesManager_toConsumableArray(ev.state.spaces));
1593
1638
  this.deferredSession.resolve();
1594
1639
  }
1640
+ }, {
1641
+ key: "handleUserChanged",
1642
+ value: function handleUserChanged(ev) {
1643
+ this.members.items.forEach(function (members) {
1644
+ var member = members.get(ev.user.id);
1645
+ if (!member) {
1646
+ // Skip space; updated user is not here
1647
+ return;
1648
+ }
1649
+ members.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, member), {}, {
1650
+ user: ev.user
1651
+ }));
1652
+ });
1653
+ }
1595
1654
  }]);
1596
1655
  return SpacesManager;
1597
1656
  }();
@@ -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/DeferredTask.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.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} 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};\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}","export 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}","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 SpaceMember,\r\n Topic,\r\n TopicDeleted\r\n} from \"pserv-ts-types\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask} from \"./DeferredTask\";\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\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('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.members.has(roomId)) {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleRoomMembers(result.data);\r\n }\r\n\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\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 /**\r\n * For internal use.\r\n * @internal\r\n */\r\n public _handleSpaceMemberUpdate(spaceId: string, member: SpaceMember): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers) {\r\n // Skip update if member list for this room is not loaded\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(member.user.id);\r\n roomMember.spaceMember = member;\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 return;\r\n }\r\n\r\n this.members.get(ev.roomId).set(ev.member);\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) {\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}","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\r\n} from \"pserv-ts-types\";\r\nimport {DeferredTask} from \"./DeferredTask\";\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\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('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.rooms.has(spaceId)) {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleSpaceRooms(result.data);\r\n }\r\n\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.members.has(spaceId)) {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleSpaceMembers(result.data);\r\n }\r\n\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.rooms.delete(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 this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n\r\n this.tracker.rooms._handleSpaceMemberUpdate(ev.spaceId, ev.member);\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n this.roles.get(ev.spaceId).set(ev.role);\r\n }\r\n\r\n private handleSession(ev: Session) {\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}","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,\r\n Role\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\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\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 }\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.overwrites.has(id)) {\r\n return this.overwrites.get(id);\r\n }\r\n\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n\r\n return result.error ? null : result.data;\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) {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\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 \"./DeferredTask\";\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 {\n url?: string;\n token: string;\n}\n\nexport interface RestClientResponse<T> {\n ok: boolean;\n status: number;\n data: T;\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport abstract class AbstractRestClient {\n protected abstract defaultUrl: string;\n\n public constructor(\n private readonly options: RestClientOptions,\n ) {}\n\n protected async send<ResponseT = any>(\n method: HttpMethod,\n uri: string,\n data: any = undefined\n ): Promise<RestClientResponse<ResponseT>> {\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n }\n\n let url = this.getUrl(uri);\n let body = undefined;\n\n if (data) {\n if (['GET', 'DELETE'].includes(method)) {\n url += new URLSearchParams(data).toString()\n } else {\n body = JSON.stringify(data);\n }\n }\n\n const result = await fetch(url, {method, body, headers});\n\n return {\n ok: result.ok,\n status: result.status,\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\n };\n }\n\n protected getUrl(uri: string): string {\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\n }\n\n private removeStartingSlash(text: string): string {\n return text.replace(/^\\/+/, '');\n }\n\n private removeEndingSlash(text: string): string {\n return text.replace(/\\/+$/, '');\n }\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\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","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","handleSession","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","_deleteByTopicIds","_delete","roomMembers","roomMember","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","state","SpacesManager","handleNewRoom","handleRoomDeleted","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleSpaceMemberUpdated","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","role","summary","_deleteBySpaceId","addJoinedSpaces","space","summaries","_handleSpaceMemberUpdate","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","permissionNames","calculatePermissions","ownedPermissions","missing","name","ok","Error","userRoles","promises","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","priority","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","key","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/DeferredTask.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.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}","export 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}","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} from \"./DeferredTask\";\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\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.members.has(roomId)) {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleRoomMembers(result.data);\r\n }\r\n\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\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) {\r\n // Skip update if member list for this room is not loaded\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 {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} from \"./DeferredTask\";\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\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.rooms.has(spaceId)) {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleSpaceRooms(result.data);\r\n }\r\n\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.members.has(spaceId)) {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.handleSpaceMembers(result.data);\r\n }\r\n\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.rooms.delete(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 this.roles.get(ev.spaceId).set(ev.role);\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,\r\n Role\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\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\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 }\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.overwrites.has(id)) {\r\n return this.overwrites.get(id);\r\n }\r\n\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n\r\n return result.error ? null : result.data;\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) {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\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 \"./DeferredTask\";\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","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","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","_deleteByTopicIds","_delete","roomMembers","roomMember","newMember","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","state","SpacesManager","handleNewRoom","handleRoomDeleted","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","role","summary","_deleteBySpaceId","addJoinedSpaces","space","summaries","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","permissionNames","calculatePermissions","ownedPermissions","missing","name","ok","Error","userRoles","promises","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","priority","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","key","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,4 +1,4 @@
1
- import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesChanged, RoomMemberUpdated, UpdateRole, RoleUpdated, AckReports, Ack, GetAckReports } from "pserv-ts-types";
1
+ import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesChanged, RoomMemberUpdated, UpdateRole, RoleUpdated, AckReports, Ack, GetAckReports, UserChanged } from "pserv-ts-types";
2
2
  import { EventTarget } from "./EventTarget";
3
3
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
4
  export declare abstract class AbstractChatClient extends EventTarget {
@@ -49,6 +49,7 @@ export type EventsMap = {
49
49
  TopicDeleted: TopicDeleted;
50
50
  NewMessage: NewMessage;
51
51
  AckReports: AckReports;
52
+ UserChanged: UserChanged;
52
53
  };
53
54
  /**
54
55
  * Map of commands and their corresponding events.
@@ -1,5 +1,5 @@
1
1
  import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
2
- import { Room, RoomMember, SpaceMember, Topic } from "pserv-ts-types";
2
+ import { Room, RoomMember, Topic } from "pserv-ts-types";
3
3
  import { ChatStateTracker } from "./ChatStateTracker";
4
4
  import { MessagesManager } from "./MessagesManager";
5
5
  export declare class RoomsManager {
@@ -36,11 +36,7 @@ export declare class RoomsManager {
36
36
  * @internal
37
37
  */
38
38
  _deleteBySpaceId(spaceId: string): void;
39
- /**
40
- * For internal use.
41
- * @internal
42
- */
43
- _handleSpaceMemberUpdate(spaceId: string, member: SpaceMember): void;
39
+ private handleSpaceMemberUpdated;
44
40
  private handleRoomMemberUpdated;
45
41
  private handleTopicDeleted;
46
42
  private handleNewTopic;
@@ -52,4 +48,5 @@ export declare class RoomsManager {
52
48
  private handleRoomMemberLeft;
53
49
  private handleRoomMembers;
54
50
  private handleSession;
51
+ private handleUserChanged;
55
52
  }
@@ -44,4 +44,5 @@ export declare class SpacesManager {
44
44
  private handleSpaceMemberUpdated;
45
45
  private handleRoleUpdated;
46
46
  private handleSession;
47
+ private handleUserChanged;
47
48
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.32",
3
+ "version": "0.1.34",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -42,7 +42,7 @@
42
42
  "webpack": "^5.75.0",
43
43
  "webpack-cli": "^5.0.1",
44
44
  "webpack-dev-server": "4.11.1",
45
- "pserv-ts-types": "^0.0.23"
45
+ "pserv-ts-types": "^0.0.25"
46
46
  },
47
47
  "jest": {
48
48
  "moduleNameMapper": {
@@ -52,6 +52,7 @@ import {
52
52
  AckReports,
53
53
  Ack,
54
54
  GetAckReports,
55
+ UserChanged,
55
56
  } from "pserv-ts-types";
56
57
  import {EventTarget} from "./EventTarget";
57
58
 
@@ -147,6 +148,7 @@ export type EventsMap = {
147
148
  TopicDeleted: TopicDeleted,
148
149
  NewMessage: NewMessage,
149
150
  AckReports: AckReports,
151
+ UserChanged: UserChanged,
150
152
  };
151
153
 
152
154
  /**
@@ -1,66 +1,66 @@
1
- export interface RestClientOptions {
2
- url?: string;
3
- token: string;
4
- }
5
-
6
- export interface RestClientResponse<T> {
7
- ok: boolean;
8
- status: number;
9
- data: T;
10
- }
11
-
12
- export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
13
-
14
- export abstract class AbstractRestClient {
15
- protected abstract defaultUrl: string;
16
-
17
- public constructor(
18
- private readonly options: RestClientOptions,
19
- ) {}
20
-
21
- protected async send<ResponseT = any>(
22
- method: HttpMethod,
23
- uri: string,
24
- data: any = undefined
25
- ): Promise<RestClientResponse<ResponseT>> {
26
- const headers: any = {
27
- 'Content-Type': 'application/json',
28
- Accept: 'application/json'
29
- };
30
-
31
- if (this.options.token) {
32
- headers.Authorization = `Bearer ${this.options.token}`;
33
- }
34
-
35
- let url = this.getUrl(uri);
36
- let body = undefined;
37
-
38
- if (data) {
39
- if (['GET', 'DELETE'].includes(method)) {
40
- url += new URLSearchParams(data).toString()
41
- } else {
42
- body = JSON.stringify(data);
43
- }
44
- }
45
-
46
- const result = await fetch(url, {method, body, headers});
47
-
48
- return {
49
- ok: result.ok,
50
- status: result.status,
51
- data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),
52
- };
53
- }
54
-
55
- protected getUrl(uri: string): string {
56
- return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);
57
- }
58
-
59
- private removeStartingSlash(text: string): string {
60
- return text.replace(/^\/+/, '');
61
- }
62
-
63
- private removeEndingSlash(text: string): string {
64
- return text.replace(/\/+$/, '');
65
- }
1
+ export interface RestClientOptions {
2
+ url?: string;
3
+ token: string;
4
+ }
5
+
6
+ export interface RestClientResponse<T> {
7
+ ok: boolean;
8
+ status: number;
9
+ data: T;
10
+ }
11
+
12
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
13
+
14
+ export abstract class AbstractRestClient {
15
+ protected abstract defaultUrl: string;
16
+
17
+ public constructor(
18
+ private readonly options: RestClientOptions,
19
+ ) {}
20
+
21
+ protected async send<ResponseT = any>(
22
+ method: HttpMethod,
23
+ uri: string,
24
+ data: any = undefined
25
+ ): Promise<RestClientResponse<ResponseT>> {
26
+ const headers: any = {
27
+ 'Content-Type': 'application/json',
28
+ Accept: 'application/json'
29
+ };
30
+
31
+ if (this.options.token) {
32
+ headers.Authorization = `Bearer ${this.options.token}`;
33
+ }
34
+
35
+ let url = this.getUrl(uri);
36
+ let body = undefined;
37
+
38
+ if (data) {
39
+ if (['GET', 'DELETE'].includes(method)) {
40
+ url += new URLSearchParams(data).toString()
41
+ } else {
42
+ body = JSON.stringify(data);
43
+ }
44
+ }
45
+
46
+ const result = await fetch(url, {method, body, headers});
47
+
48
+ return {
49
+ ok: result.ok,
50
+ status: result.status,
51
+ data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),
52
+ };
53
+ }
54
+
55
+ protected getUrl(uri: string): string {
56
+ return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);
57
+ }
58
+
59
+ private removeStartingSlash(text: string): string {
60
+ return text.replace(/^\/+/, '');
61
+ }
62
+
63
+ private removeEndingSlash(text: string): string {
64
+ return text.replace(/\/+$/, '');
65
+ }
66
66
  }
@@ -5,9 +5,10 @@ import {
5
5
  RoomJoined, RoomLeft,
6
6
  RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,
7
7
  RoomMemberUpdated, Session,
8
- SpaceMember,
8
+ SpaceMemberUpdated,
9
9
  Topic,
10
- TopicDeleted
10
+ TopicDeleted,
11
+ UserChanged,
11
12
  } from "pserv-ts-types";
12
13
  import {ChatStateTracker} from "./ChatStateTracker";
13
14
  import {DeferredTask} from "./DeferredTask";
@@ -32,6 +33,8 @@ export class RoomsManager {
32
33
  this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));
33
34
  this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));
34
35
  this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));
36
+ this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
37
+ this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));
35
38
  this.tracker.client.on('Session', ev => this.handleSession(ev));
36
39
  }
37
40
 
@@ -109,13 +112,9 @@ export class RoomsManager {
109
112
  );
110
113
  }
111
114
 
112
- /**
113
- * For internal use.
114
- * @internal
115
- */
116
- public _handleSpaceMemberUpdate(spaceId: string, member: SpaceMember): void {
115
+ private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {
117
116
  // Update members of rooms related to this space
118
- for (const room of this.list.findBy('spaceId', spaceId).items) {
117
+ for (const room of this.list.findBy('spaceId', ev.spaceId).items) {
119
118
  const roomMembers = this.members.get(room.id);
120
119
 
121
120
  if (! roomMembers) {
@@ -123,18 +122,33 @@ export class RoomsManager {
123
122
  continue;
124
123
  }
125
124
 
126
- const roomMember = roomMembers.get(member.user.id);
127
- roomMember.spaceMember = member;
125
+ const roomMember = roomMembers.get(ev.userId);
126
+ const user = roomMember.spaceMember.user;
127
+
128
+ // Update space member but first fill user object (it's null in event object)
129
+ roomMember.spaceMember = {...ev.member, user};
128
130
  roomMembers.set(roomMember);
129
131
  }
130
132
  }
131
133
 
132
134
  private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {
133
135
  if (! this.members.has(ev.roomId)) {
136
+ // We do not track member list for this room.
134
137
  return;
135
138
  }
136
139
 
137
- this.members.get(ev.roomId).set(ev.member);
140
+ const members = this.members.get(ev.roomId);
141
+ const member = members.get(ev.userId);
142
+ const newMember = ev.member;
143
+ const user = member.spaceMember?.user ?? member.user;
144
+
145
+ if (newMember.spaceMember) {
146
+ newMember.spaceMember.user = user;
147
+ } else {
148
+ newMember.user = user;
149
+ }
150
+
151
+ members.set(newMember);
138
152
  }
139
153
 
140
154
  private handleTopicDeleted(ev: TopicDeleted): void {
@@ -197,7 +211,7 @@ export class RoomsManager {
197
211
  }
198
212
  }
199
213
 
200
- private handleSession(ev: Session) {
214
+ private handleSession(ev: Session): void {
201
215
  this.list.deleteAll();
202
216
  this.topics.deleteAll();
203
217
  this.members.deleteAll();
@@ -206,4 +220,25 @@ export class RoomsManager {
206
220
 
207
221
  this.deferredSession.resolve();
208
222
  }
223
+
224
+ private handleUserChanged(ev: UserChanged): void {
225
+ this.members.items.forEach((members) => {
226
+ const member = members.get(ev.user.id);
227
+
228
+ if (! member) {
229
+ // Skip room; updated user is not here
230
+ return;
231
+ }
232
+
233
+ const newMember: RoomMember = {...member};
234
+
235
+ if (member.user) {
236
+ newMember.user = ev.user;
237
+ } else {
238
+ newMember.spaceMember.user = ev.user;
239
+ }
240
+
241
+ members.set(newMember);
242
+ });
243
+ }
209
244
  }
@@ -8,7 +8,7 @@ import {
8
8
  RoomSummary, Session,
9
9
  Space,
10
10
  SpaceDeleted, SpaceJoined, SpaceLeft,
11
- SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms
11
+ SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, UserChanged
12
12
  } from "pserv-ts-types";
13
13
  import {DeferredTask} from "./DeferredTask";
14
14
 
@@ -30,6 +30,7 @@ export class SpacesManager {
30
30
  this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
31
31
  this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));
32
32
  this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
33
+ this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));
33
34
  this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));
34
35
  this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));
35
36
  this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));
@@ -178,17 +179,17 @@ export class SpacesManager {
178
179
 
179
180
  private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {
180
181
  if (this.members.has(ev.spaceId)) {
181
- this.members.get(ev.spaceId).set(ev.member);
182
+ const members = this.members.get(ev.spaceId);
183
+ const member = members.get(ev.userId);
184
+ members.set({...ev.member, user: member.user});
182
185
  }
183
-
184
- this.tracker.rooms._handleSpaceMemberUpdate(ev.spaceId, ev.member);
185
186
  }
186
187
 
187
188
  private handleRoleUpdated(ev: RoleUpdated): void {
188
189
  this.roles.get(ev.spaceId).set(ev.role);
189
190
  }
190
191
 
191
- private handleSession(ev: Session) {
192
+ private handleSession(ev: Session): void {
192
193
  this.list.deleteAll();
193
194
  this.roles.deleteAll();
194
195
  this.rooms.deleteAll();
@@ -198,4 +199,17 @@ export class SpacesManager {
198
199
 
199
200
  this.deferredSession.resolve();
200
201
  }
202
+
203
+ private handleUserChanged(ev: UserChanged): void {
204
+ this.members.items.forEach((members) => {
205
+ const member = members.get(ev.user.id);
206
+
207
+ if (! member) {
208
+ // Skip space; updated user is not here
209
+ return;
210
+ }
211
+
212
+ members.set({...member, user: ev.user});
213
+ });
214
+ }
201
215
  }
package/index.html DELETED
@@ -1,6 +0,0 @@
1
- <html>
2
- <head>
3
- <script src="build/index.js"></script>
4
- </head>
5
- <body></body>
6
- </html>