polfan-server-js-client 0.1.39 → 0.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +47 -12
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +8 -4
- package/build/types/state-tracker/RoomsManager.d.ts +2 -1
- package/build/types/state-tracker/SpacesManager.d.ts +3 -1
- package/package.json +2 -2
- package/src/AbstractChatClient.ts +9 -5
- package/src/state-tracker/PermissionsManager.ts +4 -4
- package/src/state-tracker/RoomsManager.ts +13 -4
- package/src/state-tracker/SpacesManager.ts +40 -7
package/build/index.js
CHANGED
|
@@ -954,6 +954,9 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
954
954
|
this.tracker.client.on('RoomLeft', function (ev) {
|
|
955
955
|
return _this.handleRoomLeft(ev);
|
|
956
956
|
});
|
|
957
|
+
this.tracker.client.on('RoomUpdated', function (ev) {
|
|
958
|
+
return _this.handleRoomUpdated(ev);
|
|
959
|
+
});
|
|
957
960
|
this.tracker.client.on('RoomDeleted', function (ev) {
|
|
958
961
|
return _this.handleRoomDeleted(ev);
|
|
959
962
|
});
|
|
@@ -981,8 +984,8 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
981
984
|
this.tracker.client.on('SpaceLeft', function (ev) {
|
|
982
985
|
return _this.handleSpaceDeleted(ev);
|
|
983
986
|
});
|
|
984
|
-
this.tracker.client.on('
|
|
985
|
-
return _this.
|
|
987
|
+
this.tracker.client.on('UserUpdated', function (ev) {
|
|
988
|
+
return _this.handleUserUpdated(ev);
|
|
986
989
|
});
|
|
987
990
|
this.tracker.client.on('Session', function (ev) {
|
|
988
991
|
return _this.handleSession(ev);
|
|
@@ -1264,6 +1267,14 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
1264
1267
|
value: function handleRoomJoined(ev) {
|
|
1265
1268
|
this.addJoinedRooms(ev.room);
|
|
1266
1269
|
}
|
|
1270
|
+
}, {
|
|
1271
|
+
key: "handleRoomUpdated",
|
|
1272
|
+
value: function handleRoomUpdated(ev) {
|
|
1273
|
+
this.list.set(RoomsManager_objectSpread(RoomsManager_objectSpread({}, this.list.get(ev.room.id)), {}, {
|
|
1274
|
+
name: ev.room.name,
|
|
1275
|
+
description: ev.room.description
|
|
1276
|
+
}));
|
|
1277
|
+
}
|
|
1267
1278
|
}, {
|
|
1268
1279
|
key: "handleRoomDeleted",
|
|
1269
1280
|
value: function handleRoomDeleted(ev) {
|
|
@@ -1321,8 +1332,8 @@ var RoomsManager = /*#__PURE__*/function () {
|
|
|
1321
1332
|
this.deferredSession.resolve();
|
|
1322
1333
|
}
|
|
1323
1334
|
}, {
|
|
1324
|
-
key: "
|
|
1325
|
-
value: function
|
|
1335
|
+
key: "handleUserUpdated",
|
|
1336
|
+
value: function handleUserUpdated(ev) {
|
|
1326
1337
|
this.members.items.forEach(function (members) {
|
|
1327
1338
|
var member = members.get(ev.user.id);
|
|
1328
1339
|
if (!member) {
|
|
@@ -1365,14 +1376,14 @@ function reorderRolesOnPriorityUpdate(allRoles, oldRole, updatedRole) {
|
|
|
1365
1376
|
}
|
|
1366
1377
|
;// CONCATENATED MODULE: ./src/state-tracker/SpacesManager.ts
|
|
1367
1378
|
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); }
|
|
1368
|
-
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; }
|
|
1369
|
-
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; }
|
|
1370
1379
|
function SpacesManager_toConsumableArray(arr) { return SpacesManager_arrayWithoutHoles(arr) || SpacesManager_iterableToArray(arr) || SpacesManager_unsupportedIterableToArray(arr) || SpacesManager_nonIterableSpread(); }
|
|
1371
1380
|
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."); }
|
|
1372
1381
|
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); }
|
|
1373
1382
|
function SpacesManager_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
1374
1383
|
function SpacesManager_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SpacesManager_arrayLikeToArray(arr); }
|
|
1375
1384
|
function SpacesManager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
1385
|
+
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; }
|
|
1386
|
+
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; }
|
|
1376
1387
|
function SpacesManager_regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ SpacesManager_regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == SpacesManager_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
|
|
1377
1388
|
function SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
1378
1389
|
function SpacesManager_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
@@ -1403,9 +1414,15 @@ var SpacesManager = /*#__PURE__*/function () {
|
|
|
1403
1414
|
this.tracker.client.on('RoomDeleted', function (ev) {
|
|
1404
1415
|
return _this.handleRoomDeleted(ev);
|
|
1405
1416
|
});
|
|
1417
|
+
this.tracker.client.on('RoomUpdated', function (ev) {
|
|
1418
|
+
return _this.handleRoomUpdated(ev);
|
|
1419
|
+
});
|
|
1406
1420
|
this.tracker.client.on('SpaceDeleted', function (ev) {
|
|
1407
1421
|
return _this.handleSpaceDeleted(ev);
|
|
1408
1422
|
});
|
|
1423
|
+
this.tracker.client.on('SpaceUpdated', function (ev) {
|
|
1424
|
+
return _this.handleSpaceUpdated(ev);
|
|
1425
|
+
});
|
|
1409
1426
|
this.tracker.client.on('SpaceJoined', function (ev) {
|
|
1410
1427
|
return _this.handleSpaceJoined(ev);
|
|
1411
1428
|
});
|
|
@@ -1427,8 +1444,8 @@ var SpacesManager = /*#__PURE__*/function () {
|
|
|
1427
1444
|
this.tracker.client.on('SpaceMemberUpdated', function (ev) {
|
|
1428
1445
|
return _this.handleSpaceMemberUpdated(ev);
|
|
1429
1446
|
});
|
|
1430
|
-
this.tracker.client.on('
|
|
1431
|
-
return _this.
|
|
1447
|
+
this.tracker.client.on('UserUpdated', function (ev) {
|
|
1448
|
+
return _this.handleUserUpdated(ev);
|
|
1432
1449
|
});
|
|
1433
1450
|
this.tracker.client.on('NewRole', function (ev) {
|
|
1434
1451
|
return _this.handleNewRole(ev);
|
|
@@ -1664,10 +1681,21 @@ var SpacesManager = /*#__PURE__*/function () {
|
|
|
1664
1681
|
var _this$rooms$get;
|
|
1665
1682
|
(_this$rooms$get = this.rooms.get(ev.spaceId)) === null || _this$rooms$get === void 0 ? void 0 : _this$rooms$get.set(ev.summary);
|
|
1666
1683
|
}
|
|
1684
|
+
}, {
|
|
1685
|
+
key: "handleRoomUpdated",
|
|
1686
|
+
value: function handleRoomUpdated(ev) {
|
|
1687
|
+
if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {
|
|
1688
|
+
var rooms = this.rooms.get(ev.room.spaceId);
|
|
1689
|
+
rooms.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, rooms.get(ev.room.id)), {}, {
|
|
1690
|
+
name: ev.room.name,
|
|
1691
|
+
description: ev.room.description
|
|
1692
|
+
}));
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1667
1695
|
}, {
|
|
1668
1696
|
key: "handleRoomDeleted",
|
|
1669
1697
|
value: function handleRoomDeleted(ev) {
|
|
1670
|
-
if (ev.spaceId) {
|
|
1698
|
+
if (ev.spaceId && this.rooms.has(ev.id)) {
|
|
1671
1699
|
this.rooms.get(ev.spaceId)["delete"](ev.id);
|
|
1672
1700
|
}
|
|
1673
1701
|
}
|
|
@@ -1678,6 +1706,13 @@ var SpacesManager = /*#__PURE__*/function () {
|
|
|
1678
1706
|
collection["delete"](ev.id);
|
|
1679
1707
|
this.list.get(ev.spaceId).roles = collection.items;
|
|
1680
1708
|
}
|
|
1709
|
+
}, {
|
|
1710
|
+
key: "handleSpaceUpdated",
|
|
1711
|
+
value: function handleSpaceUpdated(ev) {
|
|
1712
|
+
this.list.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, this.list.get(ev.space.id)), {}, {
|
|
1713
|
+
name: ev.space.name
|
|
1714
|
+
}));
|
|
1715
|
+
}
|
|
1681
1716
|
}, {
|
|
1682
1717
|
key: "handleSpaceDeleted",
|
|
1683
1718
|
value: function handleSpaceDeleted(ev) {
|
|
@@ -1770,8 +1805,8 @@ var SpacesManager = /*#__PURE__*/function () {
|
|
|
1770
1805
|
this.deferredSession.resolve();
|
|
1771
1806
|
}
|
|
1772
1807
|
}, {
|
|
1773
|
-
key: "
|
|
1774
|
-
value: function
|
|
1808
|
+
key: "handleUserUpdated",
|
|
1809
|
+
value: function handleUserUpdated(ev) {
|
|
1775
1810
|
this.members.items.forEach(function (members) {
|
|
1776
1811
|
var member = members.get(ev.user.id);
|
|
1777
1812
|
if (!member) {
|
|
@@ -1853,7 +1888,7 @@ var PermissionsManager = /*#__PURE__*/function (_EventTarget) {
|
|
|
1853
1888
|
_this.tracker.client.on('PermissionOverwrites', function (ev) {
|
|
1854
1889
|
return _this.handlePermissionOverwrites(ev);
|
|
1855
1890
|
});
|
|
1856
|
-
_this.tracker.client.on('
|
|
1891
|
+
_this.tracker.client.on('PermissionOverwritesUpdated', function (ev) {
|
|
1857
1892
|
return _this.handlePermissionOverwrites(ev);
|
|
1858
1893
|
});
|
|
1859
1894
|
_this.tracker.client.on('SpaceDeleted', function (ev) {
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permission.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdated,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetPermissionOverwrites,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetPermissionOverwrites,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage,\n Envelope,\n PermissionOverwrites,\n PermissionOverwritesChanged,\n RoomMemberUpdated,\n UpdateRole,\n RoleUpdated,\n AckReports,\n Ack,\n GetAckReports,\n UserChanged,\n} from \"pserv-ts-types\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractChatClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n PermissionOverwrites: PermissionOverwrites,\n PermissionOverwritesChanged: PermissionOverwritesChanged,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdated: SpaceMemberUpdated,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n RoleUpdated: RoleUpdated,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMemberUpdated: RoomMemberUpdated,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n AckReports: AckReports,\n UserChanged: UserChanged,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesChanged']],\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n Ack: [Ack, EventsMap['AckReports']],\n GetAckReports: [GetAckReports, EventsMap['AckReports']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {AckReport, AckReports, Message, NewMessage, Topic} from \"pserv-ts-types\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\n\r\nexport const getCombinedId = (...ids: string[]) => ids.join('_');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly acks: IndexedCollection<string, ObservableIndexedObjectCollection<AckReport>> = new IndexedCollection();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('AckReports', ev => this.handleAckReports(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(roomId: string, topicId: string): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(roomId, topicId));\r\n }\r\n\r\n /**\r\n * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get the reports using getRoomAckReports().\r\n * @see getRoomAckReports\r\n */\r\n public async cacheSpaceAckReports(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw `You are not in space ${spaceId}`;\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).map(room => room.id);\r\n const missingRoomIds = roomIds.filter(roomId => ! this.acks.has(roomId));\r\n\r\n if (missingRoomIds.length) {\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetAckReports', {spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n missingRoomIds.forEach(roomId => {\r\n const reports = result.data.reports.filter(report => report.roomId === roomId);\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room. Undefined if you are not in the room.\r\n * @param roomId\r\n */\r\n public async getRoomAckReports(roomId: string): Promise<ObservableIndexedObjectCollection<AckReport> | undefined> {\r\n const room = (await this.tracker.rooms.get()).get(roomId);\r\n\r\n if (! room) {\r\n return undefined;\r\n }\r\n\r\n if (! this.acks.has(roomId)) {\r\n const result = await this.tracker.client.send('GetAckReports', {roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);\r\n }\r\n\r\n return this.acks.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId(roomId, topicId)));\r\n this.acks.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to add new topic, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _handleNewTopics(roomId: string, ...topics: Topic[]): void {\r\n this.list.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\r\n getCombinedId(roomId, topic.id),\r\n new ObservableIndexedObjectCollection<Message>('id'),\r\n ]));\r\n this.createAckReportsForNewTopics(roomId, topics);\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.roomId, ev.topicId)).set(ev.message);\r\n this.updateLocallyAckReportOnNewMessage(ev);\r\n }\r\n\r\n private handleAckReports(ev: AckReports): void {\r\n ev.reports.forEach(report => {\r\n const ackReports = this.acks.get(report.roomId);\r\n if (ackReports) {\r\n ackReports.set(report);\r\n }\r\n });\r\n }\r\n\r\n private createAckReportsForNewTopics(roomId: string, topics: Topic[]): void {\r\n const ackReports = this.acks.get(roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const newReports: AckReport[] = topics.map(topic => ({\r\n roomId, topicId: topic.id, lastAckMessageId: null, missed: 0, missedMoreThan: null\r\n }));\r\n\r\n ackReports.set(...newReports);\r\n }\r\n\r\n private updateLocallyAckReportOnNewMessage(ev: NewMessage): void {\r\n const ackReports = this.acks.get(ev.roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n const currentAckReport = ackReports.get(ev.topicId);\r\n let update: Partial<AckReport>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,\r\n missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan,\r\n };\r\n }\r\n\r\n ackReports.set({...currentAckReport, ...update});\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserChanged,\r\n} from \"pserv-ts-types\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(roomId);\r\n\r\n if (! members) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.list\r\n .findBy('spaceId', ev.spaceId).items\r\n .forEach(room => this.members.get(room.id)?.delete(ev.userId));\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.roomId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.roomId).topics = collection.items;\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n this.list.get(ev.roomId).topics.push(ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n\r\n this.messages._handleNewTopics(roomId, ...topics);\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n this.addJoinedRoomTopics(room.id, ...room.topics);\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n}","import {Role} from \"pserv-ts-types\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted, RoleUpdated, RoomDeleted,\r\n RoomSummary, Session,\r\n Space,\r\n SpaceDeleted, SpaceJoined, SpaceLeft,\r\n SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, UserChanged\r\n} from \"pserv-ts-types\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserChanged', ev => this.handleUserChanged(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(spaceId);\r\n\r\n if (! members) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n if (ev.spaceId) {\r\n this.rooms.get(ev.spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserChanged(ev: UserChanged): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Permission {\r\n Root = 1 << 0,\r\n CreateSpaces = 1 << 1,\r\n ManageSpaces = 1 << 2,\r\n ManageRoles = 1 << 3,\r\n ChangeNick = 1 << 4,\r\n ManageRooms = 1 << 5,\r\n ManageTopics = 1 << 6,\r\n ManageMembers = 1 << 7,\r\n SendMessages = 1 << 8,\r\n ViewMessages = 1 << 9,\r\n ChangeMessages = 1 << 10,\r\n ManageMessages = 1 << 11,\r\n ManagePermissions = 1 << 12,\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n PermissionOverwrites,\r\n PermissionOverwritesChanged,\r\n PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesChanged): string => getOvId(\r\n overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId\r\n);\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesChanged', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n const id = getOvId(layer, layerId, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permission)[],\r\n spaceId?: string,\r\n roomId?: string,\r\n topicId?: string,\r\n ): Promise<{ok: boolean, missing: string[]}> {\r\n const ownedPermissions = await this.calculatePermissions(spaceId, roomId, topicId);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permission[name]) {\r\n missing.push(name);\r\n }\r\n });\r\n\r\n return {ok: missing.length === 0, missing};\r\n }\r\n\r\n public async calculatePermissions(spaceId?: string, roomId?: string, topicId?: string): Promise<number> {\r\n if (topicId && ! roomId || roomId && ! spaceId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n const userRoles: string[] = [];\r\n\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites('Global', null, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (spaceId) {\r\n userRoles.push(...(await this.tracker.spaces.getMe(spaceId)).roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Space', spaceId, userRoles));\r\n promises.push(this.getOverwrites('Space', spaceId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (roomId) {\r\n const roomMember = await this.tracker.rooms.getMe(roomId);\r\n\r\n if (roomMember.roles !== null) { // Room overwrites from roles (only for space rooms)\r\n userRoles.push(...roomMember.roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Room', roomId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Room', roomId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (topicId) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Topic', topicId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Topic', topicId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesChanged | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted | RoomLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Room', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Topic', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.spaceId, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n spaceId: string,\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(layer, layerId, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow.toString(2).length,\r\n currentValue.overwrites.deny.toString(2).length\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny.toString(2).split('').reverse().join('');\r\n const revDecAllows = overwrites.allow.toString(2).split('').reverse().join('');\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permission.Root) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of this.getPermissionNames()) {\r\n result |= Permission[name];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getPermissionNames(): string[] {\r\n return Object.keys(Permission).filter(key => Number.isNaN(parseInt(key)));\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"pserv-ts-types\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./state-tracker/ChatStateTracker\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"pserv-ts-types\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permission } from \"./Permission\";\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permission,\n WebSocketChatClient, WebApiChatClient,\n AuthClient\n};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","join","MessagesManager","tracker","client","ev","handleNewMessage","handleAckReports","roomId","topicId","list","spaceId","spaces","rooms","roomIds","findBy","room","missingRoomIds","filter","acks","send","reports","report","undefined","topicIds","topics","topic","createAckReportsForNewTopics","message","updateLocallyAckReportOnNewMessage","ackReports","newReports","lastAckMessageId","missed","missedMoreThan","isMe","author","me","currentAckReport","update","RoomsManager","messages","handleNewTopic","handleTopicDeleted","handleRoomJoined","handleRoomLeft","handleRoomDeleted","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserChanged","handleSession","membersPromises","notExist","registerByFunction","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","forget","_deleteByTopicIds","deleteRoom","roomMembers","roomMember","newMember","deleteRoomsBySpaceId","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","state","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","addJoinedSpaces","space","summaries","newRole","rolesToUpdate","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","name","ok","Error","userRoles","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","Number","isNaN","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permission.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdated,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetPermissionOverwrites,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetPermissionOverwrites,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage,\n Envelope,\n PermissionOverwrites,\n PermissionOverwritesUpdated,\n RoomMemberUpdated,\n UpdateRole,\n RoleUpdated,\n AckReports,\n Ack,\n GetAckReports,\n UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated,\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 PermissionOverwritesUpdated: PermissionOverwritesUpdated,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdated: SpaceMemberUpdated,\n SpaceUpdated: SpaceUpdated,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: 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 RoomUpdated: RoomUpdated,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n AckReports: AckReports,\n UserUpdated: UserUpdated,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n Ack: [Ack, EventsMap['AckReports']],\n GetAckReports: [GetAckReports, EventsMap['AckReports']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {AckReport, AckReports, Message, NewMessage, Topic} from \"pserv-ts-types\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\n\r\nexport const getCombinedId = (...ids: string[]) => ids.join('_');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly acks: IndexedCollection<string, ObservableIndexedObjectCollection<AckReport>> = new IndexedCollection();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('AckReports', ev => this.handleAckReports(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(roomId: string, topicId: string): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(roomId, topicId));\r\n }\r\n\r\n /**\r\n * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get the reports using getRoomAckReports().\r\n * @see getRoomAckReports\r\n */\r\n public async cacheSpaceAckReports(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw `You are not in space ${spaceId}`;\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).map(room => room.id);\r\n const missingRoomIds = roomIds.filter(roomId => ! this.acks.has(roomId));\r\n\r\n if (missingRoomIds.length) {\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetAckReports', {spaceId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n missingRoomIds.forEach(roomId => {\r\n const reports = result.data.reports.filter(report => report.roomId === roomId);\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room. Undefined if you are not in the room.\r\n * @param roomId\r\n */\r\n public async getRoomAckReports(roomId: string): Promise<ObservableIndexedObjectCollection<AckReport> | undefined> {\r\n const room = (await this.tracker.rooms.get()).get(roomId);\r\n\r\n if (! room) {\r\n return undefined;\r\n }\r\n\r\n if (! this.acks.has(roomId)) {\r\n const result = await this.tracker.client.send('GetAckReports', {roomId});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);\r\n }\r\n\r\n return this.acks.get(roomId);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId(roomId, topicId)));\r\n this.acks.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n /**\r\n * For internal use. If you want to add new topic, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _handleNewTopics(roomId: string, ...topics: Topic[]): void {\r\n this.list.set(...topics.map<[string, ObservableIndexedObjectCollection<Message>]>(topic => [\r\n getCombinedId(roomId, topic.id),\r\n new ObservableIndexedObjectCollection<Message>('id'),\r\n ]));\r\n this.createAckReportsForNewTopics(roomId, topics);\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.roomId, ev.topicId)).set(ev.message);\r\n this.updateLocallyAckReportOnNewMessage(ev);\r\n }\r\n\r\n private handleAckReports(ev: AckReports): void {\r\n ev.reports.forEach(report => {\r\n const ackReports = this.acks.get(report.roomId);\r\n if (ackReports) {\r\n ackReports.set(report);\r\n }\r\n });\r\n }\r\n\r\n private createAckReportsForNewTopics(roomId: string, topics: Topic[]): void {\r\n const ackReports = this.acks.get(roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const newReports: AckReport[] = topics.map(topic => ({\r\n roomId, topicId: topic.id, lastAckMessageId: null, missed: 0, missedMoreThan: null\r\n }));\r\n\r\n ackReports.set(...newReports);\r\n }\r\n\r\n private updateLocallyAckReportOnNewMessage(ev: NewMessage): void {\r\n const ackReports = this.acks.get(ev.roomId);\r\n\r\n if (! ackReports) {\r\n // If we don't follow ack reports for this room, skip\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n const currentAckReport = ackReports.get(ev.topicId);\r\n let update: Partial<AckReport>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,\r\n missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan,\r\n };\r\n }\r\n\r\n ackReports.set({...currentAckReport, ...update});\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserUpdated,\r\n} from \"pserv-ts-types\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n const members = await this.getMembers(roomId);\r\n\r\n if (! members) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.list\r\n .findBy('spaceId', ev.spaceId).items\r\n .forEach(room => this.members.get(room.id)?.delete(ev.userId));\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.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 handleRoomUpdated(ev: RoomUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as Room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n this.addJoinedRoomTopics(room.id, ...room.topics);\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n}","import {Role} from \"pserv-ts-types\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted,\r\n RoleUpdated,\r\n RoomDeleted,\r\n RoomSummary,\r\n RoomUpdated,\r\n Session,\r\n Space,\r\n SpaceDeleted,\r\n SpaceJoined,\r\n SpaceLeft,\r\n SpaceMember,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMembers,\r\n SpaceMemberUpdated,\r\n SpaceRooms,\r\n SpaceUpdated,\r\n UserUpdated\r\n} from \"pserv-ts-types\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n 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 handleRoomUpdated(ev: RoomUpdated): void {\r\n if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {\r\n const rooms = this.rooms.get(ev.room.spaceId);\r\n rooms.set({\r\n ...rooms.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as RoomSummary);\r\n }\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n if (ev.spaceId && this.rooms.has(ev.id)) {\r\n this.rooms.get(ev.spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceUpdated(ev: SpaceUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.space.id),\r\n name: ev.space.name,\r\n } as Space);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum 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 PermissionOverwritesUpdated,\r\n PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,\r\n} from \"pserv-ts-types\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permission} from \"../Permission\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(\r\n overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId\r\n);\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n const id = getOvId(layer, layerId, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {layer, layerId, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permission)[],\r\n spaceId?: string,\r\n roomId?: string,\r\n topicId?: string,\r\n ): Promise<{ok: boolean, missing: string[]}> {\r\n const ownedPermissions = await this.calculatePermissions(spaceId, roomId, topicId);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permission[name]) {\r\n missing.push(name);\r\n }\r\n });\r\n\r\n return {ok: missing.length === 0, missing};\r\n }\r\n\r\n public async calculatePermissions(spaceId?: string, roomId?: string, topicId?: string): Promise<number> {\r\n if (topicId && ! roomId || roomId && ! spaceId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n const userRoles: string[] = [];\r\n\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites('Global', null, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (spaceId) {\r\n userRoles.push(...(await this.tracker.spaces.getMe(spaceId)).roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Space', spaceId, userRoles));\r\n promises.push(this.getOverwrites('Space', spaceId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (roomId) {\r\n const roomMember = await this.tracker.rooms.getMe(roomId);\r\n\r\n if (roomMember.roles !== null) { // Room overwrites from roles (only for space rooms)\r\n userRoles.push(...roomMember.roles);\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Room', roomId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Room', roomId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (topicId) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(spaceId, 'Topic', topicId, userRoles));\r\n }\r\n\r\n promises.push(this.getOverwrites('Topic', topicId, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted | RoomLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Room', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Topic', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId('Space', ev.spaceId, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n spaceId: string,\r\n layer: PermissionOverwrites['layer'],\r\n layerId: PermissionOverwrites['layerId'],\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(layer, layerId, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow.toString(2).length,\r\n currentValue.overwrites.deny.toString(2).length\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny.toString(2).split('').reverse().join('');\r\n const revDecAllows = overwrites.allow.toString(2).split('').reverse().join('');\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permission.Root) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of this.getPermissionNames()) {\r\n result |= Permission[name];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getPermissionNames(): string[] {\r\n return Object.keys(Permission).filter(key => Number.isNaN(parseInt(key)));\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"pserv-ts-types\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./state-tracker/ChatStateTracker\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"pserv-ts-types\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permission } from \"./Permission\";\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permission,\n WebSocketChatClient, WebApiChatClient,\n AuthClient\n};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","join","MessagesManager","tracker","client","ev","handleNewMessage","handleAckReports","roomId","topicId","list","spaceId","spaces","rooms","roomIds","findBy","room","missingRoomIds","filter","acks","send","reports","report","undefined","topicIds","topics","topic","createAckReportsForNewTopics","message","updateLocallyAckReportOnNewMessage","ackReports","newReports","lastAckMessageId","missed","missedMoreThan","isMe","author","me","currentAckReport","update","RoomsManager","messages","handleNewTopic","handleTopicDeleted","handleRoomJoined","handleRoomLeft","handleRoomUpdated","handleRoomDeleted","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserUpdated","handleSession","membersPromises","notExist","registerByFunction","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","forget","_deleteByTopicIds","deleteRoom","roomMembers","roomMember","newMember","deleteRoomsBySpaceId","collection","addJoinedRoomTopics","_handleNewTopics","addJoinedRooms","name","description","state","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceUpdated","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","space","addJoinedSpaces","summaries","newRole","rolesToUpdate","Permission","getOvId","layer","layerId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","ok","Error","userRoles","getOverwrites","then","v","collectRoleOverwrites","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","revDecAllows","i","parseInt","permissionOverwritesValues","Root","getRootAccessValue","getPermissionNames","Object","Number","isNaN","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|
|
@@ -1,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,
|
|
1
|
+
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, AckReports, Ack, GetAckReports, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated } 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 {
|
|
@@ -25,12 +25,13 @@ export type EventsMap = {
|
|
|
25
25
|
Session: Session;
|
|
26
26
|
Permissions: Permissions;
|
|
27
27
|
PermissionOverwrites: PermissionOverwrites;
|
|
28
|
-
|
|
28
|
+
PermissionOverwritesUpdated: PermissionOverwritesUpdated;
|
|
29
29
|
SpaceJoined: SpaceJoined;
|
|
30
30
|
SpaceLeft: SpaceLeft;
|
|
31
31
|
SpaceMemberJoined: SpaceMemberJoined;
|
|
32
32
|
SpaceMemberLeft: SpaceMemberLeft;
|
|
33
33
|
SpaceMemberUpdated: SpaceMemberUpdated;
|
|
34
|
+
SpaceUpdated: SpaceUpdated;
|
|
34
35
|
SpaceDeleted: SpaceDeleted;
|
|
35
36
|
SpaceMembers: SpaceMembers;
|
|
36
37
|
SpaceRooms: SpaceRooms;
|
|
@@ -45,23 +46,25 @@ export type EventsMap = {
|
|
|
45
46
|
RoomMembers: RoomMembers;
|
|
46
47
|
NewRoom: NewRoom;
|
|
47
48
|
RoomDeleted: RoomDeleted;
|
|
49
|
+
RoomUpdated: RoomUpdated;
|
|
48
50
|
NewTopic: NewTopic;
|
|
49
51
|
TopicDeleted: TopicDeleted;
|
|
50
52
|
NewMessage: NewMessage;
|
|
51
53
|
AckReports: AckReports;
|
|
52
|
-
|
|
54
|
+
UserUpdated: UserUpdated;
|
|
53
55
|
};
|
|
54
56
|
/**
|
|
55
57
|
* Map of commands and their corresponding events.
|
|
56
58
|
*/
|
|
57
59
|
export type CommandsMap = {
|
|
58
60
|
GetSession: [GetSession, EventsMap['Session']];
|
|
59
|
-
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['
|
|
61
|
+
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']];
|
|
60
62
|
GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']];
|
|
61
63
|
GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']];
|
|
62
64
|
JoinSpace: [JoinSpace, EventsMap['SpaceJoined']];
|
|
63
65
|
LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']];
|
|
64
66
|
CreateSpace: [CreateSpace, EventsMap['SpaceJoined']];
|
|
67
|
+
UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']];
|
|
65
68
|
DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']];
|
|
66
69
|
GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']];
|
|
67
70
|
GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']];
|
|
@@ -74,6 +77,7 @@ export type CommandsMap = {
|
|
|
74
77
|
LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']];
|
|
75
78
|
CreateRoom: [CreateRoom, EventsMap['NewRoom']];
|
|
76
79
|
DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']];
|
|
80
|
+
UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']];
|
|
77
81
|
GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']];
|
|
78
82
|
CreateTopic: [CreateTopic, EventsMap['NewTopic']];
|
|
79
83
|
DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']];
|
|
@@ -37,6 +37,7 @@ export declare class RoomsManager {
|
|
|
37
37
|
private handleNewTopic;
|
|
38
38
|
private addJoinedRoomTopics;
|
|
39
39
|
private handleRoomJoined;
|
|
40
|
+
private handleRoomUpdated;
|
|
40
41
|
private handleRoomDeleted;
|
|
41
42
|
private addJoinedRooms;
|
|
42
43
|
private handleRoomLeft;
|
|
@@ -44,5 +45,5 @@ export declare class RoomsManager {
|
|
|
44
45
|
private handleRoomMemberLeft;
|
|
45
46
|
private handleRoomMembers;
|
|
46
47
|
private handleSession;
|
|
47
|
-
private
|
|
48
|
+
private handleUserUpdated;
|
|
48
49
|
}
|
|
@@ -33,8 +33,10 @@ export declare class SpacesManager {
|
|
|
33
33
|
getMe(spaceId: string): Promise<SpaceMember | undefined>;
|
|
34
34
|
private handleNewRole;
|
|
35
35
|
private handleNewRoom;
|
|
36
|
+
private handleRoomUpdated;
|
|
36
37
|
private handleRoomDeleted;
|
|
37
38
|
private handleRoleDeleted;
|
|
39
|
+
private handleSpaceUpdated;
|
|
38
40
|
private handleSpaceDeleted;
|
|
39
41
|
private handleSpaceJoined;
|
|
40
42
|
private addJoinedSpaces;
|
|
@@ -45,5 +47,5 @@ export declare class SpacesManager {
|
|
|
45
47
|
private handleSpaceMemberUpdated;
|
|
46
48
|
private handleRoleUpdated;
|
|
47
49
|
private handleSession;
|
|
48
|
-
private
|
|
50
|
+
private handleUserUpdated;
|
|
49
51
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polfan-server-js-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.40",
|
|
4
4
|
"description": "JavaScript client library for handling communication with Polfan chat server.",
|
|
5
5
|
"author": "Jarosław Żak",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"html-webpack-plugin": "^5.5.0",
|
|
36
36
|
"jest": "^29.3.1",
|
|
37
37
|
"mini-css-extract-plugin": "^2.7.2",
|
|
38
|
-
"pserv-ts-types": "^0.0.
|
|
38
|
+
"pserv-ts-types": "^0.0.26",
|
|
39
39
|
"style-loader": "^3.3.1",
|
|
40
40
|
"terser-webpack-plugin": "^5.3.5",
|
|
41
41
|
"typescript": "^4.9.4",
|
|
@@ -45,14 +45,14 @@ import {
|
|
|
45
45
|
CreateMessage,
|
|
46
46
|
Envelope,
|
|
47
47
|
PermissionOverwrites,
|
|
48
|
-
|
|
48
|
+
PermissionOverwritesUpdated,
|
|
49
49
|
RoomMemberUpdated,
|
|
50
50
|
UpdateRole,
|
|
51
51
|
RoleUpdated,
|
|
52
52
|
AckReports,
|
|
53
53
|
Ack,
|
|
54
54
|
GetAckReports,
|
|
55
|
-
|
|
55
|
+
UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated,
|
|
56
56
|
} from "pserv-ts-types";
|
|
57
57
|
import {EventTarget} from "./EventTarget";
|
|
58
58
|
|
|
@@ -121,13 +121,14 @@ export type EventsMap = {
|
|
|
121
121
|
Session: Session,
|
|
122
122
|
Permissions: Permissions,
|
|
123
123
|
PermissionOverwrites: PermissionOverwrites,
|
|
124
|
-
|
|
124
|
+
PermissionOverwritesUpdated: PermissionOverwritesUpdated,
|
|
125
125
|
// Space events
|
|
126
126
|
SpaceJoined: SpaceJoined,
|
|
127
127
|
SpaceLeft: SpaceLeft,
|
|
128
128
|
SpaceMemberJoined: SpaceMemberJoined,
|
|
129
129
|
SpaceMemberLeft: SpaceMemberLeft,
|
|
130
130
|
SpaceMemberUpdated: SpaceMemberUpdated,
|
|
131
|
+
SpaceUpdated: SpaceUpdated,
|
|
131
132
|
SpaceDeleted: SpaceDeleted,
|
|
132
133
|
SpaceMembers: SpaceMembers,
|
|
133
134
|
SpaceRooms: SpaceRooms,
|
|
@@ -143,12 +144,13 @@ export type EventsMap = {
|
|
|
143
144
|
RoomMembers: RoomMembers,
|
|
144
145
|
NewRoom: NewRoom,
|
|
145
146
|
RoomDeleted: RoomDeleted,
|
|
147
|
+
RoomUpdated: RoomUpdated,
|
|
146
148
|
// Topic events
|
|
147
149
|
NewTopic: NewTopic,
|
|
148
150
|
TopicDeleted: TopicDeleted,
|
|
149
151
|
NewMessage: NewMessage,
|
|
150
152
|
AckReports: AckReports,
|
|
151
|
-
|
|
153
|
+
UserUpdated: UserUpdated,
|
|
152
154
|
};
|
|
153
155
|
|
|
154
156
|
/**
|
|
@@ -157,13 +159,14 @@ export type EventsMap = {
|
|
|
157
159
|
export type CommandsMap = {
|
|
158
160
|
// General commands
|
|
159
161
|
GetSession: [GetSession, EventsMap['Session']],
|
|
160
|
-
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['
|
|
162
|
+
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],
|
|
161
163
|
GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],
|
|
162
164
|
GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],
|
|
163
165
|
// Space commands
|
|
164
166
|
JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],
|
|
165
167
|
LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],
|
|
166
168
|
CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],
|
|
169
|
+
UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],
|
|
167
170
|
DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],
|
|
168
171
|
GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],
|
|
169
172
|
GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],
|
|
@@ -177,6 +180,7 @@ export type CommandsMap = {
|
|
|
177
180
|
LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],
|
|
178
181
|
CreateRoom: [CreateRoom, EventsMap['NewRoom']],
|
|
179
182
|
DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],
|
|
183
|
+
UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],
|
|
180
184
|
GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],
|
|
181
185
|
// Topic commands
|
|
182
186
|
CreateTopic: [CreateTopic, EventsMap['NewTopic']],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
2
|
import {
|
|
3
3
|
PermissionOverwrites,
|
|
4
|
-
|
|
4
|
+
PermissionOverwritesUpdated,
|
|
5
5
|
PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,
|
|
6
6
|
} from "pserv-ts-types";
|
|
7
7
|
import {EventHandler, EventTarget} from "../EventTarget";
|
|
@@ -16,7 +16,7 @@ const getOvId = (
|
|
|
16
16
|
targetId?: PermissionOverwrites['targetId'],
|
|
17
17
|
) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');
|
|
18
18
|
|
|
19
|
-
const getOvIdByObject = (overwrites: PermissionOverwrites |
|
|
19
|
+
const getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(
|
|
20
20
|
overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId
|
|
21
21
|
);
|
|
22
22
|
|
|
@@ -27,7 +27,7 @@ export class PermissionsManager extends EventTarget {
|
|
|
27
27
|
public constructor(private tracker: ChatStateTracker) {
|
|
28
28
|
super();
|
|
29
29
|
this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));
|
|
30
|
-
this.tracker.client.on('
|
|
30
|
+
this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));
|
|
31
31
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
32
32
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
33
33
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
@@ -125,7 +125,7 @@ export class PermissionsManager extends EventTarget {
|
|
|
125
125
|
return this.resolveOverwritesHierarchy(await Promise.all(promises));
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
private handlePermissionOverwrites(ev:
|
|
128
|
+
private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {
|
|
129
129
|
this.overwrites.set([getOvIdByObject(ev), ev]);
|
|
130
130
|
this.emit('change');
|
|
131
131
|
}
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
Room, RoomDeleted,
|
|
5
5
|
RoomJoined, RoomLeft,
|
|
6
6
|
RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,
|
|
7
|
-
RoomMemberUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,
|
|
7
|
+
RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,
|
|
8
8
|
SpaceMemberUpdated,
|
|
9
9
|
Topic,
|
|
10
10
|
TopicDeleted,
|
|
11
|
-
|
|
11
|
+
UserUpdated,
|
|
12
12
|
} from "pserv-ts-types";
|
|
13
13
|
import {ChatStateTracker} from "./ChatStateTracker";
|
|
14
14
|
import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
|
|
@@ -30,6 +30,7 @@ export class RoomsManager {
|
|
|
30
30
|
this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
|
|
31
31
|
this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));
|
|
32
32
|
this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));
|
|
33
|
+
this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
|
|
33
34
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
34
35
|
this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));
|
|
35
36
|
this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));
|
|
@@ -39,7 +40,7 @@ export class RoomsManager {
|
|
|
39
40
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
40
41
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
41
42
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
42
|
-
this.tracker.client.on('
|
|
43
|
+
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
43
44
|
this.tracker.client.on('Session', ev => this.handleSession(ev));
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -186,6 +187,14 @@ export class RoomsManager {
|
|
|
186
187
|
this.addJoinedRooms(ev.room);
|
|
187
188
|
}
|
|
188
189
|
|
|
190
|
+
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
191
|
+
this.list.set({
|
|
192
|
+
...this.list.get(ev.room.id),
|
|
193
|
+
name: ev.room.name,
|
|
194
|
+
description: ev.room.description,
|
|
195
|
+
} as Room);
|
|
196
|
+
}
|
|
197
|
+
|
|
189
198
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
190
199
|
this.deleteRoom(ev.id);
|
|
191
200
|
}
|
|
@@ -235,7 +244,7 @@ export class RoomsManager {
|
|
|
235
244
|
this.deferredSession.resolve();
|
|
236
245
|
}
|
|
237
246
|
|
|
238
|
-
private
|
|
247
|
+
private handleUserUpdated(ev: UserUpdated): void {
|
|
239
248
|
this.members.items.forEach((members) => {
|
|
240
249
|
const member = members.get(ev.user.id);
|
|
241
250
|
|
|
@@ -4,11 +4,24 @@ import {
|
|
|
4
4
|
NewRole,
|
|
5
5
|
NewRoom,
|
|
6
6
|
Role,
|
|
7
|
-
RoleDeleted,
|
|
8
|
-
|
|
7
|
+
RoleDeleted,
|
|
8
|
+
RoleUpdated,
|
|
9
|
+
RoomDeleted,
|
|
10
|
+
RoomSummary,
|
|
11
|
+
RoomUpdated,
|
|
12
|
+
Session,
|
|
9
13
|
Space,
|
|
10
|
-
SpaceDeleted,
|
|
11
|
-
|
|
14
|
+
SpaceDeleted,
|
|
15
|
+
SpaceJoined,
|
|
16
|
+
SpaceLeft,
|
|
17
|
+
SpaceMember,
|
|
18
|
+
SpaceMemberJoined,
|
|
19
|
+
SpaceMemberLeft,
|
|
20
|
+
SpaceMembers,
|
|
21
|
+
SpaceMemberUpdated,
|
|
22
|
+
SpaceRooms,
|
|
23
|
+
SpaceUpdated,
|
|
24
|
+
UserUpdated
|
|
12
25
|
} from "pserv-ts-types";
|
|
13
26
|
import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
|
|
14
27
|
import {reorderRolesOnPriorityUpdate} from "./functions";
|
|
@@ -25,7 +38,9 @@ export class SpacesManager {
|
|
|
25
38
|
public constructor(private tracker: ChatStateTracker) {
|
|
26
39
|
this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));
|
|
27
40
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
41
|
+
this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
|
|
28
42
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
43
|
+
this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));
|
|
29
44
|
this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));
|
|
30
45
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
31
46
|
this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));
|
|
@@ -33,7 +48,7 @@ export class SpacesManager {
|
|
|
33
48
|
this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
|
|
34
49
|
this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));
|
|
35
50
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
36
|
-
this.tracker.client.on('
|
|
51
|
+
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
37
52
|
this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));
|
|
38
53
|
this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));
|
|
39
54
|
this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));
|
|
@@ -117,8 +132,19 @@ export class SpacesManager {
|
|
|
117
132
|
this.rooms.get(ev.spaceId)?.set(ev.summary);
|
|
118
133
|
}
|
|
119
134
|
|
|
135
|
+
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
136
|
+
if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {
|
|
137
|
+
const rooms = this.rooms.get(ev.room.spaceId);
|
|
138
|
+
rooms.set({
|
|
139
|
+
...rooms.get(ev.room.id),
|
|
140
|
+
name: ev.room.name,
|
|
141
|
+
description: ev.room.description,
|
|
142
|
+
} as RoomSummary);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
120
146
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
121
|
-
if (ev.spaceId) {
|
|
147
|
+
if (ev.spaceId && this.rooms.has(ev.id)) {
|
|
122
148
|
this.rooms.get(ev.spaceId).delete(ev.id);
|
|
123
149
|
}
|
|
124
150
|
}
|
|
@@ -129,6 +155,13 @@ export class SpacesManager {
|
|
|
129
155
|
this.list.get(ev.spaceId).roles = collection.items;
|
|
130
156
|
}
|
|
131
157
|
|
|
158
|
+
private handleSpaceUpdated(ev: SpaceUpdated): void {
|
|
159
|
+
this.list.set({
|
|
160
|
+
...this.list.get(ev.space.id),
|
|
161
|
+
name: ev.space.name,
|
|
162
|
+
} as Space);
|
|
163
|
+
}
|
|
164
|
+
|
|
132
165
|
private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {
|
|
133
166
|
this.roles.delete(ev.id);
|
|
134
167
|
this.members.delete(ev.id);
|
|
@@ -211,7 +244,7 @@ export class SpacesManager {
|
|
|
211
244
|
this.deferredSession.resolve();
|
|
212
245
|
}
|
|
213
246
|
|
|
214
|
-
private
|
|
247
|
+
private handleUserUpdated(ev: UserUpdated): void {
|
|
215
248
|
this.members.items.forEach((members) => {
|
|
216
249
|
const member = members.get(ev.user.id);
|
|
217
250
|
|